文字游戏的汉化

  这篇文章的定位有点困难,大约是针对有点RE能力,看过些教程,又没有实际搞过汉化的人。

 

  里面没啥技术性的东西,都是些小经验。

 

  -----------------------------------------------------------------------------------------------------------

 

  1)哪些部分要汉化

      大约有4个部分,人名、文本、选择项和章节名。各个游戏不同,并不一定都有。人名和文本比较显而易见,选择项一般来说不会出现在序章中,有时会被忽略(而且选择这边很容易出问题,所以第一次至少要测试到第一个选择之后)。章节名一般在存档的时候出现。

 

      什么不需要汉化的:图片名、音效名、背景音乐名,CV名,动画名、脚本名,效果名等等。不过也不绝对,自行观察。

 

  2)程序部分的修改

      程序部分主要改3个地方,CreateFont的Charset,SJIS的边界检查,如函数(IsDBCS),EnumFontFamilies的Charset。

 

      还有就是改系统菜单,对话框等,一般来说到资源里面去改,用ResScope即可。

 

  3)文本导出的格式

      我还是推荐Agemo格式,配合AgemoEditor使用。蓝山魔导之类的软件可以用来做测试版本,不要用来做整个游戏的汉化。

 

      这里讲点编码的事情,首先要搞清楚Unicode和ANSI的区别,API后面W和A的区别。

 

      把SJIS转成GB可以使用码表,也可以使用API函数(MultiByteToWideChar, WideCharToMultiByte)。用API的话有个麻烦就是发生问题察觉不到,比如1byte的A5,日文环境中是·,但是转成Unicode再转GB,最后肯定变成?。还有就是Unicode包容SJIS,但是GB并不包容SJIS,比如♪ (音符)。转到GB后就没了。

 

     如果是PC平台,源程序又不是使用Unicode,那么还是转成GB吧,那些GB中不存在的编码翻译看到会删除掉。如果提供给翻译的是Unicode,那么这些符号还是会保存下来,再转成GB导入之后,就等着看??吧。

 

     如果不是PC平台,或者是需要制作字库的情况,那还不如用Unicode。

 

     最后就是要善于使用比较软件,BeyondeCompare可以比较SJIS-GB,Unicode-GB,非常厉害。

 

    4)编程方面

        注意unsigned和signed的区别。

char ch = 0xff;

printf("%d", ch == 0xff);

 

       上面是老代码了,不过一直会和这些东西打交道,所以要注意。

 

    5)关于封包

 

       如果包本来不大,而且里面的东西基本上都改动了,比如脚本文件,那么就把各个文件打成包直接给出好了。但如果包很大,而修改的只是少数,比如图片,这个时候就要有些考虑。如果修改之后的图比原来的小,那么原位塞入。如果比原来的图大,那么就放到文件最后,原来的空间就放在那里不要动。看似是浪费了原来的空间,但保持了这个包大多数地方没有变化,最后用Patch软件比较原始包和修正后的包就可以生成补丁程序了。

你可能感兴趣的:(汉化)