我做过的这个引擎的游戏:妹恋~しすこい~
和Artemis,Tyrano并列的最好做的三大引擎。
有时候可能有点小问题,但一定能做,怎么都能把它做了的一个引擎。
1.古法汉化
去看Dir-A的视频就行https://www.bilibili.com/video/BV1JM4y137kJ/
https://www.bilibili.com/video/BV1qQ4y1k7Gs
https://www.bilibili.com/video/BV1m64y187df
https://www.bilibili.com/video/BV1C3411y7aJ
https://www.bilibili.com/video/BV1cT4y1f7zq
https://www.bilibili.com/video/BV13q4y1Z7YN
https://www.bilibili.com/video/BV1Eg411F7Ww
https://www.bilibili.com/video/BV118411K7ui
KrKr的古法汉化教程对AI翻译krkr的帮助也是很大的。我在绪论中就推荐你们去看的视频肯定有其含金量。
2.KrKr2
不管具体方法怎样,总之可以分为两大类,要么封包要么免封。
2-1.免封包
首先根据Dir-A的视频给exe改免封包。注意,改免封有个前提,就是游戏本身没有exe校验,判断方法是观察根目录下有没有.emb文件,有的话就是加了校验,无法改免封。有些时候,改完exe,还需要将data中的release.ks改一下以跳过签名验证。如果需要跳过签名的话,一般就是给data.xp3改免封,然后改完后把data.xp3提出来,注释掉release.ks中的签名验证(据说有两处,好像开头还有一处),将文本放在data文件夹的首层目录下即可。

