脚本的编码转换
免转区的实现
先用GARbro去查看所有封包,确认哪些封包存在了脚本文件,然后解包的时候这些封包全部都要解,然后再将所有的脚本文件移出来
解出来之后,在游戏目录下搜索脚本格式,常见的脚本格式为:
.asd
.func
.tjs
.ks
.txt
.ini(desktop.ini除外)
.csv
将所有能搜索到的脚本文件复制一份出来备用,然后新建文件夹将所有脚本文件移进去,打开emeditor
然后导入所有的脚本文件,并将所有的脚本文件指定编码保存为UTF-16LE 有签名,然后保存,再将这个新建文件夹命名为patch然后打包
将这个刚打包好的patch.xp3丢到游戏目录下,然后直接打开游戏,仔细测试每一个部分有没有出错
报错可能会有比较多的类型,比如立绘无法加载的问题
这个时候直接找到Initialize.tjs,然后往下翻,找到所有句末带有立ち絵フォルダ的脚本,有多少句就复制多少句
然后将一整段定义立绘的脚本复制粘贴到Config.tjs的// Config.tjs - KAG 設定上面
// Config.tjs - KAG 設定
// Copyright (C) 2001-2007 W.Dee and contributors 改変・配布は自由です
;global.config_version = "3.32 stable"; // この行を消さないでください
保存之后再打包成patch.xp3放在游戏目录下,打开游戏去确认是否解决问题
压缩ks/tjs
当你解包之后,发现脚本文件不能解析成明文,什么编码都没法显示出来字符
打开WinHex,将脚本文件拖进去,看文件头是否写了TJS 2100,如果是的话那么脚本为tjs2;如果没有的话,那么脚本可能是被压缩过了
非tjs2脚本,仅为压缩过脚本时,可以用KrkrTextDecryption.exe将被压缩的脚本解析成明文,用法也是将脚本文件拖动到exe上面打开,稍后就会在KrkrTextDecryption.exe的目录下生成ks.out/tjs.out的解析后脚本
CSV修正
当发现plugin文件夹里出现了csvParser.dll这个插件的时候,处理起来就会稍微难一些
搜索名为Override.tjs的脚本,打开之后可以发现第一句就是Plugins.link("csvParser.dll");,然后我们将下面这一段覆盖掉原来的Plugins.link("csvParser.dll");
Plugins.link("csvParser.dll");
with(global.CSVParser) {
.origParseStorage = .parseStorage;
.parseStorage = function (filename, utf8) {this.parse([].load(filename).join('\n'));} //for utf-16 CSV
.intStorage = function (filename) {this.StorageBuffer = [].load(filename); this.StorageBuffer.reverse();};
.getNextLine = function () {
if (this.StorageBuffer!==void) {
var retData=this.StorageBuffer.pop();
if (retData!==void) return retData.split('\t');
}
};
};
如果发现还是没有加载出来立绘的话,一般就是路径问题导致的,这一个问题将会放在实战演练中以图文的形式讲解
像Hulotte的俺の恋天使がポンコツすぎてコワ~い,对话框里面有头像的,然后plugin里面也有csvParser这个插件
当你改动了其他脚本的编码打包之后,会发现对话框的头像不显示了
原因其实就在于system里面的charData.csv,它只认Shift-JIS编码
想改动其实也很简单,直接搜索全部脚本文件中的initStorage,然后就可以看到以下脚本
function CharDataInit()(
var csv = new CSVParser();
csv.initStorage("charData.csv");
根据GitHub上的manual.tjs所写,如若是true就可以开启csv读取UTF-8的功能
那么更改范例如下:
function CharDataInit()(
var csv = new CSVParser();
csv.initStorage("charData.csv,true");
贴出一个GitHub的链接,是已经被修过的csvParser插件,有兴趣的可以自己看看:https://github.com/crskycode/csvParser
文本编辑与修改
一般是三种格式,前两种格式比较常见
.ks
.scn
.txt
ks的脚本基本上就不需要什么其他的处理,除了压缩过的需要Decryption成明文
.scn就比较多样,工具也非常多,像Marcus André(GitHub ID:marcussacana)写的KrKrZSceneManager、UlyssesWu写的FreeMote等等都可以处理成可修改状态
KrKrZSceneManager的release更新截止于去年的3月份,本身就支持中日英三种语言(没能让NeXAS的那个也支持中文实在是遗憾),使用方法也是非常的一键自动化;右键open file选中需要修改的scn脚本,修改完了之后再右键save file保存到其他位置(如果保存在原脚本位置会覆盖掉)
修改完的脚本习惯性保存编码为UTF-16LE 有签名
特殊图片格式的处理
大部分的图片都是用的png和bmp格式,区别无外乎就是加密与非加密
但有些游戏用的格式就比较奇葩,比如pimg、psb以及TLG,但处理起来其实也是非常简单的,多走一两步的步骤而已
关于pimg的解包与封包工具,FreeMote里面就有,可以去GitHub上下载,批处理程序非常简单
然后TLG就更加简单,可以去找开发工具包里面的krkrtpc.exe,这个工具就可以实现图片格式的转换,非常方便
可以看到有些什么TLG5、TLG6之类的选项,如何判断TLG图片的后缀数字也是非常简单,将TLG文件拖进WinHex里面查看文件头
通常都会有TLG0.0开头,然后不远处又跟了一个TLG5.0/6.0,根据这个数字去选哪个带有α通道的TLG选项就行了
字体修正思路
kikiri2
如果修改完文本之后进行测试,出现对话框内字体大小粗细不一致的情况
打开WinHex,将游戏的exe拖进去,快捷键Ctrl+Alt+X搜索十六进制数值,搜索C6431780,然后将80改成86,保存之后打开游戏就可以看到字体显示效果已经统一
但如果仍然对字体的显示效果不满意,可以到Config.tjs里面看一看,只要开发商没搞什么骚操作,一般字体定义就写在里面可以自行更改
还有一种方法,非常方便快捷,但有没有效果得看你怎么用了
打开first.ks,在最上面加上这两句
[mappfont storage="字体名.tft"]
[font face="字体名"]
font face可以随便填,但上面的字体名.tft一定要严格对应
保存之后将tft字体文件和first.ks一起打包成patch.xp3放在游戏目录下
kirikiriZ
1.font文件夹内无embfontlist.tjs或其他tjs控制
先试着在tjs脚本里面搜索font,看看能不能跟到字体定义的地方
仅适用于ttf/otf字体:如果嫌麻烦,可以直接将所有字体文件替换为自己下载下来的免费可商用字体(风险较小,免得到时候被人抓马脚)
当字体文件格式为tft时,则使用开发工具包里的krkrfont.exe制作tft字体,注意字号大小
2.font文件夹内有embfontlist.tjs控制
这种情况三言两语比较难说清楚,将会在之后放在实战演练中以图文的方式讲解