口袋妖怪黄 原版修改

  • 在项目 pokeyellow ,文件/engine/battle/core.asm中,

    程序LoadEnemyMonData用于装入PM数据。

    备注“; random DVs for wild mon”开始的位置,就是装入野生PM的个体值的代码。

    程序执行了两次随机获得一组随机个体值(位于a和b寄存器),可以通过修改代码使其装入固定值。

    对于美版来说,这个位置在0F:6CB2。对于日版来说,应该也在这附近。


  • 那这样的话,直接把wEnemyMonDVs改成固定值就行了?


    话说个体值是个双字节?它的定义是?


  • 那这样的话,直接把wEnemyMonDVs改成固定值就行了?


    话说个体值是个双字节?它的定义是?

    个体值 代表初代四种能力的个体 每个能力的范围是0-15,也就是说4位代表一种能力,四种能力就是两个字节。

  • 根据上面的讨论,那我们看看美版的口袋黄如何修改个体值(其实还不是很明白什么是个体值,能干什么。。。)。




    只有两个字节的空间,不够修改


    做如下处理,将一段自定义代码插入原ROM0F:6CB9处。该段代码位于ROM0F末端空白处,如本例中取ROM0F:7C00




    ROM0F:7C00这段程序将定义新的个体值,分别是语句

    Code
    1. 7C03 LD b,EE;定义个体值的第一个数值(4位)为14,和第二个数值(4位)为14



    Code
    1. 7C06 LD b,EE;定义个体值的第三个数值(4位)为14,和第四个数值(4位)为14


    具体来说就是


    将3ECB9开始的三个字节,从21 F0 CF 修改成 CD 00 7C,

    之后,将3FC00开始的若干00字节修改成21 F0 CF 06 EE 78 06 EE C9


    这样就完工了。


    当然如果你的模拟器比较敏感的话,你还需要把0x014E开始的两个字节从04 7C改成08 EE


    注意:上面的修改中,将个体值改成了EEEE,如果要改成其它值,将

    21 F0 CF 06 EE 78 06 EE C9 中的两个EE

    替换成你想要的值xx即可

    21 F0 CF 06 xx 78 06 xx C9


    然后开始游戏吧!



    所以改完了,抓住的精灵是顶级么?我碰到的这个猫头鹰才是2级啊=O=O=O=O


    最后,附上一个我用来计算偏移地址的小工具(需要.NET Framework 支持)。


  • 实际上

    两个 call 7027 就是生成随机数的调用,可以直接删去,然后设置成固定值。

    也就是说,6CB2-6CBB 都可以用 nop填充, 然后在6CB2填入指令

    ld a, 固定个体值数值1

    ld b, 固定个体值数值2


    至于个体值的话,相当于一些小加成,能够额外增加PM的能力一些。


    计算偏移地址的工具,我以前也用GTK写过几个,现在也不用了。

    如果是相对地址,在bgb中使用 BANK号:地址 的方式调用,比如 5:4025

    如果是绝对地址 可以用 ROM:绝对地址 比如 ROM:2354D

    修改在bgb里面直接做 然后用调试功能保存就好了,也不必从相对地址算绝对地址然后去HEX编辑器改……

  • 对的,我也是习惯直接在BGB里面修改保存。至于地址转换,一般我是在CT上看字库或者图片的时候转换一下,方便调试的时候打断点。

  • 这样不就没有意义了吗,个体值之后没有更动的办法吧?

    可能我说得不太明白。个体值是在PM捕捉成功之后,程序会将遇到PM时候的一些数值(PM的编码 等级 努力 技能 等信息)写到当前精灵位置。

    而在这个时候,会用00来写个体值的位置。

    所以只需要把00改掉。改成别的数值即可,譬如说FF之类的。

  • 我重新看了下日版的口袋黄。

    主要第一只口袋的数据的地址是在D12B~D156,一共44个字节。后面紧贴着第二只口袋的数据D157~D183。

    那么只带一只口袋身上,以第二只口袋为例打断点。去捕捉一只口袋。

    程序发生断点在ROM3:74DC,首先写入的是口袋编码。

    忽略其中的不管。来到写入个体值的程序。ROM3:75C2。

    724-2017-08-22-073136-png

    那么只需要把寄存器清零的指令改成需要的数值即可。

    修改之后,捕捉到的所有口袋,都是固定写入的个体值。

  • 我找不到rom3系列文件

Join us

Have your own thoughts on this discussion? Wanna help others, avoid the mistakes you met before? Wanna contribute more to this or other topic? Just join us! Registration is free. Join us!