那么,现在我们来解决第二个问题,
【其后的部分将很依赖于您是否阅读了之前的内容】
如何修改经过LZ77压缩的图片
LZ77是一种GBA游戏ROM中常用的压缩方法,这种方法能够有效的减少图片、调色板等信息在ROM中的储存空间,起到了很好的压缩作用。
但对于改版而言,这种压缩无异于加密。
UNLZ_GBA这款工具其实就是专门解压缩LZ77压缩后的图片的工具。但是由于口袋ROM中调色板比较分散,而UNLZ_GBA本身又有些BUG,使得仅仅通过UNLZ是不能很好的做出我们想要的图的。
所需工具:
-UNLZ_GBA[HackMew Hacked]- EliteMap包里带着一个,但我倾向于使用HackMew修改过的版本,这个版本在工具区置顶工具箱中即可找到。后文简称UNLZ。
-VBA- 不说啥了,模拟器。
-老妖的LZ77加/解压缩工具- 同样在工具区置顶工具箱中可找到。
-WinHex-很专业的HEX工具。
-APE-调色板的傻瓜化工具。
本例将以修改战斗中的文本框为例,讲述如何使用UNLZ+APE完美修改LZ77压缩图片。
首先必须清楚一点,那就是我们要改的图片确实经过了LZ77压缩。
怎么验证呢?其实道理很浅显——用上篇教程(
http://poketb.com/bbs/thread-13410-1-1.html)当中的方法找不到的图片,就是LZ77压缩过的图片了……
UNLZ几乎可以找到所有的LZ77压缩图片,所以只要从头开始,挨个看,绝对能看到你要改的那个……
当然,注意了,UNLZ要调到黑白模式。(为什么呢?因为在彩色模式下,UNLZ会尝试使用一些调色板,而这些调色板很可能会让原本有内容的图片变成漆黑一片)
凭借运气,我找到了那个战斗文本框在UNLZ中的位置,如图:
现在要做的很简单,就是把图导出为PNG,然后在上面做一番修整。当然了,不要修的出格了,要保证图片里面的文本框还是差不多那么大。
导出的时候注意了,我们要绝对的黑白图,不要带着任何调色板出来。你用其它图片查看器打开导出的图片,一定要是黑白的。
因为我对那个文本框本身没啥看法,所以就不改形状了,只当是改过了……
现在我们导入。
导入的时候要睁大眼睛了,不要将调色板导入进去,仅仅勾选修复指针、导入图像和那个提示重定向的勾。
这里关键终于到了,该去改调色板了。
这种图片的调色板通常和图片一样,是经过LZ77压缩的,我们如何查找、修改呢?
首先,明确一个概念:ROM里压缩的东西,在GBA内存当中一定会解压成原始数据。
那么我们现在打开内存查看器,来到调色板所在的内存区(如何做的?请看1楼文章):
我们导出调色板。注意了,因为没有专门了解过LZ77压缩,所以我只是导出了需要用到的那一行调色板而已,也就是长度达到FF左右的数据(从0x05000000到0x050000FF)。(但经观察,即便你多压缩一段东西,前面的压缩过的不会变,还是那样,只是后面续了一段而已……)
现在拿出老妖的那个工具,选择内置算法,将我们导出的内存数据进行压缩。
压缩过后,理论上来说,和ROM里压缩过的就差不多了(为什么说差不多?你自己试试,然后再看看就知道了)。
现在再打开WinHex,在ROM里搜索这段压缩后的代码。
但,一般地,要去掉压缩生成的头,并且仅搜索其中的一小段。如图:
搜索到唯一结果时,你拿到的便是压缩后的调色板地址。
这个地址一般也不怎么好处理,所以再度拿出APE来~方法和1楼一样滴
APE这工具有不少毛病,其中有这么三个:
1、你必须精准的将搜索地址输入为某行调色板起始地址,否则可能会搜到假的、错的
2、即便是对于压缩调色板,也不是一定就要勾选压缩那个勾——确认你不会错过任何有用的
3、绝对不要期望“按调色板搜索”能找到什么,我试了,什么都找不到- -
那么如何处理,或者说搜到的可能性更大呢?
1、多试试不同的调色板起始地址,哪怕多偏移一点
2、压缩那个选项勾或不勾都试试
3、替我想到一个更好的工具?
搜到正确的调色板后,恭喜,你可以改了。