魂狼下载:专业免费游戏下载中心

中世纪2-教你添加新兵种

编辑:admin 时间:2012-03-13 14:03:42 来源:魂狼

游侠会员:sagius<原创>
声明:
1. 这篇帖子的内容将涉及一些未经格式化的文件,对此的修改将十分繁琐。对修改兴趣不大的朋友,请参阅jyh4nt的相关论题:
http://game1.ali213.net/thread-1324097-1-1.html
2. 后面涉及的内容并非我的原创。国外的论坛上对此已有很深入的讨论。这里只是一些归纳和自己的感想。下面列出本文所参考的国外论坛里的帖子:
http://forums.totalwar.org/vb/showthread.php?t=75706
http://www.twcenter.net/forums/showthread.php?t=77323
3. 所有将提到的修改,都作了测试并通过。在本文的最后,有测试修改后的文件下载,可供参考
4. 因为不会贴图,所以在最后附加了所有内容的Word档可以下载,更加清晰明了
好了,我想,现在留下的都是有足够耐心,喜爱修改,甚至多过玩游戏本身的家伙们了。修改本身就是创造,所以,有一些东西,不弄清楚是不行的。中2发行已经很久了,但对于怎样添加新的部队,还是没有统一的解决方法。这里要讨论和实现的,是以下几点:
1. 添加新的部队
2. 为新加的部队挑选一个兵种贴图,可以是游戏里的任意一种,或是自己做的贴图
3. 为这个部队挑选游戏中显示的兵牌,和部队介绍中显示的图案
4. 为这个部队取一个名字,并且定义其兵种介绍(分为简单介绍和详细介绍)
5. 修改建筑文件,使新部队可以在战役任务中被生产
之前在“添加兵种并显示其正常贴图”一文中,用了哥特下马骑士的例子。后来发现,这并不是一个很好的例子,因为把马的因素忽略了。东方国家是没有披甲马的,所以如果有人把Lancers改给土耳其,马就看不见了。所以,在这个帖子里用的是Lancers的例子——不是一般的Lancers,而是骑着骆驼的Lancers。并且把这个部队给了葡萄牙(既没有骆驼兵,也没有Lancers)。下面是效果图:
好,现在就开始一步一步修改..
1.添加新的部队
这个是老生常谈,用任何一种文本编辑器打开游戏目录 dataexport_descr_unit.txt 这个文件,搜索Lancers一词,找到其兵种描述的一段,复制下来。紧接着这一段,空两行,在每个空行上打两个空格,粘贴刚才复制的文字。修改其中的type, dictionary 和 ownship 这三项,最后的结果如下:
type Camel Lancers
dictionary Camel_Lancers ; Lancers
category cavalry
class heavy
voice_type Heavy
banner faction main_cavalry
banner holy crusade_cavalry
soldier Lancers, 32, 0, 1
mount camel
mount_effect elephant -4, camel -4
attributes sea_faring, hide_forest, hardy, can_withdraw, can_formed_charge, knight
formation 2, 4.4, 3, 6, 2, square, wedge
stat_health 1, 0
stat_pri 13, 4, no, 0, 0, melee, melee_blade, piercing, spear, 0, 0.7
;stat_pri_ex 0, 0, 0
stat_pri_attr no
stat_sec 14, 0, no, 0, 0, melee, melee_blade, piercing, sword, 0, 0.7
;stat_sec_ex 0, 0, 0
stat_sec_attr no
stat_pri_armour 10, 6, 0, metal
;stat_armour_ex 10, 11, 12, 0, 6, 0, 0, metal
stat_sec_armour 0, 0, flesh
stat_heat 6
stat_ground 0, -2, -4, 0
stat_mental 11, impetuous, trained
stat_charge_dist 45
stat_fire_delay 0
stat_food 60, 300
stat_cost 1, 1130, 410, 130, 100, 1130, 4, 230
armour_ug_levels 5, 6, 6
armour_ug_models Lancers, Lancers, Lancers
ownership portugal
era 2 portugal
;unit_info 13, 0, 16
保存并退出
2.贴图部分
这里可能是最难的部分了。对于这部分我还会专门写帖子来讨论。
游戏目录下dataunit_modelsbattle_models.modeldb 这个文件是用来指定贴图的,可以用文本编辑器打开。因为没有格式化的关系,很多人看到眼花,改了一下,不成功就放弃了。让我们再来看一看这个让人头痛的文件吧,这次或许有收获。
我们搜索Lancers这个兵种,可以看到以下一段:
7 lancers 1 4 55 unit_models/_Units/LN_Gothic_RN_Plate/lancers_lod0.mesh 121 55 unit_models/_Units/LN_Gothic_RN_Plate/lancers_lod1.mesh 900 55 unit_models/_Units/LN_Gothic_RN_Plate/lancers_lod2.mesh 2500 55 unit_models/_Units/LN_Gothic_RN_Plate/lancers_lod3.mesh 6400 1 6 france 80 unit_models/_Units/LN_Gothic_RN_Plate/textures/LN_gothic_RN_plate_france.texture 80 unit_models/_Units/LN_Gothic_RN_Plate/textures/LN_gothic_RN_plate_normal.texture 40 unit_sprites/france_Gendarmes_sprite.spr 1 6 france 59 unit_models/AttachmentSets/Final Heater_france_diff.texture 59 unit_models/AttachmentSets/Final Heater_france_norm.texture 0 1 5 Horse 13 MTW2_HR_Lance 18 MTW2_HR_Non_Shield 1 21 MTW2_HR_Lance_Primary 1 18 MTW2_Sword_Primary 16 -0.090000004 0 0 -0.34999999 0.80000001 0.60000002
这个属于比较短的,应为只有法国可以造Lancers。根本没有办法看,不是吗。其实,这个不是给人看的,而是给机器看的。每次载入游戏的时候,都要读这个文件,因此格式至关重要。那么,有没有办法让机器和人都看得清楚呢?嗯,是有的,不过先要有几个原则:
1.所有代表字符长度的数字,必须和其后的字符在同一行中
2.所有格式中的空格,都要保留
3.否则,你连开始画面都没有看到,就会跳出(这个倒方便了测试)
好,我们试着格式化一下上面的这段文字:
[动画部分]
(字符长度 ->)7 lancers(<- 模型名称)
(字符长度 ->)1 4(<- 接下来.mesh文件的个数)
(字符长度 ->)55 unit_models/_Units/LN_Gothic_RN_Plate/lancers_lod0.mesh 121(<- .mesh文件名称)
(字符长度 ->)55 unit_models/_Units/LN_Gothic_RN_Plate/lancers_lod1.mesh 900(<- .mesh文件名称)
(字符长度 ->)55 unit_models/_Units/LN_Gothic_RN_Plate/lancers_lod2.mesh 2500(<- .mesh文件名称)
(字符长度 ->)55 unit_models/_Units/LN_Gothic_RN_Plate/lancers_lod3.mesh 6400(<- .mesh文件名称)
[贴图部分]
(可以用这个盔甲模型的国家数 ->)1
(字符长度 ->)6 france(法国)
(字符长度 ->)80 unit_models/_Units/LN_Gothic_RN_Plate/textures/LN_gothic_RN_plate_france.texture
(字符长度 ->)80 unit_models/_Units/LN_Gothic_RN_Plate/textures/LN_gothic_RN_plate_normal.texture
(字符长度 ->)40 unit_sprites/france_Gendarmes_sprite.spr(<- 脚本文件名称)
(可以用这个附件模型的国家数 ->)1
(字符长度 ->)6 france(法国)
(字符长度 ->)59 unit_models/AttachmentSets/Final Heater_france_diff.texture
(字符长度 ->)59 unit_models/AttachmentSets/Final Heater_france_norm.texture 0
[武器部分]
(下面关于坐骑描述的行数 ->)1
(坐骑为马 ->)Horse
(字符长度 ->)13 MTW2_HR_Lance(<- 长枪)
(字符长度 ->)18 MTW2_HR_Non_Shield(<- 无盾)
(下面关于武器描述的行数 ->)1
(字符长度 ->)21 MTW2_HR_Lance_Primary(<- 主武器为长枪)
(下面关于武器描述的行数 ->)1
(字符长度 ->)18 MTW2_Sword_Primary(<- 副武器为骑士剑)
16 -0.090000004 0 0 -0.34999999 0.80000001 0.60000002(<- 位置。作用不明)
这样的格式是不是清楚一点了呢?关键是,这样的格式,电脑也看得懂!!当然,所有原格式中的空格都要保留。如果谁有毅力把battle_models.modeldb整个文件都转成这样的格式,绝对是大功一件。
现在的任务是,让葡萄牙也可以使用Lancers模型。红色是经过变更的地方,蓝色是经过添加的地方,修改如下:
[动画部分]
(字符长度 ->)7 lancers(<- 模型名称)
(字符长度 ->)1 4(<- 接下来.mesh文件的个数)
(字符长度 ->)55 unit_models/_Units/LN_Gothic_RN_Plate/lancers_lod0.mesh 121(<- .mesh文件名称)
(字符长度 ->)55 unit_models/_Units/LN_Gothic_RN_Plate/lancers_lod1.mesh 900(<- .mesh文件名称)
(字符长度 ->)55 unit_models/_Units/LN_Gothic_RN_Plate/lancers_lod2.mesh 2500(<- .mesh文件名称)
(字符长度 ->)55 unit_models/_Units/LN_Gothic_RN_Plate/lancers_lod3.mesh 6400(<- .mesh文件名称)
[贴图部分]
(可以用这个盔甲模型的国家数 ->)2
(字符长度 ->)8 portugal(法国)
(字符长度 ->)80 unit_models/_Units/LN_Gothic_RN_Plate/textures/LN_gothic_RN_plate_france.texture
(字符长度 ->)80 unit_models/_Units/LN_Gothic_RN_Plate/textures/LN_gothic_RN_plate_normal.texture
(字符长度 ->)40 unit_sprites/france_Gendarmes_sprite.spr(<- 脚本文件名称)
(字符长度 ->)6 france(法国)
(字符长度 ->)80 unit_models/_Units/LN_Gothic_RN_Plate/textures/LN_gothic_RN_plate_france.texture
(字符长度 ->)80 unit_models/_Units/LN_Gothic_RN_Plate/textures/LN_gothic_RN_plate_normal.texture
(字符长度 ->)40 unit_sprites/france_Gendarmes_sprite.spr(<- 脚本文件名称)
(可以用这个附件模型的国家数 ->)2
(字符长度 ->)8 portugal(法国)
(字符长度 ->)59 unit_models/AttachmentSets/Final Heater_france_diff.texture
(字符长度 ->)59 unit_models/AttachmentSets/Final Heater_france_norm.texture 0
(字符长度 ->)6 france(法国)
(字符长度 ->)59 unit_models/AttachmentSets/Final Heater_france_diff.texture
(字符长度 ->)59 unit_models/AttachmentSets/Final Heater_france_norm.texture 0
[武器部分]
(下面关于坐骑描述的行数 ->)1
(坐骑为马 ->)Horse
(字符长度 ->)13 MTW2_HR_Lance(<- 长枪)
(字符长度 ->)18 MTW2_HR_Non_Shield(<- 无盾)
(下面关于武器描述的行数 ->)1
(字符长度 ->)21 MTW2_HR_Lance_Primary(<- 主武器为长枪)
(下面关于武器描述的行数 ->)1
(字符长度 ->)18 MTW2_Sword_Primary(<- 副武器为骑士剑)
16 -0.090000004 0 0 -0.34999999 0.80000001 0.60000002(<- 位置。作用不明)
如果理解了以上内容,那么,接下来让葡萄牙可以使用骆驼就成为依样画葫芦了。坐骑的描述在同一文件的一开始。我们搜索camel,得到下面这段:
11 mount_camel
1 4
46 unit_models/Mounts/Camel/mount_camel_lod0.mesh 121
46 unit_models/Mounts/Camel/mount_camel_lod1.mesh 900
46 unit_models/Mounts/Camel/mount_camel_lod2.mesh 2500
46 unit_models/Mounts/Camel/mount_camel_lod3.mesh 10000
4
5 moors
47 unit_models/Mounts/Camel/textures/camel.texture
54 unit_models/Mounts/Camel/textures/camel_normal.texture
41 unit_sprites/moors_Mount_Camel_sprite.spr
5 egypt
47 unit_models/Mounts/Camel/textures/camel.texture
54 unit_models/Mounts/Camel/textures/camel_normal.texture
41 unit_sprites/egypt_Mount_Camel_sprite.spr
5 slave
47 unit_models/Mounts/Camel/textures/camel.texture
54 unit_models/Mounts/Camel/textures/camel_normal.texture
41 unit_sprites/slave_Mount_Camel_sprite.spr
4 merc
47 unit_models/Mounts/Camel/textures/camel.texture
54 unit_models/Mounts/Camel/textures/camel_normal.texture
40 unit_sprites/merc_Mount_Camel_sprite.spr 0
1
5 Horse
8 fs_camel
0 0 0 -1 0 0 0 0 0 0
把它改成:
11 mount_camel
1 4
46 unit_models/Mounts/Camel/mount_camel_lod0.mesh 121
46 unit_models/Mounts/Camel/mount_camel_lod1.mesh 900
46 unit_models/Mounts/Camel/mount_camel_lod2.mesh 2500
46 unit_models/Mounts/Camel/mount_camel_lod3.mesh 10000
5
8 portugal
47 unit_models/Mounts/Camel/textures/camel.texture
54 unit_models/Mounts/Camel/textures/camel_normal.texture
41 unit_sprites/moors_Mount_Camel_sprite.spr
5 moors
47 unit_models/Mounts/Camel/textures/camel.texture
54 unit_models/Mounts/Camel/textures/camel_normal.texture
41 unit_sprites/moors_Mount_Camel_sprite.spr
5 egypt
47 unit_models/Mounts/Camel/textures/camel.texture
54 unit_models/Mounts/Camel/textures/camel_normal.texture
41 unit_sprites/egypt_Mount_Camel_sprite.spr
5 slave
47 unit_models/Mounts/Camel/textures/camel.texture
54 unit_models/Mounts/Camel/textures/camel_normal.texture
41 unit_sprites/slave_Mount_Camel_sprite.spr
4 merc
47 unit_models/Mounts/Camel/textures/camel.texture
54 unit_models/Mounts/Camel/textures/camel_normal.texture
40 unit_sprites/merc_Mount_Camel_sprite.spr 0
1
5 Horse
8 fs_camel
0 0 0 -1 0 0 0 0 0 0
这样,葡萄牙就有骆驼骑了!
注意:
1.建议添加在所有已有国家的前面(这里是把葡萄牙加在法国的前面),这样可以避免出错
2.如果有盔甲升级,也要为所有盔甲等级作如此的添加,否则升级后的部队无法显示。升级后的模型名称是原名称加级别名,如lancers的升级模型是lancers_ug1,lancers_ug2等等(只是举个例子,实际上lancers的盔甲不能升级)
3.不要简单复制上面的代码。要严格按照原格式的空格数,否则游戏跳出
3.兵牌
如果你能坚持看到这里,那么恭喜你,最烦人的操作已经过去,接下来的内容,对你来说绝对是小儿科。
一个兵种拥有两个图片文件,我们以葡萄牙为例:
1.存放在datauiunitsportugal下的tga文件,是在打仗时列于屏幕底部该兵种的兵牌,文件名和export_descr_unit.txt中该兵种的dictionary要一致
2.存放在datauiunit_infoportugal下的tga文件,是当鼠标右击该兵种兵牌所显示的详细信息中的图片,要比兵牌图片大不少
现在的工作就很简单了。偷懒的话,找到法国文件夹里Lancers的图片,复制到葡萄牙的文件夹里,再把名字分别改为camel_lancers.tga和camel_lancers_info.tga就好了。有特殊爱好的人可以自己修改图片,或者加上一只骆驼会更合适一点…

