新增或增强的逻辑

此页面列出了所有火卫一引入的新逻辑或扩展逻辑。

新类型/游戏内实体

护盾

image
具有护盾的建筑,步兵和载具在Fantasy ADVENTURE

rulesmd.ini中:

[AudioVisual]
Pips.Shield=-1,-1,-1           ; int, frames of pips.shp for Green, Yellow, Red
Pips.Shield.Building=-1,-1,-1  ; int, frames of pips.shp for Green, Yellow, Red

[ShieldTypes]
0=SOMESHIELDTYPE

[SOMESHIELDTYPE]                     ; ShieldType name
Strength=0                           ; integer
InitialStrength=0                    ; integer
Armor=none                           ; ArmorType
Powered=false                        ; boolean
AbsorbOverDamage=false               ; boolean
SelfHealing=0.0                      ; double, percents or absolute
SelfHealing.Rate=0.0                 ; double, ingame minutes
Respawn=0.0                          ; double, percents or absolute
Respawn.Rate=0.0                     ; double, ingame minutes
BracketDelta=0                       ; integer - pixels
IdleAnim=                            ; animation
IdleAnim.OfflineAction=Hides         ; AttachedAnimFlag (None, Hides, Temporal, Paused or PausedTemporal)
IdleAnim.TemporalAction=Hides        ; AttachedAnimFlag (None, Hides, Temporal, Paused or PausedTemporal)
BreakAnim=                           ; animation
HitAnim=                             ; animation
BreakWeapon=                         ; WeaponType
AbsorbPercent=1.0                    ; double, percents
PassPercent=0.0                      ; double, percents
AllowTransfer=                       ; boolean

[SOMETECHNO]                         ; TechnoType
ShieldType=SOMESHIELDTYPE            ; ShieldType; none by default
                                     
[SOMEWARHEAD]                        ; WarheadType
Shield.Penetrate=false               ; boolean
Shield.Break=false                   ; boolean
Shield.BreakAnim=                    ; animation
Shield.HitAnim=                      ; animation
Shield.BreakWeapon=                  ; WeaponType
Shield.AbsorbPercent=                ; double, percents
Shield.PassPercent=                  ; double, percents
Shield.Respawn.Duration=0            ; integer, game frames
Shield.Respawn.Amount=0.0            ; double, percents or absolute
Shield.Respawn.Rate=-1.0             ; double, ingame minutes
Shield.Respawn.ResetTimer=false      ; boolean
Shield.SelfHealing.Duration=0        ; integer, game frames
Shield.SelfHealing.Amount=0.0        ; double, percents or absolute
Shield.SelfHealing.Rate=-1.0         ; double, ingame minutes
Shield.SelfHealing.ResetTimer=false  ; boolean
Shield.AffectTypes=                  ; List of ShieldType names
Shield.AttachTypes=                  ; List of ShieldType names
Shield.RemoveTypes=                  ; List of ShieldType names
Shield.ReplaceOnly=false             ; boolean
Shield.ReplaceNonRespawning=false    ; boolean
Shield.InheritStateOnReplace=false   ; boolean
  • 所有建筑与单位现在都可以拥有护盾作为独立的(即可指定单独的ArmorStrength的)第二血条。

    • 负伤害将恢复护盾,除非护盾已经被击碎。如果护盾不满,全部的负伤害都会被护盾吸收。

    • 当某TechnoType拥有未击碎的护盾时,[ShieldType]->Armor将会替代[TechnoType]->Armor参与游戏计算。

    • InitialStrength can be used to set a different initial strength value from maximum.

  • 当通过DeploysIntoUndeploysInto模式转换时,护盾会按剩余百分比进行传递。如果目标单位不具备护盾,那么原始单位的护盾数据将会保存,直到变回来再恢复。

    • 也兼容Ares的Convert.*

  • Powered控制护盾是否在单位无电力支持或被EMP时仍旧生效。

    • 注意,如果单位本身Powered=false,那么护盾也不会因断电而失效。

  • AbsorbOverDamage决定护盾是否会吸收超量伤害。

  • SelfHealingRespawn遵循以下设定:0.0将关闭功能,1%到100%为以百分比恢复/重生护盾,其他数字为以固定值直接恢复/重生护盾。此外,SelfHealing支持负数以扣除护盾。

    • 如果你想让护盾每次只恢复1HP,目前需要将该标签的值设置在1到2之间的数,如1.1

  • SelfHealing.RateRespawn.Rate遵循以下设定:0.0立即恢复护盾,其他值以游戏内分钟为单位恢复/重生护盾。

  • 如果设置了IdleAnim,那么护盾存在的时候就会自动重复播放此动画。

    • 目前暂不支持使用Bouncer=yes的动画。

  • IdleAnim.OfflineAction决定在断电时空闲动画的动作。

  • IdleAnim.TemporalAction决定在被超时空时空闲动画的动作。

  • 如果设置了BreakAnim,那么护盾被击碎时将播放此动画。

  • 如果设置了HitAnim,那么护盾被攻击时将播放此动画,类似铁幕的WeaponNullifyAnim

  • 如果设置了BreakWeapon,那么护盾被击碎时将引爆此武器。注意:要使得此逻辑正常运作,需要将武器注册在[WeaponTypes]中。

  • AbsorbPercent决定此护盾吸收伤害的比例,默认1.0,即吸收全部伤害。

  • PassPercent决定此护盾的穿透比例(即不会被吸收的伤害),穿透伤害将直接作用在单位身上。默认0.0,即不穿透。

  • AllowTransfer controls whether or not the shield can be transferred if the TechnoType changes (such as (Un)DeploysInto or Ares type conversion). If not set, defaults to true if shield was attached via Shield.AttachTypes, otherwise false.

  • 拥有护盾的单位可以展示其护盾的HP条,如果护盾可重生,那么在被击碎后会保留一个空的护盾条。

    • 建筑默认使用pips.shp中的5号帧为护盾HP条,其他单位默认使用16号帧。

    • Pips.Shield可被用于指定护盾HP条用哪一帧。如果指定了1个数,那么就一直显示这一帧;如果指定了3个数,那么将遵循ConditionYellowConditionRed显示。建筑使用Pips.Shield.Building

    • 如果pipbrd.shp有额外的两帧,那么第4帧将用于步兵护盾条框,第3帧用于其他单位。BracketDelta可作为护盾HP条的额外PixelSelectionBracketDelta

  • 弹头与护盾的新交互选项。

    • Shield.Penetrate允许弹头无视护盾,将直接伤害单位本身。并且在瞄准时也会无视护盾。

    • Shield.Break允许弹头在伤害结算前一击击碎护盾。

    • Shield.BreakAnim将会代替被此弹头击碎的护盾本身的BreakAnim播放。

    • Shield.HitAnim将会代替被此弹头击中的护盾本身的HitAnim播放。

    • Shield.BreakWeapon将会代替被此弹头击碎的护盾本身的BreakWeapon引爆。

    • Shield.AbsorbPercent将会代替被此弹头击中的护盾的AbsorbPercent

    • Shield.PassPercent将会代替被此弹头击中的护盾的PassPercent

    • Shield.Respawn.RateShield.Respawn.Amount覆盖被此弹头击中的护盾重生效果,持续Shield.Respawn.Duration,负数或0则默认为护盾本身的值。如果设置了Shield.Respawn.ResetTimer,当前护盾的重生时间将会重置,否则按照新的时间进行比例缩放。如果覆盖效果在重生完成前结束了,剩余时间会按照护盾本身的Respawn.Rate进行缩放。

    • Shield.SelfHealing.RateShield.SelfHealing.Amount覆盖被此弹头击中的护盾自愈效果,持续Shield.SelfHealing.Duration,负数或0则默认为护盾本身的值。如果设置了Shield.SelfHealing.ResetTimer,当前护盾的自愈时间将会重置,否则按照新的时间进行比例缩放。如果覆盖效果在一次自愈完成前结束了,剩余时间会按照护盾本身的SelfHealing.Rate进行缩放。

    • Shield.AffectsTypes允许列出哪些护盾会被上述效果影响。如果不设置,所有的护盾都会被影响。

    • Shield.AttachTypesShield.RemoveTypes允许分别列出被此弹头影响的单位附加或移除的护盾。通常只有第一个Shield.AttachTypes被应用。

      • 如果设置了Shield.ReplaceOnlyShield.AttachTypes中的护盾会按位置替换中Shield.RemoveTypes的护盾。如果前者少于后者,那么多余的被移除的护盾被前者的最后一个护盾替换。

      • 如果设置了Shield.ReplaceNonRespawningShield.AttachTypes中的护盾会替换已被击破且不可再生的护盾。

      • 如果设置了Shield.InheritStateOnReplace,替换护盾后诸如血量,是否被击破等属性将会继承。自我恢复和重生时间不会继承,总是重设。

