从测试版一出来,作者就开始钻研帝国3的修改方法,其实并不难,主要文件都是解了密的Xml文件,甚至比国家的崛起修改还容易!
前言:
这是初级篇,主要研究Data目录下的三个文件的修改,涉及兵种,建筑,科技,翻译等内容。
修改后的效果显示:
帝国时代3 src="http://www.y866.cn/libpic/img5/duoteimg/techImg/201111/duote_22_09-36-19.jpg">
在陆地上的战船
需要的三个文件:
Data目录下的
proto.xml
techtree.xml
各文件主要内容:
proto.xml:单位的基本属性
stringtable.xml:显示语言
techtree.xml:科技和卡片的基本属性
一.单一的文件修改
1.proto.xml
<Unit id ='X' name ='XXX'>
单位的第一条属性,不做复杂修改的话,建议不要动.
<DBID>X</DBID>
一般不做修改
<DisplayNameID>X</DisplayNameID>
在游戏中显示的文字代号,与stringtable.xml关联.
<EditorNameID>X</EditorNameID>
同样是显示的文字代码,但不知在哪里起作用,一般不做修改,与stringtable.xml关联.
<ObstructionRadiusX>***</ObstructionRadiusX>
<ObstructionRadiusZ>***</ObstructionRadiusZ>
单位的实际体积,数值越大,体积越大,当然目标也越大.
<FormationCategory>X</FormationCategory>
有Ranged,protected,body,mobile这几类
protected一般用于炮兵及几乎没有攻击能力的单位
body一般用于近战型步兵
mobile一般用于骑兵
<MaxVelocity>X</MaxVelocity>
<MaxRunVelocity>X</MaxRunVelocity>
<MovementType>X</MovementType>
单位移动模式,很有修改价值
共分air,water,land三类
air:移动完全不受阻碍,即在天上飞.
water:只能在海里移动.
land:只能在陆地移动.
<TurnRate>X</TurnRate>
单位转弯时的速度,数值越大,转弯越快.
(如果数值过小,单位在转弯时会先朝目标方向移动,再慢慢把身子转过去)
<AnimFile>
建议不做修改.
<ImpactType>X</ImpactType>
单位自身类型,如Flesh(人体),Animal(动物),Wood(木制),Stone(石制)...
<icon>X</Icon>
<PortraitIcon>X</PortraitIcon>
单位调用的头像文件,这是当你点选某个单位时,它的大&小肖像.
<RolloverTextID>X</RolloverTextID>
语言显示代码,这是显示在建造命令里或主城模式卡片里对单位进行描述的语言代码.
<ShortRolloverTextID>X</ShortRolloverTextID>
语言显示代码,当你将光标移动到某个单位上,显示的对单位进行描述的语言代码.
<InitialHitpoints>X</InitialHitpoints>
单位刚被生产出来的初始生命值,如果改为0...
很有修改价值
<MaxHitpoints>X</MaxHitpoints>
单位的最高生命值(未升级的情况下).
很有修改价值
<LOS>X</LOS>
单位视野,数值越大,视野越广.
很有修改价值
<ProjectileProtoUnit>X</ProjectileProtoUnit>
单位攻击时发射的投射物,即单位名称.
有修改价值
<UnitAIType>X</UnitAIType>
单位闲置时(暂时这么说吧)调用的AI类型.
很有修改价值
<BuildPoints>X</BuildPoints>
<TrainPoints>X</TrainPoints>
建筑/单位被产出来需要的时间.数值越大,生产越慢.
(如果将建筑物的改为0,则刚放下建筑就建成)
很有修改价值
<Bounty>X</Bounty>
<BuildBounty>X</BuildBounty>
单位死亡/生产出来加的经验值.
很有修改价值
<Cost resourcetype ='XXX'>X</Cost>
生产单位所需资源类型及数目.
很有修改价值
<InitialResource resourcetype ='XXX'>X</InitialResource>
提供资源开采的单位(如树,银矿),提供的资源类型及数目.
很有修改价值
<ResourceSubType>Gold</ResourceSubType>
提供资源开采的单位,提供的资源类型及数目(与上条对应).
很有修改价值
<BuildingWorkRate>X</BuildingWorkRate>
建筑工作速度(如研究,生产)的乘数.
很有修改价值
<MaxContained>X</MaxContained>
单位提供的驻扎空间.
有修改价值
<AllowedAge>X</AllowedAge>
单位被生产出来的最早时代(0-4).
有修改价值
<Armor type ='X' value ='X'></Armor>
单位护甲类型(ranged,siege,hand)及抵消伤害的百分比.一种单位能否有多于一种的护甲,我还没有试过.
(如0.2表示抵消攻击伤害的20%)
数值高并不意味着无敌!
这与后面的伤害类型有关,以后我会做说明.
很有修改价值
<BuilderLimit>X</BuilderLimit>
建造一个该单位的最大建筑工数量.
有修改价值
<GathererLimit>X</GathererLimit>
很有修改价值
<PopulationCount>X</PopulationCount>
每个该类单位所占人口.
(如果你想暴兵,就改为0吧)
很有修改价值
<PopulationCapAddition>X</PopulationCapAddition>
每个该类单位支持的人口.
很有修改价值
<UnitType>XXX</UnitType>
<Flag>XXX</Flag>
非常有修改价值!
可以定义单位最基本的属性.
如不会被Delete掉(<Flag>NotDeleteable</Flag>),英雄(<UnitType>Hero</UnitType>
)......
以后我会进行说明.
在<UnitType>XXX</UnitType>
的下面,通常有
<Train row ='X' page ='X' column ='X'>XXX</Train>
一大串
这是对该类单位可以生产单位的设定!非常有用!自己试着改一改,添一添,以后我会说明.
在<Flag>XXX</Flag>
的下面,通常有
<Command page ='X' column ='X'>XXX</Command>
这是对该类单位的某些能力(控制按钮)的设定,非常有用!自己试着改一改,添一添,以后我会说明.
在<Tactics>XXX</Tactics>
下面,通常会有
<ProtoAction>
XXX
</ProtoAction>
一类针对单位动作的设定,非常有用!其关联很多,自己试着改一改,以后我会具体说明.
很有修改价值!
<ProtoAction>到</ProtoAction>之间的一些设定:
<Damage>XXX</Damage> 单位攻击伤害.
<DamageType>XXX</DamageType> 伤害类型.
<MaxRange>XXX</MaxRange> 射程.
<ROF>XXX</ROF> 攻击速率(数值越小,速率越高).
<DamageCap>XXX</DamageCap> 不是很明确,似乎是一次攻击所能造成的最大伤害,一般用于舰船,数值=Damage*2
<DamageBonus type ='XXX'>X</DamageBonus> 对某类单位的伤害乘数.
其中XXX与对应单位的UnitType关联.
<DamageArea>XXX</DamageArea> 攻击的伤害范围.
<DamageFlags>XXX</DamageFlags> 未知.
引申,对于采集者的采集速度设定.
搜索"<Unit id ='200' name ='Settler'>"
(采集者),接着搜索"<Name>Gather</Name>",
会出现(下面的数值为原始设定)
<Name>Gather</Name>
<Rate type ='Tree'>0.500000</Rate>
<Rate type ='Mill'>0.670000</Rate>
<Rate type ='AbstractMine'>0.600000</Rate>
<Rate type ='Plantation'>0.500000</Rate>
<Rate type ='Herdable'>3.000000</Rate>
<Rate type ='Huntable'>0.840000</Rate>
<Rate type ='BerryBush'>0.670000</Rate>
数值越大,采集速度越快.速度单位应是X单位资源/秒*人.
对proto.xml的基本修改就写到这里了.
2.techtree.xml
Warning:笔者用的techtree.xml是游侠网上下的突破9级和卡片使用限制的补丁内的techtree.xml.
在这个文件里,大多数的科技或卡片以这种形式描述:
<Tech name ='XXX' type ='XXX'>
<DBID>X</DBID>
<Status>XXX</Status>
<Flag>XXX</Flag>
<Effects>
<Effect type ='Data' amount ='X' subtype ='Enable' relativity ='Absolute'>
<Target type ='ProtoUnit'>XXX</Target></Effect>
XXX
</Effects>
</Tech>
1).这就是一个完整的描述一个科技的格式.
搜索"ImperialManOWar",直到搜到如下描述(这个科技与标准试玩版的相同):
<Tech name ='ImperialManOWar' type ='Normal'>
<DBID>1336</DBID>
<DisplayNameID>31112</DisplayNameID>
<Cost resourcetype ='Wood'>1500.0000</Cost>
<Cost resourcetype ='Gold'>1500.0000</Cost>
<ReSearchPoints>30.0000</ResearchPoints>
<Status>UNOBTAINABLE</Status>
<Icon>ui\techs\imperial_navy\imperial_navy</Icon>
<RolloverTextID>31111</RolloverTextID>
<Flag>UpgradeTech</Flag>
<Flag>OrPrereqs</Flag>
<Flag>CountsTowardMilitaryScore</Flag>
<Prereqs>
<TechStatus status ='Active'>Imperialize</TechStatus></Prereqs>
<Effects>
<Effect type ='Data' amount ='1.50' subtype ='Damage' allactions ='1' relativity ='BasePercent'>
<Target type ='ProtoUnit'>Frigate</Target></Effect>
<Effect type ='Data' amount ='1.50' subtype ='Hitpoints' relativity ='BasePercent'>
<Target type ='ProtoUnit'>Frigate</Target></Effect>
<Effect type ='SetName' proto ='Frigate' culture ='none' newName ='42267'></Effect>
</Effects>
</Tech>
Tech name : 科技原英文名称.
<DisplayNameID>X</DisplayNameID> : 科技实际显示名称代码.与stringtable.xml关联.
<Cost resourcetype ='X'>X</Cost>: 研发此科技需要的资源种类及数量.
<ResearchPoints>X</ResearchPoints> : 研发时间.数值越大,研发越慢.
<RolloverTextID>X</RolloverTextID> : 语言显示代码,即科技描述文字代码.
<Flag>UpgradeTech</Flag> : 该科技的基本属性.此为升级单位类科技(为升级单位类科技所必须).
<Effects>
<Effect type ='Data' amount ='1.50' subtype ='Damage' allactions ='1' relativity ='BasePercent'>
<Target type ='ProtoUnit'>Frigate</Target></Effect>
<Effect type ='Data' amount ='1.50' subtype ='Hitpoints' relativity ='BasePercent'>
<Target type ='ProtoUnit'>Frigate</Target></Effect>
<Effect type ='SetName' proto ='Frigate' culture ='none' newName ='42267'></Effect>
</Effects>
这可以说是最有价值的修改部分.
</Effects>: 科技描述结束标志.
Effect type : 科技效果.
有Data,SetName,TechStatus,SetAge四类.
Data : 允许设置研发对象的属性乘数.
SetName : 允许设置研发对象的新名称.
TechStatus : 未知.
SetAge : 允许升级时代(Age1-4).如果有这个描述出现,则在<Flag>里应有<Flag>AgeUpgrade</Flag>与之对应.
amount : 研发对象的属性乘数或增量.
subtype : 针对研发对象的某类属性设定.
allactions : 似乎是激活某些东西,作用不明.
relativity : 属于何类属性加成(乘数--BasePercent,增量--Absolute),例如对种植效率加成一般用乘数,对人口上限加成用增量.
<Target type ='ProtoUnit'>X</Target></Effect> : 科技研发对象(用于此描述横行Effect type不是SetName的另三类科技效果).
proto ='X' : 科技研发对象(用于此描述横行Effect type是SetName的科技效果).
newName : 科技研发对象的新名称代码(对应SetName,proto)
对此科技的翻译:
帝国改良战舰.由三桅战舰升为Imperial Man-of-War战舰.伤害为原来150%,生命值为原来150%.需要木材1500单位,需要黄金1500单位.
引申:
1).如果你想让此科技的伤害加成属性对城镇中心有效,可在
<Effect type ='Data' amount ='1.50' subtype ='Damage' allactions ='1' relativity ='BasePercent'>
<Target type ='ProtoUnit'>Frigate</Target></Effect>
下面新建一行
<Effect type ='Data' amount ='X' subtype ='Damage' allactions ='1' relativity ='BasePercent'>
<Target type ='ProtoUnit'>(城镇中心名称)</Target></Effect>
注意格式最好与原格式对齐!
2).如果你不想让此科技对三桅战舰生命有加成,则可将
<Effect type ='Data' amount ='1.50' subtype ='Hitpoints' relativity ='BasePercent'>
<Target type ='ProtoUnit'>Frigate</Target></Effect>
删除.
注意格式最好与原格式对齐!
这样,你就可以随意设置一个科技.
2).这就是一个完整的描述一个卡片的格式(含义同上).
<Tech name ='HCShipFrigates' type ='Normal'>
<DBID>2223</DBID>
<DisplayNameID>35725</DisplayNameID>
<Cost resourcetype ='Ships'>1.0000</Cost>
<ResearchPoints>40.0000</ResearchPoints>
<Status>UNOBTAINABLE</Status>
<Icon>units\naval\frigate\frigate_icon_64x64</Icon>
<Flag>HomeCity</Flag>
<Effects>
<Effect type ='Data' amount ='1.00' subtype ='FreeHomeCityUnit' unittype ='Frigate' relativity ='Absolute'>
<Target type ='Player'></Target></Effect>
</Effects>
<Flag>HomeCity</Flag> : 在城镇中心产生该单位.
对此卡片的翻译:
从主城运送一艘三桅战舰到战场.
修改amount就是修改运送的三桅战舰数量.
引申:
如果你还想运点儿别的,添加:
<Effects>
<Effect type ='Data' amount ='X' subtype ='FreeHomeCityUnit' unittype ='X' relativity ='Absolute'>
<Target type ='Player'></Target></Effect>
注意格式最好与原格式对齐!
简单的科技/卡片修改就到这里了.
3.stringtable.xml
可以添加,删除,修改.
自己试着改一改,仿照着添一下,注意代码必须与techtree.xml或proto.xml的代码对应,否则描述文字将不显示.
说实话,这一部分没什么好讲的.下面我们进入进阶篇.
二.复杂修改
添加新兵种.
以添加"密苏里"号战列舰为例.
首先,选定一个原身,笔者选了Monitor(炮舰).
在proto.xml中找到Monitor,从
</Unit>
<Unit id ='427' name ='Monitor'>开始往下复制,到Monitor的末尾
</ProtoAction>,粘贴.注意粘贴应仿照其他单位的格式.
新兵种的雏形以做好.
下面对粘贴后的内容作修改.
name改为与Monitor不同的名字,如BattleCruiser.
Unit id改为不与任何单位重合的数字,如999.
DisplayNameID,EditorNameID改为不与任何单位重合的数字,笔者改的分别是99999,99998.
下面对DisplayNameID,EditorNameID写入你所需要的名称.
打开stringtable.xml,仿照其他内容新建两行(即<String _locID ='X'>XXX</String>,注意对齐).
在这两行的X处分别写入99999,99998.
该给这两个字串加说明了.你可以写自己喜欢的名称,笔者在99999那行写入密苏里号,99998那行写入有无与伦比火力的战舰.
建立新说明部分完毕.
下面,你可以自己随意修改BattleCruiser的属性(如将其设为英雄,让它像大帆船那样可以造兵...).
我们创造了一个新兵种,如何让它在游戏中出现呢?
你可以通过卡片,也可以把它造出来.
记得有一个卡片是运来一艘Monitor吧?我们就在这张卡片上做文章.
打开techtree.xml,它的卡片名称为HCShipMonitors,搜到这张卡片,将unittype的Monitor改为你刚命名的BattleCruiser即可!
(这样在你使这张卡片时,只会运来密苏里号,而不会运来Monitor.如果你不满足,可以将卡片修改成既送Monitor又送BattleCruiser.自己试试吧!)
一个问题待解决:这样新增的兵种将不会使用任何技能.
2.让单位拥有生产能力.
修改示例:让explorer可以建造超级堡垒.
打开Proto.xml.
搜索到描述explorer的部分.
你会发现再往下有
<UnitType>AbstractInfantry</UnitType>
<Train row ='0' page ='6' column ='1'>TradingPost</Train>
<Train row ='0' page ='6' column ='0'>TownCenter</Train>
<Train row ='0' page ='6' column ='2'>WarDog</Train>
复制上面的最后一行,粘贴到它的下一行(注意格式),column改为3,后面的英文单位名称改为FortFrontier(超级堡垒)即可!
已经可以使英雄具有建造超级堡垒的能力了,你难道不想让他建得更快一些吗?
仍然在explorer的描述部分找到
<ProtoAction>
<Name>Build</Name>
<Rate type ='TradingPost'>3.000000</Rate>
<Rate type ='TownCenter'>1.000000</Rate>
</ProtoAction>
仿照添加一行:<Rate type ='FortFrontier'>X</Rate>,这里的X就是建造速度的乘数!
测试成果吧!
对于没有生产能力的单位,在其最后一行UnitType的下一行添加如上描述行(<Train row ='X' page ='X' column ='X'>XXX</Train>
)即可!