PS2汉化实例-《魔塔大陆》

写些《魔塔大陆》以及一些引擎相关的吧

在整个PS2时代,GUST一直保留着往ELF里塞数据的做法。所以不管是字库还是战斗数据什么的都可以在ELF里面找到。

到PS3后字体倒是改成了TTF,然而卖身之后又是万恶的图片拼接……(雾)

字库

24*24,4bpp没什么好说的。有意思的是,GUST的引擎是支持至多10种字体的。

字库由两部分组成:字体描述字符串和字模。字体描述字符串由2字节的、SJIS编码的字符组成,排列顺序与字模顺序等同。

而指向这两部分的指针位于一个大小为10的数组里。虽然目前没有见到几个利用了多字体的程序。但是AT2里确实有两个字体存在(然而AT1,A6等中都无有发现)。

程序要显示文字时,就从字体描述字符串中找到文字所对应的编码的索引,并以此得出字模的位置。

然后把字模整体复制到一个缓冲区里:这里就是可以做文章的地方了。既然程序实际上是用缓冲区取字显示,字库是缓冲区未命中时取字的方案,那么只要修改取字例程就可以随意改动字库。

我选择了减色,将4bpp减为1bpp。于是,容量就从约2000字扩充到了约7000字——翻译绝对够用了。

绘制逻辑

对于任意的字符串显示,都是在每次渲染循环时绘制上去的。所以诸如控制符的解析原始字符串的扫描(确认自动换行点)等一直在进行。并且占用了为数不小的CPU时间:当有文字绘制时,中断程序十有五六能中断在文字解析例程里。

另外,美版的自动换行点在空格处,而日版则是非符号前。汉化美版(和欧版)时,还需要修改对应例程,否则程序会永无止境地寻找换行点。(AT2汉化的部分BUG原因)

QvMap

俯瞰视角地图(不就是二等轴测地图嘛,叫这么高端)。

其数据分作多个部分。

碰撞数据存于RPK中的gmd里。

卷轴滚动数据存于RPK中的qvb里。而卷轴的纹理位置数据存在ELF里。而纹理本身存于RPK中的fp中(读取优化用)且只接受奇葩的LZR压缩(LZ算法的一个变体,针对重复的数据给出额外的优化。)过的文件。

卷轴绘制起始坐标、摄像机起始坐标、BGM、脚步声效、NPC等数据则依然在ELF中。

Event(事件/剧情)

在早期(A6及之前),Event数据一律存在于ELF中。

自AT1开始,Event数据被独立到evd文件中。

EVD文件的详细描述不再赘述。它包含了对话数据和脚本。

不过要是想要修复一些BUG就必须动到EVD里的脚本。(比如在乱逛时触发阻止前行的剧情,角色向后跳跃卡进墙里的神奇问题(需要修复脚本指定的跳越终点坐标))

汉化本身

首先EVD是独立文件,分析完文件结构重新生成就好。

麻烦的是ELF里的文本。只能将指针表挑出来,然后做好对应。(再次恬不知耻地推销自己的EIS。(啊,好像还没写完,欸嘿= ̄ω ̄=))

另一个麻烦的是美版的字库太小,即使扩容也不到2000字。目前依然没有什么好办法(之前的一个构想是将字库移动到RPK中,运行时加载;但随后留意到了内存不足的问题(垃圾GUST把ELF做太大了啊啊啊))目前的想法是移动到host:中。不过这就会令普通玩家非常尴尬……

(另:有一个小聪明想法是用日版ELF直接盖掉美版的,一劳永逸……毕竟已经发现日美版存档数据一致)

其他

其实随着研究的深入有点想顺便做个Mod制作工具了……不过现在还太遥远了就是……

先写这些吧。ヾ(•ω•`)o

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值