口袋社区-Poke The BBS's Archiver

liuyanghejerry 发表于 2009-11-13 20:49

配合UNLZ,彻底推倒ROM中的压缩图片(含带调色板教程)

在上一篇图片教程当中,我介绍了如何修改针对tile查看器能够看到的图片,但这种方法同时还是存在缺陷的。
第一,虽然找到了图片,但由于没有调色板,仅仅只能修改外貌而无法对付颜色;
第二,ROM中有不少图片是经过LZ77进行压缩的,仅仅使用TILE查看器是不可能找到的。

那么今天我们就来挨个解决这两个问题吧。

首先来解决第一个。

[size=4][color=blue][b]如何修改未被压缩的调色板[/b][/color][/size]

所需工具:
-VBA-我用的是VBA1.80英文版,大家对应到汉化版即可。(为什么?因为我总觉得汉化版有BUG,以前遇到过,有阴影)
-CT2-这是一款很爽的ROM综合查看器,全名Crystal Tile 2,大家自己百度下载吧。
-WinHex-我很喜欢的一款HEX编辑工具。这是一款专业级工具,在HEX方面提供的功能相当强大,欢迎大家从UE走向WINHEX,呵呵。
[color=red]*本例将以如何修改火红美版当中对话框颜色为例,讲解如何修改调色板*[/color]
首先,用VBA载入你的ROM,并且让画面停留在你所要修改图片的地方。
[attach]24772[/attach]


现在我们打开工具当中的图块查看器:
[attach]24773[/attach]

游戏中一般使用的都是16色图,而整个调色板区域却是256色的,所以我们的图通常只占用一部分而已。为了搞清楚占用的到底是哪一行,我们在这个图块查看器里确认一下,步骤我都写在图上了。

下面打开调色板查看器:
[attach]24774[/attach]

通过在图块查看器里的观察,我们可以知道,我们要找的调色板在最后一行(为什么?因为那个调到最后的时候图片正常)。
首先保存下左边的调色板(这是背景调色板,右边那个是物件调色板,是活物[能动弹的那种,比如大地图人物]用的)
存成图中指定的那种类型:
[attach]24775[/attach]

接下来我们继续回到调色板查看器。我们选中最后一行调色板中的第一个颜色,看到地址那里会有一个地址出现,记住它。

现在再打开内存查看器,转到那个地址:
[attach]24776[/attach]

转到之后点击另存为,从我们获得的地址开始存起,保存大概20个字节即可。

这里是内存中的调色板,因为我们之前说了,是未被压缩的,因而实际上ROM中它们同样是这样存放的。

那么下一步,便是用WinHex打开刚刚保存出来的内存数据,全选,在菜单中选择:编辑-复制-16进制数值。再用WinHex打开我们的ROM,菜单:搜索-搜索16进制数值。
经过搜索,我们很快便会定位在一个地址上,如下:

[attach]24777[/attach]

把得到的地址记下来。

现在打开APE,载入ROM,选择按地址搜索,在地址框键入地址,选择载入,如下:
[attach]24778[/attach]

这样,我们便可以自由的修改调色板了。
(修改时要先点选上面的copy按钮,复制到下面修改,然后再按"replace"覆盖上去。在低下时双击颜色即可编辑)
[attach]24779[/attach]

回到ROM,果然,发生了我们想要的变化:
[attach]24780[/attach]


那么大家可能会问了,CT2究竟起什么作用呢?
实际上,用CT2可以直接在ROM里带着调色板编辑图块,具体怎么用,呵呵,大家自己钻研钻研吧……

liuyanghejerry 发表于 2009-11-14 01:04

