新增或增强的逻辑
此页面列出了 Phobos 新增的引擎功能或着重扩展的旧有逻辑。
新类型或游戏内实体
新的 AE 逻辑
类似于 Ares 的 AttachEffect,但是有一些差异和新特性。最大的不同在于这里的 Attach Effect 是一个需要明确定义的新类型。
Duration决定了 AE 的持续时长。它可以被科技类型和弹头上的DurationOverrides覆盖。Cumulative如果设为 true,那么允许在同一对象上多次赋予相同类型的 AE,上限取决于Cumulative.MaxCount的值,如果Cumulative.MaxCount是一个负数则没有上限。如果目标已经有了Cumulative.MaxCount个相同类型的 AE,那么再赋予同类 AE 将会刷新所剩持续时间最短的已有 AE 的剩余持续时间。Powered控制如果附加的对象罢工(PoweredUnit或者正处于 EMP 中)或缺少电力支持时 AE 是否同样会进入非活动状态。动画的行为由Animation.OfflineAction控制。DiscardOn是一个控制什么情况下弃用该 AE 的条件列表。默认为none表示永远不会弃用。entry:当进入运输工具或建筑等而从地图上消失时弃用。move:当 AE 所附加的对象移动时弃用。如果对象是建筑则忽略。stationary:当 AE 所附加的对象停止移动时弃用。如果对象是建筑则忽略。drain:当对象受到一个带有DrainWeapon=true的武器影响时弃用。inrange:当对象处于当前目标的武器射程内则弃用。距离可以通过DiscardOn.RangeOverride覆盖。outofrange:当对象处于当前目标的武器射程外则弃用。距离可以通过DiscardOn.RangeOverride覆盖。firing:当对象开火时弃用。这包括那些实际上并未开火的特殊武器,例如带有Spawner=true或DrainWeapon=true的武器。
如果
PenetratesIronCurtain没有设为 true,AE 不会应用在当前被铁幕保护的对象上。PenetratesForceShield可以用于为处于力场护盾保护中的对象分离控制,默认为PenetratesIronCurtain的值。
Animation定义一个只要 AE 所附加的对象处于活动状态就会一直循环播放的动画。如果
Animation.ResetOnReapply设为 true,当Cumulative=false时再次赋予 AE 会重设动画。Animation.OfflineAction决定当 AE 所附加的对象处于非活动状态或电力不足时动画的行为。仅当Powered=true时有效。Animation.TemporalAction决定当 AE 所附加的对象被Temporal=true的弹头冻结时动画的行为。Animation.UseInvokerAsOwner可以设置赋予 AE 的所属方和科技类型(例如武器的发射者)为 AE 的所有者和调用者而不是 AE 所附加的对象。Animation.HideIfAttachedWith包含一个如果与此 AE 附加到同一个科技类型时会导致此 AE 动画隐藏的 AE 类型列表。
CumulativeAnimations可用于声明一个在Cumulative=true类 AE 上替代Animation语句使用的动画列表。列表中的动画索引对应叠加的层数,如果层数超过列表中的动画数量则使用最后一个动画。此动画会在 AE 层数变化时更换成另一个对应层数的动画。注意由于Cumulative.MaxCount限制了可以叠加的 AE 类型数量,这可能导致某些情况下动画在 AE 过期之前闪现。CumulativeAnimations.RestartOnChange决定当 AE 层数改变时是否重设动画,如果为false则从上个动画相同长度的位置开始播放。例如使用两个图形相同但颜色不同的原版动画[RING1]和[PDFXLOC]那么默认层数变化时另一个动画从起始帧开始播放,而如果该句改为false那么视觉上将会表现为动画在层数改变时变成了另一种颜色继续播放。
AE 可以在自然结束/被移除/对象死亡时通过设置
ExpireWeapon发射一个武器。ExpireWeapon.TriggerOn决定触发发射武器的条件,如果为expire则意味着只有当 AE 自然结束时才会触发。ExpireWeapon.CumulativeOnlyOnce如果设为 true,则Cumulative=true的 AE 只会整体触发一次,而不是每层 AE 都触发。在remove和expire条件下这会让它们只在最后一层 AE 自然结束或被移除后触发。
Tint.Color和Tint.Intensity可用于设置一个染色效果和染色的光效强度。Tint.VisibleToHouses可用于控制哪些所属方可见这些染色效果。
FirepowerMultiplier、ArmorMultiplier、SpeedMultiplier和ROFMultiplier分别修改对象的火力、护甲强度、移动速度和武器装填速度。ArmorMultiplier.AllowWarheads和ArmorMultiplier.DisallowWarheads可用于限制护甲倍率在哪些弹头造成杀伤时生效。如果
ROFMultiplier.ApplyOnCurrentTimer设为 true,ROFMultiplier会在 AE 首次赋予时就对当前正在使用的武器装填计时器生效而不是等到下一次。
如果
Cloakable设为 true,被附加 AE 的对象在 AE 生效期间获得隐形能力。如果
ForceDecloak设为 true,被附加 AE 的对象在 AE 生效期间强制显形。WeaponRange.Multiplier和WeaponRange.ExtraRange可分别用于乘算或加算(以单元格为单位)所附加对象的武器射程。ExtraRange会在所有 AE 的Multiplier值叠加后叠加计算。WeaponRange.AllowWeapons和WeaponRange.DisallowWeapons分别设定哪些武器可以/不可以获得上述射程加成。对于拥有
OpenTopped=true的科技类型,OpenTopped.UseTransportRangeModifiers可以设为 true 以使载员同步获得运输工具所获得的射程加成。
Crit.Multiplier和Crit.ExtraChance可以分别乘算或加算 AE 所附加对象的暴击概率。Crit.AllowWarheads和Crit.DisallowWarheads可分别列出哪些弹头可以/不可以获得上述暴击概率加成。
RevengeWeapon可用于通过 AE 为被附加对象设置一个临时的复仇武器。RevengeWeapon.AffectsHouses定义哪些所属方可以触发这个复仇武器。
ReflectDamage可设为 true 以使 AE 所附加对象所受的任何正值杀伤反弹回攻击者。ReflectDamage.Warhead决定用于反弹伤害的弹头,默认读取自[CombatDamage] -> C4Warhead。如果ReflectDamage.Warhead.Detonate设为 true 那么弹头可以完整的引爆而不仅仅用于造成杀伤。ReflectDamage.Multiplier是返回伤害相对于所接收伤害的倍率。反弹效果不会被另一个反弹来的伤害所触发。可以将弹头的
SuppressReflectDamage设为 true 来避免触发伤害反弹效果。SuppressReflectDamage.Types可以控制哪些 AE 类型的反弹伤害效果会被抑制。如果留空则代表所有 AE 类型。
DisableWeapons可用于禁用 AE 附加对象的所有武器。在拥有
OpenTopped=true的科技类型上,OpenTopped.CheckTransportDisableWeapons可设为 true 以使载员在运输工具受DisableWeapons影响期间同步禁言效果。
可以通过在
Groups中定义字符串来为 AE 类型设置分组。组别可用于在移除 AE 和武器过滤时替代类型参与计算。
AE 可以通过
AttachEffect.AttachTypes在科技类型上赋予。AttachEffect.DurationOverrides可用于覆盖 AE 自身所写的默认Duration。该列表中的值与AttachTypes中的 AE 类型一一对应,如果一个 AE 类型没有对应的项目则使用该列表中的最后一个。AttachEffect.Delays可用于设置 AE 在科技类型上自然结束后重新创建所需的时间间隔。默认为 0(立即),负值表示 AE 不会被重新创建。该列表中的值与AttachTypes中的 AE 类型一一对应,如果一个 AE 类型没有对应的项目则使用该列表中的最后一个。AttachEffect.InitialDelays可用于设置 AE 在科技类型上首次创建所需的初始间隔。默认为 0(立即)。该列表中的值与AttachTypes中的 AE 类型一一对应,如果一个 AE 类型没有对应的项目则使用该列表中的最后一个。AttachEffect.RecreationDelays用于决定如果 AE 被完全移除(例如使用AttachEffect.RemoveTypes)是否可以重新创建 AE,如果可以则这里设置了重新创建所需的时间间隔。默认为 -1 表示不允许重新创建。该列表中的值与AttachTypes中的 AE 类型一一对应,如果一个 AE 类型没有对应的项目则使用该列表中的最后一个。需要注意的是
InitialDelays或RecreationDelays在由于DiscardOn导致 AE 当前不生效的情况下都不会进行计时。
AE 可以通过
AttachEffect.AttachTypes被弹头上赋予给其他对象。AttachEffect.DurationOverrides可用于覆盖 AE 自身所写的默认Duration。该列表中的值与AttachTypes中的 AE 类型一一对应,如果一个 AE 类型没有对应的项目则使用该列表中的最后一个。AttachEffect.CumulativeRefreshAll如果设为 true 将尝试在Cumulative=true的 AE 赋予被到一个现有 AE 已达到Cumulative.MaxCount的目标时刷新该目标上所有同类 AE 的持续时间而不只是刷新所剩持续时间最短的那个。如果AttachEffect.CumulativeRefreshAll.OnAttach也设为 true,那么即使未达到Cumulative.MaxCount也使用此刷新效果。AttachEffect.CumulativeRefreshSameSourceOnly控制是否需要现有 AE 来自同一个发射者的同一个弹头才能达到使用上述刷新效果的条件。AE 可以通过弹头上的
AttachEffect.RemoveTypes或AttachEffect.RemoveGroups移除。AttachEffect.CumulativeRemoveMinCounts设置了Cumulative=true类 AE 被RemoveTypes/RemoveGroups每次移除的最小数量。AttachEffect.CumulativeRemoveMaxCounts设置了Cumulative=true类 AE 被RemoveTypes/RemoveGroups一次移除的最大数量。
武器可以根据目标上是否附加了特定的 AE 来决定是否(不)可以开火。
AttachEffect.RequiredTypes可用设置一个对象可以作为武器目标所需要拥有的 AE 列表,当所有列出的 AE 类型全部拥有时才允许开火。AttachEffect.DisallowedTypes可用于设置一个对象作为武器目标所不得拥有的 AE 列表,当表中列出的 AE 任一类型存在时将阻止开火。AttachEffect.Required/DisallowedGroups与上面两句拥有相同的效果但使用Groups列表而不是 AE 类型列表。AttachEffect.(Required|Disallowed)MinCounts & (Required|Disallowed)MaxCounts可用于设置科技类型上必须存在/禁止存在的Cumulative=true类(对其他类型无效) AE 的最小/最大数量。AttachEffect.IgnoreFromSameSource可设为 true 以忽略由武器开火者及其弹头赋予的 AE 效果。AttachEffect.CheckOnFirer可设为 true 以将必须存在/禁止存在 AE 的检查对象更改为武器发射者而不是目标。
在 rulesmd.ini:
[AttachEffectTypes]
0=SOMEATTACHEFFECT
[SOMEATTACHEFFECT] ; AttachEffectType
Duration=0 ; integer - game frames or negative value for indefinite duration
Cumulative=false ; boolean
Cumulative.MaxCount=-1 ; integer
Powered=false ; boolean
DiscardOn=none ; List of discard condition enumeration (none|entry|move|stationary|drain|inrange|outofrange)
DiscardOn.RangeOverride= ; floating point value, distance in cells
PenetratesIronCurtain=false ; boolean
PenetratesForceShield= ; boolean
Animation= ; AnimationType
Animation.ResetOnReapply=false ; boolean
Animation.OfflineAction=Hides ; AttachedAnimFlag (None, Hides, Temporal, Paused or PausedTemporal)
Animation.TemporalAction=None ; AttachedAnimFlag (None, Hides, Temporal, Paused or PausedTemporal)
Animation.UseInvokerAsOwner=false ; boolean
Animation.HideIfAttachedWith= ; List of AttachEffectTypes
CumulativeAnimations= ; List of AnimationTypes
CumulativeAnimations.RestartOnChange=true ; boolean
ExpireWeapon= ; WeaponType
ExpireWeapon.TriggerOn=expire ; List of expire weapon trigger condition enumeration (none|expire|remove|death|discard|all)
ExpireWeapon.CumulativeOnlyOnce=false ; boolean
Tint.Color= ; integer - R,G,B
Tint.Intensity= ; floating point value
Tint.VisibleToHouses=all ; List of Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
FirepowerMultiplier=1.0 ; floating point value
ArmorMultiplier=1.0 ; floating point value
ArmorMultiplier.AllowWarheads= ; List of WarheadTypes
ArmorMultiplier.DisallowWarheads= ; List of WarheadTypes
SpeedMultiplier=1.0 ; floating point value
ROFMultiplier=1.0 ; floating point value
ROFMultiplier.ApplyOnCurrentTimer=true ; boolean
Cloakable=false ; boolean
ForceDecloak=false ; boolean
WeaponRange.Multiplier=1.0 ; floating point value
WeaponRange.ExtraRange=0.0 ; floating point value
WeaponRange.AllowWeapons= ; List of WeaponTypes
WeaponRange.DisallowWeapons= ; List of WeaponTypes
Crit.Multiplier=1.0 ; floating point value
Crit.ExtraChance=0.0 ; floating point value
Crit.AllowWarheads= ; List of WarheadTypes
Crit.DisallowWarheads= ; List of WarheadTypes
RevengeWeapon= ; WeaponType
RevengeWeapon.AffectsHouses=all ; List of Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
ReflectDamage=false ; boolean
ReflectDamage.Warhead= ; WarheadType
ReflectDamage.Warhead.Detonate=false ; WarheadType
ReflectDamage.Multiplier=1.0 ; floating point value, percents or absolute
ReflectDamage.AffectsHouses=all ; List of Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
DisableWeapons=false ; boolean
Groups= ; comma-separated list of strings (group IDs)
[SOMETECHNO] ; TechnoType
AttachEffect.AttachTypes= ; List of AttachEffectTypes
AttachEffect.DurationOverrides= ; integer - duration overrides (comma-separated) for AttachTypes in order from first to last.
AttachEffect.Delays= ; integer - delays (comma-separated) for AttachTypes in order from first to last.
AttachEffect.InitialDelays= ; integer - initial delays (comma-separated) for AttachTypes in order from first to last.
AttachEffect.RecreationDelays= ; integer - recreation delays (comma-separated) for AttachTypes in order from first to last.
OpenTopped.UseTransportRangeModifiers=false ; boolean
OpenTopped.CheckTransportDisableWeapons=false ; boolean
[SOMEWEAPON] ; WeaponType
AttachEffect.RequiredTypes= ; List of AttachEffectTypes
AttachEffect.DisallowedTypes= ; List of AttachEffectTypes
AttachEffect.RequiredGroups= ; comma-separated list of strings (group IDs)
AttachEffect.DisallowedGroups= ; comma-separated list of strings (group IDs)
AttachEffect.RequiredMinCounts= ; integer - minimum required instance count (comma-separated) for cumulative types in order from first to last.
AttachEffect.RequiredMaxCounts= ; integer - maximum required instance count (comma-separated) for cumulative types in order from first to last.
AttachEffect.DisallowedMinCounts= ; integer - minimum disallowed instance count (comma-separated) for cumulative types in order from first to last.
AttachEffect.DisallowedMaxCounts= ; integer - maximum disallowed instance count (comma-separated) for cumulative types in order from first to last.
AttachEffect.IgnoreFromSameSource=false ; boolean
AttachEffect.CheckOnFirer=false ; boolean
[SOMEWARHEAD] ; WarheadType
AttachEffect.AttachTypes= ; List of AttachEffectTypes
AttachEffect.CumulativeRefreshAll=false ; boolean
AttachEffect.CumulativeRefreshAll.OnAttach=false ; boolean
AttachEffect.CumulativeRefreshSameSourceOnly=true ; boolean
AttachEffect.RemoveTypes= ; List of AttachEffectTypes
AttachEffect.RemoveGroups= ; comma-separated list of strings (group IDs)
AttachEffect.CumulativeRemoveMinCounts= ; integer - minimum required instance count (comma-separated) for cumulative types in order from first to last.
AttachEffect.CumulativeRemoveMaxCounts= ; integer - maximum removed instance count (comma-separated) for cumulative types in order from first to last.
AttachEffect.DurationOverrides= ; integer - duration overrides (comma-separated) for AttachTypes in order from first to last.
SuppressReflectDamage=false ; boolean
SuppressReflectDamage.Types= ; List of AttachEffectTypes
自定义辐射类型
混合起来的多种辐射类型
现在任何武器都可以拥有自定义的辐射类。有关辐射的更多详细信息请参见此处。
所有辐射类型现在都有几个新的属性可用。
RadApplicationDelay.Building可以设置为大于 0 的值以允许辐射对建筑造成伤害。单个辐射源可以对同一建筑(建筑所占的每个单元格都会受到该单元格上所有辐射源的伤害)造成这种伤害的次数可以通过RadBuildingDamageMaxCount来定义,负值表示无限制。RadSiteWarhead.Detonate可以使得RadSiteWarhead在被影响的对象上引爆而不单纯造成直接杀伤。这可以使大多数弹头效果、动画显示等生效。如果RadSiteWarhead.Detonate.Full设为 false 那么它只能对所在区域造成杀伤和 Phobos 所提供的弹头效果而不是完全引爆。RadHasOwner如果设为 true 则辐射造成的伤害会被视为由发射用于创建辐射区域的抛射体其开火者的所属方造成的。这意味着诸如AffectsAllies之类的弹头设置将可以使用,并且任何被击杀的单位都将计入该玩家的摧毁数。RadHasInvoker如果设为 true 则辐射造成的伤害会被视为由发射用于创建辐射区域的抛射体的科技类型(即 “调用者”)造成的。除RadHasOwner的效果外这还将使调用者从被辐射击杀的单位中获得经验。注意如果调用者在辐射生命周期中的任何时刻死亡那么它将继续变得如同没有调用者一样。
默认情况下
UseGlobalRadApplicationDelay被设为 true,这使得游戏始终使用[Radiation]中的RadApplicationDelay和RadApplicationDelay.Building而不是特定辐射类型的。这是个性能优化措施,如果你需要给辐射类型使用不同的间隔那么应当禁用该设置。
在 rulesmd.ini:
[RadiationTypes]
0=SOMERADTYPE
[Radiation]
UseGlobalRadApplicationDelay=true ; boolean
[SOMEWEAPON] ; WeaponType
RadType=Radiation ; RadType to use instead of default of [Radiation]
[SOMERADTYPE] ; RadType
RadDurationMultiple=1 ; integer
RadApplicationDelay=16 ; integer
RadApplicationDelay.Building=0 ; integer
RadBuildingDamageMaxCount=-1 ; integer
RadLevelMax=500 ; integer
RadLevelDelay=90 ; integer
RadLightDelay=90 ; integer
RadLevelFactor=0.2 ; floating point value
RadLightFactor=0.1 ; floating point value
RadTintFactor=1.0 ; floating point value
RadColor=0,255,0 ; integer - R,G,B
RadSiteWarhead=RadSite ; WarheadType
RadSiteWarhead.Detonate=false ; boolean
RadSiteWarhead.Detonate.Full=true ; boolean
RadHasOwner=false ; boolean
RadHasInvoker=false ; boolean
警告
出于性能方面的考虑,除非存在 RadApplicationDelay.Building 高于 0 的辐射类型否则与之相关的所有功能在游戏内都将被完全禁用。这在其最早的可用时机(地图初始场景启动结束或存档加载后)就会进行判定,并且 不会 随着后续场景的改变或存档的加载而更新。
激光尾焰
东方崛起 中的激光尾焰应用实例
科技类型、抛射体和 Voxel 碎片现在都可以拥有不同透明度、宽度和颜色的彩色尾焰,这些尾焰是通过激光绘制代码完成的。
科技类型、抛射体和 Voxel 碎片可以拥有多个尾焰。对于科技类型的每个激光尾焰都可以自定义其相对于炮塔或车体的 FLH 偏移值。
在 artmd.ini:
[LaserTrailTypes]
0=SOMETRAIL
[SOMETRAIL] ; LaserTrailType name
IsHouseColor=false ; boolean
Color=255,0,0 ; integer - R,G,B
FadeDuration=64 ; integer
Thickness=4 ; integer
SegmentLength=128 ; integer, minimal length of each trail segment
IgnoreVertical=false ; boolean, whether the trail won't be drawn on vertical movement
IsIntense=false ; boolean, whether the laser is "supported" (AKA prism forwarding)
CloakVisible=false ; boolean, whether the laser is visible when the attached unit is cloaked
CloakVisible.DetectedOnly=false ; boolean, whether CloakVisible=true laser is visible only to those who can detect the attached unit
[SOMEPROJECTILE] ; Projectile 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=false ; boolean, whether the trail origin is turret
; where N = 0, 1, 2, ...
在 rulesmd.ini:
[SOMEVOXELANIM] ; VoxelAnim
LaserTrail.Types=SOMETRAIL ; List of LaserTrailTypes
警告
激光尾焰非常占用资源!由于游戏不使用 GPU,大量尾焰即便在高性能设备上也会迅速降低 FPS。想要减少这种影响:
不要在单位和抛射体上使用过多的激光尾焰;
在确保在尾焰不会过于锯齿状的前提下使用尽量高的
SegmentLength值;使用长度尽量短的激光尾焰,即设置一个较小的
FadeDuration值。
护盾
幻想奇遇 中拥有护盾的建筑、步兵和载具
在 rulesmd.ini:
[AudioVisual]
Shield.ConditionYellow= ; floating point value, percents or absolute
Shield.ConditionRed= ; floating point value, percents or absolute
Pips.Shield=-1,-1,-1 ; integer, frames of pips.shp (zero-based) for Green, Yellow, Red
Pips.Shield.Building=-1,-1,-1 ; integer, frames of pips.shp (zero-based) for Green, Yellow, Red
Pips.Shield.Background=PIPBRD.SHP ; filename - including the .shp/.pcx extension
Pips.Shield.Building.Empty=0 ; integer, frame of pips.shp (zero-based) for empty building pip
[ShieldTypes]
0=SOMESHIELDTYPE
[SOMESHIELDTYPE] ; ShieldType name
Strength=0 ; integer
InitialStrength=0 ; integer
ConditionYellow= ; floating point value, percents or absolute
ConditionRed= ; floating point value, percents or absolute
Armor=none ; ArmorType
InheritArmorFromTechno=false ; boolean
Powered=false ; boolean
AbsorbOverDamage=false ; boolean
SelfHealing=0.0 ; floating point value, percents or absolute
SelfHealing.Rate=0.0 ; floating point value, ingame minutes
SelfHealing.RestartInCombat=true ; boolean
SelfHealing.RestartInCombatDelay=0 ; integer, game frames
Respawn=0.0 ; floating point value, percents or absolute
Respawn.Rate=0.0 ; floating point value, ingame minutes
BracketDelta=0 ; integer - pixels
Pips=-1,-1,-1 ; integer, frames of pips.shp (zero-based) for Green, Yellow, Red
Pips.Building=-1,-1,-1 ; integer, frames of pips.shp (zero-based) for Green, Yellow, Red
Pips.Background= ; filename - including the .shp/.pcx extension
Pips.Building.Empty= ; integer, frame of pips.shp (zero-based) for empty building pip
IdleAnim= ; AnimationType
IdleAnim.ConditionYellow= ; AnimationType
IdleAnim.ConditionRed= ; AnimationType
IdleAnimDamaged= ; AnimationType
IdleAnimDamaged.ConditionYellow= ; AnimationType
IdleAnimDamaged.ConditionRed= ; AnimationType
IdleAnim.OfflineAction=Hides ; AttachedAnimFlag (None, Hides, Temporal, Paused or PausedTemporal)
IdleAnim.TemporalAction=Hides ; AttachedAnimFlag (None, Hides, Temporal, Paused or PausedTemporal)
BreakAnim= ; AnimationType
HitAnim= ; AnimationType
HitFlash=false ; boolean
HitFlash.FixedSize= ; integer
HitFlash.Red=true ; boolean
HitFlash.Green=true ; boolean
HitFlash.Blue=true ; boolean
HitFlash.Black=false ; boolean
BreakWeapon= ; WeaponType
AbsorbPercent=1.0 ; floating point value
PassPercent=0.0 ; floating point value
ReceivedDamage.Minimum=-2147483648 ; integer
ReceivedDamage.Maximum=2147483647 ; integer
AllowTransfer= ; boolean
ImmuneToBerserk=no ; boolean
ImmuneToCrit=no ; boolean
Tint.Color= ; integer - R,G,B
Tint.Intensity=0.0 ; floating point value
Tint.VisibleToHouses=all ; List of Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
[SOMETECHNO] ; TechnoType
ShieldType=SOMESHIELDTYPE ; ShieldType; none by default
[SOMEWARHEAD] ; WarheadType
Shield.Penetrate=false ; boolean
Shield.Break=false ; boolean
Shield.BreakAnim= ; AnimationType
Shield.HitAnim= ; AnimationType
Shield.SkipHitAnim=false ; boolean
Shield.HitFlash=true ; boolean
Shield.BreakWeapon= ; WeaponType
Shield.AbsorbPercent= ; floating point value
Shield.PassPercent= ; floating point value
Shield.ReceivedDamage.Minimum= ; integer
Shield.ReceivedDamage.Maximum= ; integer
Shield.ReceivedDamage.MinMultiplier=1.0 ; floating point value
Shield.ReceivedDamage.MaxMultiplier=1.0 ; floating point value
Shield.Respawn.Duration=0 ; integer, game frames
Shield.Respawn.Amount=0.0 ; floating point value, percents or absolute
Shield.Respawn.Rate=-1.0 ; floating point value, ingame minutes
Shield.Respawn.RestartTimer=false ; boolean
Shield.SelfHealing.Duration=0 ; integer, game frames
Shield.SelfHealing.Amount=0.0 ; floating point value, percents or absolute
Shield.SelfHealing.Rate=-1.0 ; floating point value, ingame minutes
Shield.SelfHealing.RestartInCombat= ; boolean
Shield.SelfHealing.RestartInCombatDelay=-1 ; integer, game frames
Shield.SelfHealing.RestartTimer=false ; boolean
Shield.AffectTypes= ; List of ShieldTypes
Shield.Penetrate.Types= ; List of ShieldTypes
Shield.Break.Types= ; List of ShieldTypes
Shield.Respawn.Types= ; List of ShieldTypes
Shield.SelfHealing.Types= ; List of ShieldTypes
Shield.AttachTypes= ; List of ShieldTypes
Shield.RemoveTypes= ; List of ShieldTypes
Shield.RemoveAll=false ; boolean
Shield.ReplaceOnly=false ; boolean
Shield.ReplaceNonRespawning=false ; boolean
Shield.MinimumReplaceDelay=0 ; integer, game frames
Shield.InheritStateOnReplace=false ; boolean
现在你可以给予任何科技类型护盾。它作为一个独立的第二血条拥有独立的
Armor和Strength设定。如果科技类型处于
Temporal弹头的效果中、处于铁幕/力场护盾保护中、拥有Immune=true或者拥有TypeImmune=true并且伤害来自相同所属的同种科技类型,那么护盾将不会受到伤害。负值伤害将会恢复护盾,除非护盾已被击碎。在护盾回满前所有负值伤害都将被护盾吸收。
负值伤害武器会将一个拥有激活状态且不满血的护盾的目标视为需要治疗/维修,除非弹头具有
Shield.Penetrate=true,这种情况下只会考虑对象的血量。
当一个科技类型拥有未被击碎的护盾时,
[ShieldType] -> Armor将替代[TechnoType] -> Armor用于参与索敌和杀伤计算。InheritArmorFromTechno可设为 true 以覆盖这一行为即即便护盾处于激活状态也使用[TechnoType] -> Armor而忽略[ShieldType] -> Armor。
InitialStrength可用于设置一个不同于最大值的初始护盾值。ConditionYellow和ConditionRed可被用于设置护盾损伤状态的阈值,默认分别为[AudioVisual] -> Shield.ConditionYellow & Shield.ConditionRed而它们又默认为ConditionYellow & ConditionRed。
当执行
DeploysInto或UndeploysInto时,如果两个科技类型都拥有护盾,转换后的单位/建筑将保持相对(百分比)的护盾值,类似Strength。如果其中一个科技类型没有护盾,其护盾状态会被保留直到转换回来。这同样适用于 Ares 的
Convert.*。
Powered控制当前单位电力不足或受 EMP 影响时护盾是否依然工作。注意,如果科技类型自身不受制于
Powered,那么护盾在电力不足时也不会罢工。
AbsorbOverDamage控制护盾是否在被击碎时吸收本次所受的所有伤害。SelfHealing和Respawn遵循以下设置:0.0 禁用该功能,1%-100% 按百分比恢复/重生护盾值,其他数字直接恢复/重生指定护盾值。特别的一点是SelfHealing为负数代表扣除护盾值。如果你想让护盾每次恢复/重生 1 点 HP,目前你需要将标签值设为 1 到 2 之间的任意数字,比如
1.1。如果设置了
SelfHealing.RestartInCombat当护盾受到伤害时其恢复计时器将被暂停直至SelfHealing.RestartInCombatDelay指定的帧数后。
SelfHealing.Rate和Respawn.Rate遵循以下设置:0.0 立即恢复护盾,其他值表示护盾恢复/重生间隔(单位:分)。IdleAnim如果设置则会在护盾完好时播放。该动画会自动设置为无限循环播放。IdleAnim.ConditionYellow和IdleAnim.ConditionRed可用于设置当护盾值达到[AudioVisual] -> ConditionYellow/ConditionRed的百分比时使用的不同动画。如果未设置IdleAnim.ConditionRed则会回退到IdleAnim.ConditionYellow,而后者则会回退到IdleAnim。IdleAnimDamaged、IdleAnimDamaged.ConditionYellow和IdleAnimDamaged.ConditionRed的使用方式相同,但仅当护盾附着的对象血量处于或低于[AudioVisual] -> ConditionYellow的百分比时使用。遵守与常规IdleAnim相同的回退序列,如果未设置则回退到伤残状态的上一个闲置动画变体或者直至回退到常规的IdleAnim。Bouncer=true和IsMeteor=true的动画在用作IdleAnim时会出现不合理的行为,应避免使用。
IdleAnim.OfflineAction指定处于低电量状态时护盾动画的行为。IdleAnim.TemporalAction指定被时空武器冻结时护盾动画的行为。BreakAnim如果设置则会在护盾被击碎时播放。HitAnim如果设置则会在护盾受到攻击时播放,类似于WeaponNullifyAnim用于铁幕。HitFlash如果设为 true 则当护盾受到一个弹头攻击时将产生一个闪光除非其拥有Shield.HitFlash=false。闪光的大小由受到的伤害决定,除非设置了HitFlash.FixedSize为某个数值,此时将使用该值(想要产生可见的该效果该句有效值范围为 81 到 252,高于或低于该范围的值将没有该效果)。颜色可以通过HitFlash.Red/Green/Blue进行自定义。如果设置了HitFlash.Black为 true,那么无论其他颜色设置如何,产生的闪光都是黑色的。BreakWeapon如果设置则将在护盾被击碎时向科技类型发射。AbsorbPercent控制该护盾吸收伤害的百分比。默认为 1.0,表示完全吸收伤害。PassPercent控制该护盾所 没 能吸收(穿透了)伤害的百分比,即使护盾处于激活状态也会直接被施加到单位上。默认为 0.0 - 无穿透。ReceivedDamage.Minimum和ReceivedDamage.Maximum控制单次攻击中对护盾造成的最小和最大伤害量。这在应用护甲类型和AbsorbPercent百分比之后生效。如果AbsorbOverDamage=false,则对科技类型造成的剩余伤害仍基于原始伤害受此范围调整前的值。AllowTransfer控制如果科技类型发生变化(例如(Un)DeploysInto或 Ares 的单位转换)时护盾能否转移。如果未设置,通过Shield.AttachTypes被赋予来的护盾默认为 true 其他默认为 false。ImmuneToBerserk给予对Psychedelic=yes弹头的免疫能力。否则混乱默认可以穿过护盾。注意这不应阻止单位对护盾所保护对象进行索敌。在这种情况下Versus.shieldArmor=0%仍然是必需的。通过设置
Tint.Color和Tint Intensity可以为拥有护盾的科技类型使用类似于铁幕/力场护盾或Psychedelic=true弹头的染色效果。Tint.Intensity是增加/减少的光照,1.0 是默认的对象光照。Tint.VisibleToHouses可用于自定义哪些所属方可见这些染色效果。
拥有护盾的科技类型将显示其护盾值。若护盾可以重生则会在被击碎后留下一个空的胡盾条。对于护盾条的 pip 有多种自定义选项可选。
默认情况下建筑使用
pips.shp的第 6 帧来显示护盾值,其他则使用第 17 帧。Pips.Shield可用于指定使用哪个 pip 帧作为护盾值。如果仅设为 1 位数字则始终显示该帧;如果设置 3 位数字,则它们会根据护盾值达到ConditionYellow和ConditionRed与否分别使用。Pips.Shield.Building用于 BuildingTypes。-1 作为值将使用默认帧,无论是否回退到第一个值或上述硬编码的默认值。Pips.Shield.Background可用于指定非建筑 pip 的背景或 “边框”。默认为pipbrd.shp。第 4 帧用于显示步兵的护盾值,其他单位使用第 3 帧,如果可用帧不足则分别使用第 2 帧和第 1 帧。Pips.Shield.Building.Empty可用于设置建筑空护盾值显示的 pip 帧,默认为pips.shp的第 1 帧。以上配置支持基于每个护盾类型单独设置,例如使用
[ShieldType] -> Pips替代全局的[AudioVisual] -> Pips.Shield。护盾类型上的设置优先于全局设置,未单独设置时回退至全局默认值。BracketDelta可用于添加护盾条在竖直方向的偏移量(负数为向上)。类似于PixelSelectionBracketDelta,对建筑无效。
弹头拥有与护盾交互的新选项。注意,所有这些本身并不需要能够对护盾进行目标选择(例如像
Shield.Break或移除/附加护盾这样的修改)的选项仍然需要弹头的Verses才能影响目标,除非在弹头上将EffectsRequireVerses设置为 false。Shield.Penetrate允许弹头无视这些护盾始终对科技类型本体造成全额伤害。并允许忽略护盾直接锁定科技类型。Shield.Break允许弹头总是会击碎科技类型上的这些护盾。此效果在结算伤害前生效。Shield.BreakAnim用于设置弹头击中护盾时替代护盾BreakAnim播放的动画。Shield.HitAnim用于设置弹头击中护盾时替代护盾HitAnim播放的动画。如果
Shield.SkipHitAnim设为 true,当弹头对护盾造成伤害时将不会播放任何击中动画。Shield.BreakWeapon用于设置弹头击碎护盾时替代护盾BreakWeapon发射的武器,无论是伤害饱和还是Shield.Break所造成的击碎。Shield.AbsorbPercent覆盖被杀伤护盾类型的AbsorbPercent值。Shield.PassPercent覆盖被杀伤护盾类型的PassPercent值。Shield.ReceivedDamage.Minimum和Shield.ReceivedDamage.Maximum覆盖被杀伤护盾类型上的同类设置。Shield.ReceivedDamage.MinMultiplier和Shield.ReceivedDamage.MinMultiplier分别为上面Shield.ReceivedDamage.Minimum和Shield.ReceivedDamage.Maximum用于被杀伤护盾计算弹头所造成伤害的倍率。
Shield.Respawn.Rate和Shield.Respawn.Amount会在Shield.Respawn.Duration的帧数内覆盖护盾的Respawn.Rate和Respawn.Amount。负值和 0 会默认使用护盾类型自身的值。如果设置了Shield.Respawn.RestartTimer当前正在使用的护盾重生计时器将被重置否则计时器将被根据新的Shield.Respawn.Rate按比例进行调整(例如计时器在前后保持相同百分比的进度)而不会重置。如果效果在重生计时器运作状态中失效,剩余时间也同样会按比例调整为护盾自身的Respawn.Rate。重新应用效果会将持续时间重置为Shield.Respawn.DurationShield.SelfHealing.Rate和Shield.SelfHealing.Amount会在Shield.Respawn.Duration的帧数内覆盖护盾的SelfHealing.Rate和SelfHealing.Amount。负值和 0 会默认使用护盾类型自身的值。如果设置了Shield.SelfHealing.RestartTimer当前正在使用的恢复计时器将被重置否则计时器将被根据新的Shield.SelfHealing.Rate按比例进行调整(例如计时器在前后保持相同百分比的进度)而不会重置。如果效果在恢复计时器运作状态中失效,剩余时间也同样会按比例调整为护盾自身的SelfHealing.Rate。重新应用效果会将持续时间重置为Shield.SelfHealing.Duration。此外
Shield.SelfHealing.RestartInCombat和Shield.SelfHealing.RestartInCombatDelay可用于覆盖护盾类型上的同类设置。
Shield.AffectTypes允许列出哪些护盾类型受上述效果的影响。如果未列出则代表所有护盾类型。Shield.AffectTypes可以通过使用标签Shield.Penetrate.Types、Shield.Break.Types、Shield.Respawn.Types和Shield.SelfHealing.Types分别为特定的护盾分离覆盖的参数类型。
Shield.AttachTypes和Shield.RemoveTypes允许分别列出从被弹头影响(正Verses值)的任何目标上附加或移除的护盾类型。通常只使用Shield.AttachTypes中列出的第一个。如果设置
Shield.ReplaceOnly则Shield.AttachTypes中的所有护盾只会应用于同时移除了护盾的目标,并与Shield.RemoveTypes列表中的顺序对应。如果Shield.AttachTypes中的项少于Shield.RemoveTypes则使用前者的最后一项来替换任何剩余的被移除护盾类型。如果设置
Shield.ReplaceNonRespawning则Shield.AttachTypes中的护盾将替换那些已被击碎且无法自行重生的已有护盾。如果设置
Shield.RemoveAll则移除所影响目标上的所有护盾,即使这些护盾没有列在Shield.RemoveTypes中。如果设置了Shield.ReplaceOnly则Shield.AttachTypes中的第一项将用于替换那些被移除但未列在Shield.RemoveTypes中的护盾类型。Shield.MinimumReplaceDelay可用于控制护盾被击碎后(以游戏帧为单位)多久才能被替换。如果未经过足够的时间则不会被替换。如果设置
Shield.InheritStateOnReplace则通过Shield.ReplaceOnly替换的护盾将继承前一个护盾的当前强度(护盾类型的Strength)以及是否已被击碎的状态。恢复和重生计时器将始终被重置。
动画
动画生成单位

