New / Enhanced Logics
This page describes all the engine features that are either new and introduced by Phobos or significantly extended or expanded.
New types / ingame entities
Attached Effects
Similar (but not identical) to Ares' AttachEffect, but with some differences and new features. The largest difference is that here attached effects are explicitly defined types.
Durationdetermines how long the effect lasts for. It can be overriden byDurationOverrideson TechnoTypes and Warheads.- If
Duration.ApplyFirepowerMultset to true, the duration will multiply the invoker's firepower multipliers if it's not negative. Can't reduce duration to below 0 by a negative firepower multiplier. - If
Duration.ApplyArmorMultOnTargetset to true, the duration will divide the target's armor multipliers if it's not negative. This'll also includeArmorMultiplierfrom its own and ignoreArmorMultiplier.Allow/DisallowWarheads. Can't reduce duration to below 0 by a negative armor multiplier.
- If
Cumulative, if set to true, allows the same type of effect to be applied on same object multiple times, up toCumulative.MaxCountnumber or with no limit ifCumulative.MaxCountis a negative number. If the target already hasCumulative.MaxCountnumber of the same effect applied on it, trying to attach another will refresh duration of the attached instance with shortest remaining duration.Poweredcontrols whether or not the effect is rendered inactive if the object it is attached to is deactivated (PoweredUnitor affected by EMP) or on low power. What happens to animation is controlled byAnimation.OfflineAction.DiscardOnaccepts a list of values corresponding to conditions where the attached effect should be discarded. Defaults tonone, meaning it is never discarded.entry: Discard on exiting the map when entering transports or buildings etc.move: Discard when the object the effect is attached on moves. Ignored if the object is a building.stationary: Discard when the object the effect is attached on stops moving. Ignored if the object is a building.drain: Discard when the object is being affected by a weapon withDrainWeapon=true.inrange: Discard if within weapon range from current target. Distance can be overridden viaDiscardOn.RangeOverride.outofrange: Discard if outside weapon range from current target. Distance can be overridden viaDiscardOn.RangeOverride.firing: Discard when firing a weapon. This counts special weapons that are not actually fired such as ones withSpawner=trueorDrainWeapon=true.
- If
PenetratesIronCurtainis not set to true, the effect is not applied on currently invulnerable objects.PenetratesForceShieldcan be used to set this separately for Force Shielded objects, defaults to value ofPenetratesIronCurtain.
AffectTypes, if set to a non-empty list, restricts the effect to only be applicable on the specific unit types listed. If this is not set or empty, no whitelist filtering occurs. This check has the highest priority.IgnoreTypes, if set to a non-empty list, prevents the effect from being applied to any of the specific unit types listed. If this is not set or empty, no blacklist filtering occurs. This check is performed afterAffectTypes.AffectsTarget, if set to a non-empty list, restricts the effect to only be applicable on units belonging to the specified target categories (e.g., infantry, units, aircraft, buildings). This check is performed after both type-based filters.Animationdefines animation to play in an indefinite loop for as long as the effect is active on the object it is attached to.- If
Animation.ResetOnReapplyis set to true, the animation playback is reset every time the effect is applied ifCumulative=false. Animation.OfflineActiondetermines what happens to the animation when the attached object is deactivated or not powered. Only applies ifPowered=true.Animation.TemporalActiondetermines what happens to the animation when the attached object is under effect ofTemporal=trueWarhead.Animation.UseInvokerAsOwnercan be used to set the house and TechnoType that created the effect (e.g firer of the weapon that applied it) as the animation's owner & invoker instead of the object the effect is attached to.Animation.HideIfAttachedWithcontains list of other AttachEffectTypes that if attached to same techno as the current one, will hide this effect's animation.
- If
CumulativeAnimationscan be used to declare a list of animations used forCumulative=truetypes instead ofAnimation. An animation is picked from the list in order matching the number of active instances of the type on the object, with last listed animation used if number is higher than the number of listed animations. This animation is only displayed once and is transferred from the effect to another of same type (specifically one with longest remaining duration), if such exists, upon expiration or removal. Note that becauseCumulative.MaxCountlimits the number of effects of same type that can be applied this can cause animations to 'flicker' here as effects expire before new ones can be applied in some circumstances.CumulativeAnimations.RestartOnChangedetermines if the animation playback is restarted when the type of animation changes, if not then playback resumes at frame at same position relative to the animation's length.
- Attached effect can fire off a weapon when expired / removed / object dies by setting
ExpireWeapon.ExpireWeapon.TriggerOndetermines the exact conditions upon which the weapon is fired, defaults toexpirewhich means only if the effect naturally expires.ExpireWeapon.CumulativeOnlyOnce, if set to true, makes it so thatCumulative=trueattached effects only detonate the weapon once period, instead of once per active instance. Onremoveandexpirecondition this means it will only detonate after last instance has expired or been removed.ExpireWeapon.UseInvokerAsOwnercan be used to set the house and TechnoType that created the effect (e.g firer of the weapon that applied it) as the weapon's owner & invoker instead of the object the effect is attached to.
Tint.Color&Tint.Intensitycan be used to set a color tint effect and additive lighting increase/decrease on the object the effect is attached to, respectively.Tint.VisibleToHousescan be used to control which houses can see the tint effect.
FirepowerMultiplier,ArmorMultiplier,SpeedMultiplierandROFMultipliercan be used to modify the object's firepower, armor strength, movement speed and weapon reload rate, respectively.ArmorMultiplier.AllowWarheadsandArmorMultiplier.DisallowWarheadscan be used to restrict which Warheads the armor multiplier is applied to when dealing damage.- If
ROFMultiplier.ApplyOnCurrentTimeris set to true,ROFMultiplieris applied on currently running reload timer (if any) when the effect is first applied.
- If
Cloakableis set to true, the object the effect is attached to is granted ability to cloak itself for duration of the effect. ForceDecloak, if set to true, will uncloak and make the object the effect is attached to unable to cloak itself for duration of the effect.WeaponRange.MultiplierandWeaponRange.ExtraRangecan be used to multiply the weapon firing range of the object the effect is attached to, or give it an increase / decrease (measured in cells), respectively.ExtraRangeis cumulatively applied from all attached effects after allMultipliervalues have been applied.WeaponRange.AllowWeaponscan be used to list only weapons that can benefit from this range bonus andWeaponRange.DisallowWeaponsweapons that are not allowed to, respectively.- On TechnoTypes with
OpenTopped=true,OpenTopped.UseTransportRangeModifierscan be set to true to make passengers firing out use the transport's active range bonuses instead.
Crit.MultiplierandCrit.ExtraChancecan be used to multiply the critical hit chance or grant a fixed bonus to it for the object the effect is attached to, respectively.Crit.AllowWarheadscan be used to list only Warheads that can benefit from this critical hit chance multiplier andCrit.DisallowWarheadsweapons that are not allowed to, respectively.
RevengeWeaponcan be used to temporarily grant the specified weapon as a revenge weapon for the attached object.RevengeWeapon.AffectsHousecustomizes which houses can trigger the revenge weapon.RevengeWeapon.UseInvokerAsOwnercan be used to set the house and TechnoType that created the effect (e.g firer of the weapon that applied it) as the weapon's owner & invoker instead of the object the effect is attached to.
ReflectDamagecan be set to true to have any positive damage dealt to the object the effect is attached to be reflected back to the attacker.ReflectDamage.Warheaddetermines which Warhead is used to deal the damage, defaults to[CombatDamage] -> C4Warhead. IfReflectDamage.Warhead.Detonateis set to true, the Warhead is fully detonated instead of used to simply deal damage.ReflectDamage.Chancedetermines the chance of reflection.ReflectDamage.Multiplieris a multiplier to the damage received and then reflected back, whileReflectDamage.Overridedirectly overrides the damage. Already reflected damage cannot be further reflected back.- Warheads can prevent reflect damage from occuring by setting
SuppressReflectDamageto true.SuppressReflectDamage.Typescan control which AttachEffectTypes' reflect damage is suppressed, if none are listed then all of them are suppressed.SuppressReflectDamage.Groupsdoes the same thing but for all AttachEffectTypes in the listed groups. ReflectDamage.UseInvokerAsOwnercan be used to set the house and TechnoType that created the effect (e.g firer of the weapon that applied it) as the reflected damage's owner & invoker instead of the object the effect is attached to.
- Warheads can prevent reflect damage from occuring by setting
DisableWeaponscan be used to disable ability to fire any and all weapons.- On TechnoTypes with
OpenTopped=true,OpenTopped.CheckTransportDisableWeaponscan be set to true to make passengers not be able to fire out if transport's weapons are disabled byDisableWeapons.
- On TechnoTypes with
Unkillablecan be used to prevent the techno from being killed by taken damage (minimum health will be 1).- It is possible to set groups for attach effect types by defining strings in
Groups.- Groups can be used instead of types for removing effects and weapon filters.
AttachEffectTypes can be attached to TechnoTypes using
AttachEffect.AttachTypes.AttachEffect.DurationOverridescan be used to override the default durations. Duration matching the position inAttachTypesis used for that type, or the last listed duration if not available.AttachEffect.Delayscan be used to set the delays for recreating the effects on the TechnoType after they expire. Defaults to 0 (immediately), negative values mean the effects are not recreated. Delay matching the position inAttachTypesis used for that type, or the last listed delay if not available.AttachEffect.InitialDelayscan be used to set the delays before first creating the effects on TechnoType. Defaults to 0 (immediately). Delay matching the position inAttachTypesis used for that type, or the last listed delay if not available.AttachEffect.RecreationDelaysis used to determine if the effect can be recreated if it is removed completely (e.gAttachEffect.RemoveTypes), and if yes, how long this takes. Defaults to -1, meaning no recreation. Delay matching the position inAttachTypesis used for that type, or the last listed delay if not available.- Note that neither
InitialDelaysorRecreationDelayscount down if the effect cannot currently be active due toDiscardOncondition.
- Note that neither
AttachEffectTypes can be attached to objects via Warheads using
AttachEffect.AttachTypes.AttachEffect.DurationOverridescan be used to override the default durations. Duration matching the position inAttachTypesis used for that type, or the last listed duration if not available.AttachEffect.CumulativeSourceMaxCountcan be used to determine the maximum count ofCumulative=trueeffect from this source, or with no limit ifAttachEffect.CumulativeSourceMaxCountis a negative number. Work independently fromCumulative.MaxCountof the effect. If the target already hasAttachEffect.CumulativeSourceMaxCountnumber of the same effect from the same source applied on it, trying to attach another will refresh duration of the attached instance with shortest remaining duration.AttachEffect.CumulativeRefreshAllif set to true makes it so that trying to attachCumulative=trueeffect to a target that already hasCumulative.MaxCountamount of effects will refresh duration of all attached effects of the same type instead of only the one with shortest remaining duration. IfAttachEffect.CumulativeRefreshAll.OnAttachis also set to true, this refresh applies even if the target does not have maximum allowed amount of effects of same type.AttachEffect.CumulativeRefreshSameSourceOnlycontrols whether or not trying to applyCumulative=trueeffect on target requires any existing effects of same type to come from same Warhead by same firer for them to be eligible for duration refresh.- Attached Effects can be removed from objects by Warheads using
AttachEffect.RemoveTypesorAttachEffect.RemoveGroups.AttachEffect.CumulativeRemoveMinCountssets minimum number of active instaces perRemoveTypes/RemoveGroupsrequired forCumulative=truetypes to be removed.AttachEffect.CumulativeRemoveMaxCountssets maximum number of active instaces perRemoveTypes/RemoveGroupsforCumulative=truethat are removed at once by this Warhead.
Weapons can require attached effects on target to fire, or be prevented by firing if specific attached effects are applied.
AttachEffect.RequiredTypescan be used to list attached effects required to be on target to fire, all listed effect types must be present to allow firing.AttachEffect.DisallowedTypescan be used to list attached effects that when present prevent the weapon from firing, any of the listed effect types will prevent firing if present.AttachEffect.Required/DisallowedGroupshave the same effect except applied with/to all types that have one of the listed groups in theirGroupslisting.AttachEffect.(Required|Disallowed)MinCounts & (Required|Disallowed)MaxCountscan be used to set the minimum and maximum number of instances required / disallowed to be on the Techno forCumulative=truetypes (ignored for other types) respectively.AttachEffect.IgnoreFromSameSourcecan be set to true to ignore effects that have been attached by the firer of the weapon and its Warhead.AttachEffect.CheckOnFireris set to true makes it so that the required / disallowed attached effects are checked from the firer of the weapon instead of the target.
In rulesmd.ini:
[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
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)Custom Radiation Types

