# 武器-FM转换的原理
在#1M0UEvEr (Rockman) 我们有介绍过武器-FM的转换,
大致上就是,FM列表有一百个字段,
然而用手动整理可以发现底下多出了第101格,
而且这一格的内容随着武器列表的第一格的内容,有一一对应的关系。
详细的过程请参考上面那篇文章。
在这个过程中,玩家很容易会发现,空格是真的有意义的。
游戏真的有记得道具栏有哪些格子是空的。
实际上去看内存,每个空格是用4个Byte,
FM的字段总共是400个Byte的内存;
紧接着就是武器的字段,相同的每个空格都是用4个Byte。
因此,FM的第101格,刚好就会指向武器栏的前4个Byte。
经过研究,GC版的储存方式和PS2版有一些微妙的差异。
GC 物品种类 现有个数 已装个数 00
PS2 物品种类 00 现有个数 已装个数
# 武器复制的原理
如果你的FM字段第一格是“雷防盾两张”
而且目前身上“已经有人装了一个雷防盾”
GC版中,内存的部份就会长的像 2F 02 01 00
2F是雷防盾
02是现在有两张
01是已经有人装了一张(所以你卖掉东西的时候这格子会显示0,不会不见)
00目前没看出来可以干嘛 似乎不会变成其他数字
于是 当你如果试着要装备上“其中一张雷防盾”
这四个byte就会变成 2F 01 02 00
可以看到第二格会-1 第三格会+1
如果现在身上是0个,那么这个格子就会变成灰色,没有办法装备。
如果把这格雷防盾手动整理移到第101格,
2F 01 02 00 的情况下,
那么武器栏的第一格就会把2F当成艾克斯炮MK3;
01是现有1个,02是已经有装备了两个(虽然是假的)
选择装上武器,武器栏的第一格会变成 2F 00 03 00
这时候如果用FM选单把他移开,武器栏第一格就会是空的。
然后,用其他武器替换掉当前装备的X炮MK3,
换下来的X炮MK3找不到现有的 2F xx 01 00 的格子 (因为刚才被我们搬走了)
这种时候游戏的行为会选择 "生出一个这样的格子",
位置会是武器栏最上面的空位。
于是第一格武器会变成 2F 01 00 00
好,把它搬到第二格,把第一格空出来,
然后把刚才搬去FM列表那格搬到101格,也就是武器栏的第一格──
这样武器栏内存应该会是
2F 00 03 00 (第一格)
2F 01 00 00 (第二格)
所以会分别显示成“0个X炮MK3”和“1个X炮MK3”。
如果这时候想要装上X炮MK3,第一格会是灰色的,但是第二格会是亮的。
选择第二格装上,他会让 "同样都是X炮MK3的格子都执行一样的操作"
所以第二格会变成 2F 00 01 00,情况看起来很正常;
第一格原本是 2F 00 03 00,
第二个byte-1,第三个byte+1,所以他会变成 2F FF 04 00
也就是说,系统会判定第一格变成255个X炮MK3,这就是武器的复制。
除了武器的复制以外,FM的复制概念也是很接近的。
基本上也是透过"两格重复的物品"的行为来复制。
# 修改相关
如果是用模拟器搭配Cheat Engine,理解资料之后可以简单的直接搜寻 Array of Bytes
像是如果我知道FM的前三格分别是LE+100两张、LE+300一张、WE+5三张,
都没有人正在装备中:
我就能够预期他应该会对应到
GC版 01 02 00 00 02 01 00 00 05 03 00 00
PS2版 01 00 02 00 02 00 01 00 05 00 03 00
连续准备好8~16个byte的内容就比较有把握找到;
如果没有把握“已经装备了多少个”,那么可以打??代替。
不过这边有比较需要注意的是,
CheatEngine如果要搜寻Dolphin的内存,
需要去 Edit->Settings->Scan Settings 里面勾选搜寻 MEM_MAPPED 区域。
最后,
哪个FM或哪个武器分别对应到什么数值,
请参考列表 https://reurl.cc/D9Ydmd
列表中同时有附上一些PS2和GC专用的“无名FM”效果,会在下一篇中作介绍。