动画现在可以在结束时通过
CreateUnit创建任何单位(载具、战机和步兵)。这比专用于生成步兵的MakeInfantry提供了更多的可选参数。CreateUnit.Owner决定创建的单位属于哪个所属方。这仅在动画拥有所有者的情况生效。载具摧毁动画、弹头
AnimList/SplashList的动画以及地图触发结果41 播放动画在...将拥有正确的所有者。CreateUnit.RemapAnim如果设为 true 则动画将使用单位色盘绘制并可重映射所有者的颜色。
CreateUnit.Mission决定所创建单位的初始任务。对于 AI 玩家可使用CreateUnit.AIMission来分离设置。CreateUnit.Facing决定所创建单位的初始朝向。CreateUnit.RandomFacing如果设为 true 那么初始朝向会随机选取。仅用于载具:如果动画来自一个被摧毁载具的载具摧毁动画那么
CreateUnit.InheritFacings和CreateUnit.InheritTurretFacings将分别从被摧毁载具的载具上继承载具主体和炮塔的朝向。由于技术限制,InheritTurretFacings不适用于 Jumpjet 载具。
CreateUnit.AlwaysSpawnOnGround如果设为 true 那么即使动画在空中单位也会在对应的地面单元格上创建。如果设为 false 则此设置无效。CreateUnit.SpawnParachutedInAir如果设为 true 那么动画在空中的情况下所创建的单位会拥有降落伞。如果CreateUnit.AlwaysSpawnOnGround设为 true 则此设置无效。CreateUnit.ConsiderPathfinding如果设为 true 则考虑动画所在单元格是否被其他对象占据或对于所要创建的单位而言无法行驶并尝试寻找一个附近未被占用的单元格。否则即便存在障碍物单位也会尽量创建在动画所在的位置。CreateUnit.SpawnAnim可用于在创建的单位出现后在其位置播放另一个动画。此动画拥有与父动画相同的所有者和调用者。CreateUnit.SpawnHeight如果设为正值则决定动画创建单位的高度。如果CreateUnit.AlwaysSpawnOnGround设为 true 则此设置无效。
在 artmd.ini:
[SOMEANIM] ; AnimationType
CreateUnit= ; TechnoType
CreateUnit.Owner=Victim ; Owner house kind, Invoker/Killer/Victim/Civilian/Special/Neutral/Random
CreateUnit.RemapAnim=false ; boolean
CreateUnit.Mission=Guard ; MissionType
CreateUnit.AIMission= ; MissionType
CreateUnit.Facing=0 ; Direction type (integers from 0-255)
CreateUnit.RandomFacing=true ; boolean
CreateUnit.InheritFacings=false ; boolean
CreateUnit.InheritTurretFacings=false ; boolean
CreateUnit.AlwaysSpawnOnGround=false ; boolean
CreateUnit.SpawnParachutedInAir=false ; boolean
CreateUnit.ConsiderPathfinding=false ; boolean
CreateUnit.SpawnAnim= ; AnimationType
CreateUnit.SpawnHeight=-1 ; integer, height in leptons
备注
由于技术限制,包括 Ares 语句 InfDeathAnim 在内的步兵死亡动画无法正确应用 CreateUnit.Owner。你可以使用 Ares 的 MakeInfantryOwner 作为替代方案,此方案无需设置 MakeInfantry 也能正常工作。
附加粒子系统
现在可以为一个动画附加一个粒子系统。仅支持
BehavesLike=Smoke的粒子系统。这与 Voxel 碎片中的同名语句等效。对于有
Next的动画下一个动画开始播放时粒子系统将被删除且如果Next的动画定义了另一个粒子系统那么新的粒子系统将被创建。
在 artmd.ini:
[SOMEANIM] ; AnimationType
AttachedSystem= ; ParticleSystemType
自定义动画可见性
现在可以通过
VisibleTo自定义哪些玩家可以看到动画。VisibleTo.ConsiderInvokerAsOwner如果设置则动画调用者的所属方将被视为VisibleTo的所有者而不是它所附着科技类型或动画的的所属方。大多动画中它们是相同的但部分动画可能不同。注意这是一个视觉效果,任何附加到动画上的逻辑例如造成伤害仍然会为所有玩家处理。
RestrictVisibilityIfCloaked如果设为 true 则隐形对象上所附着的动画和战机Trailer的(由于技术限制导弹子机的尾烟不受此限制)动画仅对观察者和可检测到它们的玩家可见。DetachOnCloak可设为 false 以覆盖原本游戏从隐形对象上移除所附着动画的行为。
在 artmd.ini:
[SOMEANIM] ; AnimationType
VisibleTo=all ; List of Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
VisibleTo.ConsiderInvokerAsOwner=false ; boolean
RestrictVisibilityIfCloaked=false ; boolean
DetachOnCloak=true ; boolean
以独立声音事件播放声音
现在可以通过
DetachedReport让动画播放一个未附加到音频事件处理器的声音。默认情况下动画的Report/StartSound由音频事件处理器播放,这允许它即使在初始创建后发生了变化声音也会循环和在正确的位置播放。这也导致通过Next链接不同的动画类型时出现问题,因为动画重新开始时音频事件处理器会重置。
在 artmd.ini:
[SOMEANIM] ; AnimationType
DetachedReport= ; Sound entry
建筑
自定义建造区域
现在允许自定义一个建筑能为哪些建筑扩展建造范围。
Adjacent.Allowed列出了可以放置在其附近(由Adjacent定义的距离内)的建筑类型。如果留空则任何未列在Adjacent.Disallowed的建筑类型都可以。Adjacent.Disallowed列出了不得放置在其附近(由Adjacent定义的距离内)的建筑类型。如果留空则任何建筑类型都可以。如果
NoBuildAreaOnBuildup设为 true 则任何建筑类型都不能当其在播放建造动画时在其附近建造。
在 rulesmd.ini:
[SOMEBUILDING] ; BuildingType
Adjacent.Allowed= ; List of BuildingTypes
Adjacent.Disallowed= ; List of BuildingTypes
NoBuildAreaOnBuildup=false ; boolean
可摧毁的寻路障碍
可以通过将
IsDestroyableBlockage设为 true 使建筑被视为可摧毁的寻路障碍物。这会使得每个无法飞行或没有适当MovementZone(允许处理可摧毁障碍物的类别,例如(Infantry|Amphibious)Destroyer)的单位能够将建筑视为像墙类覆盖物和地形对象那样不可通行且不可逾越的障碍物。注意如果一个单位拥有适当的
MovementZone但缺少实际摧毁障碍物的手段(例如一个可以发射并造成伤害的武器)那么它们仍会尝试摧毁并穿越障碍物并导致卡在那里而不是绕过障碍物。
在 rulesmd.ini:
[SOMEBUILDING] ; BuildingType
IsDestroyableObstacle=false ; boolean
拓展的建筑加载物
CnC: Final War 中加载到自己的和盟友的发电厂
备注
由于技术限制,使用 Ares 时通过 PowersUp.Buildings 而不是 PowersUpBuilding 放置的加载物(注意如果前者未设置而后者已设置则程序将 PowersUpBuilding 视为 PowersUp.Buildings 的第一个条目) 不会 满足先决条件。建议的解决方法是通过加载物来提供一个超武武器通过 虚拟投放 的建筑来作为先决条件,当父建筑消失时这些先决条件会被另一个超级武器销毁,以此类推。
现在建筑加载物可以放置在己方建筑、友方建筑乃至敌方建筑上。这三种所有者可以通过
PowersUp.Owner指定。当加载物放置在建筑上时,它将自动更改为与建筑所有者相同的所有者。现在一个加载物可以应用于由
PowersUp.Buildings指定的多种不同类型的建筑。Ares 引入的建筑加载物建造限制与这一功能兼容。
在 rulesmd.ini:
[SOMEBUILDING] ; BuildingType, as an upgrade
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 ; floating point value
间谍效果
可以通过
SpyEffect.Custom开启额外的间谍效果。SpyEffect.VictimSuperWeapon会立即在被渗透建筑的坐标以被渗透方为所属发射一个超级武器。SpyEffect.InfiltratorSuperWeapon同上但超级武器的所属方来自间谍单位。
在 rulesmd.ini:
[SOMEBUILDING] ; BuildingType
SpyEffect.Custom=false ; boolean
SpyEffect.VictimSuperWeapon= ; SuperWeaponType
SpyEffect.InfiltratorSuperWeapon= ; SuperWeaponType
步兵
自定义步兵匍匐或部署状态的 FLH
现在步兵处于匍匐(爪巴)或部署状态的 FLH 可以独立于
PrimaryFireFLH和SecondaryFireFLH进行设置。同样对 Burst 开火坐标 生效。
在 artmd.ini:
[SOMEINFANTRY] ; InfantryType image
PronePrimaryFireFLH= ; integer - Forward,Lateral,Height
ProneSecondaryFireFLH= ; integer - Forward,Lateral,Height
DeployedPrimaryFireFLH= ; integer - Forward,Lateral,Height
DeployedSecondaryFireFLH= ; integer - Forward,Lateral,Height
自定义 SlavesFreeSound
现在
SlavesFreeSound已从[AudioVisual]中解码并可以单独为每个奴隶类步兵类型微观设置。
在 rulesmd.ini:
[SOMEINFANTRY] ; InfantryType, with Slaved=yes
SlavesFreeSound= ; Sound entry, default to [AudioVisual] -> SlavesFreeSound
步兵类型默认伪装
现在可以为每个步兵类型设置其
DefaultDisguise。此标签的优先级高于 Ares 的各阵营
DefaultDisguise。
在 rulesmd.ini:
[SOMEINFANTRY] ; InfantryType
DefaultDisguise= ; InfantryType
非人步兵随机死亡动画
现在拥有
NotHuman=yes的步兵可以从Die1到Die5之间随机播放死亡动画序列而不再是硬编码的Die1。在启用此功能前请务必调整步兵动画序列否则可能播放不可见的动画序列。
在 rulesmd.ini:
[SOMEINFANTRY] ; InfantryType
NotHuman.RandomDeathSequence=yes ; boolean
奴隶解放演变
现在你可以使用
Slaved.OwnerWhenMasterKilled来决定奴隶矿场被毁后奴隶移交的所属方或行为:suicide:以身殉主,奴隶矿场死亡则奴隶同步死亡。master:助纣为虐,拿起武器但所属不变。neutral:独善其身,解放后转为平民所属方开摆。killer:揭竿而起,解放后转为奴隶矿场击杀者的所属方。(原版行为)
在 rulesmd.ini:
[SOMEINFANTRY] ; InfantryType, with Slaved=yes
Slaved.OwnerWhenMasterKilled=killer ; enumeration (suicide | master | killer | neutral)
在水中使用路上序列
设置
OnlyUseLandSequences为 true 可以使步兵即使在水中也只显示在陆地上使用的常规序列。
在 artmd.ini:
[SOMEINFANTRY] ; InfantryType image
OnlyUseLandSequences=false ; boolean
抛射体
抛射体拦截
泰伯利亚危机 中的拦截抛射体
现在可以通过在一些抛射体上设置
Interceptable=true来使它们能够被特定的科技类型拦截。如果该科技类型没有其他目标那么它将扫描范围内的可拦截抛射体并使用它的一个武器进行射击。抛射体可以定义Armor和Strength。无法对该抛射体护甲类型发起攻击的武器不会尝试拦截。在拦截时如果抛射体设置了Armor那么从抛射体的当前血量中扣除一个等于拦截武器Damage经弹头Verses和科技类型火力加成调整后的数值。无论当前抛射体血量是否被减少若拦截后其血量为 0 或更低那么抛射体将被引爆。Interceptor.Weapon决定用于拦截抛射体的武器(0 =Primary, 1 =Secondary)。The interceptor weapon may need
AAset to true on its projectile to be able to target projectiles depending on their elevation from ground. If you don’t set those then the weapon won’t be able to target high-flying projectiles respectively.
Interceptor.CanTargetHouses控制抛射体(或其发射者)属于哪些所属方时可以被拦截。Interceptor.GuardRange(以及Interceptor.(Rookie|Veteran|EliteGuardRange))是单位拦截抛射体的最大范围。不过武器的射程仍会限制单位的实际拦截范围。Interceptor.MinimumGuardRange(以及Interceptor.(Rookie|Veteran|EliteMinimumGuardRange))是单位拦截抛射体的最小范围。任何小于此范围的抛射体都不会被拦截。Interceptable.DeleteOnIntercept决定抛射体被拦截时是被简单的移除还是直接引爆。这会被拦截者的Interceptor.DeleteOnIntercept设置覆盖。Interceptable.WeaponOverride可以设置一个武器覆盖替代此抛射体在拦截时的Damage和Warhead等特性进行引爆。这会被拦截者的Interceptor.WeaponOverride设置覆盖。在拦截者上可以将
Interceptor.WeaponReplaceProjectile设为 true 以使Interceptor.WeaponOverride也使用自己的抛射体类型(包括Image和其他抛射体特性)和Speed替换被拦截的抛射体。不会替换附着的粒子系统(AttachedSystem是一个 Ares 功能)。在拦截者上可以将
Interceptor.WeaponCumulativeDamage设为 true 以使Interceptor.WeaponOverride武器的Damage会叠加到抛射体的Damage上而不是覆盖它。
Interceptor.KeepIntact可设为 true 以允许被拦截的抛射体继续飞行就像它们没有被拦截一样,不过Interceptor.WeaponOverride等效果仍会应用。
在 rulesmd.ini:
[SOMETECHNO] ; TechnoType
Interceptor=false ; boolean
Interceptor.Weapon=0 ; integer, weapon slot index (0 or 1)
Interceptor.CanTargetHouses=enemies ; Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
Interceptor.GuardRange=0.0 ; floating point value
Interceptor.VeteranGuardRange= ; floating point value
Interceptor.EliteGuardRange= ; floating point value
Interceptor.MinimumGuardRange=0.0 ; floating point value
Interceptor.VeteranMinimumGuardRange= ; floating point value
Interceptor.EliteMinimumGuardRange= ; floating point value
Interceptor.DeleteOnIntercept=false ; boolean
Interceptor.WeaponOverride= ; WeaponType
Interceptor.WeaponReplaceProjectile=false ; boolean
Interceptor.WeaponCumulativeDamage=false ; boolean
Interceptor.KeepIntact=false ; boolean
[SOMEPROJECTILE] ; Projectile
Interceptable=false ; boolean
Interceptable.DeleteOnIntercept=false ; boolean
Interceptable.WeaponOverride= ; WeaponType
Strength=0 ; integer
Armor= ; ArmorType
备注
目前如果拦截武器的开火者提前死亡那么没有 Inviso=true 的拦截抛射体将无法拦截目标抛射体,这在未来可能会进行更改。
抛射体弹道
抛射体现在可以有自定义的弹道。
Trajectory不应与原游戏的抛射体逻辑(Arcing、ROT、Vertical或Inviso)结合使用。尝试你这样做将导致其他逻辑被禁用并在日志文件中写入一条警告。抛射体的速度由
Trajectory.Speed定义,与ROT> 0 抛射体不同的是Trajectory.Speed定义在抛射体上而不是武器上。
在 rulesmd.ini:
[SOMEPROJECTILE] ; Projectile
Trajectory.Speed=100.0 ; floating point value
直线弹道
@brsajo#9745 在其个人 mod 中使用直线弹道制作的爆能枪
不言自明,这是一种直线射击弹道。
Trajectory.Straight.DetonationDistance控制抛射体强制引爆位置相对于目标单元格的距离阈值(每个游戏帧开始时、抛射体移动前检查)。设为 0 以禁用强制引爆(注意这可能导致抛射体飞掠目标)。如果Trajectory.Straight.ApplyRangeModifiers设为 true 则发射者的任何适用于武器射程的修正也将在此处被使用。Trajectory.Straight.TargetSnapDistance控制抛射体在引爆时与目标的最大距离以使抛射体在引爆时 “瞬移” 到目标。设为 0 将禁用瞬移。Trajectory.Straight.PassThrough启用特殊的逻辑:抛射体在接触目标时不会引爆而是继续飞行到由Trajectory.Straight.DetonationDistance定义的距离。注意抛射体发射角度会受此影响,如果与目标处于同一高度那么直接向前发射。
在 rulesmd.ini:
[SOMEPROJECTILE] ; Projectile
Trajectory=Straight ; Trajectory type
Trajectory.Straight.DetonationDistance=0.4 ; floating point value
Trajectory.Straight.ApplyRangeModifiers=false ; boolean
Trajectory.Straight.TargetSnapDistance=0.5 ; floating point value
Trajectory.Straight.PassThrough=false ; boolean
轰击弹道
类似于
Straight但瞄准目标上方的某个坐标(高度由Trajectory.Bombard.Height决定)。当抛射体接近该坐标后它将自由落体并在击中目标或地面时引爆。
在 rulesmd.ini:
[SOMEPROJECTILE] ; Projectile
Trajectory=Bombard ; Trajectory type
Trajectory.Bombard.Height=0.0 ; double
使抛射体被陆地或水域阻挡
现在可以通过将
SubjectTo(Land/Water)分别设为 true 以使抛射体将陆地或水域视为阻挡其路径的障碍物。发射此类抛射体的武器将把这些障碍物阻挡的目标视为超出射程并尝试重新移动自己的位置以便在不受这些障碍阻挡的情况下开火。如果SubjectTo(Land/Water).Detonate设置为 true,那么抛射体设法与上述障碍交叠时将会爆炸。默认情况下
Level=true的抛射体在非水域的地块上爆炸,但不会将这些地块视为真正的障碍物。通过设置这些标签可以覆盖此行为。
在 rulesmd.ini:
[SOMEPROJECTILE] ; Projectile
SubjectToLand= ; boolean
SubjectToLand.Detonate=true ; boolean
SubjectToWater= ; boolean
SubjectToWater.Detonate=true ; boolean
归返武器
现在可以通过设置
ReturnWeapon使一个已爆炸的抛射体(以类似于AirburstWeapon或ShrapnelWeapon的方式)发射另一个武器和抛射体返回到发射者。如果发射者在初始抛射体引爆前死亡则ReturnWeapon不会发射。
在 rulesmd.ini:
[SOMEPROJECTILE] ; Projectile
ReturnWeapon= ; WeaponType
超级武器
AI 超级武器发射延迟
默认情况下 AI 所属方只检查它能否发射任何超级武器并在 106 到 112 个游戏帧的随机间隔内发射该超武。这一行为现在可以自定义设置为明确的间隔时间或予以禁用。0 及更小的值会禁用间隔并导致 AI 所属方每帧检查超级武器。
在 rulesmd.ini:
[General]
AISuperWeaponDelay= ; integer, game frames
单位转换超武
现在弹头可以将受影响单位的科技类型更改为同大类的其他科技类型(步兵到步兵,车辆到车辆,战机到战机)。
ConvertN.From(此处 N 为 0, 1, 2…)指定哪些科技类型可用于转换。此条目可以列出许多类型以一次全部转换。当没有包含任何类型时将影响所有有效目标。ConvertN.To指定转换后的科技类型。ConvertN.AffectedHouses指定哪些所属方的单位可以被转换。若只指定一组转换则
Convert.From、Convert.To和Convert.AffectedHouses(不带序号)相当于Convert0.From、Convert0.To和Convert0.AffectedHouses的别称。转换影响被指定的 所有 当前存在的科技类型,包括处于运输工具中的、驻扎在建筑内的、处于
InfantryAbsorb=yes或UnitAbsorb=yes的建筑中的、正在Bunker=yes建筑里的。
例如,这个超级武器可以将所有被影响的己方和友方 SOLDIERA 和 SOLDIERB 转换为 NEWSOLDIER:
[ExampleSW]
Convert.From=SOLDIERA,SOLDIERB
Convert.To=NEWSOLDIER
Convert.AffectedHouses=team
在 rulesmd.ini:
[SOMESW] ; SuperWeaponType
ConvertN.From= ; List of TechnoTypes
ConvertN.To= ; TechnoType
ConvertN.AffectedHouses=owner ; List of Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
; where N = 0, 1, 2, ...
; or
Convert.From= ; List of TechnoTypes
Convert.To= ; TechnoType
Convert.AffectedHouses=owner ; List of Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
警告
此功能与 Ares 的单位转换 存在同样的限制。此功能不支持建筑类型。
警告
此功能需要 3.0 及以上版本的 Ares!如果未检测到 Ares 3.0+,单位的某些属性可能不会被更新。
自定义超级武器所在栏
现在你可以通过
TabIndex将超级武器的图标分配到侧边栏的任意标签页下。有效值为:0(建筑栏)、1(防御栏)、2(步兵栏)、3(载具栏)。
在 rulesmd.ini:
[SOMESW] ; SuperWeaponType
TabIndex=1 ; integer
EMPulse 设置
可以通过设置
EMPulse.WeaponIndex来自定义具有EMPulseCannon=true的建筑在发射其所关联的Type=EMPulse类超级武器时(仅当EMPulse.TargetSelf=false或省略时)所使用的武器。注意如果在同一个建筑发射第一种武器前发射另一种具有不同武器索引的
Type=EMPulse超级武器那么较晚者的设置将优先生效。此外由于技术限制目前除非手动列出了
SW.RangeMinimum/SW.RangeMaximum否则始终默认使用主武器的Range/MinimumRange执行瞄准限制。
现在如果发射的超级武器拥有
EMPulse.SuspendOthers=true那么在第一个建筑发射之前,所有其他可以由同一建筑发射的Type=EMPulse超级武器将被暂停直到第一个建筑发射完毕。
在 rulesmd.ini:
[SOMESW] ; SuperWeaponType
EMPulse.WeaponIndex=0 ; integer, weapon slot index
EMPulse.SuspendOthers=false ; boolean
备注
Type=EMPulse 超级武器及其任何关联标签是 Ares 功能。
虚拟投放
现在超级武器可以在地图外投放与在场上时表现一致的建筑。
LimboDelivery.Types是超级武器发射时将创建的建筑类型列表。与超级武器的Type和坐标无关。LimboDelivery.IDs是分配给建筑的数字 ID列表。这是虚拟击杀功能所必需的。
创建的建筑不受地图上任何威胁的影响。从游戏中移除它们的唯一方法是使用设置了
LimboKill.IDs的超级武器。LimboKill.Affected设置那个所属方受此效果影响。LimboKill.IDs是建筑 ID列表,这些建筑将被立即从游戏中移除。
使用这些标签可以使投放变得随机。游戏将根据每个提供的 “掷骰子” 概率随机选择列表中的一个建筑。
LimboDelivery.RollChances是 “掷骰子” 发生的概率列表。有效值的范围为 0%(从不发生)到 100%(总是发生)。默认为单次必出。LimboDelivery.RandomWeightsN是每个 “掷骰子” 发生概率的权重列表。有效值为 0(从不发生)到 100%(总是发生)。RandomWeights是RandomWeights0的有效别名。如果掷骰尝试没有指定权重,则使用最后一个权重。
备注
此功能可能不支持所有建筑标签。以下列出了已确认可正常工作的标签:
FactoryPlant
OrePurifier
SpySat
KeepAlive (Ares 3.0)
Prerequisite、PrerequisiteOverride、Prerequisite.List# (Ares 0.1)、Prerequisite.Negative (Ares 0.1)、GenericPrerequisites (Ares 0.1)
SuperWeapon、SuperWeapon2、SuperWeapons (Ares 0.9)、SW.AuxBuildings (Ares 0.9)、SW.NegBuildings (Ares 0.9)
为使此功能与 AITriggerTypes 条件(“拥有者拥有?” 和 “敌人拥有?”)一起工作,
LegalTarget必须设置为 true。
在 rulesmd.ini:
[SOMESW] ; SuperWeaponType
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.Affected=self ; Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
LimboKill.IDs= ; List of numeric IDs.
警告
谨记虚拟投放的建筑并不真实存在于地图上!这意味着它们不应启用需要与游戏战场内交互的机制(例如工厂、克隆、维修厂、停机坪)。它们还 应该设为 KeepAlive=no 或者可以被虚拟击杀 - 否则游戏永远不会结束。
Next
虚幻 中通过 SW.Next 将多个 ChronoSphere 与 ChronoWarp 类型的超武组成链式超武系统
现在超级武器可以向同一目标地点发射其他超级武器。发射的类型可以使用与虚拟投放相同的规则进行随机化(见上文)。
SW.Next.RealLaunch控制发射初始超级武器的所有者是否必须拥有所列出的超级武器和足够Money.Amout的资金来支持。否则强制发射。SW.Next.IgnoreInhibitors设置是否忽略每个超级武器的SW.Inhibitors/SW.AnyInhibitor,否则只有未被抑制的超级武器会被发射。SW.Next.IgnoreDesignators设置是否忽略每个超级武器的SW.Designators/SW.AnyDesignator。
在 rulesmd.ini:
[SOMESW] ; SuperWeaponType
SW.Next= ; List of SuperWeaponTypes
SW.Next.RealLaunch=true ; boolean
SW.Next.IgnoreInhibitors=false ; boolean
SW.Next.IgnoreDesignators=true ; boolean
SW.Next.RollChances= ; List of percentages.
SW.Next.RandomWeightsN= ; List of integers.
在目标单元格处引爆弹头或武器
现在任何超级武器都可以在超级武器的目标单元格处引爆弹头或武器。
如果同时拥有
Detonate.Warhead和Detonate.Weapon,那么后者优先。Detonate.Warhead.Full可用于设置弹头是否在目标上完全引爆(作为虚拟武器的一部分)或者只能对所在区域造成杀伤并应用 Phobos 的弹头效果Detonate.Damage如果未设置则默认为Detonate.Weapon的Damage,对于Detonate.Warhead则是 0。武器和弹头的行为就像由发射超级武器的建筑所发射的一样。这尊重诸如
SW.RangeMinimum/Maximum之类的控制语句(在这方面类似于 Ares 的 GenericWarhead 超级武器)。即便找不到发射建筑也仍会使用超级武器所属于的所属方来造成伤害并应用 Phobos 引入的弹头效果。如果
Detonate.AtFirer设置为 true,那么武器或弹头将在发射建筑上而不是超级武器的目标单元格处引爆。如果找不到发射建筑则不会引爆。
在 rulesmd.ini:
[SOMESW] ; SuperWeaponType
Detonate.Warhead= ; WarheadType
Detonate.Warhead.Full=true ; boolean
Detonate.Weapon= ; WeaponType
Detonate.Damage= ; integer
Detonate.AtFirer=false ; boolean
科技类型
子机发射器自定义
幻想奇遇 中的有限追击范围子机
如果设置
Spawner.LimitRange则子机将在敌人超出子机发射器武器Range最大值范围后停止追击。Spawner.ExtraLimitRange是基于武器射程对追击范围的额外调整量。
Spawner.DelayFrames可用于设置每次从子机发射器中生成单位的最小游戏帧数。对于导弹默认是 9 帧,其他默认是 20 帧。如果
Spawner.AttackImmediately设为 true,战机子机将在生成后立即执行攻击任务而不是先等待其余战机生成和集结。
在 rulesmd.ini:
[SOMETECHNO] ; TechnoType
Spawner.LimitRange=false ; boolean
Spawner.ExtraLimitRange=0 ; integer, range in cells
Spawner.DelayFrames= ; integer, game frames
Spawner.AttackImmediately=false ; boolean
自动删除乘客
运输工具可以随时间删除乘客。乘客将按照进入运输工具顺序的先后被删除。
PassengerDeletion.Rate决定删除单个乘客所需的游戏帧数。如果
PassengerDeletion.Rate.SizeMultiply设为 true 则此时间间隔将乘算乘客的Size。
如果
PassengerDeletion.UseCostAsRate设为 true 则删除乘客的间隔将基于乘客的Cost计算。这不考虑FactoryPlant等修正。PassengerDeletion.CostMultiplier可用于设置基于成本的时间间隔倍率。PassengerDeletion.CostRateCap可用于设置基于成本计算的时间间隔上限。
PassengerDeletion.AllowedHouses决定了哪些所属方的乘客会被删除。如果
PassengerDeletion.DontScore设为 true 则删除的乘客不会被视为被运输工具击杀(没有经验,不会计入所属方击杀数等)。如果
PassengerDeletion.Soylent设为 true 则会向运输工具的所有者返还一定数量的资金。具体金额由乘客的Soylent决定,若为设置则由Cost决定(这里可受到FactoryPlant等修正的影响)。PassengerDeletion.SoylentMultiplier是直接应用于返还资金的倍率。PassengerDeletion.SoylentAllowedHouses决定了哪些所属方的乘客会造成资金返还。PassengerDeletion.DisplaySoylent可设为 true 以在运输工具上显示返还的资金金额。PassengerDeletion.DisplaySoylentToHouses决定了哪些所属方可以看到此消息,PassengerDeletion.DisplaySoylentOffset可用于调整显示坐标偏移。
PassengerDeletion.ReportSound和PassengerDeletion.Anim可用于分别指定在删除乘客时播放的声音和动画。如果
PassengerDeletion.UnderEMP设为 true 则在运输工具受 EMP 影响或瘫痪时继续执行删除操作。
在 rulesmd.ini:
[SOMETECHNO] ; TechnoType
PassengerDeletion.Rate=0 ; integer, game frames
PassengerDeletion.Rate.SizeMultiply=true ; boolean
PassengerDeletion.UseCostAsRate=false ; boolean
PassengerDeletion.CostMultiplier=1.0 ; floating point value, percents or absolute
PassengerDeletion.CostRateCap= ; integer, game frames
PassengerDeletion.AllowedHouses=all ; Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
PassengerDeletion.DontScore=false ; boolean
PassengerDeletion.Soylent=false ; boolean
PassengerDeletion.SoylentMultiplier=1.0 ; float, percents or absolute
PassengerDeletion.SoylentAllowedHouses=enemies ; Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
PassengerDeletion.DisplaySoylent=false ; boolean
PassengerDeletion.DisplaySoylentToHouses=All ; Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
PassengerDeletion.DisplaySoylentOffset=0,0 ; X,Y, pixels relative to default
PassengerDeletion.ReportSound= ; Sound entry
PassengerDeletion.Anim= ; AnimationType
PassengerDeletion.UnderEMP=false ; boolean
自动同步载员所属方
如果运输工具的
Passengers.SyncOwner设为 true 则当运输工具的所有者发生改变那么其载员的所有者也将会更改以与运输工具同步。对于
OpenTopped=true的运输工具这还将禁用在运输工具暂时被心灵控制时阻止载员对目标进行攻击的检查。如果
Passengers.SyncOwner.RevertOnExit设为 true(默认行为),当载员被弹出时,其所属方将恢复为载员进入时所属方。不适用于通过
Abductor=true武器(Ares 功能)获取的载员。
在 rulesmd.ini:
[SOMETECHNO] ; TechnoType
Passengers.SyncOwner=false ; boolean
Passengers.SyncOwner.RevertOnExit=true ; boolean
自动发射武器
现在你可以设置
AutoFire使科技类型根据AutoFire.TargetSelf选择当前单元格或开火者自身自动发射其武器而无需检索一个合适的目标。
在 rulesmd.ini:
[SOMETECHNO] ; TechnoType
AutoFire=false ; boolean
AutoFire.TargetSelf=false ; boolean
建造限制组
现在你可以使不同的科技类型在一个组内共享建造限制。
BuildLimitGroup.Types决定了将用于所选科技类型建造条件的其他科技类型。注意该语句并不提供任何限制效果。要实现这点你需要手动位每个科技类型设置建造限制。BuildLimitGroup.Nums决定了将达到建造限制的数量。如果使用单个整数,则使用组内所有科技类型的数量来计算建造限制。如果使用与BuildLimitGroup.Types数量相同的整数列表,则会为每个科技类型计算建造限制,其值的位置与BuildLimitGroup.Types中的位置对应。BuildLimitGroup.Factor决定了每个此类科技类型在计算建造限制时将被视为多少来进行计算(类似一个用于BuildLimit的Size)。这仅由 BuildLimitGroup 使用。其他地方不会使用它来计算,包括
BuildLimitGroup.ExtraLimit。
BuildLimitGroup.ContentIfAnyMatch决定其建造限制的计算规则。如果设置为 true,则当组内任意科技类型的数量达到其BuildLimitGroup.Nums值时视为全组达到建造限制。如果设置为 false,则只有当组内所有科技类型的数量达到时建造限制才有效。BuildLimitGroup.NotBuildableIfQueueMatch决定了禁用科技类型生产的时刻,如果设为 true 则已存在的科技类型与处于生产序列中的科技类型只和满足条件就会停止生产。如果设为 false 则只有地图上实际存在的科技类型满足条件才会停止生产。你还可以根据其所属方拥有的特定科技类型数量向
BuildLimitGroup.Nums添加一个额外调整值。BuildLimitGroup.ExtraLimit.Types决定了将用于额外值计算的科技类型。BuildLimitGroup.ExtraLimit.Nums决定了其额外值的增量。与BuildLimitGroup.ExtraLimit.Types中对应位置的科技类型一一对应。每个列表中的科技类型会使建造限制增加其场上存在的数量 * 该列表中对应值。BuildLimitGroup.ExtraLimit.MaxCount决定了会被用于计算额外值的科技类型会被计入的最大数量。与BuildLimitGroup.ExtraLimit.Types中对应位置的科技类型一一对应。如果未设置或设为小于 1 的值,则视为无最大数量限制。BuildLimitGroup.ExtraLimit.MaxNum决定了在计算额外值后BuildLimitGroup.Nums的最大值。如果未设置或设为小于 1 的值,则视为无最大值。
在 rulesmd.ini:
[SOMETECHNO] ; TechnoType
BuildLimitGroup.Types= ; List of TechnoTypes
BuildLimitGroup.Nums= ; integer, or a list of integers
BuildLimitGroup.Factor=1 ; integer
BuildLimitGroup.ContentIfAnyMatch=false ; boolean
BuildLimitGroup.NotBuildableIfQueueMatch=false ; boolean
BuildLimitGroup.ExtraLimit.Types= ; List of TechnoTypes
BuildLimitGroup.ExtraLimit.Nums= ; List of integers
BuildLimitGroup.ExtraLimit.MaxCount= ; List of integers
BuildLimitGroup.ExtraLimit.MaxNum=0 ; integer
根据操作者变形
现在你可以在操作者从人类改为 AI 玩家或从 AI 玩家改为人类玩家时执行单位转换。
在 rulesmd.ini:
[SOMETECHNO] ; TechnoType
Convert.HumanToComputer= ; TechnoType
Convert.ComputerToHuman= ; TechnoType
染色
通过设置
Tint.Color和Tint Intensity可以为拥有护盾的科技类型使用类似于铁幕/力场护盾或Psychedelic=true弹头的染色效果。Tint.Intensity是增加/减少的光照,1.0 是默认的对象光照。Tint.VisibleToHouses可用于自定义哪些所属方可见这些染色效果。染色效果也可以通过 Attach Effect 和护盾应用。
在 rulesmd.ini:
[SOMETECHNO] ; TechnoType
Tint.Color= ; integer - R,G,B
Tint.Intensity=0.0 ; floating point value
Tint.VisibleToHouses=all ; List of Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
自定义 OpenTopped 属性
现在你可以为每个科技类型微观设定全局
OpenTopped运输工具的属性。OpenTopped.IgnoreRangefinding可用于禁用OpenTopped运输工具在接近超出射程的目标和扫描潜在目标时使用运输工具与所有载员之间的Range最小武器的射程这一测距行为。OpenTopped.AllowFiringIfDeactivated可用于自定义当运输工具被瘫痪(EMP、PoweredUnit等)时载员是否可以开火。OpenTopped.ShareTransportTarget控制运输工具的当前目标是否传递给乘客。
[SOMETECHNO] ; TechnoType
OpenTopped.RangeBonus= ; integer, override of the global default
OpenTopped.DamageMultiplier= ; floating point value, override of the global default
OpenTopped.WarpDistance= ; integer, override of the global default
OpenTopped.IgnoreRangefinding=false ; boolean
OpenTopped.AllowFiringIfDeactivated=true ; boolean
OpenTopped.ShareTransportTarget=true ; boolean
单位出售音效
当建筑或单位被出售时将向所有者播放出售音效和 EVA 语音。这些设置以允许微观定义。
EVA.Sold用于自定义出售时的 EVA 语音。SellSound用于自定义出售时的音效。
在 rulesmd.ini:
[SOMETECHNO] ; BuildingType or VehicleType
EVA.Sold= ; EVA entry, default to EVA_StructureSold for buildings and EVA_UnitSold for vehicles
SellSound= ; Sound entry, default to [AudioVisual] -> SellSound
备注
原版游戏中出售载具的 SellSound 是全局的。这已改为与建筑出售的 SellSound 保持一致。
禁用副武器自动推算
现在如果
(Elite)Primary武器无法对选定目标开火那么可以通过将NoSecondaryWeaponFallback设为 true(默认为 false)来禁用其尝试换用(Elite)Secondary武器。NoSecondaryWeaponFallback.AllowAA控制对抛射体拥有AA且应对空中目标的情况。这不适用于总是选择(Elite)Secondary武器的特殊情况,包括但不限于以下几种:OpenTransportWeapon=1的单位在一个OpenTopped=true的运输工具内开火。NoAmmoWeapon=1的单位在Ammo大于 0 且当前弹药数量小于等于NoAmmoAmount。拥有
DeployFireWeapon=1的IsSimpleDeployer=true单位处于部署状态。DrainWeapon=true的武器应对敌方Drainable=yes的建筑。单位使用一个
Warhead拥有IsLocomotor=true设置的(Elite)Primary应对建筑。对所有者或盟友的
Overpowerable=true建筑使用Warhead拥有ElectricAssault=true设置的武器。Overpowerable=true的建筑当前处于过载状态。任何使用
(Elite)WeaponX的系统也完全不受影响,例如Gunner=true或IsGattling=true。
现在如果
[CombatDamage] -> AllowWeaponSelectAgainstWalls设置为 true,假设Primary武器的弹头拥有Wall=false,而Secondary武器拥有Wall=true且开火者没有将NoSecondaryWeaponFallback设为 true 那么Secondary将在应对墙时被使用。
在 rulesmd.ini:
[CombatDamage]
AllowWeaponSelectAgainstWalls=false ; boolean
[SOMETECHNO] ; TechnoType
NoSecondaryWeaponFallback=false ; boolean
NoSecondaryWeaponFallback.AllowAA=false ; boolean
伪装逻辑增强
DisguiseBlinkingVisibility可用于自定义哪些玩家可以看到单位的伪装闪烁。这不影响目标选择,但会影响军衔的可见性——闪烁的伪装意味着始终可见原单位的军衔而不是伪装单位的。另一个需要注意的是在单人任务中,就伪装闪烁而言,任何玩家所控制的所属方所拥有的伪装单位即使与玩家所属方不是盟友视为当前玩家所有,这意味着玩家始终可以看到它们的伪装闪烁,除非
DisguiseBlinkingVisibility设置为none或enemies。
UseDisguiseMovementSpeed如果设置则在可行的情况下伪装单位将调整其移动速度以匹配伪装目标的速度。注意即使伪装被识破只要未被解除此设置就依旧生效。
在 rulesmd.ini:
[General]
DisguiseBlinkingVisibility=owner ; List of Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
[SOMETECHNO] ; TechnoType
UseDisguiseMovementSpeed=false ; boolean
Burst 开火坐标
现在你可以通过使用
(Elite)(Prone/Deployed)PrimaryFire|SecondaryFire|WeaponX|FLH.BurstN标签为拥有Burst的武器指定每个连发单独的开火坐标,具体取决于你的科技类型使用哪些武器。BurstN中的 N 是从 0 开始的连发索引,这些值将按顺序解析,直到没有常规或精英武器的值为止,如果精英武器缺少值则默认使用常规武器的 FLH。如果特定连发索引缺少值,则使用基础标签(例如PrimaryFireFLH)的值。特定连发索引使用的是不会根据连发索引而将 L 值镜像的绝对坐标。
在 artmd.ini:
[SOMETECHNO] ; TechnoType Image
FLHKEY.BurstN= ; integer - Forward,Lateral,Height. FLHKey refers to weapon-specific FLH key name and N is zero-based burst shot index.
对特定目标使用特定武器
C&C: Reloaded 中使用 ForceWeapon.Naval.Decloaked 的海军对水下目标行为
可用于覆盖正常的武器选择逻辑,以强制对特定目标使用特定武器。目标满足条件则按所列出规则的顺序使用第一个满足条件的规则。
ForceWeapon.Naval.Decloaked强制指定对未隐形(下潜)状态海军目标使用的武器。如果你的海军单位有一个武器仅用于水下目标另一个武器用于水面目标那么这个规则会很有用。ForceWeapon.Cloaked强制对隐形(下潜)状态目标使用的武器。ForceWeapon.Disguised强制针对伪装目标所使用的武器。
在 rulesmd.ini:
[SOMETECHNO] ; TechnoType
ForceWeapon.Naval.Decloaked=-1 ; integer. 0 for primary weapon, 1 for secondary weapon, -1 to disable
ForceWeapon.Cloaked=-1 ; integer. 0 for primary weapon, 1 for secondary weapon, -1 to disable
ForceWeapon.Disguised=-1 ; integer. 0 for primary weapon, 1 for secondary weapon, -1 to disable
科技类型与克隆步兵的初始血量
C&C: Reloaded 中克隆步兵的初始血量示例
InitialStrength可用于设置科技类型的初始血量。InitialStrength.Cloning可以用于指定克隆步兵由Cloning=true建筑创建时的初始血量百分比(单个值或从其中随机选取的一对值)。
在 rulesmd.ini:
[SOMETECHNO] ; TechnoType
InitialStrength= ; integer
[SOMEBUILDING] ; BuildingType
InitialStrength.Cloning= ; floating point value - single or comma-sep. range (percentages)
备注
InitialStrength 和 InitialStrength.Cloning 都不会超过单位的 Strength,即使你设置了一个比它更大的值。
自毁
如果满足以下 任何 条件对象将会自毁:
OnAmmoDepletion:如果剩余弹药达到 0 则对象死亡。AfterDelay:如果倒计时(以帧为单位)达到 0 则对象死亡。TechnosExist/TechnosDontExist:如果科技类型分别存在或不存在则对象死亡。Technos(Dont)Exist.Any控制需要列出的单个科技类型还是所有科技类型来满足条件。Technos(Dont)Exist.AllowLimboed控制是否计入虚拟的科技类型(例如在运输工具中的那些)。Technos(Dont)Exist.Houses控制检查哪些所属方。
自毁行为有以下选择:
kill:对象将正常摧毁。vanish:对象将被直接从游戏中静默移除而不是真正击杀。sell:如果对象是拥有建造动画的 建筑,它将被出售而不是被摧毁。
如果未设置此项那么自毁逻辑将不会启用。如果选择 vanish 行为,那么可以使用 AutoDeath.VanishAnimation 设置自毁时播放的动画。
备注
请注意 如果你没有使用 Ares 3.0+ 那么对于携带载员的单位即使使用 kill 行为载员也不会被释放。
此逻辑还支持通过 虚拟投放 提供的建筑。不过这种情况下所有 AutoDeath.Behavior 值都将只是使建筑简单地移除。
在 rulesmd.ini:
[SOMETECHNO] ; TechnoType
AutoDeath.Behavior= ; enumeration (kill | vanish | sell), default not set
AutoDeath.VanishAnimation= ; AnimationType
AutoDeath.OnAmmoDepletion=no ; boolean
AutoDeath.AfterDelay=0 ; positive integer
AutoDeath.TechnosDontExist= ; List of TechnoTypes
AutoDeath.TechnosDontExist.Any=false ; boolean
AutoDeath.TechnosDontExist.AllowLimboed=false ; boolean
AutoDeath.TechnosDontExist.Houses=owner ; Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
AutoDeath.TechnosExist= ; List of TechnoTypes
AutoDeath.TechnosExist.Any=true ; boolean
AutoDeath.TechnosExist.AllowLimboed=false ; boolean
AutoDeath.TechnosExist.Houses=owner ; Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
心灵控制增强
幻想奇遇 中的心灵控制范围限制
幻想奇遇 中的多重心控单位自动释放第一个受害者
心灵控制者现在可以设置控制距离的上限。标签值大于 0 将激活此功能。
多重心控单位现在可以达到控制上限而又要控制一个新目标时释放第一个被控制的单位。
在 rulesmd.ini:
[SOMETECHNO] ; TechnoType
MindControlRangeLimit=-1.0 ; floating point value
MultiMindControl.ReleaseVictim=false ; boolean
禁止手动移动
现在你可以指定一个科技类型是否无法接收移动指令。
在 rulesmd.ini:
[SOMETECHNO] ; TechnoType
NoManualMove=false ; boolean
子机升级
幻想奇遇 中的子机同步升级
生成的单位可以根据其所有者的等级进行同步升级。
在 rulesmd.ini:
[SOMETECHNO] ; TechnoType
Promote.IncludeSpawns=false ; boolean
升级动画
现在你可以在单位或建筑升级时播放指定动画。
Promote.VeteranAnimation用于单位或建筑升级为老兵时。Promote.EliteAnimation用于单位或建筑升级为精英时。如果未定义
Promote.EliteAnimation则使用Promote.VeteranAnimation。
在 rulesmd.ini:
[AudioVisual]
Promote.VeteranAnimation= ; AnimationType
Promote.EliteAnimation= ; AnimationType
复仇武器
RA2: Reboot 中的复仇武器
类似于
DeathWeapon,它在科技类型被击杀后发射,但不同的是它将发射给造成伤害并杀死科技类型的人。如果科技类型不是由于其他科技类型造成的直接伤害而死亡,那么RevengeWeapon将不会被发射。RevengeWeapon.AffectsHouses可用于筛选可以对哪些所属方的击杀者发射武器。也可以通过 Attach Effect 来授予复仇武器。
如果武器
SuppressRevengeWeapons设为 true 则不会触发复仇武器。SuppressRevengeWeapons.Types可用于列出受影响的武器类型,如果没有列出,则所有武器类型都受影响。
在 rulesmd.ini:
[SOMETECHNO] ; TechnoType
RevengeWeapon= ; WeaponType
RevengeWeapon.AffectsHouses=all ; List of Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
[SOMEWARHEAD] ; WarheadType
SuppressRevengeWeapons=false ; boolean
SuppressRevengeWeapons.Types= ; List of WeaponTypes
单位创建时音效
当一个单位被创建时将为单位所有者播放
VoiceCreated指定的音效。如果
IsVoiceCreatedGlobal设为 true 则将全局播放VoiceCreated而不是EVA_UnitReady。
在 rulesmd.ini:
[AudioVisual]
IsVoiceCreatedGlobal=false ; boolean
[SOMETECHNO] ; TechnoType
VoiceCreated= ; Sound entry
武器在传送时开火
现在可以在科技类型传送来/去时发射武器。它们会与相应的 (
WarpIn/WarpOut) 动画一起显示。WarpInMinRangeWeapon将在传送距离(以 leptons 为单位)小于ChronoRangeMinimum时使用,无论是否设置了ChronoTrigger。如果未设置WarpInMinRangeWeapon,则默认为WarpInWeapon。如果设置了
WarpInWeapon.UseDistanceAsDamage则WarpIn(MinRange)Weapon的Damage将被覆盖为传送所跨越的完整单元格数。
在 rulesmd.ini:
[SOMETECHNO] ; TechnoType
WarpInWeapon= ; WeaponType
WarpInMinRangeWeapon= ; WeaponType
WarpInWeapon.UseDistanceAsDamage=false ; boolean
WarpOutWeapon= ; WeaponType
变形后重置心控效果
单位变形完毕后其心控效果可被重置。
如果变形后的单位所有弹头都没有
MindControl=yes,那么Convert.ResetMindControl=yes将释放所有被心控的单位。如果变形后的单位任意弹头拥有
MindControl=yes,那么Convert.ResetMindControl=yes将重置最大控制数量上限。如果变形后的单位所有武器都没有
InfiniteMindControl=yes,那么Convert.ResetMindControl=yes将释放超出上限的被心控单位。
在 rulesmd.ini:
[SOMETECHNO] ; TechnoType
Convert.ResetMindControl= ; boolean, default to false
地形对象
摧毁动画与音效
现在你可以指定当地形对象被摧毁时播放播放的摧毁动画与音效。
在 rulesmd.ini:
[SOMETERRAINTYPE] ; TerrainType
DestroyAnim= ; AnimationType
DestroySound= ; Sound entry
弹头
提示
所有新增的弹头效果
可在适用的情况下与
CellSpread和 Ares 的通用弹头超级武器一起使用。不能与 Ares 的
MindControl.Permanent=yes共同使用。在适用的情况下除非
EffectsRequireVerses设为 false 否则尊重Verses。如果目标拥有一个激活的护盾,那么它的护甲类型将被使用,除非弹头可以穿透护盾。
解除心控
RA2: Reboot 中的心控解除弹头
弹头现在可以解除心灵控制(不适用于永久心控的对象)。
在 rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
RemoveMindControl=false ; boolean
暴击
现在弹头可以基于概率额外造成暴击伤害或弹头爆炸,可以自定义暴击的概率、伤害、影响目标、受影响目标生命值阈值和暴击动画。
Crit.Chance决定暴击发生的概率。默认情况下这在弹头爆炸时检查一次,每个受影响的目标都可能受到暴击。如果设置了Crit.ApplyChancePerTarget,那么每个目标是否成功进行暴击的概率将单独计算。Crit.ExtraDamage决定暴击造成的额外伤害,如果设置了Crit.Warhead,那么伤害将用于在每个受影响的目标上引爆指定的弹头,否则伤害将基于当前弹头的Verses设置直接造成伤害。Crit.Warhead可用于设置一个替代当前弹头引爆的弹头。Crit.Warhead.FullDetonation控制弹头是否在目标上完全引爆(作为虚拟武器的一部分)或者只能对所在区域造成杀伤并应用 Phobos 的弹头效果。Crit.Affects可用于自定义此弹头可暴击的目标类型。暴击不能影响空置单元格或仅包含地形对象和覆盖物等的单元格。Crit.AffectsHouses可用于自定义此弹头可暴击的目标所属。Crit.AffectBelowPercent可用于设置暴击允许的目标其剩余血量相对最大Strength的百分比下限。Crit.AnimList可用于设置一个当弹头对至少一个目标造成暴击时替代弹头AnimList使用的动画列表。如果设置了Crit.AnimList.PickRandom(默认为AnimList.PickRandom),则从列表中随机选择一个动画。如果设置了Crit.AnimList.CreateAll(默认为AnimList.CreateAll),则创建列表中的所有动画。Crit.AnimOnAffectedTargets如果设置则使Crit.AnimList中的动画在每个受影响的目标上播放,此外 还会正常播放弹头AnimList而不是覆盖之。注意因为这些动画与AnimList独立所以,Crit.AnimList.PickRandom和Crit.AnimList.CreateAll将不会默认为AnimList对应项的值,需要手动设置。
Crit.ActiveChanceAnims可用于设置当前弹头有几率造成暴击时始终显示在弹头爆炸坐标处的动画。列出多个动画则随机选择其一。Crit.SuppressWhenIntercepted如果设置则禁用弹头在被抛射体拦截而引爆时造成暴击。ImmuneToCrit可以设置在科技类型和护盾类型上以使它们免疫暴击。
在 rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
Crit.Chance=0.0 ; floating point value, percents or absolute (0.0-1.0)
Crit.ApplyChancePerTarget=false ; boolean
Crit.ExtraDamage=0 ; integer
Crit.Warhead= ; WarheadType
Crit.Warhead.FullDetonation=true ; boolean
Crit.Affects=all ; List of Affected Target Enumeration (none|land|water|infantry|units|buildings|all)
Crit.AffectsHouses=all ; List of Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
Crit.AffectBelowPercent=1.0 ; floating point value, percents or absolute (0.0-1.0)
Crit.AnimList= ; List of AnimationTypes
Crit.AnimList.PickRandom= ; boolean
Crit.AnimList.CreateAll= ; boolean
Crit.ActiveChanceAnims= ; List of AnimationTypes
Crit.AnimOnAffectedTargets=false ; boolean
Crit.SuppressWhenIntercepted=false ; boolean
[SOMETECHNO] ; TechnoType
ImmuneToCrit=false ; boolean
警告
如果你将 Crit.Warhead 设为定义暴击的弹头或者创建一个最终回到第一个弹头的循环那么游戏可能会陷入循环并随后卡死或崩溃。
单位转换弹头
NanodaSupercalifragilisticexpialidocious 中的载具版基因突变
现在弹头可以将受影响单位的科技类型更改为同大类的其他科技类型(步兵到步兵,车辆到车辆,战机到战机)。
ConvertN.From(此处 N 为 0, 1, 2…)指定哪些科技类型可用于转换。此条目可以列出许多类型以一次全部转换。当没有包含任何类型时将影响所有有效目标。ConvertN.To指定转换后的科技类型。ConvertN.AffectedHouses指定哪些所属方的单位可以被转换。若只指定一组转换则
Convert.From、Convert.To和Convert.AffectedHouses(不带序号)相当于Convert0.From、Convert0.To和Convert0.AffectedHouses的别称。
例如这个弹头可以将所有被影响的己方和友方 SOLDIERA 和 SOLDIERB 转换为 NEWSOLDIER:
[ExampleWH]
Convert.From=SOLDIERA,SOLDIERB
Convert.To=NEWSOLDIER
Convert.AffectedHouses=team
在 rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
ConvertN.From= ; List of TechnoTypes
ConvertN.To= ; TechnoType
ConvertN.AffectedHouses=all ; List of Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
; where N = 0, 1, 2, ...
; or
Convert.From= ; List of TechnoTypes
Convert.To= ; TechnoType
Convert.AffectedHouses=all ; List of Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
警告
此功能与 Ares 的单位转换 存在同样的限制。此功能不支持建筑类型。
警告
此功能需要 3.0 及以上版本的 Ares!如果未检测到 Ares 3.0+,单位的某些属性可能不会被更新。
自定义心灵控制动画
允许弹头播放自定义的
MindControl.Anim。
在 rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
MindControl.Anim= ; Animation, defaults to [CombatDamage] -> ControlledAnimationType
自定义弹头水花