激光尾迹

Laser Trails
激光尾迹在Rise of the East

  • 单位和抛射体现在可以拥有多条不同透明度、厚度和颜色的彩色尾迹,这些尾迹是由引擎绘制的。

  • 单位的尾迹可以设置其每一条尾迹的类型,以及相对车体或炮塔的FHL偏移。

警告

激光尾迹非常消耗资源!由于游戏不使用GPU,因此如果设置了大量激光尾迹,即使在很好的电脑上也会迅速降低FPS。你可以通过以下方式减少这种影响:

  • 不要在单位和抛射体上放置太多激光尾迹;

  • 在尾迹不过于参差不齐的情况下设置尽可能高的SegmentLength值。

  • 尽量使尾迹长度最小(可以通过设置较小的FadeDuration值实现)。

artmd.ini中:

[LaserTrailTypes]
0=SOMETRAIL

[SOMETRAIL]                 ; LaserTrailType name
IsHouseColor=no             ; boolean
Color=255,0,0               ; integer - Red,Green,Blue
FadeDuration=64             ; integer
Thickness=4                 ; integer
SegmentLength=128           ; integer, minimal length of each trail segment
IgnoreVertical=no           ; boolean, whether the trail won't be drawn on vertical movement
IsIntense=no                ; boolean, whether the laser is "supported" (AKA prism forwarding)

[SOMEPROJECTILE]            ; BulletType Image
LaserTrail.Types=SOMETRAIL  ; list of LaserTrailTypes

[SOMETECHNO]                ; TechnoType Image
LaserTrailN.Type=SOMETRAIL  ; LaserTrailType
LaserTrailN.FLH=0,0,0       ; integer - Forward,Lateral,Height
LaserTrailN.IsOnTurret=no   ; boolean, whether the trail origin is turret
; where N = 0, 1, 2, ...

自定义辐射类型

image
不同种类的辐射正在混合

  • 现在允许为武器自定义辐射的类型,且自定义辐射需要使用注册表,关于辐射的详情请见这里

rulesmd.ini中:

[RadiationTypes]
0=SOMERADTYPE

[SOMEWEAPON]                    ; WeaponType
RadType=Radiation               ; RadType to use instead
                                ; of default [Radiation]

[SOMERADTYPE]                   ; custom RadType name
RadDurationMultiple=1           ; int
RadApplicationDelay=16          ; int
RadApplicationDelay.Building=0  ; int
RadLevelMax=500                 ; int
RadLevelDelay=90                ; int
RadLightDelay=90                ; int
RadLevelFactor=0.2              ; double
RadLightFactor=0.1              ; double
RadTintFactor=1.0               ; double
RadColor=0,255,0                ; RGB
RadSiteWarhead=RadSite          ; WarheadType

动画

动画生成单位

