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

[讨论] 9.08完美汉化版中科技与组件的修改

[复制链接]
发表于 2013-10-26 01:00:08 | 显示全部楼层 |阅读模式
本帖最后由 linercom 于 2013-10-26 01:25 编辑

首先是受“关于汉化、飞船速度、报错等
http://bbs.deeptimes.org/forum.php?mod=viewthread&tid=2130347&fromuid=9749”帖子楼主的启发,发现了可以对908汉化优化汉字版的科技、组件的修改,相对是比较复杂的,希望有用。
在908版中有个DistantWorlds.Types.dll文件,基本上各科技与组件都在这里,你还需要去下载一个ildasm,其实你可以玩这个游戏的话,你的C盘中也会找得到这个程序,我是用的DotNetHelper v2.1,相对比较容易些,很多地方可下。(顺便给个地址吧:http://www.cngr.cn/dir/217/360/2007032918505.html

1、下面先用DotNetHelper打开DistantWorlds.Types.dll文件,定好目标位置后,点反编译,然后到目标文件的位置,可以看到解开了几个文件,其中一个是DistantWorlds.Types.il,主要就是这个了,可以用uedit32文本编辑器打开。

2、在GameText.txt中搜索你要修改的科技或是组件对应的英文。
我这里以高速鱼雷为例,请见下图


要注意,当科技触发新的组件时,请直接找组件的名称进行修改。
例中科技名是“快速能量推进(Fast Energy Propulsion)”,产生的组件是“高速鱼雷(Velocity Shard)”,所以你应该在DistantWorlds.Types.il中按Ctrl+f进行搜索Velocity Shard,然后可看到如下:
————————
    IL_0504:  ldstr      "Velocity Shard"
    IL_0509:  call       string DistantWorlds.Types.TextResolver::GetText(string)
    IL_050e:  stelem.ref
    IL_050f:  ldloc.s    V_15
    IL_0511:  ldc.i4.5
    IL_0512:  ldc.i4.s   10 //对应大小
    IL_0514:  box        [mscorlib]System.Int32
    IL_0519:  stelem.ref
    IL_051a:  ldloc.s    V_15
    IL_051c:  ldc.i4.6
    IL_051d:  ldc.i4     0x2e630  //科研点(十进制为190K)(补个知识:十六进制表示为:0x开头,后面为数值,可用附件中计算器进行转换,在il文件中要以“idc.i4”)
    IL_0522:  box        [mscorlib]System.Int32
    IL_0527:  stelem.ref
    IL_0528:  ldloc.s    V_15
    IL_052a:  ldc.i4.7
    IL_052b:  ldc.i4.0  //静态能量消耗
    IL_052c:  box        [mscorlib]System.Int32
    IL_0531:  stelem.ref
    IL_0532:  ldloc.s    V_15
    IL_0534:  ldc.i4.8
    IL_0535:  ldc.i4.s   24  //伤害(il中-128到128的整数,可用“idc.i4.s”简化表达,超过128了就要去掉那个.s,并用16进制数,否则出错)
    IL_0537:  box        [mscorlib]System.Int32
    IL_053c:  stelem.ref
    IL_053d:  ldloc.s    V_15
    IL_053f:  ldc.i4.s   9
    IL_0541:  ldc.i4     0x276  //弹药范围 (276=630)
    IL_0546:  box        [mscorlib]System.Int32
    IL_054b:  stelem.ref
    IL_054c:  ldloc.s    V_15
    IL_054e:  ldc.i4.s   10
    IL_0550:  ldc.i4.s   24 //能量使用
    IL_0552:  box        [mscorlib]System.Int32
    IL_0557:  stelem.ref
    IL_0558:  ldloc.s    V_15
    IL_055a:  ldc.i4.s   11
    IL_055c:  ldc.i4     0xff  //弹药速度(ff=255)
    IL_055e:  box        [mscorlib]System.Int32
    IL_0563:  stelem.ref
    IL_0564:  ldloc.s    V_15
    IL_0566:  ldc.i4.s   12
    IL_0568:  ldc.i4.2    //伤害损失,可改为idc.i4.0,即没有伤害损失。(0-8数值推送到堆栈时,可直接用ldc.i4.0~8简化,超过8请用ldc.i4.s 9这样表达)
    IL_0569:  box        [mscorlib]System.Int32
    IL_056e:  stelem.ref
    IL_056f:  ldloc.s    V_15
    IL_0571:  ldc.i4.s   13
    IL_0573:  ldc.i4     0x9c4 //火力频率(9c4=2500ms即2.5秒)
    IL_0578:  box        [mscorlib]System.Int32
    IL_057d:  stelem.ref
    IL_057e:  ldloc.s    V_15
    IL_0580:  stelem.ref
    IL_0581:  ldloc.1
    IL_0582:  ldc.i4.6
    IL_0583:  ldc.i4.s   10
    IL_0585:  newarr     [mscorlib]System.Int32
    IL_058a:  dup
------------------------------------------------
可以注意到蓝色部分,都是从0开始递增的,估计是组件参数的序号。在这段代码之前还有组件所属的科技组、组件类别等,这里不太详细解答。不同类型的组件修改可类推。
组件开发出来后,后面都是通过科研来对组件进行升级,如“全面能量加速(Total Energy Acceleration)”将直接对高速鱼雷进行升级,所以要修改下级就要查找科技进行修改了。


请继续在DistantWorlds.Types.il中搜索英文Total Energy Acceleration,可看到如下:
------------------------------------------
    IL_0f80:  ldstr      "Total Energy Acceleration"
    IL_0f85:  call       string DistantWorlds.Types.TextResolver::GetText(string)
    IL_0f8a:  ldc.i4.1
    IL_0f8b:  ldc.i4.2
    IL_0f8c:  ldc.i4.4
    IL_0f8d:  ldc.r4     240000. //研究增加的科研点
    IL_0f92:  ldc.i4.s   15
    IL_0f94:  newobj     instance void DistantWorlds.Types.ResearchNodeDefinition::.ctor(int32,
                                                                                         string,
                                                                                         valuetype DistantWorlds.Types.IndustryType,
                                                                                         valuetype DistantWorlds.Types.ComponentCategoryType,
                                                                                         int32,
                                                                                         float32,
                                                                                         int32)
    IL_0f99:  stelem.ref
    IL_0f9a:  ldloc.1
    IL_0f9b:  ldc.i4.s   31
    IL_0f9d:  newobj     instance void class [mscorlib]System.Collections.Generic.List`1<int32>::.ctor()
    IL_0fa2:  stloc.s    V_76
    IL_0fa4:  ldloc.s    V_76
    IL_0fa6:  ldc.i4.6
    IL_0fa7:  callvirt   instance void class [mscorlib]System.Collections.Generic.List`1<int32>::Add(!0)
    IL_0fac:  ldloc.s    V_76
    IL_0fae:  ldc.i4.4
    IL_0faf:  callvirt   instance void class [mscorlib]System.Collections.Generic.List`1<int32>::Add(!0)
    IL_0fb4:  ldloc.s    V_76
    IL_0fb6:  ldc.i4.s   36  //伤害(科技中没有组件“大小”值。只在组件中修改就可以了)
    IL_0fb8:  callvirt   instance void class [mscorlib]System.Collections.Generic.List`1<int32>::Add(!0)
    IL_0fbd:  ldloc.s    V_76
    IL_0fbf:  ldc.i4     0x2ee //范围(2ee=750)
    IL_0fc4:  callvirt   instance void class [mscorlib]System.Collections.Generic.List`1<int32>::Add(!0)
    IL_0fc9:  ldloc.s    V_76
    IL_0fcb:  ldc.i4.s   24 //使用能量
    IL_0fcd:  callvirt   instance void class [mscorlib]System.Collections.Generic.List`1<int32>::Add(!0)
    IL_0fd2:  ldloc.s    V_76
    IL_0fd4:  ldc.i4     0x118 //速度118=280)
    IL_0fd9:  callvirt   instance void class [mscorlib]System.Collections.Generic.List`1<int32>::Add(!0)
    IL_0fde:  ldloc.s    V_76
    IL_0fe0:  ldc.i4.2  //伤害损失
    IL_0fe1:  callvirt   instance void class [mscorlib]System.Collections.Generic.List`1<int32>::Add(!0)
    IL_0fe6:  ldloc.s    V_76
    IL_0fe8:  ldc.i4     0x7d0 //火力频率(7d0=2000ms,即2秒)
    IL_0fed:  callvirt   instance void class [mscorlib]System.Collections.Generic.List`1<int32>::Add(!0)
    IL_0ff2:  ldloc.s    V_76
    IL_0ff4:  ldc.i4.0  //轰炸,以下的我也不清楚是什么
    IL_0ff5:  callvirt   instance void class [mscorlib]System.Collections.Generic.List`1<int32>::Add(!0)
    IL_0ffa:  ldloc.s    V_76
    IL_0ffc:  stelem.ref
    IL_0ffd:  ldloc.s    V_8
    IL_0fff:  ldc.i4.s   31
    IL_1001:  newobj     instance void class [mscorlib]System.Collections.Generic.List`1<int32>::.ctor()
    IL_1006:  stloc.s    V_77
    IL_1008:  ldloc.s    V_77
    IL_100a:  ldc.i4.s   30
    IL_100c:  callvirt   instance void class [mscorlib]System.Collections.Generic.List`1<int32>::Add(!0)
    IL_1011:  ldloc.s    V_77
    IL_1013:  stelem.ref
    IL_1014:  ldloc.0
    IL_1015:  ldc.i4.s   32
    IL_1017:  ldc.i4.s   32

当一切修改完成后,请再用DotNetHelper,在编译中IL文件中选择修改好的DistantWorlds.Types.il,他会自动找到资源文件,在输出类型中选择dll类型,Framework版本我用的是3.5,一切就绪后点编译右边的下箭头中选CMD输出,再点编译即可。当CMD窗口中很多文件掠过后,出现“Operation completed successfully”提示,说明一切正常。如果出现失败会提示是在多少行的语句出错,请再回去检查。正常编译后将修改后的DistantWorlds.Types.dll文件复制到游戏目录下覆盖原文件(请做好备份),然后进入游戏慢慢体验吧。

本帖子中包含更多资源

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

×
 楼主| 发表于 2013-10-26 01:26:01 | 显示全部楼层
以上鱼雷我已经改过了,所以和大家游戏中看到的可能不一样
回复

使用道具 举报

发表于 2013-10-26 02:04:25 | 显示全部楼层
本帖最后由 自由的骑士 于 2013-10-26 16:15 编辑

我倒是比较感兴趣能不能以此推理出到底是哪个环节出了问题导致汉化版跳出不断.
我指的是最新版暗影1908的汉化版,而且用论坛里某个帖子里的最新GT覆盖19011英文版后就没有跳出问题,但是百科和研究都是英文,因此我想问题应该是出在百科上吧??
回复

使用道具 举报

发表于 2013-10-26 08:26:33 | 显示全部楼层
捉鸡的是每次更新都必须重头做一遍,于是最初的汉化组放弃跟进汉化了.............伤不起
回复

使用道具 举报

发表于 2013-10-26 11:33:40 | 显示全部楼层
嗯嗯,楼主可谓敏而好学了。分析的很好,我会再去试试。
回复

使用道具 举报

发表于 2013-10-26 11:36:24 | 显示全部楼层
0809000 发表于 2013-10-26 08:26
捉鸡的是每次更新都必须重头做一遍,于是最初的汉化组放弃跟进汉化了.............伤不起 ...

其实,我对多语言版是有一点儿了解的,如果把所有的字符串(包括菜单)全部提取出来做成资源文件,那么汉化起来就非常简单(更确切的说,是多语言化)。只是不明白为什么游戏的开发者不这么做。

这个游戏感觉在国内还是比较小众。

另外,我对其中的很多参数的限制也表示不满,既然要开放,何必限制。

回复

使用道具 举报

发表于 2013-10-26 16:48:27 | 显示全部楼层
volon2013 发表于 2013-10-26 11:36
其实,我对多语言版是有一点儿了解的,如果把所有的字符串(包括菜单)全部提取出来做成资源文件,那么汉 ...

完全难以理解的代码混淆程度,完全不可理解的新版本分离部分文本(注意不仅仅是部分,而且这部分文本中的一部分根本就无效)

为什么....只能问开发者了
回复

使用道具 举报

发表于 2013-10-26 17:58:45 | 显示全部楼层
0809000 发表于 2013-10-26 16:48
完全难以理解的代码混淆程度,完全不可理解的新版本分离部分文本(注意不仅仅是部分,而且这部 ...

嗯,还有那个type的dll没了。这个真的只有天知道了。
回复

使用道具 举报

 楼主| 发表于 2013-10-27 17:41:57 | 显示全部楼层
自由的骑士 发表于 2013-10-26 02:04
我倒是比较感兴趣能不能以此推理出到底是哪个环节出了问题导致汉化版跳出不断.
我指的是最新版暗影1908的汉 ...

908我玩到现在似乎没有你说的老是跳出的问题了啊?
至少我感觉我可以控制跳出,呵呵。跳出时会有前兆。只要我进研究界面时,整个界面开始频闪,就差不多过会儿就要出事了。所以我选择赶紧save,退出游戏再进,顺便去冲一咖啡。
回复

使用道具 举报

发表于 2013-10-27 17:52:25 | 显示全部楼层
linercom 发表于 2013-10-27 17:41
908我玩到现在似乎没有你说的老是跳出的问题了啊?
至少我感觉我可以控制跳出,呵呵。跳出时会有前兆。只 ...

老是进退游戏很杀伤游戏乐趣的(至少我是这么认为的).
回复

使用道具 举报

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

本版积分规则

关闭

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

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