那么,现在我们来解决第二个问题,
【其后的部分将很依赖于您是否阅读了之前的内容】
[size=4][color=blue][b]如何修改经过LZ77压缩的图片[/b][/color][/size]
[b][size=4][color=#0000ff][/color][/size][/b]

LZ77是一种GBA游戏ROM中常用的压缩方法,这种方法能够有效的减少图片、调色板等信息在ROM中的储存空间,起到了很好的压缩作用。

但对于改版而言,这种压缩无异于加密。

UNLZ_GBA这款工具其实就是专门解压缩LZ77压缩后的图片的工具。但是由于口袋ROM中调色板比较分散,而UNLZ_GBA本身又有些BUG,使得仅仅通过UNLZ是不能很好的做出我们想要的图的。

所需工具:

-UNLZ_GBA[HackMew Hacked]- EliteMap包里带着一个,但我倾向于使用HackMew修改过的版本,这个版本在工具区置顶工具箱中即可找到。后文简称UNLZ。
-VBA- 不说啥了,模拟器。
-老妖的LZ77加/解压缩工具- 同样在工具区置顶工具箱中可找到。
-WinHex-很专业的HEX工具。
-APE-调色板的傻瓜化工具。

[color=Red]本例将以修改战斗中的文本框为例,讲述如何使用UNLZ+APE完美修改LZ77压缩图片。[/color]
首先必须清楚一点,那就是我们要改的图片确实经过了LZ77压缩。
[attach]24790[/attach]
怎么验证呢?其实道理很浅显——用上篇教程([url]http://poketb.com/bbs/thread-13410-1-1.html[/url])当中的方法找不到的图片,就是LZ77压缩过的图片了……
UNLZ几乎可以找到所有的LZ77压缩图片,所以只要从头开始,挨个看,绝对能看到你要改的那个……
当然,注意了,UNLZ要调到黑白模式。(为什么呢?因为在彩色模式下,UNLZ会尝试使用一些调色板,而这些调色板很可能会让原本有内容的图片变成漆黑一片)

凭借运气,我找到了那个战斗文本框在UNLZ中的位置,如图:
[attach]24789[/attach]
现在要做的很简单,就是把图导出为PNG,然后在上面做一番修整。当然了,不要修的出格了,要保证图片里面的文本框还是差不多那么大。
导出的时候注意了,我们要绝对的黑白图,不要带着任何调色板出来。你用其它图片查看器打开导出的图片,一定要是黑白的。
[attach]24791[/attach]
因为我对那个文本框本身没啥看法,所以就不改形状了,只当是改过了……
现在我们导入。
导入的时候要睁大眼睛了,不要将调色板导入进去,仅仅勾选修复指针、导入图像和那个提示重定向的勾。
[attach]24792[/attach]
这里关键终于到了,该去改调色板了。
这种图片的调色板通常和图片一样,是经过LZ77压缩的,我们如何查找、修改呢?
首先,明确一个概念:ROM里压缩的东西,在GBA内存当中一定会解压成原始数据。
那么我们现在打开内存查看器,来到调色板所在的内存区(如何做的?请看1楼文章):
[attach]24793[/attach]
我们导出调色板。注意了,因为没有专门了解过LZ77压缩,所以我只是导出了需要用到的那一行调色板而已,也就是长度达到FF左右的数据(从0x05000000到0x050000FF)。(但经观察,即便你多压缩一段东西,前面的压缩过的不会变,还是那样,只是后面续了一段而已……)
现在拿出老妖的那个工具,选择内置算法,将我们导出的内存数据进行压缩。
压缩过后,理论上来说,和ROM里压缩过的就差不多了(为什么说差不多?你自己试试,然后再看看就知道了)。
现在再打开WinHex,在ROM里搜索这段压缩后的代码。
但,一般地,要去掉压缩生成的头,并且仅搜索其中的一小段。如图:
[attach]24794[/attach]
搜索到唯一结果时,你拿到的便是压缩后的调色板地址。

这个地址一般也不怎么好处理,所以再度拿出APE来~方法和1楼一样滴
APE这工具有不少毛病,其中有这么三个:
1、你必须精准的将搜索地址输入为某行调色板起始地址,否则可能会搜到假的、错的
2、即便是对于压缩调色板,也不是一定就要勾选压缩那个勾——确认你不会错过任何有用的
3、绝对不要期望“按调色板搜索”能找到什么,我试了,什么都找不到- -

那么如何处理,或者说搜到的可能性更大呢?
1、多试试不同的调色板起始地址,哪怕多偏移一点
2、压缩那个选项勾或不勾都试试
3、替我想到一个更好的工具?
搜到正确的调色板后,恭喜,你可以改了。

口袋饭 发表于 2009-11-14 12:48

嗯。。。路过。。。支持下。。
不过咱改战斗文本框的步骤MS没这么复杂....= =

liuyanghejerry 发表于 2009-11-14 12:53

[quote]原帖由 [i]口袋饭[/i] 于 2009-11-14 12:48 发表 [url=http://poketb.com/bbs/redirect.php?goto=findpost&pid=219975&ptid=14414][img]http://poketb.com/bbs/images/common/back.gif[/img][/url]
嗯。。。路过。。。支持下。。
不过咱改战斗文本框的步骤MS没这么复杂....= = [/quote]
-。-不妨说说看,反正我改的有点复杂我承认

口袋饭 发表于 2009-11-14 13:47

[quote]原帖由 [i]liuyanghejerry[/i] 于 2009-11-14 12:53 发表 [url=http://www.poketb.com/bbs/redirect.php?goto=findpost&pid=219977&ptid=14414][img]http://www.poketb.com/bbs/images/common/back.gif[/img][/url]

-。-不妨说说看,反正我改的有点复杂我承认 [/quote]

可能因为你改调色板的方法吧。。
我都不找调色板地址的。。= =

liuyanghejerry 发表于 2009-11-14 13:50

[quote]原帖由 [i]口袋饭[/i] 于 2009-11-14 13:47 发表 [url=http://poketb.com/bbs/redirect.php?goto=findpost&pid=219990&ptid=14414][img]http://poketb.com/bbs/images/common/back.gif[/img][/url]


可能因为你改调色板的方法吧。。
我都不找调色板地址的。。= = [/quote]

-。-不会吧,我都是做一步写一步教程,不应该找不到啊……
换做你你会怎么改调色板?

口袋饭 发表于 2009-11-14 14:22

[quote]原帖由 [i]liuyanghejerry[/i] 于 2009-11-14 13:50 发表 [url=http://www.poketb.com/bbs/redirect.php?goto=findpost&pid=219992&ptid=14414][img]http://www.poketb.com/bbs/images/common/back.gif[/img][/url]


-。-不会吧,我都是做一步写一步教程,不应该找不到啊……
换做你你会怎么改调色板? [/quote]
这个嘛。。
就按我那教程那样,逐个读取HEX。。= =

calvinchan125 发表于 2009-11-14 14:45

改一個框都要那麼複雜[hi_31]

liuyanghejerry 发表于 2009-11-14 14:57

[quote]原帖由 [i]calvinchan125[/i] 于 2009-11-14 14:45 发表 [url=http://poketb.com/bbs/redirect.php?goto=findpost&pid=219999&ptid=14414][img]http://poketb.com/bbs/images/common/back.gif[/img][/url]
改一個框都要那麼複雜[hi_31] [/quote]

只是以框为例,再复杂的图都一样了。

roywillow 发表于 2009-11-17 08:29

脑残的LZ77啊……ape的按调色板搜索我至今没出现过一次搜索成功过
并且
有时候从ape中看到的颜色跟从vba中看到的颜色不一样
修改完后有时候也会发生变化
我怀疑ape计算颜色的时候有问题……

liuyanghejerry 发表于 2009-11-17 09:32

[quote]原帖由roywillow于 2009-11-17 08:29 发表脑残的LZ77啊……ape的按调色板搜索我至今没出现过一次搜索成功过并且有时候从ape中看到的颜色跟从vba中看到的颜色不一样修改完后有时候也会发生变化我怀疑ape计算颜色的时候有问题…… [/quote]APE是开源的,你可以改改看么~

roywillow 发表于 2009-11-18 13:09

直接看代码其实很难理解究竟怎么办的

希望能有个rgb和gba色转换的文字说明……

zhudakang 发表于 2009-12-19 16:01

(⊙o⊙)哦
国外是这样改的
有时UE
我在UE找不到地址

飞翔的雪米 发表于 2010-1-22 20:18

恐怖~~~~~难得LZ的耐心~~~~~~~

小R 发表于 2010-2-9 14:46

好乱啊,这个,回复了慢慢看

sky无影 发表于 2010-7-10 16:00

改的都只能是英文版吗?不能切底改中文?

页: [1]

Powered by Discuz! Archiver 6.1.0F  © 2001-2007 Comsenz Inc.