image

  • 动画现在可以在结束时生成或“转换成”单位

    • 因为多数情况下动画并没有所属方,单位将以中立方出生,除非你使用DestroyAnim(因为其已经可以存储被摧毁单位的所属方和方向信息)或弹头AnimList或触发事件41 播放动画在...

rulesmd.ini中:

[SOMEUNIT]                  ; UnitType
DestroyAnim.Random=yes      ; boolean, whether to randomize DestroyAnim

artmd.ini中:

[SOMEANIM]                          ; AnimationType
CreateUnit=                         ; UnitType
CreateUnit.Facing=0                 ; unsigned short, `CreateUnit` facings in range of 0-255
CreateUnit.RandomFacing=yes         ; boolean, `CreateUnit` use random facings
CreateUnit.InheritFacings=no        ; boolean, inherit facing from destroyed unit
CreateUnit.InheritTurretFacings=no  ; boolean, inherit facing from destroyed unit
CreateUnit.RemapAnim=no             ; boolean, whether to remap anim to owner color
CreateUnit.Mission=Guard            ; MissionType
CreateUnit.Owner=Victim             ; owner house kind, Invoker/Killer/Victim/Civilian/Special/Neutral/Random
CreateUnit.ConsiderPathfinding=no   ; boolean, whether to consider if the created unit can move in the cell and look for eligible cells nearby instead.

建筑

扩展建筑升级逻辑

image
为自己和盟友的电厂升级在CnC: Final War

  • 建筑升级现在可以放置在自己,盟友和/或敌人的建筑上。通过一个逗号分隔的新标签控制。当升级放在建筑上后,它将自动转换为建筑的所属方。

  • 建筑升级也可以被放置在多种建筑上。

    • Ares引入的建造限制检查对此逻辑兼容。

rulesmd.ini中:

[UPGRADENAME]       ; BuildingType
PowersUp.Owner=Self ; list of Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
PowersUp.Buildings= ; list of BuildingTypes

电厂增幅逻辑

  • 存在的时候会增幅电厂产生的电力。

    • 增幅建筑变卖或摧毁后,增幅电量就会消失。

rulesmd.ini中:

[SOMEBUILDING]                     ; BuildingType
PowerPlantEnhancer.PowerPlants=    ; list of BuildingTypes
PowerPlantEnhancer.Amount=0        ; integer
PowerPlantEnhancer.Factor=1.0      ; float

步兵

NotHuman步兵随机死亡动画

  • NotHuman=yes的步兵现在可以播放在Die1Die5中随机播放死亡动画序列,而非只有硬编码的Die1

    • 在启用此功能之前不要忘记调整步兵动画序列,否则它会播放不可见的动画序列。

rulesmd.ini中:

[SOMEINFANTRY]                    ; InfantryType
NotHuman.RandomDeathSequence=yes  ; boolean

步兵类型拥有独立的默认伪装

  • 每种步兵单位现在都可以有它自己的“DefaultDisguise”(默认伪装)。

    • 此标签的优先级高于Ares中为Side设定的“DefaultDisguise”。

rulesmd.ini中:

[SOMEINFANTRY]      ; InfantryType
DefaultDisguise=E2  ; InfantryType              

自动删除乘客

  • 有该标签的载具将随着时间移除其中乘客。大型单位将需要更多时间。该逻辑也可以像部队回收站一样工作。

  • 与Ares的劫持犯逻辑是很好的组合。

rulesmd.ini中:

[SOMETECHNO]                            ; TechnoType
PassengerDeletion.Rate=                 ; integer, game frames
PassengerDeletion.Rate.SizeMultiply=yes ; boolean, whether to multiply frames amount by size
PassengerDeletion.Soylent=no            ; boolean
PassengerDeletion.SoylentFriendlies=no  ; boolean
PassengerDeletion.ReportSound=          ; sound

自定义可对外射击载具的属性

  • 现在可以微观定义每种可对外射击载具各自的增益参数。

[SOMETECHNO]                       ; TechnoType
OpenTopped.RangeBonus=1            ; integer
OpenTopped.DamageMultiplier=1.3    ; float
OpenTopped.WarpDistance=8          ; integer

通用

心灵控制增强

image
心灵控制距离限制在Fantasy ADVENTURE
image
多心控自动释放首个目标在Fantasy ADVENTURE

  • 拥有心灵控制武器的单位现在可以拥有最大控制距离。大于0将激活此逻辑。

  • 多重心控单位可以在过载前释放被控制的单位。

  • 心灵控制的动画现在可以用MindControl.Anim自定义了。

rulesmd.ini中:

[SOMETECHNO]                       ; TechnoType
MindControlRangeLimit=-1.0         ; double
MultiMindControl.ReleaseVictim=no  ; boolean

[SOMEWARHEAD]                            ; Warhead
MindControl.Anim=ControlledAnimationType ; AnimType

子机最大航程

image
子机限制追击距离在Fantasy ADVENTURE

  • 子机现在可以停止追击超出攻击距离的敌人。Spawner.ExtraLimitRange是额外追击距离。

rulesmd.ini中:

[SOMETECHNO]              ; TechnoType
Spawner.LimitRange=no     ; boolean
Spawner.ExtraLimitRange=0 ; integer

初始生命值

  • 现在可以指定单位的初始生命值了。

rulesmd.ini中:

[SOMETECHNO]        ; TechnoType
InitialStrength=    ; int

禁止手动移动

  • 可以控制某单位是否无视移动指令。

[SOMETECHNO]           ; TechnoType
NoManualMove=no        ; boolean

Burst开火坐标

  • 现在可以为Burst指定独立的开火坐标,N从0开始,如果未指定则遵循原版设定。

  • 应用此逻辑的开火坐标不受因Burst数导致的水平对称影响。

artmd.ini中:

