第四章 常用代码编辑详解
第二章里我们了解了制作一个完整的新单位需要编辑哪些INI,但那个例子非常浅显,以至于不能囊括所有INI的内容。因此我们将在本章来个更加详细的代码编辑讲解。
1、 CommandButton
这个INI用于定义所有界面按钮的功能,以便被CommandSet调用。使用格式如下:
CommandButton [按钮名称]
[按钮名称]可使用任意字符串,并且暂时不知道是否存在字符数上限。一般情况下为了确保让自己能一眼看出这个键是干什么用的,通常用下划线将其分为多个部分,例如一般的动作键可以使用Command_XX,建造建筑键可以使用BuildCMD_XX,生产单位键可以使用CreateCMD_XX,升级键可以使用UpgradeCMD_XX等等,总之,游戏平台无所谓你取什么名称,只要在调用时能对应得上就行,这是让你自己快速识别的。
CommandButton Command_XXXX
WeaponSlot = [武器序号] 即PRIMARY、SECONDARY 或 TERTIARY,多个并列表示同时使用,当然这种情况不能出现在切换武器键里
Upgrade = [升级项目名称] 调用一个有效的升级项目,需要对应Upgrade.ini。
Science = [技能证书名称] 调用一些有效的技能证书(多个并列时表示与逻辑)
ButtonImage = [图像名称] 调用一个有效的TGA图象,需要对应MappedImages,这个今后再讲
TextLabel = [CSF翻译项] 鼠标悬停在该按钮上时,就地显示的说明字段
DescriptLabel = [CSF翻译项] 鼠标悬停在该按钮上时,左下角信息栏里显示的介绍信息字段
InvalidCursorName = [CUR指针文件名] 调用一个能够被游戏引擎识别的CUR格式鼠标指针,表示当不能执行该操作时的鼠标指针图像,例如GenericInvalid为原版自带的圆圈斜杠
UnitSpecificSound = [音效名称] 成功点击这个按钮后播放的效果音
CursorName = [指针名称] 使用该命令时的鼠标指针(鼠标图案在 "Mouse.ini" 中设定)
Command = [命令类型] 定义该按钮到底发挥什么样的功能和作用,有以下这些参数可选
UNIT_BUILD 建造物体,可以是推土机、建造房子、兵营训练步兵、重工生产坦克、机场生产飞机
SPECIAL_POWER_FROM_COMMAND_CENTER 从指挥中心发射超武/技能
SPECIAL_POWER 使本体对所选目标使用特殊能力或发射超武/技能,几乎可以顶替上面一个
FIRE_WEAPON 使本体对所选目标或所选位置发射常规武器(需要搭配WeaponSlot语句)
SWITCH_WEAPON 使本体切换锁定一种武器来单独使用(需要搭配WeaponSlot语句)
SET_RALLY_POINT 设置集合点,前提是本体必须含有AUTO_RALLYPOINT类型标签
SELL 将本体拆除
TOGGLE_OVERCHARGE 切换到超负荷状态,前提是本体必须含有超负荷修正
CANCEL_UPGRADE 取消升级,似乎没啥用,因为升级并不需要专门在界面上取消
PLAYER_UPGRADE 宏观升级,需要搭配Upgrade语句,对应宏观型升级项目
OBJECT_UPGRADE 微观升级,需要搭配Upgrade语句,对应宏观型升级项目
EXIT_CONTAINER 命令该按钮所对应的单位离开容器
EVACUATE 命令该容器里所有乘员离开容器
EXECUTE_RAILED_TRANSPORT 执行铁路运输?莫非是控制火车用的?
COMBATDROP 绳索空降,本体需要具备绳索空降修正
GUARD 范围警戒,使本体在一定范围内自动反击并追击进入视野的敌人
GUARD_WITHOUT_PURSUIT 定点警戒,使本体在一定范围内自动反击敌人,但不会去追击敌人
GUARD_FLYING_UNITS_ONLY 领空防御,使本体在一定范围内自动反击空中敌人,前提是本体必须是机场型战斗机,否则没有任何意义
ATTACK_MOVE 移动攻击,使本体一边跑一边攻击任何可攻击的目标,前提是本体必须具有可旋转的炮塔
STOP 停止动作,使本体停止当前所有动作,进入空闲状态
CONVERT_TO_CARBOMB 主动合体,使本体主动跑过去与目标合体,例如恐怖分子填装汽车炸弹
HIJACK_VEHICLE 主动控制,使本体主动跑过去撞击目标以实现对目标的永久控制,例如劫持犯抢劫车辆
HACK_INTERNET 黑客刷钱,使本体立刻坐下来开始刷钱,前提是本体必须具有黑客刷钱能力
Options = [命令属性] 定义该按钮在发挥具体功能和作用时有些什么样的特性,有以下这些参数可选
NEED_SPECIAL_POWER_SCIENCE 需要SP或技能证书的支持,有这条属性,则可以配上SpecialPower来调用一个SP,或者配上Science来调用一个技能证书
NEED_TARGET_POS 需要选择目标位置,常用于定点开火式按键,按下键后会叫你选择开火的目标位置(就像超武发射那样)
NEED_TARGET_ENEMY_OBJECT 需要选择敌人的物体作目标,同上
NEED_TARGET_NEUTRAL_OBJECT 需要选择中立的物体作目标,同上
NEED_TARGET_ALLY_OBJECT 需要选择自己或盟友的物体作目标,同上
CONTEXTMODE_COMMAND 上下文关联,没搞懂有啥意义,似乎凡是用了上面4种NEED_TARGET属性时必须有它才产生作用
SCRIPT_ONLY 只能被触发控制,并且不会出现在界面上,因此只能通过WB制作AI触发来“按下”这个键
OK_FOR_MULTI_SELECT 当多个物体同时具有同一个按钮时,是否在操作界面上显示出这个按钮以便让玩家按一次键对所有这些单位都有效
CHECK_LIKE 只对状态相同的多个本体有效,通常与上一句连用
OPTION_ONE 第一选项
OPTION_TWO 第二选项
OPTION_THREE 第三选项,这3个选项只用在战略中心设置战略方针的按键上,需要配合战略中心的策略修正使用,难度太高……
NOT_QUEUEABLE 不能排队等候,常用于建造或升级键,若本体正在进行建造或升级过程,则这个键不能点,必须等本体空闲之后才能点
IGNORES_UNDERPOWERED 无视电力,通常用于耗能型主体,使之即便停电后,按键依然可以点击,否则按键会变灰
RadiusCursorType = [范围圈名称] 某些需要选择目标的按钮可以使用一个范围圈来表示有效作用范围,以下参数是一些不能随意修改的平台内码,后面再详细解释。
DAISYCUTTER
NAPALMSTRIKE
PARADROP
CLUSTERMINES
EMPPULSE
A10STRIKE
SPECTREGUNSHIP
CARPETBOMB
NUCLEARMISSILE
SCUDSTORM
ARTILLERYBARRAGE
FRENZY
SPYSATELLITE
SPYDRONE
RADAR
AMBUSH
EMERGENCY_REPAIR
ANTHRAXBOMB
GUARD_AREA
CLEARMINES
ATTACK_SCATTER_AREA
AMBULANCE
HELIX_NAPALM_BOMB
PARTICLECANNON
End
2、 CommandSet
这个INI用于定义建造栏/操作界面上所有按键的布局位置,以便在单位代码里调用它来作为该单位的建造栏或操作界面。使用格式如下:
CommandSet [界面名称]
[界面名称]可使用任意字符串。还是老话,取什么名字都无所谓,关键是你自己要能快速识别。
每个建造栏/操作界面可以最多放置14个按键,分为2行7列,其位置对应号码如下:
1 |
3 |
5 |
7 |
9 |
11 |
13 |
2 |
4 |
6 |
8 |
10 |
12 |
14 |
使用时,将按钮名称作为参数放到对应号码后面即可,就像下面这个例子,特别需要注意的是,这些按键名称不能随意乱写,否则会报错。你必须确定它是一个有效的按键,或者说必须是能够在CommandButton.ini里找得出来的按键。很多新手就是因为不知道这里的对应规律,觉得随便写一个字段作参数就行了,结果就遇到报错还不知道自己错在哪里。
CommandSet XXXXCommandSet
1 = Command_ConstructAmericaPowerPlant
2 = Command_ConstructAmericaStrategyCenter
3 = Command_ConstructAmericaBarracks
4 = Command_ConstructAmericaSupplyDropZone
5 = Command_ConstructAmericaSupplyCenter
6 = Command_ConstructAmericaParticleCannonUplink
7 = Command_ConstructAmericaPatriotBattery
8 = Command_ConstructAmericaCommandCenter
9 = Command_ConstructAmericaFireBase
11 = Command_ConstructAmericaWarFactory
13 = Command_ConstructAmericaAirfield
14 = Command_DisarmMinesAtPosition
End
上面这个例子里,没有定义12号位置是什么按键,那么游戏平台将把12号位置留空。
3、 FXList
这个INI用于调用一系列闪光、声音、屏幕抖动、粒子系统等来组合成一套FX特效,至于FX是什么东西,我至今没搞清楚,我只知道它是一种视觉特效。使用格式如下:
FXList [特效名称]
[特效名称]同样可以是任意字符串。
例如下面这个例子,被调用的项目作为FXList的子函数被排成列表存放在FXList的代码中。每个子函数只能调用一个元素,如果想要多个元素同时发生作用,就多建立一个子函数,例如你可以建立10个调用粒子系统的子函数,分别调用10个粒子系统,调整好每个粒子系统的参数,这样就能形成一套华丽的FX特效。
此外有意思的是,这个INI里很多语句的参数可以乱写,即便调用不到东西,或者调用失败也不会报错,仅仅会失去作用,相当于没有调用。但是会被月光宝盒检查出来并给于警告。
FXList FX_XXXX
ParticleSystem 调用粒子系统
Name = MammothTankSubExplosionSmoke 粒子系统名称,需要对应ParticleSystem.ini里的一个粒子系统,不过即便乱写也不会报错,仅仅显示不出效果罢了
Radius = 15 30 UNIFORM 在距中心多大的范围内随机位置产生,两个数字分别为最小值和最大值,UNIFORM表示统一,似乎是必须要有的字段
Height = 0 20 UNIFORM 粒子系统在多高的高度上产生
InitialDelay = 167 667 UNIFORM 延迟多长时间再产生
End
ViewShake 调用屏幕抖动
Type = STRONG 抖动级别,可以选择6种级别,强度依次增大,可在GameData.ini里修改具体的抖动强度值
End SUBTLE < NORMAL < STRONG < SEVERE < CINE_EXTREME < CINE_INSANE
TerrainScorch 调用弹坑,或者说叫地面烧焦效果更形象
Type = RANDOM RANDOM表示随机选择一种烧焦图案
Radius = 15 图案半径为多少像素
End
Sound 调用声音
Name = TankDie 声音名称,需要对应Voice.ini或SoundEffects.ini里的一个声音事件,随便乱写同样不会报错,仅仅导致无声罢了
End
LightPulse 调用闪光,闪光在游戏里将被显示成一个带颜色的圆盘区域
Color = R:180 G:128 B:32 闪光颜色,使用RGB三色方案调色
Radius = 15 闪光半径为多少像素,注意,尺寸过大的闪光很吃显卡,因此建议不要使用大于50点的参数值
IncreaseTime = 0 亮度增至最大的持续时间,0表示突然达到最大亮度
DecreaseTime = 100 亮度减至消失的持续时间,如果这2个语句的持续时间都比较长,在连续激发闪光的情况下可以看到动态闪光效果。
End
Tracer 调用线条,常用于模拟机枪子弹在空中划过的光迹,这个功能在CNC3上视觉效果非常好,在ZH里比较难看
DecayAt = 1.0 衰减削弱程度,似乎只在ZH里有效,因为CNC3的子弹光迹是不衰减的,1表示正常衰减,既到达目标点就淡化消失完
在ZH里值越大,衰减越不明显,会显得子弹跑过了头(把目标打穿了)。反之则衰减很快,会显得子弹还没跑拢
Length = 10 线条长度,当攻击距离小于这个值时开火,会看不到任何线条,因此建议这个值不要大于20
Width = 0.3 线条宽度,当线条宽度被调得比较宽时,你可以发现,原来线条是一个长方形
Color = R:255 G:0 B:0 线条颜色,同样是RGB三色方案
Speed = 300 线条飞行速度,建议和武器代码里定义的射弹体速度相等,否则容易没中弹就死,或者中弹之后等一会儿才死的怪异情况
Probability = 0.5 产生几率,最大1.0,表示100%,一般使用30%到70%之间的参数比较好,这样的光迹比较随机,像真正的机枪
End
End
4、 Locomotor
这个INI用于定义运动模式,例如速度、加速度等属性,被单位代码调用。使用格式如下:
Locomotor [运动模式名称]
[运动模式名称]同样可以是任意字符串。但是千万要注意,单位代码里调用一个运动模式时千万不能乱写,一旦调用不到有效的运动模式就会报错。
这个INI基本上是直接调用物理引擎里支持的各种运算,有些表现形式甚至和NFS相似,那是因为当今的3D游戏一般都采用相同的物理引擎,因此建议物理学得不好的MODER先回家补习补习运动学知识。
Locomotor XXXXLocomotor
Speed 移动速度,每秒移动多少个像素
SpeedDamaged 损伤后移动速度
Acceleration 正常时候的加速度,每秒变化多少点速度
AccelerationDamaged 重伤(红血)时的加速度
Braking 刹车时的加速度,也就是减速的速度
TurnRate 正常时候的转向角速度,每秒转动多少角度
TurnRateDamaged 重伤时的转向角速度
MinTurnSpeed 最小转向角速度,特别注意,这个参数不能比TurnRateDamaged大!
StickToGround 是否紧贴地面,Yes表示随时贴紧地表面,No则可能在特定情况下离开地面(如摩托车飞山),缺省值为No
Surfaces = [移动区域] 定义该物体可以在什么区域里行走,多个并列时表示能在这些区域里行走
GROUND 地面,只能在平整的干地面行走,遇到障碍会绕行,常用于一般步兵和坦克
RUBBLE 碎石,可以在碎石地表行走
CLIFF 山脊,可以在山脊上行走,当然,需要配合模型动作,例如贝顿在山脊上行走的动作实际上是攀爬,而摩托车是飞山
AIR 空中,可在任意地面行走,无视一切障碍,例如FK3D里的蝰蛇和凤凰经常能“钻”到高大建筑里去呆着
WATER 水面,只能在水域里行走,遇到障碍会绕行,常用于船
ZAxisBehavior = [Z方向移动类型] 定义物体在垂直方向上如何移动
NO_Z_MOTIVE_FORCE 无垂直方向移动,用于所有地面单位
SURFACE_RELATIVE_HEIGHT 随地表面高度移动,用于所有飞行器和船只
Appearance = [表现形式] 定义物体在移动时的动作表现形式,需要配合外观模块来体现
TWO_LEGS 步行,用于所有步兵
CLIMBER 攀爬,用于贝顿翻山时
FOUR_WHEELS 轮子,用于轮式车辆,在外观模块里使用特殊语句可以使车轮旋转
TREADS 履带,用于坦克,在外观模块里使用特殊语句可以使履带转动
THRUST 冲刺,用于射弹体和机场型战斗机
HOVER 悬浮,用于直升机、飞艇、飞碟、盘空型战斗机以及船
GroupMovementPriority = [队列位置] 混编部队移动时,各个成员在队伍里会自动调整排位
MOVES_FRONT 前锋,一般用于近战或突击型单位
MOVES_MIDDLE 中场,一般用于中程或主力型单位
MOVES_BACK 后卫,一般用于远程或辅助型单位
以下这些是正儿八经的物理引擎运算了,很难测试出到底是些什么作用,所以只能使用金山词霸翻译,在实际中使用时可参考原版参数:
AccelerationPitchLimit 加速时前下压力,或减速时的后下压力,表现为前倾后仰角度
AirborneTargetingHeight 当本体离里面多高时将被游戏平台判定为位于空中(将受到防空火力攻击,且不能被地面火力攻击)
AllowAirborneMotiveForce 允许空气动力??
Apply2DfrictionWhenAirborne 在空中时接受2D摩擦力影响?
BounceAmount 颠簸强度,参数为0到200之间,0表示平整,200表示严重颠簸
ForwardAccelerationPitchFactor 多大的加速度才会产生突然的前倾后仰
ForwardVelocityPitchFactor 速度大于多少时产生持续保持的前倾后仰效果
LateralAccelerationRollFactor 多大离心力才会导致突然的侧倾
LateralVelocityRollFactor 转向角速度大于多少时产生持续保持的侧倾效果
LocomotorWorksWhenDead 本体死亡后,尸体是否依然使用这个运动模式,似乎用于悬浮单位时表示本体死亡后,尸体依然浮在空中(飞尸么?)
PitchDamping 前后摆动减缓幅度??0为完全减缓,1为随地形摆动
PitchStiffness 前后摆动悬挂硬度??
PreferredHeight 首选离地高度,似乎只能用于空中单位,表示正常情况距离地面的高度
RollDamping 侧倾减缓幅度??0 为完全减缓, 1为随地形摆动
RollStiffness 侧倾悬挂硬度??
TurnPivotOffset 转向中心,-1表示后轴定点前轮转向(叉车),0表示以W3D原点为中心自转(坦克),1表示前轴定点后轮转向(汽车)
End
5、 ObjectCreationList
这个INI用于定义刷物体列表,也就是SAGE里最经典的概念,简称OCL,能在需要的时候凭空创建出一系列你想要的东西(免费的!!)。使用格式如下:
ObjectCreationList [OCL名称]
[OCL名称]同样可以是任意字符串。
同FXList类似,OCL列表也使用多个子函数来调用一些物体,或者直接调用W3D模型,因此也可以随便乱写不会报错,不过还是会被月光宝盒检查出来并给于警告。
OCL总共有3种刷法,分别是直接刷物体、投递运送和刷碎片/残骸。其中投递运送又分为空投乘员和空投武器。
注:为了方便讲解,我将使用OCL的物体称为主体,将被OCL刷出来的物体称为子体。
ObjectCreationList OCL_XXXX
CreateObject 直接刷物体,直接将子体刷到目标位置上
ObjectNames = AmericaInfantryPilot 刷出什么子体,调用一个物体,调用失败时不会报错,但什么都刷不出来
Offset = X:15 Y:15 Z:5 实际产生点偏离理论产生点的距离,以理论产生点(既刷子体的目标位置)为参考,缺省值为全0,即与理论点重合
Count = 3 刷出多少个这样的子体,缺省值为1
IgnorePrimaryObstacle = Yes 无视障碍,也就是说对着障碍刷,会把子体刷到障碍物上去
InheritsVeterancy = Yes 继承等级,主体是啥级别,子体就是啥级别,例如FK3D平原游击队将自身复制成3个假像,假像将和主体保持相同级别
InvulnerableTime = 2000 无敌时间,单位为毫秒,使子体在出现后多长时间内暂时无敌,就像FK3D的铁幕召唤
RequiresLivePlayer = Yes 是否需要活着的玩家,Yes表示当主体所属参战方/玩家战败或退出游戏后,其子体将自动死亡
ContainInsideSourceObject = Yes 子体是否被自动装入主体的容器内,前提是主体必须带有任意一种容器修正
SpreadFormation = Yes 当子体不止一个时,是否自动布成椭圆环形阵列,No则表示使用矩形阵列,缺省值为No
MinDistanceAFormation = 15.0 长轴方向上的阵列最小间距
MinDistanceBFormation = 15.0 短轴方向上的阵列最小间距
MaxDistanceFormation = 15.0 最大阵列间距,这3句似乎只在椭圆环形阵列时有效
FadeIn = Yes 是否使用淡入效果,子体将是慢慢显形而出,而不是直接出现
FadeTime = 3000 淡入持续时间,既从诞生到完全显性需要多少毫秒
DiesOnBadLand = No 如果被刷在不对的地面上是否会立刻死亡。不对的对面,恐怕是指该单位一般情况下不能去的位置,例如障碍上
FadeSound = ChronoSphereSound 淡入音效,淡入过程中播放一个音效
Disposition = [产生动作] 子体出现时将被给于什么样的动作效果,多个并列时表示同时使用这些效果
WHIRLING 保持不停的原地自转
INHERIT_VELOCITY 继承主体的移动速度
FLOATING 原地悬浮
RANDOM_FORCE 随机力,子体将遭受随机力弹飞,加上MinForce和MaxForce那4个语句可以控制随机力的力度和方向取值范围
SEND_IT_OUT 将之发射出去??
SEND_IT_UP 将之发射起来??
SEND_IT_FLYING 将之送飞,貌似经常和随机力一起使用
ON_GROUND_ALIGNED 就地列阵
LIKE_EXISTING 仿照现有的??
随机力型专用定义,需要Disposition = RANDOM_FORCE的支持
MinForceMagnitude = 2 随机力的最小力度,这4句需要Disposition = RANDOM_FORCE的支持
MaxForceMagnitude = 3 随机力的最大力度
MinForcePitch = 50 随机力的最小角度,似乎是以Z正方向为为参考方向来计算的
MaxForcePitch = 60 随机力的最大角度
SpinRate = 0 旋转角速度,0表示不旋转
将之送飞型专用定义,需要Disposition = SEND_IT_FLYING、SEND_IT_OUT或SEND_IT_UP的支持
DispositionIntensity = 4 动作强度,参数值越大,开始飞行的初始速度越快,可达到的高度越高,或者落地点也越远,0表示不飞行
End 参数使用0时有特效作用,这个在后面讲解无限弹头法在解释到底是什么作用
;-----------------------------------------------------------------------------------------------------------------------------------------------------
DeliverPayload 投递运送之空投物体,借助一个投递者将子体运送到目标位置然后投放,就像空降伞兵那样
Transport = AmericaJetB52 调用一个物体作为投递者,该物体必须具有任意一种容器修正,我没试过是否可以使用地面单位来投递
StartAtPreferredHeight = Yes 投递者一出现就以其运动模式里设置的首选离地高度来飞行,常用于调用飞机作为投递者时
StartAtMaxSpeed = Yes 投递者一出现就以其运动模式设置的最高能达到的速度来移动
MaxAttempts = 1 空投时的最大尝试次数,如果连续尝试了这么多次还不能成功投放,它就会放弃投放然后离开
DropOffset = X:0 Y:0 Z:-10 投放偏移,以投递者W3D里的原点为参考点
Payload = DaisyCutterBomb 子体是什么物体,这个子体是被装在投递者里的东西
DeliveryDistance = 140 投递者在距离目标位置多大的范围内开始尝试投放,若投递者的速度很快,那么这个值不能太小,否则很容易投递失败
DeliveryDecalRadius = 170 留在地面上的范围指示圈尺寸
DeliveryDecal 范围指示圈定义,二级子函数
Texture = SCCFuelAirBomb_USA 用哪个TGA贴图来显示范围指示圈
Style = SHADOW_ALPHA_DECAL 贴图风格为半透明贴花
OpacityMin = 25% 最小透明度
OpacityMax = 50% 最大透明度,若二者不同,则可以形成闪烁效果
OpacityThrobTime = 500 闪烁频率,每0.5秒一次
Color = R:255 G:0 B:0 A:255 染色情况,最后的A代表饱和度(一般都把范围指示圈的TGA贴图做成纯白,这样方便染色)
OnlyVisibleToOwningPlayer = Yes 是否只让自己看到范围指示圈
End
End
DeliverPayload 投递运送之空投武器,原理和空投物体一样,但效果仿佛是投递者发射一系列武器去攻击目标点,就像地毯轰炸那样
Transport = ChinaArtilleryCannon
FormationSize = 12 投放多少个子体
FormationSpacing = 1.0 相邻子体自动组成圆盘阵形,两两之间的间隔距离
StartAtPreferredHeight = Yes
StartAtMaxSpeed = Yes
MaxAttempts = 1
DeliveryDistance = 250
WeaponErrorRadius = 100 子体落地点的偏离理论落点的误差范围
DelayDeliveryMax = 3000 最长延迟多长时间投放一个子体,若遇到投放尝试失败,则会延迟到尝试成功为止才投放下一个子体
VisibleItemsDroppedPerInterval = 1 可视项目降落间隔时间??什么是可视项目
VisibleDropBoneBaseName = RootTransform 可视降落骨骼点基本名称??
VisibleSubObjectBaseName = Bomb 可视潜在物体基本名称?这3句似乎起不到任何作用
VisibleNumBones = 1 可视骨骼点数量
VisiblePayloadTemplateName = ChinaArtilleryBarrageShell 子体是什么东西,这里的子体必须是一个射弹体,而不能是一般单位
VisiblePayloadWeaponTemplate = ArtilleryBarrageDamageWeapon 子体落地后使用什么武器来产生爆炸伤害
InheritTransportVelocity = Yes 子体将继承投递者的速度
ExitPitchRate = 30 子体被投放的发射角度,以Z负方向为参考
SelfDestructObject = Yes 是否是自杀物体,Yes的话,投递者在投放完毕后自动死亡(恐怕应该是消失),反之则会飞走
DeliveryDecalRadius = 125
DeliveryDecal
Texture = SCCArtilleryBarrage_China
Style = SHADOW_ALPHA_DECAL
OpacityMin = 25%
OpacityMax = 50%
OpacityThrobTime = 500
Color = R:255 G:156 B:0 A:255
OnlyVisibleToOwningPlayer = Yes
End
End
;-----------------------------------------------------------------------------------------------------------------------------------------------------
CreateDebris 刷碎片或残骸,直接刷出一个不属于任何参战方的模型块,落地后自动沉入地表然后被游戏平台删除掉
ModelNames = GXMammoth_D09 调用什么W3D模型,多个并列表示,可同时刷出多个
Count = 4 似乎在多个并列时,表示每一样都刷这么多个
Mass = 5.0 碎片/残骸的质量是多少,会影响碎片/残骸的在空中时的物理属性,越重的物体越不容易被弹飞
Disposition = SEND_IT_UP 我怀疑将之发射起来的意思是垂直向上给它一个力将之弹飞,这样说来倒是和随机力有异曲同工的作用
DispositionIntensity = 1.5 用同样的力去弹质量不同的物体,质量越大的越不容易弹得动,这个是中学物理就讲过的,不知道的赶快回去补习
End
End
6、 Science
这个INI用于定义将军技能证书,以便被一些SP调用来作为施展前提,或者被按键调用来作为学习这项技能的界面键,甚至可以作为建造前提或触发条件,就像美国的帕拉丁坦克,必须要获得了对应技能证书才能生产,而中国的红卫兵,若是获得了步兵训练之后,出来就是老兵级别。使用格式如下:
Science [证书名称]
[证书名称]同样可以是任意字符串。
Science SCIENCE_PaladinTank
PrerequisiteSciences = SCIENCE_AMERICA SCIENCE_Rank3 需要哪些证书作为学习许可前提,多个并列时表示必须同时具备才能开放此证书并允许你学习,否则按键是灰的
SciencePurchasePointCost = 1 学习这个技能证书需要花费的“学费”,也就是消耗的经验点。特别注意0表示不能学习,而不是免费!!
IsGrantable = Yes 是否允许通过学习的方式来获得,No的话表示不能学(按键不能点),但并不代表不能走后门买或者免费送
DisplayName = SCIENCE:USAPaladin 鼠标悬停时到对应按键上时显示什么文字介绍
Description = CONTROLBAR:ToolTipUSASciencePaladin 鼠标悬停时到对应按键上时左下脚介绍框里显示什么详细信息
End
对于PrerequisiteSciences语句来说,它定义了这个技能证书的学习前提,即“必须先拿到了某个证书才允许你来学这个证书”,就好比“必须先读小学、然后才能读中学,读完中学才能读大学”,你如果非要“先读大学再读小学的话”,教育部门就会以“还没拿到高中毕业证”的理由将你拒之于大学门外。不过要注意的是,这个语句的参数并非一定要是通过学习来获得的证书,也可以是一些天生就具有的“证书”,例如本例里的SCIENCE_AMERICA,这个证书是无论如何都学不到也买不来的,但只要你是美国派系的将军,那么你天生就有这个证书。当然也可以是标志着“年龄”概念的级别,例如本例里的SCIENCE_Rank3,这个证书也是无论如何都学不到也买不来的,但只要你的将军升级到3星,自然就会得到这个证书。而原版还经常性地将一个超武型将军技能分为3个实力逐渐提升的等级,并将相对低一级的证书作为相对高一级的学习前提,就像小学、中学、大学那样的渐进关系一样,因此在实际制作过程中要随时注意,对于这些关联性的调用,参数千万不能随便乱写,否则一旦调用失败,会导致游戏报错。
7、 SpecialPower
这个INI用于定义SP,并控制其类型码标签、倒记时等参数,以便被一些超武、技能、特殊能力调用来作为控制规律。部分SP自身的类型码标签还有一些直接特效。使用格式如下:
SpecialPower [证书名称]
[证书名称]同样可以是任意字符串。
SpecialPower SuperweaponDaisyCutter
Enum = SPECIAL_DAISY_CUTTER 类型码标签,这个参数是一些不能随意修改的平台内码,部分类型有特殊效果
ReloadTime = 360000 倒记时时间
RequiredScience = SCIENCE_DaisyCutter 需要哪个技能证书作为启用前提
PublicTimer = No 是否在屏幕右上角显示倒记时信息,No为不显示,缺省为No
SharedSyncedTimer = Yes 是否共享同步计时器,缺省为Yes,似乎同步计时器能保证倒记时时间和游戏速度始终保持相同的倍率不乱变
ViewObjectDuration = 30000 用于超武/技能时,表示发射之后显示目标点周围区域多长时间
ViewObjectRange = 250 同上,表示现实多大范围
RadiusCursorRadius = 170 留在地上的范围指示圈尺寸,这里的范围指示圈将受Enum的控制,不同的Enum关联着不同的图像
ShortcutPower = Yes 是否允许使用右侧快捷键
AcademyClassify = ACT_SUPERPOWER 动作模式,ACT_SUPERPOWER表示发射超武,这就意味着这个SP只能被超武/技能调用
End
Enum类型码标签总共有以下这些可选:
SPECIAL_BATTLESHIP_BOMBARDMENT
SUPW_SPECIAL_NEUTRON_MISSILE
LAZR_SPECIAL_PARTICLE_UPLINK_CANNON
SUPR_SPECIAL_CRUISE_MISSILE
AIRF_SPECIAL_CARPET_BOMB
SLTH_SPECIAL_GPS_SCRAMBLER
INFA_SPECIAL_PARADROP_AMERICA
AIRF_SPECIAL_SPECTRE_GUNSHIP
AIRF_SPECIAL_A10_THUNDERBOLT_STRIKE
NUKE_SPECIAL_NEUTRON_MISSILE
NUKE_SPECIAL_CLUSTER_MINES
AIRF_SPECIAL_DAISY_CUTTER
SUPW_SPECIAL_PARTICLE_UPLINK_CANNON
SPECIAL_TANK_PARADROP
EARLY_SPECIAL_REPAIR_VEHICLES
SPECIAL_COMMUNICATIONS_DOWNLOAD
EARLY_SPECIAL_FRENZY
EARLY_SPECIAL_LEAFLET_DROP
SPECIAL_LEAFLET_DROP
EARLY_SPECIAL_CHINA_CARPET_BOMB
SPECIAL_CHINA_CARPET_BOMB
SPECIAL_SNEAK_ATTACK
SPECIAL_FRENZY
SPECIAL_GPS_SCRAMBLER
SPECIAL_SPECTRE_GUNSHIP
SPECIAL_LAUNCH_BAIKONUR_ROCKET
SPECIAL_CLEANUP_AREA
SPECIAL_CIA_INTELLIGENCE
SPECIAL_CHANGE_BATTLE_PLANS
SPECIAL_CASH_BOUNTY
SPECIAL_PARTICLE_UPLINK_CANNON
SPECIAL_REPAIR_VEHICLES
SPECIAL_BOOBY_TRAP
SPECIAL_DISGUISE_AS_VEHICLE
SPECIAL_SPY_DRONE
SPECIAL_RADAR_VAN_SCAN
SPECIAL_INFANTRY_CAPTURE_BUILDING
SPECIAL_BLACKLOTUS_STEAL_CASH_HACK
SPECIAL_BLACKLOTUS_DISABLE_VEHICLE_HACK
SPECIAL_BLACKLOTUS_CAPTURE_BUILDING
SPECIAL_TANKHUNTER_TNT_ATTACK
SPECIAL_HACKER_DISABLE_BUILDING
SPECIAL_HELIX_NAPALM_BOMB
SPECIAL_TIMED_CHARGES
SPECIAL_REMOTE_CHARGES
SPECIAL_MISSILE_DEFENDER_LASER_GUIDED_MISSILES
SPECIAL_ARTILLERY_BARRAGE
SPECIAL_DETONATE_DIRTY_NUKE
SPECIAL_A10_THUNDERBOLT_STRIKE
SPECIAL_CRATE_DROP
SPECIAL_DEMORALIZE_OBSOLETE
SPECIAL_SCUD_STORM
SPECIAL_ANTHRAX_BOMB
SPECIAL_BLACK_MARKET_NUKE
SPECIAL_AMBUSH
SPECIAL_TERROR_CELL
SPECIAL_DEFECTOR
SPECIAL_SPY_SATELLITE
SPECIAL_NEUTRON_MISSILE
SPECIAL_CASH_HACK
SPECIAL_NAPALM_STRIKE
SPECIAL_EMP_PULSE
SPECIAL_CLUSTER_MINES
SPECIAL_CARPET_BOMB
SPECIAL_PARADROP_AMERICA
SPECIAL_DAISY_CUTTER
SPECIAL_INVALID
这些标签我没有一个一个地去测试,但是在实际使用时可以发现,这些标签可以反复地被不同的超武使用,也就是说,不同的超武可以使用相同的标签,而它们都能发挥正常作用。这就证明了这些类型码实际上仅仅只是一个普通的标签而已,本身并没有任何特殊含义,所以不需要去看它的字面意思,随便使用就是了。
只不过在使用时要稍加注意,有一少部分类型码带有特殊作用,例如几种核弹、离子炮、生化死雨的类型码标签,如果使用了这些标签的SP被某种超武调用,那么在SP倒记时完成(即超武就绪)时,会听到EVA报告说“XXXX is Ready”,而空降、集束地雷等标签则不会有这样的EVA报告音出现。而还有另一些标签,只能用于特殊能力,反之也有一些标签只能用于超武,乱用会导致无法施展或发射,因此还是不能过分大意。
SP在被超武调用时,还有一个更特殊的意义,那就是关联超武本身和快捷键。换句话说,快捷键到底是用来发射哪个超武,完全是通过Enum来对应的。
我自己就遇到过这样的情况:
我做了一个超武A,调用了一个SP-A来控制它倒记时,这个SP-A的类型码标签是SUPW_SPECIAL_NEUTRON_MISSILE,超武A具有快捷键。
而我又做了一个另一个超武B,调用了另一个SP-B来控制它倒记时,而SP-B的类型吗标签还是SUPW_SPECIAL_NEUTRON_MISSILE,但超武B没有快捷键。
当我在游戏里,同时得到了超武A和超武B时,我意外地发现,怎么超武A的快捷键上出现了“X2”字样,这意味着我拥有了两个超武A??不对吧,明明我只有一个超武A和一个超武B,怎么游戏平台会误认为我有两个超武A呢?
原来就是类型码标签在作怪,因为SP-B和SP-A拥有相同的类型码标签,因此在关联超武本身和快捷键时,会被游戏平台误认为SP-B实际上也是一个SP-A,于是快捷键就变成了两倍。
所以我在此郑重声明:
拥有快捷键的超武不能和其他任何超武使用相同的Enum,否则的话当两种都拥有时会出现双倍快捷键的误判断。
8、 Upgrade
这个INI用于定义升级项目的信息,并控制其类作用效力、研发时间、研发费用等属性,一个定义好的升级项目可以被很多东西调用,例如可以作为功能模块的切换条件(回忆一下第三章的升级切换模块里的TriggeredBy和ConflictsWith语句),因为升级项目最本质的作用就是用来配合升级切换模块来使单位的属性发生改变,以达到“能力提升”、“科技提升”的效果。使用格式如下:
Upgrade [项目名称]
[项目名称]同样可以是任意字符串。
升级项目总共分为两种效用类型:
PALYER_UPGRADE:称为宏观项目,其作用效力是一个玩家下属的所有物体,例如中国的链炮科技,升级完成之后,所有使用盖特炮的单位,都会切换成威力更强的超级盖特炮。因此宏观项目的研发按键通常可以随意放置。你只需要给那些能获得能力提升的单位添加上对应的升级切换模块,用TriggeredBy和ConflictsWith语句按照你的需求调用好这个项目即可。
OBJECT_UPGRADE:称为微观项目,其作用效力只是研发它的单个物体自身,例如美国十字军坦克的无人机,升级完成之后,只有它一个人能刷出无人机,而它身边的其他十字军坦克则不会跟着他一起刷出无人机。由于微观项目的这种特性,导致它的研发按键只能放在单位自身的界面上,否则的话你将得不到任何效果,假设你把你无人机的研发按键放到美国重工的界面上去,那么点击该按键,开始研发,但研发完成之后,你的任何一个十字军坦克都刷不出任何无人机,因为研发按键放在重工的界面上,因此只对重工自身有效,但事实上重工并不能刷无人机,因此研发完成后你啥都得不到,这个升级项目相当于报废了。
Upgrade Upgrade_ChinaChainGuns 链炮升级,没有Type语句的项目,缺省为PLAYER_UPGRADE
DisplayName = UPGRADE:ChainGuns 该升级项目的名称,需要CSF翻译。研发完成后,屏幕左上角会显示一段文字,说这项升级已经完成
BuildTime = 45.0 研发时间,单位是秒,而不是一般习惯上的毫秒,这个要留意一下
BuildCost = 1500 研发费用
ButtonImage = SSGattling 研发过程中,显示在操作栏右侧阵营标志框里的时钟完成度图标
ResearchSound = GattlingTankVoiceUpgrade 研发完成后播放的声音
End
Upgrade Upgrade_AmericaBattleDrone 攻击蜂无人机
DisplayName = UPGRADE:BattleDrone
Type = OBJECT Type = OBJECT表示该项目是一个OBJECT_UPGRADE
BuildTime = 5.0
BuildCost = 300
ButtonImage = SABattleDrone
ResearchSound = BattleDroneVoiceCreate
End
特别需要注意的是,整个游戏最多只能有128项升级项目,如果做得太多,超过了128项的话,游戏就会根本无法运行,一运行立刻报错。
于是乎,升级项目是相当珍贵的东西,因为数量有限,所以在实际制作中,对于一些功能切换效果,要尽量避免使用升级切换模块的原理来制作,如果实在无法避免,那就尽量节约使用项目,正如FK3D里有很多单位使用了摩托车容器+刷物体升级模块原理,例如GI、GGI的站立坐下切换、猛犸和武直的变形部署、时空军团和时空队长的步行瞬移切换等,如果完全使用独立的升级项目的话,总共就需要12个项目,但事实上可以全部理解为RA2那样的Deploy和Unpack,因此只需要2个项目,大家共用就OK了。
9、 Weapon
这个INI用于定义武器属性,例如攻击力、攻速、瞄准时间、射程、炮口特效、落点特效等,定义好的武器可以被单位调用作为主、副、第三武器使用。使用格式如下:
Weapon [武器名称]
[武器名称]同样可以是任意字符串。在实际调用中,如果调用失败并不会报错,仅仅会导致单位无法开火(找不到武器,你说我怎么开火?总不会叫我拿拳头去砸人家的坦克吧)。
前面在讲灰熊坦克的时候提到过武器代码的做发,这里再来个详细的介绍,旨在罗列出所有语句,好让MODER去发挥。
SAGE里的武器分为实体武器和虚体武器两种类型,所谓实体武器,是指有射弹体、看得见射弹体飞行过程的武器,例如坦克炮、导弹等等。而SAGE还有一种TS里想都不敢想的虚体武器,这种虚体武器没有射弹体,但却同样能伤害到目标,例如机枪等等。实体武器相对比较复杂,需要很多语句来定义,但正由于它有射弹体,因此可以做出很多不同的攻击效果,例如导弹的尾气流、《赤色要塞》里的4花弹、FK3D的无限弹头法等等,都必须要靠射弹体才能表现出来,这是虚体武器所不具备的功能。而虚体武器则可以理解为一种简化的武器,没有什么过多的效果,只表现武器的本质作用——“产生伤害”。
Weapon ScorpionMissileWeapon 实体武器:天蝎飞弹
PrimaryDamage = 100.0 主要攻击力的理论伤害值,实际伤害力需要根据DamageType对不同装甲类型的比率来计算
PrimaryDamageRadius = 5.0 主要攻击力的作用范围,凡是处于这个半径内的目标都将遭受100%的伤害,而没办法像RA2那样距离中心越远越衰减
SecondaryDamage = 80.0 次要攻击力的理论伤害值,和主要攻击力差不多,似乎是个额外的加成伤害
SecondaryDamageRadius = 25.0 次要攻击力的作用范围
ScatterRadiusVsInfantry = 10.0 用这个武器攻击含有INFANTRY类型标签的目标时,落点会产生最大多少点的偏差
AttackRange = 150.0 射程上限,单位为像素,和TS的换算关系为,TS里的1格相当于SAGE里的25像素
MinimumAttackRange = 40.0 射程下限
MinTargetPitch = -15 炮口的最小俯射角度,通常只在山上打山下时才感觉得出效果
MaxTargetPitch = 15 炮口的最大仰射角度,通常只在山下打山上时才感觉得出效果
DamageType = EXPLOSION 伤害类型,类似于TS的“弹头”概念,主要用来计算该武器对不同装甲类型的比率
DeathType = EXPLODED 死亡类型,可以通过单位代码里的死亡方式模块和延迟死亡模块来决定被这个武器杀死的单位将如何死法
WeaponSpeed = 600 射弹体出膛初速度,单位为像素/秒,似乎对带有LocoMotor语句的射弹体没有任何作用
WeaponRecoil = 5 开火时,炮管退缩程度,前提是该单位的W3D里具有可伸缩的炮管模型块,并在外观模块中被指定为炮管
ProjectileObject = ScorpionMissile 射弹体为哪个物体,前面说过,可以把一些邪恶的物体作为射弹体发射出去撞别人
ProjectileExhaust = MissileExhaust 射弹体在飞行过程中拖拽的尾气流为哪个粒子系统
VeterancyProjectileExhaust = HEROIC HeroicMissileExhaust 开火者达到王牌级别时,发射出来的射弹体在飞行过程中拖拽的尾气流
FireFX = FX_BuggyMissileIgnition 炮口FX特效,可以调用烟雾粒子系统、震动、闪光等FX来模拟开炮效果
FireOCL = OCL_NormalCartridge 开火时,在炮口上刷出什么东西,我用这个原来来做滑膛炮退弹壳的效果,每开一炮就蹦出一个弹壳
ProjectileDetonationFX = WeaponFX_RocketBuggyMissileDetonation 射弹体引爆时的FX特效
ProjectileDetonationOCL = OCL_GrizzlyGunVerses 射弹体引爆时刷出什么东西,用这个原理可做出《赤色要塞》里的4花弹,这个原理的绝妙用法以后再讲
FireSound = ScorpionMissileWeapon 开火时的声音
RadiusDamageAffects = ALLIES ENEMIES NEUTRALS 武器作用类型,对于一些特效武器,例如范围加血等,甚至要专门定义作用范围只对自己人和盟友有效
DelayBetweenShots = 200 开火间隔时间,即相邻两发炮弹发射的间隔时间,单位为毫秒
ClipSize = 1 一个弹夹内的炮弹数量,0表示无限量
ClipReloadTime = 15000 更换弹夹时间,单位为毫秒,0表示不需要更换弹夹(有点缺乏真实性,所以一般情况下不建议使用0)
AutoReloadsClip = Yes 是否自动更换弹夹
ProjectileCollidesWith = STRUCTURES 弹道会被什么类型的东西阻挡,换句话说,就是射弹体将撞到弹道上的什么东西,而不会像RA2那样毫无阻拦地穿过去
WeaponBonus = PLAYER_UPGRADE DAMAGE 125% 利用升级项目可以使该武器获得特定的效力提升
End
Weapon GLAJarmenKellRifle 虚体武器:贾曼卡尔狙击枪
PrimaryDamage = 180.0
PrimaryDamageRadius = 0.0
AttackRange = 225.0
DamageType = SNIPER
DeathType = NORMAL
ProjectileObject = NONE 无射弹体!!说明这个武器是个虚体武器,但是它在SAGE里却照样能产生伤害,很神奇是吧?
WeaponSpeed = 999999.0 凡是虚体武器,出膛速度可以设置成“快得变态的级别”,999999的意思实际上就是“开火就中”或者“百发百中”
FireFX = WeaponFX_GenericMachineGunFire
FireSound = JarmenKellWeapon
RadiusDamageAffects = ALLIES ENEMIES NEUTRALS
DelayBetweenShots = 1000
ClipSize = 0
ClipReloadTime = 0
WeaponBonus = PLAYER_UPGRADE DAMAGE 125%
End
对比实体武器和虚体武器的差别,我们可以发现,虚体武器的出膛速度一般设置到999999似的“无穷大”,而实体武器则很少超过1000。这是为什么呢?原来实体武器由于射弹体的飞行轨迹的特殊性而被迫存在一个不能称为BUG的BUG:
若某实体武器的出膛速度大于500,则开火者对贴身目标开火时什么东西都打不出去,开了10000炮,目标还是滴血没扣。而出膛速度越快,这个打不出任何炮弹的距离就越长,因此我将其称为“射击盲区”,经过实验发现,当出膛速度为1000时,射击盲区大约有40像素,而出膛速度为999999时,射击盲区竟然大到整个地图的对角线那么长!!(相当于说这个武器报废了)。难怪原版的所有实体武器都不敢把出膛速度做得太快,原来是有一定的道理的。从上面的例子可以看出,天蝎飞弹的出膛速度为600点,大约会产生10像素左右的射击盲区,因此EA巧妙地利用射程下限MinimumAttackRange = 40.0来避免了天蝎坦克在攻击距离自身10像素之内的贴身目标时打不出飞弹的尴尬局面,于是乎只要天蝎对贴身目标开火时,它必须先后退,等到它与目标之间的距离大于40像素时才开火,这样就必定能射出飞弹了。当然,用射程下限限制法仅仅是治标不治本的手脚办法,真正要想彻底消除射击盲区,我还是建议:
任何实体武器的出膛速度都不能大于500
10、 ParticleSystem
这个INI用于定义粒子系统的各项属性。粒子系统恐怕是3D引擎最重要的动画表现形式,所有的烟雾、流光、气浪、火焰效果都只能通过粒子系统来制作,而粒子系统是一个非常难于理解和调试的系统,相信玩过3DMAX的人应该有所体会,粒子系统有很多条语句来控制粒子的喷射属性,要调好一个粒子系统,常常需要花费相当多的时间去处理参数,因此如果你没有十足的决心,我建议你还是不要轻易自己制作新的粒子系统。
粒子系统分为好几种表现形式,虽然表面上语句看起来都差不多,但是效果相差很远,我探索了半年,也还无法完全掌握所有形式、所有语句的全部作用,因此我也没办法给出足够详细的教程,只能找几个典型来讲解一些通用语句的作用,具体到不同的形式上,只能让各位自己在体会和实践中去领悟。使用格式如下:
ParticleSystem [粒子系统名称]
[粒子系统名称]同样可以是任意字符串。在实际调用中,如果调用失败并不会报错,仅仅会显示不出任何效果。
ParticleSystem TsingMaTrailSmoke
Priority = WEAPON_EXPLOSION 显示优先度,分为几种不同的级别,游戏平台根据它来决定在不同的显示性能下,不显示哪些级别的粒子系统
IsOneShot = No 只喷射一次??不太像,因为我试过用Yes也无法让它连续喷射
Shader = ALPHA 渐变方式为ALPHA的意思是,将贴图按照颜色深浅来安排半透明效果,纯黑为全透明,纯白为不透明
Type = PARTICLE 表现形式,PARTICLE表示粒子团,此外还有STREAK(条纹),不知道具体有啥区别
ParticleName = EXSmokNew1.tga 粒子贴图,使每个喷射出来的粒子都变成这个贴图的形状,于是就呈现出了不同的视觉效果(没贴图的粒子是空白方块)
AngleZ = 0.00 0.25 Z方向角度??可能是指喷射方向上的随机偏移量,前一个数字为最小值,后一个为最大值(下面语句的都是这样排布)
AngularRateZ = -0.01 0.01 Z方向角度变化率??
AngularDamping = 0.99 0.99 角度变化阻尼
VelocityDamping = 0.99 0.98 喷射速度阻尼
Gravity = 0.01 粒子重力,似乎会使粒子在喷射之后逐渐减速,重力越大,减速越明显,过大的重力甚至可能引起粒子倒流
Lifetime = 60.00 60.00 粒子生存时间,粒子从喷射出来之后能持续存在多长时间,单位为帧
SystemLifetime = 0 系统生存时间,喷射粒子的这个系统能持续存在多长时间,单位为帧,0表示只喷射出一颗粒子就消失掉
Size = 5.00 5.00 粒子体积,即决定未贴图时粒子方块的尺寸,贴上图之后将按照这个尺寸自动拉伸图像以布满整个方块面
StartSizeRate = 0.00 0.00 初始尺寸变化率,单位为像素/帧,0表示初始时不变化,对相同的变化率来说,粒子生存时间越长,变化量就越大
SizeRate = 3.00 3.00 尺寸变化率,似乎是指初始之后的尺寸变化率,同上,0表示始终不变
SizeRateDamping = 0.95 0.95 尺寸变化阻尼,正数表示变大,貌似负数是表示变小,正负混用则是波动闪烁
Alpha1 = 0.00 0.00 0 半透明渐变效果,最后一个数字是粒子生存时间上的时间点,最大值不能超过粒子生存时间参数
Alpha2 = 1.00 1.00 5 表示当粒子生存到多少时间点时,半透明效果变成什么样子
Alpha3 = 0.00 0.00 60 最多可以定义出8阶渐变过程
Alpha4 = 0.00 0.00 0 但超过了粒子生存时间的语句通通都无效,因此这里最多能定义到60,而你非要弄个100的话是白定义了,没有效果的
Alpha5 = 0.00 0.00 0
Alpha6 = 0.00 0.00 0
Alpha7 = 0.00 0.00 0
Alpha8 = 0.00 0.00 0
Color1 = R:255 G:255 B:255 0 染色渐变效果,和半透明渐变类似,也是用时间点来控制渐变过程,最多8阶,染色信息是用RGB色光叠加法
Color2 = R:0 G:0 B:0 0 如果贴图本身就是彩色的,则染色后的粒子图像颜色很可能会发生变化,例如原来就是蓝色,染上黄色后会变成绿色
Color3 = R:0 G:0 B:0 0
Color4 = R:0 G:0 B:0 0
Color5 = R:0 G:0 B:0 0
Color6 = R:0 G:0 B:0 0
Color7 = R:0 G:0 B:0 0
Color8 = R:0 G:0 B:0 0
ColorScale = 0.00 0.00 染色比例,不知道有啥用,难道是控制染色饱和度?
BurstDelay = 40.00 40.00 当SystemLifetime不为0时,可控制喷射粒子的间隔时间,不知道单位是毫秒还是帧
BurstCount = 0.00 2.00 每次喷射出多少个粒子
InitialDelay = 20.00 20.00 初始化间隔,即喷射第一个粒子需要延迟多长时间
DriftVelocity = X:0.00 Y:0.00 Z:0.00 速度漂移,使粒子的飞行路径发生漂移,通常用在导弹尾气流上,而磁暴束的“漂移”则更加厉害
VelocityType = OUTWARD 速度类型,OUTWARD表示向外,相对还有SPHERICAL(球体辐射)、HEMISPHERICAL(半球辐射)、ORTHO(跳动)
VelOutward = 0.00 0.00 当速度类型为OUTWARD时的匹配语句,控制球体辐射的属性,具体是什么样的属性我自己都不知道
VelOutwardOther = 0.00 0.00
VolumeType = SPHERE 体积类型,SPHERE(球体)、POINT(点)、CYLINDER(圆柱)、LINE(线条),不同的体积有不同的表现效果
VolSphereRadius = 4.00 当体积类型为球体时的匹配语句,控制球体的半径
IsHollow = No 是否将所喷射出来的粒子围绕或组合成一定的形状,这个形状就是上面的体积类型
IsGroundAligned = No 粒子面是否平行于地面,No的话表示与地面垂直,Yes为平行
IsEmitAboveGroundOnly = No 是否只在地面以上喷射
IsParticleUpTowardsEmitter = No 粒子喷射方向是否与发射点轴向一致。No表示与世界坐标一致,即发射点转向但粒子喷射不变向,反之则随发射点而变向
WindMotion = Unused 风力影响,Unused表示不使用,我似乎还从来没见过启动了风力影响的粒子系统
WindAngleChangeMin = 0.149924 如果使用了风力影响,那么这几个句子就用来模拟风吹粒子的效果,具体是啥效果只有等你们自己去体会了
WindAngleChangeMax = 0.449946
WindPingPongStartAngleMin = 0.000000
WindPingPongStartAngleMax = 0.785398
WindPingPongEndAngleMin = 5.497787
WindPingPongEndAngleMax = 6.283185
End
11、 DeathType标签详解
前面提到,每个武器代码都有一个DeathType语句,这里来详细解释一下它的参数是如何产生作用的。
DeathType的含义是死亡方式,任何物体都可以以多种不同的死亡方式来表现死亡动作,这完全取决于武器的DeathType参数
比如用机枪杀死了步兵,步兵是直接倒下,而用炮弹杀死了步兵,步兵将会被爆飞起来。需要注意的是,这些死亡动作的产生是由被杀单位的ShowDeathBehavior、CreateObjectDie、FXListDie等等和死亡动作相关的模块来控制的,而DeathType仅仅起个标签的作用,用来给死亡动作模块判断,在哪些死亡方式下被执行,实际上你也可以故意编写出有冲突的死亡模块,既多条死亡模块使用相同的DeathTypes标签,这样的话同一个物体在死亡时能呈现出多种动作来(例如一个步兵被杀死后分出4身,一个直接倒地,一个爆飞,一个着火,一个融化,是不是有点恶搞?)
例如:
Behavior = SlowDeathBehavior ModuleTag_Death01
DeathTypes = NONE +BURNED
DestructionDelay = 0
FX = INITIAL FX_DieByFireChina
OCL = INITIAL OCL_FlamingInfantry
End
Behavior = SlowDeathBehavior ModuleTag_ Death02
DeathTypes = ALL -CRUSHED -SPLATTED
ProbabilityModifier = 25
DestructionDelay = 4000
DestructionDelayVariance = 1000
OCL = FINAL OCL_MMBTNKDebris
FX = FINAL FX_HeavyTankExplodeFinal
End
第一段代码表示,当该单位在被某种DeathType = BURNED的武器杀死时,会执行该模块。第二段代码表示只要是被DeathType = CRUSHED和SPLATTED以外的其他的武器杀死,就执行该模块。其中DeathTypes语句调用着一些标签,NONE表示无,每用加号添加一个标签表示增加一个可执行的情况,反之也有用ALL表示任意,每用减号添加一个标签表示扣除一个可执行的情况,两者正好是互反逻辑。
关于DeathType的标签一共有以下这些:
前4种可能是特殊标签,但目前尚不能确定是否的确是系统底层方式,因此最好不要随意乱用
DETONATED 引爆,用于射弹体撞击地面或目标后引发伤害,99%是个特效类型
CRUSHED 冲击,常用于坦克撞击步兵或围墙,可能是个特效类型
SPLATTED 坠毁,没有被任何武器使用,但当单位从高空跌落而摔死时,自动使用这个标签
EXPLODED 爆炸,常用于炮弹、导弹、炸弹等冲击力较大的伤害,和士兵骨骼动作里的EXPLODED_FLAILING关联,乱改会成大麻烦
后面的都是一般标签,有些标签被一些原版武器使用了,因此可以随意改作它用。下面这5种比较常见。
NORMAL 普通,常用于枪弹等冲击力较轻的伤害
BURNED 燃烧,常用于火焰或高温武器,凡是以这种方式死亡的步兵将全身着火然后到处乱跑
POISONED 低毒,只被绿色毒素使用,被我拿给辐射和腐地使用,凡是以这种方式死亡的步兵将会融化(像RA2那样)
POISONED_BETA 中毒,只被蓝色毒素使用,被我拿给病毒狙击枪使用,凡是以这种方式死亡的单位将OCL出能缓慢飘动的病毒粒子
POISONED_GAMMA 高毒,只被紫色毒素使用,被我拿给基因突变使用,凡是以这种方式死亡的单位将OCL出核元素箱子,被拾取后就产生核元素
这4种不太常见,可以试着改一改看看效果。
SUICIDED 自杀,通常是先用这个武器开火,只将自己杀死,然后利用FireWeaponWhenDeath来释放出带有真正伤害性的爆炸武器去伤害敌人
LASERED 反制,常用于拦截导弹的激光,被我拿给电性武器使用,凡是以这种方式死亡的单位将触电烧焦
FLOODED 淹没,只在任务里被洪水使用过,被我拿给元素变异使用,凡是以这种方式死亡的单位将OCL出水元素箱子,被拾取后就产生水元素
TOPPLED 倒塌,被倒塌的建筑或高塔砸死时自动使用这个标签
还有7种没有被使用的隐藏类型,可供MODER自己随意定义来使用
EXTRA_2 EXTRA_3 EXTRA_4 EXTRA_5 EXTRA_6 EXTRA_7 EXTRA_8
12、 KindOf标签详解
由于SAGE引擎的平台习惯性地将所有物体统一视为OBJECT,而不像RA2那样将分为建筑、车辆、步兵、飞行器这么4大类型来注册新单位,因此KindOf将是SAGE类平台唯一能够用来区分物体类别的方法。
任何一个OBJECT的KindOf都有很多个标签,总共分为3大类:
(1) 基本标签,没有特殊作用,只是个标签而已,可以随意胡乱使用,通常用于特效、特殊功能或特殊武器判断有效对象或无效对象的依据
(2) 触发标签,具备基本标签的作用,还和触发编辑器的触发目标判定相关联,可以随意使用,但不能胡乱使用(但如果不做AI的话,当我白说了)
(3) 功能标签,具备基本标签的作应,还具有一些特殊的平台底层功能,可以让这个单位获得特殊的细节功能,随意使用的话会导致一些莫名其妙的怪异现象
需要说明的是,极少数标签带有一些不太明显的平台底层功能或特性,例如LOCOMOTOR为地面移动型的INFANTRY可以相互穿越同类单位的身体,而VEHICLE就必须绕开,又如INFANTRY可以在运输单位里对外面的任意目标开火,而VEHICLE则只能对外面的空地开火……,因此当INFANTRY和VEHICLE共存时,将产生严重的后果,这会导致一些小BUG,不过基本上是可以修复的,因为这些标签只是用来分类的而已,但大多数没有实际意义,只是一个分类标签而已,是否具有其含义的功能,实际上完全由功能模块来决定,好比你给战神坦克加上TRANSPORT标签,但却不给它添加容器模块,它就不能装人,而反之你只给它添加容器模块,却不给它添加TRANSPORT标签,它却居然能装人,由此说明,这些标签都没有实际意义,所以它们的名称也不重要。
以下这些是基本标签:
BLAST_CRATER 爆炸中心,被爆炸产生器占用(SYSTEM.INI)
BOOBY_TRAP 诡雷,反抗军的技能相关OBJECT
AIRCRAFT_CARRIER 航母,被原版航母占用(原版航母是个建筑!!)
TECH_BASE_DEFENSE 科技防御塔,被中立炮兵阵地占用
CONSERVATIVE_BUILDING 保守型建筑,被中立科技建筑占用
DEMOTRAP 爆破筒,被GLA爆破筒占用
ARMOR_SALVAGER 捡垃圾者,似乎带上这个标签的单位捡到的垃圾都是升级装甲
WEAPON_SALVAGER 捡垃圾者,似乎带上这个标签的单位捡到的垃圾都是升级武器
SALVAGER 捡垃圾者,一般的捡垃圾者捡到的垃圾多种多样,每次按几率出现不同的结果
HERO 英雄,带上此标签的单位在雷达上显示的标志不是一般的点,而是闪烁的十字架
DISGUISER 伪装者
SUPPLY_SOURCE 资源站
HULK 残骸,通常给坦克底盘的残骸使用,带上了这个标签的单位死亡时,EVA也不会报告UNITLOSE
BOAT 战舰
PARACHUTE 降落伞
BALLISTIC_MISSILE 巡航导弹,通常给体积比较大,能被所有对空火力拦截的射弹体用,例如战斧导弹
SMALL_MISSILE 小型导弹,通常用于小体积的普通导弹,例如坦克猎人的单兵导弹
DRONE OP,被原版的3种蜂型机占用
TECH_BUILDING 中立科技建筑
DEFENSIVE_WALL 围墙,被原版所有围墙、路障、栅栏占用
PORTABLE_STRUCTURE 便携式建筑,被炎黄和蜗牛的几种炮塔占用
MINE 地雷,被原版的地雷、诡雷等单位占用
CRATE 箱子,凡是带上该标签的单位,可以主动去接触目标使目标获得一定的效果,例如FK3D的心灵控制弹头
HEAL_PAD 直升机平台,通常给能生产悬浮型飞机的机场使用,自然也就需要HeliPark02%d关节点支持
REPAIR_PAD 维修厂,需要RepairDockUpdate功能模块支持
PROJECTILE 普通射弹体,一般是给坦克炮使用
BRIDGE_TOWER 桥头堡,肯定是指用特定方式施加给桥头堡一个动作,就可以将断裂的桥梁修复,不过ZH的桥梁似乎没断过
LANDMARK_BRIDGE 贴地桥梁
BRIDGE 架空桥梁标
TRANSPORT 运输者
COMMANDCENTER 指挥中心,带上这个标签的物体在开场时会被默认选中,同时当玩家失去了所有这种物体时,杀人也不加经验值了
HARVESTER 矿车,似乎带上这个标签的物体会自动去挖矿,当然,需要SupplyTruckAIUpdate功能模块的支持
DOZER 推土机,带上这个标签的物体将获得把地基建造成建筑的能力以及修复受损建筑的能力,当然需要DozerAIUpdate功能模块的支持
HUGE_VEHICLE 大型物体,被炎黄、帝王等大体积的坦克占用
AIRCRAFT 空军,被所有飞机占用
VEHICLE 载具,被所有车辆、坦克、飞机等机械化部队占用
INFANTRY 士兵,被所有步兵和英雄占用,特别注意,带上了这个标签的物体可以进入没有任何限制的容积体(包括驻扎体)并能向外面的目标开火
STRUCTURE 建筑,被所有建筑占用,特别注意带上了这个标签的物体将阻挡其他单位的视线、阻挡物体的移动路径
SHRUBBERY 树木
OBSTACLE 障碍物,被围墙和其他一些栅栏占用
CASH_GENERATOR 资金产生器,被矿厂和油井占用
MONEY_HACKER 偷钱者,似乎被黑客和黑莲花占用
CLIFF_JUMPER 飞檐走壁者,被摩托车占用
触发标签,用于地图编辑器里的触发判断,可以像RA2那样,让小队攻击某一类属性的目标(如工厂类建筑)
FS_AIRFIELD 机场标签
FS_WARFACTORY 重工标签
FS_BARRACKS 兵营标签
FS_ADVANCED_TECH 实验室标签
FS_INTERNET_CENTER 股市标签
FS_FAKE 假物体标签
FS_STRATEGY_CENTER 战略中心标签
FS_SUPPLY_CENTER 矿厂标签
FS_BLACK_MARKET 黑市标签
FS_SUPERWEAPON 超武标签
FS_SUPPLY_DROPZONE 补给站标签
FS_TECHNOLOGY 高级物体标签,被部分超武建筑、实验室、机场占用
FS_BASE_DEFENSE 防御塔标签,通常给防御塔使用
FS_FACTORY 工厂类建筑标签,凡是能生产单位的似乎都有这个标签
FS_POWER 电力类建筑标签,被原版的所有电厂占用
特殊功能标签,带上这些标签的物体能获得一些特殊的平台底层功能,大多数功能还需要相关Behavior功能模块的支持才能发挥实际作用,但这些标签最好不要随意乱用,像POWERED、SELECTABLE之类可以直接发挥作用且效果明显的标签,乱用小心带来意外的混乱
DONT_AUTO_CRUSH_INFANTRY 用于无武装的单位,在遭遇敌人步兵攻击时不自动进行撞击
IGNORES_SELECT_ALL 不能双击类选
INERT 不活动的,被很多射弹体使用,尤其是光束激光
CAN_CAST_REFLECTIONS 可投射阴影,根据3D光影的投射逻辑,该单位身上可投射出其他物体的阴影
STICK_TO_TERRAIN_SLOPE 贴合在斜坡面上,即该物体在斜坡上将随斜坡的角度倾斜,常常可看到斜在悬崖上的碉堡就是这样来的
CAN_ATTACK 可攻击,有这个标签的单位才能对地面及其他目标开火,否则将没有攻击指针
IMMOBILE 稳定的,似乎是给建筑使用的,确保该物体不管遇到什么情况,哪怕是磁电波的吸引也永远不会移动半步
SELECTABLE 可被玩家选中
REVEAL_TO_ALL 能被所有人看到,原本应该给超武使用,但后来被更加微观的ShroudRevealToAllRange语句取代
CANNOT_BUILD_NEAR_SUPPLIES 建立是不能靠资源站过于太近,通常给矿厂使用,GAMEDATA.INI里的SupplyBuildBorder语句控制着最小距离
SPAWNS_ARE_THE_WEAPONS 卵生出来的OP是武器,大概是用于类似思金人蜂巢的单位
SHOW_PORTRAIT_WHEN_CONTROLLED 接受操控时显示头像??难道哪个单位又没有被显示头像呢?
IMMUNE_TO_CAPTURE 不能被捕获,对外部占领免疫,不知道是否能对进入式占领免疫
CAPTURABLE 可被捕获,与上面相反
GARRISONABLE_UNTIL_DESTROYED 重伤后依旧提供驻守能力直到被摧毁,被中国碉堡占用
SUPPLY_SOURCE_ON_PREVIEW 鼠标悬停时可看到剩余资源量(前提是使用该标签的建筑必须具备资源站的关键功能模块),被资源站占用
CAN_SEE_THROUGH_STRUCTURE 可看穿建筑,不知道有啥效果
ATTACK_NEEDS_LINE_OF_SIGHT 开火时需要直线视野,也就是当目标处于大体积障碍背后时,开火者不能像RA2那样直接开炮,只能先饶过障碍再开炮
PRODUCED_AT_HELIPAD 从直升机平台上生产下线,需要机场建筑W3D模型里的HeliPark02%d关节点支持
POWERED 需要电力才能发挥作用,通常被耗能防御塔、超武建筑等占用
AUTO_RALLYPOINT 能够由玩家来设置集合点,当然需要配合集合点按键才能完成设置
FORCEATTACKABLE 不需要使用CTRL就能攻击一切目标,通常被空降运输机占用
ALWAYS_SELECTABLE 永远能被选取??
IGNORED_IN_GUI 在界面上被忽略,通常用于一次性使用且不被玩家操控的召唤单位
MOB_NEXUS 群体关联者标签,被暴民占用,实际上暴民只是一个带有此标签的无形体,而里面的成员是这个无形体的OP
CAN_BE_REPULSED 能被再次暂停??
PARACHUTABLE 可被降落伞空降
CAN_RAPPEL 可被绳索空降
NO_HEAL_ICON 不显示治疗图标,貌似是指该单位在自动加血、接受修复等过程中,不会显示扳手、医疗的动画图标
SCORE_DESTROY 被破坏时,对方能获得其对应上层建筑的分数,被GLA地洞占用
SCORE_CREATE 分数创造者标签,被GLA所有建筑占用,和上句有关联,大概只干掉GLA的建筑是得不到分的,还必须得干掉地洞才能得分
SCORE 被破坏时,对方能获得使用该标签单位自身分数,这是给一般物体使用的标签
REBUILD_HOLE 被毁时能产生地洞,需要RebuildHoleBehavior功能模块的支持
MP_COUNT_FOR_VICTORY 军用物品,用于判断胜负(是否杀完了敌方所有特定类型的物品)
CLEANUP_HAZARD 拆弹者,被原版推土机占用
UNATTACKABLE 不能被任何东西直接攻击,但是会被误伤,因此不是真正的无敌
ALWAYS_VISIBLE 永远可见??
CLEARED_BY_BUILD 通过建造来清除??
EMP_HARDENED 对EMP效果免疫,被鬼魅炮艇机和空降运输机占用
CANNOT_RETALIATE 被攻击时不主动还击,被原版3个英雄占用,因为原版英雄是隐形的,但攻击时会现形,所以挨打后还击=暴露目标
NO_SELECT 不选择??被地道网络系统占用
NO_COLLIDE 不被任何物体阻挡其移动路径,通常用于某些可穿透围墙和建筑的射弹体
NO_GARRISON 不能驻守??难道是给步兵使用,使之不具有驻守能力?
PRELOAD 预加载,貌似是指在载入地图时就预先载入该单位的代码,以免临时出现了再加载,导致游戏突然卡一下
STEALTH_GARRISON 隐形驻守??难道被驻守后会隐形?似乎还需要隐形功能模块支持吧?
LINEBUILD 自动填补中间连接,被各种围墙占用,似乎能做出类似于RA2里的围墙连接功能
WALK_ON_TOP_OF_WALL 在围墙顶上行走??
WAVE_EFFECT 波动效果??好像和三峡大坝倾泄而出的洪水有点关系
WAVEGUIDE 波导?
这几个查不出来被什么东西用了,所以我不便于翻译,如果它们真的是空闲标签的话,那就可以随意使用他们
IGNORE_DOCKING_BONES
LOW_OVERLAPPABLE
AIRCRAFT_PATH_AROUND
DRAWABLE_ONLY
CLICK_THROUGH
REVEALS_ENEMY_PATHS
REJECT_UNMANNED
OPTIMIZED_TREE
PROP
13、 Status标签详解
Status表示某个物体或小队的状态,触发编辑器里用这个方法来判断该物体或小队当前处于什么状态,例如正在开火、隐形中等等,因此大多数状态跟物体的动作密切相关,物体的动作就决定了它将呈现出什么样的状态,但这里要强调的是,状态并非只能靠物体自身的动作来表现,而是可以靠别人来强加,因此ZH里有一个比较重要的用法,就是用武器将某个特定状态标签贴到目标身上,使目标被迫呈现出这个标签所标示的状态。
当一个武器的DamageType = STATUS时,用这个武器攻击目标,将会使目标被迫呈现出某种状态,而这个武器的PrimaryDamage参数将决定目标每遭受一次攻击会呈现多长时间的状态,单位为毫秒,那么到底的哪种状态,就取决于这个语句:DamageStatusType = XXXX,这里的XXXX就是Status列表里的其中一个标签。
例如复仇者的锁定光线:
Weapon AvengerTargetDesignator
PrimaryDamage = 200.0 每遭受一次锁定光线的攻击,状态将保持200毫秒
PrimaryDamageRadius = 0.0 使用0点的范围伤害表示一次只能锁定一个目标
AttackRange = 200.0
DamageType = STATUS 伤害类型为“打状态标签”,也是这个武器的关键语句
DamageStatusType = FAERIE_FIRE 标签对应什么状态,也就是说被锁定光线攻击的单位将被迫呈现出什么样的状态
WeaponSpeed = 999999.0
DelayBetweenShots = 200 一般来说这个参数就不应该大于PrimaryDamage参数,否则将出现间隙性的呈现状态
ClipSize = 0
ClipReloadTime = 0
LaserName = AvengerTargetingLaserBeam
LaserBoneName = TurretFX03
FireFX = WeaponFX_AvengerTargetDesignator
FireSound = AvengerPaintWeaponLoop
FireSoundLoopTime = 120
End
Status标签也可以作为单位死亡动作的辅助判断条件,通常可以在死亡模块里添加RequiredStatus或ExemptStatus语句来判断该单位在什么状态下执行什么样的死亡动作。
例如巴库帝利安特有的神族基地建设规则:
Behavior = CreateObjectDie ModuleTag_Death03A
CreationList = OCL_SmallStructureDebris 如果该单位没有处于STATUS_RIDER7状态,则执行该死亡动作
ExemptStatus = STATUS_RIDER7
End
Behavior = CreateObjectDie ModuleTag_Death03B 如果该单位处于STATUS_RIDER7状态,并且被一个DeathTypes = SUICIDED的武器杀死时执行该死亡动作
DeathTypes = NONE +SUICIDED
CreationList = OCL_BALIST_MakeUp
RequiredStatus = STATUS_RIDER7
End
全部的标签如下,除了FAERIE_FIRE比较特殊外,其他大多数标签都没有实际意义,可以随意使用,但考虑到有些状态是伴随物体的自身动作而呈现出来的,如果被被强制呈现,则可能会使该物体自动产生相应的动作,因此最好不要胡乱使用这些标签,小心动作混乱,于是一个恶搞的构思便诞生了——强制给建筑贴上一个SOLD标签后,该建筑可能会无缘无故地自动卖掉。
之所以说FAERIE_FIRE比较特殊,就在于它的标签叫FAERIE_FIRE,但还关联着一个WeaponBonus——TARGET_FAERIE_FIRE,因此这个标签是最不能随意使用的标签,除非你下决心彻底废掉TARGET_FAERIE_FIRE功能
FAERIE_FIRE 幻觉攻击,不知道是不是该这样翻译……
STATUS_RIDER8 内含8种不同乘员时,原版的摩托车用过这些标签
STATUS_RIDER7
STATUS_RIDER6
STATUS_RIDER5
STATUS_RIDER4
STATUS_RIDER3
STATUS_RIDER2
STATUS_RIDER1
DEPLOYED 部署
CAN_ATTACK 可攻击敌人
DISGUISED 伪装中
BOOBY_TRAPPED 落入陷阱中
REASSIGN_PARKING
KILLING_SELF 自杀时
DECK_HEIGHT_OFFSET
IS_CARBOMB 被恐怖分子转变成了汽车炸弹时
IGNORING_STEALTH 显形时
NO_ATTACK_FROM_AI 没有被电脑攻击时
IS_AIMING_WEAPON 追踪武器??
USING_ABILITY 施展特殊能力时
IS_ATTACKING 正在攻击时,包括开火、开火间歇、换弹等全套攻击动作
MASKED 戴上了面具??难道是指美军的防护服?
RECONSTRUCTING 重建上层建筑时,估计是GLA建筑被毁后留下可自动恢复成型的地动
UNDERGOING_REPAIR 正在接受维修时
SOLD 被拆除掉
CAN_STEALTH 可隐形
DETECTED 被探测到
STEALTHED 隐形时
IS_BRAKING
IS_FIRING_WEAPON 开火时
WETAFLAME
HIJACKED 被劫持犯捕获后
REPULSOR
PARACHUTING 空降中,且尚未落地时
AIRBORNE_TARGET 对空攻击时
NO_ATTACK 不能开火
NO_COLLISIONS 移动时可穿越一切
UNSELECTABLE 不能被玩家选中
UNDER_CONSTRUCTION 正在建造过程中
DESTROYED 被摧毁后
14、 RadiusCursorType详解
前面在讲解CommandButton.ini时提到一些特殊功能的按钮可以对目标点或目标物体使用鼠标指针,例如Command = GUARD、FIRE_WEAPON、SPECIAL_POWER等,当Option里含有NEED_TARGET_POS、NEED_TARGET_ENEMY_OBJECT、NEED_TARGET_NEUTRAL_OBJECT、NEED_TARGET_ALLY_OBJECT中至少任意一种时,该按钮就成为了一个可对特定目标或区域点执行特定动作的功能键,鼠标指针也就在你往特定目标身上或特定区域的地面上悬停或电击时被显示,这些按钮可以使用两种指针,一种是CUR文件,即WINDOWS基本鼠标指针格式,另一种是ZH的特色——范围圈,通常情况下Command = SPECIAL_POWER的按钮都会使用范围圈,用它来指定该超武的有效作用范围,而设置其圈的大小是在SpecialPower里定义RadiusCursorRadius的参数,100表示TGA的原样大小,大于100表示放大到百分之多少,小于100则缩小到百分之多少
例如空投传单:
CommandButton Command_LeafletDrop
Command = SPECIAL_POWER 这种Command允许该按钮使用鼠标指针
SpecialPower = SuperweaponLeafletDrop
Options = NEED_SPECIAL_POWER_SCIENCE NEED_TARGET_POS CONTEXTMODE_COMMAND
TextLabel = CONTROLBAR:LeafletDrop
ButtonImage = SALeaflet
ButtonBorderType = ACTION
DescriptLabel = CONTROLBAR:TooltipLeafletDrop
RadiusCursorType = DAISYCUTTER 使用DAISYCUTTER来作为范围圈图像
InvalidCursorName = GenericInvalid
End
SpecialPower SuperweaponLeafletDrop
Enum = SPECIAL_LEAFLET_DROP
ReloadTime = 300000
RequiredScience = SCIENCE_LeafletDrop
PublicTimer = No
SharedSyncedTimer = Yes
ViewObjectDuration = 30000
ViewObjectRange = 250
RadiusCursorRadius = 110 实际显示尺寸是TGA原样尺寸的1.1倍
ShortcutPower = Yes
AcademyClassify = ACT_SUPERPOWER
End
本例使用了一个名为DAISYCUTTER的范围圈,它的图像是在InGameUI.ini里定义的
DaisyCutterRadiusCursor
Texture = SCCFuelAirBomb_USA 使用哪个TGA/DDS图像来显示范围圈
Style = SHADOW_ALPHA_DECAL 风格=类似于半透明阴影贴花的样式
OpacityMin = 50% 最小透明度=50%
OpacityMax = 100% 最大透明度=100%
OpacityThrobTime = 1000 闪烁周期=1秒/次,如果透明度的最大值和最小值不等,那么就可以看到范围圈在不停地闪烁
Color = R:255 G:0 B:0 A:255 染色颜色为RGB(255,0,0)的正红色,A表示饱和度,最大255
OnlyVisibleToOwningPlayer = Yes 只对发射方玩家显示
End
需要注意的是大多数范围圈类型自动和InGameUI.ini里定义的范围圈图像对应,比如NUCLEARMISSILE将自动关联到NuclearMissileRadiusCursor。这是游戏平台内定的底层对应规则,不能添加新的范围圈类型,也无法修改对应规则。以下是所有范围圈类型和范围圈图像的对应:
DAISYCUTTER DaisyCutterRadiusCursor
NAPALMSTRIKE NapalmStrikeRadiusCursor
PARADROP ParadropRadiusCursor
CLUSTERMINES ClusterMinesRadiusCursor
EMPPULSE EMPPulseRadiusCursor
A10STRIKE A10StrikeRadiusCursor
SPECTREGUNSHIP SpectreGunshipRadiusCursor
CARPETBOMB CarpetBombRadiusCursor
NUCLEARMISSILE NuclearMissileRadiusCursor
SCUDSTORM ScudStormRadiusCursor
ARTILLERYBARRAGE ArtilleryRadiusCursor
FRENZY FrenzyRadiusCursor
SPYSATELLITE SpySatelliteRadiusCursor
SPYDRONE SpyDroneRadiusCursor
RADAR RadarRadiusCursor
AMBUSH AmbushRadiusCursor
EMERGENCY_REPAIR EmergencyRepairRadiusCursor
ANTHRAXBOMB AnthraxBombRadiusCursor
GUARD_AREA GuardAreaRadiusCursor
CLEARMINES ClearMinesRadiusCursor
ATTACK_SCATTER_AREA AttackScatterAreaRadiusCursor
AMBULANCE AmbulanceRadiusCursor
HELIX_NAPALM_BOMB HelixNapalmBombRadiusCursor
PARTICLECANNON ParticleCannonRadiusCursor
还有一些是找不到对应范围圈类型的范围圈图像,不知道有什么作用,而正是由于找不到对应范围圈类型,因此也无法被我们改作它用
SuperweaponScatterAreaRadiusCursor
OffensiveSpecialPowerRadiusCursor
FriendlySpecialPowerRadiusCursor
AttackContinueAreaRadiusCursor
AttackDamageAreaRadiusCursor
由此可见,ZH只提供了24种范围圈给我们使用,并且不能添加新的,因此必须要珍惜着使用。