允许弹头自定义其水花动画,在此参阅原版的 Conventional 系统。
SplashList.PickRandom可设置为true以从列表中随机选择一个动画。
在 rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
SplashList=<none> ; List of AnimationTypes
SplashList.PickRandom=false ; boolean
全图弹头
设置
DetonateOnAllMapObjects为 true 允许由抛射体引爆的弹头(例如这不包括动画Warhead和 Ares 的通用弹头超武,但包括Crit.Warhead和动画Weapon)以及随之在后的任何Airburst/ShrapnelWeapon,无论其实际目标如何,都可以对当前地图上所有存在且没死的对象进行引爆,并可以对目标进行筛选。注意,这是在弹头引爆之前的瞬间完成的,因此PreImpactAnim(Ares 功能)可以显示。DetonateOnAllMapObjects.Full自定义弹头是否在目标上完全引爆(作为虚拟武器的一部分)或者只能对所在区域造成杀伤并应用 Phobos 的弹头效果。DetonateOnAllMapObjects.AffectTargets用于在非none时筛选哪些类型的目标(科技类型)可被视为有效。仅none、all、aircraft、buildings、infantry和units是有效值。默认为none,因为包含所有对象类型可能会影响性能。DetonateOnAllMapObjects.AffectHouses用于在非none时筛选哪些所属方的目标可以被视为有效。仅适用于发射弹头的所属方已知的情况。默认为none,因为包含所有所属方可能会影响性能。DetonateOnAllMapObjects.AffectTypes可用于列出特定的科技类型作为有效目标。如果列出了任何有效科技类型,则只有匹配的对象才会被作为目标。注意DetonateOnAllMapObjects.AffectTargets和DetonateOnAllMapObjects.AffectHouses的优先级高于此设置。DetonateOnAllMapObjects.IgnoreTypes可用于列出特定的科技类型不得作为目标。DetonateOnAllMapObjects.RequireVerses如果设为 true 则只考虑弹头对其护甲类型具有非零Verses值的目标为有效。对于具有激活状态护盾的目标除非弹头拥有Shield.Penetrate=true,否则使用护盾的护甲类型。在所有上述筛选之后进行检查。
在 rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
DetonateOnAllMapObjects=false ; boolean
DetonateOnAllMapObjects.Full=true ; boolean
DetonateOnAllMapObjects.AffectTargets=none ; List of Affected Target Enumeration (none|aircraft|buildings|infantry|units|all)
DetonateOnAllMapObjects.AffectHouses=none ; List of Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
DetonateOnAllMapObjects.AffectTypes= ; List of TechnoTypes
DetonateOnAllMapObjects.IgnoreTypes= ; List of TechnoTypes
DetonateOnAllMapObjects.RequireVerses=false ; boolean
警告
虽然此功能比巨大的 CellSpread 值性能上好得多但它仍然可能减慢游戏速度。特别是与动画、AlphaImage 等共同使用时。建议 modder 谨慎使用并通过筛选语句进行限制。
撒币枪(弹)
东方崛起 中的 TransactMoney 应用
现在弹头可以在爆炸时向其所有者撒币。
TransactMoney.Display可以设置是否显示给予或扣除的资金金额。给予时数字显示为绿色,扣除时显示为红色,并在出现后向上飘起。TransactMoney.Display.AtFirer如果设置则使资金出现在开火者处而非目标处。如果设置但开火者未知则无论如何都显示在目标处。TransactMoney.Display.Houses决定哪些所属方可以看到资金显示。TransactMoney.Display.Offset是资金显示中心的额外像素偏移量,默认为0,0即目标/开火者的中心。
在 rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
TransactMoney=0 ; integer - credits added or subtracted
TransactMoney.Display=false ; boolean
TransactMoney.Display.AtFirer=false ; boolean
TransactMoney.Display.Houses=All ; Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
TransactMoney.Display.Offset=0,0 ; X,Y, pixels relative to default
铁幕与力场护盾的伤害穿透
现在可以让弹头对被铁幕和力场护盾保护的对象造成伤害。
PenetratesForceShield默认为PenetratesIronCurtain的值。注意这不会影响关联伤害类效果(例如
Psychedelic)之外的弹头功能以及类似碎片生成和AirburstWeapon的引爆这类通常在攻击被抵消时本就不发生的效果。
在 rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
PenetratesIronCurtain=false ; boolean
PenetratesForceShield= ; boolean
发射超武
现在弹头可以在引爆时发射超级武器
LaunchSW指定当弹头引爆时要发射的超级武器。如果超级武器的Money.Amount为负则发射的所属方还需要拥有足够的资金。LaunchSW.RealLaunch控制弹头的所有者是否需要拥有所有列出的超级武器。否则它们将无从发射。LaunchSW.IgnoreInhibitors设置是否忽略每个超级武器的SW.Inhibitors/SW.AnyInhibitor,否则只有未被抑制的超级武器会被发射。LaunchSW.IgnoreDesignators设置是否忽略每个超级武器的SW.Designators/SW.AnyDesignator。LaunchSW.DisplayMoney可以设置是否显示所发射超武Money.Amount而给予或扣除的资金金额。给予时数字显示为绿色,扣除时显示为红色,并在出现后向上飘起。LaunchSW.DisplayMoney.Houses决定哪些所属方可以看到资金显示。LaunchSW.DisplayMoney.Offset是资金显示中心的额外像素偏移量,默认为0,0即超级武器目标单元格处。
备注
为使动画弹头/武器上的此逻辑生效必须设置
Damage.DealtByInvoker。由于某些超级武器类型的特性并非所有超级武器都适合发射。请慎用!
超级武器在弹头引爆的 单元格 上发射而不是通过点击发射。
在 rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
LaunchSW= ; List of SuperWeaponTypes
LaunchSW.RealLaunch=true ; boolean
LaunchSW.IgnoreInhibitors=false ; boolean
LaunchSW.IgnoreDesignators=true ; boolean
LaunchSW.DisplayMoney=false ; boolean
LaunchSW.DisplayMoney.Houses=all ; Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
LaunchSW.DisplayMoney.Offset=0,0 ; X,Y, pixels relative to default
移除寄生
默认情况下如果单位从弹头收到负伤害(在
Verses前计算)任何寄生单位都会被移除和删除。现在可以自定义此行为以禁用负伤害的移除效果或为任意弹头启用它。
在 rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
RemoveParasite= ; boolean
移除伪装
弹头现在可以移除间谍或幻影坦克的伪装。即使伪装是通过
PermaDisguise默认获得来的。
在 rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
RemoveDisguise=false ; boolean
揭示弹
现在弹头可以在引爆时揭示整个地图的黑幕。
仅适用于弹头所有者。
在 rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
SpySat=false ; boolean
黑幕弹
现在弹头可以在引爆时填充整个地图的黑幕
仅适用于敌对所属方。
在 rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
BigGap=false ; boolean
生成工具箱
现在弹头可以在其引爆的单元格上创建指定类型的升级工具箱(如果空置,若被非工具箱的对象占据则生成到附近的单元格)类似于地图触发动作
108 创建工具箱...。SpawnsCrateN中的 N 是从 0 开始的数字,游戏会解析到最后一个为止。用于定义每个生成的升级工具箱类型。SpawnsCrateN.Weight是一个用于确定生成对应升级工具箱类型与其他列出的类型相比的相对权重(0 表示没门,越高代表概率越高)如果未定义则默认为 1。如果未设置
SpawnsCrate0.Type/Weight则SpawnsCrate.Type/Weight是其别名。
在 rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
SpawnsCrate(N).Type= ; Powerup crate type enum (money|unit|healbase|cloak|explosion|napalm|squad|reveal|armor|speed|firepower|icbm|invulnerability|veteran|ionstorm|gas|tiberium|pod)
SpawnsCrate(N).Weight=1 ; integer
指定非人步兵死亡序列
现在弹头可以使用相应的标签触发特定的
NotHuman=yes步兵Death动画序列。其值代表从Die1到Die5。
在 rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
NotHuman.DeathSequence= ; integer (1 to 5)
武器
自定义 AreaFire 目标
现在你可以指定 AreaFire 武器如何选择目标。默认情况下它会瞄准开火者当前所处的单元格,现在可以通过将
AreaFire.Target设为self或random分别改为瞄准发开火者自身或武器Range范围内的随机单元格。AreaFire.Target=self遵守对开火者自身的正常目标筛选规则(弹头Verses等)。AreaFire.Target=random会忽略由武器CanTarget和CanTargetHouses值设为不可作为目标的单元格或存在不可作为目标的对象的单元格。
在 rulesmd.ini:
[SOMEWEAPON] ; WeaponType
AreaFire.Target=base ; AreaFire Target Enumeration (base|self|random)
自定义 BurstDelay
Burst.Delays允许为特定武器指定其连发间隔。优先于载具类型中就有的BurstDelayX逻辑,且适用于步兵和建筑类型的武器(由于战机类型武器的发射系统完全不同因此暂不支持),并允许独立设置每一发Burst之间的间隔而不仅限于第 1 发到第 4 发。如果未未某一发设定间隔那么它会使用上一发所定义的间隔(例如
Burst=3和Burst.Delays=10将使用 10 作为所有连发的间隔)。使用
-1作为间隔会使该发使用旧逻辑(如果有则使用载具类型的BurstDelay0-3否则使用 3-5 之间的随机值)。
Burst.FireWithinSequence仅在步兵发射武器时使用,将其设为 true 以允许步兵在同一射击序列内射出多发Burst。第一发始终在由步兵类型图像的射击帧(如
FireUp等)确定的帧序列决定。后续的连发发射间隔由
Burst.Delays决定(最小间隔为 1 帧)或未定义情况下使用随机 3 到 5 帧。注意如果下一发的发射帧超出了射击序列长度则连发计数器将被重置且武器会重新开始装填。如果在至少一发后停止射击则连发计数器不会立即重置,但每个连发的发射帧不会受此影响(换而言之,如果之后重新开始射击而武器没有重新装填,那么射击序列会重新开始,但不会发射任何直到下一发应该被发射的帧)。
在 rulesmd.ini:
[SOMEWEAPON] ; WeaponType
Burst.Delays=-1 ; integer - burst delays (comma-separated) for shots in order from first to last.
Burst.FireWithinSequence=false ; boolean
额外弹头
现在可以通过列出
ExtraWarheads来让同一武器在命中时引爆多个弹头。这些弹头会在主弹头爆炸后按列出的顺序在同一位置引爆。这仅适用于由武器发射且引爆时仍保留其信息的抛射体(由于目前存在的技术限制,这不包括AirburstWeapon)。ExtraWarheads.DamageOverrides可用于额外弹头引爆时覆盖武器的Damage属性。如果找到ExtraWarheads中与之对应的值则使用,否则使用最后列出的值。如果列表为空则使用武器的Damage属性。ExtraWarheads.DetonationChances可用于自定义每个额外弹头爆炸的概率。如果找到ExtraWarheads中与之对应的值则使用,否则使用最后列出的值。如果列表为空则每个额外弹头都必然引爆。ExtraWarheads.FullDetonation可用于设置每个额外弹头是否在目标上完全引爆(作为虚拟武器的一部分)或者只能对所在区域造成杀伤并应用 Phobos 的弹头效果。如果找到ExtraWarheads中与之对应的值则使用,否则使用最后列出的值。如果列表为空则默认为 true。注意列出的弹头必须在
[Warheads]中列出才能生效。
在 rulesmd.ini:
[SOMEWEAPON] ; WeaponType
ExtraWarheads= ; List of WarheadTypes
ExtraWarheads.DamageOverrides= ; List of integers
ExtraWarheads.DetonationChances= ; List of floating-point values (percentage or absolute)
ExtraWarheads.FullDetonation= ; List of booleans
反馈武器
幽灵计划 中使用反馈武器在发射武器时对目标施加治疗光环
现在你可以指定一个辅助武器在发射武器时对开火者自身发射。
FireInTransport设置当原始武器从内部OpenTopped=true的运输工具中开火时是否可以发射反馈武器。如果反馈武器被发射,它会在运输工具上发射。OpenToppedDamageMultiplier不适用于反馈武器。
在 rulesmd.ini:
[SOMEWEAPON] ; WeaponType
FeedbackWeapon= ; WeaponType
OmniFire=yes 下转向
即便使用
OmniFire=yes的武器开火单位也会尝试将车体转向目标。建议 Jumpjet 的
ROT和JumpjetTurnRate相同。
在 rulesmd.ini:
[SOMEWEAPON] ; WeaponType, with OmniFire=yes
OmniFire.TurnToTarget=no ; boolean
辐射增强
除了允许自定义辐射类型外还有对于默认辐射类型
[Radiation]的增强,例如可以设置所有者与开火者或对建筑造成伤害。详见自定义辐射类型。
自定义战机扫射
幽灵计划 中的自定义战机扫射武器
现在可以自定义战机扫射武器的一些行为。
Strafing控制战机在目标射击时是否可以扫射。如果抛射体ROT< 2 且Inviso=false并且没有Trajectory则默认为true其他情况为false。Strafing.Shots控制在单词扫射过程中武器发射的次数,如果未设置则默认为 5。Ammo只会在扫射结束后扣除一次,无论实际多少次。Strafing.SimulateBurst控制在扫射过程中发射的武器是否模拟Burst的行为,即允许交替开火坐标。仅当武器Burst设置为 1 或未定义时才有效。Strafing.UseAmmoPerShot如果设为true将在每次开火后都扣除弹药而不是通常的仅在扫射结束后才扣除弹药。Strafing.EndDelay可用于覆盖战机在扫射过程中射出最后一发后进行另一轮扫射或返航前的时间间隔。默认为 ([WeaponType] -> Range* 256 + 1024) /[AircraftType] -> Speed。注意对于弹药量足够进行多次扫射的战机而言过短的间隔可能导致并不理想的行为例如四处游走或朝向怪异的方向,具体取决于[WeaponType] -> ROF和[AircraftType] -> Speed等其他因素。
对于
Type=SpyPlane超级武器生成的战机在SpyPlane Approach或SpyPlane Overfly任务中的情况Strafing.Shots只有在其主武器上手动设置才会生效并决定地图揭示效果的最大次数而无视其他因素。
在 rulesmd.ini:
[SOMEWEAPON] ; WeaponType
Strafing= ; boolean
Strafing.Shots= ; integer
Strafing.SimulateBurst=false ; boolean
Strafing.UseAmmoPerShot=false ; boolean
Strafing.EndDelay= ; integer, game frames
武器瞄准筛选
幽灵计划 中的武器瞄准筛选 - 就像分别对单位和建筑使用那样对敌军和友军使用不同武器
现在你可以指定武器可以开火的目标或所属方。这还会影响武器选择,除了某些特殊情况下的固定选择。
在 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)
备注
CanTarget 要求明确列出 all 或 empty 才能对不包含任何科技类型的单元格开火。