[SOMETECHNO]                   ; TechnoType Image
PrimaryFireFLH.BurstN=         ; int - forward, lateral, height
ElitePrimaryFireFLH.BurstN=    ; int - forward, lateral, height
SecondaryFireFLH.BurstN=       ; int - forward, lateral, height
EliteSecondaryFireFLH.BurstN=  ; int - forward, lateral, height
WeaponXFLH.BurstN=             ; int - forward, lateral, height
EliteWeaponXFLH.BurstN=        ; int - forward, lateral, height

自动开火武器

  • 通过AutoFire,现在可以使单位自动开火,而不需要搜索目标。开火要么在单位脚下(此时使用强制攻击的武器),要么是单位本身(此时根据武器选择规则选择对单位自身有效的武器),由AutoFire.TargetSelf决定。

rulesmd.ini中:

[SOMETECHNO]            ; TechnoType
AutoFire=no             ; boolean
AutoFire.TargetSelf=no  ; boolean

关闭副武器自动推算

  • 现在当一个单位有NoSecondaryWeaponFallback=true(默认为false)时,如果它的主武器不能攻击一个目标,那副武器也可以不再对其有效了;同时有若干情况,这些情况下副武器总会被调用:

    • OpenTransportWeapon=1的单位在OpenTopped=true的载具内开火。

    • NoAmmoWeapon=1的单位,Ammo大于0且当前弹药数小于等于NoAmmoAmount

    • 部署的IsSimpleDeployer=trueDeployFireWeapon=1的单位。

    • DrainWeapon=true的武器对Drainable=yes的建筑。

    • 主武器的弹头有IsLocomotor=true时对建筑。

    • 弹头ElectricAssault=true对友军的Overpowerable=true的建筑。

    • Overpowerable=true的建筑被过载。

    • (Elite)WeaponX系统整个排除在外(即Gunner=trueIsGattling=true)。

rulesmd.ini中:

[SOMETECHNO]                      ; TechnoType
NoSecondaryWeaponFallback=false   ; boolean

武器

武器定义BurstDelay

  • 现在支持为武器设定BurstDelay取代原本的BurstDelayX系统。对步兵,载具,建筑类型生效(飞机类型因开火系统完全不同无法支持)。并且允许为每一击都设定间隔,而非仅前四个。

  • 如果没有设置对应的间隔,那么就会使用最后设置的间隔。(比如Burst=3Burst.Delays=10将每一击都使用10作为间隔。)

  • 使用-1来取消此逻辑,应用原始的BurstDelay0-3

rulesmd.ini中:

[SOMEWEAPON]                 ; WeaponType
Burst.Delays=-1              ; int - burst delays (comma-separated) for shots in order from first to last.

自定义飞机扫射

image
自定义飞机扫射在Project Phantom

  • 扫射(武器抛射体ROT小于2)现在可以被自定义了。

    • Strafing.Shots决定单轮扫射中武器发射几次。Ammo仅在本轮扫射结束后扣除,无论本轮开火几次。有效值为1到5之前,超出则被重置为1或5。默认为5。

    • Strafing.SimulateBurst决定发射过程中是否模拟Burst的表现,允许偏移开火坐标。仅当Burst=1或未指定时生效。默认否。

rulesmd.ini中:

[SOMEWEAPON]                 ; WeaponType
Strafing.Shots=5             ; integer
Strafing.SimulateBurst=false ; bool

辐射增强

  • 辐射现在默认拥有所属方,辐射击杀可以被正常记录。此表现可被指定的标签关闭。

    • AffectsAlliesAffectsOwnerAffectsEnemies也会被遵守。

    • 目前辐射的产生者无法通过击杀获取经验,未来可能会改。

  • 辐射也可以对建筑产生伤害了,将RadApplicationDelay.Building设置大于0即可。

rulesmd.ini中:

[SOMEWEAPON]    ; WeaponType
Rad.NoOwner=no  ; boolean

武器瞄准筛选

  • 现在可以指定武器可以攻击什么目标或所属方。这也会影响武器选择,除了某些固定情况。

    • 请注意,CanTarget需要allempty以使武器能向没有单位的格子开火。

rulesmd.ini中:

[SOMEWEAPON]         ; WeaponType
CanTarget=all        ; list of Affected Target Enumeration (none|land|water|empty|infantry|units|buildings|all)
CanTargetHouses=all  ; list of Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)

自定义AreaFire目标

  • 现在可以指定区域开火的目标了。默认目标是开火者所在单元格,现在也可以通过设置AreaFire.Targetselfrandom将其修改为开火者本身或武器攻击范围内的随机某格。

  • AreaFire.Target=self遵循一般瞄准规则(如弹头比例等)对开火者自身。

  • AreaFire.Target=random会遵循武器的CanTargetCanTargetHouses忽略不合格或包含不合格对象的单元格。

rulesmd.ini中:

[SOMEWEAPON]         ; WeaponType
AreaFire.Target=base ; AreaFire Target Enumeration (base|self|random)

弹头

提示

所有的新弹头对溅射范围和Ares的通用弹头超武都是支持的。

金币弹

image
TransactMoney使用在Rise of the East

  • 弹头引爆时可以指定获得或失去资金。

rulesmd.ini中:

[SOMEWARHEAD]   ; Warhead
TransactMoney=0 ; integer - credits added or subtracted

揭示弹

image
SpySat=yes[NUKE]上,使核弹爆炸时开启全图视野

  • 弹头可以引爆时揭示全部视野。

  • 仅对所属方有效。

rulesmd.ini中:

[SOMEWARHEAD] ; Warhead
SpySat=no     ; boolean

迷雾弹

  • 弹头可以引爆时覆盖全部视野。

  • 仅对敌人有效。

rulesmd.ini中:

[SOMEWARHEAD] ; Warhead
BigGap=no     ; boolean

识破伪装

  • 弹头现在可以移除目标的伪装。

rulesmd.ini中:

[SOMEWARHEAD]                      ; Warhead
RemoveDisguise=no                  ; boolean

解除心控

  • 弹头现在可以破坏心控链接 (对永久心控无效) 。

rulesmd.ini中:

