怪物农场2修改日志3 - 年轮

接上篇,怪物农场2修改日志2 - 奇妙能力歌

bgm是神秘妹纸唱的超好听的年轮

 

上篇中,我们顺利找到了"已收集怪物Id"这个列表.

接下来该做什么呢?

根据上篇的推理,当玩家生成新的怪物时,游戏程序会更新这个列表,加上新的怪物的id.

我们可以设置内存断点,在生成新怪物的时机中断,然后反推出生成怪物的数据(主要是id)来自何处.

 

我们读取没有生成169号クリック小朋友时的游戏记录,查看9703C,也就是"已收集怪物Id"列表.

可以看到,0x97151(278号的モッチー,0x9703C+278-1)为1,已经收集.

而0x970E4(169号的クリック小朋友,0x9703C+169-1)处为0,还未收集.

我们在0x970E4处下一个内存断点,然后从神殿生成クリック小朋友,看会不会触发断点.

在成功生成怪物后,给怪物取完名字,发现断点被触发了.因此是在生成怪物后,并且玩家确定要领养该怪物,并且给怪物取完名字,才会将该id添加到"已收集怪物Id"列表.

之前错误的认为,在生成怪物的时候,游戏程序便会去更新这个列表,现在看来是在生成怪物之后,游戏程序才会去更新该列表.

我们的确可以从这个时间点,反推出怪物id是从哪里得到的,但是路途似乎比较长了,难度似乎也很大.

 

再重新思考下游戏的处理过程.

1,从CDROM中读取数据.

2,根据数据计算出要生成的怪物的ID,以及其他初始数据.

3,如果怪物的生成条件不满足,则提示玩家该怪物还无法生成.

4,播放生成怪物的动画.

5,确认玩家是否要收养怪物,如果确定,将怪物ID添加到"已收集怪物Id"列表.

 

从步骤3可以知道,在生成怪物前,需要先查询指定id的怪物是否满足生成条件(实际是查询该种族的怪物是否能生成,而不是id,但是或许有办法通过怪物id找到怪物种族).

根据自己之前的资料,猜测怪物是否允许生成的条件也是存成一个数组(类似"已收集怪物Id"列表),且是按种族来存储的数组.
我们可以根据这些信息进行搜索.
1号种族 ピクシー 初期可再生,所以应该是01
2号种族ドラゴン 初期不可再生,所以应该是00
3ケンタウロス 初期不可再生,所以应该是00
4号 初期可再生 01
5 6 7 8号种族 初期都不能再生,因此是 00 00 00 00
一共有38个种族,根据初期是否可再生,在Snapshot文件中搜索如下字节系列.
01 00 00 01 00 00 00 00 00 01
 
Bingo! 在内存中确实能找到该字节序列.
 

得到内存中的地址应为 0x975e6-0x2B0 = 0x97336

我们用初期无法生成的三色鸟来验证该"种族允许生成"列表是否正确.
默认三色鸟初期是不能再生的,必须完成收集果冻贴纸相关事件后才能再生.
33ダックン 种族id是33.
那么地址是0x97336 + 33-1 = 0x97356
将0x97356处的内存修改为1,进入神殿,成功生成了三色鸟.
 
 
顺便找了下怪物农场2的金手指,发现9703C和97336这两个地址,其他人已经有找到了,不过没有关系,现在离目标更近一步了.
 
以下是我修改过的金手指,增加了#Unlock All Species部分.虽然比较丑,但是修改后可以生成所有种族的怪物了.
#Money Max
80096F6C E0FF
80096F6E 05F5
#Combat playerr Infinite Energy
801FFCDC 03E7
#Combat player Guts Infinite
801FFCFC 00FF
#Combat enemy energy 0
801FFC5C 0000
#Combat enemy energy 0 R2 + SELECT
D009185E 0102
801FFC5C 0000
#Enemy Guts Zero  R2 + SELECT
D009185E 0102
801FFC7C 0000
#All Monster Cards
50009802 0000
8009703C 0101
#All Emblem S
80097010 0001
80097014 0001
80097018 0001
8009701C 0001
80097020 0001
#Alway's Rank S
30095B42 0005
#Max Status
800959D0 03E7
800959D2 03E7
800959D4 03E7
800959D6 03E7
800959D8 03E7
800959DA 03E7
800959E0 03E7
800959E8 03E7
#Max Loyalty
300959EC 00C8
300959ED 00C8
#Unlock All Species
80097336 0101
80097338 0101
8009733A 0101
8009733C 0101
8009733E 0101
80097340 0101
80097342 0101
80097344 0101
80097346 0101
80097348 0101
8009734A 0101
8009734C 0101
8009734E 0101
80097350 0101
80097352 0101
80097354 0101
80097356 0101
80097358 0101
8009735A 0101

 

posted on 2016-05-08 17:54  gauldoth  阅读(803)  评论(0编辑  收藏  举报