Slide 1
先把游戏运行分成三层
执行文件负责跑流程,R3 文件负责给数据,前端分析器负责把二者解释成人能读懂的结构。
- REKO3.COM 启动主流程
- MAIN.EXE 读取剧本与资源
- SNR/地图/战斗数据驱动具体内容
Slide 2
启动链不是只有 MAIN.EXE
旧 exe-analysis 已确认 REKO3.COM 会启动声音、图形、驱动和主程序模块。MAIN.EXE 是主游戏逻辑核心,但不是孤立运行。
- SBOPL2.COM:声音相关
- GRPDRV.EXE:图形驱动相关
- TFDED.COM:运行桥接服务
- OPEN.EXE / MAIN.EXE / END.EXE:开场、主流程、结尾
Slide 3
SNR 文件通过模板加载
MAIN.EXE 中不是逐章写死 SNR0D-SNR4M,而是出现 A:SNRxD.R3 与 A:SNRxM.R3 模板,运行时替换 x。
- A:SNRxD.R3:剧情指令流模板
- A:SNRxM.R3:文本/附属内容模板
- 逐章字面量缺席反而支持模板构造
Slide 4
地图转场由 SNR 给时间线
SNR 0x09/0x11 决定进入什么场景,MAIN.EXE 侧再按资源簇读取 PMAP、MMAP、SMAP 或 ZMAP 所需数据。
- 0x10:MMAP 大地图
- 0x20:PMAP 剧情地图
- 0x2F:SMAP 城市/店铺
- 0x30:ZMAP 战场
Slide 5
MAIN 到 TFDED/GRPDRV 是图形桥
MAIN.EXE 内有 int 62h、0000:6B2C、0CF6:0000 等桥接锚点。它们说明主程序会把图形请求交给运行服务和图形驱动处理。
- MAIN 组织游戏逻辑
- TFDED 承接运行时请求
- GRPDRV 负责底层图形输出
- 前端渲染规则需要和这条链保持一致
Slide 6
战场核心落在 CF6A 与 D076
CF6A 是战场全局状态候选,D076 是作战单位槽位候选。它们把剧本事件变成回合、天气、单位坐标、登场、撤退和状态变化。
- CF6A:回合、天气、战场状态、过关经验候选
- D076:45 个单位槽位,每槽 0x0E 字节候选
- 援军、伏兵、撤退最终都应落到单位结构
Slide 7
静态分析已经够用,但还不是终点
目前能定位资源、模板、桥接点和字段候选。真正确认字段含义,还需要运行时 dump 和具体战场对照。
- 静态完成:资源簇、模板、补丁锚点、字段候选
- 待确认:opcode dispatch、D076 写入顺序、CF6A 字段 offset
- 验收命令:npm run audit:main-exe 与 npm run audit:main-p1
一句话总结
执行文件负责把 SNR 剧本、R3 资源、地图转场和战场运行结构串起来;当前静态证据已经建立主链路,最终字段确认需要运行时 dump。
建议阅读路径
先看 SNR 剧本结构,再看 PMAP/MMAP/ZMAP 地图可视化,最后回到本页理解 MAIN.EXE 如何执行这些数据;需要更细的接口、参数和后续处理,可继续查看 MAIN.EXE 内部运行时序报告。