原版三段世界射线与实际几何后端

2026-09-20。接通 5F3060 的三段世界射线控制和实际几何消费者,供 proc LOS 后续接入。不是把 Godot Physics 的单次 raycast 当作原版,也不是以半径为零的 sweep 替代 ray。

构造覆盖保持 1099/1419,273 阻塞、47 缺基础定义/创建等级。真实地图的完整碰撞对象/状态还未交给新后端,TYPE201/204 未提前开放;全武器目标未完成。

调用顺序与输出

NativeWorldRay.Run 对应原 5F3060:

  1. collision data、triangle buffer、partition 对象的根门;任一不存在,不进入任何阶段,也不写调用方输出。
  2. 可选初始单位/装备阶段 5E0930,传 literal block-only=true。
  3. 有 partition root 时收集静态候选;没有 root 仍调用静态段,只是候选为空。
  4. 4672E0 静态网格,保留传入的最近距离 marker。
  5. 按实时 count/slot 遍历附加 Room Piece,执行 622950;回调追加对象仍会被访问。

初始命中距离写回 float,同时初始化两个最近距离变量。静态段可能改写 surface/auxiliary,却不替换之前的世界点/法线:世界控制器只在两个已存 float 严格更小时复制静态点。Room Piece 则把保留 x87 精度的距离与先前 float 最近值比较,不能合成一条统一 float 比较。

共享输出属于原调用参数,不只属于最终选中的碰撞体。因此后续探针写入的 surface 可以保留,哪怕它不是最近点;auxiliary 在初始/附加房间选中时变为 (1,1,1),静态段按原顶点数据处理。

保留 miss 时调用者原有输出。NaN 边界参考也比较实际 marker 位模式,不以放宽断言掩盖 payload/sign 差异。

实际几何

  • NativeInitialRay:角色/装备列表按原次序读取,末项 next/head 的实时变化保留;block-only 跳过角色,对装备要求 COLLIDEABLE、当前碰撞开关与 BLOCK。
  • InitialObjectRay 对应 5128E0:模型门、先取 bounds max 再 min、原矩阵逆变换、可选 offset 对象的 stored position、4683C0/467600 射线三角形、点/法线回变换。这个路径不使用单位 stored scale。
  • IndexedRay 对应 4672E0:完整模型/逐面 bounds、保留候选顺序、候选 ordinal 索引的原 surface-filter 特例、x87 最近选择及辅助顶点平均。
  • Room Piece 重用已验证的 622950 包装器,保留可见/烘焙/终点距离门、旋转与 stored scale、NOPATH surface。
  • NativeGeometryWorldRayHost 将上述三者连接到必须提供的几何上下文;不对未知模型、分区或缺失世界返回伪造的 clear。

原机器码验证

EXE SHA256:186472c3057b38f4cdff4696959a943c396ae6166995f7418997b5ea853e8a5e。 OgreMain.dll SHA256:974c1dc77ea2818276cc7eb94a8b95b2cd6d516fdb67a1。

  • 3381 组控制器参考:原 5F3060、6834B0 和实际 Ogre 距离计算;几何阶段用显式命中/输出写入 spies,覆盖根门、静态返回值被忽略、surface/auxiliary、副作用追加与非有限边界。
  • 5040 组实际几何参考:1680 个单位列表射线、1680 个直接物件射线、1680 个完整三段世界射线;真实执行 5F3060/5E0930/5128E0/4672E0/622950 及三角形/Ogre运算,不 stub 几何命中。
  • 后一组只用明确的模型/bounds/pose/offset getter、链表变更和完整单面分区候选夹具;不能以此宣称全地图 loader 已验证。
  • PC24/53/64 的结果、调用顺序、命中点、法线、surface 和相关输出均与核心比较一致。
  • 另用原碰撞资产构建 NativeCollisionTreeBuilder/NativeCollisionQuadtree,实际通过组合后端求交。

原机器码在独立 32 位辅助进程中运行,没有 attach 游戏。为额外代码页扩大的是宿主映射表容量,不是原版游戏逻辑。相关参考生成器记录原文件及所有 harness 来源哈希。

回归与产物

1731 条核心断言通过;364 项相关 Python 回归通过;C# 构建零 warning/error,coresimlint 通过。本批没有新增视觉资源或修改画面,未用旧截图作为遮挡正确性的证据。

代码:core_sim/NativeWorldRay.cs、NativeInitialRay.cs。测试:NativeWorldRayChecks、NativeInitialCollisionChecks.RunRayReferences。 参考:build/native_world_ray_oracle/results.json、build/native_initial_ray_oracle/results.json;后者差异文件为空。 日志:build/native_world_ray_core.log、native_world_ray_regression.log、native_world_ray_build.log、native_world_ray_audit.log。

继续项与安全

下一段需要地图提供完整静态几何、分区、装备阻挡对象及独立 Room Piece 的实际姿态/状态,再绑定到 proc 目标查询;随后继续技能事件/线发射器回调和自动触发。新后端不等于真实地图 LOS 已全面接通。

按 godot-master 保持数值核和真实世界输入分离;没有借通用物理近似放行缺失实现。main 原地工作、未提交,默认 warp_autosave.json SHA256 仍为 9840fe858b6e311c73f8c2d4ed49912d59d71365f6278392811730e012d32a7f。