[SOMEWARHEAD]                        ; Warhead
RemoveMindControl=no                 ; boolean

暴击

  • 现在可以设定某弹头是否会在爆炸时造成暴击伤害。

rulesmd.ini中:

[SOMEWARHEAD]       ; Warhead
Crit.Chance=0.0     ; float, chance on [0.0-1.0] scale
Crit.ExtraDamage=0  ; integer, extra damage
Crit.Affects=all    ; list of Affected Target Enumeration (none|land|water|empty|infantry|units|buildings|all)
Crit.AnimList=      ; list of animations

[SOMETECHNO]        ; TechnoType
ImmuneToCrit=no     ; boolean

微观定义水花

image

  • 允许弹头自定义水花动画,详情请见Conventional

rulesmd.ini中:

[SOMEWARHEAD]            ; Warhead
SplashList=<none>        ; list of animations to play
SplashList.PickRandom=no ; play a random animation from the list? boolean, defaults to no

触发特定的NotHuman步兵死亡动画序列

  • 弹头可以触发指定的NotHuman=yes的步兵的死亡动画序列,值代表Die1Die5

rulesmd.ini中:

[SOMEWARHEAD]            ; Warhead
NotHuman.DeathSequence=  ; integer (1 to 5)

抛射体

拦截抛射体

image
拦截逻辑在Tiberium Crisis

  • 抛射体现在可以被单位拦截,拦截者的抛射体必须设置Inviso=yesAA=yes以确保拦截可以正常工作。此抛射体必须被用于主武器。

    • Interceptor.GuardRange决定拦截抛射体的最大距离。而单位的武器距离将限制拦截的实际距离。

    • 精英级时使用Interceptor.EliteGuardRange

    • Interceptor.MinimumGuardRange决定拦截抛射体的最小距离。小于此距离的抛射体不会被拦截。

    • 精英级时使用Interceptor.EliteMinimumGuardRange

rulesmd.ini中:

[SOMETECHNO]                            ; TechnoType
Interceptor=no                          ; boolean
Interceptor.GuardRange=0.0              ; double
Interceptor.EliteGuardRange=0.0         ; double
Interceptor.MinimumGuardRange=0.0       ; double
Interceptor.EliteMinimumGuardRange=0.0  ; double

[SOMEPROJECTILE] ; Projectile
Interceptable=no ; boolean

触发事件

500-511 变量比较

  • 将变量与给定的数字相比。

mycampaign.map中:

[Events]
...
ID=EventCount,[Event1],[EVENTID],2,[VariableIndex],[Param],[EventX]
...

事件ID

描述

全局

500

当前值>数字

501

当前值<数字

502

当前值=数字

503

当前值>=数字

504

当前值<=数字

505

当前值&数字

506

当前值>数字

507

当前值<数字

508

当前值=数字

509

当前值>=数字

510

当前值<=数字

511

当前值&数字

512-523 变量与局部变量比较

  • 将变量值与给定的局部变量值进行比较。

mycampaign.map中:

[Events]
...
ID=EventCount,[Event1],[EVENTID],2,[VariableIndex],[LocalVariableIndex],[EventX]
...

事件ID

描述

全局

512

当前值>局部变量值

513

当前值<局部变量值

514

当前值=局部变量值

515

当前值>=局部变量值

516

当前值<=局部变量值

517

当前值&局部变量值

518

当前值>局部变量值

519

当前值<局部变量值

520

当前值=局部变量值

521

当前值>=局部变量值

522

当前值<=局部变量值

523

当前值&局部变量值

524-535 变量与全局变量比较

  • 将变量值与给定的全局变量值进行比较。

mycampaign.map中:

[Events]
...
ID=EventCount,[Event1],[EVENTID],2,[VariableIndex],[GlobalVariableIndex],[EventX]
...

事件ID

描述

全局

524

当前值>全局变量值

525

当前值<全局变量值

526

当前值=全局变量值

527

当前值>=全局变量值

528

当前值<=全局变量值

529

当前值&全局变量值

530

当前值>全局变量值

531

当前值<全局变量值

532

当前值=全局变量值

533

当前值>=全局变量值

534

当前值<=全局变量值

535

当前值&全局变量值

触发动作

500 保存游戏

  • 立刻存档(仅单人游戏)。

    • 以下原版CSF被使用:TXT_SAVING_GAMETXT_GAME_WAS_SAVEDTXT_ERROR_SAVING_GAME

    • 存档名将会是地图名 - CSF

      • 例如:盟军战役25: 僵僵の钱 - 钱全被偷光了!

mycampaign.map中:

[Actions]
...
ID=ActionCount,[Action1],500,4,[CSFKey],0,0,0,0,A,[ActionX]
...

501 编辑变量

  • 计算一个变量的值

    • 变量类型为int32,即值域范围为[-2147483648,2147483647]。

      • 超过此范围可能会引起预期外的效果。

mycampaign.map中:

[Actions]
...
ID=ActionCount,[Action1],501,0,[VariableIndex],[Operation],[Number],[IsGlobalVariable],0,A,[ActionX]
...

操作数

描述

0

当前值=数字

1

当前值=当前值+数字

2

当前值=当前值-数字

3

当前值=当前值*数字

4

当前值=当前值/数字

5

当前值=当前值%数字

6

当前值=当前值<<数字

7

当前值=当前值>>数字

8

当前值=~当前值

9

当前值=当前值⊕数字

10

当前值=当前值|数字

11

当前值=当前值&数字

502 生成随机数

  • 在[Min, Max]之间生成一个随机数,存储在给定的变量中。

mycampaign.map中:

[Actions]
...
ID=ActionCount,[Action1],502,0,[VariableIndex],[Min],[Max],[IsGlobalVariable],0,A,[ActionX]
...

504 变量间计算

  • 将两个变量的值进行计算

    • 类似501,但计算数由另一个变量中读取

mycampaign.map中:

