找回密码
 注册
X系列官方授权正版
搜索
查看: 21921|回复: 42

[原创] KSP 0.24.2汉化包技术解密

[复制链接]
发表于 2014-9-5 20:12:04 | 显示全部楼层 |阅读模式
本帖最后由 TimChen 于 2014-9-5 20:15 编辑

本着“人人为我,我为人人”的目的,为提高KSP汉化水平贡献出我们汉化包的完整技术细节。

转载时请保留:[转自深度时空太空科幻游戏社区
原帖地址http://bbs.deeptimes.org/forum.p ... mp;page=1#pid821308

在这里再次感谢各位汉化人员
Frighter jekiyuan(原总) 光明之门 starikki TimChen 作者无敌AA 以及本人 (排名按首字母顺序)


汉化包文件清单

主要文件夹及文件介绍
DTS_zh文件夹
汉化包的资源文件,所有汉化资源均在里面
DTS_Addon.dll
汉化插件,通过插件方式汉化部分内容。
ModuleManager.2.2.0.dll
MM管理器,利用它完成了组件说明的汉化
DTS_zh.dll
汉化程序,汉化的核心文件,字库和主要汉化内容全靠他
Assembly-CSharp.dll
Assembly-CSharp-firstpass.dll
KSP程序文件,这个游戏的代码全在这个里面,通过.Net Reflector对这两个文件修改将我们的代码嵌入程序中实现汉化。

字库问题
KSP中文字显示分为两类:
1、采用本机字体显示:装配车间的组件说明就是采用这个方式,此类方式直接支持中文,所以不存在字库问题。
2、采用图片字体显示:大部分文字显示采用这个方式,比如组件右键出现的快捷界面中的文字就采用这种方式显示文字,他不支持中文字体。
因此第二种字体的问题,所以需要额外附加字体。
技术原理:
1、        KSP中显示文字的控件是SpriteText和SpriteTextRich控件,所以在这两个控件初始化时插入我们的代码将原来的英文字库改成中文字库。
2、        cnfont中存放的就是字库文件,
.png文件是字体贴图
.fnt.unity3d文件是字体定义:他的原始文件是txt类型的,记录了每个文字的坐标,但是游戏字库中字体定义(txt文件)存储在TextAsset(文本资源)类型中,此类的属性是只读的,而且unity3d引擎不支持直接加载txt文件为TextAsset类型,所以采用unity3d引擎将txt文件打包成的资源文件后再加载。(求助:谁有直接加载txt文件为TextAsset类型的方法请告知本人,本人感激不尽。)
3、        游戏中字体差不多有十多个,因为中(han)文(hua)博(zu)大(tou)精(lan)深(le)所以把字体总类缩减成了六种。

字条汉化
en.xml 、zh.xml、en_x64.xml、zh_x64.xml
坏消息是KSP的绝大多数文字通过硬编码写在源代码中,
好消息是KSP(Unity引擎)出于优化目的(本人猜想)将代码中绝大多数的文本存放在dll的资源中,所以这给我们汉化提供了可行的方法。


编辑方法
en.xml是从KSP程序中提取出来的文字资源,前面的编号是词条存储位置(可以理解为资源编号),
zn.xml就是汉化的词条内容,id需要与en.xml正确对应
技术原理
算是内核汉化的一种,通过对KSP中资源内容读取的代码进行拦截,根据拦截到的资源编号从zn中检索出中文并返回,如果没有就返回en中的英文。

cfg汉化
zhConfig.xml
完成对cfg汉化的功能,他和ModuleManager汉化很像,汉化包中要制作这个功能的目的是防止和用户自己定义的MM配置冲突,所以初期的目标是对所用cfg汉化不使用MM,但是在汉化包发布前没有攻克组件的description的汉化,所以这个目前算是个办成品,好在问题已经攻克将来制作KSP 0.25的汉化包时就不会有这个小尾巴了。

编辑方法
Config
对应一个cfg文件
url
cfg文件地址,这个需要完整的地址,可以通过汉化包自带的超级调试工具获得
type
资源类型,填AGENT就好了
Values
存放需要修改的属性组
Value
每一个需要修改的属性
Nodes
子节点集合,可以无限嵌套,嵌套级别取决cfg文件中的格式
Node
节点内容

技术原理
属于插件模式汉化
1、        KSP在程序载入插件前先会把所有cfg载入到内存中,并且数据结构与cfg路径和内部数据结构相同
2、        按照xml中定义的结构寻找到对应的数据并将其替换达到汉化目的。

Super Tool资源工具
打开方式:左Ctrl+左Alt+F11
用来查看KSP载入的所有cfg资源的信息,采用缩进表示层次关系,提供多种搜索方式


贴图汉化
Image文件夹、zhImage.xml
汉化的方式有点简单粗暴,在每个场景载入时替换需要替换的材质贴图,搞定。

编辑方法
1、使用UnityAssetsExplorer从KSP的文件中提取贴图,并对贴图做自己想要的修改。
2、将贴图保存与Image文件夹中,文件名通常是原始文件名,文件类型必须是png
3、在zhImage.xml添加对应的记录,并表标上贴图最长边的尺寸。(PS:如果你觉得你电脑内存大的用不掉可以标一个天文数字上去,当然更好的做法是把内存条打包邮寄给我。)
技术原理
采用插件模式汉化
1、        插件在每个场景载入时检索当前场景中所有的材质球,寻找与zhImage.xml中同名的材质球,接着将贴图替换。
2、        因为目前只匹配名称所以有个别地方出现相同材质球名字时产生了贴图错误。
3、        相对于原版在首次进入某个场景时慢的原因就是这里需要检索所有材质球,这个工作比较费时。
4、        为解决3的问题将材质设置成不可卸载,这样切换场景时系统不会载入原先的材质球了,也不用再次比较和替换了,所以进入之前已经进入过的场景载入速度就正常了。

Super Tool材质查看
打开方式:左Ctrl+左Alt+F11
通过游戏对象树查看工具找到需要查看的对象然后用“详”查看材质信息


UI汉化
zhItem.xml
游戏中2D界面汉化理论上都能用他完成,功能强大无比,只是他的效率相对于其他汉化方式是最低的,所以他作为其他汉化方式的一种补充。
操作方法
直接看图把,有缘人定会看懂。


技术原理
属于插件模式汉化
1、        按照配置文件的定义找到对应的UI控件。
2、        判断当前显示的文本是否在清单中有定义,如存在就替换他。
3、        循环监视控件文本是否已经改变,如果没有就跳过,如果有就执行第2步
(PS:此汉化方式消耗较多的CPU资源,所以需要流畅的飞行场景慎用,其他场景影响甚微。)


载入吐槽
zhLoadingTips.xml
载入的时候吐槽内容在这里,插件会随机选择当前吐槽词条然后显示在载入屏幕上。

编辑方法:
zhLoadingTips.xml加入吐槽内容即可
技术原理
采用插件模式汉化
这是所有汉化功能中最简单的,就是启动时找到吐槽控件,然后让他显示我的内容。

其他文本汉化
zhText.xml
部分文本内容不在汉化词条中,所以这个就产生了。

编辑方法
zhText.xml中加入英文和对应的中文即可
技术原理
属于内核汉化
部分英文内容不在资源中出现(有些是类的特性中标注),所以直接在SpriteText控件进行文本显示前拦截,对显示的内容进行文本匹配后返回对应的中文。


合同文本汉化
StoryDefs.cfg
没有技术只有语法,这是翻译的胜利。


作废的文件
zhPartInfo.xml、zhTechNodeDes.xml、zhTooltip.xml
用不到了,作废了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

评分

参与人数 3声望 +10 UCC +32 好评 +1 贡献 +1 收起 理由
阿波菲斯 + 5 + 30 字数很多,您辛苦了
RuohongZhao + 5 + 1 重要内容
starikki + 2 + 1 好顶赞! 辛苦了!

查看全部评分

发表于 2014-9-5 20:15:05 | 显示全部楼层
收藏了,以后出问题来调试的时候慢慢看

点评

你回贴速度也太快了点吧,秒回啊。  发表于 2014-9-5 20:17
回复

使用道具 举报

发表于 2014-9-5 20:35:06 | 显示全部楼层
各位辛苦了!!!!


询问:
1、你认为汉化过程中最吃力的是那一部分?
2、客观评价一下当前版本的汉化包!
回复

使用道具 举报

发表于 2014-9-5 20:46:35 | 显示全部楼层
非常详细,支持。
回复

使用道具 举报

 楼主| 发表于 2014-9-5 21:17:59 | 显示全部楼层
很恶の恶魔 发表于 2014-9-5 20:35
各位辛苦了!!!!

本人只负责程序,所以只说程序问题,翻译方面我无法回答。

回答1:
这一版是基于上一版制作了,个模块相对平均,没有特别吃力的,这一版主要是把上一版需要修改游戏程序的汉化模式尽可能转移到MOD中实现汉化消耗时间比较多,这也是为下一版本简化工作量做准备。
上一般本最难的是解决字库载入和找到可以替换字库的位置耗费了不少时间。

回答2:
汉化包在0.9版后没有出1.0版就说明这个问题的答案。
回复

使用道具 举报

发表于 2014-9-5 21:23:17 | 显示全部楼层
TimChen 发表于 2014-9-5 21:17
本人只负责程序,所以只说程序问题,翻译方面我无法回答。

回答1:

没出1.0,这个答的好!我知道该怎么做了。
回复

使用道具 举报

发表于 2014-9-5 22:52:36 | 显示全部楼层
因为那时我刚好刷了下论坛,就看到了~
回复

使用道具 举报

发表于 2014-9-5 23:03:56 | 显示全部楼层
TimChen是深度是人才啊
回复

使用道具 举报

发表于 2014-9-6 09:43:37 | 显示全部楼层
……好贴 赞
回复

使用道具 举报

发表于 2014-9-6 11:27:52 | 显示全部楼层
不介意的話可以給我原始檔嗎?我想改成繁中
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|DeepTimes.NET 太空游戏站