原版加载证据

原版 E:/Torchlight 2/Torchlight2.exe.i64,EXE SHA256为186472c3057b38f4cdff4696959a943c396ae6166995f7418997b5ea853e8a5e64A590构造CHierarchy时同时传入 media/unittypes.hieMEDIA/UNITTYPES/;经644EC0/644E20进入643FC0

HIE有298个完整类型块;UNIQUEIDS:328是分配水位,不意味着缺30块。另有105个扩展DAT,因此运行时名字集合应包含403个类型。

643FC0先扫描全部扩展文件,为非空NAME分配超过HIE最大ID的编号,再解析每个扩展除NAME外的字符串字段,按已登记名字设置成员位。CHILD/CHILD1/CHILD2等是已展开的声明,不额外计算传递闭包。基于不存在名字的检查,必须在这两层加载之后判断。

被纠正的判断

  • BERSERKER、EMBERMAGE等职业名字由扩展DAT登记。BERSERKER属于PLAYER;“不在HIE,所以是死类型”的旧结论不成立,但这并不把错误填写PLAYER类型的胸甲变成ARMOR。
  • MONSTER_ZOMBIE显式包含MONSTER_UNDEAD;MONSTER_CHAMPION也是独立扩展类型。
  • BOSS_WEREWOLF的实际声明不包含MONSTER_CHAMPION。不能因为它是Boss,就人为为成长计数补一个冠军标记。
  • 单位类型查询511FA0以单位自身类型ID查成员位;不按模型路径猜种族。

移植保留HIE静态ID;扩展ID采用确定的F2文件名顺序,是内部编号,未证明数值等于原版PAK枚举的分配顺序。逻辑通过名字与声明关系解析,避免对扩展编号写死分支。

对全武器清单的影响

加入扩展后,武器定义从1415变为1419,新增的原始数据是:

  • AXES/VARKOLYNFIRST_1、AXES/VARKOLYNFIRST_2 → FIST。
  • POLEARMS/VARK_CHAMP_SPEAR、POLEARMS/VARK_CHAMP_SPEAR_ELE → POLEARM。

这些定义并非新造武器;之前的类型入口漏掉了它们。总数包含模板/怪物武器/不生成条目,不能等同可掉落装备数。

既有4049个affix定义与2193条有效武器literal引用没有增加。目录扩展不应把相同affix模板的冷/热缓存重置;兼容迁移需验证模板、类型标志、源字节不变,并以真实文件字节哈希关联旧缓存,不能忽略CRLF/LF差别。

相关:成长触发器词缀