/RadiantHistoriaHans

任天堂 3DS 遊戲光輝物語漢化項目 - Fan translation project of chinese for Nintendo 3ds game RadiantHistoria

Primary LanguagePythonGNU Affero General Public License v3.0AGPL-3.0

3DS光辉物语汉化笔记

招募日翻英翻 QQ群 20550973

照目前的人手和进度,估计没个十年出不来了 img

Table of Contents

  1. 解密
  2. 解包
  3. 定位
    1. 对话文本
    2. 系统文本
    3. 图片
    4. YesOrNo
  4. 制作字库
    1. 根据bcfnt导出
      1. 导出字符列表
      2. 导出字符排序
    2. 导出
      1. 根据xllt xlor导出
      2. 修改导出
    3. shiftjis映射
      1. 获取所有日文汉字,保存为shiftjis编码
      2. 对日文汉字进行排序,将所有可复用的汉字提前
      3. 将所有可复用的汉字保存为unicode编码
      4. 从末尾开始新增汉字
      5. 用新增汉字替换对应位置的日文汉字,生成图片、映射字体以及映射至shiftjis编码的码表
  5. 自动化
    1. 根据bcfnt导出
    2. 生成xllt文件
    3. 提取英日文本并生成csv,然后机翻
    4. 提取系统文本
    5. 根据翻译后csv导入文本
    6. 根据零碎文本生成映射shift-jis代码
  6. 其他汉化笔记

解密

使用3ds_decrypt_v2

解包

使用DotNet3dsToolkit146

定位

对话文本

根据名称分析可知位于Message文件夹

系统文本

解包美版rom,将所有文件复制进Citra日版游戏的Mod位置,再挨个移除,确定系统文本位于Table,通过UltraEdit在目录(Table文件夹)中搜索-高级-使用编码-shift-JIS(通过对话文本编码可知),搜索游戏中出现的系统文本,可定位至文件。其中有3种格式的文本,分别为:

  1. 0000|ffff开头00结尾,2个字节一跳
  2. 先用4字节记录序号,再用0x20字节记录标题文本,0x80字节记录描述文本
  3. 0x30开始固定位存储开始指针,指向下方文本区域,0x00标记结束符

图片

同上,可知位于Texture文件夹,编辑stex文件即可修改

YesOrNo

这些字符居然被硬编码在可执行文件里了,还好知道它用的是shift-jis编码。通过(Yes=8278 8285 8293)(No=826d 828f)(はい=82CD 82A2)(いいえ=82a2 82a2 82a6)定位,更改为确定取消的映射编码。总共有5处

制作字库

根据bcfnt导出

导出txt

3dsfont\bcfnt2charset CHIARO_14.bcfnt CHIARO_14.txt

txt文档包含信息有:字符列表与字符排列顺序

导出字符列表

3dsfont\charset2xllt CHIARO_14.txt CHIARO_14.xllt

导出字符排序

3dsfont\charset2xlor CHIARO_14.txt CHIARO_14.xlor

导出

根据xllt xlor导出

修改导出

  1. 修改xllt中的unicode代码可增删字符,增添字符需要指定系统字体

  2. 修改xlor中的unicode代码可在导出图片时变更字符的排序

shiftjis映射

获取所有日文汉字,保存为shiftjis编码

对日文汉字进行排序,将所有可复用的汉字提前

将所有可复用的汉字保存为unicode编码

从末尾开始新增汉字

用新增汉字替换对应位置的日文汉字,生成图片、映射字体以及映射至shiftjis编码的码表

自动化

根据bcfnt导出

将3dsfont与FontConverter置于同一文件夹下,将bcfnt拷贝至此文件夹

@set str=%~nx1
@set a=%str:~0,-6%
3dsfont\bcfnt2charset %a%.bcfnt %a%.txt
3dsfont\charset2xlor %a%.txt FontConverter\xlor\%a%.xlor
3dsfont\charset2xllt %a%.txt FontConverter\xllt\%a%.xllt
Pause

新建bat文件,将bcfnt拖至此bat上

需注意3dsfont只能生成utf16编码的文件

生成xllt文件

geneChinese2Jis.py

统计出现的所有字符并拼接基本文本(假名英文字母符号)生成映射码表与真实码表

根据真实码表生成字体bmp,根据映射码表生成xllt与xlor

结合以上三者生成bcfnt

提取英日文本并生成csv,然后机翻

exportLang.py

translateByGoogle.py

translateByPygtrans.py

提取系统文本

textTableGet.py

根据翻译后csv导入文本

importLang.py

textTableImport.py

根据零碎文本生成映射shift-jis代码

convertZh2Jis.py

其他汉化笔记

刺客信条2探索