失落的三国吧 关注:2,023贴子:44,240

【改版教程】初级 - [进阶]替换精灵图片。额外增加25个精灵

只看楼主收藏回复

嘛,既然师傅没什么时间发教程,那我便转载几篇过来吧,
此贴内容均转自N大个人贴吧


IP属地:广西1楼2014-01-01 22:50回复
    早期自己研究写过一篇关于411精灵的教程,这里算是再次收录吧。
    绿宝石正统精灵总数是386只,而用修改器“PokemonMemHack”,修改精灵种类时,修改器中精灵列表“雪拉比”和“木守宫”之间存在着25个“?”未知精灵。

      修改成某个“未知”,游戏中发现精灵真的成了完全“?”号的精灵。查看它的状态,图鉴编号也是很整齐的387~411其中一个。

      其实这25个问号也是独立的精灵数据。所以所谓的“增加新精灵”其实只不过是把本来没用到的精灵用上而已!
      题外话,比较合理的猜测是原先这25个精灵和图鉴中的未知图腾精灵作为26个字母形态的26种未知图腾,可能是后来增加了“?”,“!”两种形态,制作组采用了新的方法。于是其余25组就被遗弃了。
      这里用“unLZ.GBA”在“雪拉比”之后分别能找到“未知精灵”正反面图,和其他找精灵一样,但并非25组,而是仅仅只有一组。
      而当我们更改了这些图后,在游戏中发现25个也同时改变。也就是说,25个“未知”共用一组正反面图。之前教程中理解了指针的概念,这里就比较明朗点。
      我们要做的就是把本来指向同一个位置的指针,改成分别指向指定位置的指针!新的图片数据必须找寻新的空位来分别写入ROM。

      如图:
    611号位置找到正面2帧图地址:0xB60544;
    1542号位置找到普通色调色板地址:0xCDD498;
    1543号位置找到战斗背面图地址:0xCDD4AC;
    1543号位置找到闪光色调色板地址:0xCDD630。
      以上4项数据都是25个精灵共用的,换句话说就是每项数据都有25个指针。找到这些指针并不难,之前指针相关教程中也讲过。


    IP属地:广西2楼2014-01-01 22:50
    回复
      打开“WinHex”,分别搜索4段数据的指针
      指针的模式是将被指向数据的地址加上OxO8OOOOOO再反写,以下是搜索到的指针位置。
        正面2帧图地址:0xB60544,
        其指针:4405B608。


      IP属地:广西3楼2014-01-01 22:51
      回复

          战斗背面图地址:0xCDD4AC,
          其指针:ACD4CD08。

          闪光铯调铯板地址:0xCDD630,
          其指针:30D6CD08。

          如果是绿宝石英文版ROM,这些空位精灵各项数据的指针位置可以直接参照,不必每次都去搜索。从以上图片中也能看到这些指针所在的地址:
         第一个“未知精灵”正面2帧图的指针地址:0x30A96C;
         第一个“未知精灵”普通铯调铯板的指针地址:0x303E58;
         第一个“未知精灵”战斗背面图的指针地址:0x303098;
         第一个“未知精灵”闪光铯调铯板的指针地址:0x304C18。


        IP属地:广西4楼2014-01-01 22:51
        回复


          IP属地:广西5楼2014-01-01 22:51
          回复
              接下来就是准备好素材并写入ROM,因为写入的空位地址,暂时不确定,所以顺序是先写入,再改对应的指针。我以导入NO.387和NO.388未知精灵为例,分别替换佐罗亚和佐罗亚克的图片。
              按照我的惯例,新的数据使用扩容的部分。用“FSF”搜索空位。
              打开“FSF”,载入ROM,“空白位置大小”填00,“所需大小”稍大一点,我这里填5000,“隐藏间隔”填写16,并选择“从给定地址开始搜索”,填上1000000,如图,搜索到的空位为“106EB28”。扩容后的地址是从0x1000000,并填充为“00”。

              首先导入佐罗亚的正面图,打开“unLZ.GBA”。因为重定向指针我们之后手动操作,所以在“unLZ.GBA”中任意位置写入指定空位地址就好。
              载入正面图片,写入ROM,对话框选项
            勾选“Export Image”和“Auto abort if new data is bigger”;
            不勾选“Export Palette”和“Automatically fix pointers”。
            “Image Offset:”这里不要直接填上搜索到的空位可能会有BUG,保险点就是填上一个比搜索到的地址稍大一点的地址,并且以0结尾,我这边就用“106EB30”

              题外话:试验了几次发现几次直接写地址会出现BUG,游戏中读取不了。如果你够细心会发现原版中那些图片和调色板写入的数据地址,都是以“0,4,8,C”结尾的。虽不知道其缘由,但最好自己用的空位地址也遵循这个规则。
              写入的地址转成指针形式 0x08000000 + 0x106EB30 = 0x0906EB30,
            指针就是【30EB0609】
              接下来导入第2只精灵佐罗亚克的正面图,还是先搜索空位,因为上面写入了新数据,所以新的空位往后推了,我这边搜索到的是“106F01B”。
              回到“unLZ.GBA”,在任意位置载入佐罗亚克的正面图片,对话框的选项依旧
            勾选“Export Image”和“Auto abort if new data is bigger”;
            不勾选“Export Palette”和“Automatically fix pointers”。
            “Image Offset:”填上比之前搜索的空位稍大一点且以0结尾的地址,我这边就用“106F020”。

              写入的地址转成指针形式 0x08000000 + 0x106F020 = 0x0906F020,
            指针就是【20F00609】
              至此也先别急着写调色板,正面图写好了就赶紧把指针手动改掉,也算是分离出来。


            IP属地:广西6楼2014-01-01 22:51
            回复
               打开“WinHex”,转到之前找到的第一个“未知精灵”正面2帧图的指针地址:0x30A96C;或者直接搜索指针也能跳转到。
                将原来的第1个和第2个指针手动改成以上写入的新图片的指针,【30EB0609】和【20F00609】,然后保存,如图。


              IP属地:广西7楼2014-01-01 22:52
              回复
                  普通色调色板的导入也是一样,不过我还是简单演示一下,搜索空位我这边是“106F660”
                  载入佐罗亚带普通色图,写入ROM,对话框选项
                勾选“Export Palette”和“Auto abort if new data is bigger”;
                不勾选“Export Image”和“Automatically fix pointers”。
                “Export Palette”:填上比之前搜索的空位稍大一点且以0结尾的地址,我这边就用“106F670”。

                  写入的地址转成指针形式 0x08000000 + 0x106F670 = 0x0906F670,指针就是【70F60609】
                  然后佐罗亚克的普通色调色板导入,搜索空位,我这边是“106F698”。
                  回到“unLZ.GBA”,在任意位置载入佐罗亚克普通色图,对话框的选项依旧
                勾选“Export Palette”和“Auto abort if new data is bigger”;
                不勾选“Export Image”和“Automatically fix pointers”。
                “Export Palette”:填上比之前搜索的空位稍大一点且以0结尾的地址,我这边就用“106F6A0”。

                  写入的地址转成指针形式 0x08000000 + 0x106F6A0 = 0x0906F6A0,指针就是【A0F60609】
                  现在就是手动更改普通色调色板的指针。
                  打开“WinHex”,转到之前找到的第一个“未知精灵”普通色调色板的指针地址:0x303E58;或者直接搜索指针也能跳转到。
                将原来的第1个和第2个指针手动改成以上写入的新图片的指针,【70F60609】和【A0F60609】,然后保存,如图。


                IP属地:广西8楼2014-01-01 22:52
                回复
                    接下来战斗背面图和闪光色调色板的导入和前面还是一样的。不再重复演示了。
                  流程还是找空位写入,然后手动改指针。要改哪部分,新指针和原来的指针在哪都要搞清楚。
                  参考 佐罗亚 背面图 和闪光色调色板写入:

                  参考 佐罗亚克 背面图 和闪光色调色板写入:

                    写入以后就死重定向指针了,指针的位置上文中有提到。
                  现在如果全部都已经导入并重定向指针了,就算完成了2个未知精灵的重建。
                  其他还有23个想要改什么精灵都可以按照同样的方法,注意对应好是哪个指针。
                    测试图:

                  如果测试失败了,也不要气馁,可能有些小细节忽略了。不妨拿起备份再来一遍,做多了就很顺了。


                  IP属地:广西9楼2014-01-01 22:52
                  收起回复
                    = =虽然是转来的,可这内容我完全没看懂,逼死小白


                    IP属地:广西10楼2014-01-01 22:53
                    收起回复
                      新年好,LZ好!


                      IP属地:新加坡来自Android客户端11楼2014-01-05 23:30
                      收起回复


                        IP属地:广东来自Android客户端13楼2014-01-16 07:46
                        回复
                          后排路过。。


                          IP属地:江苏来自Android客户端14楼2014-01-16 09:53
                          回复
                            不明觉厉……


                            来自Android客户端15楼2014-01-26 00:07
                            回复
                              稍微看懂了一点,操作起来好难...


                              IP属地:山东17楼2014-09-07 20:01
                              回复