4.兵种介绍
到现在为止,如果一切顺利的话,我们已经可以看到骑着骆驼的Lancers在自定义战役里一颠一颠的了(我真的一点不觉得他们骑骆驼的样子很好看)。不过当你的鼠标放在他的兵牌上,或者查看他的详细信息的时候,都不会有文字显示。这是应为我们还没有给我们的新兵命名。
这里我们可以不去修改dataexport_descr_unit_enums.txt文件,不会有任何问题。我们要关心的实际上是datatextexport_units.txt.strings.bin这个文件。不过,你可能已经猜到了,这又是一个未经格式化的文件(可恶的CA)。为了修改它,你需要strings.bin converter这个程序,你可以在本文的末尾看到他的下载链接。使用它很简单,把文件复制到datatext下,然后执行convert_all.bat。一些未格式化的文件会被转成格式化好的内容,其中就包括export_units.txt.strings.bin转化而成的export_units.txt。我们的目标就是export_units.txt,打开他,在一开始(第二行)插入以下几行:
{Camel_lancers}Camel Lancers
{Camel_lancers_descr}This is the lang introduce text about it
{Camel_lancers_descr_short}This is the short one about it
你可以用任何其他的字段替换{}以后的文字,然后储存退出。你可以再进入游戏看看。
5.修改建筑文件
还差一步就完美了。现在我们要把刚做好的骆驼Lancers放到战役任务中去,使它可以被葡萄要生产出来。这次要修改的文件是export_descr_buildings.txt。搜索找到building core_building,这个是城市的城墙。我们在每一级城墙的capability里面插入:
recruit_pool "Camel Lancers" 4 0.5 4 0 requires factions { Normans, }
四个数字分别代表招募数,补充速度,招募上限,士兵经验值(0到9)。
这样,只要你有城市,这个城市就有“骆驼Lancers”可供招募了。
好了,现在你可以对自己说,“我差不多知道该怎么添加新兵种了。说不定以后可以试着做自己的MOD”。
恭喜你!
最后的注意:
或许是我多嘴了,因为能看到这里的人,应该不会犯这样的错误:你要确认你的修改会起作用。到底是该修改原版data下的文件,还是mod里data下的文件,或者两个data下的文件都有一部分要修改。这要你自己决定。不管如何,你要让你的修改起作用。

热门游戏