原版库为E:/Torchlight 2/Torchlight2.exe.i64,EXE SHA256为186472c3057b38f4cdff4696959a943c396ae6166995f7418997b5ea853e8a5e。
身上与装备是两条不同路径
53D3C0 → 53C7E0扫描身上PASSIVE/DYNAMIC两桶。概率来自evalEffectValue,先经__ftol2_sse截断为整数,再与volatile rand(0,100)比较。100%仍消耗骰;冷却拒绝通常只跳过当前效果。183成功请求施法返回0,结束当前桶,后续桶和装备仍可继续。
7C8130 → 7CB870 → 582380扫描可装备容器/槽位,每件装备之后处理直接嵌入物,不排除副手、HIDDEN或StatsEnabled=false。它扫描三桶,概率用evalSlot(0)的float,不用身上路径的缓存整数;缺技能管理器在掷骰前退出,冷却/范围/watcher失败会结束该装备的全部剩余桶,但不阻止宝石或下一件装备。
每个装备在掷骰前用6D1DF0把当前volatile种子复制给技能管理器,这一步不推进随机数。身上路径没有这次装备管理器重设。不能让所有proc共用一套假定种子或通用百分比短路。
FROM TARGET门禁订正
旧文将53C7E0的a6误记成srcSkill。53D3C0调用点明确传入a5=0、a6=broadcast、a7=srcSkill、a8=strikeFlags。因此if(other && a6)检查的是other和广播开关,不是必须来自技能攻击。装备分支的if(a4 && a5)同理。
角度由synced流的676E70产生(两次MWC步),再用volatile整数随机选择锥内目标;零/单个候选不推进选择骰。关闭广播的回放不重复生成目标侧施法。技能管理器owner、caster、空间原点与被选择target必须分别保存。
198/199/200/201清空gate target并跳过范围门,207/209/211不这样处理。查询必须保持概率 → 技能查找 → source-skill/skill-strike门 → 冷却 → 范围/watcher → 空间选择的顺序,不能提前进行不需要的世界查询。
等级与冷却
514AB0写入技能+288的slot1 override现已确认是 CHARGES(6C2690读取同名DAT键),与effect.Level/技能+204独立;slot1先截断,零改为−1。6D6C00通常强制clone,183可在effect owner处复用;6D78F0会对同名字的多个实例设置等级。成功施法时6D3B80按首个同名实例的正charges递减并写回全部同名实例;proc直接执行不走手动施法的零charges门。详见回复proc核验。
触发先按名字及effect level查找,再按名字回落。回落得到的实际实例等级、slot1 override不能被lookup level覆盖。 6D2D60按底层定义指针,在active及registered列表中检查float冷却+240,跨同定义的不同实例/等级,而非简单按词缀单独计时。
CAN_PROC_FROM_SKILL缺省为true(6C33F0),WC_STORMCLAW PROC显式false。装备wrapper并不接收身上路径的srcSkill/strikeFlags参数,不能给它凭空加相同的否决门。
死亡时序与真实技能
54E3F0先发送死亡事件,再触发203、204。成长奖励若在死亡事件中授予proc,可以在同一次击杀参与后面的proc处理。
WC_PROC_FULLHEAL通过EVENT_START挂HP RECHARGE PLAYER(124)、DURATION1、Max HP属性修正和health_potion主题,不能在未还原修正/tick链之前直接替换成Hp=MaxHp。 AXE_U05X同时有AXETHROW技能声明与CAST SKILL词缀;接入时应核准两条入口,避免在既有投斧实现上重复发射。
当前状态
后续原版碰撞资源缓存完成2607个显式代理普查,2325严格加载、282解析告警保留待查;1160核心断言/84项相关检查通过。整场景实例选择/变换/分区尚未宣称完成,武器构造覆盖不变。
后续多面射线与法线缓存已通过8940/6783次原生对照,累计1156核心断言/81项相关检查;真实材质、分区、实例变换和攻击型proc仍继续,构造覆盖不变。
后续三角形内部与单三角射线通过9081/5595次原版EXE+Ogre对照,累计1151核心断言/77项相关检查;多面、真实法线和场景数据仍不冒称完成,构造覆盖不变。
后续碰撞平面数值核已完成9063次原版机器码逐位对照(PC=24/53/64),零差异;累计1147核心断言/73项相关检查。三角形内部、实际碰撞数据与线程精度仍未冒充完成,构造覆盖保持1053/1419。
后续原版注册顺序与proc遮挡策略接入头插/摘除顺序与v29保存,1144核心断言/69项检查及主场景顺序重放通过;已追清block-only共享参数。当前表仍不是完整原版单位全集,未因此开放攻击型proc。
后续场景目标标志与激活判定已接入观察到的visible/enabled/targetable/无敌标志与v28存档,并核实UNIT_LIGHT_FADE和ACTIVERANGEMOD;1127核心断言/65项相关Python检查通过。缺完整激活输入时Active保持未知,攻击型proc仍未虚增生产覆盖。
最新的目标过滤与角色归属核验已落地公共过滤流程、16技能目标参数与REQUIRES_TARGET门,1105核心断言/46项相关Python检查通过;确认目标侧发射仍优先用装备持有者计算伤害。完整世界输入/攻击执行仍待接入,构造覆盖不变。
后续已增加 TYPE81→WC_PROC_FULLHEAL,累计1053可构造(14成长)、319处理待补、47基础等级缺口;1068条核心断言/41项相关Python检查及怪物真实伤害帧重放通过。另订正了近身锥形判定与角色递归保护/装备冷却的区别,见最新批次。下段保留前批口径。
来源目录覆盖1419个武器:138个含170条字面proc,50个成长武器含50条proc奖励引用;16个可达技能全找到,并保留完整SKILL层级、其affix引用与LAYOUT/主题/属性依赖。两个武器集合可重叠。
前批989条断言/22项Python仅验证派发契约,不能等同技能执行。后续已接入 203→WC_PROC_FULLHEAL 的注册/charges/冷却、真实持续回复、成长同杀解锁、原版主题与v26存档,累计1018条核心断言、37项相关Python检查及主场景验收通过。覆盖为1050可构造(其中14成长)、322处理待补、47基础等级缺口。其他proc与完整施法/几何/召唤生命周期仍待补,见实现边界。
相关:效果完整语义、成长触发器、UNITTYPE两层加载。