Mixing different radiation types
- Any weapon can now have a custom radiation type. More details on radiation here.
- There are several new properties available to all radiation types.
RadApplicationDelay.Buildingcan be set to value higher than 0 to allow radiation to damage buildings. How many times a single radiation site can deal this damage to same building (every cell of the foundation is hit by all radiation sites on a cell) can be customized withRadBuildingDamageMaxCount, negative values mean no limit.RadSiteWarhead.Detonatecan be set to makeRadSiteWarheaddetonate on affected objects rather than only be used to dealt direct damage. This enables most Warhead effects, display of animations etc. IfRadSiteWarhead.Detonate.Fullis set to false instead, instead of full Warhead detonation it only applies area damage and Phobos Warhead effects.RadHasOwner, if set to true, makes damage dealt by the radiation count as having been dealt by the house that fired the projectile that created the radiation field. This means that Warhead controls such asAffectsAllieswill be respected and any units killed will count towards that player's destroyed units count.RadHasInvoker, if set to true, makes the damage dealt by the radiation count as having been dealt by the TechnoType (the 'invoker') that fired the projectile that created the radiation field. In addition to the effects ofRadHasOwner, this will also grant experience from units killed by the radiation to the invoker. Note that if the invoker dies at any point during the radiation's lifetime it continues to behave as if not having an invoker.
- By default
UseGlobalRadApplicationDelayis set to true. This makes game always useRadApplicationDelayandRadApplicationDelay.Buildingfrom[Radiation]rather than specific radiation types. This is a performance-optimizing measure that should be disabled if a radiation type declares different application delay.
In 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 ; booleanWarning
Due to performance concerns, unless any radiation type has RadApplicationDelay.Building set to above 0, all functionality related to it is completely disabled in game. This decision is made at earliest available opportunity (at end of initial scenario start or after loading saved game) and will not update with further scenario changes or save game loadings during same game session.
Laser Trails
Laser trails used in Rise of the East
- Technos, Projectiles, and VoxelAnims can now have colorful trails of different transparency, thickness and color, which are drawn via laser drawing code.
- Technos, Projectiles, and VoxelAnims can have multiple laser trails. For technos each trail can have custom laser trail type and FLH offset relative to turret and body.
- LaserTrail can also be drawn as EBolt or RadBeam.
In 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, ...In rulesmd.ini:
[SOMEVOXELANIM] ; VoxelAnim
LaserTrail.Types=SOMETRAIL ; List of LaserTrailTypesWarning
Laser trails are very resource intensive! Due to the game not utilizing GPU having a lot of trails can quickly drop the FPS on even good machines. To reduce that effect:
- don't put too many laser trails on units and projectiles;
- make sure you set as high
SegmentLengthvalue as possible without trails being too jagged; - try to keep the length of the trail minimal (can be achieved with smaller
FadeDurationdurations).
Shields
Buildings, Infantry and Vehicles with Shield in Fantasy ADVENTURE
In 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- Now you can have a shield for any TechnoType. It serves as a second health pool with independent
ArmorandStrengthvalues.- Shield will not take damage if the TechnoType is under effects of
Temporalwarhead, is Iron Curtained / Force Shielded, hasImmune=trueor if it hasTypeImmune=trueand the damage source is another instance of same TechnoType belonging to same house. - Negative damage will recover shield, unless shield has been broken. If shield isn't full, all negative damage will be absorbed by shield.
- Negative damage weapons will consider targets with active, but not at full health shields in need of healing / repairing unless the Warhead has
Shield.Penetrate=true, in which case only object health is considered.
- Negative damage weapons will consider targets with active, but not at full health shields in need of healing / repairing unless the Warhead has
- When a TechnoType has an unbroken shield,
[ShieldType] -> Armorwill replace[TechnoType] -> Armorfor targeting and damage calculation purposes.InheritArmorFromTechnocan be set to true to override this so that[TechnoType] -> Armoris used even if shield is active and[ShieldType] -> Armoris ignored.InheritArmor.Allowedlists TechnoTypes whose armor can be overridden. If empty, any TechnoType not listed inInheritArmor.Disallowedis okay.InheritArmor.Disallowedlists TechnoTypes whose armor can't be overridden. If empty, any TechnoTypes are okay as long asInheritArmor.Allowedis empty or they are listed on it.ApplyArmorMultcan be set to true to allow the shield to benefit from the armor multiplier.
InitialStrengthcan be used to set a different initial strength value from maximum.ConditionYellowandConditionRedcan be used to set the thresholds for shield damage states, defaulting to[AudioVisual] -> Shield.ConditionYellow & Shield.ConditionRedrespectively which in turn default to justConditionYellow & ConditionRed.
- Shield will not take damage if the TechnoType is under effects of
- When executing
DeploysIntoorUndeploysInto, if both of the TechnoTypes have shields, the transformed unit/building would keep relative shield health (in percents), same as withStrength. If one of the TechnoTypes doesn't have shields, it's shield's state on conversion will be preserved until converted back.- This also works with Ares'
Convert.*.
- This also works with Ares'
Poweredcontrols whether or not the shield is active when a unit is running low on power or it is affected by EMP.- Attention, if TechnoType itself is not
Powered, then the shield won't be offline when low power.
- Attention, if TechnoType itself is not
AbsorbOverDamagecontrols whether or not the shield absorbs damage dealt beyond shield's current strength when the shield breaks.SelfHealingandRespawnrespect the following settings: 0.0 disables the feature, 1%-100% recovers/respawns the shield strength in percentage, other number recovers/respawns the shield strength directly. Specially,SelfHealingwith a negative number deducts the shield strength.- If you want shield recovers/respawns 1 HP per time, currently you need to set tag value to any number between 1 and 2, like
1.1. - If
SelfHealing.RestartInCombatis set, self-healing timer pauses and then resumes afterSelfHealing.RestartInCombatDelayframes have passed when the shield gets damaged. - If
Respawn.RestartInCombatis set, respawn timer pauses and then resumes afterRespawn.RestartInCombatDelayframes have passed when the TechnoType has a shield that's under respawn process.
- If you want shield recovers/respawns 1 HP per time, currently you need to set tag value to any number between 1 and 2, like
SelfHealing.RateandRespawn.Raterespect the following settings: 0.0 instantly recovers the shield, other values determine the frequency of shield recovers/respawns in ingame minutes.Respawn.Anim, if set, will be played when the shield respawns. If more than one animation is listed, a random one is selected.Respawn.Weapon, if set, will be fired at the TechnoType once the shield respawns.SelfHealing.EnabledBycan be used to control the self-heal and respawn of the shield. If the owner has no structures from this list then the shield won't self-heal or respawn.IdleAnim, if set, will be played while the shield is intact. This animation is automatically set to loop indefinitely.IdleAnim.ConditionYellowandIdleAnim.ConditionRedcan be used to set different animations for when shield health is at or below the percentage defined in[AudioVisual] -> ConditionYellow/ConditionRed, respectively. IfIdleAnim.ConditionRedis not set it falls back toIdleAnim.ConditionYellow, which in turn falls back toIdleAnim.IdleAnimDamaged,IdleAnimDamaged.ConditionYellowandIdleAnimDamaged.ConditionRedare used in an identical manner, but only when health of the object the shield is attached to is at or below[AudioVisual] -> ConditionYellow. Follows similar fallback sequence to regularIdleAnimvariants and if none are set, falls back to the regularIdleAnimor variants thereof.Bouncer=trueandIsMeteor=trueanimations can exhibit irregular behaviour when used asIdleAnimand should be avoided.
IdleAnim.OfflineActionindicates what happens to the animation when the shield is in a low power state.IdleAnim.TemporalActionindicates what happens to the animation when the shield is attacked by temporal weapons.BreakAnim, if set, will be played when the shield has been broken. If more than one animation is listed, a random one is selected.HitAnim, if set, will be played when the shield is attacked, similar toWeaponNullifyAnimfor Iron Curtain. If more than one animation is listed, a random one is selected.HitFlash, if set to true, makes it so that a light flash is generated when the shield is attacked by a Warhead unless it hasShield.HitFlash=false. Size of the flash is determined by damage dealt, unlessHitFlash.FixedSizeis set to a number, in which case that value is used instead (range of values that produces visible effect are increments of 4 from 81 to 252, anything higher or below does not have effect). Color can be customized viaHitFlash.Red/Green/Blue. IfHitFlash.Blackis set to true, the generated flash will be black regardless of other color settings.BreakWeapon, if set, will be fired at the TechnoType once the shield breaks.AbsorbPercentcontrols the percentage of damage that will be absorbed by the shield. Defaults to 1.0, meaning full damage absorption.PassPercentcontrols the percentage of damage that will not be absorbed by the shield, and will be dealt to the unit directly even if the shield is active. Defaults to 0.0 - no penetration.ReceivedDamage.Minimum&ReceivedDamage.Maximumcontrol the minimum and maximum amount of damage that can be dealt to shield in a single hit. This is applied after armor type andAbsorbPercentadjustments. IfAbsorbOverDamage=false, the residual damage dealt to the TechnoType is still based on the original damage before the clamping to the range.AllowTransfercontrols whether or not the shield can be transferred if the TechnoType changes (such as(Un)DeploysIntoor Ares type conversion). If not set, defaults to true if shield was attached viaShield.AttachTypes, otherwise false.ImmuneToBerserkgives the immunity againstPsychedelic=yeswarhead. Otherwise the berserk effect penetrates shields by default. Note that this shouldn't prevent the unit from targeting at the shielded object.Versus.shieldArmor=0%is still required in this case.- A tint effect similar to that used by Iron Curtain / Force Shield or
Psychedelic=trueWarheads can be applied to TechnoTypes with shields by settingTint.Colorand/orTint Intensity.Tint.Intensityis additive lighting increase/decrease - 1.0 is the default object lighting.Tint.VisibleToHousescan be used to customize which houses can see the tint effect.
- A TechnoType with a shield will show its shield Strength. An empty shield strength bar will be left after destroyed if it is respawnable. Several customizations are available for the shield strength pips.
- By default, buildings use the 6th frame of
pips.shpto display the shield strength while others use the 17th frame. Pips.Shieldcan be used to specify which pip frame should be used as shield strength. If only 1 digit is set, then it will always display that frame, or if 3 digits are set, it will use those if shield's current strength is at or belowConditionYellowandConditionRed, respectively.Pips.Shield.Buildingis used for BuildingTypes. -1 as value will use the default frame, whether it is fallback to first value or the aforementioned hardcoded defaults.Pips.Shield.Backgroundcan be used to set the background or 'frame' for non-building pips, which defaults topipbrd.shp. 4th frame is used to display an infantry's shield strength and the 3th frame for other units, or 2nd and 1st respectively if not enough frames are available.Pips.Shield.Building.Emptycan be used to set the frame ofpips.shpdisplayed for empty building strength pips, defaults to 1st frame ofpips.shp.Pips.HideIfNoStrengthcan be used to hide the shield's pip frame if theStrengthis 0.- The above customizations are also available on per ShieldType basis, e.g
[ShieldType] -> Pipsinstead of[AudioVisual] -> Pips.Shieldand so on. ShieldType settings take precedence over the global ones, but will fall back to them if not set. BracketDeltacan be used as additional vertical offset (negative shifts it up) for shield strength bar. Much likePixelSelectionBracketDelta, it is not applied on buildings.
- By default, buildings use the 6th frame of
- Warheads have new options that interact with shields. Note that all of these that do not by their very nature require ability to target the shield (such as modifiers like
Shield.Breakor removing / attaching) still require WarheadVersesto affect the target unlessEffectsRequireVersesis set to false on the Warhead.Shield.Penetrateallows the warhead ignore the shield and always deal full damage to the TechnoType itself. It also allows targeting the TechnoType as if shield doesn't exist.Shield.Breakallows the warhead to always break shields of TechnoTypes. This is done before damage is dealt.Shield.BreakAnimwill be displayed instead of ShieldTypeBreakAnimif the shield is broken by the Warhead, either through damage orShield.Break. If more than one animation is listed, a random one is selected.Shield.HitAnimwill be displayed instead of ShieldTypeHitAnimif set when Warhead hits the shield. If more than one animation is listed, a random one is selected.- If
Shield.SkipHitAnimis set to true, no hit anim is shown when the Warhead damages the shield whatsoever. Shield.BreakWeaponwill be fired instead of ShieldTypeBreakWeaponif the shield is broken by the Warhead, either through damage orShield.Break.Shield.AbsorbPercentoverrides theAbsorbPercentvalue set in the ShieldType that is being damaged.Shield.PassPercentoverrides thePassPercentvalue set in the ShieldType that is being damaged.Shield.ReceivedDamage.Minimum&Shield.ReceivedDamage.Maximumoverride the values set in in the ShieldType that is being damaged.Shield.ReceivedDamage.MinMultiplierandShield.ReceivedDamage.MinMultiplierare multipliers to the effectiveShield.ReceivedDamage.MinimumandShield.ReceivedDamage.Maximumrespectively that are applied when the Warhead deals damage to a shield.
Shield.Respawn.Rate,Shield.Respawn.Amount,Shield.Respawn.AnimandShield.Respawn.Weaponoverride ShieldTypeRespawn.Rate,Respawn.Amount,Respawn.AnimandRespawn.Weaponfor duration ofShield.Respawn.Durationamount of frames. Negative rate & zero or lower amount default to ShieldType values. IfShield.Respawn.RestartTimeris set, currently running shield respawn timer is reset, otherwise the timer's duration is adjusted in proportion to the newShield.Respawn.Rate(e.g timer will be same percentage through before and after) without restarting the timer. If the effect expires while respawn timer is running, remaining time is adjusted to proportionally match ShieldTypeRespawn.Rate. Re-applying the effect resets the duration toShield.Respawn.Duration- Additionally
Shield.Respawn.RestartInCombat&Shield.Respawn.RestartInCombatDelaycan be used to override ShieldType settings.
- Additionally
Shield.SelfHealing.Rate&Shield.SelfHealing.Amountoverride ShieldTypeSelfHealing.RateandSelfHealing.Amountfor duration ofShield.SelfHealing.Durationamount of frames. Negative rate & zero or lower amount default to ShieldType values. IfShield.SelfHealing.RestartTimeris set, currently running self-healing timer is restarted, otherwise timer's duration is adjusted in proportion to the newShield.SelfHealing.Rate(e.g timer will be same percentage through before and after) without restarting the timer. If the effect expires while self-healing timer is running, remaining time is adjusted to proportionally match ShieldTypeSelfHealing.Rate. Re-applying the effect resets the duration toShield.SelfHealing.Duration.- Additionally
Shield.SelfHealing.RestartInCombat&Shield.SelfHealing.RestartInCombatDelaycan be used to override ShieldType settings.
- Additionally
Shield.AffectTypesallows listing which ShieldTypes can be affected by any of the effects listed above. If none are listed, all ShieldTypes are affected.Shield.AffectTypescan be overriden for specific shield interactions by using keysShield.Penetrate.Types,Shield.Break.Types,Shield.Respawn.TypesandShield.SelfHealing.Typesrespectively.
Shield.AttachTypes&Shield.RemoveTypesallows listing ShieldTypes that are attached or removed, respectively from any targets affected by the warhead (positiveVersesvalues). Normally only first listed ShieldType inShield.AttachTypesis applied.- If
Shield.ReplaceOnlyis set, shields fromShield.AttachTypesare only applied to affected targets from which shields were simultaneously removed, matching the order listed inShield.RemoveTypes. IfShield.AttachTypescontains less items thanShield.RemoveTypes, last item from the former is used for any remaining removed shields. - If
Shield.ReplaceNonRespawningis set, shield fromShield.AttachTypesreplaces existing shields that have been broken and cannot respawn on their own. - If
Shield.RemoveAllis set, all shield types are removed from the affected targets, even those that are not listed inShield.RemoveTypes. IfShield.ReplaceOnlyis set, first type listed inShield.AttachTypesis used to replace any removed types not listed inShield.RemoveTypes. Shield.MinimumReplaceDelaycan be used to control how long after the shield has been broken (in game frames) can it be replaced. If not enough frames have passed, it won't be replaced.- If
Shield.InheritStateOnReplaceis set, shields replaced viaShield.ReplaceOnlyinherit the current strength (relative to ShieldTypeStrength) of the previous shield and whether or not the shield was currently broken. Self-healing and respawn timers are always reset.
- If
Aircraft
Damaged aircraft image changes
- When an aircraft is damaged (health points percentage is lower than
[AudioVisual] -> ConditionYellowpercentage), it now may use different image set byImage.ConditionYellowAircraftType. - Similar,
Image.ConditionRedis used as image if aircraft health points percentage is lower than[AudioVisual] -> ConditionRedpercentage.
In rulesmd.ini:
[SOMEAIRCRAFT] ; AircraftType
Image.ConditionYellow= ; AircraftType entry
Image.ConditionRed= ; AircraftType entryWarning
Note that the AircraftTypes had to be defined under [AircraftTypes].
Animations
Anim-to-Unit
- Animations can now create (or "convert" to) any unit (vehicles, aircraft and infantry) when they end via
CreateUnit. This offers more settings thanMakeInfantrydoes for infantry.CreateUnit.Ownerdetermines which house will own the created unit. This only works as expected if the animation has owner set. If there is no owner or the owner house has been defeated, the created unit will be owned by first house from Civilian side unlessCreateUnit.RequireOwneris set to true in which case no unit will be created.- Vehicle destroy animations, animations from Warhead
AnimList/SplashListand map trigger action41 Play Anim Atwill have the owner set correctly. CreateUnit.RemapAnim, if set to true, will cause the animation to be drawn in unit palette and remappable to owner's team color.
- Vehicle destroy animations, animations from Warhead
CreateUnit.Missiondetermines the initial mission of the created unit. This can be overridden for AI players by settingCreateUnit.AIMission.CreateUnit.Facingdetermines the initial facing of created unit.CreateUnit.RandomFacing, if set to true, makes it so that a random facing is picked instead.- For VehicleTypes only,
CreateUnit.InheritFacingsandCreateUnit.InheritTurretFacingsinherit facings for vehicle body and turret respectively from the destroyed vehicle if the animation is a vehicle destroy animation.InheritTurretFacingsdoes not work with jumpjet vehicles due to technical constraints.
CreateUnit.AlwaysSpawnOnGround, if set to true, ensures the unit will be created on the cell at ground level even if animation is in air. If set to false, jumpjet units spawned on ground will take off automatically after being spawned regardless.CreateUnit.SpawnParachutedInAir, if set to true, makes it so that the unit is created with a parachute if it is spawned in air. Has no effect ifCreateUnit.AlwaysSpawnOnGroundis set to true.CreateUnit.ConsiderPathfinding, if set to true, will consider whether or not the cell where the animation is located is occupied by other objects or impassable to the unit being created and will attempt to find a nearby cell that is not. Otherwise the unit will be created at the animation's location despite these obstacles if possible.CreateUnit.SpawnAnimcan be used to play another animation at created unit's location after it has appeared. This animation has same owner and invoker as the parent animation. If more than one animation is listed, a random one is selected.CreateUnit.SpawnHeightcan be set to override the animation's height when determining where to spawn the created unit if set to positive value. Has no effect ifCreateUnit.AlwaysSpawnOnGroundis set to true.
In 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 leptonsNote
Due to technical constraints, infantry death animations including Ares' InfDeathAnim cannot have CreateUnit.Owner correctly applied to them. You can use Ares' MakeInfantryOwner as a workaround instead, which should function for this use-case even without MakeInfantry set.
Attached particle system
- It is now possible to attach a particle system to an animation. Only particle systems with
BehavesLike=Smokeare supported. This works similarly to the identically named key onVoxelAnims.- On animations with
Next, the particle system will be deleted when the next animation starts playing and new one created in its stead if theNextanimation defines a different particle system.
- On animations with
In artmd.ini:
[SOMEANIM] ; AnimationType
AttachedSystem= ; ParticleSystemTypeCustomizable animation visibility settings
- It is now possible to customize which players can see an animation using
VisibleTo.VisibleTo.ConsiderInvokerAsOwner, if set, makes it so that animation's invoker house is considered as owner for purposes ofVisibleToinstead of owning house of TechnoType it is attached to or animation's owning house. On most animations the they are the same, but it can be different for some.- Note that this is a purely visual feature, any logic attached to these animations like damage is still processed for all players.
RestrictVisibilityIfCloaked, if set to true, makes so that attached animations or aircraftTraileranimations (due to technical constraints, spawned missile trailers are exempt from this) on cloaked objects are only visible to observers and players who can currently detect them.DetachOnCloakcan be set to false to override vanilla game behaviour where attached animations are removed from cloaked objects.
In 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 ; booleanPlay sound as a detached sound event
- It is now possible for animation to play a sound that is not attached to an audio event handler by using
DetachedReport. By default animationReport/StartSoundis played by an audio event handler, which allows the sound to loop and play at correct location even if it changes after its initial creation. This can also cause issues with animations that chain different types throughNext, as the audio event handler resets when the animation restarts.
In artmd.ini:
[SOMEANIM] ; AnimationType
DetachedReport= ; Sound entryBuildings
Build area customizations
- There are now additional customizations available for building placement next to other buildings.
Adjacent.Allowedlists BuildingTypes this BuildingType can be placed off (within distance defined byAdjacent). If empty, any BuildingType not listed inAdjacent.Disallowedis okay.Adjacent.Disallowedlists BuildingTypes this BuildingType cannot be placed off from. If empty, any BuildingTypes are okay as long asAdjacent.Allowedis empty or they are listed on it.Adjacent.Disallowed.Prohibitif set to true makes this behaviour strict and disallows placement even if there are eligible buildings around if the placement is within range of a disallowed one.Adjacent.Disallowed.ProhibitDistancecan be used to overrideAdjacentfor this check if set to value higher than 0.
- If
NoBuildAreaOnBuildupis set to true, no building can be built next to this building regardless of any other settings if it is currently displaying its buildup animation.
In 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 ; booleanDestroyable pathfinding obstacles
- It is possible to make buildings be considered pathfinding obstacles that can be destroyed by setting
IsDestroyableBlockageto true. What this does is make the building be considered impassable and impenetrable pathfinding obstacle to every unit that is not flying or have appropriateMovementZone(ones that allow destroyable obstacles to be overcome, e.g(Infantry|Amphibious)Destroyer) akin to wall overlays and TerrainTypes.- Keep in mind that if an unit has appropriate
MovementZonebut no means to actually destroy an obstacle (such as a weapon that can fire and deal damage at them), they will get stuck trying to go through them instead of pathing around.
- Keep in mind that if an unit has appropriate
In rulesmd.ini:
[SOMEBUILDING] ; BuildingType
IsDestroyableObstacle=false ; booleanEngineer repair customization
- You can now set a maximum amount when engineer repair a building for either of them. 0 means the building will be repaired to full health.
- Negative value means percentage. For example,
EngineerRepairAmount=-50means you can only repair 50% of the building's health per Engineer. - If both the building and the engineer has
EngineerRepairAmountset, the actual repair amount will be the minimum of them.
- Negative value means percentage. For example,
BuildingRepairedSoundcan now be set individually for each building type.
In rulesmd.ini:
[SOMEBUILDING] ; BuildingType
EngineerRepairAmount=0 ; integer
BuildingRepairedSound= ; Sound entry, default to [AudioVisual] -> BuildingRepairedSound
[SOMEINFANTRY] ; InfantryType
EngineerRepairAmount=0 ; integerExtended building upgrades

