主题 : 【原创】【讨论】世嘉土星游戏汉化教程2(图片汉化)
YZB
级别: 超级版主

UID: 12451
精华: 6
发帖: 19097
威望: 173 星
金钱: 2015 浮游币
贡献值: 10169 点
好评度: 54867 点
人气: 4322 点
在线时间: 19723(时)
注册时间: 2004-10-02
最后登录: 2024-11-28
楼主  发表于: 2022-01-14 09:05

【原创】【讨论】世嘉土星游戏汉化教程2(图片汉化)

管理提醒: 本帖被 YZB 执行加亮操作(2022-01-14)
大家好,世嘉土星的汉化教程又来了,这次我们讲讲游戏中图片的汉化
以下说明全部是我个人经验以及猜测,如果有说得不对的地方,欢迎指正

本来是想用上次教程中提到的游戏做为例子的,但是在那个帖子里有朋友遇到汉化的问题,所以正好用他说的那个游戏先来做个教程示范

本贴会涉及到以下几个软件,软件的使用和下载请妆Ρπ搜索学习 ,本贴不做过多的介绍

1 yabause(ss模拟器)


2  winhex(16进制编辑软件)


3  CrystalTile2  以下简称ct2(国内汉化组大佬写的软件,主要用途是生成 查看以及编辑点阵字库)


4 Photoshop(图像编辑软件)


以上3款软件可以用你自己熟悉的其他软件代替,主要能达到目的就可以





首先是运行模拟器打开游戏,然后当游戏运行到出现需要修改的画面的时候







因为 yabause模拟器提供了打开和关闭显存图层的快捷键

在这里可以查看各自图层对应的快捷键,分别为右边小数字键盘1 2 3 4 5 6 






所以,在游戏画面中尝试打开或者关闭某一个图层来确定文字是使用了哪一个图层
在这个游戏中当我们按下 小键盘的 1键以后,文字图层全部都消失了,所以可以确定文字图层在VDP1里面





然后我们进入模拟器的vdp1选项里面查看




在vdp1的左边窗口界面,我们依次浏览不同的活动块,然后在其中找到显示文字的那一个活动块
注意了,找到具体的活动块以后,在中间的vdp命令信息窗口里面有很多参数需要自己记录一下

Texture address  :该图片数据 在vdp1里面的地址 12280(vdp1 起始地址为5c00000,所以实际地址为5c0000+12280 = 5c12280)


Texture width : 图片宽度 176


Texture  height: 图片高度  32


color mode: 图片显示方式 (这里是4bpp 16bank)也就是半个字节显示一个像素,1个字节显示2个像素,半个字节最大值是0xf,所以最多只能显示16个颜色


color bank : 该图片使用颜色表的编号   3380(不清楚编号转成具体地址的详细算法,好像是除以4就可以?查看资料说早期的yaba模拟器的调色板左移了3位,所 以 需 要 除以4,如果是低分辨率格式的话则是需要除以8) ,另外如果vdp1的调色板显示
4 BPP(16 color LUT),那么颜色表数据就是在 VDP1 的内存中(如果是在VDP1中的颜色表地址不需要除以4)(颜色表起始地址为5f0000+3380/4=5f00ce0)




所有信息记录完毕以后,我们先把运行中的游戏数据dump下来
 

然后设置好存放dump的地址和名字,起始地址就填0,结束地址默认,选择下载,最后点一下OK,就可以了 
 



接下来,我们用ct2打开刚才dump的文件
先切换到图形显示模式,然后按图中箭头处设置好参数,可以看到文字显示出来了,只是显示的颜色不对



接着因为我们在前面已经算出调色板的具体地址(5f0000+3380/4=5f00ce0)
所以我们用winhex打开原来模拟器dump的文件,直接跳到5f00ce0这个地址
 

红框圈住的就是这个图片的颜色表了,(因为ss的颜色表一般都是16bit,2个字节表示一个颜色,所以16个颜色就是16x2=32个字节)



那么问题又来了,因为ct2的颜色表导入导出只支持3字节rgb的act格式,或者4字节rgba的pal格式,所以我们需要把原游戏的2字节的颜色表转成3字节的act或者4字节的pal格式

具体应该怎么转呢

