场景角色登记与敌方 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 PASS6949200
ACT1 TOWN515010

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。