# 大师决斗汉化脚本 **Repository Path**: maven27/chinese-script-of-master-duel ## Basic Information - **Project Name**: 大师决斗汉化脚本 - **Description**: 整理后的大师决斗汉化脚本 - **Primary Language**: Unknown - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2022-11-18 - **Last Updated**: 2022-11-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 大师决斗汉化补丁 > ### ⚠️ 不允许利用本仓库的代码或文件进行牟利。 ## 概览 补丁需要覆盖游戏的两个部分:`IDS`和`data.unity3d`。前者是多个存在于`localdata`文件夹中的文件,后者是唯一存在于`masterduel_data`中的文件。 此仓库中的`IDS`文件夹用来生成 IDS 文件,`CARD/WORD/DLG`用来生成`data.unity3d`文件。 每个文件夹的逻辑均为:将从游戏目录中复制的文件作为原料,经过解密得到可阅读的 JSON 文件,对此文件进行翻译,然后加密生成补丁文件。最后将补丁文件直接到覆盖游戏目录中。 注意:运行每一个文件夹模块时请将终端目录移动到该模块下,而非仓库根目录。 ## 脚本使用 ### IDS 前提:将`output\IDS_To_JSON`之中的所有 JSON 文件放到`data\已翻译的JSON`之中。 首先需要原材料:从游戏目录提取。 打开`methods\从游戏目录提取完整文件.py`,将`game_root_path`改成自己的游戏目录。运行这个脚本,会根据`data\ids-map\assets_indepent.json`来提取游戏资源,提取的资源放到了`data\IDS`。 > ↑ 这一步需要注意,游戏切换语言时候会删掉游戏目录下的其他语言的资源。所以比较稳妥的方案是:假如现在游戏是汉化了的(原本是日语),先切到英语(这里会下载 200mb 文件),然后运行一遍`从游戏目录提取完整文件.py`;再切到日语(这里会下载 200mb 文件),然后运行一遍`从游戏目录提取完整文件.py`。最后` data\IDS\日文` `data\IDS\英文 `两个文件夹中的文件数量应该是相等的。 运行`1-从完整文件提取.py`,从 Unity 资源文件中解包,生成的文件在`output\IDS导出的资源`。 运行`2-IDS解压.py`,从解包文件中生成供翻译的 JSON ,生成到`output\IDS_To_JSON`。 将已翻译 JSON 数据`data\已翻译的JSON`导入到`output\IDS导出的资源`:运行`methods\从以前的JSON导入.py`。 开始翻译:将`output\IDS导出的资源`中未翻译的部分翻译成中文。 > 有一个小技巧:运行`methods\搜索未翻译句子.py`可以输出哪些部分还没翻译。 先后运行`3-IDS压缩.py`和`4-打包成完整文件.py`,得到打包好的新的 Unity 资源文件。打包结果在`packup`,未修改的源文件在`backup`。 最后,下载[IDS 字体文件](https://pan.baidu.com/s/1M_rCZ153dTkyIOVDXKoZng?pwd=ksq2),也放到`packup`里面。这里的文件控制了一部分文本的字体。 ### CARD > CARD/DLG/WORD 这三者的输入输出都是`data.unity3d`文件,所以比如说 CARD 的输出就可以作为 DLG 的输入。最开始的`data.unity3d`文件应该从游戏路径的`masterduel_data`文件夹中提取。 前提:如果存在`output\5_res\Name&Desc.json`,那就复制到`data\上一次的数据`中。 原材料是`data.unity3d`文件,直接放到本模块的`data`文件夹下。 运行`跑密钥.py`,将结果填入`utils\MiCryptoKey.py`。 依次运行` 1_从data.unity3d中提取.py` `2_CARD解密.py` `3_CARD渐进处理.py `。 运行`4_旧JSON迁移到新JSON.py`,它首先将已有的卡片数据从`data\上一次的数据\Name&Desc.json`导入到`output\3_res\Name&Desc.json`,如果无数据,就会调用 API 去查找。 查看`output\4_res\unknown_name.json`中是否有值,如果有意味着 API 也找不到,需要手动填入。 运行`5_处理unknown翻译.py`,它将`output\4_res`中的 JSON 合并到`output\5_res\Name&Desc.json`。 依次运行`5.5_处理Part和Pidx.py`和` 6_CARD加密.py` `7_注入data.unity3d.py `,生成`output\7_res\data.unity3d`。 ### DLG 前提:如果存在`output\JSON\DLG_Text.json`,那就复制到`data\已有的翻译JSON`中。 原材料是`data.unity3d`文件,直接放到本模块的`data`文件夹下。 依次执行` 1_从data.unity3d中提取.py` `2_DLG解密.py` `3_DLG处理.py` `4_将旧JSON导入新JSON.py `。 `5_汉化DLG中的效果文本.py`不需要执行:它本身是为了获取形如”①xxxx“这种中文文本,但是 K 社后来更改了逻辑。 开始翻译:将`output\JSON\DLG_Text.json`中未翻译的部分翻译成中文。 依次运行`6_DLG合并与加密.py`和`7_注入到data.unity3d.py`,生成`output\注入到data.unity3d\data.unity3d`。 ### WORD 原材料是`data.unity3d`文件,直接放到本模块的`data`文件夹下。 依次运行` 1_从data.unity3d中提取.py` `2_解密.py` `3_渐进处理.py `。 对比一下`output\3_res`之中两个 JSON 文件是否中日相对应,否的话改一下中文 JSON。 依次运行`4_压缩.py`和`5_注入到data.unity3d.py`,生成`output\5_res\data.unity3d`。 ### FONT 嵌入字体到`data.unity3d`,但一直都没来得及写成脚本,以后会写成脚本的。 字体嵌入的逻辑是这样的:每一个字体对应一个 JSON 文件,需要根据游戏的字体更改字体 JSON 的`m_Texture.path_id`和`m_DefaultMaterial.path_id`。 详细说一下怎么做: 1. 获取`path_id`。如果这个脚本不行,也可以用 AssetStudio 软件来看。 ```python import UnityPy env = UnityPy.load("data/data.unity3d") # 未处理的 data.unity3d 文件 font_path_id_map = {} font_list = [ "FOT-TsukuMinPro-M", "YGO_Card_NA", "FOT-RODINNTLGPRO-B", "YGO_Card_JP", "FOT-KafuTechnoStd-H", "FOT-RodinPro-DB", ] for obj in env.objects: if obj.type.name == "Font": data = obj.read() font_path_id_map[data.name] = { "m_Texture": data.m_Texture.path_id, "m_DefaultMaterial": data.m_DefaultMaterial.path_id, } print(font_path_id_map) ``` 2. 下载[字体 JSON ](https://pan.baidu.com/s/198_pioQWzqVqcPNJLA8HkQ?pwd=oog5)和 [UABEA](https://github.com/nesrak1/UABEA) 软件。 3. 修改 JSON,以其中一个字体 YGO_Card_JP 为例。 ```python { "m_Name": "YGO_Card_JP", "m_LineSpacing": 16.0, "m_DefaultMaterial": { "m_FileID": 0, "m_PathID": 748 # ← 修改这里 }, "m_FontSize": 16.0, "m_Texture": { "m_FileID": 0, "m_PathID": 1157 # ← 修改这里 }, } ``` 4. 用 UABEA 打开要修改的`data.unity3d`文件,在下拉菜单中选择`resources.assets`模式,然后点击`info`。 5. 找到对应的字体(Type 要为 Font)。然后在右侧选择`Import Dump`,将可选的格式改成 JSON,选中刚刚修改的对应的 JSON,开始导入。依次导入所有 JSON 。 6. UABEA 保存成新的`data.unity3d`文件。