假定一个英文MOD名为:test mod
MOD的路径为
x:\Program Files\Firaxis Games\Sid Meier's Civilization 4\Beyond the Sword\Mods\test mod
路径 test mod\Assets 目录下有一个CvGameCoreDLL.dll文件
这里当然不是叫你去直接修改CvGameCoreDLL.dll,现在我们要找一下有没他的源码,如果作者开源的话会带在一起,或者在这个MOD的发布面会写明。
如果没找到,那就没办法了,只要MOD的作者没病(可能讲得有点太过份),问题都不会有多大。
如果MOD里自带了,那么,他可能是一个叫“CvGameCoreDLL”、“source”的文件夹或者压缩包,里面都是VC++的文件,当然有可能是其它名,反正要自己检查。
现在假设 test mod 下有一个叫 CvGameCoreDLL 的文件夹,里面都是VC++的文件。
要处理的文件有5个,CvDefines.h, CvDLLInterfaceIFaceBase.h, CvGameTextMgr.cpp, CvInitCore.cpp, CvString.h
处理他们干什么?因为要配合3.19汉化版的主程序,修改相应的函数以支持他的功能,手改的话参考日文版的源码,不过
作为前人,我以经写好程序来处理了,下载:[MOD工具]BTS 3.19 英文版改 3.19 汉化/日文版
运行后,就在第一页“CvGameCoreDLL”,你会看到有个框,把test mod下的CvGameCoreDLL文件夹直接拉到框内,放手,程序就会检查是相应的文件是否存在
存在就会列出来,你只面要点“修改”按钮,很快就完成了。
现在你可以重新编译DLL了,首先要加个预处理定义 CYBERFRONT ,这将编译成支持显示和输入自定义双字节,不加就是原来的单字节。
编译没错一次通过的话,就没问题了。
现在要注意一些暗藏的隐患,例如字体图片文件内有英文,所以输出英文是没问题,但没中文,输出中文就不能了,变?号。
例子:FFH2上的CvGameTextMgr.cpp
1 2 3 4 5 6 7 8 9 10 11 |
void CvGameTextMgr::buildCityBillboardIconString( CvWStringBuffer& szBuffer, CvCity* pCity) { 。。。 //FfH: Added by Kael 07/02/2008 if (pCity->getCivilizationType() != GET_PLAYER(pCity->getOwnerINLINE()).getCivilizationType()) { szBuffer.append(CvWString::format(L" (%s)", GC.getCivilizationInfo(pCity->getCivilizationType()).getShortDescription())); } //FfH: End Add } |
以上的代码在英文上自然是没问题,语言换成中文后,输出的是中文,变?了。
解决方法?各位程序猿自然会有自己的办法。