从GalGame脚本提取和导入文本(大部分需要明文)
python版本需要3.9及以上。(推荐使用3.11)
同引擎不同游戏的格式也可能不同,请参看程序内示例使用。
sjis_ext.bin
,需要配合VNTProxy使用。(同时也会导出UIF配置)uif_config.json
,需要配合UniversalInjectorFramework使用。Tools/Font
下有JIS替换字体,以备dll无法hook游戏时使用。config*.ini
都会被读取,*中不能以数字开头。(例:configTest.ini
)text_conf.json
进行文本处理配置,优先读取工作目录ctrl文件下配置,如果没有则读取工具根目录默认配置。
text_conf.json:
"replace_before_split" 分割前替换
"trans_replace" 译文替换,受导入编码限制
"orig_replace" 原文替换与还原
"name_replace" 仅限name的原文替换与还原
(更多预设正则详见根目录预设正则.fake.ini
)
读取文件方式分为txt
和bin
两大类,前者按字符串处理,后者按字节处理。
separate=reg
bin方式下的分割符,默认为separate=\r\n
,导入时会补上separate字符串\r\n
;如果带捕获分组例如separate=([\x01-\x02]\x00|\x00)
,则会提取出分割符。startline=0
每个文件起始处理行数;默认为0。structure=paragraph
提取结构,当为paragraph
时才会处理非name或msg的分组名,比如unfinish
。(不是所有引擎的正则都支持,TXT
和BIN
引擎肯定支持)extraData=data
data为引擎自定义的参数,具体参考每个引擎的默认正则,用法不定。ignoreDecodeError=1
bin方式下,忽略文本在提取时的decode编码错误。checkJIS=reg
bin方式下,检查字节是否符合shift-jis编码,默认只允许双字节,reg
为支持的单字节。比如checkJIS=[\n]
表示支持换行符。postSkip=reg
在提取中,对于已经提取到的文本进行re.search(reg, text)
匹配,如果匹配正则成功则忽略掉该文本,不导出。比如postSkip=^[0-9]
表示忽略数字开头的文本。sepStr=reg
仅Krkr_Reg引擎使用,表示分割符匹配;默认为sepStr=[^\[\]]+
,表示以中括号分割。endStr=reg
仅Krkr_Reg引擎使用,表示段落结束的匹配。ctrlStr=reg
仅Krkr_Reg引擎使用,表示需要跳过的控制段的匹配。(类似通用的postSkip)version=0
主要由Yuris使用,表示文件结构版本decrypt=auto
主要由Yuris使用,表示解密。auto表示自动猜测,也可以强制指定,如decrypt=\xD3\x6F\xAC\x96
。如果已解密则删除该行。pureText=1
等同于勾选BIN启用纯文本正则模式
writeOffset=1
主要由CSV使用,向右偏移写入列。对于每行文本都会从上到下进行匹配。(skip或search匹配成功都会中断,不进行下边的正则匹配)
00_skip=^error
10_search=^(?P<name>Name.*)$
20_search=^(?P<pre_name>「.+」)$
21_search=^(?P<pre_nameANDunfinish>「.*)$
25_search=^(.+?)(?<=」|。)$
26_search=^(?P<unfinish>.+?)$
postSkip=^[0-9]
structure=paragraph
error
开头的行,skip会打断段落结构(如果用postSkip处理error则不会)Name
开头的行,且指定自身为name
(name
默认会predel_unfinish
)「」
的一行,且指定前一行为name
「
开头的一行,且指定前一行为name
,且自身为unfinish
」
结尾的一行unfinish
则添加\r\n且不会切换到下一个message。pre_
和predel_
后可以自由组合,比如name
和unfinish
。AND
也可以有任意个。Text0
Name1
Text1。
MaybeName2
「Text2」
MaybeName3
「
Text3
33text
Text333
error
」
[
{
"message": "Text0"
},
{
"name": "Name1",
"message": "Text1。"
},
{
"name": "MaybeName2",
"message": "「Text2」"
},
{
"name": "MaybeName3",
"message": "「\r\nText3\r\nText333"
},
{
"message": "」"
}
]