第四章     常用代码编辑详解

第二章里我们了解了制作一个完整的新单位需要编辑哪些INI,但那个例子非常浅显,以至于不能囊括所有INI的内容。因此我们将在本章来个更加详细的代码编辑讲解。

 

1、   CommandButton

这个INI用于定义所有界面按钮的功能,以便被CommandSet调用。使用格式如下:

CommandButton  [按钮名称]

[按钮名称]可使用任意字符串,并且暂时不知道是否存在字符数上限。一般情况下为了确保让自己能一眼看出这个键是干什么用的,通常用下划线将其分为多个部分,例如一般的动作键可以使用Command_XX,建造建筑键可以使用BuildCMD_XX,生产单位键可以使用CreateCMD_XX,升级键可以使用UpgradeCMD_XX等等,总之,游戏平台无所谓你取什么名称,只要在调用时能对应得上就行,这是让你自己快速识别的。

 

CommandButton   Command_XXXX

WeaponSlot = [武器序号]                           PRIMARYSECONDARY 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                                               上下文关联,没搞懂有啥意义,似乎凡是用了上面4NEED_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个按键,分为27列,其位置对应号码如下:

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.iniSoundEffects.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                                                                       颠簸强度,参数为0200之间,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                                                          随机力,子体将遭受随机力弹飞,加上MinForceMaxForce4个语句可以控制随机力的力度和方向取值范围

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_FLYINGSEND_IT_OUTSEND_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-BSP-A拥有相同的类型码标签,因此在关联超武本身和快捷键时,会被游戏平台误认为SP-B实际上也是一个SP-A,于是快捷键就变成了两倍。

所以我在此郑重声明:

拥有快捷键的超武不能和其他任何超武使用相同的Enum,否则的话当两种都拥有时会出现双倍快捷键的误判断。

 

 

8、   Upgrade

这个INI用于定义升级项目的信息,并控制其类作用效力、研发时间、研发费用等属性,一个定义好的升级项目可以被很多东西调用,例如可以作为功能模块的切换条件(回忆一下第三章的升级切换模块里的TriggeredByConflictsWith语句),因为升级项目最本质的作用就是用来配合升级切换模块来使单位的属性发生改变,以达到“能力提升”、“科技提升”的效果。使用格式如下:

Upgrade  [项目名称]

[项目名称]同样可以是任意字符串。

升级项目总共分为两种效用类型:

PALYER_UPGRADE:称为宏观项目,其作用效力是一个玩家下属的所有物体,例如中国的链炮科技,升级完成之后,所有使用盖特炮的单位,都会切换成威力更强的超级盖特炮。因此宏观项目的研发按键通常可以随意放置。你只需要给那些能获得能力提升的单位添加上对应的升级切换模块,用TriggeredByConflictsWith语句按照你的需求调用好这个项目即可。

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里有很多单位使用了摩托车容器+刷物体升级模块原理,例如GIGGI的站立坐下切换、猛犸和武直的变形部署、时空军团和时空队长的步行瞬移切换等,如果完全使用独立的升级项目的话,总共就需要12个项目,但事实上可以全部理解为RA2那样的DeployUnpack,因此只需要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。这是为什么呢?原来实体武器由于射弹体的飞行轨迹的特殊性而被迫存在一个不能称为BUGBUG

若某实体武器的出膛速度大于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参数

比如用机枪杀死了步兵,步兵是直接倒下,而用炮弹杀死了步兵,步兵将会被爆飞起来。需要注意的是,这些死亡动作的产生是由被杀单位的ShowDeathBehaviorCreateObjectDieFXListDie等等和死亡动作相关的模块来控制的,而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 = CRUSHEDSPLATTED以外的其他的武器杀死,就执行该模块。其中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类平台唯一能够用来区分物体类别的方法。

任何一个OBJECTKindOf都有很多个标签,总共分为3大类:

(1) 基本标签,没有特殊作用,只是个标签而已,可以随意胡乱使用,通常用于特效、特殊功能或特殊武器判断有效对象或无效对象的依据

(2) 触发标签,具备基本标签的作用,还和触发编辑器的触发目标判定相关联,可以随意使用,但不能胡乱使用(但如果不做AI的话,当我白说了)

(3) 功能标签,具备基本标签的作应,还具有一些特殊的平台底层功能,可以让这个单位获得特殊的细节功能,随意使用的话会导致一些莫名其妙的怪异现象

需要说明的是,极少数标签带有一些不太明显的平台底层功能或特性,例如LOCOMOTOR为地面移动型的INFANTRY可以相互穿越同类单位的身体,而VEHICLE就必须绕开,又如INFANTRY可以在运输单位里对外面的任意目标开火,而VEHICLE则只能对外面的空地开火……,因此当INFANTRYVEHICLE共存时,将产生严重的后果,这会导致一些小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功能模块的支持才能发挥实际作用,但这些标签最好不要随意乱用,像POWEREDSELECTABLE之类可以直接发挥作用且效果明显的标签,乱用小心带来意外的混乱

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标签也可以作为单位死亡动作的辅助判断条件,通常可以在死亡模块里添加RequiredStatusExemptStatus语句来判断该单位在什么状态下执行什么样的死亡动作。

例如巴库帝利安特有的神族基地建设规则:

  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 = GUARDFIRE_WEAPONSPECIAL_POWER等,当Option里含有NEED_TARGET_POSNEED_TARGET_ENEMY_OBJECTNEED_TARGET_NEUTRAL_OBJECTNEED_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种范围圈给我们使用,并且不能添加新的,因此必须要珍惜着使用。