Upgrading own and allied Power Plants in CnC: Final War
- Building upgrades now can be placed on own buildings, on allied buildings and/or on enemy buildings. These three owners can be specified by
PowersUp.Owner. When upgrade is placed on building, it automatically changes it's owner to match the building's owner. - One upgrade can now be applied to multiple different types of buildings specified by
PowersUp.Buildings.- Ares-introduced build limit for building upgrades works with this feature.
In 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 BuildingTypesNote
Due to technical limitations, with Ares, upgrades placed through PowersUp.Buildings instead of PowersUpBuilding (note that internally PowersUpBuilding is set to first entry of PowersUp.Buildings if former is not set but latter is) DO NOT satisfy prerequisites. Suggested workaround is to use the upgrades to provide Superweapons that spawn in buildings via LimboDelivery logic to function as prerequisites, which are destroyed by another SW that becomes available if parent building is gone and so on.
Power plant enhancer
- When it exists, it can increase the power amount generated by the power plants.
- When enchancing structures are sold or destroyed, the power amount returns to normal.
PowerPlantEnhancer.MaxCountdetermines the maximum amount of this type of building that can be used for power plant enhancement. Negative value means no limitation.
In 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 ; integerSpy effects
- Additional espionage bonuses can be toggled with
SpyEffect.Custom.SpyEffect.VictimSuperWeaponinstantly launches a Super Weapon for the owner of the infiltrated building at building's coordinates.SpyEffect.InfiltratorSuperWeaponbehaves the same as above, with the Super Weapon's owner being the owner of the spying unit.
In rulesmd.ini:
[SOMEBUILDING] ; BuildingType
SpyEffect.Custom=false ; boolean
SpyEffect.VictimSuperWeapon= ; SuperWeaponType
SpyEffect.InfiltratorSuperWeapon= ; SuperWeaponTypeInfantry
Customizable FLH when infantry is prone or deployed
- Now infantry can override
PrimaryFireFLHandSecondaryFireFLHif is prone (crawling) or deployed. Also works in conjunction with burst-index specific firing offsets.
In artmd.ini:
[SOMEINFANTRY] ; InfantryType image
PronePrimaryFireFLH= ; integer - Forward,Lateral,Height
ProneSecondaryFireFLH= ; integer - Forward,Lateral,Height
DeployedPrimaryFireFLH= ; integer - Forward,Lateral,Height
DeployedSecondaryFireFLH= ; integer - Forward,Lateral,HeightCustomizable SlavesFreeSound
SlavesFreeSoundcan now be set individually for each enslavable infantry type.
In rulesmd.ini:
[SOMEINFANTRY] ; InfantryType, with Slaved=yes
SlavesFreeSound= ; Sound entry, default to [AudioVisual] -> SlavesFreeSoundDefault disguise for individual InfantryTypes
- Infantry can now have its
DefaultDisguiseoverridden per-type.- This tag's priority is higher than Ares' per-side
DefaultDisguise.
- This tag's priority is higher than Ares' per-side
In rulesmd.ini:
[SOMEINFANTRY] ; InfantryType
DefaultDisguise= ; InfantryTypeRandom death animaton for NotHuman infantry
- Infantry with
NotHuman=yescan now play random death anim sequence betweenDie1toDie5instead of the hardcodedDie1.- Do not forget to tweak infantry anim sequences before enabling this feature, otherwise it will play invisible anim sequence.
In rulesmd.ini:
[SOMEINFANTRY] ; InfantryType
NotHuman.RandomDeathSequence=yes ; booleanSlaves' house decision customization when owner is killed
- You can now decide the slaves' house when the corresponding slave miner is killed using
Slaved.OwnerWhenMasterKilled:suicide: Kill each slave if the slave miner is killed.master: Free the slaves but keep the house of the slave unchanged.neutral: The slaves belong to civilian house.killer: Free the slaves and give them to the house of the slave miner's killer. (vanilla behavior)
In rulesmd.ini:
[SOMEINFANTRY] ; InfantryType, with Slaved=yes
Slaved.OwnerWhenMasterKilled=killer ; enumeration (suicide | master | killer | neutral)Use land sequences even in water
- Setting
OnlyUseLandSequencesto true will make infantry display only the regular sequences used on land even if it is in water.
In artmd.ini:
[SOMEINFANTRY] ; InfantryType image
OnlyUseLandSequences=false ; booleanProjectiles
Attack technos underground
- Now, you can enable projectiles to attack technos underground.
- To actually damage the technos, you need AffectsUnderground.
In rulesmd.ini:
[SOMEPROJECTILE] ; Projectile
AU=false ; booleanNote
Only vanilla projectiles with Inviso=yes set or Phobos projectiles Straight with Trajectory.Straight.SubjectToGround=false enabled and Bombard with Trajectory.Bombard.SubjectToGround=false enabled can go beneath the ground. Otherwise, the projectile will be forced to detonate upon hitting the ground.
In order to attack units moving horizontally underground, the attacker needs to have SensorsSight settings.
Parabombs
- Restored feature from Red Alert 1 (also partially implemented in Ares but undocumented, if used together Phobos' version takes priority) that allows projectiles to be parachuted down to ground if fired by an aerial unit.
- Setting
Parachutedto true enables this behaviour. Note that using any other projectile logics likeROT> 0 orVertical=truetogether with this feature is unnecessary and can cause unwanted effects. - Falling speed can be customized by setting
Parachuted.FallRateand is capped toParachuted.MaxFallRate. BombParachutecan be used to customize the parachute animation used. The animation is drawn in unit palette using team color of the firing house if available.
- Setting
In rulesmd.ini:
[SOMEPROJECTILE] ; Projectile
Parachuted=false ; boolean
Parachuted.FallRate=1 ; integer
Parachuted.MaxFallRate= ; integer, default to [General] -> ParachuteMaxFallRate
BombParachute= ; AnimationType, default to [General] -> BombParachuteProjectile interception logic
Interception logic used in Tiberium Crisis
- Projectiles can now be made interceptable by certain TechnoTypes by setting
Interceptable=trueon them. The TechnoType scans for interceptable projectiles within a range if it has no other target and will use one of its weapons to shoot at them. Projectiles can defineArmorandStrength. Weapons that cannot target the projectile's armor type will not attempt to intercept it. On interception, if the projectile hasArmorset, an amount equaling to the intercepting weapon'sDamageadjusted by WarheadVersesis deducted from the projectile's current strength. Regardless of if the current projectile strength was reduced or not, if it sits at 0 or below after interception, the projectile is detonated.Interceptor.Weapondetermines the weapon (0 =Primary, 1 =Secondary) to be used for intercepting projectiles.- The interceptor weapon may need
AAset to true on its projectile to be able to target projectiles depending on their elevation from ground. If you don't set those then the weapon won't be able to target high-flying projectiles respectively.
- The interceptor weapon may need
Interceptor.TargetingDelaydetermines how often (in frames) interceptor TechnoType scans for suitable projectiles to intercept. Smaller delay is better for interceptor's capabilities but worse for game performance. Delay cannot be set to 0, this will change the delay to 1 and outputs a developer warning to log.Interceptor.CanTargetHousescontrols which houses the projectiles (or rather their firers) can belong to be eligible for interception.Interceptor.GuardRange(andInterceptor.(Rookie|Veteran|EliteGuardRange)) is maximum range of the unit to intercept projectile. The unit weapon range will limit the unit interception range though.Interceptor.MinimumGuardRange(andInterceptor.(Rookie|Veteran|EliteMinimumGuardRange)) is the minimum range of the unit to intercept projectile. Any projectile under this range will not be intercepted.Interceptor.ApplyFirepowerMultdetermines whether or not the intercepting weapon's damage should multiply the TechnoType's firepower multipliers.Interceptable.DeleteOnInterceptdetermines whether or not the projectile will simply be deleted on detonation upon interception, or if it will properly detonate. Will be overridden byInterceptor.DeleteOnInterceptsetting on the interceptor.Interceptable.WeaponOverridecan be set to a WeaponType that will be used to override characteristics such asDamageandWarheadof the current projectile for detonation after interception. Will be overridden byInterceptor.WeaponOverridesetting on the interceptor.- On interceptors,
Interceptor.WeaponReplaceProjectilecan be set to true to makeInterceptor.WeaponOverridealso replace the intercepted projectile's type (includingImageand other projectile characteristics) andSpeedwith its own. Does not replace particle systems (AttachedSystem, Ares feature). - On interceptors,
Interceptor.WeaponCumulativeDamagecan be set to true to makeDamagefromInterceptor.WeaponOverrideweapon be added on the projectile's damage rather than override it.
- On interceptors,
Interceptor.KeepIntactcan be set to true to allow intercepted projectiles to continue traveling as if they were not intercepted, but effects such asInterceptor.WeaponOverridewill still be applied.
In 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.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= ; ArmorTypeNote
Currently interceptor weapons with projectiles that do not have Inviso=true will be unable to intercept projectiles if the firer of the interceptor weapon dies before the interceptor weapon projectile reaches its target. This may change in future.
Projectile trajectories
- Projectiles can now have customizable trajectories.
Trajectoryshould not be combined with original game's projectile trajectory logics (Arcing,ROT,VerticalorInviso). Attempt to do so will result in the other logics being disabled and a warning being written to log file.- The speed of the projectile is defined by
Trajectory.Speed, which unlikeSpeedused byROT> 0 projectiles is defined on projectile not weapon.- In
Trajectory=Straight, it refers to the whole distance speed of the projectile and it has no restrictions. - In
Trajectory=Bombard, it refers to the initial speed of the projectile and it has no restrictions. - In
Trajectory=Parabola, it refers to the horizontal velocity of the projectile and is only used for modes 0, 3, or 5 and it has no restrictions.
- In
In rulesmd.ini:
[SOMEPROJECTILE] ; Projectile
Trajectory.Speed=100.0 ; floating point valueStraight trajectory
Straight trajectory used to make blasters in a private mod by @brsajo#9745
- Self-explanatory, is a straight-shot trajectory.
Trajectory.Straight.DetonationDistancecontrols the maximum distance in cells from intended target (checked at start of each game frame, before the projectile moves) at which the projectile will be forced to detonate. Set to 0 to disable forced detonation (note that this can cause the projectile to overshoot the target). IfTrajectory.Straight.ApplyRangeModifiersis set to true, any applicable weapon range modifiers from the firer are applied here as well. By settingTrajectory.Straight.PassThrough=true, it refers to the distance that projectile should travel from itself when it above 0, and the distance that projectile should move behind the target when it below 0 (use the absolute value).Trajectory.Straight.TargetSnapDistancecontrols the maximum distance in cells from intended target the projectile can be at moment of detonation to make the projectile 'snap' on the intended target. Set to 0 to disable snapping.Trajectory.Straight.PassThroughenables special case logic where the projectile does not detonate in contact with the target but instead travels up to a distance defined byTrajectory.Straight.DetonationDistance. Note that the firing angle of the projectile is adjusted with this in mind, making it fire straight ahead if the target is on same elevation.Trajectory.Straight.PassDetonateenables extra detonations when the projectile is traveling. (You can use this when you want the projectile to detonate warheads every other distance/time during the flight.)Trajectory.Straight.PassDetonateWarheaddefines the warhead detonated byTrajectory.Straight.PassDetonate, andTrajectory.Straight.PassDetonateDamagedefines the damage caused byTrajectory.Straight.PassDetonateWarhead.Trajectory.Straight.PassDetonateDelaycontrols the delay for detonating the warhead defined byTrajectory.Straight.Warhead.Trajectory.Straight.PassDetonateInitialDelaycontrols the initial delay for detonating the warhead defined byTrajectory.Straight.PassDetonateWarhead.Trajectory.Straight.PassDetonateLocalcontrols whetherTrajectory.Straight.PassDetonateWarheadand weapon'sWarheadare always detonate at ground level. It will also no longer restrict vertical velocity of the projectile when usingTrajectory.Straight.ConfineAtHeight.
Trajectory.Straight.LeadTimeCalculatecontrols whether the projectile need to calculate the lead time of the target when firing. Note that this will not affect the facing of the turret.Trajectory.Straight.OffsetCoordcontrols the offsets of the target. Projectile will aim at this position to attack. It also supportsInaccurate=yesandTrajectory.Straight.LeadTimeCalculate=trueon this basis.Trajectory.Straight.RotateCoordcontrols whether to rotate the projectile's firing direction within the angle bisector ofTrajectory.Straight.OffsetCoordaccording to the weapon'sBurst. Set to 0 to disable this function.Trajectory.Straight.MirrorCoordcontrols whetherTrajectory.Straight.OffsetCoordneed to mirror the lateral value to adapt to the current burst index. At the same time, the rotation direction calculated byTrajectory.Straight.RotateCoordwill also be reversed, and the rotation angle between each adjacent projectile on each side will not change as a result.Trajectory.Straight.UseDisperseBurstcontrols whether the calculation ofTrajectory.Straight.RotateCoordis based on its superior'sTrajectory.Disperse.WeaponBurstof the dispersed trajectory, rather thanBurstof the weapon. If this value is not appropriate, it will result in unsatisfactory visual displays.Trajectory.Straight.AxisOfRotationcontrols the rotation axis when calculatingTrajectory.Straight.RotateCoord. The axis will rotates with the unit orientation or the vector that from target position to the source position.
Trajectory.Straight.ProximityImpactcontrols the initial proximity fuse times. When there are enough remaining times and the projectile approaches another valid target, it will detonate a warhead defined byTrajectory.Straight.ProximityWarheadon it. If the times is about to run out, it will also detonate itself at its location. This function can be cancelled by setting to 0. A negative integer means unlimited times. By the way, you can use the weapon'sWarheadwith low versus only to aim at the target, and use theTrajectory.Straight.ProximityWarheadto causing actual harm. (You can use this to cause non repeated damage to all units encountered during the flight of the projectile.)Trajectory.Straight.ProximityWarheaddefines the warhead detonated byTrajectory.Straight.ProximityImpact, andTrajectory.Straight.ProximityDamagedefines the damage caused byTrajectory.Straight.ProximityWarhead.Trajectory.Straight.ProximityRadiuscontrols the range of proximity fuse. It can NOT be set as a negative integer.Trajectory.Straight.ProximityDirectcontrols whether let the target receive damage instead of detonating the warhead.Trajectory.Straight.ProximityMedialcontrols whether to detonateTrajectory.Straight.ProximityWarheadat the bullet's location rather than the proximity target's location. IfTrajectory.Straight.ProximityDirectis set to true, this will only affect the calculation result ofTrajectory.Straight.EdgeAttenuation.Trajectory.Straight.ProximityAlliescontrols whether allies will also trigger the proximity fuse.Trajectory.Straight.ProximityFlightcontrols whether to count units in the air.
Trajectory.Straight.ThroughVehiclescontrols whether the projectile will not be obstructed by vehicles or aircraft on the ground. When it is obstructed, it will be directly detonated at its location. If it still haveTrajectory.Straight.ProximityImpacttimes, it will also detonate aTrajectory.Straight.ProximityImpactat the location of the obstacle.Trajectory.Straight.ThroughBuildingcontrols whether the projectile will not be obstructed by buildings. When it is obstructed, it will be directly detonated at its location. If it still haveTrajectory.Straight.ProximityImpacttimes, it will also detonate aTrajectory.Straight.ProximityImpactat the location of the obstacle.Trajectory.Straight.SubjectToGroundcontrols whether the projectile should explode when it hits the ground. Note that this will not make AI search for suitable attack locations.Trajectory.Straight.ConfineAtHeightcontrols the height above ground that projectile will try to travel as it can. It can not move down from the cliff by settingSubjectToCliffs=true. It can be cancelled by setting as a non positive integer. It will be forcibly cancelled by settingTrajectory.Speedabove 256.Trajectory.Straight.EdgeAttenuationcontrols the edge attenuation ratio of projectile damage (includes all types of the trajectory's damage), that is, the actual damage caused will be this value multiplied by the ratio of the current distance to the weapon's range. Can NOT be set to a negative integer.Trajectory.Straight.CountAttenuationcontrols the attenuation coefficient of projectile damage (includes all types of the trajectory's damage), that is, how many times the next damage after each bounce is the damage just caused. Can NOT be set to a negative integer.
In 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 valueNote
- Make sure you set a low
Trajectory.Straight.ProximityRadiusvalue unless necessary. - The listed Warheads in
Trajectory.Straight.PassDetonateWarheadandTrajectory.Straight.ProximityWarheadmust be listed in[Warheads]for them to work.
Bombard trajectory
- Similar trajectory to
Straight, but targets a coordinate between the attacker and intended target first. When the projectile approaches that turning point, it'll turn to the intended target and explodes when it hits the target or ground.Trajectory.Bombard.Heightcontrols the height of the turning point.Trajectory.Bombard.FallPercentcontrols the distance of the turning point by its percentage of the total distance between attacker and intended target. If set to 0%, then it'll fly up vertically. If set to 100%, then it'll travel to the top of the intended target.- For each launch the turning point percentage could add or minus a random value, which is not greater than
Trajectory.Bombard.FallPercentShift. If set to 0%, random shift will be disabled. - You can also makes the turning point scatter randomly in a circle with
Trajectory.Bombard.FallScatter.Maxas its radius. If set to 0, random scatter will be disabled.Trajectory.Bombard.FallScatter.Mincan be used to determine the minimum radius of the circle. IfTrajectory.Bombard.FallScatter.Linearset to true, the random scatter will be limited to the line that is vertical to the original direction of the projectile.
- For each launch the turning point percentage could add or minus a random value, which is not greater than
Trajectory.Bombard.FreeFallOnTargetcontrols how it'll hit the intended target. If set to true, the projectile will be respawned above the intended target and free fall. If set to false, the projectile will travel to the intended target from the turning point.Trajectory.Bombard.NoLaunchcontrols whether the attacker will fire the projectile by itself. If set to true, projectile will directly fall from the turning point.Trajectory.Bombard.FallSpeedcontrols the initial speed of the projectile after it turns. If set to 0.0, then it'll useTrajectory.Speed. Can't work whenTrajectory.Bombard.FreeFallOnTargetset to true.Trajectory.Bombard.DetonationDistancecontrols the maximum distance in cells from intended target (checked at start of each game frame, before the projectile moves) at which the projectile will be forced to detonate. Set to 0 to disable forced detonation (note that this can cause the projectile to overshoot the target).Trajectory.Bombard.DetonationHeightcontrols when the projectile is in a descending state and below the height of the launch position plus this value, it will detonate prematurely. Taking effect when it is set to non negative value. IfTrajectory.Bombard.EarlyDetonationis set to true, it'll take effect during the ascending stage instead, which makes it detonate when its height is above the launch position plus this value.Trajectory.Bombard.TargetSnapDistancecontrols the maximum distance in cells from intended target the projectile can be at moment of detonation to make the projectile 'snap' on the intended target. Set to 0 to disable snapping.Trajectory.Bombard.TurningPointAnims, if set, will play an anim when the projectile reaches the turning point. IfTrajectory.Bombard.FreeFallOnTargetis set to true, it'll be spawned above the target with the projectile together. IfTrajectory.Bombard.NoLaunchis set to true, it'll be played at where the projectile falls, no matter if it's free fall or not. If more than one animation is listed, a random one is selected.Trajectory.Bombard.LeadTimeCalculatecontrols whether the projectile need to calculate the lead time of the target when firing. Note that this will not affect the facing of the turret.- The following tags further customize the projectile's descending behaviors when
Trajectory.Bombard.FreeFallOnTargetset to false.Trajectory.Bombard.OffsetCoordcontrols the offsets of the target. Projectile will aim at this position to attack. It also supportsInaccurate=yesandTrajectory.Bombard.LeadTimeCalculate=trueon this basis.Trajectory.Bombard.RotateCoordcontrols whether to rotate the projectile's firing direction within the angle bisector ofTrajectory.Bombard.OffsetCoordaccording to the weapon'sBurst. Set to 0 to disable this function.Trajectory.Bombard.MirrorCoordcontrols whetherTrajectory.Bombard.OffsetCoordneed to mirror the lateral value to adapt to the current burst index. At the same time, the rotation direction calculated byTrajectory.Bombard.RotateCoordwill also be reversed, and the rotation angle between each adjacent projectile on each side will not change as a result.Trajectory.Bombard.UseDisperseBurstcontrols whether the calculation ofTrajectory.Bombard.RotateCoordis based on its superior'sTrajectory.Disperse.WeaponBurstof the dispersed trajectory, rather thanBurstof the weapon. If this value is not appropriate, it will result in unsatisfactory visual displays.Trajectory.Bombard.AxisOfRotationcontrols the rotation axis when calculatingTrajectory.Bombard.RotateCoord. The axis will rotates with the unit orientation or the vector that from target position to the source position.
Trajectory.Bombard.SubjectToGroundcontrols whether the projectile should explode when it hits the ground. Note that this will not make AI search for suitable attack locations.
In 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 ; booleanParabola trajectory
- As the name says, this is a completely reset
Arcingwith different enhanced functions. Without doubt, It supported linkage withTrajectory=Disperse.Trajectory.Parabola.DetonationDistancecontrols the maximum distance in cells from intended target (checked at start of each game frame, before the projectile moves) at which the projectile will be forced to detonate. Set to 0 to disable forced detonation. More specifically, when it is set to a negative value, if the target is movable, it will change its target to the cell where the target is located (This is a function expanded forDisperseandAirburstpurposes).Trajectory.Parabola.TargetSnapDistancecontrols the maximum distance in cells from intended target the projectile can be at moment of detonation to make the projectile 'snap' on the intended target. Set to 0 to disable snapping.Trajectory.Parabola.OpenFireModecontrols how should the projectile be launched. This has the following 6 modes.- Speed - Automatic calculation mode with fixed horizontal velocity, using
Trajectory.Speedand target coordinates as calculation conditions, i.e. the flight time of the projectile is permanently fixed. - Height - Automatic calculation mode with fixed maximum height, useing
Trajectory.Parabola.ThrowHeightand target coordinates as calculation conditions, i.e. the detonation time of the projectile is relatively fixed. - Angle - Automatic calculation mode with fixed fire angle, useing
Trajectory.Parabola.LaunchAngleand target coordinates as calculation conditions. In this mode, the performance consumption is high, and may have no solution. It is not recommended to enableSubjectToCliffsor enableAAwith a smallerMinimumRangewhen using this mode. - SpeedAndHeight - Fixed horizontal velocity and maximum height mode, using
Trajectory.SpeedandTrajectory.Parabola.ThrowHeightas calculation conditions, i.e. the trajectory will only undergo altitude changes with the height of the target. - HeightAndAngle - Fixed maximum height and fire angle mode, using
Trajectory.Parabola.ThrowHeightandTrajectory.Parabola.LaunchAngleas calculation conditions, i.e. the trajectory will change horizontally with the height of the target. - SpeedAndAngle - Fixed horizontal velocity and fire angle mode, using
Trajectory.SpeedandTrajectory.Parabola.LaunchAngleas calculation conditions, i.e. the trajectory will be permanently fixed.
- Speed - Automatic calculation mode with fixed horizontal velocity, using
Trajectory.Parabola.ThrowHeightcontrols the maximum height of the projectile and is only used for modes 1, 3, or 4. The specific height will be determined by taking the larger of the launch height and the target height then increasing this value. Non positive numbers are not supported.Trajectory.Parabola.LaunchAnglecontrols the fire angle of the projectile and is only used for modes 2, 4, or 5. Only supports -90.0 ~ 90.0 (Cannot use boundary values) in Mode 2 or 5, and 0.0 ~ 90.0 (Cannot use boundary values) in Mode 4.Trajectory.Parabola.LeadTimeCalculatecontrols whether the projectile need to calculate the lead time of the target when firing. Note that this will not affect the facing of the turret.Trajectory.Parabola.DetonationAnglecontrols when the angle between the projectile in the current velocity direction and the horizontal plane is less than this value, it will detonate prematurely. Taking effect when the value is at -90.0 ~ 90.0 (Cannot use boundary values).Trajectory.Parabola.DetonationHeightcontrols when the projectile is in a descending state and below the height of the launch position plus this value, it will detonate prematurely. Taking effect when it is set to non negative value.Trajectory.Parabola.BounceTimescontrols how many times can it bounce back when the projectile hits the ground or cliff. Be aware that excessive projectile speed may cause abnormal operation. AndTrajectory.Parabola.DetonationDistancedo not conflict with this and will take effect simultaneously. So if you want to explode the bullet only after the times of bounces is exhausted, you should setTrajectory.Parabola.DetonationDistanceto a non positive value.Trajectory.Parabola.BounceOnWatercontrols whether it can bounce on the water surface.Trajectory.Parabola.BounceDetonatecontrols whether it detonates the warhead once extra during each bounce.Trajectory.Parabola.BounceAttenuationcontrols the attenuation coefficient of projectile bounce damage, that is, how many times the next damage after each bounce is the damage just caused. This will also affect the damage of the final detonation.Trajectory.Parabola.BounceCoefficientcontrols the attenuation coefficient of projectile bounce elasticity, that is, how many times the speed after each bounce is the speed before bouncing.
Trajectory.Parabola.OffsetCoordcontrols the offsets of the target. Projectile will aim at this position to attack. It also supportsInaccurate=yesandTrajectory.Parabola.LeadTimeCalculate=trueon this basis.Trajectory.Parabola.RotateCoordcontrols whether to rotate the projectile's firing direction within the angle bisector ofTrajectory.Parabola.OffsetCoordaccording to the weapon'sBurst. Set to 0 to disable this function.Trajectory.Parabola.MirrorCoordcontrols whetherTrajectory.Parabola.OffsetCoordneed to mirror the lateral value to adapt to the current burst index. At the same time, the rotation direction calculated byTrajectory.Parabola.RotateCoordwill also be reversed, and the rotation angle between each adjacent projectile on each side will not change as a result.Trajectory.Parabola.UseDisperseBurstcontrols whether the calculation ofTrajectory.Parabola.RotateCoordis based on its superior'sTrajectory.Disperse.WeaponBurstof the dispersed trajectory, rather thanBurstof the weapon. If this value is not appropriate, it will result in unsatisfactory visual displays.Trajectory.Parabola.AxisOfRotationcontrols the rotation axis when calculatingTrajectory.Parabola.RotateCoord. The axis will rotates with the unit orientation or the vector that from target position to the source position.
In 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,HeightNote
- Compared to vanilla
Arcing, this can also be used for aircraft and airburst weapon. - Certainly,
Gravitycan also affect the trajectory.
Projectiles blocked by land or water
- It is now possible to make projectiles consider either land or water as obstacles that block their path by setting
SubjectTo(Land/Water)to true, respectively. Weapons firing such projectiles will consider targets blocked by such obstacles as out of range and will attempt to reposition themselves so they can fire without being blocked by the said obstacles before firing and ifSubjectTo(Land/Water).Detonateis set to true, the projectiles will detonate if they somehow manage to collide with the said obstacles.Level=trueprojectiles detonate on tiles belonging to non-water tilesets by default, but will not consider such tiles as true obstacles. This behaviour can be overridden by setting these keys.
- As for
SubjectToGround, if set it to true ,it will predict the height of the connecting straight line from the bullet's source coordinates to target coordinates. If the predicted height is lower than the ground height of the current predicted position, the firer will also consider targets blocked by such obstacles as out of range and will attempt to reposition themselves. Due to technical reasons, this feature will not be effective for the Air Force and buildings. Technos attacking inOpenTopped=truevehicles will not be affected either.
In rulesmd.ini:
[SOMEPROJECTILE] ; Projectile
SubjectToLand= ; boolean
SubjectToLand.Detonate=true ; boolean
SubjectToWater= ; boolean
SubjectToWater.Detonate=true ; boolean
SubjectToGround=false ; booleanReturn weapon
- It is now possible to make another weapon & projectile go off from a detonated projectile (in somewhat similar manner to
AirburstWeaponorShrapnelWeapon) straight back to the firer by settingReturnWeapon. If the firer perishes before the initial projectile detonates,ReturnWeaponis not fired off.ReturnWeapon.ApplyFirepowerMultdetermines whether or not the auxiliary weapon's damage should multiply the firer's firepower multipliers.
In rulesmd.ini:
[SOMEPROJECTILE] ; Projectile
ReturnWeapon= ; WeaponType
ReturnWeapon.ApplyFirepowerMult=false ; booleanSuper Weapons
AI Superweapon delay timer
- By default AI houses only process superweapon logic e.g checks if it can fire any superweapons firing them at randomized intervals of 106 to 112 game frames. This behaviour can now be customized by setting explicit delay, or disabling it entirely. Values of 0 and below disable the delay and cause AI houses to check superweapons on every game frame.
In rulesmd.ini:
[General]
AISuperWeaponDelay= ; integer, game framesAux technos and TechLevel requirement of superweapon
SW.AuxTechnosspecifies the auxiliary technos without which this super weapon cannot become available. The player has to own at least one techno of any of these types to get access to this super weapon.SW.NegTechnosspecifies the negative auxiliary technos whose presence will cause the super weapon to become unavailable. This super weapon can become available only if the player does not own any techno of any of these types.SW.TechLevelspecifies the TechLevel that the owner must not fall below in order to use this super weapon. The super weapon becomes available only if the player's TechLevel reaches that level.
In rulesmd.ini:
[SOMESW] ; SuperWeaponType
SW.AuxTechnos= ; List of TechnoTypes
SW.NegTechnos= ; List of TechnoTypes
SW.TechLevel=0 ; integerNote
SW.TechLevel does not treat -1 as a special value. If you want to restrict a super weapon to be available only to AI players, please use SW.AllowPlayer and SW.AllowAI.
Convert TechnoType
- Warheads can now change TechnoTypes of affected units to other Types in the same category (infantry to infantry, vehicles to vehicles, aircraft to aircraft).
ConvertN.From(where N is 0, 1, 2...) specifies which TechnoTypes are valid for conversion. This entry can have many types listed, meanging that many types will be converted at once. When no types are included, conversion will affect all valid targets.ConvertN.Tospecifies the TechnoType which is the result of conversion.ConvertN.AffectsHousespecifies whose units can be converted.Convert.From,Convert.ToandConvert.AffectsHouse(without numbers) are a valid alternative toConvert0.From,Convert0.ToandConvert0.AffectsHouseif only one pair is specified.- Conversion affects all existing units of set TechnoTypes, this includes units in: transports, occupied buildings, buildings with
InfantryAbsorb=yesorUnitAbsorb=yes, buildings withBunker=yes.
In example, this superweapon would convert all owned and friendly SOLDIERA and SOLDIERB to NEWSOLDIER:
[ExampleSW]
Convert.From=SOLDIERA,SOLDIERB
Convert.To=NEWSOLDIER
Convert.AffectsHouse=teamIn 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)Warning
This feature has the same limitations as Ares' Type Conversion. This feature does not support BuildingTypes.
Warning
This feature requires Ares 3.0 or higher to function! When Ares 3.0+ is not detected, not all properties of a unit may be updated.
Customize SuperWeapon TabIndex
- You can now assign a Super Weapon's cameo to any sidebar tab using
TabIndex.- Valid values are: 0 (buildings tab), 1 (arsenal tab), 2 (infantry tab), 3 (vehicle tab).
In rulesmd.ini:
[SOMESW] ; SuperWeaponType
TabIndex=1 ; integerEMPulse settings
- It is possible to customize which weapon a building with
EMPulseCannon=truefires when an associatedType=EMPulsesuperweapon (only ifEMPulse.TargetSelf=falseor omitted) is fired by settingEMPulse.WeaponIndex.- Note that if you fire another
Type=EMPulsesuperweapon with different weapon index that the same building is capable of launching before the first weapon was fired, the latter superweapon's settings will take precedence. - Additionally, due to technical limitations the targeting constraints will always default to primary weapon's
Range/MinimumRangeunlessSW.RangeMinimum/SW.RangeMaximumare explicitly set.
- Note that if you fire another
- Is is now also possible to have all other
Type=EMPulsesuperweapons that can be fired by same buildings as current one be put on hold until first of the buildings currently set to fire goes off if the firing superweapon hasEMPulse.SuspendOthers=true.
In rulesmd.ini:
[SOMESW] ; SuperWeaponType
EMPulse.WeaponIndex=0 ; integer, weapon slot index
EMPulse.SuspendOthers=false ; booleanNote
Type=EMPulse superweapon and any associated keys are Ares features.
LimboDelivery
Superweapons can now deliver off-map buildings that act as if they were on the field.
LimboDelivery.Typesis the list of BuildingTypes that will be created when the Superweapons fire. SuperweaponTypeand coordinates do not matter.LimboDelivery.IDsis the list of numeric IDs that will be assigned to buildings. Necessary for LimboKill to work.
Created buildings are not affected by any on-map threats. The only way to remove them from the game is by using a Superweapon with
LimboKill.IDsset.LimboKill.AffectsHousesets which houses are affected by this feature.LimboKill.IDslists IDs that will be targeted. Buildings with these IDs will be removed from the game instantly.LimboKill.Countssets how many buildings of each type will be removed. Value from position matching the position fromLimboKill.IDsis used if found, or no limitation if not found. If list is empty, there's no limitation for all types.
Delivery can be made random with these optional tags. The game will randomly choose only a single building from the list for each roll chance provided.
LimboDelivery.RollChanceslists chances of each "dice roll" happening. Valid values range from 0% (never happens) to 100% (always happens). Defaults to a single sure roll.LimboDelivery.RandomWeightsNlists the weights for each "dice roll" that increase the probability of picking a specific building. Valid values are 0 (don't pick) and above (the higher value, the bigger the likelyhood).RandomWeightsare a valid alias forRandomWeights0. If a roll attempt doesn't have weights specified, the last weights will be used.
Note
This feature might not support every building flag. Flags that are confirmed to work correctly are listed below:
- 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)
In order for this feature to work with AITriggerTypes conditions ("Owning house owns ???" and "Enemy house owns ???"),
LegalTargetmust be set to true.
In 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 integersWarning
Remember that Limbo Delivered buildings don't exist physically! This means they should never have enabled machanics that require interaction with the game world (i.e. factories, cloning vats, service depots, helipads). They also should have either KeepAlive=no set or be killable with LimboKill - otherwise the game might never end.
Linked superweapons
- Superweapons can now set a list of linked superweapons with
SW.Link, which will be granted or set timers when the original superweapon is launched. SW.Link.Grantallow the linked superweapons to be added 1-time to the firer like the nuke crate if it's not presented.SW.Link.Readyspecifies if superweapons timers should be set to readiness.SW.Link.Resetspecifies if superweapons timers should be reset. Takes precedence overSW.Link.Ready.- For a granted superweapon, the other will be:
- Check
SW.Link.Resetto see if it needs to be reset. - If false, check
SW.Link.Readyto see if it needs to be set to readiness. - If false, whether it'll be ready or not is decided by the granted superweapon's
SW.InitialReady.
- Check
- For a granted superweapon, the other will be:
Message.LinkedSWAcquiredwill be displayed to the firer when at least 1 linked superweapon is acquired or has timer set.EVA.LinkedSWAcquiredwill be played to the firer when at least 1 linked superweapon is acquired or has timer set.- These superweapons can be made random with these optional tags. The game will randomly choose only a single superweapon from the list for each roll chance provided.
SW.Link.RollChanceslists chances of each "dice roll" happening. Valid values range from 0% (never happens) to 100% (always happens). Defaults to a single sure roll.SW.Link.RandomWeightsNlists the weights for each "dice roll" that increase the probability of picking a specific superweapon. Valid values are 0 (don't pick) and above (the higher value, the bigger the likelyhood).RandomWeightsare a valid alias forRandomWeights0. If a roll attempt doesn't have weights specified, the last weights will be used.
In 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 entryNext
Use of SW.Next to link multiple ChronoSphere and ChronoWarp superweapons into a chained SuperWeapon system in Cylearun
- Superweapons can now launch other superweapons at the same target. Launched types can be additionally randomized using the same rules as with LimboDelivery (see above).
SW.Next.RealLaunchcontrols whether the owner who fired the initial superweapon must own all listed superweapons and sufficient funds to supportMoney.Amout. Otherwise they will be launched forcibly.SW.Next.IgnoreInhibitorsignoresSW.Inhibitors/SW.AnyInhibitorof each superweapon, otherwise only non-inhibited superweapons are launched.SW.Next.IgnoreDesignatorsignoresSW.Designators/SW.AnyDesignatorrespectively.
- These superweapons can be made random with these optional tags. The game will randomly choose only a single superweapon from the list for each roll chance provided.
SW.Next.RollChanceslists chances of each "dice roll" happening. Valid values range from 0% (never happens) to 100% (always happens). Defaults to a single sure roll.SW.Next.RandomWeightsNlists the weights for each "dice roll" that increase the probability of picking a specific superweapon. Valid values are 0 (don't pick) and above (the higher value, the bigger the likelyhood).RandomWeightsare a valid alias forRandomWeights0. If a roll attempt doesn't have weights specified, the last weights will be used.
In 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.Warhead or Weapon detonation at target cell
- Any superweapon can now detonate a Warhead or a weapon at superweapon's target cell.
- If both
Detonate.WarheadandDetonate.Weaponare set, latter takes precedence. Detonate.Warhead.Fullcustomizes whether or not the Warhead is detonated fully (as part of a dummy weapon) or simply deals area damage and applies Phobos' Warhead effects.Detonate.Damage, if not set, defaults to weaponDamageforDetonate.Weaponand 0 forDetonate.Warhead.- Both the weapon and Warhead behave as if fired by whatever building fired the Superweapon. This respects controls like
SW.RangeMinimum/Maximum(similar to Ares' GenericWarhead superweapon in this regard). If firing building could not be found, the house the Superweapon belonged to is still used to deal damage and apply Phobos-introduced Warhead effects. - If
Detonate.AtFireris set to true, the weapon or Warhead is detonated at the firing building instead of the superweapon's target cell. If there is no firer, no detonation will occur.
- If both
In rulesmd.ini:
[SOMESW] ; SuperWeaponType
Detonate.Warhead= ; WarheadType
Detonate.Warhead.Full=true ; boolean
Detonate.Weapon= ; WeaponType
Detonate.Damage= ; integer
Detonate.AtFirer=false ; booleanTechnos
Aggressive attack move mission
AttackMove.Aggressiveallows your technos to attack the enemy's unarmed buildings more aggressively when in attack move mission (Ctrl+Shift).AttackMove.UpdateTargetallows your technos to automatically change and select a higher threat target when in attack move mission (Ctrl+Shift).
In 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.UpdateTargetAttack move - behavior when target acquired
- Now you can make attack-moving units stop moving when they spot an enemy using
AttackMove.StopWhenTargetAcquired. This is more like the attack move behavior in Starcraft and Warcraft.- This feature is used to prevent units from charging forward and taking more damage during an attack move command.
- You can also make them keep chasing on the spotted target using
AttackMove.PursuitTarget.- This feature should be useful for close range units like ZEP.
In rulesmd.ini:
[General]
AttackMove.StopWhenTargetAcquired= ; boolean
[SOMETECHNO] ; TechnoType
AttackMove.StopWhenTargetAcquired= ; boolean, default to [General] -> AttackMove.StopWhenTargetAcquired if set, inverse of OpportunityFire otherwise.
AttackMove.PursuitTarget= ; booleanNote
- Many units would have stopped when they found an enemy during an attack move command already. This behavior is independent from
AttackMove.StopWhenTargetAcquired. - Some units (f.ex. jumpjets) will not fire correctly under the vanilla attack move command. The exact reason is not clear, but this feature can fix this problem.
- Jumpjets with
AttackMove.StopWhenTargetAcquired=truewill stop immediatly and not scatter to a cell. This is designed for practical reason.
Attack move - follow
- Now you can have some units following surrounding units when executing an attack move command. The follow behavior is equivalent to the behavior of follow command (
[Ctrl]+[Alt]).- Use
AttackMove.Follow.IncludeAirto determine whether the follower will follow an air unit. - Mind control units with
AttackMove.Follow.IfMindControlIsFull=trueset will follow if they reach the capacity.
- Use
- This feature should be useful for supportive units such as medics and repairers.
In rulesmd.ini:
[SOMETECHNO] ; TechnoType
AttackMove.Follow=false ; boolean
AttackMove.Follow.IncludeAir=false ; boolean
AttackMove.Follow.IfMindControlIsFull=false ; booleanAttack move - without weapon
- In vanilla, attack move command is not allowed to be given to units without weapons. Now you can disable this hardcoded behavior using
AttackMove.IgnoreWeaponCheck=true.- Unarmed units cannot actually execute attack move commands. This feature is to prevent the attack move pointer from being disabled when you select unarmed units and other units at the same time.
In rulesmd.ini:
[General]
AttackMove.IgnoreWeaponCheck=false ; booleanAttack non-threatening structures (Techno)
- You can now freely configure whether units can automatically target non-threatening structures.
AutoTarget.NoThreatBuildingsaffects player-controlled units,AutoTargetAI.NoThreatBuildingsaffects other units.
In rulesmd.ini:
[General]
AutoTarget.NoThreatBuildings=false ; boolean
AutoTargetAI.NoThreatBuildings=true ; booleanAircraft spawner customizations
Limited pursue range for spawns in Fantasy ADVENTURE
- If
Spawner.LimitRangeis set, the spawned units will abort their pursuit if the enemy is out of the range of the largest weaponRangeof aSpawner=trueweapon of the spawner.Spawner.ExtraLimitRangeadds extra pursuit range on top of the weapon range.
Spawner.DelayFramescan be used to set the minimum number of game frames in between each spawn ejecting from the spawner. By default this is 9 frames for missiles and 20 for everything else.- If
Spawner.AttackImmediatelyis set to true, spawned aircraft will assume attack mission immediately after being spawned instead of waiting for the remaining aircraft to spawn first. Spawner.UseTurretFacing, if set, makes spawned aircraft face the same way as turret does upon being created if the spawner has a turret.Spawner.RecycleRangedefines the range (in cell) that the spawned is considered close enough to the spawner to be recycled.Spawner.RecycleAnimcan be used to play an anim on the spawned location when it is recycled. If more than one animation is listed, a random one is selected.Spawner.RecycleCoorddefines the relative position to the carrier that the spawned aircraft will head to.Spawner.RecycleOnTurretdefines if the FLH is relative to the turret rather than the body.
In 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 ; booleanNote
If you set recycle FLH, it is best to set a recycle range of at least 0.5 at the same time. Otherwise, the spawner may not recycle correctly.
Automatic conversion based on ammo
- Units can now be converted into another unit by ammo count.
Ammo.AutoConvertMinimumAmountdetermines the minimal number of ammo at which a unit converts automatically after the ammo update.Ammo.AutoConvertMaximumAmountdetermines the maximum number of ammo at which a unit converts automatically after the ammo update.Ammo.AutoConvertTypespecify the new techno after the conversion. This unit must be of the same type of the original (infantry -> infantry, vehicle -> vehicle or aircraft -> aircraft).- Setting a negative number will disable the ammo count check, and when both checks are disabled, conversion will not occur.
In rulesmd.ini:
[SOMETECHNO] ; TechnoType, before conversion
Ammo.AutoConvertMinimumAmount=-1 ; integer
Ammo.AutoConvertMaximumAmount=-1 ; integer
Ammo.AutoConvertType= ; TechnoType, after conversionWarning
This feature has the same limitations as Ares' Type Conversion. This feature does not support BuildingTypes.
Warning
This feature requires Ares 3.0 or higher to function! When Ares 3.0+ is not detected, not all properties of a unit may be updated.
Automatic passenger deletion
- Transports can erase passengers over time. Passengers are deleted in order of entering the transport, from first to last.
PassengerDeletion.Ratedetermines the interval in game frames that it takes to erase a single passenger.- If
PassengerDeletion.Rate.SizeMultiplyis set to true, this time interval is multiplied by the passenger'sSize.
- If
PassengerDeletion.UseCostAsRate, if set to true, changes the time interval for erasing a passenger to be based on the passenger'sCost. This does not factor in modifiers likeFactoryPlant.PassengerDeletion.CostMultipliercan be used to modify the cost-based time interval.PassengerDeletion.CostRateCapcan be used to set a cap to the cost-based time interval.
PassengerDeletion.AllowedHousesdetermines which houses passengers can belong to be eligible for deletion.PassengerDeletion.DontScore, if set to true, makes it so that the deleted passengers are not counted as having been killed by the transport (no experience, not recorded towards owning house's score etc).- If
PassengerDeletion.Soylentis set to true, an amount of credits is refunded to the owner of the transport. The exact amount refunded is determined by the passengersSoylent, or if not set, itsCost(this is affected by modifiers such asFactoryPlant).PassengerDeletion.SoylentMultiplieris a direct multiplier applied to the refunded amount of credits.PassengerDeletion.SoylentAllowedHousesdetermines which houses passengers can belong to be eligible for refunding.PassengerDeletion.DisplaySoylentcan be set to true to display the amount of credits refunded on the transport.PassengerDeletion.DisplaySoylentToHousesdetermines which houses can see this andPassengerDeletion.DisplaySoylentOffsetcan be used to adjust the display offset.
PassengerDeletion.ReportSoundandPassengerDeletion.Animcan be used to specify a sound and animation to play when a passenger is erased, respectively. If more than one animation is listed, a random one is selected.- If
PassengerDeletion.UnderEMPis set to true, the deletion will be processed when the transport is under EMP or deactivated.
In 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 ; booleanAutomatic passenger owner change to match transport owner
- Transports with
Passengers.SyncOwnerset to true will have the owner of their passengers changed to match the transport if transport's owner changes.- On
OpenTopped=truetransports this will also disable checks that prevent target acquisition by passengers when the transport is temporarily mind controlled. Passengers.SyncOwner.RevertOnExit, if set to true (which is the default), changes the passengers' owner back to whatever it was originally when they entered the transport when they are ejected.- Does not work on passengers acquired through use of
Abductor=trueweapon (Ares feature).
- On
In rulesmd.ini:
[SOMETECHNO] ; TechnoType
Passengers.SyncOwner=false ; boolean
Passengers.SyncOwner.RevertOnExit=true ; booleanAutomatically firing weapons
- You can now make TechnoType automatically fire its weapon(s) without having to scan for suitable targets by setting
AutoTargetOwnPosition, on either its base cell (in which case the weapon that is used for force-firing is used) or itself (in which case normal targeting and weapon selection rules and are respected) depending on ifAutoTargetOwnPosition.Selfis set or not.
In rulesmd.ini:
[SOMETECHNO] ; TechnoType
AutoTargetOwnPosition=false ; boolean
AutoTargetOwnPosition.Self=false ; booleanNote
To make this logic work properly, you need to ensure that there is no flag like CanPassiveAquire=false set on units that prevents target scanning.
Build limit group
- You can now make different technos share build limit in a group.
BuildLimitGroup.Typesdetermines the technos that'll be used for build limit conditions of the selected techno. Note that the limit won't be applied to technos in the list. To do this, you'll have to manually define the limit per techno.BuildLimitGroup.Numsdetermines the amount of technos that would reach the build limit. If using a single integer, it'll use the sum of all technos in the group to calculate build limit. If using a list of integers with the same size ofBuildLimitGroup.Types, it'll calculate build limit per techno with value matching the position inBuildLimitGroup.Typesis used for that type.BuildLimitGroup.Factordetermines each of this techno instance will count as what value when calculating build limit.- This is only used by BuildLimitGroup. No other place will use it when counting owned objects, including
BuildLimitGroup.ExtraLimit.
- This is only used by BuildLimitGroup. No other place will use it when counting owned objects, including
BuildLimitGroup.ContentIfAnyMatchdetermines the rule of calculating build limit per techno. If set to true, build limit will be content if the amount of any techno in the group reaches itsBuildLimitGroup.Numsvalue. If set to false, then it'll only be content if the amount of all technos in the group reached.BuildLimitGroup.NotBuildableIfQueueMatchdetermines the moment to stop the techno's production. If set to true, its production will be stopped once the condition is content by the sum of real technos and technos in production queue. If set to false, it'll only be stopped when the condition is content by real technos.- You can also add an extra value into
BuildLimitGroup.Nums, determined by the amount of specific technos owned by its house.BuildLimitGroup.ExtraLimit.Typesdetermines the technos that'll be used for extra value calculation.BuildLimitGroup.ExtraLimit.Numsdetermines the actual value of increment. Value matching the position inBuildLimitGroup.ExtraLimit.Typesis used for that type. For each of these technos, it'll increase the extra value by its amount * corresponding value from the list.BuildLimitGroup.ExtraLimit.MaxCountdetermines the maximum amount of technos being counted into the extra value calculation. Value matching the position inBuildLimitGroup.ExtraLimit.Typesis used for that type. If not set or set to a value below 1, it'll be considered as no maximum count.BuildLimitGroup.ExtraLimit.MaxNumdetermines the maximum of values inBuildLimitGroup.Numsafter extra limit calculation. If not set or set to a value below 1, it'll be considered as no maximum value.
In 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 ; integerConvert TechnoType on owner house change
- You can now change a unit's type when changing ownership from human to computer or from computer to human.
In rulesmd.ini:
[SOMETECHNO] ; TechnoType
Convert.HumanToComputer= ; TechnoType
Convert.ComputerToHuman= ; TechnoTypeCustom tint on TechnoTypes
- A tint effect similar to that used by Iron Curtain / Force Shield or
Psychedelic=trueWarheads can be applied to TechnoTypes naturally by settingTint.Colorand/orTint.Intensity.Tint.Intensityis additive lighting increase/decrease - 1.0 is the default object lighting.Tint.VisibleToHousescan be used to customize which houses can see the tint effect.- Tint effects can also be applied by attached effects and on shields.
In 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)Customizable disk drain logic
- It is possible to set properties of drain logic per technotypes.
DrainMoneyDisplayandDrainMoneyDisplay.OnTargetdetermine whether drain money will be displayed at firer and target respectively.DrainMoneyDisplay.Housesdetermines which houses can see the credits display on firer.DrainMoneyDisplay.Offsetis additional pixel offset for the center of the credits display, by default0,0at firer's center.DrainMoneyDisplay.OnTarget.UseDisplayIncomedetermines whether drain money display on target will use itsDisplayIncome.HousesandDisplayIncome.Offsetsettings. If set to false, it'll respect the firer'sDrainMoneyDisplay.HousesandDrainMoneyDisplay.Offsetsettings instead.
In 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= ; booleanCustomizable OpenTopped properties
- You can now override global
OpenToppedtransport properties per TechnoType. OpenTopped.IgnoreRangefindingcan be used to disableOpenToppedtransport rangefinding behaviour where smallest weapon range between transport and all passengers is used when approaching targets that are out of range and when scanning for potential targets.OpenTopped.AllowFiringIfDeactivatedcan be used to customize whether or not passengers can fire out when the transport is deactivated (EMP, powered unit etc).OpenTopped.ShareTransportTargetcontrols whether or not the current target of the transport itself is passed to the passengers as well.- You can also customize range bonus and damage multiplier for passenger inside the transport with
OpenTransport.RangeBonus/DamageMultiplier, which works independently from transport'sOpenTopped.RangeBonus/DamageMultiplier. OpenTopped.DecloakToFirecan customize if a transport has to uncloak to have passengers fireout if transport is also OpenTopped.
In 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 valueNote
Range of passive acquiring of passengers in an OpenTopped transport won't be affected by these RangeBonus values.
Customizable spawns queue
- It is now possible to spawn multiple types of spawnees from a spawner with
Spawns.Queue. The order of spawnees in this queue is the order of their respawn.Spawnsstill needs to be set to enable the spawner logic and act as a default spawnee.SpawnsNumberstill needs to be set to determine the amount of spawnee slots.- If the length of the queue is longer than the spawner's
SpawnsNumber, spawnee after this length will be omitted. If the length is shorter however, the rest of the positions will be filled by the spawnee defined bySpawns. Hence, it's recommended to make them the same.
In rulesmd.ini:
[SOMETECHNO] ; TechnoType
Spawns.Queue= ; List of AircraftTypes, in orderWarning
Note that all spawnees in a queue should have MissileSpawn set to the same value (all to true or false). Mixing them will make missile spawnees can't hit their targets.
Customize Ares's radar jam logic
- It is now possible to customize some properties of Ares's radar jam logic.
RadarJamHousesdetermines which houses will be affected by the jam.RadarJamDelaydetermines the interval of the jam, default to 30 frames like Ares did. Shorter interval means the jam will be applied more timely, but worse for performance.RadarJamAffectdetermines a list of buildings withRadar=yesorSpySat=yesthat could be affected by the jam. If it's empty, all radar buildings will be affected.RadarJamIgnoredetermines a list of buildings withRadar=yesorSpySat=yesthat couldn't be affected by the jam.
In 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 BuildingTypesCustomize whether transport can kept or kill passengers when driver has been killed
- It is now possible to customize whether transport can kept or kill passengers when driver has been killed.
Note
When DriverKilled.KeptPassengers=true is set, passengers will always be retained regardless of the DriverKilled.KillPassengers setting. If the transport also has OpenTopped=true and OpenTopped.AllowFiringIfDeactivated=false is not set, then passengers will continue attacking the target they were originally attacking, whether that target is inherited from the transport or acquired by themselves.
In rulesmd.ini:
[CombatDamage]
DriverKilled.KillPassengers=false ; boolean
[SOMETECHNO] ; TechnoType, transport
DriverKilled.KeptPassengers=false ; boolean
DriverKilled.KillPassengers= ; boolean, defaults to [CombatDamage] -> DriverKilled.KillPassengersWarning
If DriverKilled.KeptPassengers=true is set, even if there are other passengers that can be matched by Operator besides the killed driver, the transport unit will still change its owner to Special House and change its mission to Harmless, but it will not be disabled or have its brightness adjusted.
- If a new passenger enters the transport unit and can be matched by
Operator, then the owner will be changed normally. - This feature was originally designed for some special
OpenToppedunits, and has not yet been fully adapted to situations outside the design.
Customize EVA voice and SellSound when selling units
- When a building or a unit is sold, a sell sound as well as an EVA is played to the owner. These configurations have been deglobalized.
EVA.Soldis used to customize the EVA voice when selling.SellSoundis used to customize the report sound when selling.
In 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] -> SellSoundNote
Vanilla game played vehicles' SellSound globally. This has been changed in consistency with buildings' SellSound.
Disabling fallback to (Elite)Secondary weapon
- It is now possible to disable the fallback to
(Elite)Secondaryweapon from(Elite)Primaryweapon if it cannot fire at the chosen target by settingNoSecondaryWeaponFallbackto true (defaults to false).NoSecondaryWeaponFallback.AllowAAcontrols whether or not fallback because of projectileAAsetting and target being in air is still allowed. This does not apply to special cases where(Elite)Secondaryweapon is always chosen, including but not necessarily limited to the following:OpenTransportWeapon=1on an unit firing from insideOpenTopped=truetransport.NoAmmoWeapon=1on an unit withAmmovalue higher than 0 and current ammo count lower or equal toNoAmmoAmount.- Deployed
IsSimpleDeployer=trueunits withDeployFireWeapon=1set or omitted. DrainWeapon=trueweapons against enemyDrainable=yesbuildings.- Units with
IsLocomotor=trueset onWarheadof(Elite)Primaryweapon against buildings. - Weapons with
ElectricAssault=trueset onWarheadagainstOverpowerable=truebuildings belonging to owner or allies. Overpowerable=truebuildings that are currently overpowered.- Any system using
(Elite)WeaponX, f.exGunner=trueorIsGattling=trueis also wholly exempt.
- If
[CombatDamage] -> AllowWeaponSelectAgainstWallsis set to true,Secondarywill now be used against walls ifPrimaryweapon Warhead hasWall=false,SecondaryhasWall=trueand the firer does not haveNoSecondaryWeaponFallbackset to true. Can be overriden by settingAllowWeaponSelectAgainstWallsfor a techno.
In rulesmd.ini:
[CombatDamage]
AllowWeaponSelectAgainstWalls=false ; boolean
[SOMETECHNO] ; TechnoType
NoSecondaryWeaponFallback=false ; boolean
NoSecondaryWeaponFallback.AllowAA=false ; boolean
AllowWeaponSelectAgainstWalls= ; boolean, default to [CombatDamage] -> AllowWeaponSelectAgainstWallsDisguise logic additions (disguise-based movement speed, disguise blinking visibility)
DisguiseBlinkingVisibilitycan be used to customize which players can see disguises blinking on units. This does not affect targeting but does affect veterancy insignia visibility - blinking disguise means the original unit's insignia is visible always instead of disguise's.- Another thing to note is that in singleplayer missions, for purposes of the disguise blinking, disguised objects owned by any player-controlled houses are also considered to be owned by the current player even if they are not allied, meaning players are always able to see their disguises blinking unless
DisguiseBlinkingVisibilityis set tononeorenemies.
- Another thing to note is that in singleplayer missions, for purposes of the disguise blinking, disguised objects owned by any player-controlled houses are also considered to be owned by the current player even if they are not allied, meaning players are always able to see their disguises blinking unless
UseDisguiseMovementSpeed, if set, makes disguised unit adjust its movement speed to match that of the disguise, if applicable. Note that this applies even when the disguise is revealed, as long as it has not been removed.
In rulesmd.ini:
[General]
DisguiseBlinkingVisibility=owner ; List of Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
[SOMETECHNO] ; TechnoType
UseDisguiseMovementSpeed=false ; booleanExclusion from base center calculations
- It is possible to exclude TechnoType from base center calculations (used for number of things such as certain AI scripts and AI superweapon targeting modes etc). Normally only buildings are factored in, but the initial base center does count house's starting technos which this does affect.
In rulesmd.ini:
[SOMETECHNO] ; TechnoType
IgnoreForBaseCenter=false ; booleanExtended gattling rate down logic
- Now you can customize some effects of
RateDown.RateDown.Delaycontrols the delay before usingRateDownto reduce the gattling value.RateDown.Resetcontrols whether to reset the gattling value directly when the techno has no target or changes targets.RateDown.Cover.Valuereplaces the originalRateDownwhen techno's ammo is lower thanRateDown.Cover.AmmoBelow.
In 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 ; integerExtra threat
- Now you can adjust the techno's evaluation of the threat posed by the target in more ways. This will help the techno in auto - targeting.
- When the target poses a threat to the techno, it will receive an additional threat value defined by
ExtraThreat.IsThreat.- Generally speaking, "Posing a threat" means the target can fire at the techno.
- Using
AlwaysConsideredThreatmakes the target always considered to be a threat.
- When the target is within the techno's range, it will receive an additional threat value defined by
ExtraThreat.InRange. - When the target is within the techno's range, it will receive an additional threat value equal to
ExtraThreatCoefficient.InRangeDistancemultiplied by the distance (in cells) from the target to the techno.- Only considering in-range is because the vanilla flag
TargetDistanceCoefficientDefaultonly considers outside-range. This flag is complementary to that.
- Only considering in-range is because the vanilla flag
- The target will receive an additional threat value equal to
ExtraThreatCoefficient.Facingmultiplied by the difference in facing from the techno's current firing-facing to the target's facing.- "Firing-facing" refers to the facing the techno uses to check if it "is already facing the target and can fire". Infantry doesn't check the facing when firing, so this is also invalid for infantry.
- The unit of facing is the in-game internal numerical scale. A full circle corresponds to 65536.
- The target will receive an additional threat value equal to
ExtraThreatCoefficient.DistanceToLastTargetmultiplied by the distance (in cells) from the target to the techno's last target.- Each techno will record its current target as the "last target" per frame. This record will be retained for at most 15 frames after the target becomes invalid.
- If the techno doesn't have a "last target", then this will not take effect.
- When the target poses a threat to the techno, it will receive an additional threat value defined by
In 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 nameFiring offsets for specific Burst shots
- You can now specify separate firing offsets for each of the shots fired by weapon with
Burstvia using(Elite)(Prone/Deployed)PrimaryFire|SecondaryFire|WeaponX|FLH.BurstNkeys, depending on which weapons your TechnoType makes use of. N inBurstNis zero-based burst shot index, and the values are parsed sequentially until no value for either regular or elite weapon is present, with elite weapon defaulting to regular weapon FLH if only it is missing. If no burst-index specific value is available, value from the base key (f.exPrimaryFireFLH) is used. - Burst-index specific firing offsets are absolute firing offsets and the lateral shifting based on burst index that occurs with the base firing offsets is not applied.
In 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.Forcing specific weapon against certain targets
Naval underwater target behavior with ForceWeapon.Naval.Decloaked in C&C: Reloaded
Enemy behavior against EMP targets with ForceWeapon.UnderEMP in C&C: Reloaded
- Can be used to override normal weapon selection logic to force specific weapons to use against certain targets. If multiple are set and target satisfies the conditions, the first one in listed order satisfied takes effect.
ForceWeapon.Naval.Decloakedforces specified weapon to be used against uncloakedNaval=yestargets. Useful if your naval unit has one weapon only for underwater and another weapon for surface targets.ForceWeapon.Cloakedforces specified weapon to be used against any cloaked targets.ForceWeapon.Disguisedforces specified weapon to be used against any disguised targets.ForceWeapon.UnderEMPforces specified weapon to be used if the target is under EMP effect.ForceWeapon.InRangeforces specified a list of weapons to be used once the target is within theirRange. IfForceWeapon.InRange.TechnoOnlyset to true, it'll only be forced on TechnoTypes like other forced weapons, otherwise it'll also be forced when attacking empty grounds. The first weapon in the listed order satisfied will be selected. Can be applied to both ground and air target ifForceAAWeapon.InRangeis not set.ForceAAWeapon.InRangedoes the same thing but only for air target. Taking priority toForceWeapon.InRange, which means that it can only be applied to ground target when they're both set.Force(AA)Weapon.InRange.Overridesoverrides the range when decides which weapon to use. Value from position matching the position fromForce(AA)Weapon.InRangeis used if found, or the weapon's ownRangeif not found or set to a value below 0.- If
Force(AA)Weapon.InRange.ApplyRangeModifiersis set to true, any applicable weapon range modifiers from the firer are applied to the decision range.
- A series of tags can force specified weapons based on the target's type.
ForceWeapon.Naval.Unitsforces specified weapon to be used againstNaval=yesunits. Taking priority toForceWeapon.Units.- If
ForceWeapon.Defensesis enabled, it'll be used if the target is a building withBuildCat=Combat. Otherwise it'll followForceWeapon.Buildings, if enabled. ForceWeapon.Infantry/Units/Aircraftcan be applied to both ground and air target ifForceAAWeapon.Infantry/Units/Aircraftis not set.ForceAAWeapon.Infantry/Units/Aircraftdo the same things but only for air target. Taking priority toForceWeapon.Infantry/Units/Naval.Units/Aircraft, which means that they can only be applied to ground target when they're both set.
In 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 disableNote
Specifically, if a position has Force(AA)Weapon.InRange set to -1 and Force(AA)Weapon.InRange.Overrides set to a positive value, it'll use default weapon selection logic once satisfied.
Fast access vehicle/structure
- Now you can let infantry or vehicle passengers quickly enter or leave the transport vehicles/structures without queuing.
In 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)Initial spawns number
- It is now possible to set the initial amount of spawnees for a spawner, instead of always being filled. Won't work if it's larger than
SpawnsNumber.
In rulesmd.ini:
[SOMETECHNO] ; TechnoType
InitialSpawnsNumber= ; integerInitial strength for TechnoTypes and cloned infantry

Initial strength for cloned infantry example in C&C: Reloaded
InitialStrengthcan be used to set how many hitpoints a TechnoType starts with.InitialStrength.Cloningcan be used to specify a percentage of hitpoints (single value or a range from which a random value is picked) cloned infantry produced byCloning=truebuilding start with.
In rulesmd.ini:
[SOMETECHNO] ; TechnoType
InitialStrength= ; integer
[SOMEBUILDING] ; BuildingType
InitialStrength.Cloning= ; floating point value - single or comma-sep. range (percentages)Note
Both InitialStrength and InitialStrength.Cloning never surpass the type's Strength, even if your values are bigger than it.
Kill Object Automatically
Objects can be destroyed automatically if any of these conditions is met:
OnAmmoDepletion: The object will die if the remaining ammo reaches 0.OnOwnerChange: The object's ownership has been changed.OnOwnerChange.HumanToComputer/ComputerToHuman: The object's ownership has been changed from human to computer or from computer to human. Default toOnOwnerChangeif not set.
AfterDelay: The object will die if the countdown (in frames) reaches 0.TechnosExist/TechnosDontExist: The object will die if TechnoTypes exist or do not exist, respectively.Technos(Dont)Exist.Anycontrols whether or not a single listed TechnoType is enough to satisfy the requirement or if all are required.Technos(Dont)Exist.AllowLimboedcontrols whether or not limboed TechnoTypes (f.ex those in transports) are counted.Technos(Dont)Exist.Housescontrols which houses are checked.
The auto-death behavior can be chosen from the following:
kill: The object will be destroyed normally.vanish: The object will be directly removed from the game peacefully instead of actually getting killed.sell: If the object is a building with buildup, it will be sold instead of destroyed.
If this option is not set, the self-destruction logic will not be enabled.
AutoDeath.VanishAnimationcan be set to animation to play at object's location ifvanishbehaviour is chosen. If more than one animation is listed, a random one is selected.This logic also supports buildings delivered by LimboDelivery. However in this case, all
AutoDeath.Behaviorvalues produce identical result where the building is simply deleted.
In 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)Note
Please notice that if the object is a unit which carries passengers, they will not be released even with the kill option if you are not using Ares 3.0+.
Low priority for deploy
- You can now set lower priority for TechnoType deploying which means it will be excluded from deploy command if selected together with other units. This will not affect the cursor action which requires no other objects to be selected in the first place.
In rulesmd.ini:
[SOMETECHNO] ; TechnoType
LowDeployPriority=false ; boolean- This behavior is designed to be toggleable by users. For now you can only do that externally via client or manually.
In RA2MD.INI:
[Phobos]
PriorityDeployFiltering=true ; booleanMind Control enhancement
Mind Control Range Limit used in Fantasy ADVENTURE
Multiple Mind Control unit auto-releases the first victim in Fantasy ADVENTURE
- Mind controllers now can have the upper limit of the control distance. Tag values greater than 0 will activate this feature.
- Mind controlled targets can have size of control, like passengers in transport.
- Mind controllers now can decide which house can see the link drawn between itself and the controlled units.
- Mind controllers with multiple controlling slots can now release the first controlled unit when they have reached the control limit and are ordered to control a new target.
In 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 ; integerMulti Weapon
Multi Weapon used to release different weapons against different targets in Zero Boundary by @Stormsulfur
- You can now use
WeaponXto enable more than 2 weapons for a TechnoType without hardcodedGunner=yes,IsGattling=yesorIsChargeTurret=yesrestriction.- Set
MultiWeapon=yesto enable this feature, be careful not to forgetWeaponCount. MultiWeapon.IsSecondaryspecifies which weapons will be considered asSecondarywhen selecting weapons or triggering infantry'sSecondaryFiresettings. If not set,Weapon1will be considered asSecondary.MultiWeapon.SelectCountdetermines the number of weapons that can be selected by default weapon selection logic. Notice that higher number is bad for performance.- If the number is smaller than the total amount of weapons, the ones with smaller indices will be picked.
- Other weapons can still be used for logic that specify a weapon index, such as ForceWeapon.
- Set
In rulesmd.ini:
[SOMETECHNO] ; TechnoType
MultiWeapon=false ; boolean
MultiWeapon.IsSecondary= ; List of integers
MultiWeapon.SelectCount=2 ; integerMulti VoiceAttack
- Units can customize the attack voice that plays when using more weapons.
- If you need to assign an attack-voice to
Weapon1, simply setVoiceWeapon1Attack. The same applies to other weapons. VoiceEliteWeaponNAttackcan also be used to specify attack voices forEliteWeaponN. The default isVoiceWeaponNAttack.
- If you need to assign an attack-voice to
In rulesmd.ini:
[SOMETECHNO] ; TechnoType
VoiceWeaponNAttack= ; Sound entry
VoiceEliteWeaponNAttack= ; Sound entryNo Manual Move
- You can now specify whether a TechnoType is unable to receive move command.
- Set this to
trueon a building withUndeploysIntoset could prevent it from undeploying when setting the rally point.
In rulesmd.ini:
[SOMETECHNO] ; TechnoType
NoManualMove=false ; booleanNote
Note that you can still undeploy the building by using a BuildingUndeploy=true warhead or by setting a rally point and selling it.
No rearm and reload in EMP or temporal
- Now you can make technos unable to rearm and reload when they are in EMP or locked by a temporal weapon. Defaults to values in
[General]. This will not affect the reloading of the airport aircraft.
In 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= ; booleanOverload characteristic dehardcoded
- It is now possible to customize
Overloadbehaviors for a TechnoType withInfiniteMindControl=yesweapon.
In 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 ; integerPromoted Spawns
Promoted Spawns in Fantasy ADVENTURE
- The spawned units will promote as their owner's veterancy.
In rulesmd.ini:
[SOMETECHNO] ; TechnoType
Promote.IncludeSpawns=false ; booleanPromotion animation
- You can now specify an animation on the unit or structure promotion.
Promote.VeteranAnimationis used when unit or structure is promoted to veteran. If this is set for a TechnoType, it'll override the global setting in[AudioVisual]. If more than one animation is listed, a random one is selected.Promote.EliteAnimationis used when unit or structure is promoted to elite. If this is set for a TechnoType, it'll override the global setting in[AudioVisual]. If more than one animation is listed, a random one is selected.- If
Promote.EliteAnimationis not defined,Promote.VeteranAnimationwill play instead when unit or structure is promoted to elite.
In 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]Raise alert when technos are taking damage
- In Vanilla, non-building technos will not generate radar events or EVAs when attacked, so players can hardly notice them until they are destroyed. You can now receive a radar event (and optionally a sound effect) when your units is attacked, so you can respond to the combats in time.
[AudioVisual] -> CombatAlertis a global switch, set it totrueto enable the entire logic.- These flags controlls when to trigger a combat alert.
- You can disable this logic on specific techno by setting
[TechnoType] -> CombatAlerttofalse, which default to[AudioVisual] -> CombatAlert.Default. IfCombatAlert.Defaultis also empty, it is defaultly disabled for technos withInsignificant=yesorSpawned=yes. [AudioVisual] -> CombatAlert.IgnoreBuildingwill turn the logic off on buildings. You can override it for specific building by setting[TechnoType] -> CombatAlert.NotBuildingto true. You may hope to use it on veh-buildings.[AudioVisual] -> CombatAlert.SuppressIfInScreendecides whether to disable the logic for the units in the current screen.[AudioVisual] -> CombatAlert.Intervaldecides the time interval (in frames) between alerts, to prevent the alert from being anonying. It is default to 150 frames.[AudioVisual] -> CombatAlert.SuppressIfAllyDamagedecides whether to disable the logic for the damage from allys.- Technos hitted by a warhead with
[WarheadType] -> CombatAlert.Suppresssetted totruewill not raise a radar event or EVA. This flag is default to the logical or of inverse value of ares flag[WarheadType] -> Maliciousand[WarheadType] -> Nonprovocative.
- You can disable this logic on specific techno by setting
- And the following flags controlls the effect of a combat alert.
[AudioVisual] -> CombatAlert.MakeAVoicedecides whether to play some sound effect with the combat alert. Set it totruewill enable the following flags, otherwise they will be ignored.[TechnoType] -> CombatAlert.UseFeedbackVoicedecides whether to use the sound defined byVoiceFeedback. Default to[AudioVisual] -> CombatAlert.UseFeedbackVoice.[TechnoType] -> CombatAlert.UseAttackVoicedecides whether to use the sound defined byVoiceAttack. Default to[AudioVisual] -> CombatAlert.UseAttackVoice.[TechnoType] -> CombatAlert.UseEVAdecides whether to play an EVA. Default to[AudioVisual] -> CombatAlert.UseEVA. The EVA to play is default toEVA_UnitsInCombat, and can be specified through[TechnoType] -> CombatAlert.EVA.- The sound effect is taken at order, feedback first, attack then, eva finally. The flags in
[AudioVisual]controlls whether to check it globally, and can be specify per techno. - An example: You set
CombatAlert.UseFeedbackVoiceandCombatAlert.UseEVAtotrueandCombatAlert.UseAttackVoicetofalse. A unit withVoiceFeedbackVoiceAttackandCombatAlert.EVAare all set will playVoiceFeedback. A unit withVoiceAttackset will playEVA_UnitsInCombat.
In 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= ; booleanRecount burst index
- You can now make technos recount their current burst index when they have changed the firing weapon or have maintained for a period of time without any targets (take the larger value of last firing weapon's
ROFand 30 frames).
In rulesmd.ini:
[General]
RecountBurst=false ; boolean
[SOMETECHNO] ; TechnoType
RecountBurst= ; boolean, default to [General] -> RecountBurstReset MindControl after transformation
- After the unit conversion is completed, its mind control can be reset.
- If all warheads don't have
MindControl=yes, thenConvert.ResetMindControl=yeswill release all controlled units. - If any warhead has
MindControl=yes, thenConvert.ResetMindControl=yesresets its maximum number of controls. - If all weapons don't have
InfiniteMindControl=yes, thenConvert.ResetMindControl=yesrelease controlled units that exceed the limit.
- If all warheads don't have
In rulesmd.ini:
[SOMETECHNO] ; TechnoType, before conversion
Convert.ResetMindControl=false ; booleanRevenge weapon
Revenge Weapon usage in RA2: Reboot
- Similar to
DeathWeaponin that it is fired after a TechnoType is killed, but with the difference that it will be fired on whoever dealt the damage that killed the TechnoType. If TechnoType died of sources other than direct damage dealt by another TechnoType,RevengeWeaponwill not be fired.RevengeWeapon.AffectsHousecan be used to filter which houses the damage that killed the TechnoType is allowed to come from to fire the weapon.- It is possible to grant revenge weapons through attached effects as well.
- If a Warhead has
SuppressRevengeWeaponsset to true, it will not trigger revenge weapons.SuppressRevengeWeapons.Typescan be used to list WeaponTypes affected by this, if none are listed all WeaponTypes are affected.
In 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 WeaponTypesShared Ammo
- Transports with
OpenTopped=yesandAmmo.Shared=yeswill transfer ammo to passengers that haveAmmo.Shared=yes. In addition, a transport can filter who will receive ammo if passengers have the same value inAmmo.Shared.Group=<integer>of the transport, ignoring other passengers with different groups values. - Transports with
Ammo.Shared.Group=-1will transfer ammo to any passenger withAmmo.Shared=yesignoring the group. - Transports must have ammo and should be able to reload ammo.
In rulesmd.ini:
[SOMETECHNO1] ; TechnoType, transport with OpenTopped=yes
Ammo.Shared=no ; boolean
Ammo.Shared.Group=-1 ; integer
[SOMETECHNO2] ; TechnoType, passenger
Ammo.Shared=no ; boolean
Ammo.Shared.Group=-1 ; integerSound entry on unit's creation
- When a unit is created, sound specified in
VoiceCreatedwill be played for the unit owner. - If
IsVoiceCreatedGlobalis set to true,VoiceCreatedwill be played globally instead ofEVA_UnitReady.
In rulesmd.ini:
[AudioVisual]
IsVoiceCreatedGlobal=false ; boolean
[SOMETECHNO] ; TechnoType
VoiceCreated= ; Sound entryTargeting limitation for berzerk technos
- Now you can specify which houses berzerk's technos can target and fire.
In rulesmd.ini:
[General]
BerzerkTargeting=all ; Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)Tiberium eater
- TechnoTypes can convert the ores underneath them into credits in real time, like GDI's MARV in Command & Conquer 3 Kane's Wrath.
TiberiumEater.TransDelayspecifies the interval frames between two eating processes, 0 means eat in every frame. When it's below 0, the logic will be turned off for this TechnoType.TiberiumEater.CellNset a list of cells that'll process tiberium eating, whereNis 0-based and the values are offset related to the TechnoType's current cell. If not set, only the ores on the TechnoType's current cell will be eaten.TiberiumEater.AmountPerCellcontrols the amount of ores that can be eaten at each cell at once. No limit when it's below 0.- By default, ores mined in this way worth the same as regular harvesting. This can be adjusted by
TiberiumEater.CashMultiplier. TiberiumEater.Display, if set to true, will create a flying text to display the total credits received in each eating process.TiberiumEater.Display.Housesdetermines which houses can see the credits display.
- An animation will be played at each mined cell in an eating process. If
TiberiumEater.Animscontains 8 entries, entry from position matching the TechnoType's current facing will be chosen. Otherwise, an entry will be chosen randomly.TiberiumEater.Anims.TiberiumN, if set, will overrideTiberiumEater.Animswhen eating corresponding tiberium type.- If
TiberiumEater.AnimMoveset to true, the animations will move with the TechnoType.
In 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 ; booleanWeapons fired on warping in / out
- It is now possible to add weapons that are fired on a teleporting TechnoType when it warps in or out. They are at the same time as the appropriate animations (
WarpIn/WarpOut) are displayed.WarpInMinRangeWeaponis used instead ofWarpInWeaponif the distance traveled (in leptons) was less thanChronoRangeMinimum. This works regardless of ifChronoTriggeris set or not. IfWarpInMinRangeWeaponis not set, it defaults toWarpInWeapon.- If
WarpInWeapon.UseDistanceAsDamageis set,DamageofWarpIn(MinRange)Weaponis overriden by the number of whole cells teleported across.
In rulesmd.ini:
[SOMETECHNO] ; TechnoType
WarpInWeapon= ; WeaponType
WarpInMinRangeWeapon= ; WeaponType
WarpInWeapon.UseDistanceAsDamage=false ; boolean
WarpOutWeapon= ; WeaponTypeTerrain
Destroy animation & sound
- You can now specify a destroy animation and sound for a TerrainType that are played when it is destroyed.
- If more than one animation is listed in
DestroyAnim, a random one is selected.
- If more than one animation is listed in
In rulesmd.ini:
[SOMETERRAINTYPE] ; TerrainType
DestroyAnim= ; List of AnimationTypes
DestroySound= ; Sound entryVehicles
Amphibious access vehicle
- Now you can let amphibious infantry or vehicle passengers enter or leave amphibious transport vehicles on water surface.
In rulesmd.ini:
[General]
AmphibiousEnter=false ; boolean
AmphibiousUnload=false ; boolean
[SOMEVEHICLE] ; VehicleType, transport
AmphibiousEnter= ; boolean, default to [General] -> AmphibiousEnter
AmphibiousUnload= ; boolean, default to [General] -> AmphibiousUnloadAutomatic deploy and blocking deploying based on ammo
- It is now possible for deployable vehicles (
DeploysInto,DeployFire,IsSimpleDeployerand those that have passengers) to automatically deploy or prevent deploying based on their current ammo.Ammo.AutoDeployMinimumAmount&Ammo.AutoDeployMaximumAmountdetermine minimum and maximum ammo the vehicle should have for it to automatically deploy. Negative values disable the check.Ammo.DeployUnlockMinimumAmount&Ammo.DeployUnlockMaximumAmountdetermine minimum and maximum ammo the vehicle should have for deploying to be available in general. Negative values disable the check.
In rulesmd.ini:
[SOMEVEHICLE] ; VehicleType
Ammo.AutoDeployMinimumAmount=-1 ; integer
Ammo.AutoDeployMaximumAmount=-1 ; integer
Ammo.DeployUnlockMinimumAmount=-1 ; integer
Ammo.DeployUnlockMaximumAmount=-1 ; integerCustom hover vehicles shutdown drowning death
HoverDrownableallows customization of whether hover vehicles will drown and die when deactivated on water zone.
In rulesmd.ini:
[SOMEVEHICLE] ; VehicleType
HoverDrownable=true ; booleanDamaged unit image changes
- When a unit is damaged (health points percentage is lower than
[AudioVisual] -> ConditionYellowpercentage), it now may use different image set byImage.ConditionYellowVehicleType. - Similar,
Image.ConditionRedis used as image if unit health points percentage is lower than[AudioVisual] -> ConditionRedpercentage. - It is also works on water by setting
WaterImage.ConditionYellowandWaterImage.ConditionRedVehicleType, similar to Ares'WaterImage.
In rulesmd.ini:
[SOMEVEHICLE] ; VehicleType
Image.ConditionYellow= ; VehicleType entry
Image.ConditionRed= ; VehicleType entry
WaterImage.ConditionYellow= ; VehicleType entry
WaterImage.ConditionRed= ; VehicleType entryWarning
Note that the VehicleTypes had to be defined under [VehicleTypes] and use same image type (SHP/VXL) for vanilla/damaged states.
Default mirage disguise for individual VehicleTypes
- Vehicle can now have its
DefaultMirageDisguisesoverridden per-type.
In rulesmd.ini:
[SOMEVEHICLE] ; VehicleType
DefaultMirageDisguises= ; List of TerrainTypesIndependent SHP Vehicle Turret Files
- SHP turret vehicles support the use of
*tur.shpfiles.- If the SHP vehicle has a Shape file named
*tur.shpwhen drawing the turret, the turret starts from frame 0 of that file; otherwise, it starts from the frame at indexWalkFrames * Facings(0-based) within the vehicle's main body shape. - If you want to split the existing shape file in two, simply extract the 32 frames of the turret image along with their corresponding 32 frames of shadow from the source file, and combine them into a new shape file.
- When you need to change the turret used by a vehicle, splitting it into two files can simplify the process.
- If the SHP vehicle has a Shape file named
Jumpjet Tilts While Moving
Jumpjet Tilts in Project Rush - Conquer
- Now you can make jumpjets tilt forward when moving forward and sideways when turning by setting
JumpjetTiltto true. - The maximum tilt angle will not exceed 90 degrees.
- The magnitude of the forward tilt is related to the current speed and acceleration. They are additive and have two coefficients that can be adjusted for details.
- The magnitude of the sideways tilt is related to the current speed and rotation angle. They are multiplied and also have two coefficients that can be adjusted for details.
In 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 valueTurret Response
- When the vehicle loses its target, you can customize whether to align the turret direction with the vehicle body.
- When
Speed=0or TechnoTypes cells cannot move due toMovementRestrictedTo, the default value is no; in other cases, it is yes.
- When
In rulesmd.ini:
[SOMEVEHICLE] ; VehicleType
TurretResponse= ; booleanTurretless Shape Vehicle FireUp
Use the pre-firing animation effect for Shape vehicle-type mecha units in Zero Boundary by @Stormsulfur
Voxel=noturretless vehicles now support the use ofFireUp.FireUp.ResetInRetargetdetermines whether a vehicle's FireUp count is reset when its target changes. Forced to beyeswhen there is no target.
In artmd.ini:
[SOMEVEHICLE] ; VehicleType
FireUp= ; integer
FireUp.ResetInRetarget=true ; booleanWarheads
Hint
All new Warhead effects
- Can be used with
CellSpreadand Ares' GenericWarhead superweapon where applicable. - Cannot be used with
MindControl.Permanent=yesof Ares. - Respect
Verseswhere applicable unlessEffectsRequireVersesis set tofalse. - If target has an active shield, its armor type is used instead unless warhead can penetrate the shield.
Allow merging AOE damage to buildings into one
- Warheads are now able to damage building only once by merging the AOE damage when setting
MergeBuildingDamageto true, which default to[CombatDamage] -> MergeBuildingDamage.
In rulesmd.ini:
[CombatDamage]
MergeBuildingDamage=false ; boolean
[SOMEWARHEAD] ; WarheadType
MergeBuildingDamage= ; booleanNote
- This is different from
CellSpread.MaxAffect. - Due to the rounding of damage, there may be a slight increase in damage.
Break Mind Control on impact
Mind control break warhead being utilized in RA2: Reboot
- Warheads can now break mind control (doesn't apply to perma-MC-ed objects).
In rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
RemoveMindControl=false ; booleanCellSpread enhancement
- In vanilla, the damage area of an AOE warhead is spherical. In some case, e.g. you want to make a warhead superweapon buff all units in an area, the affectted range for air units is always smaller than ground units. Now you can use a new flag
CellSpread.Cylinderto overcome this problem. AffectsAirallow you to make a warhead only damage the units with height more than 208.AffectsGroundallow you to make a warhead only damage the units with height less than 208.
In rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
CellSpread.Cylinder=false ; boolean
AffectsAir=true ; boolean
AffectsGround=true ; booleanNote
- These features do not override the effects of the ares flag
DamageAirThreshold: A warhead withCellSpread.Cylinderdetonating on floor will not affect units in air, unless it hasDamageAirThreshold=-1. - These will also affect application of Phobos' Warhead effects where relevant. Due to technical constraints Ares' Warhead effects such as EMP and Iron Curtain are excluded.
Chance-based extra damage or Warhead detonation / 'critical hits'
- Warheads can now apply additional chance-based damage or Warhead detonation ('critical hits') with the ability to customize chance, damage, affected targets, affected target HP threshold and animations of critical hit.
Crit.Chancedetermines chance for a critical hit to occur. By default this is checked once when the Warhead is detonated and every target that is susceptible to critical hits will be affected. IfCrit.ApplyChancePerTargetis set, then whether or not the chance roll is successful is determined individually for each target.Crit.ExtraDamagedetermines the damage dealt by the critical hit. IfCrit.Warheadis set, the damage is used to detonate the specified Warhead on each affected target, otherwise the damage is directly dealt based on current Warhead'sVersessettings.Crit.ExtraDamage.ApplyFirepowerMultdetermines whether or not the critical hit damage should multiply the TechnoType's firepower multipliers.Crit.Warheadcan be used to set a Warhead to detonate instead of using current Warhead.Crit.Warhead.FullDetonationcontrols whether or not the Warhead is detonated fully on the targets (as part of a dummy weapon) or simply deals area damage and applies Phobos' Warhead effects.Crit.AffectsTargetcan be used to customize types of targets that this Warhead can deal critical hits against. Critical hits cannot affect empty cells or cells containing only TerrainTypes, overlays etc.Crit.AffectsHousecan be used to customize houses that this Warhead can deal critical hits against.Crit.AffectsBelowPercentandCrit.AffectsAbovePercentcan be used to set the health percentage that targets must be above and/or below/equal to respectively to be affected by critical hits. If target has zero health left this check is bypassed.Crit.AnimListcan be used to set a list of animations used instead of Warhead'sAnimListif Warhead deals a critical hit to even one target. IfCrit.AnimList.PickRandomis set (defaults toAnimList.PickRandom) then the animation is chosen randomly from the list. IfCrit.AnimList.CreateAllis set (defaults toAnimList.CreateAll), all animations from the list are created.Crit.AnimOnAffectedTargets, if set, makes the animation(s) fromCrit.AnimListplay on each affected target in addition to animation from Warhead'sAnimListplaying as normal instead of replacingAnimListanimation. Note that because these animations are independent fromAnimList,Crit.AnimList.PickRandomandCrit.AnimList.CreateAllwill not default to theirAnimListcounterparts here and need to be explicitly set if needed.
Crit.ActiveChanceAnimscan be used to set animation to be always displayed at the Warhead's detonation coordinates if the current Warhead has a chance to critically hit. If more than one animation is listed, a random one is selected.Crit.SuppressWhenIntercepted, if set, prevents critical hits from occuring at all if the warhead was detonated from a projectile that was intercepted.ImmuneToCritcan be set on TechnoTypes and ShieldTypes to make them immune to critical hits.
In 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 ; booleanWarning
If you set Crit.Warhead to the same Warhead it is defined on, or create a chain of Warheads with it that loops back to the first one there is a possibility for the game to get stuck in a loop and freeze or crash afterwards.
Convert TechnoType on impact
Vehicle version of Genetic Converter in NanoStorm
- Warheads can now change TechnoTypes of affected units to other Types in the same category (infantry to infantry, vehicles to vehicles, aircraft to aircraft).
ConvertN.From(where N is 0, 1, 2...) specifies which TechnoTypes are valid for conversion. This entry can have many types listed, meanging that many types will be converted at once. When no types are included, conversion will affect all valid targets.ConvertN.Tospecifies the TechnoType which is the result of conversion.ConvertN.AffectsHousespecifies whose units can be converted.Convert.From,Convert.ToandConvert.AffectsHouse(without numbers) are a valid alternative toConvert0.From,Convert0.ToandConvert0.AffectsHouseif only one pair is specified.
In example, this warhead would convert all affected owned and friendly SOLDIERA and SOLDIERB to NEWSOLDIER:
[ExampleWH]
Convert.From=SOLDIERA,SOLDIERB
Convert.To=NEWSOLDIER
Convert.AffectsHouse=teamIn 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)Warning
This feature has the same limitations as Ares' Type Conversion. This feature does not support BuildingTypes.
Warning
This feature requires Ares 3.0 or higher to function! When Ares 3.0+ is not detected, not all properties of a unit may be updated.
Custom Mind Control Animation
- Allows Warheads to play custom
MindControl.Anim.
In rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
MindControl.Anim= ; Animation, defaults to [CombatDamage] -> ControlledAnimationTypeCustom 'SplashList' on Warheads
- Allows Warheads to play custom water splash animations. See vanilla's Conventional system here.
SplashList.PickRandomcan be set to true to pick a random animation to play from the list.
In rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
SplashList= ; List of AnimationTypes, default to [CombatDamage] -> SplashList
SplashList.PickRandom=false ; booleanDamage multipliers
- Warheads are now able to define the extra damage multiplier for owner house, ally houses and enemy houses.
DamageOwnerMultiplier.NotAffectsEnemiesandDamageAlliesMultiplier.NotAffectsEnemiesis used as the default value ifAffectsEnemies=falseis set on the warhead.DamageOwnerMultiplier.Berzerk,DamageAlliesMultiplier.BerzerkandDamageEnemiesMultiplier.Berzerkis used when the techno is in berzerk.
- An extra damage multiplier based on the firer or target's health percentage will be added to the total multiplier. To be elaborate: the damage multiplier will firstly increased by the firer's health percentage multiplies
DamageSourceHealthMultiplier, then increased by the target's health percentage multipliesDamageTargetHealthMultiplier. - These multipliers will not affect damage with ignore defenses like
Suicide.etc .
In 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 valueNote
DamageAlliesMultiplier won't affect your own units like AffectsAllies did.
Damage technos underground
- Now you can make the warhead damage technos underground!
- To allow weapons to target underground technos, you need AU.
- Notice that if the projectile detonates underground, its animation effect may look strange.
- You can use
[WarheadType] -> PlayAnimUnderground=falseto prevent the warhead animation from playing when the projectile detonates underground. - You can also use
[WarheadType] -> PlayAnimAboveSurface=trueto make the warhead animation play on the ground directly above when the projectile detonates underground.
- You can use
In rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
AffectsUnderground=false ; boolean
PlayAnimUnderground=true ; boolean
PlayAnimAboveSurface=false ; booleanDetonate Warhead on all objects on map
- Setting
DetonateOnAllMapObjectsto true allows a Warhead that is detonated by a projectile (for an example, this excludes things like animationWarheadand Ares' GenericWarhead superweapon but includesCrit.Warheadand animationWeapon) and consequently anyAirburstWeapon/ShrapnelWeaponthat may follow to detonate on each object currently alive and existing on the map regardless of its actual target, with optional filters. Note that this is done immediately prior Warhead detonation so afterPreImpactAnim(Ares feature) has been displayed.DetonateOnAllMapObjects.Fullcustomizes whether or not the Warhead is detonated fully on the targets (as part of a dummy weapon) or simply deals area damage and applies Phobos' Warhead effects.DetonateOnAllMapObjects.AffectsTargetis used to filter which types of targets (TechnoTypes) are considered valid and must be set to a valid value other thannonefor this feature to work. Onlynone,all,aircraft,buildings,infantryandunitsare valid values. This is set tononeby default as inclusion of all object types can be performance-heavy.DetonateOnAllMapObjects.AffectsHouseis used to filter which houses targets can belong to be considered valid and must be set to a valid value other thannonefor this feature to work. Only applicable if the house that fired the projectile is known. This is set tononeby default as inclusion of all houses can be performance-heavy.DetonateOnAllMapObjects.AffectTypescan be used to list specific TechnoTypes to be considered as valid targets. If any valid TechnoTypes are listed, then only matching objects will be targeted. Note thatDetonateOnAllMapObjects.AffectsTargetandDetonateOnAllMapObjects.AffectsHousetake priority over this setting.DetonateOnAllMapObjects.IgnoreTypescan be used to list specific TechnoTypes to be never considered as valid targets.DetonateOnAllMapObjects.RequireVerses, if set to true, only considers targets whose armor type the warhead has non-zeroVersesvalue against as valid. On targets with active shields, shield's armor type is used unless the Warhead hasShield.Penetrate=true. This is checked after all other filters listed above.
In 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 ; booleanWarning
While this feature can provide better performance than a large CellSpread value, it still has potential to slow down the game, especially if used in conjunction with things like animations, alpha lights etc. Modder discretion and use of the filter keys (AffectsTarget/House/Types etc.) is advised.
Fire weapon when Warhead kills something
KillWeaponwill be fired at the target TechnoType's location once it's killed by this Warhead.KillWeapon.OnFirerwill be fired at the attacker's location once the target TechnoType is killed by this Warhead. If the source of this Warhead is not another TechnoType,KillWeapon.OnFirerwill not be fired.KillWeapon.AffectsHouse/KillWeapon.OnFirer.AffectsHouseandKillWeapon.AffectsTarget/KillWeapon.OnFirer.AffectsTargetcan be used to filter which houses targets can belong to and which types of targets are be considered valid forKillWeaponandKillWeapon.OnFirerrespectively.- If the source of this Warhead is not another TechnoType,
KillWeaponwill be fired regardless of the target's house or type.
- If the source of this Warhead is not another TechnoType,
- If a TechnoType has
SuppressKillWeaponsset to true, it will not triggerKillWeaponorKillWeapon.OnFirerupon being killed.SuppressKillWeapons.Typescan be used to list WeaponTypes affected by this, if none are listed all WeaponTypes are affected.
In 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 WeaponTypesGenerate credits on impact
TransactMoney used in Rise of the East
- Warheads can now give credits to its owner at impact.
TransactMoney.Displaycan be set to display the amount of credits given or deducted. The number is displayed in green if given, red if deducted and will move upwards after appearing.TransactMoney.Display.AtFirerif set, makes the credits display appear on firer instead of target. If set and firer is not known, it will display at target regardless.TransactMoney.Display.Housesdetermines which houses can see the credits display.TransactMoney.Display.Offsetis additional pixel offset for the center of the credits display, by default0,0at target's/firer's center.
In 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 defaultIron Curtain & Force Shield damage penetration
- It is now possible to have Warhead be able to deal damage to Iron Curtained and/or Force Shielded objects.
PenetratesForceShielddefaults to value ofPenetratesIronCurtain.- Note that this does not affect any Warhead effects other than those adjacent to damage (e.g
Psychedelic) and things like debris generation and detonation ofAirburstWeaponthat do not normally occur if the hit was nullified.
- Note that this does not affect any Warhead effects other than those adjacent to damage (e.g
In rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
PenetratesIronCurtain=false ; boolean
PenetratesForceShield= ; booleanLaunch superweapons on impact
- Superweapons can now be launched when a warhead is detonated.
LaunchSWspecifies the superweapons to launch when the warhead is detonated. If superweapon has negativeMoney.Amount, the firing house must have enough credits in order for it to be fired.LaunchSW.RealLaunchcontrols whether the owner who fired the warhead must own all listed superweapons. Otherwise they will be launched out of nowhere.LaunchSW.IgnoreInhibitorsignoresSW.Inhibitors/SW.AnyInhibitorof each superweapon, otherwise only non-inhibited superweapons are launched.LaunchSW.IgnoreDesignatorsignoresSW.Designators/SW.AnyDesignatorrespectively.LaunchSW.DisplayMoneycan be set to display the amount of credits given or deducted by the launched superweapon byMoney.Amount. The number is displayed in green if given, red if deducted and will move upwards after appearing.LaunchSW.DisplayMoney.Housesdetermines which houses can see the credits display.LaunchSW.DisplayMoney.Offsetis additional pixel offset for the center of the credits display, by default0,0at superweapon's target cell.
Note
- For animation warheads/weapons to take effect,
Damage.DealtByInvokermust be set. - The superweapons are launched on the cell where the warhead is detonated, instead of being click-fired.
In 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 defaultWarning
Due to the nature of some superweapon types, not all superweapons are suitable for launch. Please use with caution!
Parasite removal
- By default if unit takes negative damage from a Warhead (before
Versesare calculated), any parasites infecting it are removed and deleted. This behaviour can now be customized to disable the removal for negative damage, or enable it for any arbitrary warhead. RemoveParasite.Allowcan be used to define which parasites can be removed.RemoveParasite.Disallowcan be used to define which parasites cannot be removed.
In rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
RemoveParasite= ; boolean
RemoveParasite.Allow= ; List of TechnoTypes
RemoveParasite.Disallow= ; List of TechnoTypesPenetrates damage on transporter
- Warheads can now damage passenger on impact.
- If
PenetratesTransport.Levelof warhead larger thanPenetratesTransport.Levelof target and it's passengers, it will enable penetrates damage logic on passenger. PenetratesTransport.PassThroughis the chance of penetration, actual chance will multiply byPenetratesTransport.PassThroughMultiplierof target.PenetratesTransport.FatalRateis the chance of one hit kill passenger, actual change will multiply byPenetratesTransport.FatalRateMultiplierof target.PenetratesTransport.DamageAllcontrol whether it will damage all passengers or random one passenger in transport.PenetratesTransport.DamageMultiplieris multiplier of damage on passenger.PenetratesTransport.CleanSoundwill play when all passengers has been killed.
- If
In 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 ; doubleRemove disguise on impact
- Warheads can now remove disguise from disguised spies or mirage tanks. This will work even if the disguised was acquired by default through
PermaDisguise.
In rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
RemoveDisguise=false ; booleanReturn warhead
- For each techno affected by this warhead, a warhead owned by the target techno will be detonated at the owner of the original warhead.
ReturnWarheaddetermines the warhead that'll 'return' to the original owner from the target.ReturnWarhead.Damagedetermines the damage dealt by the return warhead.ReturnWarhead.Chancedetermines chance for a return warhead to occur. By default this is checked once when the original warhead is detonated and every target that is susceptible to triggering a return warhead will be affected. IfReturnWarhead.ApplyChancePerTargetis set, then whether or not the chance roll is successful is determined individually for each target.ReturnWarhead.FullDetonationcontrols whether or not the return warhead is detonated fully on the original owner (as part of a dummy weapon) or simply deals area damage and applies Phobos' Warhead effects.ReturnWarhead.AffectsTargetcan be used to customize types of targets that original warhead can trigger a return warhead. Return warhead cannot affect empty cells or cells containing only TerrainTypes, overlays etc.ReturnWarhead.AffectsHousecan be used to customize houses that original warhead can trigger a return warhead.
In 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)Warning
If you set ReturnWarhead to the same Warhead it is defined on, or create a chain of Warheads with it that loops back to the first one there is a possibility for the game to get stuck in a loop and freeze or crash afterwards.
Reveal map for owner on impact
- Warheads can now reveal an area or the entire map on impact.
- Reveal only applies to the owner of the warhead.
In rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
Reveal=0 ; integer, range in cellsNote
Negative values mean reveal the entire map.
Reverse engineer warhead
- Warheads can now uses the reverse-engineering logic (Ares feature) , the technology of the victim will be reversed.
In rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
ReverseEngineer=false ; booleanWarning
This feature requires Ares 3.0 or higher to function!
Sell or undeploy building on impact
- Warheads with
BuildingSellcan now sell buildings with build up image. It has a higher priority thanBuildingUndeploy.BuildingSell.IgnoreUnsellablecontrols whether to ignore all possible situations where sales may be disabled except for build up image.
- Warheads with
BuildingUndeploycan now undeploy buildings withUndeploysInto.BuildingUndeploy.Leavecontrols whether need to let them move to low threat locations nearby. The threat degree here is calculated using the technos' cost. If a nearby techno has no primary weapons or is owned by your allies, it will not be included.
In rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
BuildingSell=false ; boolean
BuildingSell.IgnoreUnsellable=false ; boolean
BuildingUndeploy=false ; boolean
BuildingUndeploy.Leave=false ; booleanShroud map for enemies on impact
- Warheads can now shroud an area or the entire map on impact.
- Shroud only applies to enemies of the warhead owner.
In rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
CreateGap=0 ; integer, range in cellsNote
Negative values mean shroud the entire map.
Spawn powerup crate
- Warheads can now spawn powerup crates of specified type(s) on their impact cells (if free, or nearby cells if occupied something other than a crate) akin to map trigger action
108 Create Crate.SpawnsCrateNwhere N is a number starting from 0, parsed until no key is found can be used to define the type of crate spawned.SpawnsCrateN.Weightis a number that determines relative weighting of spawning corresponding crate type vs. other listed ones (0 is no chance, higher means higher probability) defaulting to 1 if not defined.SpawnsCrate.Type/Weightis an alias forSpawnsCrate0.Type/Weightif latter is not set.
In 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 ; integerTaunt warhead
- Now you can use the following tags to make the warhead "taunt" the target, override its current mission, and force it to attack the source of the damage.
- The taunted target will behaves like doing retaliation.
- If there is no source unit for the damage, the taunt will not take effect.
In rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
Taunt=false ; booleanToggle per-target warhead effects apply timing
- Now you can set the following flag to
falseto apply the Phobos warhead effects that take effect on each target when taking damage, rather than when the projectiles detonate.- This will allow such effects to be applied through damage without projectiles, including but not limited to damage from particles, vanilla radiation, and Ares'
GenericWarheadsuperweapon. - This will also cause all effects that can completely prevent damage to also prevent these warhead effects, including but not limited to
DamageSelf,DamageAirThreshold,AffectsAllies,AffectsAir. - If you use a warhead with
CellSpreadto damage a building multiple times, then these effects will be applied multiple times. If you don't want this to happen, useMergeBuildingDamage. - The affected effects include:
- Remove mind-control
- Type conversion
BuildingSell&BuildingUndeployRemoveDisguiseReverseEngineer- Modify shield
- Modify attach-effects
- Critical hits
- Due to technical reasons,
Crit.SuppressWhenIntercepted=falseandCrit.ApplyChancePerTarget=truewill forced to be used.
- Due to technical reasons,
- This will allow such effects to be applied through damage without projectiles, including but not limited to damage from particles, vanilla radiation, and Ares'
In rulesmd.ini:
[CombatDamage] ; WarheadType
ApplyPerTargetEffectsOnDetonate=true ; boolean
[SOMEWARHEAD] ; WarheadType
ApplyPerTargetEffectsOnDetonate= ; boolean, default to [CombatDamage] -> ApplyPerTargetEffectsOnDetonateNote
- Ares' warhead effects, such as EMP or IronCurtain warhead, will not be affected.
- Ares' warhead effect controllers, such as
EffectsRequireDamage, only affect Ares' effects. So they have nothing to do with this.
Trigger specific NotHuman infantry Death anim sequence
- Warheads are now able to trigger specific
NotHuman=yesinfantryDeathanim sequence using the corresponding tag. It's value represents sequences fromDie1toDie5.
In rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
NotHuman.DeathSequence= ; integer (1 to 5)Warhead that can not kill
- Warheads can now damage the enemy without killing them (minimum health will be 1).
In rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
CanKill=true ; booleanUnlimbo detonate warhead
Unlimbo Detonate used in The Call of the Panic Spear by @Octagonal prism
UnlimboDetonateallows units that have fired weapons withLimboLaunch=yesto reappear.UnlimboDetonate.ForceLocationallows units to forcefully appear at the projectile explosion location, otherwise they will search for other available cells.UnlimboDetonate.KeepTargetallows units to retain their original attack target when they reappear.UnlimboDetonate.KeepSelectedallows units to retain their original selected state when they appear.
In rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
UnlimboDetonate=false ; boolean
UnlimboDetonate.ForceLocation=false ; boolean
UnlimboDetonate.KeepTarget=false ; boolean
UnlimboDetonate.KeepSelected=false ; booleanWarning
UnlimboDetonate cannot be used in conjunction with Parasite.
Weapons
AreaFire target customization
- You can now specify how AreaFire weapon picks its target. By default it targets the base cell the firer is currently on, but this can now be changed to fire on the firer itself or at a random cell within the radius of the weapon's
Rangeby settingAreaFire.Targettoselforrandomrespectively. AreaFire.Target=selfrespects normal targeting rules (WarheadVersesetc.) against the firer itself.AreaFire.Target=randomignores cells that are ineligible or contain ineligible objects based on listed values in weapon'sCanTarget&CanTargetHouses.
In rulesmd.ini:
[SOMEWEAPON] ; WeaponType
AreaFire.Target=base ; AreaFire Target Enumeration (base|self|random)Attack non-threatening structures (Weapon)
AttackNoThreatBuildingspermits shooters to attack non-threatening structures. This setting overrides other configurations.
In rulesmd.ini:
[SOMEWEAPON] ; WeaponType
AttackNoThreatBuildings= ; booleanBurst delay customizations
Burst.Delaysallows specifying weapon-specific burst shot delays. Takes precedence over the oldBurstDelayXlogic available on VehicleTypes, functions with Infantry & BuildingType weapons (AircraftTypes are not supported due to their weapon firing system being completely different) and allows every shot ofBurstto have a separate delay instead of only first four shots.- If no delay is defined for a shot, it falls back to last delay value defined (f.ex
Burst=3andBurst.Delays=10would use 10 as delay for all shots). - Using
-1as delay reverts back to old logic (BurstDelay0-3for VehicleTypes if available or random value between 3-5 otherwise) for that shot.
- If no delay is defined for a shot, it falls back to last delay value defined (f.ex
Burst.FireWithinSequenceis only used if the weapon is fired by InfantryType orVoxel=noturretless VehicleType, and setting it to true allows infantry/vehicle to fire multipleBurstshots within same firing sequence.- First shot is always fired at sequence frame determined by firing frame controls on InfantryType image (
FireUpet al). - Following shots come at intervals determined by
Burst.Delays(with minimum delay of 1 frame) or random delay between 3 to 5 frames if not defined. Note that if next shot would be fired at a frame that is beyond the firing sequence's length, burst shot count is reset and weapon starts reloading. - Burst shot counter is not immediately reset if firing is ceased mid-sequence after at least one shot, but the frame at which each burst shot is fired will not be influenced by this (in other words, resuming firing afterward without weapon reload taking place would restart firing sequence but no firing will take place until the frame at which next burst shot should be fired is hit).
- First shot is always fired at sequence frame determined by firing frame controls on InfantryType image (
In rulesmd.ini:
[SOMEWEAPON] ; WeaponType
Burst.Delays=-1 ; integer - burst delays (comma-separated) for shots in order from first to last.
Burst.FireWithinSequence=false ; booleanBurst without delay
- In vanilla, vehicles and infantry will only fire once in one frame, even if their
ROForBurstDelayis set to 0. Now you can force units to fire all bursts in one frame by setting theBurst.NoDelayto true.
In rulesmd.ini:
[SOMEWEAPON] ; WeaponType
Burst.NoDelay=false ; booleanNote
- This is useless for buildings and aircraft.
- This will ignore
Burst.Delayssetting.
Customize whether weapon can target iron-curtained technos
- In vanilla, computer players always don't attack iron-curtained technos. Now you can customize it.
CanTarget.IronCurtainedaffects human player,CanTargetAI.IronCurtainedaffects computer.AutoTarget.IronCurtaineddetermines whether player-controlled technos can fire at iron-curtained objects positively. Computer will ignore this setting while only followingCanTarget.IronCurtained.
In 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.IronCurtainedDelayed firing
- It is possible to have any weapon fire with a delay by setting
DelayedFire.Durationon a WeaponType - it supports a single integer or two comma-separated ones for a random range to pick value from.- If
DelayedFire.SkipInTransportis set to true and firer is in a transport, no delay is applied to firing. DelayedFire.Animationcan be used to define animation to create when the delay timer starts.DelayedFire.OpenToppedAnimationis used instead if set if the firer is in a transport.- If
DelayedFire.AnimIsAttachedis set to true, the animation is attached to the firing TechnoType. IfDelayedFire.RemoveAnimOnNoDelayis also set to true the animation is removed when the duration expires or firing is interrupted regardless of its remaining lifetime. DelayedFire.AnimOffsetcan be used to override the weapon's firing coordinates / FLH for the animation's position.DelayedFire.AnimOnTurretdetermines whether or not the animation's position is calculated relative to firer's body or turret (only if it has one).- If
DelayedFire.CenterAnimOnFireris set the animation is created at the firer's center rather than at the firing coordinates.
- If
- If the weapon was fired by InfantryType and
DelayedFire.PauseFiringSequenceis set to true, the infantry's firing sequence animation is paused when it hits the firing frame defined byFireUp/ProneorSecondaryFire/Pronein itsartmd.inientry until the delay timer has expired. - If the weapon has
Burst> 1 andDelayedFire.OnlyOnInitialBurstset to true, the delay occurs only before the initial burst shot. Note that if using Ares,Burstindex does not reset if firing is interrupted or the firer loses target, meaning it will be able to resume firing without waiting for the delay.
- If
In 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 ; booleanNote
AircraftTypes, due to their different attack patterns, will not wait for the delay to expire before attempting to fire and will instead continue without firing if the delay is too long.
Extra range
- Now you can adjust weapon's range when the firer or target are under specific conditions. Only work during the attack process and cannot affect other behaviors such as path finding.
ExtraRange.TargetMovinggrants the weapon extra range when the target is in a moving state.ExtraRange.TargetMoving.CloseRangeOnlyis used to restrict whether the global default value only applies to units withCloseRange=yes.
ExtraRange.FirerMovinggrants the weapon extra range when the firer is in a moving state.ExtraRange.Prefiringgrants the weapon extra range when the firer is in a pre-firing state, including:- Vehicles with tags such as
FiringSyncFrame%d. - Aircraft that are firing.
- Buildings with tags such as
IsAnimDelayedFire. - Infantry with tags such as
FireUp. - Any unit with
DelayedFire. ExtraRange.Prefiring.IncludeBurstis used to decide whether the execution of burst is considered as being in a pre-firing state.
- Vehicles with tags such as
In 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.IncludeBurstNote
- In vanilla, melee units have difficulty attacking enemies that are moving away, even if they have a slightly higher speed than their targets. This is because the game's pathfinding algorithm searches for a firing position in units of cells, which creates an unacceptable error for melee units, causing the targets to move out of range before they can get close.
- Units with various forms of pre-firing behavior have similar problems. The target may move out of range before they fire.
- This feature can solve the above issues.
Extra warhead detonations
- It is now possible to have same weapon detonate multiple Warheads on impact by listing
ExtraWarheads. The warheads are detonated at same location as the main one, after it in listed order. This only works in cases where a projectile has been fired by a weapon and still remembers it when it is detonated (due to currently existing technical limitations, this excludesAirburstWeapon).ExtraWarheads.DamageOverridescan be used to override the weapon'sDamagefor the extra Warhead detonations. Value from position matching the position fromExtraWarheadsis used if found, or last listed value if not found. If list is empty, WeaponTypeDamageis used.ExtraWarheads.DetonationChancescan be used to customize the chance of each extra Warhead detonation occuring. Value from position matching the position fromExtraWarheadsis used if found, or last listed value if not found. If list is empty, every extra Warhead detonation is guaranteed to occur.ExtraWarheads.FullDetonationcan be used to customize whether or not each individual Warhead is detonated fully (as part of a dummy weapon) or simply deals area damage and applies Phobos' Warhead effects. Value from position matching the position fromExtraWarheadsis used if found, or last listed value if not found. If list is empty, defaults to true.- Note that the listed Warheads must be listed in
[Warheads]for them to work.
In 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 booleansFeedback weapon
FeedbackWeapon used to apply healing aura upon firing a weapon in Project Phantom
- You can now specify an auxiliary weapon to be fired on the firer itself when a weapon is fired.
FireInTransportsetting of the feedback weapon is respected to determine if it can be fired when the original weapon is fired from insideOpenTopped=truetransport. If feedback weapon is fired, it is fired on the transport.OpenToppedDamageMultiplieris not applied on feedback weapons.
In rulesmd.ini:
[SOMEWEAPON] ; WeaponType
FeedbackWeapon= ; WeaponTypeKeep Range After Firing
- Technos can maintain a suitable distance after firing if
KeepRangeis not set to 0.KeepRangecontrols how long the distance to maintain when the techno's ROF timer is ticking. What is actually read is its absolute value. If it is a positive value, it will be stayed outside this distance, just like it has a specialMinimumRangeafter firing. If it is a negative value, it will be kept as close as possible to this distance, just like it has a specialRangeafter firing. In addition, if the effective range section is too small, it will be considered unable to fire. It is best to have an effective range of 1.0, and 2.0 is best for Infantry.KeepRange.AllowAIcontrols whether this function is effective for computer.KeepRange.AllowPlayercontrols whether this function is effective for human.- The function won't take effect if the techno's rearm time left is shorter than
KeepRange.EarlyStopFrame.
Note
That is to say, the total duration of executing KeepRange equals the value of weapon ROF minus the value of KeepRange.EarlyStopFrame.
In rulesmd.ini:
[SOMEWEAPON] ; WeaponType
KeepRange=0 ; floating point value
KeepRange.AllowAI=false ; boolean
KeepRange.AllowPlayer=false ; boolean
KeepRange.EarlyStopFrame=0 ; integerMake units try turning to target when firing with OmniFire=yes
- The unit will try to turn the body to target even firing with
OmniFire=yes.- Jumpjets are recommended to have the same value of body
ROTandJumpjetTurnRate.
- Jumpjets are recommended to have the same value of body
In rulesmd.ini:
[SOMEWEAPON] ; WeaponType, with OmniFire=yes
OmniFire.TurnToTarget=no ; booleanRadiation enhancements
- In addition to allowing custom radiation types, several enhancements are also available to the default radiation type defined in
[Radiation], such as ability to set owner & invoker or deal damage against buildings. See Custom Radiation Types for more details.
Range finding in cylinder
- In vanilla, technos in air will ignore the distance in Z axis when checking if the target is in range. Now you can use the following flags to make technos always range finding like that.
[General] -> CylinderRangefindingcontrols this globally, and can be customized per weapon type.- Mind that set the flags to
falsemeaning "use default" rather than "disable". Technos in air will always range finding in cylinder like vanilla, despite what you set.
In rulesmd.ini:
[General]
CylinderRangefinding=false ; boolean
[SOMEWEAPON] ; WeaponType
CylinderRangefinding= ; booleanStrafing aircraft weapon customization
Strafing aircraft weapon customization in Project Phantom
- Some of the behavior of strafing aircraft weapons can now be customized.
Strafingcontrols if the aircraft can strafe when firing at the target. Default totrueif the projectile'sROT< 2 andInviso=falsewithoutTrajectory, otherwisefalse.Strafing.Shotscontrols the number of times the weapon is fired during a single strafe run, defaults to 5 if not set.Ammois only deducted at the end of the strafe run, regardless of the number of shots fired.Strafing.SimulateBurstcontrols whether or not the shots fired during strafing simulate behavior ofBurst, allowing for alternating firing offset. Only takes effect if weapon hasBurstset to 1 or undefined.Strafing.UseAmmoPerShot, if set totrueoverrides the usual behaviour of only deducting ammo after a strafing run and instead doing it after each individual shot.Strafing.TargetCellcontrols whether the aircraft will change the target of this round to the ground after firing the first shot, to ensure that allStrafing.Shotscan be dropped. That is, theStrafingwill not be interrupted by the premature death of the target.Strafing.EndDelaycan be used to override the delay after firing last shot in strafing run before aircraft resumes another strafing run or returns to base. Defaults to (WeaponRange* 256 + 1024) / AircraftSpeed. Note that using a short delay with aircraft that can do multiple strafing runs with their ammo can cause undesired behaviour like dancing around or facing weird way depending on other factors like ROF and/or movement speed.
- There is a special case for aircraft spawned by
Type=SpyPlanesuperweapons onSpyPlane ApproachorSpyPlane Overflymission whereStrafing.Shotsonly if explicitly set on its primary weapon, determines the maximum number of times the map revealing effect can activate irregardless of other factors.
In 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 framesVisual effect scatter
- You can now add a random offset to visual effect's (
IsLaser=true,IsElectricBolt=trueorIsRadBeam=true) target location if setVisualScatterto true.
In 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 ; booleanNote
This function is only used as an additional scattering visual display, which is different from BallisticScatter.(Min/Max) and can be used simultaneously, without affecting the actual explosion position of the projectile.
Weapon targeting filter
`Weapon target filter - different weapon used against enemies & allies as well as units & buildings in Project Phantom
- You can now specify which targets or houses a weapon can fire at. This also affects weapon selection, other than certain special cases where the selection is fixed.
CanTarget.MaxHealthandCanTarget.MinHealthset health percentage thresholds for allowed targets (TechnoTypes only) that the target's health must be above and/or below/equal to, respectively. If target has zero health left this check is bypassed.
In 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)Note
CanTarget explicitly requires either all or empty to be listed for the weapon to be able to fire at cells containing no TechnoTypes.