大部分的ss颜色表使用的格式为xrgb 1555(1+5+5+5=16bit=2个字节)
所以这里需要自己转换
具体算法为:

ss 色表格式,2个字节代表一个颜色  
第一个字节 byte1
 
第二个字节 byte2
 r=(byte1&0x7c)<<1;  // 第一个字节丢掉最高位,然后取接下来的5bit位,结果x2    

 g=((byte1&0x3)<<6)+((byte2&0xe0)>>2);//   第一个字节最低2bit位乘以64)+ (第2个字节最高3bit除以4)

 b=(byte2&0x1f)<<3;// 第二个字节取最低的5bit,结果乘以8

算出来的rgb就是act格式中的第一个颜色了,以此类推,继续算下一个颜色..............

感谢我们的sky0611大大写了个在线转换的网页端,这样配合教程就方便多了
详细的使用方法在本贴的11楼.


按照这个方法把16个颜色全部转换出来以后,把文件保存为act
然后在ct2里面选择颜色表加载这个文件



可以看见图片基本显示正常了,但是为什么背景显示不对呢?

其实是因为在游戏中调色板的第一个颜色会默认显示为透明色,但是在ct2里面直接把第一个颜色显示出来了




既然已经在dump文件里面找到图片数据了,那么接下来我们需要找到图片数据具体是在哪一个文件里面


首先我们用winhex打开dumo文件,跳到这张图片的具体地址
 

红框内就是这个图片的数据了我们先在其中选择不是0000数值的一些连续数据,然后在选好的数据里面按鼠标右键,

选择编辑


然后继续选择复制选块,16进制数值,这样这些选择的数据就复制到剪贴板了



接着用winhex把游戏文件夹里面若干数量的文件一次拖到winhex里面,然后进行批量搜索(数量多少随意,只要电脑不卡,我这台i7 3770k 16g内存的古董机一次也可以拖几百个文件)

 


运气不错,还真在一个文件里面找到了



接下来用ct2打开这个文件,跳到找到的地址DDC0 
细心的朋友可能已经看见在地址ddc0的前面也就是dda0会发现2字节组的颜色表数据了




果然有显示,那么把原来做好的act色表也加载进来,就显示正常了(调色板----导入act)




也可以看见这张图片后面往下还有几张显示不完整的文字图片,这些需要手动调整该图片的宽度和高度,然后一个一个导出来(不会看汇编 不会写程序只能这样                )


这时候我们可以使用ct2把第一个文字图片导出来了
先鼠标左键选择第一张显示完整的图片,然后点编辑--导出--另外存为bmp






接下来就可以打开ps进行图片修改了
 



ps操作本人水平有限,就不说了,需要注意的是保存的时候需要导入原来的色表,并且另存为bmp需要设置




 









图片改好了,现在自然是把图片导入到原文件里面去了

ct2打开图片文件,跳到原图片位置,设置好相关的参数,鼠标左键点一下原图片,然后点编辑,导入,选择改好的图片





可以看见图片导入进来了,但是还没结束,需要在导入图片上双击鼠标左键(红框内),然后点保存,这样才是把图片写入到原文件中






文件写入进去了,那么重构iso测试一下吧




可以看见文字正常显示了               


最后说下总结,上面说了一大堆,发了一堆的图片,看似复杂,其实真正懂了,熟练操作起来很快
以上教程适用于那些图片数据没加密或者压缩的游戏,如果加密压缩了,整个游戏文件夹里都搜索不到的话,那可能就是压缩或者加密过了


汉化是个考验细心和耐心的力气活,三分钟热度和半途而废的人比比皆是
所以古语有云,珍惜生命,远离汉化。
[ 此帖被YZB在2024-03-11 21:11重新编辑 ]
saturnboy
级别: DCLT汉化组

UID: 83685
精华: 11
发帖: 902
威望: 68 星
金钱: 7936 浮游币
贡献值: 388 点
好评度: 2516 点
人气: 81 点
在线时间: 1658(时)
注册时间: 2005-12-06
最后登录: 2024-11-23
沙发  发表于: 2022-01-15 14:29

这样一张对话图一般需要多久能导出?
或者说以花组方块举例,剧情文本需要多久才能重构?
看上去很麻烦的样子,破解真不是我能追逐的目标。。