话说,project-open的确是一个非常优秀的项目管理系统.
通过这次本地化参与.我体会到其系统内部各个模块之间的依赖与交互做的不错.
但是也有不少字符串翻译的让我头疼…即使我有财务方面知识背景,还是翻译的七荤八素.
俚语和惯用语是翻译的老大难,如果大家看到翻译质量有问题,欢迎联系我指正.
www.project-open.org
www.project-open.com
国内:
话说,project-open的确是一个非常优秀的项目管理系统.
通过这次本地化参与.我体会到其系统内部各个模块之间的依赖与交互做的不错.
但是也有不少字符串翻译的让我头疼…即使我有财务方面知识背景,还是翻译的七荤八素.
俚语和惯用语是翻译的老大难,如果大家看到翻译质量有问题,欢迎联系我指正.
www.project-open.org
www.project-open.com
国内:
[给AF的] System35.exe修改备忘录发表时间: 2005-10-6 17:20:12 | FLOOR ATTIC | | GUESTCODE | 136E9A02A6 | 首先说一些和System35的修改不相关的事。 公告: N天以后将发布测二版, N >= 3 ……, 请大家继续支持测试工作。 希望今后能够每一两个月就发布一个新版本……当然这要看情况。 其实我只是个汉化外行,但对兰斯这个游戏, 完毕,以下是纯技术帖。 那天偶然发现,原来AF就是以前汉化大恶司的那位, 所用的工具是W32Dsm和UltraEdit。 一、 首先要让System35.exe能够显示GB编码的汉字。 用W32Dsm打开System35.exe, 有这么一段: :00418145 57 push edi 这里调用了CreateFont()。查看CreateFont()的函数原型,发现是这样的: HFONT CreateFont( 注意其中的参数 fdwCharSet, 这个参数指定了字符集。 在WinGDI.h中有字符集的定义 push 00000080 是把参数0×80压栈,也就是把字符集指定为SJIS。 现在我们要显示GB编码的汉字,所以需要把该参数指定为GB2312_CHARSET。 二、避免乱码及其他不正常现象。 System35中大量使用了半角片假名。这在汉化过程中会造成乱码及命令解析错误等等非正常现象。 所谓半角片假名,是指只占一个字节的片假名。其值范围从0xA0到0xDF。 再举个例子,GB编码的全角空格是两个字节 A1A1, 这两个字节会被System35认为是2个半角片假名,然后System35自动的把半角片假名转换成全角平假名,(如果事先已经改过CreateFont的参数的话,)好好的一个空格就会变成两个汉字,当然是乱码…… 再举个例子,汉字B140(盶,不常用,说明问题而已)。System35会把第一个字节B1认为是一个半角片假名(半角的ア,输出时会自动转成全角的あ),那剩下的40怎么办?System35会认为这是一个命令……于是就此走上崩溃之路…… 对System35做两个地方的修改就可以分别避免这两个现象。值得一提的是System35对半角片假名的检测有三个地方,其中一个我至今不知道作用,所以一直没改。目前好像挺正常,今后可能也会有修改的必要。 修改位置: 修改方法很多,不赘述。思路就是,取消对0xA0~0xE0进行的特殊处理 三、 做了以上修改后,发现还是有乱码? 有些字符,比如数字和空格,不是直接存放在脚本中,而是经程序转换的。 修改以下的地方即可: 四、 竟然还是有乱码???? 这时的问题出在EXE中。把0×00036c00的一串SJIS码改成GB码即可。 五、 还会不会有换码了????? 静观其变,发现一处修正一处。 以上修改测一版就完成了,下面的修改将反映在测二版中。 五、支持字体的选择功能。 在日文系统下,测一版也是能够选择字体的, 非常感谢 兄提供了具体修改方法。 另外还有个小问题,经测试发现,如果直接把80改成86的话,汉化版在日文系统下就无法选择字体了……另外考虑到大陆和台湾都有这个游戏的支持者,所以在实际修改的时候,我稍微变通了一下,允许80,86,88三种类型的字体。 六、汉化了菜单等资源。虽然简陋的程序图标看起来也颇为不舒服……不管它,以后再说。 做这事有现成的工具,如exescope等等,简单易用。 七、最无价值的改动!!!!!! 我有一台破笔记本。配置不错,但CPU是AMD芯片,发热量巨巨巨巨巨巨巨大。一旦CPU100%工作,那么短则10秒,慢则5分钟,机器必定死机。 把任务管理器最小化在任务栏右下角,运行这个游戏,你发现了什么?CPU占用率是永远的100%。这对我的笔记本可是超杀啊!!!!! 于是我另外修改了一个System35.exe,在每次PeekMessage之前,让程序Sleep1毫秒,达到降低CPU使用率的目的。这样改虽然不是没有缺点,但至少这样做能大大降低CPU的发热量。看看任务管理器,cool~~~~靠,爽死老夫了! 在测二版中我将同时提供正常版和COOL版两个EXE。当然对台式机和非AMD芯片笔记本的用户来说,COOL版除了降低游戏流畅度以外,毫无意义。 |
| 发表时间: 2005-10-6 17:23:18 | FLOOR 8 | | GUESTCODE | 136E9A02A6 | 作者:测二版即将面市 晕倒,空了HMX-12兄的名字…… 五、支持字体的选择功能。 在日文系统下,测一版也是能够选择字体的, 非常感谢HMX-12兄提供了具体修改方法。 另外还有个小问题,经测试发现,如果直接把80改成86的话,汉化版在日文系统下就无法选择字体了……另外考虑到大陆和台湾都有这个游戏的支持者,所以在实际修改的时候,我稍微变通了一下,允许80,86,88三种类型的字体。 |
| 发表时间: 2005-10-8 18:14:06 | FLOOR 7 | 作者:HMX-12 楼主解释得很详细,我认为一般程序汉化步骤就是修改字符集、字符处理、内码转换/翻译和字体选择(可选),楼主各方面都涉及到,我想也没什么好补充的了。 |
| 发表时间: 2005-10-8 18:23:15 | FLOOR 6 | 作者:邪见 要不开个置顶的技术贴吧? |
| 发表时间: 2005-10-8 20:24:27 | FLOOR 5 | | GUESTCODE | 136E9A02A6 | 作者:测二版发布推迟…… >> 我认为字符集的选择必须和CreateFont函数一致,不然的话虽然菜单显示有很多字体,但实际上字符集不一致的字体即使选择了也没有效果。 最初我也是这么想的,但实际上是有效果的。下图是在日文XP上运行汉化版: >> 同样有一些修改(如Shift-JIS转GB的字符串)是不能正常运行于非简体系统的,考虑到广大港台支持者,建议楼主在下一次测试时发布单独的繁体中文BIG5版。 这个要看情况。如果字符串是通过CreateFont()输出,那就不会有此问题。如果是通过其他途径,比如CreateMessageBox之类的话,就可能会有问题了……所以修改EXE的0×00036c00的一串SJIS码,是不会有这方面问题的。菜单资源也没问题。目前有问题的窗口标题栏,以及选择“终了”和“截取图片”以后出现的MessageBox。为了这不到20个字维护两个版本,好像不是很有必要。 >> 刚巧我的笔记本也是AMD的AthlonXP,运行楼主修改的程序一段时间,感觉发热量的确少了一些 |
| 发表时间: 2005-10-9 21:20:41 | FLOOR 4 | 作者:HMX-12 看了楼主截图,我的看法是有部分字体是支持多字符集的。例如常见的MS Pゴシック除了支持日语之外,还支持德语、俄语和希腊语等,同样部分中文字体也很有可能支持日文字符集。这样就能解释为什么EnumFontFamilies枚举出的日文字体给CreateFont同样有效。字体方面我觉得和所选择的操作系统有很大关联,还是看一下别人运行的情况再说吧。 |
| 发表时间: 2005-10-9 21:25:28 | FLOOR 3 | | GUESTCODE | 1EEA954C4118C9 | 作者:鱼肠剑 中文字体都只支持部分日文字符,而且因为编码问题是不能通用的。 不过我手上有几个日文化的中文字体集,如果楼主需要的话可以提供。 |
| 发表时间: 2005-10-10 12:01:29 | FLOOR 2 | | GUESTCODE | 136E9A02A6 | 作者:测二版发布推迟…… 鱼肠的好东西还真多 简体中文系统对日文支持得还是可以的, |
战斗(开发中) 点击浏览该文件内政和战斗准备界面 点击浏览该文件游戏标题 点击浏览该文件
正在不断开发完善中,包括道具,回合切换,技能,数据存储。
欢迎大家提出建议或帮忙一起努力。 |
/**
+———————————————————+
| |
| Control class |
| version 0.05 |
| 2005.9.11 |
| 作者: af |
| http://www.sound.jp/airforce/ |
| Email:sidealice@yahoo.com.cn |
| |
|=========================================================|
| |
| 全局变量: |
| _global.mapW 地图宽 |
| _global.mapH 地图高 |
| _global.ntileY Tile在Y方向个数 |
| _global.ntileX Tile在X方向个数 |
| _global.tileW Tile长 |
| _global.tileH Tile宽 |
| _global.rootPath “_root” |
| _global.mapPath “_root.map” | |
| _global.tilePath “_root.map.tile”*未用 |
| _global.charPath “_root.map.char” |
| _global.clicked 鼠标点击 |
| _global.targetx 目标Tile的X格数 |
| _global.targety 目标Tile的Y格数 |
| _global.charMoving 角色移动 |
| |
+———————————————————+
_global.currentState 当前状态
_global.ctrlPath 控制路径
_root.attachMovie(”mouse”,”mouse”,200000);
eval(_global.mapPath).attachMovie(”char”,cName,100000);
*/
class ctrl extends Object {
public var ctrlName:String;
public function ctrl(cName:String) {
this.ctrlName = cName;
eval(_global.mapPath).attachMovie(”ctrl”,cName,150000);
_global.ctrlPath = eval(_global.mapPath + “.” + this.ctrlName);
}
public function drawCtrl(nx:Number, ny:Number) {
eval(_global.ctrlPath)._x = nx;
eval(_global.ctrlPath)._y = ny;
}
}