前言

前一阵子偶然上dlsite上瞅一眼,发现关注的好多社团都把自己的作品给下架了,不过比较喜欢的社团帰りの会2居然更新了新作,我记得每部作品流程都不长,突发奇想看看能不能自己试着汉化一下他们社团的作品,查了一下发现游戏是livemaker引擎做的,于是就开始找有没有大佬做相关的教程,Google了一下果然有,于是就开始折腾起来了,为了方便以后自己查询,写了这篇blog,主要基于CyanidEEEEEshy2052两位大佬的教程与自己的摸索总结。

汉化准备

Pylivemaker github 成熟的livemaker解包工具
FontCreator 非开源字体编辑软件
fontObfuscator shy2052修改版 github 快捷制作字体
任意一款支持UTF-8的文字编辑器 笔者用的EmEditor
GraphicsGale 官网下载 用于编辑游戏内使用的图片素材

安装Pylivemaker

安装编译环境Python

Pylivemaker是基于python写的,所以需要安装Python,下载适合你系统的最新版即可
注意安装后需要配置环境变量,不想用代码配置的话请再次启动下载的python安装包,选择Modify,将所需要的选上,包括pip
在cmd中使用python --version可查询版本,如果提示python不是一个有效指令就说明没有配置好环境变量

使用pip安装Pylivemaker

pip是Python官方自带的应用商店,可使用pip install指令安装相应软件
使用以下指令安装Pylivemaker

1
pip install pylivemaker

如果提示pip不是有效指令,请尝试安装最新的Python,或是检查上一步中Modify是否选择安装了pip,也可以试试使用python -m ensurepip --default-pip重新配置pip

开始汉化

解包游戏文件

livemaker游戏文件一般都直接封装在exe文件中,因此直接对exe文件解包即可
有的exe可以直接作为压缩文件解压,我这个不行,所以我用的GARbro解的包
不过pylivemaker是支持解包的,但是它没有用户交互界面,因此需要使用cmd进行操作,先使用cd 游戏文件路径进入游戏文件文件夹后,使用如下指令进行解包

1
lmar x game.exe -o game_files

game.exe是游戏文件的名称,不要打错,game_files是解包后的文件夹名称,可以随便起

提取原始文本

目前我找到有两种方法,得到的文件也不一样,哪个方便用哪个

提取为csv

解包后的文件夹中,应该有很多.lsb格式的文件,文本就被打包在其中,一般来说最大的那个就是文本文件,返回cmd,使用cd指令进入解包后文件夹,使用如下指令即可解包出文本文件

1
lmlsb extractcsv --encoding=utf-8-sig 你想要解包的文件名.lsb 随便起.csv

Pylivemaker会将lsb中的文本块部分抽出整合进一个单独的utf-8-sig编码的csv中,使用文本编译器打开csv文件后,你会发现首行会有ID,Label,Context,Original text,Translated text这么一行格式提示,以每个,作为分隔符分成五部分,告诉你每行文本的格式,Pylivemaker给你整合好的文本在每行原文后都已经为你留好了,,在它后面填上翻译后的文本即可
注意!如果原文使用了” “并且分成了几行,汉化文本也需要按照他的原文格式书写,原文分成几行你就分几行,两行比如

1
2
3
pylm:text:00000224.lsb:76:0,,,"ところでお前、
晩ご飯食べたの?","话说,
你已经吃过晚饭了吗?"

提取为Ins

直接使用指令

1
lmlsb extract 你想要解包的文件名.lsb

即可将这个lsb中所有的文本块按块全部拆成单独的Ins文件,更改每个Ins文件中的文本即可,笔者认为效率没有提取成csv高,因此没有用这种方法

将汉化好的文本封回去

在汉化完全部需要汉化的文本后,下一步就是要把汉化好的文本替换原文封回去了
刚刚使用extractcsv提取为csv格式的使用以下指令封回去

1
lmlsb insertcsv --encoding=utf-8-sig 你解包的文件名.lsb 刚刚起的名.csv

直接使用extract提取为Ins的使用以下指令封回去

1
lmlsb batchinsert 你解包的文件名.lsb

报错

不管是使用哪种方法,不出意料的话你会收到cmd一大堆的报错
仔细观察报错内容,你会发现它提示你某个字不是一个有效的CP932编码的字符
这是因为livemaker里使用的是CP932(JIS)编码的字符,很多汉字在里面是找不到的
为了解决编码问题,我查到的教程都是使用的替换文字法