[Actions]
...
ID=ActionCount,[Action1],504,0,[VariableIndex],[Operation],[VariableForOperationIndex],[IsGlobalVariable],[IsOperationGlobalVariable],A,[ActionX]
...

操作数请查阅501号动作

脚本动作

71时效性区域警戒

  • 可以使单位进入一段时间的区域警戒模式。类似脚本5 警戒(…秒) (5,n),但是使用的是更具攻击性的区域境界动作。

aimd.ini中:

[SOMESCRIPTTYPE]  ; ScriptType
x=71,n            ; integer, time in ingame seconds

72向载具中装载

  • 使该小队内的所有非载具单位进入载具。在战役中,下一条脚本必须为43 等待到满载 (43,0),否则脚本将不会继续。

aimd.ini中:

[SOMESCRIPTTYPE]  ; ScriptType
x=72,0

73等待直到装满弹药

  • 当小队内所有成员弹药满时继续执行下一个动作。

aimd.ini中:

[SOMESCRIPTTYPE]  ; ScriptType
x=73,0

74-81 常规目标类型攻击行为

  • 这些行为指示TeamType如何使用小队成员接近并攻击由第二个参数给定的目标, 该参数是一个预先定义好的通用组别。参考下列表格中可以使用的行为(第一参数值)和参数(第二参数值)。

    • 基于威胁度的攻击行为会参考 rulesmd.iniTargetSpecialThreatCoefficientDefaultEnemyHouseThreatBonus 标签。

    • 所有Aircrafts在攻击其他空中单位时将结束该脚本。这一行为是有意的,如果缺少这一行为则Aircrafts将在开发该功能的当下存在某些无法修复的bug。

aimd.ini中:

[SOMESCRIPTTYPE]  ; ScriptType
x=i,n             ; where 74 <= i <= 81

行为

参数

重复

目标优先级

描述

74

目标类型#

更近时更高威胁

75

目标类型#

更远时更高威胁

76

目标类型#

更近

77

目标类型#

更远

78

目标类型#

更近时更高威胁

当一个小队成员摧毁给定目标时结束

79

目标类型#

更远时更高威胁

当一个小队成员摧毁给定目标时结束

80

目标类型#

更近

当一个小队成员摧毁给定目标时结束

81

目标类型#

更远

当一个小队成员摧毁给定目标时结束

  • 下列值是可被用于新攻击脚本行为的第二参数的目标类型#

目标类型

描述

1

任意目标

任意敌方 VehicleTypes, AircraftTypes, InfantryTypesBuildingTypes

2

建筑

任何不含 Artillary=yes, TickTank=yes, ICBMLauncher=yesSensorArray=yes 的敌方 BuildingTypes

3

矿车

任何含有 Harvester=yesResourceGatherer=yes 的敌方 VehicleTypes, 以及含有 ResourceGatherer=yes 的敌方 BuildingTypes

4

步兵

任意敌方 InfantryTypes

5

载具

任何含有 Artillary=yes, TickTank=yes, ICBMLauncher=yesSensorArray=yesVehicleTypes, AircraftTypes, BuildingTypes

6

工厂

任何含有Factory=设定的敌方 BuildingTypes

7

防御建筑

任何含有 IsBaseDefense=yes 的敌方 BuildingTypes

8

所属方威胁

任何将小队所属方的任何单位作为目标的敌方对象,或者任何接近小队队长的敌人

9

发电厂

任何含有正数值 Power= 的敌方 BuildingTypes

10

驻扎建筑

任何被步兵驻扎的 BuildingTypes

11

科技建筑

任何含有 Unsellable=yes, Capturable=yes, 负数值 TechLevel= 或出现在 [AI]>NeutralTechBuildings= 列表上的 BuildingTypes

12

矿石精炼厂

任何含有Refinery=yes or ResourceGatherer=yes 的敌方 BuildingTypes 及含有 ResourceGatherer=yesHarvester=no 的敌方 VehicleTypes (如奴隶矿厂)

13

心灵控制者

任何拥有带 MindControl=yes 弹头的武器的 VehicleTypes, AircraftTypes, InfantryTypesBuildingTypes

14

空中单位

任意敌方的 AircraftTypes 及飞行的 VehicleTypesInfantryTypes

15

海上目标

任何含有 Naval=yes 的敌方 BuildingTypes and VehicleTypes, 以及在水面单元格上的敌方 VehicleTypes, AircraftTypes, InfantryTypes

16

干扰者

任何含有正数值 InhibitorRange=, RadarJamRadius=CloakGenerator=yesGapGenerator=yes的敌方对象

17

地面载具

任何不含 Naval=yes 的敌方 VehicleTypes, 着陆的 AircraftTypes 及由载具部署而来的 BuildingTypes

18

经济单位

任何含有 Harvester=yes or ResourceGatherer=yes 的敌方 VehicleTypes, 及含有 Refinery=yes, ResourceGatherer=yesOrePurifier=yes 的敌方 BuildingTypes

19

兵营

任何含有 Factory=InfantryType 的敌方 BuildingTypes

20

战车工厂

任何含有 Factory=UnitType 的敌方 `BuildingTypes

21

机场

任何含有 Factory=AircraftType 的敌方 `BuildingTypes

22

雷达

任何含有 Radar=yes or SpySat=yes 的敌方 BuildingTypes

23

科技实验室

任何在 [AI]>BuildTech= 列表上的敌方 BuildingTypes

24

船坞