2-2.封<patch|char0x|append|原包>.xp3
封包又分为两类,一类是无加密包,由GAR或KiriKiriTools中的Xp3Pack封一个非原包的包,并配合KiriKiriTools中的version.dll使用(但有时会造成OP闪退等bug),另一类则是直接Xp3Viewer封加密包。但是一些krkr2是不认patch的,比如像QUINTUPLE☆SPLASH这种带scenario.xp3并且相对比较复杂且分类明晰的结构很多都不认patch。如果封patch、char0x(x为数字0~9)、append引擎都不认,你在ks里把patch开了也不顶用的话,一般下一步就是再尝试封无加密包或是直接封原包。如果无加密包引擎也读不到或是封原包失败的话,这个时候再尝试改免封。
3.KrKrZ
3-1.KrKrExtract
KrKrExtract是在Dir-A的视频中有过演示的方法,通过创建ProjectDir来实现免封。这个方法适用于大多数krkrz,但有时候有bug,一些文件会无法替换,在響野さん家はエロゲ屋さん!中就有一条线的H文本全部无法替换。据说自己编译UniversalPatch可能会解决这个问题,但我自己并未尝试过。
3-2.封无加密包
在krkr2中生效的KiriKiriTools在krkrz中依然有效,你可以尝试通过封patch.xp3或unencrypted.xp3并配合version.dll进行补丁操作
3-3.krkrz新加密
上述讨论我们都是以文件能够解出来为前提的,但krz新加密目前通用提取/注入工具只有KiriKiriTools比较有效,还需要C一遍游戏才能提出全部文本。古法汉化中最后一个视频https://www.bilibili.com/video/BV118411K7ui就是针对krkrz新加密而制。
4.krkr文本处理
4-1.scn文件处理
4-1-1.VNT
vnt可以提取回封基本上所有的scn,但vnt还是那个老毛病,等你翻完了才给你开始出问题。比如ちいさな彼女の小夜曲这个游戏就是转场报错。S佬曾说这个bug他曾经通过更改字体解决过,但我对此持怀疑态度,因为不是很能理解原理。可能是不同的bug,或是误将其它解决方法修复的结果误认为是更改字体造成的。
4-1-2.Ineditor
其psb插件可以处理scn,但可能需要自己筛人名并强制设定人名来正确提取name-msg式json。具体批量方法在Dir-A的https://www.bilibili.com/video/BV1ph411J7Pf/视频中有演示。
4-1-3.FreeMote
通过FreeMote中的PsbDecompile和PsBuild工具可以将scn文件拆出为json文件并回封。但这个工具拆出的json可读性极差,我让ai写了个脚本来从这个json中提取并回注文本,但可能并不适用于所有游戏。脚本会放在文末链接。
4-1-4.SacanaWrapper
SacanaWrapper的使用略显复杂,具体使用示例在Dir-A的krz新加密视频中有讲。
4-2.复杂脚本的二次提取处理
有时候我们会遇到一些控制语法夹在句子里的情况,这时候如果你是程序低手,不想痛苦面具去写程序处理脚本,我们完全可以利用SE进行二次提取操作来过滤掉这些控制符。比较典型的示例是すまいるCubic!-水平線まで何マイル? アフター&アナザーストーリーズ-这个游戏,我在补丁的补丁说明中写了全部的正则方法:
csv
00_skip=^#
01_skip==
05_search=(.*?)[,\*]
一次bin筛导出json
00_skip=^\[[^'\|:\n]+\]$
01_skip=^\[[<>&a-zA-Z_\d ='\(\) \|\.]+\]$
20_search=(.*)
separate=(\[[^'\|:\n\[\]]+\]|\[[<>&a-zA-Z_\d ='\(\) \|\.]+\])
二次json引擎处理
00_skip=^\[[^\[\]]+:[^\[\]]*?\]$
01_skip=^\r$
02_skip=^[\*#:]
03_skip=^ =
04_skip=^$
05_search=【(?P<name>.*)】
10_search=^(「.*」)\r$
20_search=^(?P<unfinish>「.*[^」])\r$
30_search=^(?P<pre_unfinish>[^「].*」)\r$
40_search=^(?P<unfinish>.*[^。!?])\r$
90_search=^(.*?)\r$
95_search=^(.*?)$
structure=paragraph
Sublime
\[(:[^\[\]]*?)\|[^\[\]]*?\]
\[\1\]
\[([^\[\]]*?)\|[^\[\]]*?\]
\1
\[([^\[\]]*?)'[^\[\]]*?\]
\1
4-3.跳转处理示例
同样是在すまいるCubic!-水平線まで何マイル? アフター&アナザーストーリーズ-这个游戏中,专业术语跳转存储在一张csv表中,用于为游戏内指定文字表识跳转并指明跳转文件。这张表你改U16LE游戏是不读的,比起去逆程序改读取方式,使用SJIS替换制作这个游戏的补丁对我来说显然更为现实。具体跳转的处理方式你可以自行拆解我的补丁去看看里面那张表长什么样。
4-4.SQLite数据库文本结构
在Dolphin Divers和愛しい対象の護り方中,文本以.sdb文件存储,一个sdb用于存储对话和人名标号,另一个sdb用于存储人名标号和人名的对应关系(但是改了没用,起码我改了是没用)。这种数据库类型的文件有其专门的处理软件。我们只需要下载Navicat Premium Lite这款免费软件即足以处理。链接并打开.sdb文件后,将储存有句子和人名id的表全数导出为csv(反正导出json我是没导回去),翻译完毕后再导回sdb文件中并保存即可。导出的csv可以用txt引擎正则处理,但显然比较麻烦。SE原生支持csv引擎,可以很好的处理这种格式的脚本。以下为csv引擎的正则示例及原脚本:
待写
另外,如果要封patch,这几个sdb文件必须全部封在新patch里,不然无法生效。
4-5.人名处理
一些krkr改完人名之后立绘/语音就会消失不见,这是因为这些游戏就是依靠人名来判断是否加载立绘/语音的,一些版本的BGI也有相同的问题。另外,一个游戏出现人名问题时并不一定代表这游戏所有人名都不能换,因为有些游戏是主要人物不能改人名,有些游戏是次要人物不能改人名……
并且,说是不能换,但你可以尝试用注释的方法在保留原人名的同时显示译名,比如改成原名/译名
(具体到游戏可能人名注释语法会有些变化,大部分都是@
或者/
)
5.编码/tjs/字体
众所周知,krkr是原生认u16le with BOM的。但如果你要转u16le,最好是要么全都转,要么就都别转改用SJIS替换。另外,krkr自己的tjs中就有设置文本字体的地方,更改后只要系统中有这个字体即可生效。


krkr的高自由度甚至使得其汉化补丁能够做出双语效果,具体是哪个游戏我忘了,反正当时那个按s键开关双语反正是令我印象挺深刻的。