将《测试驾驶II》从超级任天堂移植到PC(第二部分):首个原生片头片段
在 asmdump 中的前两天专注于可度量性。接下来的阶段,从2月28日到3月2日,则聚焦于用原生代码替换一个狭窄的前端片段。
此时,项目不再仅仅证明它能够提取数据,而是开始证明它能够重现行为。
运行时目标刻意保持小巧
port/ 目录下的运行时环境从一开始就没打算在第一周就成为一个完整的游戏引擎。它只是一个用于已知资源和已知帧窗口的受控执行环境。
到这一阶段,port/README.md 已经描述了一个专注的运行时环境:
- 基于 SDL2 的窗口与渲染器
- 固定的 60 赫兹循环
- 256x224 像素的帧缓冲区
- 直接从提取的
显存 + 色彩寄存器 + 图形处理器状态渲染超级任天堂背景层 - 可选地从提取的对象属性内存合成精灵对象
- 对提取的场景窗口进行序列回放
- 通过索引调色板动画回放,实现紧凑的原生片段
最后一项区别立刻显现出了重要性。某些片头片段更适合以采样帧序列的形式表示,而另一些则更适合以由提取数据驱动的原生状态机来表示。
项目并未试图抽象地回答这个问题,而是通过一个具体场景给出了答案。
为何“弹道”启动画面是理想的首个目标
“弹道”片头片段清晰地锚定在第 654 帧。它同时也是一个优秀的工程目标:
- 在无输入条件下具有确定性
- 以表现效果为主,但结构简单
- 主要是一个由调色板驱动的背景层场景,而非大量使用精灵对象的游戏玩法状态
代码仓库最终包含了同一片段的三个版本:
- 来自确定性截图的测量参考片段
- 由辅助场景色彩寄存器数据及
A39C调色板渐变生成的、源自游戏卡带的片段 - 用于运行时直接回放的紧凑回调资源,通过
ballistic_a39c实现
这种演进过程至关重要。测量片段证明了该帧窗口应有的外观;源自游戏卡带的片段证明了资源路径能够从原始数据重建该画面;而回调资源则证明了运行时可以执行紧凑的原生表示形式,而不必回放一堆截图。
到 2026 年 2 月 28 日提交 aa67d27 时,代码仓库已直接标记了这一里程碑:“原生重现片头动画。”
混合回放是一种特性,而非妥协
本项目早期做出的最佳决策之一,就是允许使用混合清单,而不是强制将每个帧范围都采用同一种表示方式。
这产生了若干有用的运行时产物:
tools/out/ballistic_native_sequence.txttools/out/ballistic_rom_sequence.txttools/out/ballistic_callback_sequence.txttools/out/intro_loop_hybrid_sequence.txttools/out/intro_loop_hybrid_bridge_visible_sequence.txt
项目利用这些清单,在特定窗口尚未完全解决的情况下持续推进进度。
无输入的片头循环是最清晰的例子:
- 通过运行时直接调用
ballistic_a39c回放“弹道”片段 - 使用采样引导回放,衔接不稳定的
958..977帧窗口 - 通过队列驱动的
snes_bg替换方案处理第978帧和第982帧 - 后续的吸引状态可根据覆盖范围的改进,在采样片段与原生桥接可见窗口之间灵活切换
这是一种更优的工程实践
免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。