任何含有 Naval=yesFactory=UnitType 的敌方 `BuildingTypes

25

超级武器

任何含有 SuperWeapon=, SuperWeapon2=SuperWeapons= 的敌方 BuildingTypes

26

建造厂

任何含有 ConstructionYard=yesFactory=BuildingType 的敌方 BuildingTypes

27

中立

任意中立对象 (Civilian)

28

发生器

任何含有 CloakGenerator=yesGapGenerator=yes 的敌方 BuildingTypes

29

雷达干扰器

任何含有正数值 RadarJamRadius= 的敌方 BuildingTypes

30

屏蔽器

任何含有正数值 InhibitorRange= 的敌方 BuildingTypes

31

Naval Units

任何含有 Naval=yes 的 敌方 VehicleTypes, 或在水面单元格上的敌方 VehicleTypes, AircraftTypes, InfantryTypes

32

机动单位

任意 VehicleTypes, AircraftTypes and InfantryTypes

33

可占领目标

任何含有 Capturable=yes 或同时有 BridgeRepairHut=yesRepairable=yesBuildingTypes

34

区域威胁

任何处于小队队长的警戒范围内的敌方对象

82 降低AI触发当前权重

  • 当该脚本行为被执行时,它将降低AI触发当前的权重。当前权重将不会逾越AI触发的权重上下限。要注意的是同个AI触发下的所有TeamTypes或早或晚都会更新当前权重。第二个参数是一个正值。要注意游戏本体在计算触发周期的当前权重时只采用两个小队中的第一个,而该行为将无视该小队是其中哪个,当前权重都将在行为被执行时进行计算。

aimd.ini中:

[SOMESCRIPTTYPE]  ; ScriptType
x=82,n

83 增加AI触发当前权重

  • 当该脚本行为被执行时,它将增加AI触发当前的权重。当前权重将不会逾越AI触发的权重上下限。要注意的是同个AI触发下的所有TeamTypes或早或晚都会更新当前权重。第二个参数是一个正值。要注意游戏本体在计算触发周期的当前权重时只采用两个小队中的第一个,而该行为将无视该小队是其中哪个,当前权重都将在行为被执行时进行计算。

aimd.ini中:

[SOMESCRIPTTYPE]  ; ScriptType
x=83,n

84-91104-105 AITargetTypes 攻击行为

  • 这些行为指示TeamType如何使用小队成员接近并攻击由第二个参数给定的目标, 该参数是一个由modder定义的通用组别。参考下列表格中可以使用的行为(第一参数值)和参数(第二参数值)。

    • 基于威胁度的攻击行为会参考 rulesmd.iniTargetSpecialThreatCoefficientDefaultEnemyHouseThreatBonus 标签。

    • 所有Aircrafts在攻击其他空中单位时将结束该脚本。这一行为是有意的,如果缺少这一行为则Aircrafts将在开发该功能的当下存在某些无法修复的bug。

aimd.ini中:

[SOMESCRIPTTYPE]  ; ScriptType
x=i,n             ; where 84 <= i <= 91 or 104 <= i <= 105

行为

参数

重复

目标优先级

描述

84

AITargetTypes 序号#

更近时更高威胁

85

AITargetTypes 序号#

更远时更高威胁

86

AITargetTypes 序号#

更近

87

AITargetTypes 序号#

更远

88

AITargetTypes 序号#

更近时更高威胁

当一个小队成员摧毁给定目标时结束

89

AITargetTypes 序号#

更远时更高威胁

当一个小队成员摧毁给定目标时结束

90

AITargetTypes 序号#

更近

当一个小队成员摧毁给定目标时结束

91

AITargetTypes 序号#

更远

当一个小队成员摧毁给定目标时结束

104

AITargetTypes 序号#

更近

从列表中随机选择一个目标

105

AITargetTypes 序号#

更远

从列表中随机选择一个目标

  • 第二个参数是基于0的AITargetTypes中的索引,指定了可用的VehicleTypesAircraftTypesInfantryTypesBuildingTypes列表。要使本脚本正常工作,需要在rulesmd.ini中声明[AITargetTypes]。

rulesmd.ini中:

[AITargetTypes]  ; List of TechnoType lists
0=SOMETECHNOTYPE,SOMEOTHERTECHNOTYPE,SAMPLETECHNOTYPE
1=ANOTHERTECHNOTYPE,YETANOTHERTECHNOTYPE
; ...

92 如果未发现目标则等待

  • 在执行74-8184-91之前执行,第二个参数代表这些脚本未找到目标时的重试次数,0代表无限次重试。

aimd.ini中:

[SOMESCRIPTTYPE]  ; ScriptType
x=92,n            ; integer n=0

93 小队的触发权重奖励

  • 在执行74-8184-91之前执行,代表这些脚本每击杀一个目标单位时增加的触发权重。n必须是正数。

aimd.ini中:

[SOMESCRIPTTYPE]  ; ScriptType
x=93,n            ; integer n=0

94 抽选一个随机脚本

  • 执行此动作将会随机挑选一个脚本,并替换当前脚本。第二个参数是基于0的AIScriptsList中的索引,见下。

aimd.ini中:

[SOMESCRIPTTYPE]  ; ScriptType
x=94,n

第二个参数是基于0的AIScriptsList中的索引,指定了可用的ScriptTypes列表。要使本脚本正常工作,需要在rulesmd.ini中声明[AIScriptsList]。

rulesmd.ini中:

[AIScriptsList]  ; List of ScriptType lists
0=SOMESCRIPTTYPE,SOMEOTHERSCRIPTTYPE,SAMPLESCRIPTTYPE
1=ANOTHERSCRIPTTYPE,YETANOTHERSCRIPTTYPE
; ...

95-98106-109 移动小队至单位地点

  • 这些行为指示TeamType如何使用小队成员接近并攻击由第二个参数给定的目标。参考下列表格中可以使用的行为(第一参数值)和参数(第二参数值)。

aimd.ini中:

[SOMESCRIPTTYPE]  ; ScriptType
x=i,n             ; where 95 <= i <= 98 or 106 <= i <= 109

行为

参数

目标方

目标优先级

描述

95

目标类型#

敌方

更近时更高威胁

96

目标类型#

敌方

更远时更高威胁

97

目标类型#

友方

更近

98

目标类型#

友方

更远

99

AITargetTypes 序号#

敌方

更近时更高威胁

100

AITargetTypes 序号#

敌方

更远时更高威胁

101

AITargetTypes 序号#

友方

更近

102

AITargetTypes 序号#

友方

更远

106

AITargetTypes 序号#

敌方

更近

从被选中的列表中随机选择一个目标

107

AITargetTypes 序号#

敌方

更远

从被选中的列表中随机选择一个目标

108

AITargetTypes 序号#

友方

更近

从被选中的列表中随机选择一个目标

109

AITargetTypes 序号#

友方

更远

从被选中的列表中随机选择一个目标

103 自定义目标距离

  • 移动动作(95-102106-109)默认会在其小队队长抵达目标周围CloseEnough距离视为完成。当此动作在移动动作之前执行时,将覆盖CloseEnough设定的值。此动作首次生效后就失效,即下次移动动作会恢复使用CloseEnough

aimd.ini中:

[SOMESCRIPTTYPE]  ; ScriptType
x=103,n

110 设置移动动作结束模式

  • 设定移动动作怎样视为完成。此动作首次生效后就失效,即下次移动动作会恢复使用CloseEnough

aimd.ini中:

[SOMESCRIPTTYPE]  ; ScriptType
x=110,n
  • 可选参数为:

参数

动作结束当…

0

小队队长抵达最小距离

1

一个单位抵达最小距离

2

所有成员抵达最小距离

111 取消任务执行成功

  • 就是49,0的反向版本。

aimd.ini中:

[SOMESCRIPTTYPE]  ; ScriptType
x=111,0

112 于小队队长周围暂时集结

  • 将使小队成员在小队队长附近进入给定时长的区域警戒状态(该单位将在行为结束前几乎无法移动)。对队长周围的默认半径定义来自于[General] > CloseEnough,其余单位将不会离开这一范围。

aimd.ini中:

[SOMESCRIPTTYPE]  ; ScriptType
x=112,n

113 随机跳过下一动作

  • 执行此动作时会挑选一个1-100之间的随机数,如果此数值小于等于第二个参数,则跳过下一个动作。第二个参数为0时,下一个脚本一定会执行;为100时,下一个脚本一定不会执行。

aimd.ini中:

[SOMESCRIPTTYPE]  ; ScriptType
x=113,n           ; where 0 > n <= 100

500 - 523 编辑变量

  • 计算一个变量的值

    • 由于某些原因,变量的类型是int16而不是像触发动作中那样是int32,意味着值域范围为[-32768,32767]。

      • 超过此范围可能会引起预期外的效果。

aimd.ini中:

[SOMESCRIPTTYPE]  ; ScriptType
x=i,n             ; where 500 <= i <= 523, n is made up of two parts, the low 16 bits is being used to store the variable index, the high 16 bits is being used for storing the param value.

524 - 547 通过局部变量编辑变量

  • 通过局部变量的值计算变量的值

    • 类似500-523,但是数字的值由局部变量中读取

aimd.ini中:

[SOMESCRIPTTYPE]  ; ScriptType
x=i,n             ; where 524 <= i <= 547, n is made up of two parts, the low 16 bits is being used to store the variable index, the high 16 bits is being used for storing the local variable index.

548 - 571 通过全局变量编辑变量

  • 通过全部变量的值计算变量的值

    • 类似500-523,但是数字的值由全局变量中读取

aimd.ini中:

[SOMESCRIPTTYPE]  ; ScriptType
x=i,n             ; where 548 <= i <= 571, n is made up of two parts, the low 16 bits is being used to store the variable index, the high 16 bits is being used for storing the global variable index.

超级武器

虚拟投放

  • 超级武器现在可以投放不在地图上的建筑,好似他们在地图上一样。

    • LimboDelivery.Types列出此超武生效后创建的建筑列表。超武类型和发射位置并不重要。

    • LimboDelivery.IDs列出数字ID用以绑定建筑。要使虚拟击杀生效就必须设置。

  • 被创建的建筑不会被任何地图内威胁影响到。只有虚拟击杀的超武才能移除这些建筑。

    • LimboKill.Affects指定哪些所属方会被此功能影响

    • LimboKill.IDs列出目标ID。拥有此ID的虚拟投放建筑会被立刻移除。

  • 投放可以通过一些可选的标签随机化。此时游戏会随机选择其中一种建筑投放。

    • LimboDelivery.RollChance指定虚拟投放的概率,值域为[0%,100%](从不发生,总是发生),默认为一次成功的投放。

    • LimboDelivery.RandomWeightsN指定虚拟投放的权重,RandomWeights相当于RandomWeights0。每次虚拟投放时都会给对应的建筑增加这些权重,若对应次投放没有指定权重,则使用指定的最后一次权重。

注意:被虚拟投放的建筑不一定会使所有标签生效,以下标签是确定生效的:

  • 工业工厂

  • 矿石精炼器

  • 间谍卫星

  • 续命(KeepAlive, Ares 3.0)

  • 建造前提(含Ares扩展)

  • SuperWeapon、SuperWeapon2,SuperWeapons、SW.AuxBuildings、SW.NegBuildings(Ares 0.9)

注意,为了使此逻辑与AITriggerTypes条件共同运作,LegalTarget必须为yes。

警告

记住,虚拟投放的建筑并不实际存在,一切与其实际交互的机制都不能正常生效(比如工厂,克隆,维修厂,直升机平台等)。此外此建筑必须要么KeepAlive=no,要么可以被虚拟击杀,否则游戏将无法结束。

rulesmd.ini中:

[SOMESW]                        ; Super Weapon
LimboDelivery.Types=            ; List of BuildingTypes
LimboDelivery.IDs=              ; List of numeric IDs. -1 cannot be used.
LimboDelivery.RollChances=      ; List of percentages.
LimboDelivery.RandomWeightsN=   ; List of integers.
LimboKill.Affects=self          ; Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
LimboKill.IDs=                  ; List of numeric IDs.