新增或增强的逻辑
此页面列出了 Phobos 新增的引擎功能或着重扩展的旧有逻辑。
新类型或游戏内实体
新的 AE 逻辑
类似于 Ares 的 AttachEffect,但是有一些差异和新特性。最大的不同在于这里的 Attach Effect 是一个需要明确定义的新类型。
Duration决定了 AE 的持续时长。它可以被科技类型和弹头上的DurationOverrides覆盖。如果
Duration.ApplyFirepowerMult设为 true,那么持续时间会乘以调用者的火力加成倍率,前提是倍率非负。即无法通过负值火力加成倍率将持续时间降低至 0 以下。如果
Duration.ApplyArmorMultOnTarget设为 true,那么持续时间会除以调用者的装甲加成倍率,前提是倍率非负。即无法通过负值装甲加成倍率将持续时间降至 0 以下。此处计算会考虑目标自身的ArmorMultiplier并忽略ArmorMultiplier.Allow/DisallowWarheads。
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的武器。
DiscardOn.MoveBasedOnDestination决定是否处于运动状态取决于是否拥有目的地。这会将悬浮在空中的 Jumpjet 单位视为移动,而正在转身但没有目的地的单位视为静止。如果
PenetratesIronCurtain没有设为 true,AE 不会应用在当前被铁幕保护的对象上。PenetratesForceShield可以用于为处于力场护盾保护中的对象分离控制,默认为PenetratesIronCurtain的值。
如果
AffectTypes设为非空列表,则 AE 仅对列出的特定单位生效。若未设置或为空则不执行白名单过滤。此项检查具有最高优先级。如果
IgnoreTypes设为非空列表,则 AE 不对列出的特定单位生效。若未设置或为空则不执行黑名单过滤。此项检查在AffectTypes之后执行。如果
AffectsTarget设为非空列表,则 AE 仅可对特定大类目标生效(例如步兵、载具、战机、建筑)。此项检查在两个类型名单过滤之后执行。Animation定义一个只要 AE 所附加的对象处于活动状态就会一直循环播放的动画。如果
Animation.ResetOnReapply设为 true,当Cumulative=false时再次赋予 AE 会重设动画。Animation.OfflineAction决定当 AE 所附加的对象处于非活动状态或电力不足时动画的行为。仅当Powered=true时有效。Animation.TemporalAction决定当 AE 所附加的对象被Temporal=true的弹头冻结时动画的行为。Animation.UseInvokerAsOwner可以设置创建该效果的所属方和科技类型(例如武器的发射者)为 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 自然结束或被移除后触发。ExpireWeapon.UseInvokerAsOwner可以设置创建该效果的所属方和科技类型(例如武器的发射者)为ExpireWeapon的所有者和调用者而不是 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.AffectsHouse定义哪些所属方可以触发这个复仇武器。RevengeWeapon.UseInvokerAsOwner可以设置创建该效果的所属方和科技类型(例如武器的发射者)为RevengeWeapon的所有者和调用者而不是 AE 所附加的对象。
ReflectDamage可设为 true 以使 AE 所附加对象所受的任何正值杀伤反弹回攻击者。ReflectDamage.Warhead决定用于反弹伤害的弹头,默认读取自[CombatDamage] -> C4Warhead。如果ReflectDamage.Warhead.Detonate设为 true 那么弹头可以完整的引爆而不仅仅用于造成杀伤。ReflectDamage.Chance决定触发反弹的几率,ReflectDamage.Multiplier是反弹回的伤害值相对于所接收的伤害值的倍率,而ReflectDamage.Override则定义反弹回了一个固定大小的伤害量。反弹效果不会被另一个反弹来的伤害所触发。可以将弹头的
SuppressReflectDamage设为 true 来避免触发伤害反弹效果。SuppressReflectDamage.Types可以控制哪些 AE 类型的反弹伤害效果会被抑制。如果留空则代表所有 AE 类型。SuppressReflectDamage.Groups的作用与此相同,但用于所列分组名下的所有 AE 类型。ReflectDamage.UseInvokerAsOwner可以设置创建该效果的所属方和科技类型(例如武器的发射者)为ReflectDamage的所有者和调用者而不是 AE 所附加的对象。
DisableWeapons可用于禁用 AE 附加对象的所有武器。在拥有
OpenTopped=true的科技类型上,OpenTopped.CheckTransportDisableWeapons可设为 true 以使载员在运输工具受DisableWeapons影响期间同步禁言效果。
Unkillable可用于防止科技类型因受到伤害而死亡(最低为 1)。可以通过在
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.CumulativeSourceMaxCount可用于控制来自同一来源的Cumulative=true的 AE 可叠加的最大数量,如果AttachEffect.CumulativeSourceMaxCount是一个负数则没有上限。独立于Cumulative.MaxCount工作。如果目标已经有了AttachEffect.CumulativeSourceMaxCount个来自同一来源的、相同类型的 AE,那么再赋予同类 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:
[General]
DiscardOn.MoveBasedOnDestination=false ; boolean
[AttachEffectTypes]
0=SOMEATTACHEFFECT
[SOMEATTACHEFFECT] ; AttachEffectType
Duration=0 ; integer - game frames or negative value for indefinite duration
Duration.ApplyFirepowerMult=false ; boolean
Duration.ApplyArmorMultOnTarget=false ; boolean
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
DiscardOn.MoveBasedOnDestination= ; boolean, default to [General] -> DiscardOn.MoveBasedOnDestination
PenetratesIronCurtain=false ; boolean
PenetratesForceShield= ; boolean
AffectTypes= ; List of TechnoTypes
IgnoreTypes= ; List of TechnoTypes
AffectsTarget=all ; List of TechnoType Enumeration (none|infantry|units|aircraft|buildings|all)
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
ExpireWeapon.UseInvokerAsOwner=false ; boolean
Tint.Color= ; integer - Red,Green,Blue
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.AffectsHouse=all ; List of Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
RevengeWeapon.UseInvokerAsOwner=false ; boolean
ReflectDamage=false ; boolean
ReflectDamage.Warhead= ; WarheadType
ReflectDamage.Warhead.Detonate=false ; WarheadType
ReflectDamage.Multiplier=1.0 ; floating point value, percents or absolute
ReflectDamage.AffectsHouse=all ; List of Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
ReflectDamage.Chance=1.0 ; floating point value
ReflectDamage.Override= ; integer
ReflectDamage.UseInvokerAsOwner=false ; boolean
DisableWeapons=false ; boolean
Unkillable=false ; boolean
LaserTrail.Type= ; LaserTrailType
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.CumulativeSourceMaxCount=-1 ; integer
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
SuppressReflectDamage.Groups= ; comma-separated list of strings (group IDs)
自定义辐射类型
混合起来的多种辐射类型
现在任何武器都可以拥有自定义的辐射类。有关辐射的更多详细信息请参见 此处。
所有辐射类型现在都有几个新的属性可用。
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 - Red,Green,Blue
RadSiteWarhead=RadSite ; WarheadType
RadSiteWarhead.Detonate=false ; boolean
RadSiteWarhead.Detonate.Full=true ; boolean
RadHasOwner=false ; boolean
RadHasInvoker=false ; boolean
警告
出于性能方面的考虑,除非存在 RadApplicationDelay.Building 高于 0 的辐射类型否则与之相关的所有功能在游戏内都将被完全禁用。这在其最早的可用时机(地图初始场景启动结束或存档加载后)就会进行判定,并且 不会 随着后续场景的改变或存档的加载而更新。
激光尾焰
东方崛起 中的激光尾焰应用实例
科技类型、抛射体和 Voxel 碎片现在都可以拥有不同透明度、宽度和颜色的彩色尾焰,这些尾焰是通过激光绘制代码完成的。
科技类型、抛射体和 Voxel 碎片可以拥有多个尾焰。对于科技类型的每个激光尾焰都可以自定义其相对于炮塔或车体的 FLH 偏移值。
激光尾焰现在同样可以使用 EBolt 或 辐射波 特效。
在 artmd.ini:
[LaserTrailTypes]
0=SOMETRAIL
[SOMETRAIL] ; LaserTrailType
DrawType=laser ; laser trail type (laser | ebolt | radbeam)
FadeDuration= ; integer, default to 64 for laser, 17 for ebolt, 15 for radbeam
SegmentLength=128 ; integer, minimal length of each trail segment
IgnoreVertical=false ; boolean, whether the trail won't be drawn on vertical movement
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
; laser
Color=255,0,0 ; integer - Red,Green,Blue
IsHouseColor=false ; boolean
Thickness=4 ; integer
IsIntense=false ; boolean, whether the laser is "supported" (AKA prism forwarding)
; ebolt
IsAlternateColor=false ; boolean
Bolt.Color1= ; integer - Red,Green,Blue
Bolt.Disable1=false ; boolean
Bolt.Color2= ; integer - Red,Green,Blue
Bolt.Disable2=false ; boolean
Bolt.Color3= ; integer - Red,Green,Blue
Bolt.Disable3=false ; boolean
Bolt.Arcs=8 ; integer
Bolt.ZAdjust=0 ; integer
; radbeam
Beam.Color= ; integer - Red,Green,Blue
Beam.Amplitude=40.0 ; floating point value
[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:
[CombatDamage]
ShieldApplyArmorMult=false ; boolean
[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
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
InheritArmor.Allowed= ; List of TechnoTypes
InheritArmor.Disallowed= ; List of TechnoTypes
ApplyArmorMult= ; boolean, default to [CombatDamage] -> ShieldApplyArmorMult
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
SelfHealing.EnabledBy= ; List of BuildingTypes
Respawn=0.0 ; floating point value, percents or absolute
Respawn.Rate=0.0 ; floating point value, ingame minutes
Respawn.RestartInCombat=true ; boolean
Respawn.RestartInCombatDelay=0 ; integer, game frames
Respawn.Anim= ; List of AnimationTypes
Respawn.Weapon= ; WeaponType
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
Pips.HideIfNoStrength=false ; boolean
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= ; List of AnimationTypes
HitAnim= ; List of AnimationTypes
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 - Red,Green,Blue
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= ; List of AnimationTypes
Shield.HitAnim= ; List of AnimationTypes
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.RestartInCombat= ; boolean
Shield.Respawn.RestartInCombatDelay=-1 ; integer, game frames
Shield.Respawn.RestartTimer=false ; boolean
Shield.Respawn.Anim= ; List of AnimationTypes
Shield.Respawn.Weapon= ; WeaponType
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。InheritArmor.Allowed列出了其护甲可以被覆盖的科技类型。如果为空,则相当于任何不在InheritArmor.Disallowed列表的对象。InheritArmor.Disallowed列出了其护甲不可被覆盖的科技类型。如果为空,则相当于任何科技类型都可以被覆盖,只要InheritArmor.Allowed为空或者这些科技类型列在该列表中。ApplyArmorMult可设为 true 以允许护盾享受护甲倍率。
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指定的帧数后。如果设置了
Respawn.RestartInCombat当科技类型的护盾处于重生过程中时其重生计时器将被暂停直至Respawn.RestartInCombatDelay指定的帧数后。
SelfHealing.Rate和Respawn.Rate遵循以下设置:0.0 立即恢复护盾,其他值表示护盾恢复/重生间隔(单位:分)。Respawn.Anim如果设置则会在护盾重生时播放。如果列出了多个动画,则将随机选择一个。Respawn.Weapon如果设置则将在护盾重生时向科技类型发射一次。SelfHealing.EnabledBy可用于控制护盾自愈和重生行为。只有拥有此列表中的建筑时才可以自愈或重生。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 帧。Pips.HideIfNoStrength可用于在Strength归 0 时隐藏护盾条而不是留下一个空框。以上配置支持基于每个护盾类型单独设置,例如使用
[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.Anim和Shield.Respawn.Weapon会在Shield.Respawn.Duration的帧数内覆盖护盾的Respawn.Rate、Respawn.Amount、Respawn.Anim和Respawn.Weapon。负值和 0 会默认使用护盾类型自身的值。如果设置了Shield.Respawn.RestartTimer当前正在使用的护盾重生计时器将被重置否则计时器将被根据新的Shield.Respawn.Rate按比例进行调整(例如计时器在前后保持相同百分比的进度)而不会重置。如果效果在重生计时器运作状态中失效,剩余时间也同样会按比例调整为护盾自身的Respawn.Rate。重新应用效果会将持续时间重置为Shield.Respawn.Duration此外
Shield.Respawn.RestartInCombat和Shield.Respawn.RestartInCombatDelay可用于覆盖护盾类型上的同类设置。
Shield.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)以及是否已被击碎的状态。恢复和重生计时器将始终被重置。
战机
战机伤残更换图像
现在当战机伤残(生命值低于
[AudioVisual] -> ConditionYellow的百分比)时可以通过Image.ConditionYellow为战机设置不同的图像。同样的如果战机生命值低于
[AudioVisual] -> ConditionRed的百分比那么将会使用Image.ConditionRed作为图像。
在 rulesmd.ini:
[SOMEAIRCRAFT] ; AircraftType
Image.ConditionYellow= ; AircraftType entry
Image.ConditionRed= ; AircraftType entry
警告
注意这些被使用的战机必须在 [AircraftTypes] 下注册。
动画
动画生成单位

动画现在可以在结束时通过
CreateUnit创建任何单位(载具、战机和步兵)。这比专用于生成步兵的MakeInfantry提供了更多的可选参数。CreateUnit.Owner决定创建的单位属于哪个所属方。这仅在动画拥有所有者的情况生效。如果没有所属方或所属方已败北,除非CreateUnit.RequireOwner为 true 以禁止生成,否则被创建的单位将归属于第一个平民所属方载具 摧毁动画、弹头
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.RequireOwner=false ; boolean
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= ; List of AnimationTypes
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
Customizable animation transparency settings
Translucency.Cloakedcan be used to overrideTranslucencyon animations attached to currently cloaked TechnoTypes.Both
TranslucencyandTranslucency.Cloakedcan use the new keyframe system to animate along with the animation. Read more about the keyframe system here.If interpolation is enabled, the keyframe values are clamped to valid transparency values (0,25,50 and 75), e.g a value of 1.5 would become 0 and 56.525 would become 50 and so on.
在 artmd.ini:
[SOMEANIM] ; AnimationType
Translucency=0 ; integer - only accepted values are 75, 50, 25 and 0.
Translucency.Cloaked= ; integer - only accepted values are 75, 50, 25 and 0.
自定义动画可见性
现在可以通过
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定义的距离内)的建筑类型(黑名单)。如果留空则只看白名单。上一条的黑名单在默认情景下只是不拓展建造范围,但如果
Adjacent.Disallowed.Prohibit设为 true,它将真正禁止建筑放置在所规定的范围内,并且优先于白名单。当Adjacent.Disallowed.ProhibitDistance设为大于 0 的值时将会覆盖Adjacent以实现对禁止放置范围的独立控制。
如果
NoBuildAreaOnBuildup设为 true 则任何建筑类型都不能当其在播放建造动画时在其附近建造。
在 rulesmd.ini:
[SOMEBUILDING] ; BuildingType
Adjacent.Allowed= ; List of BuildingTypes
Adjacent.Disallowed= ; List of BuildingTypes
Adjacent.Disallowed.Prohibit=false ; boolean
Adjacent.Disallowed.ProhibitDistance=0 ; integer, cell offset
NoBuildAreaOnBuildup=false ; boolean
可摧毁的寻路障碍
可以通过将
IsDestroyableBlockage设为 true 使建筑被视为可摧毁的寻路障碍物。这会使得每个无法飞行或没有适当MovementZone(允许处理可摧毁障碍物的类别,例如(Infantry|Amphibious)Destroyer)的单位能够将建筑视为像墙类覆盖物和地形对象那样不可通行且不可逾越的障碍物。注意如果一个单位拥有适当的
MovementZone但缺少实际摧毁障碍物的手段(例如一个可以发射并造成伤害的武器)那么它们仍会尝试摧毁并穿越障碍物并导致卡在那里而不是绕过障碍物。
在 rulesmd.ini:
[SOMEBUILDING] ; BuildingType
IsDestroyableObstacle=false ; boolean
自定义工程师维修
现在你可以在工程师维修一个建筑时为它们设定最大修复值。0 代表满血。
负值按百分比计算。例如
EngineerRepairAmount=-50表示每名工程师每次最多修 50%。如果建筑和工程师都设置了
EngineerRepairAmount则区其中更小的那个使用。
BuildingRepairedSound现在可以为在每种建筑上单独定义。
在 rulesmd.ini:
[SOMEBUILDING] ; BuildingType
EngineerRepairAmount=0 ; integer
BuildingRepairedSound= ; Sound entry, default to [AudioVisual] -> BuildingRepairedSound
[SOMEINFANTRY] ; InfantryType
EngineerRepairAmount=0 ; integer
拓展的建筑加载物
CnC: Final War 中加载到自己的和盟友的发电厂
现在建筑加载物可以放置在己方建筑、友方建筑乃至敌方建筑上。这三种所有者可以通过
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
备注
由于技术限制,使用 Ares 时通过 PowersUp.Buildings 而不是 PowersUpBuilding 放置的加载物(注意如果前者未设置而后者已设置则程序将 PowersUpBuilding 视为 PowersUp.Buildings 的第一个条目) 不会 满足先决条件。建议的解决方法是通过加载物来提供一个超武武器通过 虚拟投放 的建筑来作为先决条件,当父建筑消失时这些先决条件会被另一个超级武器销毁,以此类推。
电厂增幅器
当它存在时可以增加电厂产生的电量。
当增幅器被出售或摧毁时电量将复原。
PowerPlantEnhancer.MaxCount决定了此类建筑中参与电厂增幅的数量上限。负值代表无上限。
在 rulesmd.ini:
[SOMEBUILDING] ; BuildingType
PowerPlantEnhancer.PowerPlants= ; List of BuildingTypes
PowerPlantEnhancer.Range=0 ; floating point value, distance in cells
PowerPlantEnhancer.Amount=0 ; integer
PowerPlantEnhancer.Factor=1.0 ; floating point value
PowerPlantEnhancer.MaxCount=-1 ; integer
间谍效果
可以通过
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可以单独为每个奴隶类步兵类型微观设置。
在 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
抛射体
攻击地下单位
现在你可以允许抛射体对处于地下的单位发动攻击。
若要实际造成杀伤,你还需要设置 作用于地下单位。
在 rulesmd.ini:
[SOMEPROJECTILE] ; Projectile
AU=false ; boolean
备注
仅原版 Inviso=yes 类抛射体或启用了 Trajectory.(Straight/Bombard).SubjectToGround=false 的 Phobos 直线弹道 和 Phobos 轰击弹道 可穿透地表。除此之外的抛射体在接触地面时将会强制引爆。
为了能够攻击处于地下水平运动的单位,攻击者需要有 SensorsSight 设置。
伞降炸弹
还原自 RA1(也在 Ares 中部分实现但未记载,若共用则 Phobos 版本优先),允许抛射体在被空中单位发射时伞降到地面。
设置
Parachuted为 true 以启用此行为。注意:若与ROT> 0 或Vertical=true等任何其他抛射体逻辑共用将会导致不理想的效果。可通过
Parachuted.FallRate来自定义降落速度,其上限由Parachuted.MaxFallRate决定。可通过
BombParachute来自定义降落伞动画。该动画将使用 unit 色盘绘制映射为发射者所属的阵营色。
在 rulesmd.ini:
[SOMEPROJECTILE] ; Projectile
Parachuted=false ; boolean
Parachuted.FallRate=1 ; integer
Parachuted.MaxFallRate= ; integer, default to [General] -> ParachuteMaxFallRate
BombParachute= ; AnimationType, default to [General] -> BombParachute
抛射体拦截
泰伯利亚危机 中的拦截抛射体
现在可以通过在一些抛射体上设置
Interceptable=true来使它们能够被特定的科技类型拦截。如果该科技类型没有其他目标那么它将扫描范围内的可拦截抛射体并使用它的一个武器进行射击。抛射体可以定义Armor和Strength。无法对该抛射体护甲类型发起攻击的武器不会尝试拦截。在拦截时如果抛射体设置了Armor那么从抛射体的当前血量中扣除一个等于拦截武器Damage经弹头Verses和科技类型火力加成调整后的数值。无论当前抛射体血量是否被减少若拦截后其血量为 0 或更低那么抛射体将被引爆。Interceptor.Weapon决定用于拦截抛射体的武器(0 =Primary, 1 =Secondary)。拦截武器可能需要在其抛射体上将
AA设为 true 以使其能够根据抛射体相对地面的高度来瞄准。如果你不设置这些那么武器将无法分别瞄准低空或高空飞行的抛射体。
Interceptor.TargetingDelay决定拦截者单位扫描可被拦截抛射体的频率(单位:帧)。间隔越小越能提升拦截者工作效率,但会降低游戏运行效率。该间隔不得设为 0,否则将会自动调整为 1 并在日志中输出开发者警告。Interceptor.CanTargetHouses控制抛射体(或其发射者)属于哪些所属方时可以被拦截。Interceptor.GuardRange(以及Interceptor.(Rookie|Veteran|EliteGuardRange))是单位拦截抛射体的最大范围。不过武器的射程仍会限制单位的实际拦截范围。Interceptor.MinimumGuardRange(以及Interceptor.(Rookie|Veteran|EliteMinimumGuardRange))是单位拦截抛射体的最小范围。任何小于此范围的抛射体都不会被拦截。Interceptor.GuardRange.IsCylindrical若设为 true 则在距离检查中忽略高度/海拔。Interceptor.ApplyFirepowerMult决定拦截武器的伤害是否受益于科技类型所拥有的火力加成。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.TargetingDelay=1 ; integer, game frames
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.GuardRange.IsCylindrical=false ; boolean
Interceptor.VeteranMinimumGuardRange= ; floating point value
Interceptor.EliteMinimumGuardRange= ; floating point value
Interceptor.ApplyFirepowerMult=true ; boolean
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定义在抛射体上而不是武器上。对于
Trajectory=Straight它指的是抛射体的全程速度并且没有限制。对于
Trajectory=Bombard它指的是抛射体的初始速度并且没有限制。对于
Trajectory=Parabola它指的是抛射体仅用于模式 0、3 或 5 的水平速度并且没有限制。
在 rulesmd.ini:
[SOMEPROJECTILE] ; Projectile
Trajectory.Speed=100.0 ; floating point value
直线弹道
@brsajo#9745 在其个人 mod 中使用直线弹道制作的爆能枪
不言自明,这是一种直线射击弹道。
Trajectory.Straight.DetonationDistance控制抛射体强制引爆位置相对于目标单元格的距离阈值(每个游戏帧开始时、抛射体移动前检查)。设为 0 以禁用强制引爆(注意这可能导致抛射体飞掠目标)。如果Trajectory.Straight.ApplyRangeModifiers设为 true 则任何来自开火者的武器射程加成也将在此处被使用。通过设置Trajectory.Straight.PassThrough=true当值大于 0 时它指的是抛射体从自身开始移动的距离,当值小于 0 时它指的是抛射体飞跃目标后移动的距离(使用绝对值)。Trajectory.Straight.TargetSnapDistance控制抛射体在引爆时与目标的最大距离以使抛射体在引爆时 “瞬移” 到目标。设为 0 将禁用瞬移。Trajectory.Straight.PassThrough启用特殊的逻辑:抛射体在接触目标时不会引爆而是继续飞行到由Trajectory.Straight.DetonationDistance定义的距离。注意抛射体发射角度会受此影响,如果与目标处于同一高度那么直接向前发射。Trajectory.Straight.PassDetonate启用抛射体在飞行过程中的额外爆炸。(如果你希望抛射体在飞行过程中每隔一定距离/时间引爆一次那么可以使用此功能)。Trajectory.Straight.PassDetonateWarhead定义由Trajectory.Straight.PassDetonate引爆的弹头,Trajectory.Straight.PassDetonateDamage定义由Trajectory.Straight.PassDetonateWarhead引爆的伤害。Trajectory.Straight.PassDetonateDelay控制Trajectory.Straight.Warhead所定义弹头的引爆间隔。Trajectory.Straight.PassDetonateInitialDelay控制Trajectory.Straight.PassDetonateWarhead所定义弹头的初始引爆间隔。Trajectory.Straight.PassDetonateLocal控制Trajectory.Straight.PassDetonateWarhead和武器Warhead是否始终在下方地面引爆。它还将不再限制抛射体在使用Trajectory.Straight.ConfineAtHeight时的垂直速度。
Trajectory.Straight.LeadTimeCalculate控制抛射体在射击时是否需要计算目标的提前量。注意这不会影响炮塔的朝向。Trajectory.Straight.OffsetCoord控制锁定目标的偏移量。抛射体将瞄准此位置进行攻击。在此基础上它也支持Inaccurate=yes和Trajectory.Straight.LeadTimeCalculate=true。Trajectory.Straight.RotateCoord控制是否根据武器的Burst在以Trajectory.Straight.OffsetCoord为角平分线的角度内旋转抛射体的发射方向。设为 0 以禁用此功能。Trajectory.Straight.MirrorCoord控制Trajectory.Straight.OffsetCoord是否需要镜像水平方向值以适应当前的连发索引。同时,Trajectory.Straight.RotateCoord计算出的旋转方向也将被反转,每侧相邻抛射体之间的旋转角度不会受此改变。Trajectory.Straight.UseDisperseBurst控制Trajectory.Straight.RotateCoord的计算是否基于其上级武器的Trajectory.Disperse.WeaponBurst而不是武器的Burst。此值不合适将导致不理想的视觉效果。Trajectory.Straight.AxisOfRotation控制计算Trajectory.Straight.RotateCoord的转轴。随单位朝向或目标位置到源位置的向量旋转。
Trajectory.Straight.ProximityImpact控制初始的近炸引信次数。当剩余次数足够且抛射体靠近另一个有效目标时它将引爆由Trajectory.Straight.ProximityWarhead定义的弹头,如果剩余次数即将用完它将在当前位置引爆。此功能可以通过设为 0 禁用。负值整数表示无限次数。顺带一提,你可以使用带有低Versus的武器Warhead以瞄准目标,使用Trajectory.Straight.ProximityWarhead造成实际伤害。(你可以使用此功能在抛射体飞行期间对遇到的所有单位造成非重复伤害。)Trajectory.Straight.ProximityWarhead定义由Trajectory.Straight.ProximityImpact引爆的弹头,Trajectory.Straight.ProximityDamage定义由Trajectory.Straight.ProximityWarhead引爆的伤害。Trajectory.Straight.ProximityRadius控制近炸引信的范围。不支持负整数。Trajectory.Straight.ProximityDirect控制是否直接伤害目标而不是引爆弹头。Trajectory.Straight.ProximityMedial控制是否在抛射体位置而不是近炸目标位置引爆弹头。如果Trajectory.Straight.ProximityDirect设为 true,这只会影响Trajectory.Straight.EdgeAttenuation的计算结果。Trajectory.Straight.ProximityAllies控制友军是否也会触发近炸引信。Trajectory.Straight.ProximityFlight控制是否考虑空中的单位。
Trajectory.Straight.ThroughVehicles控制抛射体是否不会被地面上的载具或战机阻挡。当它被阻挡时将直接在其位置引爆。如果它的Trajectory.Straight.ProximityImpact次数还没耗尽,它也会在障碍物位置引爆一个Trajectory.Straight.ProximityImpact。Trajectory.Straight.ThroughBuilding控制抛射体是否不会被建筑阻挡。当它被阻挡时将直接在其位置引爆。如果它的Trajectory.Straight.ProximityImpact次数还没耗尽,它也会在障碍物位置引爆一个Trajectory.Straight.ProximityImpact。Trajectory.Straight.SubjectToGround控制抛射体在击中地面时是否爆炸。注意这并不能让 AI 去寻找合适的攻击位置。Trajectory.Straight.ConfineAtHeight控制抛射体尽可能保持的飞行高度。通过设置SubjectToCliffs=true可以使其不得从悬崖上向下移动。可以通过设置为非正整数来取消。如果Trajectory.Speed大于 256,它将被强制取消。Trajectory.Straight.EdgeAttenuation控制抛射体杀伤的边缘衰减比例(包括弹道添加的所有伤害类型),即实际造成的伤害是将此值乘以当前距离与武器射程的比值。不能设为负整数。Trajectory.Straight.CountAttenuation控制抛射体杀伤的衰减系数(包括弹道添加的所有伤害类型),即每次造成伤害后的下一次伤害会翻多少倍。不能设为负整数。
在 rulesmd.ini:
[SOMEPROJECTILE] ; Projectile
Trajectory=Straight ; Trajectory type
Trajectory.Straight.ApplyRangeModifiers=false ; boolean
Trajectory.Straight.DetonationDistance=0.4 ; floating point value
Trajectory.Straight.TargetSnapDistance=0.5 ; floating point value
Trajectory.Straight.PassThrough=false ; boolean
Trajectory.Straight.PassDetonate=false ; boolean
Trajectory.Straight.PassDetonateWarhead= ; WarheadType
Trajectory.Straight.PassDetonateDamage=0 ; integer
Trajectory.Straight.PassDetonateDelay=1 ; integer
Trajectory.Straight.PassDetonateInitialDelay=0 ; integer
Trajectory.Straight.PassDetonateLocal=false ; boolean
Trajectory.Straight.LeadTimeCalculate=false ; boolean
Trajectory.Straight.OffsetCoord=0,0,0 ; integer - Forward,Lateral,Height
Trajectory.Straight.RotateCoord=0 ; floating point value
Trajectory.Straight.MirrorCoord=true ; boolean
Trajectory.Straight.UseDisperseBurst=false ; boolean
Trajectory.Straight.AxisOfRotation=0,0,1 ; integer - Forward,Lateral,Height
Trajectory.Straight.ProximityImpact=0 ; integer
Trajectory.Straight.ProximityWarhead= ; WarheadType
Trajectory.Straight.ProximityDamage=0 ; integer
Trajectory.Straight.ProximityRadius=0.7 ; floating point value
Trajectory.Straight.ProximityDirect=false ; boolean
Trajectory.Straight.ProximityMedial=false ; boolean
Trajectory.Straight.ProximityAllies=false ; boolean
Trajectory.Straight.ProximityFlight=false ; boolean
Trajectory.Straight.ThroughVehicles=true ; boolean
Trajectory.Straight.ThroughBuilding=true ; boolean
Trajectory.Straight.SubjectToGround=false ; boolean
Trajectory.Straight.ConfineAtHeight=0 ; integer
Trajectory.Straight.EdgeAttenuation=1.0 ; floating point value
Trajectory.Straight.CountAttenuation=1.0 ; floating point value
备注
除非实在必要否则请设置较低的
Trajectory.Straight.ProximityRadius值。列于
Trajectory.Straight.PassDetonateWarhead和Trajectory.Straight.ProximityWarhead的弹头必须在[Warheads]中列出才能生效。
轰击弹道
类似于
Straight但首先瞄准攻击者和目标间的某个坐标。当抛射体接近该拐点后它才会转向目标并在击中目标或地面时引爆。Trajectory.Bombard.Height控制拐点的高度。Trajectory.Bombard.FallPercent通过拐点位置占发射位置与目标位置间总距离的百分比来控制拐点的距离。如果设为 0% 则它将在开火位置的正上方。如果设为 100% 则它将位于目标正上方。每次发射时拐点位置的百分比值可以随机浮动,该值不大于
Trajectory.Bombard.FallPercentShift。如果设为 0 则随机调整将被禁用。你还可以使拐点在以
Trajectory.Bombard.FallScatter.Max为半径的圆内随机散布。如果设为 0 则随机散布将被禁用。Trajectory.Bombard.FallScatter.Min可用于确定圆的最低半径。如果Trajectory.Bombard.FallScatter.Linear设为 true,则随机散布范围将被限制在发射位置与目标位置之间连线的垂面。
Trajectory.Bombard.FreeFallOnTarget控制它将如何击中目标。如果设为 true,则抛射体将在目标上方重新生成并自由落体。如果设为 false,则抛射体将正常从拐点位置飞向目标。Trajectory.Bombard.NoLaunch控制攻击者是否会自行发射抛射体。如果设为 true,则抛射体将直接从拐点位置下落。Trajectory.Bombard.FallSpeed控制抛射体经过拐点后的初速度。如果设为 0.0,则它将使用Trajectory.Speed。当Trajectory.Bombard.FreeFallOnTarget设为 true 时将无法工作。Trajectory.Bombard.DetonationDistance控制强制引爆位置相对于目标单元格的距离阈值(在每次游戏帧开始时检查,抛射体移动之前)。设为 0 可以禁用强制引爆(注意这可能导致抛射体越过目标)。Trajectory.Bombard.DetonationHeight控制当抛射体处于下降状态且低于发射位置的高度加上此值时将会提前引爆。设置为非负数时生效。如果Trajectory.Bombard.EarlyDetonation设为 true,则它将在上升段生效,这表示当抛射体高度高于发射位置加上此值时将引爆。Trajectory.Bombard.TargetSnapDistance控制抛射体在引爆时与目标的最大距离以使抛射体在引爆时 “瞬移” 到目标。设为 0 将禁用瞬移。Trajectory.Bombard.TurningPointAnims如果设置将会在抛射体抵达拐点时播放动画。如果Trajectory.Bombard.FreeFallOnTarget设为 true,则抛射体将与目标一起在目标上方生成。如果Trajectory.Bombard.NoLaunch设为 true,则无论抛射体是否自由落体,它都将在抛射体下落的位置播放动画。如果列出了多个动画,则将随机选择一个。Trajectory.Bombard.LeadTimeCalculate控制抛射体在射击时是否需要计算目标的提前量。注意这不会影响炮塔的朝向。以下标签在
Trajectory.Bombard.FreeFallOnTarget设为 false 时进一步自定义抛射体的下落行为。Trajectory.Bombard.OffsetCoord控制锁定目标的偏移量。抛射体将瞄准此位置进行攻击。在此基础上它也支持Inaccurate=yes和Trajectory.Bombard.LeadTimeCalculate=true。Trajectory.Bombard.RotateCoord控制是否根据武器的Burst在以Trajectory.Bombard.OffsetCoord为角平分线的角度内旋转抛射体的发射方向。设为 0 以禁用此功能。Trajectory.Bombard.MirrorCoord控制Trajectory.Bombard.OffsetCoord是否需要镜像水平方向值以适应当前的连发索引。同时,Trajectory.Bombard.RotateCoord计算出的旋转方向也将被反转,每侧相邻抛射体之间的旋转角度不会受此改变。Trajectory.Bombard.UseDisperseBurst控制Trajectory.Bombard.RotateCoord的计算是否基于其上级武器的Trajectory.Disperse.WeaponBurst而不是武器的Burst。此值不合适将导致不理想的视觉效果。Trajectory.Bombard.AxisOfRotation控制计算Trajectory.Bombard.RotateCoord的转轴。随单位朝向或目标位置到源位置的向量旋转。
Trajectory.Bombard.SubjectToGround控制抛射体在击中地面时是否爆炸。注意这并不能让 AI 去寻找合适的攻击位置。
在 rulesmd.ini:
[SOMEPROJECTILE] ; Projectile
Trajectory=Bombard ; Trajectory type
Trajectory.Bombard.Height=0.0 ; double
Trajectory.Bombard.FallPercent=1.0 ; double
Trajectory.Bombard.FallPercentShift=0.0 ; double
Trajectory.Bombard.FallScatter.Max=0.0 ; floating point value
Trajectory.Bombard.FallScatter.Min=0.0 ; floating point value
Trajectory.Bombard.FallScatter.Linear=false ; boolean
Trajectory.Bombard.FreeFallOnTarget=true ; boolean
Trajectory.Bombard.NoLaunch=false ; boolean
Trajectory.Bombard.FallSpeed=0.0 ; double
Trajectory.Bombard.DetonationDistance=0.4 ; floating point value
Trajectory.Bombard.DetonationHeight=-1 ; integer
Trajectory.Bombard.EarlyDetonation=false ; boolean
Trajectory.Bombard.TargetSnapDistance=0.5 ; floating point value
Trajectory.Bombard.TurningPointAnims= ; List of AnimationTypes
Trajectory.Bombard.LeadTimeCalculate=false ; boolean
Trajectory.Bombard.OffsetCoord=0,0,0 ; integer - Forward,Lateral,Height
Trajectory.Bombard.RotateCoord=0 ; floating point value
Trajectory.Bombard.MirrorCoord=true ; boolean
Trajectory.Bombard.UseDisperseBurst=false ; boolean
Trajectory.Bombard.AxisOfRotation=0,0,1 ; integer - Forward,Lateral,Height
Trajectory.Bombard.SubjectToGround=false ; boolean
抛物线弹道
顾名思义,这是一种完全重置且拥有不同增强功能的类
Arcing弹道,它支持与Trajectory=Disperse的联动。Trajectory.Parabola.DetonationDistance控制强制引爆位置相对于目标单元格的距离阈值(在每次游戏帧开始时检查,抛射体移动之前)。设为 0 可以禁用强制引爆(注意这可能导致抛射体越过目标)。更具体地说,当它被设为负值时,如果目标可移动,它将改变其目标到目标所在单元格的位置(这是为Disperse和Airburst而扩展的功能)。Trajectory.Parabola.TargetSnapDistance控制抛射体在引爆时与目标的最大距离以使抛射体在引爆时 “瞬移” 到目标。设为 0 将禁用瞬移。Trajectory.Parabola.OpenFireMode控制抛射体应该如何发射,它有如下 6 种模式:Speed - 固定水平速度的自动计算模式,使用
Trajectory.Speed和目标坐标作为计算条件,即抛射体的飞行时间将永久固定。Height - 固定最大高度的自动计算模式,使用
Trajectory.Parabola.ThrowHeight和目标坐标作为计算条件,即抛射体的引爆时间将相对固定。Angle - 固定开火角度的自动计算模式,使用
Trajectory.Parabola.LaunchAngle和目标坐标作为计算条件。在此模式下,性能消耗较高且可能无法解决。不建议在启用SubjectToCliffs或启用AA且MinimumRange较小时使用此模式。SpeedAndHeight - 固定水平速度和最大高度模式,使用
Trajectory.Speed和Trajectory.Parabola.ThrowHeight作为计算条件,即抛射体将只进行高度变化,高度随目标高度变化。HeightAndAngle - 固定最大高度和开火角度模式,使用
Trajectory.Parabola.ThrowHeight和Trajectory.Parabola.LaunchAngle作为计算条件,即抛射体将随高度变化而水平变化。SpeedAndAngle - 固定水平速度和开火角度模式,使用
Trajectory.Speed和Trajectory.Parabola.LaunchAngle作为计算条件,即抛射体弹道恒定。
Trajectory.Parabola.ThrowHeight控制抛射体的最大高度,仅用于模式 1、3 或 4。具体高度将由取发射高度和目标高度中的较大值然后增加此值决定。不支持非正数。Trajectory.Parabola.LaunchAngle控制抛射体的开火角度,仅用于模式 2、4 或 5。在模式 2 或 5 中仅支持 -90.0 ~ 90.0(不能使用边界值),在模式 4 中则是 0.0 ~ 90.0(不能使用边界值)。Trajectory.Parabola.LeadTimeCalculate控制抛射体在射击时是否需要计算目标的提前量。注意这不会影响炮塔的朝向。Trajectory.Parabola.DetonationAngle控制当抛射体当前速度方向与水平方向的角度小于此值时,它将提前引爆。当值为 -90.0 ~ 90.0(不能使用边界值)时生效。Trajectory.Parabola.DetonationHeight控制当抛射体处于下落段且低于发射位置的高度加上此值时会提前引爆。设置为非负数时生效。Trajectory.Parabola.BounceTimes控制抛射体在击中地面或悬崖时可以弹跳的次数。注意过高的抛射体速度可能导致异常操作。此外,Trajectory.Parabola.DetonationDistance与此不会冲突,它们将同时生效。因此,如果你想让子弹只在弹跳次数用尽后爆炸,你应该将Trajectory.Parabola.DetonationDistance设置为非正数。Trajectory.Parabola.BounceOnWater控制能否在水面上弹跳。Trajectory.Parabola.BounceDetonate控制是否在每次弹跳时额外引爆一次弹头。Trajectory.Parabola.BounceAttenuation控制抛射体弹跳伤害的衰减系数,即每次造成伤害后的下一次伤害会翻多少倍。这也将影响最终引爆的伤害。Trajectory.Parabola.BounceCoefficient控制抛射体弹跳弹性的衰减系数,即每次弹跳后的速度会翻多少倍。
Trajectory.Parabola.OffsetCoord控制锁定目标的偏移量。抛射体将瞄准此位置进行攻击。在此基础上它也支持Inaccurate=yes和Trajectory.Parabola.LeadTimeCalculate=true。Trajectory.Parabola.RotateCoord控制是否根据武器的Burst在以Trajectory.Parabola.OffsetCoord为角平分线的角度内旋转抛射体的发射方向。设为 0 以禁用此功能。Trajectory.Parabola.MirrorCoord控制Trajectory.Parabola.OffsetCoord是否需要镜像水平方向值以适应当前的连发索引。同时,Trajectory.Parabola.RotateCoord计算出的旋转方向也将被反转,每侧相邻抛射体之间的旋转角度不会受此改变。Trajectory.Parabola.UseDisperseBurst控制Trajectory.Parabola.RotateCoord的计算是否基于其上级武器的Trajectory.Disperse.WeaponBurst而不是武器的Burst。此值不合适将导致不理想的视觉效果。Trajectory.Parabola.AxisOfRotation控制计算Trajectory.Parabola.RotateCoord的转轴。随单位朝向或目标位置到源位置的向量旋转。
在 rulesmd.ini:
[SOMEPROJECTILE] ; Projectile
Trajectory=Parabola ; Trajectory type
Trajectory.Parabola.DetonationDistance=0.4 ; floating point value
Trajectory.Parabola.TargetSnapDistance=0.5 ; floating point value
Trajectory.Parabola.OpenFireMode=Speed ; ParabolaFireMode value enumeration (Speed|Height|Angle|SpeedAndHeight|HeightAndAngle|SpeedAndAngle)
Trajectory.Parabola.ThrowHeight=600 ; integer
Trajectory.Parabola.LaunchAngle=30 ; floating point value
Trajectory.Parabola.LeadTimeCalculate=no ; boolean
Trajectory.Parabola.DetonationAngle=-90.0 ; floating point value
Trajectory.Parabola.DetonationHeight=-1 ; integer
Trajectory.Parabola.BounceTimes=0 ; integer
Trajectory.Parabola.BounceOnWater=no ; boolean
Trajectory.Parabola.BounceDetonate=no ; boolean
Trajectory.Parabola.BounceAttenuation=0.8 ; floating point value
Trajectory.Parabola.BounceCoefficient=0.8 ; floating point value
Trajectory.Parabola.OffsetCoord=0,0,0 ; integer - Forward,Lateral,Height
Trajectory.Parabola.RotateCoord=0 ; floating point value
Trajectory.Parabola.MirrorCoord=yes ; boolean
Trajectory.Parabola.UseDisperseBurst=no ; boolean
Trajectory.Parabola.AxisOfRotation=0,0,1 ; integer - Forward,Lateral,Height
备注
与原有的
Arcing相比,它还可以用于战机和空爆武器。当然,
Gravity仍会影响弹道。
使抛射体被陆地或水域阻挡
现在可以通过将
SubjectTo(Land/Water)分别设为 true 以使抛射体将陆地或水域视为阻挡其路径的障碍物。发射此类抛射体的武器将把这些障碍物阻挡的目标视为超出射程并尝试重新移动自己的位置以便在不受这些障碍阻挡的情况下开火。如果SubjectTo(Land/Water).Detonate设置为 true,那么抛射体设法与上述障碍交叠时将会爆炸。默认情况下
Level=true的抛射体在非水域的地块上爆炸,但不会将这些地块视为真正的障碍物。通过设置这些标签可以覆盖此行为。
SubjectToGround用于避免抛射体穿地而过,如果将它设为 true 那么开火者会将所在高度低于开火位置下方地面高度的目标视为超出射程并调整自身所在位置以能够开火。由于技术原因,该功能对空军和建筑无效。在OpenTopped=true的载具内开火的科技类型也不会受到影响。
在 rulesmd.ini:
[SOMEPROJECTILE] ; Projectile
SubjectToLand= ; boolean
SubjectToLand.Detonate=true ; boolean
SubjectToWater= ; boolean
SubjectToWater.Detonate=true ; boolean
SubjectToGround=false ; boolean
归返武器
现在可以通过设置
ReturnWeapon使一个已爆炸的抛射体(以类似于AirburstWeapon或ShrapnelWeapon的方式)发射另一个武器和抛射体返回到发射者。如果发射者在初始抛射体引爆前死亡则ReturnWeapon不会发射。ReturnWeapon.ApplyFirepowerMult决定归返武器的伤害是否受益于科技类型所拥有的火力加成。
在 rulesmd.ini:
[SOMEPROJECTILE] ; Projectile
ReturnWeapon= ; WeaponType
ReturnWeapon.ApplyFirepowerMult=false ; boolean
超级武器
AI 超级武器发射延迟
默认情况下 AI 所属方只检查它是否拥有能够发射的超级武器并在 106 到 112 个游戏帧的随机间隔内发射它们。这一行为现在可以自定义设置为明确的间隔时间或予以禁用。0 及更小的值会禁用间隔并导致 AI 所属方每帧检查超级武器。
在 rulesmd.ini:
[General]
AISuperWeaponDelay= ; integer, game frames
超级武器的辅助单位和科技等级限制
SW.AuxTechnos指定了在没有它们时超武无法变得可用的辅助单位。玩家至少拥有这些单位中的一种才能获得该超武的使用权。SW.NegTechnos指定了在存在它们时超武会变得不可用的否决单位,超武仅在玩家没有这些单位中的任意一种时才能变得可用。SW.TechLevel指定了所属方为了能用该超武所不能低于的科技等级。超武仅在玩家所属方的科技达到这一等级时才能变得可用。
在 rulesmd.ini:
[SOMESW] ; SuperWeaponType
SW.AuxTechnos= ; List of TechnoTypes
SW.NegTechnos= ; List of TechnoTypes
SW.TechLevel=0 ; integer
备注
SW.TechLevel 并不以 -1 为特殊值。如果你想要限制一个超级武器仅 AI 玩家可用,请使用 SW.AllowPlayer 和 SW.AllowAI。
单位转换超武
现在弹头可以将受影响单位的科技类型更改为同大类的其他科技类型(步兵到步兵,车辆到车辆,战机到战机)。
ConvertN.From(此处 N 为 0, 1, 2…)指定哪些科技类型可用于转换。此条目可以列出许多类型以一次全部转换。当没有包含任何类型时将影响所有有效目标。ConvertN.To指定转换后的科技类型。ConvertN.AffectsHouse指定哪些所属方的单位可以被转换。若只指定一组转换则
Convert.From、Convert.To和Convert.AffectsHouse(不带序号)相当于Convert0.From、Convert0.To和Convert0.AffectsHouse的别称。转换影响被指定的 所有 当前存在的科技类型,包括处于运输工具中的、驻扎在建筑内的、处于
InfantryAbsorb=yes或UnitAbsorb=yes的建筑中的、正在Bunker=yes建筑里的。
例如,这个超级武器可以将所有被影响的己方和友方 SOLDIERA 和 SOLDIERB 转换为 NEWSOLDIER:
[ExampleSW]
Convert.From=SOLDIERA,SOLDIERB
Convert.To=NEWSOLDIER
Convert.AffectsHouse=team
在 rulesmd.ini:
[SOMESW] ; SuperWeaponType
ConvertN.From= ; List of TechnoTypes
ConvertN.To= ; TechnoType
ConvertN.AffectsHouse=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.AffectsHouse=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.AffectsHouse设置那个所属方受此效果影响。LimboKill.IDs是建筑 ID列表,这些建筑将被立即从游戏中移除。LimboKill.Counts设置每种类型的建筑将被移除的数量。如果一个LimboKill.IDs列表中的值在此列表有对应项则使用此处设置的值,否则按无数量限制进行移除。若此列表留空则所有类型均无数量限制。
使用这些标签可以使投放变得随机。游戏将根据每个提供的 “掷骰子” 概率随机选择列表中的一个建筑。
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.AffectsHouse=self ; Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
LimboKill.IDs= ; List of numeric IDs
LimboKill.Counts= ; List of integers
警告
谨记虚拟投放的建筑并不真实存在于地图上!这意味着它们不应启用需要与游戏战场内交互的机制(例如工厂、克隆、维修厂、停机坪)。它们还 应该设为 KeepAlive=no 或者可以被虚拟击杀 - 否则游戏永远不会结束。
联动超武
超级武器现在可以通过
SW.Link设置一个联动超武列表,当原超级武器被发射时列表中的联动超武将被授予或强写计时器。SW.Link.Grant允许像核弹箱子那样为没有该超武的玩家授予一次使用权。SW.Link.Ready指定是否将被联动超武的计时器强写为就绪状态。SW.Link.Reset指定是否将被联动超武的计时器强写以进行重置。优先级高于SW.Link.Ready。对于一个被授予的超武:
检查
SW.Link.Reset以确认是否需要被重置。若为 false,检查
SW.Link.Ready以确认是否需要被设为就绪。若为 false,则初始状态由被授予超武自身的
SW.InitialReady决定。
Message.LinkedSWAcquired将在至少有一个联动超武被授予或强写计时器时显示给发射者。EVA.LinkedSWAcquired将在至少有一个联动超武被授予或强写计时器时播放给发射者。使用这些标签可以使这些超武变得随机。游戏将根据每个提供的 “掷骰子” 概率随机选择列表中的一个建筑。
SW.Link.RollChances是 “掷骰子” 发生的概率列表。有效值的范围为 0%(从不发生)到 100%(总是发生)。默认为单次必出。SW.Link.RandomWeightsN是每个 “掷骰子” 发生概率的权重列表。有效值为 0(从不发生)到 100%(总是发生)。RandomWeights是RandomWeights0的有效别名。如果掷骰尝试没有指定权重,则使用最后一个权重。
在 rulesmd.ini:
[SOMESW] ; SuperWeaponType
SW.Link= ; List of SuperWeaponTypes
SW.Link.Grant=false ; boolean
SW.Link.Ready= ; boolean, default to SW.InitialReady for granted superweapons, false otherwise
SW.Link.Reset=false ; boolean
SW.Link.RollChances= ; List of percentages.
SW.Link.RandomWeightsN= ; List of integers.
Message.LinkedSWAcquired= ; CSF entry key
EVA.LinkedSWAcquired= ; EVA entry
Next
虚幻 中通过 SW.Next 将多个 ChronoSphere 与 ChronoWarp 类型的超武组成链式超武系统
现在超级武器可以向同一目标地点发射其他超级武器。发射的类型可以使用与虚拟投放相同的规则进行随机化(见上文)。
SW.Next.RealLaunch控制发射初始超级武器的所有者是否必须拥有所列出的超级武器和足够Money.Amout的资金来支持。否则强制发射。SW.Next.IgnoreInhibitors设置是否忽略每个超级武器的SW.Inhibitors/SW.AnyInhibitor,否则只有未被抑制的超级武器会被发射。SW.Next.IgnoreDesignators设置是否忽略每个超级武器的SW.Designators/SW.AnyDesignator。
使用这些标签可以使这些超武变得随机。游戏将根据每个提供的 “掷骰子” 概率随机选择列表中的一个建筑。
SW.Next.RollChances是 “掷骰子” 发生的概率列表。有效值的范围为 0%(从不发生)到 100%(总是发生)。默认为单次必出。SW.Next.RandomWeightsN是每个 “掷骰子” 发生概率的权重列表。有效值为 0(从不发生)到 100%(总是发生)。RandomWeights是RandomWeights0的有效别名。如果掷骰尝试没有指定权重,则使用最后一个权重。
在 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
科技类型
侵略性移动攻击命令
AttackMove.Aggressive允许你的单位在执行移动攻击(Ctrl+Shift)任务时主动攻击敌方的无武装建筑。AttackMove.UpdateTarget允许你的单位在执行移动攻击(Ctrl+Shift)任务时自动切换威胁值更高的目标。
在 rulesmd.ini:
[General]
AttackMove.Aggressive=false ; boolean
AttackMove.UpdateTarget=false ; boolean
[SOMETECHNO] ; TechnoType
AttackMove.Aggressive= ; boolean, default to [General] -> AttackMove.Aggressive
AttackMove.UpdateTarget= ; boolean, default to [General] -> AttackMove.UpdateTarget
移动攻击 - 获取目标时的行为
现在你可以用
AttackMove.StopWhenTargetAcquired来让移动攻击的单位在发现敌人后停止移动,就像《星际》和《魔兽》中那样。此功能用于避免单位在执行移动攻击命令时冲锋过猛而暴毙。
你也可以使用
AttackMove.PursuitTarget来让它们继续追击已锁定的单个目标。此功能对于基洛夫空艇这样的近战单位很有用。
在 rulesmd.ini:
[General]
AttackMove.StopWhenTargetAcquired= ; boolean
[SOMETECHNO] ; TechnoType
AttackMove.StopWhenTargetAcquired= ; boolean, default to [General] -> AttackMove.StopWhenTargetAcquired if set, inverse of OpportunityFire otherwise.
AttackMove.PursuitTarget= ; boolean
备注
许多单位在执行移动攻击命令时本就有一个发现敌人后停止移动的行为,这与
AttackMove.StopWhenTargetAcquired无关。一些单位(例如 Jumpjet 类)在原版移动攻击命令下无法正常开火。具体原因不明,但该功能可以解决此问题。
设置了
AttackMove.StopWhenTargetAcquired=true的 Jumpjet 单位会立即停止并且不会分散到某个单元格上。这是有意如此设计的。
移动攻击 - 跟随
现在你可以让某些单位在执行移动攻击命令时跟随周围的单位。此跟随行为相当于跟随命令(
[Ctrl]+[Alt])的效果。使用
AttackMove.Follow.IncludeAir来决定是否跟随空中单位。设置了
AttackMove.Follow.IfMindControlIsFull=true的心灵控制单位在达到心控数量上限时会进行跟随。
此功能对用于医疗和维修的支援类单位应该很有用。
在 rulesmd.ini:
[SOMETECHNO] ; TechnoType
AttackMove.Follow=false ; boolean
AttackMove.Follow.IncludeAir=false ; boolean
AttackMove.Follow.IfMindControlIsFull=false ; boolean
移动攻击 - 无武器单位
在原版,没有武器的单位无法执行移动攻击命令。现在你可以通过
AttackMove.IgnoreWeaponCheck=true来禁用这一硬编码行为。无武器单位无法真正执行移动攻击行为。此功能是避免你同时选中无武器单位和其他单位的情况下移动攻击指针被禁用的。
在 rulesmd.ini:
[General]
AttackMove.IgnoreWeaponCheck=false ; boolean
攻击无威胁建筑(单位定义)
现在你可以自由地设置单位能否自动瞄准无威胁的建筑物。
AutoTarget.NoThreatBuildings控制玩家操作的单位,AutoTargetAI.NoThreatBuildings控制其他(由 AI 操作的)单位。
在 rulesmd.ini:
[General]
AutoTarget.NoThreatBuildings=false ; boolean
AutoTargetAI.NoThreatBuildings=true ; boolean
自定义子机发射器
幻想奇遇 中的有限追击范围子机
如果设置
Spawner.LimitRange则子机将在敌人超出子机发射器武器Range设定的最大值范围后停止追击。Spawner.ExtraLimitRange是追击范围相对于武器射程进行调整的参量。
Spawner.DelayFrames可用于设置每次从子机发射器中生成单位的最小游戏帧数。对于导弹默认是 9 帧,其他默认是 20 帧。如果
Spawner.AttackImmediately设为 true,战机子机将在生成后立即执行攻击任务而不是先等待其余战机生成和集结。若启用
Spawner.UseTurretFacing则子机发射器单位拥有炮塔时子机生成时的初始方向使用炮塔方向而非车体方向。Spawner.RecycleRange决定子机在距离母舰多少格以内可以被进行回收。Spawner.RecycleAnim用于设置回收时在子机位置播放的动画。如果列出了多个动画,则将随机选择一个。Spawner.RecycleCoord定义了子机将要前往母舰的哪个位置。Spawner.RecycleOnTurret定义这个位置是否相对于炮塔而非车体。
在 rulesmd.ini:
[SOMETECHNO] ; TechnoType
Spawner.LimitRange=false ; boolean
Spawner.ExtraLimitRange=0 ; integer, range in cells
Spawner.DelayFrames= ; integer, game frames
Spawner.AttackImmediately=false ; boolean
Spawner.UseTurretFacing=false ; boolean
Spawner.RecycleRange=-1 ; floating point value, range in cells
Spawner.RecycleAnim= ; List of AnimationTypes
Spawner.RecycleCoord=0,0,0 ; integer - Forward,Lateral,Height
Spawner.RecycleOnTurret=false ; boolean
备注
如果你设置了回收的 FLH,那么最好一并设置一个至少为 0.5 格的回收范围。否则子机发射器可能无法正确回收子机。
基于弹药量的自动变形
单位现在可以根据弹药量转换成另一种单位
Ammo.AutoConvertMinimumAmount决定触发自动变形的最小弹药量。Ammo.AutoConvertMaximumAmount决定触发自动变形的最大弹药量。Ammo.AutoConvertType指定变形成哪个新单位。该单位必须与原单位同属一类(载具变载具,步兵变步兵,战机变战机)。设为负数将会禁用弹药数量检查,当两个检查都被禁用时将不会触发变形。
在 rulesmd.ini:
[SOMETECHNO] ; TechnoType, before conversion
Ammo.AutoConvertMinimumAmount=-1 ; integer
Ammo.AutoConvertMaximumAmount=-1 ; integer
Ammo.AutoConvertType= ; TechnoType, after conversion
警告
此功能与 Ares 的单位转换 存在同样的限制。此功能不支持建筑类型。
警告
此功能需要 3.0 及以上版本的 Ares!如果未检测到 Ares 3.0+,单位的某些属性可能不会被更新。
自动删除乘客
运输工具可以随时间删除乘客。乘客将按照进入运输工具顺序的先后被删除。
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 ; floating point value, 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= ; List of AnimationTypes
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
自动发射武器
现在你可以设置
AutoTargetOwnPosition使科技类型根据AutoTargetOwnPosition.Self选择当前单元格或开火者自身自动发射其武器而无需检索一个合适的目标。
在 rulesmd.ini:
[SOMETECHNO] ; TechnoType
AutoTargetOwnPosition=false ; boolean
AutoTargetOwnPosition.Self=false ; boolean
备注
为了让该逻辑正常工作,你需要确保单位上没有设置 CanPassiveAquire=false 等阻止索敌的语句。
建造限制组
现在你可以使不同的科技类型在一个组内共享建造限制。
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 - Red,Green,Blue
Tint.Intensity=0.0 ; floating point value
Tint.VisibleToHouses=all ; List of Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
自定义镭射幽浮吸取
可以单位微观定义吸取逻辑的属性。
DrainMoneyDisplay和DrainMoneyDisplay.OnTarget分别决定吸取金额是否会在开火者和目标上显示。DrainMoneyDisplay.Houses决定哪些所属方可以看到资金显示。DrainMoneyDisplay.Offset是资金显示中心的额外像素偏移量,默认为 0,0 即开火者的中心。DrainMoneyDisplay.OnTarget.UseDisplayIncome决定目标单位上的吸取金额是否使用期自身的DisplayIncome.Houses和DisplayIncome.Offset设置。若设为 false 则遵循开火者的DisplayIncome.Houses和DisplayIncome.Offset设置
在 rulesmd.ini:
[AudioVisual]
DrainMoneyDisplay=false ; boolean
DrainMoneyDisplay.Houses=all ; List of Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
DrainMoneyDisplay.OnTarget=false ; boolean
DrainMoneyDisplay.OnTarget.UseDisplayIncome=true ; boolean
[SOMETECHNO] ; TechnoType
DrainMoneyFrameDelay= ; integer, default to [CombatDamage] -> DrainMoneyFrameDelay
DrainMoneyAmount= ; integer, default to [CombatDamage] -> DrainMoneyAmount
DrainAnimationType= ; AnimationType, default to [CombatDamage] -> DrainAnimationType
DrainMoneyDisplay= ; boolean, default to [AudioVisual] -> DrainMoneyDisplay
DrainMoneyDisplay.Houses= ; List of Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all), default to [AudioVisual] -> DrainMoneyDisplay.Houses
DrainMoneyDisplay.Offset=0,0 ; X,Y, pixels relative to default
DrainMoneyDisplay.OnTarget= ; boolean, default to [AudioVisual] -> DrainMoneyDisplay.OnTarget
DrainMoneyDisplay.OnTarget.UseDisplayIncome= ; boolean
自定义 OpenTopped 属性
现在你可以为每个科技类型微观设定全局
OpenTopped运输工具的属性。OpenTopped.IgnoreRangefinding可用于禁用OpenTopped运输工具在接近超出射程的目标和扫描潜在目标时使用运输工具与所有载员之间的Range最小武器的射程这一测距行为。OpenTopped.AllowFiringIfDeactivated可用于自定义当运输工具被瘫痪(EMP、PoweredUnit等)时载员是否可以开火。OpenTopped.ShareTransportTarget控制运输工具的当前目标是否传递给乘客。你还可以通过
OpenTransport.RangeBonus/DamageMultiplier为运输工具内的乘客单独定义射程加成与伤害倍率,该设置独立于运输工具的OpenTopped.RangeBonus/DamageMultiplier生效。OpenTopped.DecloakToFire可自定义 OpenTopped 的运输工具是否必须解除隐形才能使其乘客开火。
在 rulesmd.ini:
[General]
OpenTopped.AllowFiringIfAttackedByLocomotor=true ; boolean
OpenTopped.DecloakToFire=true ; boolean
[SOMETECHNO] ; TechnoType, transport with OpenTopped=yes
OpenTopped.RangeBonus= ; integer, default to [CombatDamage] -> OpenToppedRangeBonus
OpenTopped.DamageMultiplier= ; floating point value, default to [CombatDamage] -> OpenToppedDamageMultiplier
OpenTopped.WarpDistance= ; integer, default to [CombatDamage] -> OpenToppedWarpDistance
OpenTopped.IgnoreRangefinding=false ; boolean
OpenTopped.AllowFiringIfDeactivated=true ; boolean
OpenTopped.AllowFiringIfAttackedByLocomotor= ; boolean, defaults to [General] -> OpenTopped.AllowFiringIfAttackedByLocomotor
OpenTopped.ShareTransportTarget=true ; boolean
OpenTopped.DecloakToFire= ; boolean, defaults to [General] -> OpenTopped.DecloakToFire
[SOMETECHNO] ; TechnoType, passenger
OpenTransport.RangeBonus=0 ; integer
OpenTransport.DamageMultiplier=1.0 ; floating point value
备注
乘客在 OpenTopped 载具中的主动寻敌范围不受这些射程加成值的影响。
自定义子机序列
现在可以通过
Spawns.Queue从子机发射器生成多种子机。该序列中的子机顺序即为其重新生成顺序。仍需设置
Spawns以启用子机逻辑并作为默认子机。仍需设置
SpawnsNumber以决定子机数量。如果队列长度超过子机发射器的
SpawnsNumber,超出部分的子机将被忽略。如果队列长度过短则剩余部分由Spawns定义的子机填补。因此建议将它们设为等长。
在 rulesmd.ini:
[SOMETECHNO] ; TechnoType
Spawns.Queue= ; List of AircraftTypes, in order
警告
注意队列中的所有子机应当拥有相同的 MissileSpawn 值(均为 true 或均为 false)。混合使用会导致导弹类子机无法命中目标。
自定义 Ares 的雷达干扰逻辑
现在可以自定义 Ares 雷达干扰逻辑的部分属性。
RadarJamHouses决定哪些所属方会受到雷达干扰效果影响。RadarJamDelay决定干扰间隔,默认同 Ares 为 30。较短的间隔会使干扰生效更及时但会降低性能。RadarJamAffect决定哪些拥有Radar=yes或SpySat=yes的建筑会受到干扰。如果为空则所有雷达建筑都会受到干扰。RadarJamIgnore决定哪些拥有Radar=yes或SpySat=yes的建筑不受到干扰。
在 rulesmd.ini:
[SOMETECHNO] ; TechnoType, with RadarJamRadius=
RadarJamHouses=enemies ; List of Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
RadarJamDelay=30 ; integer
RadarJamAffect= ; List of BuildingTypes
RadarJamIgnore= ; List of BuildingTypes
自定义载具被击杀驾驶员时是否保留或杀死乘客
现在可以自定义载具被 击杀驾驶员 时是否保留或杀死乘客了。
备注
当设置 DriverKilled.KeptPassengers=true 时乘客将总是被保留而无论 DriverKilled.KillPassengers 的设置,如果运输工具还拥有 OpenTopped=true 且未设置 OpenTopped.AllowFiringIfDeactivated=false,那么乘客将继续攻击他们原本正在攻击的目标,无论这个目标是从运输工具继承来的还是他们自己获取的。
在 rulesmd.ini:
[CombatDamage]
DriverKilled.KillPassengers=false ; boolean
[SOMETECHNO] ; TechnoType, transport
DriverKilled.KeptPassengers=false ; boolean
DriverKilled.KillPassengers= ; boolean, defaults to [CombatDamage] -> DriverKilled.KillPassengers
警告
如果设置了 DriverKilled.KeptPassengers=true,即便除被击杀的驾驶员外还有其他乘客可以被 Operator 匹配,运输工具也仍会更改所属方为治安并将任务更改为 Harmless,只是并不瘫痪或调整亮度。
如果有新的乘客进入运输工具并且可被
Operator匹配,那么将会正常更改所属方。该功能本是为一些特殊
OpenTopped单位设计的,暂未对设计外的情况进行充分适配。
单位出售音效
当建筑或单位被出售时将向所有者播放出售音效和 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
AllowWeaponSelectAgainstWalls= ; boolean, default to [CombatDamage] -> AllowWeaponSelectAgainstWalls
伪装逻辑增强
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
不参与基地中心计算
这可用于将科技类型从基地中心计算中排除(用于特定 AI 脚本和 AI 超武瞄准模式等)通常仅有建筑参与计算,但初始基地中心的确会计入所属方的初始单位,该设置对此也可生效。
在 rulesmd.ini:
[SOMETECHNO] ; TechnoType
IgnoreForBaseCenter=false ; boolean
拓展的盖特掉档逻辑
现在你可以自定义
RateDown的一些效果。RateDown.Delay控制停火多少帧后才开始使用RateDown减少盖特计时器。RateDown.Reset控制当科技类型失去目标或更换目标时是否立即清空盖特计时器。RateDown.Cover.Value用于在科技类型的弹药低于RateDown.Cover.AmmoBelow时替代RateDown使用。
在 rulesmd.ini:
[SOMETECHNO] ; TechnoType, with IsGattling=yes
RateDown.Delay=0 ; integer, game frames
RateDown.Reset=false ; boolean
RateDown.Cover.Value=0 ; integer
RateDown.Cover.AmmoBelow=-2 ; integer
额外威胁
现在你可以通过更多方式调整单位对目标所构成威胁的评估。这将有助于单位进行自动瞄准。
当目标对单位构成威胁时,它将获得由
ExtraThreat.IsThreat定义的额外威胁值。一般来说,“构成威胁”意味着目标能够向该单位开火。
使用
AlwaysConsideredThreat可使目标始终被视为威胁。
当目标处于单位射程之内,它将获得
ExtraThreat.InRange定义的额外威胁值。当目标处于单位射程之内,它将获得一个等同于
ExtraThreatCoefficient.InRangeDistance乘算目标到该单位单元格距离的额外威胁值。只考虑处于射程之内的情景是因为原版
TargetDistanceCoefficientDefault只考虑处于射程之外的情况。该语句是对其的补充。
目标将获得一个等同于
ExtraThreatCoefficient.Facing乘算该单位当前开火朝向到目标相对方向差值的额外威胁值。“开火朝向”是指单位用于检查自己是否“已面向目标且可开火”的朝向。步兵开火不检查朝向,所以这也对步兵无效。
朝向的单位是游戏内部数值比例。一个完整圆周对应 65536。
目标将获得一个等同于
ExtraThreatCoefficient.DistanceToLastTarget乘算目标与该单位上一个目标间单元格距离的额外威胁值。每个单位每帧都会将其当前目标记录为“上一个目标”。该记录在目标失效后最多保留 15 帧。
如果单位没有“上一个目标”,则该项将不会生效。
在 rulesmd.ini:
[General]
ExtraThreat.IsThreat=0.0 ; double
ExtraThreat.InRange=0.0 ; double
ExtraThreatCoefficient.InRangeDistance=0.0 ; double
ExtraThreatCoefficient.Facing=0.0 ; double
ExtraThreatCoefficient.DistanceToLastTarget=0.0 ; double
[SOMETECHNO] ; TechnoType
AlwaysConsideredThreat=false ; boolean
ExtraThreat.IsThreat= ; double, default to the flag in [General] with same name
ExtraThreat.InRange= ; double, default to the flag in [General] with same name
ExtraThreatCoefficient.InRangeDistance= ; double, default to the flag in [General] with same name
ExtraThreatCoefficient.Facing= ; double, default to the flag in [General] with same name
ExtraThreatCoefficient.DistanceToLastTarget= ; double, default to the flag in [General] with same name
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 的海军对水下目标行为
C&C: Reloaded 中敌人使用 ForceWeapon.UnderEMP 攻击 EMP 状态目标的行为
可用于覆盖正常的武器选择逻辑,以强制对特定目标使用特定武器。目标满足条件则按所列出规则的顺序使用第一个满足条件的规则。
ForceWeapon.Naval.Decloaked强制指定对未隐形(下潜)状态Naval=yes的目标使用的武器。如果你的海军单位有一个武器仅用于水下目标另一个武器用于水面目标那么这个规则会很有用。ForceWeapon.Cloaked强制指定对隐形(下潜)状态目标使用的武器。ForceWeapon.Disguised强制指定针对伪装目标所使用的武器。ForceWeapon.UnderEMP强制指定对与被 EMP 瘫痪了的目标所使用的武器。ForceWeapon.InRange强制指定了一个当目标进入武器Range范围时的可选武器列表。如果ForceWeapon.InRange.TechnoOnly设为 true 则仅在目标为单位时才能像其他强制武器效果那样生效,否则在攻击空地时也会生效。该单位会按列表顺序选取首个符合条件的武器。在未设置ForceAAWeapon.InRange的情况下这同时用于地面和空中目标。ForceAAWeapon.InRange是ForceWeapon.InRange的对空版本。当两个参数同时存在时ForceWeapon.InRange仅用于对地。Force(AA)Weapon.InRange.Overrides用于覆盖武器Range的数值参与武器选取。列表中的数值与Force(AA)Weapon.InRange中的武器序号一一对应,如果一个武器的对应的值小于 0 或不存在那么使用武器自身的Range。如果
Force(AA)Weapon.InRange.ApplyRangeModifiers设为 true 则任何来自开火者的武器射程加成也将参与射程判定。
一系列根据目标类型强制使用特定武器的标签:
ForceWeapon.Naval.Units强制指定对Naval=yes的单位所使用的武器。优先级高于ForceWeapon.Units。ForceWeapon.Defenses是ForceWeapon.Buildings针对BuildCat=Combat类建筑目标的分离设置,不启用即沿用后者。ForceWeapon.Infantry/Units/Aircraft在未设置ForceAAWeapon.Infantry/Units/Aircraft时同时控制对空对地。ForceAAWeapon.Infantry/Units/Aircraft是ForceWeapon.Infantry/Units/Aircraft的对空版本。当两个参数同时存在时后者仅用于对地。
在 rulesmd.ini:
[SOMETECHNO] ; TechnoType
ForceWeapon.Naval.Decloaked=-1 ; integer, -1 to disable
ForceWeapon.Cloaked=-1 ; integer, -1 to disable
ForceWeapon.Disguised=-1 ; integer, -1 to disable
ForceWeapon.UnderEMP=-1 ; integer, -1 to disable
ForceWeapon.InRange= ; List of integers
ForceWeapon.InRange.Overrides= ; List of floating-point values
ForceWeapon.InRange.ApplyRangeModifiers=false ; boolean
ForceWeapon.InRange.TechnoOnly=true ; boolean
ForceAAWeapon.InRange= ; List of integers
ForceAAWeapon.InRange.Overrides= ; List of floating-point values
ForceAAWeapon.InRange.ApplyRangeModifiers=false ; boolean
ForceWeapon.Buildings=-1 ; integer, -1 to disable
ForceWeapon.Defenses=-1 ; integer, -1 to disable
ForceWeapon.Infantry=-1 ; integer, -1 to disable
ForceWeapon.Naval.Units=-1 ; integer, -1 to disable
ForceWeapon.Units=-1 ; integer, -1 to disable
ForceWeapon.Aircraft=-1 ; integer, -1 to disable
ForceAAWeapon.Infantry=-1 ; integer, -1 to disable
ForceAAWeapon.Units=-1 ; integer, -1 to disable
ForceAAWeapon.Aircraft=-1 ; integer, -1 to disable
备注
特别说明,如果某个位置的 Force(AA)Weapon.InRange 设为 -1 而 Force(AA)Weapon.InRange.Overrides 为正值,那么在满足条件时使用默认的武器选取规则。
快速进入载具/建筑
现在你可以让步兵或载具类载员无需排队地快速进入或离开运输载具/建筑。
在 rulesmd.ini:
[General]
NoQueueUpToEnter=false ; boolean
NoQueueUpToUnload=false ; boolean
NoQueueUpToEnter.Buildings= ; boolean, default to NoQueueUpToEnter
NoQueueUpToUnload.Buildings= ; boolean, default to NoQueueUpToUnload
[SOMEVEHICLE/SOMEBUILDING] ; VehicleType/BuildingType, transport
NoQueueUpToEnter= ; boolean, default to [General] -> NoQueueUpToEnter(.Buildings)
NoQueueUpToUnload= ; boolean, default to [General] -> NoQueueUpToUnload(.Buildings)
初始子机数量
现在可以设置子机发射器的初始子机数量,而不再总是初始满载。如果初始数量大于
SpawnsNumber则无效。
在 rulesmd.ini:
[SOMETECHNO] ; TechnoType
InitialSpawnsNumber= ; integer
科技类型与克隆步兵的初始血量
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 则对象死亡。OnOwnerChange:该对象所属方发生变更。OnOwnerChange.HumanToComputer/ComputerToHuman:该对象的所属方从人类玩家转为 AI 玩家或从 AI 玩家转为人类玩家。若未设置则默认同OnOwnerChange。
AfterDelay:如果倒计时(以帧为单位)达到 0 则对象死亡。TechnosExist/TechnosDontExist:如果科技类型分别存在或不存在则对象死亡。Technos(Dont)Exist.Any控制需要列出的单个科技类型还是所有科技类型来满足条件。Technos(Dont)Exist.AllowLimboed控制是否计入虚拟的科技类型(例如在运输工具中的那些)。Technos(Dont)Exist.Houses控制检查哪些所属方。
自毁行为有以下选择:
kill:对象将正常摧毁。vanish:对象将被直接从游戏中静默移除而不是真正击杀。sell:如果对象是拥有建造动画的 建筑,它将被出售而不是被摧毁。
如果未设置此项那么自毁逻辑将不会启用。如果选择
vanish行为,那么可以使用AutoDeath.VanishAnimation设置自毁时播放的动画。如果列出了多个动画,则将随机选择一个。此逻辑还支持通过 虚拟投放 提供的建筑。不过这种情况下所有
AutoDeath.Behavior值都将只是使建筑简单地移除。
在 rulesmd.ini:
[SOMETECHNO] ; TechnoType
AutoDeath.Behavior= ; enumeration (kill | vanish | sell), default not set
AutoDeath.VanishAnimation= ; List of AnimationTypes
AutoDeath.OnAmmoDepletion=false ; boolean
AutoDeath.OnOwnerChange=false ; boolean
AutoDeath.OnOwnerChange.HumanToComputer= ; boolean, default to AutoDeath.OnOwnerChange
AutoDeath.OnOwnerChange.ComputerToHuman= ; boolean, default to AutoDeath.OnOwnerChange
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)
备注
请注意 如果你没有使用 Ares 3.0+ 那么对于携带载员的单位即使使用 kill 行为载员也不会被释放。
低优先级部署
现在你可以为单位在部署行为中设置低优先级,这意味着如果它与其他单位一同被选中那么不会与其他单位一起执行部署指令。这不影响通过光标下达部署指令,这种情况本就不需要事先选中其他对象。
在 rulesmd.ini:
[SOMETECHNO] ; TechnoType
LowDeployPriority=false ; boolean
此行为设计为可由用户切换。目前你只能通过客户端或进行手动设置。
在 RA2MD.INI:
[Phobos]
PriorityDeployFiltering=true ; boolean
心灵控制增强
幻想奇遇 中的心灵控制范围限制
幻想奇遇 中的多重心控单位自动释放第一个受害者
心灵控制者现在可以设置控制距离的上限。标签值大于 0 将激活此功能。
被 心灵控制的单位可以拥有被心控尺寸,就像乘客相对运输工具的那种。
心灵控制者现在可以设置哪些所属方可以看到它与被心灵控制单位之间的连线。
多重心控单位现在可以达到控制上限而又要控制一个新目标时释放第一个被控制的单位。
在 rulesmd.ini:
[SOMETECHNO] ; TechnoType, as Mind controllers
MindControlRangeLimit=-1.0 ; floating point value
MindControl.IgnoreSize=true ; boolean
MindControlLink.VisibleToHouse=all ; Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
MultiMindControl.ReleaseVictim=false ; boolean
[SOMETECHNO] ; TechnoType, as Mind controlled targets
MindControlSize=1 ; integer
多武器
@暴风硫 在 零点界限 中使用多武器逻辑来实现对不同目标使用不同武器
现在你可以使用
WeaponX来为一个单位启用 2 种以上的武器而无需原先硬编码的Gunner=yes、IsGattling=yes或IsChargeTurret=yes这些启用语句。设置
MultiWeapon=yes来启用此功能,注意别忘了设置WeaponCount。MultiWeapon.IsSecondary指定在选择武器或触发步兵SecondaryFire时哪些武器被视为Secondary,若不设置则使用Weapon1。MultiWeapon.SelectCount决定默认武器选用逻辑下可以被考虑使用的武器数量。设置过高会导致性能问题。如果该值小于武器数量那么将会优先选择索引序号更小的武器。
其他武器仍可通过 对特定目标使用特定武器 等指定武器索引序号的逻辑来使用。
在 rulesmd.ini:
[SOMETECHNO] ; TechnoType
MultiWeapon=false ; boolean
MultiWeapon.IsSecondary= ; List of integers
MultiWeapon.SelectCount=2 ; integer
多武器的攻击指令音效
单位可以在使用更多武器时自定义各武器下达攻击指令时的音效。
如果你需要为
Weapon1分配攻击音效那么直接设置VoiceWeapon1Attack即可。其他武器同理。也可使用
VoiceEliteWeaponNAttack指定用于EliteWeaponN的音效。默认使用VoiceWeaponNAttack。
在 rulesmd.ini:
[SOMETECHNO] ; TechnoType
VoiceWeaponNAttack= ; Sound entry
VoiceEliteWeaponNAttack= ; Sound entry
禁止手动移动
现在你可以指定一个科技类型是否无法接收移动指令。
在一个拥有
UndeploysInto的建筑上将此设为 true 可以阻止其在设置集结点时反部署。
在 rulesmd.ini:
[SOMETECHNO] ; TechnoType
NoManualMove=false ; boolean
备注
注意你仍可使用一个 BuildingUndeploy=true 的弹头或设置集结点后出售建筑来解除部署。
EMP 或超时空停止 CD
现在你可以让科技类型在 EMP 或被超时空武器冻结时武器 ROF 与弹药 Reload 也同步停止。默认值取自
[General]。这对机场战机的重新装填无效。
在 rulesmd.ini:
[General]
NoRearm.UnderEMP=false ; boolean
NoRearm.Temporal=false ; boolean
NoReload.UnderEMP=false ; boolean
NoReload.Temporal=false ; boolean
[SOMETECHNO] ; TechnoType
NoRearm.UnderEMP= ; boolean
NoRearm.Temporal= ; boolean
NoReload.UnderEMP= ; boolean
NoReload.Temporal= ; boolean
自定义脑车过载
现在可以为一个使用
InfiniteMindControl=yes武器的单位自定义其过载相关特性。
在 rulesmd.ini:
[SOMETECHNO] ; TechnoType
Overload.Count= ; List of integers, default to [CombatDamage] -> OverloadCount
Overload.Damage= ; List of integers, default to [CombatDamage] -> OverloadDamage
Overload.Frames= ; List of integers, default to [CombatDamage] -> OverloadFrames
Overload.DeathSound= ; Sound entry, default to [AudioVisual] -> MasterMindOverloadDeathSound
Overload.ParticleSys= ; ParticleSystemType, default to [CombatDamage] -> DefaultSparkSystem
Overload.ParticleSysCount=5 ; integer
子机升级
幻想奇遇 中的子机同步升级
生成的单位可以根据其所有者的等级进行同步升级。
在 rulesmd.ini:
[SOMETECHNO] ; TechnoType
Promote.IncludeSpawns=false ; boolean
升级动画
现在你可以在单位或建筑升级时播放指定动画。
Promote.VeteranAnimation用于单位或建筑升级为老兵时。若为单位设置本句则覆盖全局[AudioVisual]中的设置。如果列出了多个动画,则将随机选择一个。Promote.EliteAnimation用于单位或建筑升级为精英时。若为单位设置本句则覆盖全局[AudioVisual]中的设置。如果列出了多个动画,则将随机选择一个。如果未定义
Promote.EliteAnimation则使用Promote.VeteranAnimation。
在 rulesmd.ini:
[AudioVisual]
Promote.VeteranAnimation= ; List of AnimationTypes
Promote.EliteAnimation= ; List of AnimationTypes
[SOMETECHNO] ; TechnoType
Promote.VeteranAnimation= ; List of AnimationTypes, default to Promote.VeteranAnimation in [AudioVisual]
Promote.EliteAnimation= ; List of AnimationTypes, default to Promote.EliteAnimation in [AudioVisual]
单位受伤警报
在原版,非建筑科技类型在收到攻击时不会生成雷达事件或 EVA 播报,因此它们很难在被摧毁前被玩家注意到。现在当你的单位受到攻击时可以收到雷达事件(以及可选的声音效果),以便及时应战。
[AudioVisual] -> CombatAlert是一个全局开关,将其设置为true以启用整个逻辑。这些标签控制什么时候触发战斗警报。
你可以通过将
[TechnoType] -> CombatAlert设置为false来为特定科技类型禁用此逻辑,默认为[AudioVisual] -> CombatAlert.Default。如果CombatAlert.Default也为空,则默认为对Insignificant=yes或Spawned=yes的科技类型禁用。[AudioVisual] -> CombatAlert.IgnoreBuilding将在建筑上关闭此逻辑,你可以通过设置[TechnoType] -> CombatAlert.NotBuilding为true来为特定建筑覆盖设置。你可能希望将其用于载具性质的建筑。[AudioVisual] -> CombatAlert.SuppressIfInScreen决定是否为当前屏幕中的单位禁用此逻辑。[AudioVisual] -> CombatAlert.Interval决定警报之间的间隔(以帧为单位),以防止警报过于频繁。默认为 150 帧。[AudioVisual] -> CombatAlert.SuppressIfAllyDamage决定是否为盟友造成的伤害禁用此逻辑。科技类型被拥有
[WarheadType] -> CombatAlert.Suppress设置为true的弹头击中将不会触发雷达事件或 EVA。此标签默认为 Ares 标签[WarheadType] -> Malicious的相反值和[WarheadType] -> Nonprovocative的值。
以下标签控制战斗警报的效果。
[AudioVisual] -> CombatAlert.MakeAVoice决定是否与战斗警报一起播放一些音效。将其设为 true 以启用以下标签,否则它们将被忽略。[TechnoType] -> CombatAlert.UseFeedbackVoice决定是否使用VoiceFeedback定义的声音。默认为[AudioVisual] -> CombatAlert.UseFeedbackVoice。[TechnoType] -> CombatAlert.UseAttackVoice决定是否使用VoiceAttack定义的声音。默认为[AudioVisual] -> CombatAlert.UseAttackVoice。[TechnoType] -> CombatAlert.UseEVA决定是否使用 EVA。默认为[AudioVisual] -> CombatAlert.UseEVA。所用的 EVA 默认为EVA_UnitsInCombat,可以通过[TechnoType] -> CombatAlert.EVA指定。声音效果 依次 被使用,首先是反馈,然后是攻击,最后是 EVA。在
[AudioVisual]中的标签控制是否全局检查,可以为每个科技类型单独指定。一个示例:你设置了
CombatAlert.UseFeedbackVoice和CombatAlert.UseEVA为true,CombatAlert.UseAttackVoice为false。拥有VoiceFeedback、VoiceAttack和CombatAlert.EVA的单位将播放VoiceFeedback。拥有VoiceAttack的单位将播放EVA_UnitsInCombat。
在 rulesmd.ini:
[AudioVisual]
CombatAlert=false ; boolean
CombatAlert.Default= ; boolean
CombatAlert.IgnoreBuilding=true ; boolean
CombatAlert.SuppressIfInScreen=true ; boolean
CombatAlert.Interval=150 ; integer, game frames
CombatAlert.SuppressIfAllyDamage=true ; boolean
CombatAlert.MakeAVoice=true ; boolean
CombatAlert.UseFeedbackVoice=true ; boolean
CombatAlert.UseAttackVoice=true ; boolean
CombatAlert.UseEVA=true ; boolean
[SOMETECHNO] ; TechnoType
CombatAlert= ; boolean
CombatAlert.NotBuilding=false ; boolean
CombatAlert.UseFeedbackVoice=true ; boolean
CombatAlert.UseAttackVoice=true ; boolean
CombatAlert.UseEVA=true ; boolean
CombatAlert.EVA=EVA_UnitsInCombat ; EVA entry
[SOMEWARHEAD] ; WarheadType
CombatAlert.Suppress= ; boolean
重置连发索引
现在你可以让单位在更换了开火武器或一段时间(取上一次发射武器的
ROF与 30 帧之间的较大值)内没有目标的情况下重置当前的连发索引。
在 rulesmd.ini:
[General]
RecountBurst=false ; boolean
[SOMETECHNO] ; TechnoType
RecountBurst= ; boolean, default to [General] -> RecountBurst
变形后重置心控效果
单位变形完毕后其心控效果可被重置。
如果变形后的单位所有弹头都没有
MindControl=yes,那么Convert.ResetMindControl=yes将释放所有被心控的单位。如果变形后的单位任意弹头拥有
MindControl=yes,那么Convert.ResetMindControl=yes将重置最大控制数量上限。如果变形后的单位所有武器都没有
InfiniteMindControl=yes,那么Convert.ResetMindControl=yes将释放超出上限的被心控单位。
在 rulesmd.ini:
[SOMETECHNO] ; TechnoType, before conversion
Convert.ResetMindControl=false ; boolean
复仇武器
RA2: Reboot 中的复仇武器
类似于
DeathWeapon,它在科技类型被击杀后发射,但不同的是它将发射给造成伤害并杀死科技类型的人。如果科技类型不是由于其他科技类型造成的直接伤害而死亡,那么RevengeWeapon将不会被发射。RevengeWeapon.AffectsHouse可用于筛选可以对哪些所属方的击杀者发射武器。也可以通过 Attach Effect 来授予复仇武器。
如果弹头
SuppressRevengeWeapons设为 true 则不会触发复仇武器。SuppressRevengeWeapons.Types可用于列出受影响的武器类型,如果没有列出,则所有武器类型都受影响。
在 rulesmd.ini:
[SOMETECHNO] ; TechnoType
RevengeWeapon= ; WeaponType
RevengeWeapon.AffectsHouse=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
狂暴单位索敌限制
现在你可以设定狂暴单位可以对哪些所属方的目标索敌和开火。
在 rulesmd.ini:
[General]
BerzerkTargeting=all ; Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
马夫逻辑
可以让单位实时将自身脚下的矿石直接转化为资金,就像《凯恩之怒》中 GDI 的 MARV 那样。
TiberiumEater.TransDelay指定了两次吃矿之间间隔的帧数,0 代表逐帧。负值禁用。TiberiumEater.CellN用于设定吃矿位置以单元格为单位的偏移列表,N为 0 始序号,数值表示相对于单位所在单元格的偏移坐标。如果不设置则只吃脚下的。TiberiumEater.AmountPerCell控制单次吃矿对与每个单元格而言可吃进去的矿石量上限。负值喂不饱。默认通过此方式采集的矿石价值与常规采矿相同。这可以通过
TiberiumEater.CashMultiplier加以调整。若
TiberiumEater.Display设为 true 则每次吃矿时都会飘起一个代表所得总资金量的数字。TiberiumEater.Display.Houses决定了哪些所属方能看见。
每次吃矿时都会在被吃的单元格播放动画。若
TiberiumEater.Anims包含 8 个条目则根据单位当前朝向选择动画,否则随机选取。若设置了
TiberiumEater.Anims.TiberiumN则在吃进去对应类型(N=[0,3])的矿石时使用对应序列的TiberiumEater.Anims。若
TiberiumEater.AnimMove设为 true 则动画会跟随单位移动。
在 rulesmd.ini:
[SOMETECHNO] ; InfantryType, VehicleType or AircraftType
TiberiumEater.TransDelay=-1 ; integer
TiberiumEater.CellN= ; X,Y - cell offset
TiberiumEater.CashMultiplier=1.0 ; floating point value
TiberiumEater.AmountPerCell=0 ; integer
TiberiumEater.Display=true ; boolean
TiberiumEater.Display.Houses=all ; List of Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
TiberiumEater.Anims= ; List of AnimationTypes
TiberiumEater.Anims.Tiberium0= ; List of AnimationTypes
TiberiumEater.Anims.Tiberium1= ; List of AnimationTypes
TiberiumEater.Anims.Tiberium2= ; List of AnimationTypes
TiberiumEater.Anims.Tiberium3= ; List of AnimationTypes
TiberiumEater.AnimMove=true ; boolean
武器在传送时开火
现在可以在科技类型传送来/去时发射武器。它们会与相应的 (
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
地形对象
摧毁动画与音效
现在你可以指定当地形对象被摧毁时播放播放的摧毁动画与音效。如果列出了多个动画,则将随机选择一个。
如果
DestroyAnim中列出了多个动画,则将随机选择一个。
在 rulesmd.ini:
[SOMETERRAINTYPE] ; TerrainType
DestroyAnim= ; List of AnimationTypes
DestroySound= ; Sound entry
载具类型
两栖载具装载拓展
现在两栖步兵或载具可以在水中进入或离开两栖运输工具。
在 rulesmd.ini:
[General]
AmphibiousEnter=false ; boolean
AmphibiousUnload=false ; boolean
[SOMEVEHICLE] ; VehicleType, transport
AmphibiousEnter= ; boolean, default to [General] -> AmphibiousEnter
AmphibiousUnload= ; boolean, default to [General] -> AmphibiousUnload
基于弹药量的自动部署与禁用部署
现可为可部署(
DeploysInto、DeployFire、IsSimpleDeployer以及那些有乘客的)载具设定根据当前弹药量自动部署或禁用部署Ammo.AutoDeployMinimumAmount&Ammo.AutoDeployMaximumAmount分别设定载具自动部署所需的最低与最高弹药量阈值,负值表示禁用检查。Ammo.DeployUnlockMinimumAmount&Ammo.DeployUnlockMaximumAmount分别设定载具启用部署功能所需的最低与最高弹药量阈值,负值表示禁用检查。
在 rulesmd.ini:
[SOMEVEHICLE] ; VehicleType
Ammo.AutoDeployMinimumAmount=-1 ; integer
Ammo.AutoDeployMaximumAmount=-1 ; integer
Ammo.DeployUnlockMinimumAmount=-1 ; integer
Ammo.DeployUnlockMaximumAmount=-1 ; integer
自定义悬浮载具溺死
HoverDrownable允许自定义悬浮载具在水域上失灵时是否会溺死。
在 rulesmd.ini:
[SOMEVEHICLE] ; VehicleType
HoverDrownable=true ; boolean
载具伤残更换图像
现在当载具伤残(生命值低于
[AudioVisual] -> ConditionYellow的百分比)时可以通过Image.ConditionYellow为载具设置不同的图像。同样的如果载具生命值低于
[AudioVisual] -> ConditionRed的百分比那么将会使用Image.ConditionRed作为图像。类似于 Ares 的
WaterImage,可以通过设置WaterImage.ConditionYellow和WaterImage.ConditionRed的载具类型来在水上应用这一效果。
在 rulesmd.ini:
[SOMEVEHICLE] ; VehicleType
Image.ConditionYellow= ; VehicleType entry
Image.ConditionRed= ; VehicleType entry
WaterImage.ConditionYellow= ; VehicleType entry
WaterImage.ConditionRed= ; VehicleType entry
警告
注意这些被使用的载具必须在 [VehicleTypes] 下注册并且在常规/伤残状态下使用相同的图像类型(Shape/Voxel)。
载具类型默认幻影伪装
现在可以单独为每个载具类型设置其
DefaultMirageDisguises。
在 rulesmd.ini:
[SOMEVEHICLE] ; VehicleType
DefaultMirageDisguises= ; List of TerrainTypes
独立的 Shape 载具炮塔文件
Shape 有炮塔载具支持使用
*tur.shp文件。。若 Shape 载具在绘制炮塔时存在名为
*tur.shp的 Shape 文件,则炮塔从该文件的第 0 帧开始;否则它仍然开始自 Shape 载具本体图像的第WalkFrames * Facings帧(0 始序列)。如果你想要将现有 Shape 文件拆分成两部分,那么只需要从原文件中分离作为炮塔图像的 32 帧及其对应的 32 帧影子图像,再将其合并成一个新的 Shape 文件即可。
当需要更改载具所使用的炮塔时,将其分为两个文件有助于简化操作。
Jumpjet 在移动时倾斜
冲击计划:征服 中的 Jumpjet 前倾
现在你可以通过将
JumpjetTilt设为 true 来使 Jumpjet 单位在向前移动时前倾以及在转向时侧倾。最大倾斜角度不会超过 90 度。
向前倾斜的幅度与当前速度和加速度相关。它们会相加,这里给出两个用于细节调整的系数。
侧向倾斜的幅度与当前速度和旋转角度相关。它们会相乘,同样给出两个用于细节调整的系数。
在 rulesmd.ini:
[SOMEVEHICLE] ; VehicleType, with Locomotor=Jumpjet
JumpjetTilt=false ; boolean
JumpjetTilt.ForwardAccelFactor=1.0 ; floating point value
JumpjetTilt.ForwardSpeedFactor=1.0 ; floating point value
JumpjetTilt.SidewaysRotationFactor=1.0 ; floating point value
JumpjetTilt.SidewaysSpeedFactor=1.0 ; floating point value
炮塔响应
你可以自定义当载具丢失目标时炮塔方向是否回正(与车身对齐)
若
Speed=0或单位由于MovementRestrictedTo导致无法移动,则默认 no;否则默认 yes。
在 rulesmd.ini:
[SOMEVEHICLE] ; VehicleType
TurretResponse= ; boolean
无炮塔 Shape 载具开火前摇
@暴风硫 在 零点界限 中为 Shape 载具类型的机甲单位使用开火前摇效果
现在
Voxel=no的无炮塔载具已经支持FireUp。FireUp.ResetInRetarget决定当前载具目标改变时其前摇是否重置。失去目标强制重置。
在 artmd.ini:
[SOMEVEHICLE] ; VehicleType
FireUp= ; integer
FireUp.ResetInRetarget=true ; boolean
弹头
提示
所有新增的弹头效果
可在适用的情况下与
CellSpread和 Ares 的通用弹头超级武器一起使用。不能与 Ares 的
MindControl.Permanent=yes共同使用。在适用的情况下除非
EffectsRequireVerses设为false否则尊重Verses。如果目标拥有一个激活的 护盾,那么它的护甲类型将被使用,除非弹头可以穿透护盾。
允许将建筑所受的 AOE 伤害合而为一
弹头现在可以在
MergeBuildingDamage设为 true 时通过合并 AOE 伤害来仅对建筑造成单次杀伤,其默认同[CombatDamage] -> MergeBuildingDamage。
在 rulesmd.ini:
[CombatDamage]
MergeBuildingDamage=false ; boolean
[SOMEWARHEAD] ; WarheadType
MergeBuildingDamage= ; boolean
备注
这是与
CellSpread.MaxAffect不同的机制。由于原本的部分杀伤被取整消去,开启本功能后所造成的杀伤可能略有增大。
Allow warhead to only affect invoker
In the past, modders used many methods such as
Droppingand extremely smallCellSpreadto prevent a weapon fired by a unit from affecting others, thereby achieving complex combination logic. However, existing methods merely reduced the range of affected objects through various means. Now, you can directly use the following flag to check whether the victim is the unit itself:AffectsInvokerOnlycan be used to make the affected object only the unit itself.AffectsInvokerOnly.Reversecan be used to exclude the unit from the affected objects.AffectsInvokerOnly.IgnoreInvokerStatecan be used to determine whether to consistently avoid affecting other objects regardless of the unit’s state.
[CombatDamage]
AffectsInvokerOnly.IgnoreInvokerState=true ; boolean
[SOMEWARHEAD] ; WarheadType
AffectsInvokerOnly=false ; boolean
AffectsInvokerOnly.Reverse=false ; boolean
AffectsInvokerOnly.IgnoreInvokerState= ; boolean, default to [CombatDamage] -> AffectsInvokerOnly.IgnoreInvokerState
提示
If you have enabled ApplyPerTargetEffectsOnDetonate to make affects handling completely follow damage propagation, then most of the time you can just use DamageSelf and AllowDamageOnSelf without needing AffectsInvokerOnly.Reverse.
解除心控
RA2: Reboot 中的心控解除弹头
弹头现在可以解除心灵控制(不适用于永久心控的对象)。
RemoveMindControl和MindControl.Permanent都会移除目标原本的常规心灵控制效果并播放MindClearedSound音效。现在这可以通过RemoveMindControl.Silent进行定义,对于移除常规心控的情况默认为[AudioVisual] -> RemoveMindControl.Silent,对于使用永久心灵控制取代常规心灵控制的情况则默认为[AudioVisual] -> MindControl.Permanent.ReplaceSilent。
提示
你可以单纯用这个语句来减少一些噪音,也可以在屏蔽原音效的同一时机播放另一个音效……
在 rulesmd.ini:
[AudioVisual]
RemoveMindControl.Silent=false ; boolean
MindControl.Permanent.ReplaceSilent=false ; boolean
[SOMEWARHEAD] ; WarheadType
RemoveMindControl=false ; boolean
RemoveMindControl.Silent= ; boolean, normal removal defaults to [AudioVisual] -> RemoveMindControl.Silent, permanent replacement defaults to [AudioVisual] -> MindControl.Permanent.ReplaceSilent
弹头范围增强
在原版中,范围伤害的杀伤区域是一个球形。某些例如你希望制作一个给目标区域上 Buff 的弹头超武的时候空中单位的受益范围总是比地面单位更小。现在你可以使用新语句
CellSpread.Cylinder来解决这一问题。AffectsAir允许你制作一个仅可杀伤 208 高度以上单位的弹头。AffectsGround允许你制作一个仅可杀伤 208 高度以下单位的弹头。
在 rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
CellSpread.Cylinder=false ; boolean
AffectsAir=true ; boolean
AffectsGround=true ; boolean
备注
这些功能不会覆盖 Ares 语句
DamageAirThreshold的效果:除非同时设置DamageAirThreshold=-1,否则一个在地面引爆的弹头即使拥有CellSpread.Cylinder也无法作用于空中单位。这些功能同样作用于相关的 Phobos 弹头效果。由于技术限制,这不包括 EMP 和 铁幕等 Ares 弹头效果
暴击
现在弹头可以基于概率额外造成暴击伤害或弹头爆炸,可以自定义暴击的概率、伤害、影响目标、受影响目标生命值阈值和暴击动画。
Crit.Chance决定暴击发生的概率。默认情况下这在弹头爆炸时检查一次,每个受影响的目标都可能受到暴击。如果设置了Crit.ApplyChancePerTarget,那么每个目标是否成功进行暴击的概率将单独计算。Crit.ExtraDamage决定暴击造成的额外伤害,如果设置了Crit.Warhead,那么伤害将用于在每个受影响的目标上引爆指定的弹头,否则伤害将基于当前弹头的Verses设置直接造成伤害。Crit.ExtraDamage.ApplyFirepowerMult决定暴击造成的额外伤害是否受益于科技类型所拥有的火力加成。Crit.Warhead可用于设置一个替代当前弹头引爆的弹头。Crit.Warhead.FullDetonation控制弹头是否在目标上完全引爆(作为虚拟武器的一部分)或者只能对所在区域造成杀伤并应用 Phobos 的弹头效果。Crit.AffectsTarget可用于自定义此弹头可暴击的目标类型。暴击不能影响空置单元格或仅包含地形对象和覆盖物等的单元格。Crit.AffectsHouse可用于自定义此弹头可暴击的目标所属。Crit.AffectsBelowPercent和Crit.AffectsAbovePercent用于设置可被暴击影响的单位其当前血量所占百分比必须高于和/或低于/等于的限制。若目标血量为 0 则跳过该检查。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.ExtraDamage.ApplyFirepowerMult=false ; boolean
Crit.Warhead= ; WarheadType
Crit.Warhead.FullDetonation=true ; boolean
Crit.AffectsTarget=all ; List of Affected Target Enumeration (none|land|water|infantry|units|buildings|all)
Crit.AffectsHouse=all ; List of Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
Crit.AffectsBelowPercent=1.0 ; floating point value, percents or absolute (0.0-1.0)
Crit.AffectsAbovePercent=0.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.AffectsHouse指定哪些所属方的单位可以被转换。若只指定一组转换则
Convert.From、Convert.To和Convert.AffectsHouse(不带序号)相当于Convert0.From、Convert0.To和Convert0.AffectsHouse的别称。
例如这个弹头可以将所有被影响的己方和友方 SOLDIERA 和 SOLDIERB 转换为 NEWSOLDIER:
[ExampleWH]
Convert.From=SOLDIERA,SOLDIERB
Convert.To=NEWSOLDIER
Convert.AffectsHouse=team
在 rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
ConvertN.From= ; List of TechnoTypes
ConvertN.To= ; TechnoType
ConvertN.AffectsHouse=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.AffectsHouse=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= ; List of AnimationTypes, default to [CombatDamage] -> SplashList
SplashList.PickRandom=false ; boolean
伤害修正比
现在弹头可以定义对己方所属、友方所属、敌方所属的额外伤害倍率。
DamageOwnerMultiplier.NotAffectsEnemies和DamageAlliesMultiplier.NotAffectsEnemies用于设定弹头AffectsEnemies=false时的默认值。DamageOwnerMultiplier.Berzerk、DamageAlliesMultiplier.Berzerk和DamageEnemiesMultiplier.Berzerk在单位处于狂暴状态时被使用。
一个基于开火者或目标剩余血量的额外伤害倍率将被纳入总倍率计算。具体而言:伤害倍率将先增加
(开火者剩余血量比 * DamageSourceHealthMultiplier),再增加(目标剩余血量比 * DamageTargetHealthMultiplier)。这些修正不会影响无视防御的伤害,例如
Suicide等。
在 rulesmd.ini:
[CombatDamage]
DamageOwnerMultiplier=1.0 ; floating point value
DamageAlliesMultiplier=1.0 ; floating point value
DamageEnemiesMultiplier=1.0 ; floating point value
DamageOwnerMultiplier.NotAffectsEnemies= ; floating point value, default to [CombatDamage] -> DamageOwnerMultiplier
DamageAlliesMultiplier.NotAffectsEnemies= ; floating point value, default to [CombatDamage] -> DamageAlliesMultiplier
DamageOwnerMultiplier.Berzerk= ; floating point value, default to [CombatDamage] -> DamageOwnerMultiplier
DamageAlliesMultiplier.Berzerk= ; floating point value, default to [CombatDamage] -> DamageAlliesMultiplier
DamageEnemiesMultiplier.Berzerk= ; floating point value, default to [CombatDamage] -> DamageEnemiesMultiplier
[SOMEWARHEAD] ; WarheadType
DamageOwnerMultiplier= ; floating point value, default to [CombatDamage] -> DamageOwnerMultiplier or [CombatDamage] -> DamageOwnerMultiplier.NotAffectsEnemies, depending on AffectsEnemies
DamageAlliesMultiplier= ; floating point value, default to [CombatDamage] -> DamageAlliesMultiplier or [CombatDamage] -> DamageAlliesMultiplier.NotAffectsEnemies, depending on AffectsEnemies
DamageEnemiesMultiplier= ; floating point value, default to [CombatDamage] -> DamageEnemiesMultiplier
DamageOwnerMultiplier.Berzerk= ; floating point value, default to [CombatDamage] -> DamageOwnerMultiplier.Berzerk
DamageAlliesMultiplier.Berzerk= ; floating point value, default to [CombatDamage] -> DamageAlliesMultiplier.Berzerk
DamageEnemiesMultiplier.Berzerk= ; floating point value, default to [CombatDamage] -> DamageEnemiesMultiplier.Berzerk
DamageSourceHealthMultiplier=0.0 ; floating point value
DamageTargetHealthMultiplier=0.0 ; floating point value
备注
DamageAlliesMultiplier 不会像旧有的 AffectsAllies 那样作用于友方单位的同时还带上己方单位。
杀伤地下单位
现在你可以让弹头对处于地下的单位造成伤害!
若需允许武器瞄准地下单位,你需要在抛射体上将 AU 设为
yes。
注意如果弹头在地下引爆其动画效果可能显示异常。
你可以使用
[WarheadType] -> PlayAnimUnderground=false来阻止弹头在地下引爆时播放动画。你也可以使用
[WarheadType] -> PlayAnimAboveSurface=true来使弹头在地下引爆时在其正上方地表处播放弹头动画。
在 rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
AffectsUnderground=false ; boolean
PlayAnimUnderground=true ; boolean
PlayAnimAboveSurface=false ; boolean
全图弹头
设置
DetonateOnAllMapObjects为 true 允许由抛射体引爆的弹头(例如这不包括动画直接挂Warhead和 Ares 通用弹头超武所引爆的弹头,但包括Crit.Warhead和动画Weapon(最好带有Damage.DealtByInvoker=true以避免部分特殊情况)所引爆的弹头)以及随之在后的任何AirburstWeapon/ShrapnelWeapon,无论其实际目标如何,都可以对当前地图上所有存在且没死的对象进行引爆,并可以对目标进行筛选。注意,这是在弹头引爆之前的瞬间完成的,因此PreImpactAnim(Ares 功能)可以显示。DetonateOnAllMapObjects.Full自定义弹头是否在目标上完全引爆(作为虚拟武器的一部分)或者只能对所在区域造成杀伤并应用 Phobos 的弹头效果。DetonateOnAllMapObjects.AffectsTarget用于在非none时筛选哪些类型的目标(科技类型)可被视为有效。仅none、all、aircraft、buildings、infantry和units是有效值。默认为none,因为包含所有对象类型可能会影响性能。DetonateOnAllMapObjects.AffectsHouse用于在非none时筛选哪些所属方的目标可以被视为有效。仅适用于发射弹头的所属方已知的情况。默认为none,因为包含所有所属方可能会影响性能。DetonateOnAllMapObjects.AffectTypes可用于列出特定的科技类型作为有效目标。如果列出了任何有效科技类型,则只有匹配的对象才会被作为目标。注意DetonateOnAllMapObjects.AffectsTarget和DetonateOnAllMapObjects.AffectsHouse的优先级高于此设置。DetonateOnAllMapObjects.IgnoreTypes可用于列出特定的科技类型不得作为目标。DetonateOnAllMapObjects.RequireVerses如果设为 true 则只考虑弹头对其护甲类型具有非零Verses值的目标为有效。对于具有激活状态护盾的目标除非弹头拥有Shield.Penetrate=true,否则使用护盾的护甲类型。在所有上述筛选之后进行检查。
在 rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
DetonateOnAllMapObjects=false ; boolean
DetonateOnAllMapObjects.Full=true ; boolean
DetonateOnAllMapObjects.AffectsTarget=none ; List of Affected Target Enumeration (none|aircraft|buildings|infantry|units|all)
DetonateOnAllMapObjects.AffectsHouse=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 谨慎使用并通过筛选语句进行限制。
击杀武器
被此弹头击杀时目标单位会爆出
KillWeapon指定的武器。如果可以追溯到弹头来自哪个单位,那么
KillWeapon.OnFirer可以让武器发射在开火者的位置。如果追溯不到来源那么将不会发射。KillWeapon.AffectsHouse/KillWeapon.OnFirer.AffectsHouse和KillWeapon.OnFirer.AffectsTarget/KillWeapon.OnFirer.AffectsTarget分别用于筛选哪些所属方和哪些类型的目标可以触发KillWeapon与KillWeapon.OnFirer。如果这个弹头的来源不是另一个单位,发射
KillWeapon将不受目标所属方或类型的限制。
如果单位
SuppressKillWeapons设为 true 则其被击杀时不会触发KillWeapon或KillWeapon.OnFirer。SuppressKillWeapons.Types可用于列出受影响的武器类型,如果没有列出,则所有武器类型都受影响。
在 rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
KillWeapon= ; WeaponType
KillWeapon.OnFirer= ; WeaponType
KillWeapon.AffectsHouse=all ; List of Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
KillWeapon.OnFirer.AffectsHouse=all ; List of Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
KillWeapon.AffectsTarget=all ; List of Affected Target Enumeration (none|aircraft|buildings|infantry|units|all)
KillWeapon.OnFirer.AffectsTarget=all ; List of Affected Target Enumeration (none|aircraft|buildings|infantry|units|all)
[SOMETECHNO] ; TechnoType
SuppressKillWeapons=false ; boolean
SuppressKillWeapons.Types= ; List of WeaponTypes
撒币枪(弹)
东方崛起 中的 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前计算)任何寄生单位都会被移除和删除。现在可以自定义此行为以禁用负伤害的移除效果或为任意弹头启用它。RemoveParasite.Allow定义哪些寄生者可以被移除。RemoveParasite.Disallow定义哪些寄生者不能被移除。
在 rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
RemoveParasite= ; boolean
RemoveParasite.Allow= ; List of TechnoTypes
RemoveParasite.Disallow= ; List of TechnoTypes
对运输工具的穿透伤害
现在弹头引爆时可以杀伤乘客。
如果弹头的
PenetratesTransport.Level高于目标及其乘客的PenetratesTransport.Level,则它会对乘客启用穿透伤害逻辑。PenetratesTransport.PassThrough为穿透的概率,实际概率还要乘上目标的PenetratesTransport.PassThroughMultiplier。PenetratesTransport.FatalRate为对乘客一击必杀的概率,实际概率还要乘上目标的PenetratesTransport.FatalRateMultiplier。PenetratesTransport.DamageAll控制伤害作用于运输工具的所有乘客还是随机选取其一。PenetratesTransport.DamageMultiplier是对乘客所造成伤害的倍率。PenetratesTransport.CleanSound会在乘客全部被击杀后播放。
在 rulesmd.ini:
[CombatDamage]
PenetratesTransport.Level=10 ; integer, default value of [TechnoType] -> PenetratesTransport.Level
[SOMEWARHEAD] ; WarheadType
PenetratesTransport.Level=0 ; integer
PenetratesTransport.PassThrough=1.0 ; double
PenetratesTransport.FatalRate=0.0 ; double
PenetratesTransport.DamageMultiplier=1.0 ; double
PenetratesTransport.DamageAll=false ; boolean
PenetratesTransport.CleanSound= ; sound entry
[SOMETECHNO] ; TechnoType
PenetratesTransport.Level= ; integer, default to [CombatDamage] -> PenetratesTransport.Level
PenetratesTransport.PassThroughMultiplier=1.0 ; double
PenetratesTransport.FatalRateMultiplier=1.0 ; double
PenetratesTransport.DamageMultiplier=1.0 ; double
移除伪装弹头
弹头现在可以移除间谍或幻影坦克的伪装。即使伪装是通过
PermaDisguise默认获得来的。
在 rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
RemoveDisguise=false ; boolean
归返弹头
对于每个受该弹头影响的单位都会有一个在该弹头的所有者处引爆且属于自己的弹头。
ReturnWarhead决定从目标“归返”回原弹头所有者的弹头类型。ReturnWarhead.Damage决定归返弹头造成的伤害。ReturnWarhead.Chance决定归返弹头发生的概率。默认情况下这在弹头爆炸时检查一次,每个受影响的目标都可能触发归返弹头。如果设置了ReturnWarhead.ApplyChancePerTarget,那么每个目标是否成功触发归返的概率将单独计算。ReturnWarhead.FullDetonation控制弹头是否在目标上完全引爆(作为虚拟武器的一部分)或者只能对所在区域造成杀伤并应用 Phobos 的弹头效果。ReturnWarhead.AffectsTarget可用于自定义此弹头可触发归返的目标类型。归返弹头不能影响空置单元格或仅包含地形对象和覆盖物等的单元格。ReturnWarhead.AffectsHouse可用于自定义此弹头可触发归返的目标所属。
在 rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
ReturnWarhead= ; WarheadType
ReturnWarhead.Damage=0 ; integer
ReturnWarhead.Chance=0.0 ; floating point value, percents or absolute (0.0-1.0)
ReturnWarhead.ApplyChancePerTarget=false ; boolean
ReturnWarhead.FullDetonation=true ; boolean
ReturnWarhead.AffectsTarget=all ; List of Affected Target Enumeration (none|land|water|infantry|units|buildings|all)
ReturnWarhead.AffectsHouse=all ; List of Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
警告
如果你将 ReturnWarhead 设为定义暴击的弹头或者创建一个最终回到第一个弹头的循环那么游戏可能会陷入循环并随后卡死或崩溃。
揭示弹
现在弹头可以在引爆时揭示部分区域或整个地图的黑幕。
仅适用于弹头所有者。
在 rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
Reveal=0 ; integer, range in cells
备注
负值意味着揭示整张地图。
逆向工程弹头
现在弹头可以使用逆向工程逻辑(Ares 功能),被命中的单位将会被逆向工程。
在 rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
ReverseEngineer=false ; boolean
警告
此功能需要 3.0 及以上版本的 Ares 才能运作!
将建筑出售或反部署
现在拥有
BuildingSell的弹头可以出售拥有拔起动画的建筑。它的优先级高于BuildingUndeploy。BuildingSell.IgnoreUnsellable控制是否忽略除了缺失拔起动画之外所有可能禁止建筑出售的情况。
现在拥有
BuildingUndeploy的弹头可以令目标建筑反部署为UndeploysInto的对象。BuildingUndeploy.Leave控制是否需要让它们移动到附近较低威胁的位置。这里的威胁程度使用科技类型的价格计算。如果附近的科技类型没有主武器或属于友方所属,那么不被计入。
在 rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
BuildingSell=false ; boolean
BuildingSell.IgnoreUnsellable=false ; boolean
BuildingUndeploy=false ; boolean
BuildingUndeploy.Leave=false ; boolean
黑幕弹
现在弹头可以在引爆时填充部分区域或整个地图的黑幕
仅适用于敌对所属方。
在 rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
CreateGap=0 ; integer, range in cells
备注
负值意味着遮蔽整张地图。
生成工具箱
现在弹头可以在其引爆的单元格上创建指定类型的升级工具箱(如果空置,若被非工具箱的对象占据则生成到附近的单元格)类似于地图触发动作
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
嘲讽弹头
现在你可以使用以下标签使弹头“嘲讽”目标,这会覆盖其当前任务并强制其攻击伤害的来源。
被嘲讽的目标将表现为进行反击的形式。
如果是无源伤害,那么嘲讽将不会生效。
在 rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
Taunt=false ; boolean
设置按目标生效的弹头效果应用时机
现在你可以通过将下列语句设为
false来使 Phobos 弹头效果在每个目标受伤时而不只是在抛射体引爆时生效。这将允许此类效果通过包括但不限于来自粒子、原版辐射以及 Ares 的
Type=GenericWarhead类超武造成的无抛射体杀伤效果生效。这也将导致这些弹头效果同样会被包括但不限于
DamageSelf、DamageAirThreshold、AffectsAllies、AffectsAir的杀伤阻断效果阻断。如果你使用带有
CellSpread的弹头对一个建筑造成多次杀伤,那么这些效果将被多次应用。若不希望如此则可使用MergeBuildingDamage来避免。适用的效果包括:
在 rulesmd.ini:
[CombatDamage] ; WarheadType
ApplyPerTargetEffectsOnDetonate=true ; boolean
[SOMEWARHEAD] ; WarheadType
ApplyPerTargetEffectsOnDetonate= ; boolean, default to [CombatDamage] -> ApplyPerTargetEffectsOnDetonate
备注
Ares 弹头效果例如 EMP 或铁幕弹头将不受影响。
Ares 弹头效果控制器例如
EffectsRequireDamage仅影响 Ares 效果。所以它们与此功能无关。
指定非人步兵死亡序列
现在弹头可以使用相应的标签触发特定的
NotHuman=yes步兵Death动画序列。其值代表从Die1到Die5。
在 rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
NotHuman.DeathSequence= ; integer (1 to 5)
弹头击杀限制
现在可以让一个弹头可以杀伤敌人但无法击杀它们(至少保留 1 滴血)。
在 rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
CanKill=true ; boolean
去虚拟化弹头
@八棱彩 在 恐慌之矛的召唤 中使用的去虚拟化弹头
UnlimboDetonate允许发射了拥有LimboLaunch=yes的武器的单位在弹头引爆后重新刷出(退出 Limbo 状态)。UnlimboDetonate.ForceLocation允许单位强制出现在抛射体爆炸的位置,否则它们会检索其他可用的单元格。UnlimboDetonate.KeepTarget允许单位进出 Limbo 状态前后保留原先的目标。UnlimboDetonate.KeepSelected允许单位进出 Limbo 状态前保留原先选中状态。
在 rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
UnlimboDetonate=false ; boolean
UnlimboDetonate.ForceLocation=false ; boolean
UnlimboDetonate.KeepTarget=true ; boolean
UnlimboDetonate.KeepSelected=true ; boolean
警告
UnlimboDetonate 不能与 Parasite 共用。
武器
自定义 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)
攻击无威胁建筑(武器定义)
AttackNoThreatBuildings允许单位(主动)攻击无威胁建筑。这会覆盖其他设置。
在 rulesmd.ini:
[SOMEWEAPON] ; WeaponType
AttackNoThreatBuildings= ; boolean
自定义 BurstDelay
Burst.Delays允许为特定武器指定其连发间隔。优先于载具类型中就有的BurstDelayX逻辑,且适用于步兵和建筑类型的武器(由于战机类型武器的发射系统完全不同因此暂不支持),并允许独立设置每一发Burst之间的间隔而不仅限于第 1 发到第 4 发。如果未未某一发设定间隔那么它会使用上一发所定义的间隔(例如
Burst=3和Burst.Delays=10将使用 10 作为所有连发的间隔)。使用
-1作为间隔会使该发使用旧逻辑(如果有则使用载具类型的BurstDelay0-3否则使用 3-5 之间的随机值)。
Burst.FireWithinSequence仅在步兵或Voxel=no的无炮塔载具发射武器时使用,将其设为 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
无间隔连发
原版中即便武器的
ROF或载具的BurstDelay设为 0 也最快每帧发射一次。现在可以通过将Burst.NoDelay设为 true 强制单位在一帧内全部发射。
在 rulesmd.ini:
[SOMEWEAPON] ; WeaponType
Burst.NoDelay=false ; boolean
备注
此功能对建筑和战机无效。
这会无视
Burst.Delays设置。
自定义武器能否瞄准被铁幕作用中的对象
在原版中,AI 玩家总是不会攻击被铁幕作用中的单位。现在你可以自定义这点。
CanTarget.IronCurtained控制人类玩家,CanTargetAI.IronCurtained控制 AI 玩家。AutoTarget.IronCurtained决定玩家控制的单位能否主动攻击铁幕保护中的目标。AI 只遵循CanTarget.IronCurtained而无视此设置。
在 rulesmd.ini:
[CombatDamage]
CanTarget.IronCurtained=true ; boolean
CanTargetAI.IronCurtained=false ; boolean
AutoTarget.IronCurtained=true ; boolean
[SOMEWEAPON] ; WeaponType
CanTarget.IronCurtained= ; boolean, default to [CombatDamage] -> CanTarget.IronCurtained for human player and CanTargetAI.IronCurtained for computer
AutoTarget.IronCurtained= ; boolean, default to [CombatDamage] -> AutoTarget.IronCurtained
延迟开火
通过为武器设置
DelayedFire.Duration可使其延迟开火 - 它支持单个整数或用逗号隔开的两个整数作为随机取值区间。若
DelayedFire.SkipInTransport设为 true 且开火者在运输工具中则这种情况下跳过延迟。DelayedFire.Animation可用于定义延时计时器启动时创建的动画。可用DelayedFire.OpenToppedAnimation单独定义开火者在运输工具中开火时创建的。若
DelayedFire.AnimIsAttached设为 true 则该动画将附着于开火的单位上。若DelayedFire.RemoveAnimOnNoDelay也设为 true,则在持续时间结束或开火被中断时无论是否播放完毕都立即移除动画。DelayedFire.AnimOffset可用于覆盖开火坐标来设置动画的位置。DelayedFire.AnimOnTurret决定在单位有炮塔的情况下该动画的位置是相对于开火单位的本体还是炮塔。若设置了
DelayedFire.CenterAnimOnFirer则动画会创建于开火单位的中心而非开火坐标处。
若该武器由一个步兵发射且
DelayedFire.PauseFiringSequence为 true 则当步兵的动画序列达到其在artmd.ini中由FireUp/Prone或SecondaryFire/Prone定义的开火帧时其开火序列动画将会暂停直至延时计时器结束。若武器
Burst> 1 且DelayedFire.OnlyOnInitialBurst为 true 则延迟仅在首次发射前生效。注意若使用了 Ares 则开火被中断或开火者失去目标时Burst索引不会重置,这意味着它可以无需等待延迟时间即可开火。
在 rulesmd.ini:
[SOMEWEAPON] ; WeaponType
DelayedFire.Duration= ; integer - single or comma-sep. range (game frames)
DelayedFire.SkipInTransport=false ; boolean
DelayedFire.Animation= ; Animation
DelayedFire.OpenToppedAnimation= ; Animation
DelayedFire.AnimIsAttached=true ; boolean
DelayedFire.AnimOffset= ; integer - Forward,Lateral,Height
DelayedFire.AnimOnTurret=true ; boolean
DelayedFire.CenterAnimOnFirer=false ; boolean
DelayedFire.RemoveAnimOnNoDelay=false ; boolean
DelayedFire.PauseFiringSequence=false ; boolean
DelayedFire.OnlyOnInitialBurst=false ; boolean
备注
战机类单位由于其独特的攻击模式并不会等待延迟结束后才尝试开火而是延迟过长时会不开火直接继续飞。
额外射程
现在你可以在开火者或目标处于特定状态时调整武器的射程。此功能仅在攻击过程中有效且不影响例如寻路等其他行为。
ExtraRange.TargetMoving当 目标 正在移动时提供的额外射程。ExtraRange.TargetMoving.CloseRangeOnly用于全局默认值是否仅适用于拥有CloseRange=yes的单位。
ExtraRange.FirerMoving当 开火者 正在移动时提供的额外射程。ExtraRange.Prefiring当开火者处于预开火状态时提供的额外射程,该状态包括:拥有
FiringSyncFrame%d等标签的载具。正在开火的飞行器。
拥有
IsAnimDelayedFire等标签的建筑。拥有
FireUp等标签的步兵。任何拥有
DelayedFire的单位。ExtraRange.Prefiring.IncludeBurst用于决定连发过程是否被视为预开火状态。
在 rulesmd.ini:
[General]
ExtraRange.TargetMoving=0.0 ; floating point value, range in cells
ExtraRange.TargetMoving.CloseRangeOnly=false ; boolean
ExtraRange.FirerMoving=0.0 ; floating point value, range in cells
ExtraRange.Prefiring=0.0 ; floating point value, range in cells
ExtraRange.Prefiring.IncludeBurst=true ; boolean
[SOMEWEAPON] ; WeaponType
ExtraRange.TargetMoving= ; floating point value, range in cells, the default values refer to the descriptions above
ExtraRange.FirerMoving= ; floating point value, range in cells, default to [General] -> ExtraRange.FirerMoving
ExtraRange.Prefiring= ; floating point value, range in cells, default to [General] -> ExtraRange.Prefiring
ExtraRange.Prefiring.IncludeBurst= ; boolean, default to [General] -> ExtraRange.Prefiring.IncludeBurst
备注
在原版中,近战单位即便追得上正在逃离的敌人也难以对其发起攻击。这是因为游戏的寻路算法以单元格为单位寻找开火位置,这会对近战单位产生不可接受的误差,导致目标总是在其足够靠近前逃出攻击范围。
具有各类预开火行为的单位也存在类似的问题。目标可能在单位开火前移出射程。
此功能可解决上述问题。
额外弹头
现在可以通过列出
ExtraWarheads来让同一武器在命中时引爆多个弹头。这些弹头会在主弹头爆炸后按列出的顺序在同一位置引爆。这仅适用于由武器发射且引爆时仍保留其信息的抛射体(由于目前存在的技术限制,这不包括AirburstWeapon)。ExtraWarheads.DamageOverrides可用于额外弹头引爆时覆盖武器的Damage属性。如果找到ExtraWarheads中与之对应的值则使用,否则使用最后列出的值。如果列表为空则使用武器的Damage属性。ExtraWarheads.DetonationChances可用于自定义每个额外弹头爆炸的概率。如果找到ExtraWarheads中与之对应的值则使用,否则使用最后列出的值。如果列表为空则每个额外弹头都必然引爆。ExtraWarheads.FullDetonation可用于设置每个额外弹头是否在目标上完全引爆(作为虚拟武器的一部分)或者只能对所在区域造成杀伤并应用 Phobos 的弹头效果。如果找到ExtraWarheads中与之对应的值则使用,否则使用最后列出的值。如果列表为空则默认为 true。注意列出的弹头必须在
[Warheads]中列出才能生效。
使用这些标签可以使这些弹头变得随机。游戏将根据每个提供的 “掷骰子” 概率随机选择列表中的一个建筑。
ExtraWarheads.RollChances是 “掷骰子” 发生的概率列表。有效值的范围为 0%(从不发生)到 100%(总是发生)。默认为单次必出。ExtraWarheads.RandomWeightsN是每个 “掷骰子” 发生概率的权重列表。有效值为 0(从不发生)到 100%(总是发生)。RandomWeights是RandomWeights0的有效别名。如果掷骰尝试没有指定权重,则使用最后一个权重。
在 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
ExtraWarheads.RollChances= ; List of percentages
ExtraWarheads.RandomWeightsN= ; List of integers
反馈武器
幽灵计划 中使用反馈武器在发射武器时对目标施加治疗光环
现在你可以指定一个辅助武器在发射武器时对开火者自身发射。
当原始武器于运输工具内的载员使用时反馈武器会根据自身的
FireInTransport决定能否发射。如果反馈武器被发射那么它将命中运输工具。注:OpenToppedDamageMultiplier不适用于反馈武器。
在 rulesmd.ini:
[SOMEWEAPON] ; WeaponType
FeedbackWeapon= ; WeaponType
开火后保持距离
如果
KeepRange没有设为 0 那么科技类型可以在开火后与目标保持适当的距离。KeepRange的绝对值控制科技类型 ROF 期间要保持的距离。对于正值会让科技类型保持在该距离之外,就像它有一个开火后的MinimumRange。对于负值则科技类型会尽可能保持在该距离附近,就像它有一个开火后的特殊Range。此外如果有效射程区间太小单位将被视为无法开火。最好有一个 1.0 长度的有效射程,对步兵而言为 2.0。KeepRange.AllowAI控制此功能是否对 AI 玩家生效。KeepRange.AllowPlayer控制此功能是否对人类玩家生效。如果单位开火剩余 CD 短于
KeepRange.EarlyStopFrame的时间则该功能不会生效。
备注
也就是说执行 KeepRange 效果的总时长 = 武器 ROF 的值 - KeepRange.EarlyStopFrame 的值。
在 rulesmd.ini:
[SOMEWEAPON] ; WeaponType
KeepRange=0 ; floating point value
KeepRange.AllowAI=false ; boolean
KeepRange.AllowPlayer=false ; boolean
KeepRange.EarlyStopFrame=0 ; integer
OmniFire=yes 下转向
即便使用
OmniFire=yes的武器开火单位也会尝试将车体转向目标。建议 Jumpjet 的
ROT和JumpjetTurnRate相同。
在 rulesmd.ini:
[SOMEWEAPON] ; WeaponType, with OmniFire=yes
OmniFire.TurnToTarget=no ; boolean
辐射增强
除了允许自定义辐射类型外还有对于默认辐射类型
[Radiation]的增强,例如可以设置所有者与开火者或对建筑造成伤害。详见自定义辐射类型。
圆柱形射程
在原版中,处于空中的单位在检查目标是否处于射程内时会忽略 Z 轴的距离。现在你可以用下面的语句使单位总是这样进行射程计算。
用
[General] -> CylinderRangefinding进行全局控制,也可在每个武器上自定义。注意将语句设为
false意味着「使用默认规则」而不是「禁用」。空中单位无论此值如何始终使用圆柱形射程。
在 rulesmd.ini:
[General]
CylinderRangefinding=false ; boolean
[SOMEWEAPON] ; WeaponType
CylinderRangefinding= ; boolean
自定义战机扫射
幽灵计划 中的自定义战机扫射武器
现在可以自定义战机扫射武器的一些行为。
Strafing控制战机在目标射击时是否可以扫射。如果抛射体ROT< 2 且Inviso=false并且没有Trajectory则默认为true其他情况为false。Strafing.Shots控制在单次扫射过程中武器发射的次数,如果未设置则默认为 5。Ammo只会在扫射结束后扣除一次,无论实际多少次。Strafing.SimulateBurst控制在扫射过程中发射的武器是否模拟Burst的行为,即允许交替开火坐标。仅当武器Burst设置为 1 或未定义时才有效。Strafing.UseAmmoPerShot如果设为true将在每次开火后都扣除弹药而不是通常的仅在扫射结束后才扣除弹药。Strafing.TargetCell控制战机是否会在第一发后将目标切换为地板以确保与Strafing.Shots设定的次数一致。也就是扫射不再会由于目标被摧毁而中断。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.TargetCell=false ; boolean
Strafing.EndDelay= ; integer, game frames
视觉效果散布
现在你可以在
VisualScatter设为 true 时为视觉效果(IsLaser=true、IsElectricBolt=true或IsRadBeam=true)添加一个随机偏移。
在 rulesmd.ini:
[AudioVisual]
VisualScatter.Min=0.03 ; floating point value, distance in cells
VisualScatter.Max=0.13 ; floating point value, distance in cells
[SOMEWEAPON] ; WeaponType
VisualScatter=false ; boolean
备注
此功能仅叠加到视觉效果原本的散布上,也就是说它独立于 BallisticScatter.(Min/Max) 且可共同使用,不会影响抛射体实际爆点的散布。
武器瞄准筛选
幽灵计划 中的武器瞄准筛选 - 就像分别对单位和建筑使用那样对敌军和友军使用不同武器
现在你可以指定武器可以开火的目标或所属方。这还会影响武器选择,除了某些特殊情况下的固定选择。
CanTarget.MaxHealth和CanTarget.MinHealth用于设置可被攻击的(仅单位)目标所需的血量阈值,分别要求目标血量必须高于和/或低于/等于的限制。若目标血量为 0 则跳过检查。
在 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.MaxHealth=1.0 ; floating point value, percents or absolute
CanTarget.MinHealth=0.0 ; floating point value, percents or absolute
CanTargetVeterancy=all ; List of Affected Veterancy Enumeration (none|rookie|veteran|elite|all)
备注
CanTarget 要求明确列出 all 或 empty 才能对不包含任何科技类型的单元格开火。