老游戏双机移植台
移植老游戏时同步运行原版与新版,自动定位手感或逻辑首次偏离的代码位置。
老游戏作者准备把一套 68000 汇编逻辑移到 Godot 时,最难的往往不是让新版跑起来,而是确认它还保留了原作的手感。开发者把原版接入模拟器,再上传现代移植版的可运行构建,并录下一段按键或手柄操作。产品让两个版本吃进完全相同的输入,逐帧记录画面、碰撞、音频时序和关键内存状态。
一旦两边开始分叉,界面不会只说“测试失败”。它会停在最早偏离的一帧,提供前后几秒的双画面对照,并把这一段相关的汇编、现代代码和运行轨迹放在一起。模型只围绕这小段上下文解释可能的行为差异,开发者可一键导出最小复现包交给协作者。
首版优先支持确定性较强的 2D 游戏,以及键盘和常见手柄输入。它不自动把整套汇编翻译成新引擎代码,也不替作者决定哪些旧缺陷该保留。它负责把“感觉不一样”缩成一处可以重放、讨论和修复的偏差。
为什么是现在
9月1日,一位作者公开了用 LLM 将 68000 汇编游戏移到 Godot 的过程,却仍靠人工判断新版手感。S1 9月4日抓取时,相关 Hacker News 讨论位列第10,获177 points和57条评论,并有人直接追问能否让移植版与 UAE 使用相同输入。S2
目标用户
用户是握有原始源码、磁盘镜像或旧构建的独立作者。关键时刻是新版已能通关,却总有跳跃、碰撞或音效不对劲。此时普通单元测试只能证明新代码自洽,不能证明它忠于原作。协作者又未必理解旧汇编,定位偏差常退化为反复试玩和凭感觉调参。
最小切入点
先做桌面端本地运行器,限定 FS-UAE 与 Godot 4。原版侧注入逐帧输入,并读取指定内存区。Godot 侧通过 Input.parse_input_event() 重放按键与手柄事件。S3 两边统一产出帧号、画面哈希和用户声明的状态字段。首个版本不猜测全部内存含义,只比较作者标注的地址与变量。发现分叉后保留前后短片、输入序列和双方日志。代码关联先依赖地址映射、符号表和用户选定文件,不承诺自动理解整套汇编。
以小博大
第一批用户可从 Amiga、Atari ST 和复古游戏移植社区触达。用一个开源示例仓库展示跳跃弧线首次偏离的完整过程。随后把运行器接入 Godot 插件目录,并发布可复用的测试夹具。每个公开复现包都应保留原作者项目链接,让工具借真实移植案例传播,而不是依赖泛化的 AI 编程宣传。
竞品与缝隙
怎么赚钱
按项目订阅收费,包含本地运行器、固定数量的协作者席位和测试历史。模拟器镜像、ROM 与游戏素材由客户自行提供。团队需要长期保存构建和回归记录时,再升级到更高存储档。
反方视角
双端确定性会先吞掉大量工程时间。原版可能按 50 Hz 更新,新版却按另一频率处理物理与输入。音频缓冲、浮点误差和画面特效都会制造无意义差异。模拟器每帧输入也未必对应原作实际读取手柄的时点。若没有作者提供内存地址和现代状态字段,系统只能看到像素分叉,无法可靠指向代码。ROM、Kickstart 和商业素材还涉及授权边界,云端托管会增加合规负担。错误归因若频繁把视觉噪声当成手感问题,作者很快会回到人工试玩。