把Pokemon从魔改386带到HOME的全过程

背景

倒腾旧电脑从硬盘里翻出了08年的绿宝石386存档,在各种幼年魔术师产物中翻出了少量正经通关队,正好新入了3DS,送到新世代的理论和基建都完备!开搞!

走线路径

  • 模拟器:绿宝石386(基于日版) -> 日文原版绿宝石 -> 魂银(日版)-> 黑(美版)
  • 3DS -> NS:黑 -> Y -> Bank -> HOME

绿宝石386 -> 日版绿宝石

魔改的绿宝石386和NDS模拟器的slot2不兼容,只能先把386存档洗白到原版绿宝石再作打算。

宝可梦WIKI所说,VBA早期的存档格式比较独特。且正好386是64KB的存档但原版是128KB,直接导入电池存档会导致白屏。

  • 早期的版本对128KB存档不完全兼容,386的ROM可以导入128KB存档,导出只支持64KB。

但是,无论flash格式如何,在SRAM里格式至少肯定是一致的,再通过简单的观察可得其内存也不是非常安全,可以考虑利用BUG进行存档迁移。

工具

只保证以下版本可以work:

  • GBA模拟器:VBA v1.72简体中文修正版
    • VBA-m v2.1.11打不开386魔改版的ROM
  • ROM:口袋吧原装386,日版绿宝石
    • 386是基于日版汉化+魔改的,虽然理论上英版日版的存档互通,但为了减少变量还是推荐用日版
  • 存档:386的.sav存档,如果是64KB需要转换,128KB理论和原版兼容

存档位置

VBA及VBA-m的.sav文件存放在ROM同一目录下,文件名和ROM相同仅后缀名为.sav。 理论上386的存档会是一个64KB的.sav,如果是128KB的话应该可以直接跳过转换步骤。 mGBA的.sav应该在GBA文件夹下。

存档格式转换(复现失败)

参考宝可梦wiki,G3的存档结构已知,也许可以按照这篇帖子进行转换。

  • 也许是386魔改的原因,存档用text editor模式打开只有210行,定位不到帖子的line 3585(十六进制的话行地址也不会是5结尾吧……?)

利用BUG迁移

根据SRAM中存档格式一致的推测,如果先打开386的ROM及存档,并在存档内容被clear掉之前加载原版绿宝石的ROM,且该ROM没有对应flash存档的前提下,有概率会直接读取前一个游戏中SRAM对应内存区域(不知道load具体逻辑是什么,但体感是优先检测有无.sav)。

为了加大成功概率,考虑在存档/读档(这时候可能会锁一下SRAM?)的同时load另一个ROM。

具体步骤

  1. 备份存档,自动保存实属一生之敌
  2. 所需食材
    • 386的ROM
    • 386的存档(64KB)
    • 日版绿宝石的ROM

  3. 用VBA打开386的ROM和存档,进游戏先保存一次,在存档结束前打开原版绿宝石的ROM(请勿断电时断电x)。

    建议切换ROM时保存的存档和现有存档保持一致(防止save真的不是原子操作导致存档损坏)

  4. 严格按照上述操作大概率一次成功,迁移失败的话每次删掉原版自动产生的.sav再卡几次。注意即使是完全初始状态的ROM,切出时也会自动保存。

题外话

之所以推测是SRAM在两次load之间存在内存泄漏,主要是手滑打开红宝石时正好触发该(会导致死档的恶性)BUG。果然保存时不要断电是有道理的……

日版绿宝石 -> Gen4

这部分的教程还挺多的,但大部分是实体机或者安卓,但实操的时候很多模拟器识别卡带失败(也不太带细节)

Draft

存档要求

Gen4 -> Gen5

用到的功能应该是Download Play,目前支持这个的模拟器应该只有MelonDS。

存档要求

  • gen4 大概不太有什么要求,但毕竟前一步都要求再pal park了,就默认在了吧
  • gen5 需要人在传输工厂,和npc对话之后host这个传输过程

  • TODO:把能用的ROM pairs放上来

TroubleShooting

总是连接错误或者显示没有compatible的游戏卡带(根据各论坛的说法的诱因可能有:

  • gen4和gen5的卡带语言版本不同(日版/美版/欧陆各语言版) image 不兼容就是不兼容(被气到想直接PKHex复制内存的程度)
  • 存档和卡带的语言版本不同可能会有影响?(总之为了减少无关变量我全改成了英文版存档,但理论上没问题) image 不建议这么干(以及直接用DSi的Console比较好)
  • 为了防止引入奇怪变量,建议时不时用PKHex检查存档及pokemon的合法性(毕竟从奇妙改版掏出来的东西或多或少有机会不对劲) image

步骤记录

  • 虽然其他教程说直接用DS的BIOS7和BIOS9 firmware就可以work,但可能年代久远(?),最后我是用了melonDS的DSi模拟器,并且gen4作为wifi的host机,gen5加入连接才成功的(不太清楚为什么反过来容易连接错误(比如这样: image
  • 多个教程均提到帧率越高越容易成功链接(不知道原理)。实操的时候建议melonDS双开的时候可以一个关掉帧率限制,另一个用快捷键控制是否锁帧(回自动同步),如果直接两个都开无限制的话会卡死闪退。
  • 成功了大概是这样,选就完事了 image

碎碎念

  • 捕捉的套圈小游戏还挺好玩的,接下来不知道直接送去实体机还是先送到gen6再去实体机(反正gen6就可以进bank,懒得再折腾去日月了(绝对不是因为充了一个月home会员不想续费,也不是因为做毕设和期末考试太忙,嗯嗯))

Gen6 -> Bank -> Home

有3ds实体机所以毫无技术含量,对Gen6的存档没有任何要求,只要box里有pkm就行(以及3ds能联网)

Gen6 -> Bank

进Bank,好像需要注册一个3ds账号,全免费直接照着做就行,然后就是呆呆兽也可以学会的简单操作

Bank -> Home

难度极高,主要体现为需要给Home氪金

Reference