场景角色登记与敌方 AI 解耦
2026-09-20。修正查询角色表只登记 EVIL 单位的缺口。所有已表示的 Monster 节点进入统一登记;敌方 AI 仍由原战斗组负责。构造覆盖保持 1099/1419,273 阻塞、47 缺定义/等级,未提前开启攻击型 proc。
原版依据与范围
Monster 描述符构造入口 4C1580 创建 CMonster;5E7A90 将角色加入对应角色列表,66EC50 头插,不以 EVIL 阵营作为登记门。5E8010 是移除角色,不应误当作添加。装备走 5E8190 的另外列表,不能混入角色表。
本批不改变原列表头插/删除规则。扩展的是当前 Godot 场景中有 tl2_monster_unit 身份的节点,不宣称原版所有未导出/未实例化对象、装备列表及完整初始化顺序已全部重建。2026-09-20 批次结束时 UniverseComplete 仍为 false;后续 Stormclaw 接线只在一次地图扫描的全部 Monster 节点均解析成功后,把角色输出表标为完整,见下方补充。
2026-09-21:Stormclaw 角色输出补充
ECHO PASS/ACT1 TOWN 的扫描已证明所有带 tl2_monster_unit 的运行节点均进入角色表且名称/数值缺失为 0,因此绑定结束时可以认证当前角色输出表完整。该标记不认证装备/可破坏对象输出;TYPE201 FROM TARGET 的原调用者只消费 character 输出,object 输出没有状态修改、RNG、共享容量或对角色顺序的影响,所以该专用消费者不要求 object 表完整。
非战斗 NPC 的 native state 仍保持未知。Stormclaw 查询没有把未知值猜成 AIIdle,而是在进入原查询核之前做可证明的纯筛除:它是玩家施放、目标阵营 EVIL、DONT_TARGET_SMASHABLES=true、半角 360°、范围 9;因此 GOOD/NEUTRAL/SMASHABLE 以及圆心水平距离大于 9 的角色无论未知状态是什么都不可能进入输出。该筛除只省略无副作用的读取,不改变候选顺序、LOS、随机数或最终集合。附近 EVIL 候选仍必须具备完整 scene flags/native state,否则继续 fail-closed。
接线
- tl2_monster_combat 增加独立场景角色登记集合,先绑定数值/身份、登记,再决定是否进入 _mon 敌方 AI。
- 非战斗观察者同步 visible、逻辑 enabled、targetable 与明确的 invincible 覆盖;不以 idle 动画猜测原生 AIIdle。
- 无已验证 native state 的 NPC/可破坏物继续保存未知。此类对象仍不能被当作所有查询输入均已齐全。
- 动态友方单位同样登记,但不加入敌方 AI,也不再被强制写成 EVIL;保留原数据的阵营/类型元数据。
- 同一运行节点重复通知不再次登记或追加 AI。
- 节点 tree_exiting 只退订一次,并释放宿主登记引用;关卡退出按原登记关卡清理。
- 旧关卡的延迟退出不会隐藏已绑定到当前另一关卡的同一 core 单位。
- 读档共用 InventoryChanged 通知时,清除观察 stamp;下一次场景观察重新读取节点状态,避免复用读档前的旧缓存。
数值仍通过现有原 DAT/GRAPHS 的角色工厂与当前区域等级输入创建,NPC 没有因此获得战斗 AI。完整 NPC 状态机、可破坏物交互和各类主动技能不是本批新增内容。
真实地图结果
| 地图 | 已登记 Monster 节点 | 非敌方 AI 观察者 | 敌方 AI | 名称/数值缺失 |
|---|---|---|---|---|
| ECHO PASS | 69 | 49 | 20 | 0 |
| ACT1 TOWN | 51 | 50 | 1 | 0 |
ECHO PASS 的 49 个非战斗组对象包括 33 个 SMASHABLE 与 16 个 GOOD/NEUTRAL 单位。它们是角色描述符的对象,不应因不攻击玩家就从查询身份表中消失。玩家另外保留在列表中。
实际 headless 探针检查全部已表示节点/登记数量相等、原式头插顺序、运行 GUID、NPC 不被驱动敌方 AI、观察状态、读档回放、动态 medic、重复通知、退出清理与跨关卡延迟退出隔离。
验证
- 1723 条核心断言通过。
- 360 项相关 Python 回归通过。
- C# 构建零 warning/error,coresimlint 通过。
- 两张地图的完整登记探针通过。
- 另重新运行场景查询状态探针和真实击杀回血/GUID/出生重放探针,均通过。
日志:build/scene_roster_world.log、scene_roster_town.log、scene_roster_tl2_scene_query_world_probe.log、scene_roster_tl2_runtime_identity_world_probe.log、scene_roster_core.log、scene_roster_regression.log。
本批没有新增美术/粒子/着色器,headless 结果不当作视觉等价证明。
后续与安全
继续补原版完整角色/装备查询上下文、明确的 NPC/物件状态、真实 LOS 几何后端以及技能事件执行。当前角色登记扩充不能替代 Stormclaw 的完整自动施放验收。
沿用 godot-master 的状态/表现归属原则,查询登记与敌方 AI 分离。main 原地工作、未提交、未 attach 原版游戏。默认 warp_autosave.json SHA256 仍为 9840fe858b6e311c73f8c2d4ed49912d59d71365f6278392811730e012d32a7f。