趁上班间隙偷懒再上来更新一下。上回书把文本破解方面基本都介绍过了,本回就来扯一下图片方面。
该游戏用到的图片格式有三种txp,dat,GM3。txp格式上回书已经说过了,本回主要介绍dat和GM3。
txp在该游戏里用的地方并不多,主要是用于简单的静态图片,例如头像,系统文字图标等,而大量使用了dat格式的图片。
dat格式其实准确来说是指用以表现动画用途的图片,他的后缀名是dat所以,我就暂且称作dat格式了。USRDIR下的ANIME.DAT就是这种图片格式的打包文件,在start里还有anime00.dat,该文件是用于游戏开始启动时的所以放在start里。dat文件有一点点类似gif,也是把动画播放的每一帧的图像都存在单独的文件里,dat也是这样。该格式其实是也是一个打包文件结构不过打包文件头只有一个子文件数量信息然后接着的就是各个子文件数据了没有子文件索引信息。
dat打包文件头:
该打包文件头大小为0x10,第一个byte存放文件内包含的子文件数量,其余字节都为0。紧随其后的就是各个子文件的数据了。
dat子文件是一种包含多幅图像的文件,各个图像的大小,颜色数,调色板数量格式都有可能不同。256色的图像数据对应一种256色调色板,而16色图像的话是公用几个16色调色板的。
其调色板和图像数据对应关系比较混乱。还有要一下的就是该格式内还包含大量播放动画所需的数据,由于和图片导入导出无关,所以我就没有分析具体的作用,有兴趣的童鞋可以自己分析看看。
dat子文件:
offset | size | meaning |
0x00 | 1dword | 文件大小 |
0x04 | 2byte | 未知数据 |
0x06 | 2byte | 0x18指向的数据域单位大小(单位:2dword) |
0x08 | 2byte | 0x1C指向的数据域单位大小(单位:3dword) |
0x0A | 2byte | 0x20指向的数据域单位大小(单位:3dword) |
0x0C | 2byte | 0x24指向的数据域单位大小(单位:2dword) 即调色板种类的数量,详见0x24项说明 |
0x0E | 2byte | 0x28指向的数据域单位大小(单位:3dword) 即图像信息数据域,详见0x28项 |
0x10 | 2byte | 0x2C指向的数据域单位大小(单位:4dword) |
0x12 | 2byte | 0x30指向的数据域单位大小(单位:4dword) |
0x14 | 2byte | 0x34指向的数据域单位大小(单位:4dword) |
0x16 | 2byte | 0x38指向的数据域单位大小(单位:1dword) |
0x18 | 1dword | 未知数据域指针 |
0x1C | 1dword | 未知数据域指针 |
0x20 | 1dword | 未知数据域指针 |
0x24 | 1dword | 调色板信息数据域指针,每单位为一种调色板信息 前一dword为调色板数据地址 后一dword为调色板数据大小 |
0x28 | 1dword | 图像信息数据域指针,每单位为一张图像的信息 第一个dword为图像数据地址 第二个dword为图像尺寸:前半dword为长,后半dword为宽 第三个dword为图像标志:第一个byte为图像bpp,第四个byte为有无tile结构标志(00:没有,01:有),其余byte未知 |
0x2C | 1dword | 未知数据域指针 |
0x30 | 1dword | 未知数据域指针 |
0x34 | 1dword | 未知数据域指针 |
0x38 | 1dword | 未知数据域指针 注意:若0x16项内的值为0,则该指针在数值上就等于调色板数据地址 |
0x3C | 各种数据域开始处 |
上面的那些未知数据就是用于播放动画时所用到的,有兴趣的童鞋们可以在此基础上继续分析下去。
现在还剩下一个GM3格式,该格式其实是3D模型贴图文件,里面除了纹理贴图数据外还有大量的3D坐标,UV纹理坐标等,同样因为这些数据不涉及图像导入导出,所以我也没有分析具体的用处。同dat一样GM3也是一个多图像文件格式,同一文件内含有多幅图像数据,其格式如下:
GM3:
文件头结构:
offset | size | meaning |
0x00 | dword | 数据块数量(datNum) |
0x04 | dword | 图像数量(imageNum) |
0x08 | 数据块标识区域的开始地址,以dword为单位,共有datNum个 | |
0x08+datNum*4 | 数据块域与图像域指针表,以dword为单位,共有datNum+imageNum个 其中第datNum+1个dword指针即为第一个图像开始地址 |
单个图像:
offset | size | meaning |
0x00 | dword | 图像大小 |
0x04 | dword | 图像宽*高 |
0x08 | 2*BYTE | 颜色数(clrN) |
0x0a | 2*BYTE | 图像大小(以2的幂来表示,例如4*4表示2^4 * 2^4) |
0x0c | dword | 调色板数量(palNum) |
0x10 | 调色板数据开始地址,以clrN*4为单位,共有palNum个 | |
0x10+clrN*4*palNum | 图像数据开始地址 |
大功告成,终于讲完了。普利尼破解方面就这些内容了,剩下的就是翻译,润色,美工等细致活,这些都交给清文了。
相关的图片导入导出工具和上面提到的相关工具及其源码,我会在汉化补丁发布后一起放上来。用我的图片导入导出工具导出的图片格式为TIM2格式,该格式是PS2上的常用图片格式,需用OPTPiX iMageStudio 3软件转换为常见的图片格式后方可浏览编辑。
这里顺便贴一下TIM2文件的格式作为参考:
文件头大小为0x40的TIM2:
以下为05h为00时,也就是16字节标识,即64字节文件头模式时
00h-04h 54 49 4D 32 04 TIM2? TIM2标识符
05h 00:16Byte Alignment,16字节标识(40h开始数据) 01:128Byte Alignment,128字节标识(100h开始数据)
06h 01 头的结束
08h-0Fh 保留(皆为00)
10h-13h 文件大小-16(10h)
14h-15h 调色板大小(如果为高/真彩时为0)
16h-17h 保留
18h-1Bh 图像数据大小,算法Xpix*Ypix*nBit/8(bit/byte),X像素*Y像素*n位/8(位/字节)
1Ch-1Dh 固定30 00
1Eh-1Fh 颜色的数量,只有00,10[16],00 01(100[256])这三种可能,00为Direct Color(高彩/真彩)
20h-21h 固定00 01
22h 调色板模式下调色板类型,01,16BitCSM1CLUT.02,24BitCSM1CLUT.03,32BitCSM1Clut.81,16BitCSM2Clut.82,24BitCSM2Clut.83,32BitCSM2Clut.高彩/真彩模式下为00
23h 色彩模式,01:16位高彩,02:24位真彩,03:32位真彩+Alpha,04:16色调色板,05:256色调色板
24h-25h 宽度,像素
26h-27h 高度,像素
28h-2Fh TEX0 GS寄存器设定(存储方式不明)
30h-37h TEX1 GS寄存器设定(直接存储)
38h-3Bh TEXA,FBA,PABE GS寄存器设定(存储方式不明,估计类似于加法之类的)
3Ch-3Fh TEXCLUT GS寄存器设定(直接存储)
TIM2文件结构描述转自http://www.zxp.net.cn/Bo-Blog/post/233/,感谢原作者。