我来参加一下吧,做MOD还是大家一起来比较好,一个人研究时间不够啊。
参加活动:
活动类型:CNC3 MOD制作
MOD地址:
http://game1.ali213.net/viewthread.php?tid=1639220&extra=&page=1
MOD介绍:目前以修改GDI方为主,修改了多种单位设置,增加了超级单位。最新更新
0917
活动类型:MOD制作教程
MOD制作详细教程(不断更新中)
MOD教程最新更新0917,0918追加部分最新成果
以下是我已经掌握的部分,和大家分享,内容会不断更新,已有的内容中的不足欢迎大家补充,我也会加上去。
因为论坛的原因,贴上去的代码有些会缺掉,不过还好不是些重要的东西,还是能看懂的。
MOD基础部分
MOD的核心文件为 MOD.XML,在此文件里包含所有需要进入MOD的xml文件
其他XML文件都可以从Mod SDK\CnC3Xml文件夹下找出来。
如果要修改武器的话,可以找到weapon.xml,但是我想做出我的武器来,不想把那么多原始
武器信息也一起放入MOD,我是这么做的:
打开weapon.xml 找出头和尾
<?xml version="1.0" encoding="us-ascii" ?>
<AssetDeclaration xmlns="uri:ea.com:eala:asset">
<Tags />
<Includes>
<Include
type="all"
source="DATA:GlobalData/GlobalDefines.xml" />
</Includes>
中间是武器设置语句,我可以把需要的武器设置复制进来
最后用</AssetDeclaration>结尾以对应上面的<AssetDeclaration
xmlns="uri:ea.com:eala:asset"> xml语句和HTML语句是一样需要开头和结尾的,会HTML
语言的人应该没有问题。
mod.xml此文件的修改可以在samplemod里面的mod.xml为基础修改
语法为
<Include type="all" source="DATA:SampleMod/Data/SampleUpdatedLogicCommand.xml"
/>
其中 SampleUpdatedLogicCommand.xml是包含的文件名, DATA:SampleMod 是说明MOD的名
称,如果MOD文件夹名称是supernod ,那么就写成 DATA:supernod
其中
<Include type="reference" source="DATA:static.xml" />
<Include type="reference" source="DATA:global.xml" />
这两句我暂时认为是必须的,曾经去掉之后出错过。
用于修改的XML文件存在于 Mod SDK\CnC3Xml文件夹里,基本上游戏里所有的属性文件都在
了,活用这些东西完全可以做出全新的游戏来。
现在以GDI的APC为例子,文件为GDIAPC.XML,以我的修改做说明。
<GameObject
id="GDIAPC" 这个是游戏中识别这个单位的名称,我需要在游戏中新增一个APC,就改成了
GDIAPC1 同时把文件名也改成了GDIAPC1.XML,复制到了SAMPLEMOD\DATA文件夹下。
inheritFrom="BaseVehicle" 使用车辆的基本设置,这个文件在Mod
SDK\CnC3Xml\BaseObjects\BaseVehicle.xml
SelectPortrait="Portrait_GDIAPC" 选择后显示的选择类型
Butt 在建造时候的按钮图片
Side="GDI" 说明这是GDI方的,实际情况下我改成NOD也没有影响。
EditorSorting="UNIT" 说明这个是“单位”而不是“建筑”
TransportSlotCount="1" 运输过程中占用的运输空间是1
BuildCost="700" 建造成本
BuildTime="7" 建造时间,单位是秒
CommandSet="GDIAPCCommandSet" 此车辆可以使用的命令。
CommandPoints="100" 这个据说是以前CNC用的参数,现在没有用到,只是放在那里
KindOf="PRELOAD SELECTABLE CAN_ATTACK ATTACK_NEEDS_LINE_OF_SIGHT
CAN_CAST_REFLECTIONS SCORE TRANSPORT VEHICLE CAN_REVERSE_MOVE
CAN_BE_FAVORITE_UNIT" 说明车辆的一些属性和类别
RadarPriority="UNIT" 雷达上显示为“单位”
ThreatLevel="10"
Producti 建造的时候在车辆队列中,应该就是重工厂队列
UnitCategory="VEHICLE" 单位的属性是车辆
Weap 武器属于GUN 应该也是说明性的东西
VoicePriority="176"
EditorName="GDIAPC" 在地图编辑器里面的名称
Description="Desc:GDIAPC" 在游戏里的单位说明文字
TypeDescription="Type:GDIAPC"
EnergyProduction="2000" 这是我添加的,产生电力2000,出一辆APC就不用第二个电厂了
,哈哈。
> GAMEOBJECT部分完毕
下面是单位行为设定
<LocomotorSet
Locomotor="GDIAPCLocomotor" 移动行为的类型是GDIAPCLocomotor,这个内容在Mod
SDK\CnC3Xml\GlobalData\Locomotor.xml,修改那个文件可以让单位有悬浮之类的效果,当
然你也可以直接改成别的单位的移动行为比如OrcaLocomotor,这样就会像奥卡一样飞起来
了。
C
Speed="180.0" 这是单位的行进速度,原来是72 />
下面的说明从
<WeaponSetUpdate
id="ModuleTag_WeaponSetUpdate">开始
<WeaponSlotTurret
ID="1">
<Weapon
Ordering="PRIMARY_WEAPON"
Template="GDIAPCAutoCannon" /> 后面是武器名称,从weapon.xml里可以找到
<TurretSettings APC的炮塔设定
TurretTurnRate="200" 旋转速度
TurretPitchRate="200" 上下角度的速度
AllowsPitch="true"
MinimumPitch="-15d" 最小角度是-15度
MinIdleScanTime="1.0s" 空闲时间炮塔转动,这是空闲1秒
MaxIdleScanTime="5.0s" 空闲时间炮塔转动的持续时间
MinIdleScanAngle="0.0" 空闲时转动的最小角度
MaxIdleScanAngle="90.0"> 空闲时转动的最大角度
<TurretAITargetChooserData
CanAcquireDynamicIfAssignedOutOfRange="true" /> 这是炮塔索敌的AI
</TurretSettings>
</WeaponSlotTurret>
重要的装人部分来了
<HordeTransportContain
id="ModuleTag_Contain"
ObjectStatusOfC
C 最大装入单位的数量
Slots="1" 显示槽的数量,最好设成和上面一样
AllowEnemiesInside="false" 是否允许敌人进入
AllowAlliesInside="true" 是否允许自己人进入
AllowNeutralInside="false" 是否允许自然单位进入
AllowOwnPlayerInsideOverride="true"
ShowPips="true"
EnterSound="VehicleEnter"
ExitSound="VehicleExit"
KillPassengers> 是否在死亡时杀死所有内部单位,这个我设置了false还
是一样全死,不知道为什么。
<PassengerFilter 装入单位的过滤,这里是只允许步兵进入
Rule="ANY"
Include="INFANTRY" />
<DieMuxData
DeathTypes="ALL" />
<PassengerData
B>
<Filter
Rule="NONE"
Include="INFANTRY" />
</PassengerData>
<MemberTemplateStatusInfo 这里是狙击手的特殊设定,据这个设定来看,狙击手可以在
车内给神像轰炸定位。
ThingTemplate="GDISniperSquad"
ObjectStatus="CAN_SPOT_FOR_BOMBARD" />
</HordeTransportContain>
下面这部分是被APC死亡后的行为,设定是死亡后3秒钟慢慢下沉,下沉速度每秒2,这个2是
CNC3里面的长度单位。
<SlowDeath
id="ModuleTag_Death"
SinkDelay="3s"
SinkRate="2.0"
Destructi>
下面是特殊能力部分
<SpecialPower
id="ModuleTag_FireMinefield"
SpecialPowerTemplate="SpecialPowerGDI_APCMinefield" 特殊能力名称为地雷场
UpdateModuleStartsAttack="true" />
<WeaponFireSpecialAbilityUpdate
id="ModuleTag_FireMinefieldUpdate"
SpecialPowerTemplate="SpecialPowerGDI_APCMinefield"
SpecialWeapon="GDIAPCMinefield" 使用的武器,同样可以在weapon.xml里找到
StartAbilityRange="10.0" 可以使用能力的最小距离
UnpackTime="1.5s" 整个使用过程的时间
PackTime="1.0s"
Options="CHECK_SPECIALPOWER_REQUIREMENTS_DURING_UPDATE"/>
<AISpecialPowerUpdate
id="ModuleTag_APCMineLayer"
CommandButt
SpecialPowerRadius="100.0" 这是地雷场的直径
SpecialPowerAIType="SPECIAL_POWER_RANGED_AOE_ATTACK" />
单位HP的部分
<ActiveBody
id="ModuleTag_Body"
MaxHealth="2800" /> 默认是2800,不经打呀,加两个零就差不多了。
<Shape 单位外框设置,估计是用来做碰撞,碾压判定之类的
Type="BOX"
MajorRadius="20.0"
MinorRadius="10.0"
Height="11.5"
ContactPointGeneration="VEHICLE" />
<VisionInfo
Visi 自动索敌范围,进入这个范围内的敌人会被攻击
ShroudClearingRange="400" /> 单位去除地图迷雾的范围,如果设置50000,那么就是地
图全开了。
<CrusherInfo 碾压等级
CrusherLevel="0" 0是什么都不能压 MM是3
CrushEqualLevelProps="true"
CrushableLevel="2" /> 被碾压等级,比如MM是3,可以压等级2的。
-------------------------------------------------------------------------
关于修改武器方面,以神像为例。
<WeaponSlotTurret
ID="1">
<Weapon
Ordering="PRIMARY_WEAPON"
Template="GDIJuggernaughtArtillery" />
<TurretSettings
TurretTurnRate="360"炮塔转速,度/秒
TurretPitchRate="360"炮塔上下倾斜速度,同样是 度/秒
AllowsPitch="true"是否允许上下倾斜
MinimumPitch="-60d"最大倾斜度是向下60度
PitchHeight="90%"
MinIdleScanTime="1.0s"
MaxIdleScanTime="5.0s"
MinIdleScanAngle="0.0"
MaxIdleScanAngle="90.0">
<TurretAITargetChooserData />
</TurretSettings>
</WeaponSlotTurret>
这样是一个完整的装在炮塔上的武器的描述,炮塔的参数我已经修改过,转动更加灵活。
Template="GDIJuggernaughtArtillery" 引号内是武器的名称,可以在weapon.xml内查找找到
接下来我们看weapon.xml内关于GDIJuggernaughtArtillery武器的描述。
<WeaponTemplate
id="GDIJuggernaughtArtillery" ID是用来识别武器的,我的新神像不想影响到原来神像的武器,就在名称后加上个1,神像文件内调用的时候也改成
Template="GDIJuggernaughtArtillery1" 就可以了。
Name="GDIJuggernaughtArtillery" 这个不需要改
AttackRange="500.0" 攻击距离
MinimumAttackRange="100.0" 神像的炮为了避免炸到自己,有最小攻击距离,如果不想要有最小距离,删掉这行就可以。
MinTargetPitch="-15d"
MaxTargetPitch="15d"
Weap 炮弹的速度,500算是很慢的了,飞机速度一般也有175了,所以我会改成2500
ScatterRadius="50" 炮弹散布的直径
ScatterLength="50" 散布范围长度 --- 这两项我改成250和150,但是实际散布还是一直线。[attach]683904[/attach]
最新研究成果,去掉flag这一样,就变成默认的圆形散布了,看看可怕的效果吧。
[attach]685241[/attach]
FireFX="FX_GDI_JuggernaughtArtilleryFire" 开火效果
FireVeteranFX="FX_GDI_JuggernaughtArtilleryFireHeroic" 升级成精英单位后的开火效果
Weap 武器的后坐力,这个度数估计是发射后炮管上跳的角度
RadiusDamageAffects="ALLIES ENEMIES NEUTRALS" 杀伤范围,这里是所有单位都可以杀伤,如果不想伤到自己人的话就把里面的ALLIES删掉就是。
CanFireWhileMoving="false" 能不能在移动中开火,神像比较特殊,改成TRUE也是不行的,因为下面有一句开火需要一个展开状态状态。
CanFireWhileCharging="false" 能不能在装弹的时候发射
ClipSize="3" 弹夹一共几发炮弹
ReAcquireDetailType="PER_SHOT" 每次发射后重新矫正着弹点散布。
Flags="ORTHOGONAL_SCATTER" 翻译为直角——散布 可能就是说明炮弹散布的类型
ShotsPerBarrel="1" 每次发射几发
RequiredFiringObjectStatus="DEPLOYED" 发射需要的动作“展开”这个是在神像文件中定义的,神像需要把脚后的支撑板放下才能射击,如果要神像真正的移动中射击,删除这
行,然后把CanFireWhileMoving="false" 改成true
CheckStatusFlagsInRangeChecks="false"
ProjectileCollidesWith="ALLIES ENEMIES NEUTRAL STRUCTURES WALLS" 炮弹飞行过程中可以碰撞的物体
这部分中另外会出现的是下面两句
AutoReloadsClip="AUTO" 自动装填弹药,火鹰战机中这句是AutoReloadsClip="RETURN_TO_BASE",是返回基地填装,只要换成AUTO,就可以无限制了。
AntiMask="ANTI_GROUND ANTI_AIRBORNE_VEHICLE ANTI_AIRBORNE_INFANTRY" 这句是武器攻击的单位,只能对地或者只能对空的武器换上这一句的内容就可以通吃了。下面就是可怕的空地通吃轨道跑[attach]683907[/attach]
>
<ClipReloadTime 这是两个重新装弹的时间,秒为单位
MinSeconds="5s"
MaxSeconds="5s" />
<Nuggets>
<ProjectileNugget
ProjectileTemplate="FXArtilleryShell"
WarheadTemplate="JuggernaughtArtilleryWarhead"> 注意:这里的WarheadTemplate说明还有相应弹头语句可以修改,稍后我将在下面给出弹头的语句
<VeterancyProjectiles 这些是开火的效果语句,具体数值还没有详细测试。
VeterancyLevel="HEROIC"
ProjectileTemplate="FXArtilleryShell_Veteran"/>
</ProjectileNugget>
<SuppressionNugget
Radius="100.0"
Suppression="100"
Durati />
</Nuggets>
<ScatterRadiusVsType
Radius="50.0">
<Filter
Rule="NONE"
Include="INFANTRY" />
</ScatterRadiusVsType>
<ScatterRadiusVsType
Radius="25.0">
<Filter
Rule="NONE"
Include="VEHICLE" />
</ScatterRadiusVsType>
</WeaponTemplate>
下面是神像大炮的弹头
<WeaponTemplate
id="JuggernaughtArtilleryWarhead" 如果不想改变游戏中默认的武器,也可以修改ID名称,同样上面引用的弹头名称也要相应的修改
Name="JuggernaughtArtilleryWarhead"
ProjectileCollidesWith = "ALLIES ENEMIES NEUTRAL STRUCTURES WALLS" 弹头可以撞击的东西
RadiusDamageAffects="ALLIES ENEMIES NEUTRALS"> 单位伤害类型
<Nuggets>
<DamageNugget
Damage="1000.0" 弹头伤害值
Radius="25.0" 弹头伤害范围直径,在这个直径加大的话效果是非常可怕的,目前我的超级神像设置的是250,天上的空中单位高度不过是200左右,所以连飞机也能炸下来。
DamageTaperOff="0" 伤害逐渐减少的参数,没有去研究过,估计就是越到范围边的伤害越小吧。
DelayTimeSeconds="0.0s" 弹头爆炸延时
DamageType="CANNON" 弹头伤害类型,CANNON会有伤害范围,SNIPER的话只能伤步兵,对装甲单位和建筑伤害非常的小,是GUN的话为机枪类型的伤害,没有伤害范围。
DamageFXType="GDI_LASER"单位受伤害的表现。
DeathType="NORMAL" />
</Nuggets>
</WeaponTemplate>
弹头设置结束
-------------------------
接下来是单位移动行为的修改,文件在Mod SDK\CnC3Xml\GlobalData\Locomotor.xml 同样可以把头尾复制出来,然后加入自己的定义进去。
再以神像为例
<LocomotorTemplate
id="JuggernaughtLocomotor" 这是用来调用的名称,不想改掉默认的话就复制一份出来,修改掉ID的名称
Name="JuggernaughtLocomotor"
Surfaces="GROUND RUBBLE CRUSHABLE_OBSTACLE" 可以移动的地点,其实简单的换成AIR就可以完全不受限制了
TurnTimeSeconds="2.5s" 转向需要的时间
TurnTimeDamagedSeconds="5s"
MaxSpeedDamaged="75%"
FastTurnRadius="9.0" 转向最大直径
SlowTurnRadius="1.0" 转向最小直径
Accelerati 0.5秒后开始加速
Formati 队形的类型,神像好像没有固定的队形。
BrakingSeconds="1s" 刹车时间,移动掉停止所需要的时间,
MinTurnSpeed="0%"
BehaviorZ="NO_MOTIVE_FORCE" 移动的方式 还有一种是SURFACE_RELATIVE_HEIGHT 意思是和地形表面高度相适应,飞机就属于这样的。
Appearance="TWO_LEGS" 移动的动作,神像是2脚移动,飞机之类是WINGS,悬浮类是ORCA是HOVER,
StickToGround="true" 紧贴地面的移动,这个没有测试过,估计贴紧的是真正的地面,入水的话就是在水底开,如果设置false的话就可以水上漂了,哈哈。
CanMoveBackward="true" 单位可以倒退行走,这个我倒是没见过,神像似乎没有倒退的指令可以用。
BackingUpSpeed="33%" 倒退的速度是前进速度的33%
/>
PreferredHeight="150" 空中单位还有飞行高度参数。这个是火鹰的高度150,如果炮弹伤害范围设置超过150那么就可以炸到它了。
--------------------------------------------
下一次更新写建筑物的文件
[
本帖最后由 hcck 于 2007-9-18 10:18 编辑 ]