解决汉字编码问题

  1. 原理
    很多汉字不是都在CP932(JIS)编码里找不到吗?那就换一种方法,我们来自己制作一种字体,把CP932(JIS)编码里存在的部分用不到的生僻字的字形替换成我们要用到的汉字,然后再把汉化好的文本里相应的汉字替换成对应的生僻字,安装好自己做的字体后,相应的生僻字不就会显示成想要的汉字了吗?

  2. 字体制作

    • 字体生成
      笔者使用的了shy2052修改后的fontObfuscator,可以快捷的生成想要的字体文件
      github上将代码打包下载下来,在base-font文件夹中放入一个字体文件作为替换汉字字形的原型,将config.py中的原始字体改成自己放入的字体,打开data文件夹,hanzi.txt中为替换后的汉字,kanji.txt中为替换前的生僻字,大佬已经将自己整理好的很多都内置在里面了,可以按需更改,注意保持两个txt中字符数量相等。打开make_LiveMaker_font.py,按自己的需求更改里面引用的替换的字符列表和名称,运行代码后将会在文件同路径下生成修改后的字体文件
    • 修改属性
      刚刚得到的字体是不能直接安装使用的,因为fontObfuscator生成的字体编码并不能在日文环境下使用,因此需要使用FontCreator对字体进行进一步的修改
      使用FontCreator打开刚刚生成的字体文件,在最上面一栏选择字体-属性,在第一面下方的区域部分里有编码页的字符范围这一项,你会发现JIS/日文(932)这一项并没有打上勾,所以此时的字体是无法在日文环境下使用的。打上勾后再修改一些你想要修改的,比如字体名称版本等等后确定保存导出字体即可
      很多教程都是将字体名称修改成系统自带的MS Gothic字体,然后安装覆盖系统自带的字体,但由于livemaker自带更改字体的功能,我汉化的游戏中也有相应的选项,所以我并没有将字体名称修改成系统自带的部分字体进行覆盖

替换汉化文本内容

已经解决了字体的问题,与之对应的就是需要将已经汉化好的文本内不属于CP932编码的汉字替换成相应的生僻字就行,为了方便,我让Copilot给我写了个能够生成汉字和生僻字的对应表(因为我不会写python)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import openpyxl

def write_to_excel(output_file):
# 创建一个工作簿
wb = openpyxl.Workbook()
# 获取活动工作表
ws = wb.active

hanzi1 = open("data\\hanzi.txt", mode="r", encoding="utf-8").read()
kanji1 = open("data\\kanji.txt", mode="r", encoding="utf-8").read()

# 确保两个文件的长度相同
assert len(hanzi1) == len(kanji1), "两个文件的长度必须相同"

# 将相同位置的字符写入Excel
for i in range(len(hanzi1)):
ws.append([hanzi1[i], kanji1[i]])

# 保存到xlsx文件
wb.save(output_file)

# 使用函数
write_to_excel('output.xlsx')

使用前需要使用pip install openpyxl安装需要的库
运行后即可在fontObfuscator根目录下生成一个记录了对应关系的xlsx文件,根据前面cmd的报错信息一个一个替换即可
如果是程序大佬还能根据xlsx文件写一个批处理文件一键替换,可惜我不会
替换完成后再重新封包就不会报错了

游戏图片素材编辑

我汉化的游戏使用的图片格式是.gal,一般应用无法加载和编辑,通过GARbro也只是能看到内容,这个时候就要使用GraphicsGale了,在GraphicsGale中打开.gal文件,导出为png格式编辑完后可以再通过GraphicsGale转换回.gal文件,注意部分图片存在α通道,编辑图片时注意不要落下

游戏选项编辑

部分内容比如游戏选项文本设定等通过extractcsv指令是提取不出来的,这个时候需要通过以下指令将其转换成可以读得懂的xml(虽然我还是读不懂)

1
lmlsb dump --encoding=utf-8 你想要解包的文件名.lsb --mode xml --output-file 随便取.xml

找到想要修改的部分,记住所处的LineNo="XXX",使用如下指令编辑

1
lmlsb edit 你想要解包的文件名.lsb XXX

不过好像通过extract指令提取的Ins里直接可以改呢

游戏菜单编辑

理论上使用extractmenu指令是可以提取出lsb文件中菜单相关部分的内容的,具体指令如下

1
lmlsb extractmenu --encoding=utf-8-sig 你想要解包的文件名.lsb 随便起.csv

不过我试着对很多lsb文件使用都提示没有找到菜单内容,该部分有待补充

测试封包

由于livemaker有优先读取外部文件的特性,你可以将修改好的文件以在exe中的相对位置放在游戏根目录下,直接运行游戏即可生效
记住一定要安装字体并且在游戏中更改为自己制作安装的字体
安装字体前

安装字体后