Fixed / Improved Logics
This page describes all ingame logics that are fixed or improved in Phobos without adding anything significant.
Bugfixes and miscellaneous
Fixed the bug that GameModeOptions are not correctly saved. For example,
BuildOffAllyis corrupted after load a save.Fixed the bug that light tint created by buildings can never be removed (light tint persists even if the building is destroyed/sold) after loading a game
Fixed the bug when reading a map which puts
Preview(Pack)afterMaplead to the game fail to draw the previewFixed the bug when retinting map lighting with a map action corrupted light sources.
Due to performance considerations, this fix may be disabled by setting
[AudioVisual] -> UseRetintFix=noinrulesmd.ini.
Fixed the bug when deploying mindcontrolled vehicle into a building permanently transferred the control to the house which mindcontrolled it.
Fixed the bug when capturing a mind-controlled building with an engineer fail to break the mind-control link.
Removed the
EVA_BuildingCapturedevent when capturing a building considered as a vehicle.Fixed the bug when units are already dead but still in map (for sinking, crashing, dying animation, etc.), they could die again.
Fixed the bug when cloaked Desolator was unable to fire his deploy weapon.
Fixed the bug that temporaryed unit cannot be erased correctly and no longer raise an error.
Fixed building and defense tab hotkeys not enabling the placement mode after Cannot build here. triggered and the placement mode cancelled.
Fixed buildings with
UndeployIntoplayingEVA_NewRallypointEstablishedon undeploying.Fixed buildings with
Naval=yesignoringWaterBound=noto be forced to place onto water.Fixed AI Aircraft docks bug when Ares tag
[GlobalControls] -> AllowParallelAIQueues=nois set.Fixed laser drawing code to allow for thicker lasers in house color draw mode.
Fixed
DeathWeaponnot detonating properly.Some settings are still ignored like
PreImpactAnim(Ares feature), this might change in future.
Fixed the bug when occupied building’s
MuzzleFlashXis drawn on the center of the building whenXgoes past 10.Fixed the bug where jumpjet units that are
Crashabledo not crashing to ground properly if destroyed while being pulled by aLocomotorwarhead.Fixed the bug that prevents jumpjet units from turn to the target when firing from a different direction.
Fixed the bug allowing jumpjet units to continue firing at enemy target when crashing.
Jumpjet turning to target applied in Robot Storm X
Fixed the bug when turreted jumpjet units always facing bottom-right direction when motion stops.
Fixed the bug when jumpjet objects are unable to use
Sensors.Allowed usage of
AlternateFLHof vehicles inOpenToppedtransport.Improved the statistic distribution of the spawned crates over the visible area of the map so that they will no longer have a higher chance to show up near the edges.
Allowed usage of TileSet of 255 and above without making NE-SW broken bridges unrepairable.
Added a “Load Game” button to the retry dialog on mission failure.
Side offset voxel turret in Breaking Blue project
TurretOffsettag for voxel turreted TechnoTypes now accepts FLH (forward, lateral, height) values likeTurretOffset=F,LorTurretOffset=F,L,H, which means turret location can be adjusted in all three axes.TurretOffsetis now supported for SHP vehicles.InfiniteMindControlwithDamage=1can now control more than 1 unit.Aircraft with
Fighterset to false or those using strafing pattern (weapon projectileROTis below 2) now take weapon’sBurstinto accord for all shots instead of just the first one.Vehicles using
DeployFirewill now useDeployFireWeaponfor firing the deploy weapon if explicitly set, if not it behaves like previously (Primaryif can fire,Secondaryif not) and respectFireOncesetting on weapon and any stop commands issued during firing. IfFireOnceis set to true the unit won’t accept further deploy commands for number of frames that is equal to whichever is smaller between weaponROFand[Unload] -> Ratetimes 900.Infantry with
DeployFireWeapon=-1can now fire both weapons (decided by its target), regardless of deployed or not.
Nod arty keeping target on attack order in C&C: Reloaded
Vehicle to building deployers now keep their target when deploying with
DeployToFire.Effects like lasers are no longer drawn from wrong firing offset on weapons that use Burst.
Animations can now be offset on the X axis with
XDrawOffset.IsSimpleDeployerunits now only playDeploySoundandUndeploySoundonce, when done with (un)deploying instead of repeating it over duration of turning and/orDeployingAnim.AITrigger can now recognize Building Upgrades as legal condition.
EWGatesandNSGatesnow will link walls likexxGateOneandxxGateTwodo.Fixed interaction of
UnitAbsorb&InfantryAbsorbwithGrindingbuildings. The keys will now make the building only accept appropriate types of objects.Fixed missing
No Entercursor for VehicleTypes being unable to enter aGrindingbuilding.Fixed Engineers being able to enter
Grindingbuildings even when they shouldn’t (such as ally building at full HP).Aircraft & jumpjet units are now affected by speed modifiers such as
Speed(Aircraft/Infantry/Units)MultonCountries,VeteranSpeedand Crates / AttachEffect (Ares feature).Both voxel and SHP vehicle units should now correctly respect custom palette set through
Palette.Setting
RadarInvisibleto true on TerrainTypes now hides them from minimap display.Mind control indicator animations will now correctly restore on mind controlled objects when uncloaked.
Animations from Warhead
AnimList&SplashListetc. as well as animations created through map trigger41 Play Anim Atnow have the appropriate house set as owner of the animation by default.Nuke carrier & payload weapons now respect
Brightsetting on the weapons always when appropriate (previously only payload did and only if Superweapon hadNuke.SiloLaunch=false(Ares feature)).Self-healing pips from
InfantryGainSelfHeal&UnitsGainSelfHealnow respect unit’sPixelSelectionBracketDeltalike health bar pips do.Fixed the bug where the health bar of a unit being attacked by temporal weapons would not disappear after mouse hover, causing it to remain visible even when the mouse moved away.
Buildings using
SelfHealingwill now correctly revert to undamaged graphics if their health is restored back by self-healing.Allow use of
Foundation=0x0on TerrainTypes without crashing for similar results as for buildings.Projectiles now remember the house of the firer even if the firer is destroyed before the projectile detonates. Does not currently apply to some Ares-introduced Warhead effects like EMP.
OpenToppedtransports now takeOpenTransportWeaponsetting of passengers into consideration when determining weapon range used for threat scanning and approaching targets.Trailer animations now inherit the owner of the object (animation, projectile or aircraft) they are attached to.
Buildings now correctly use laser parameters set for Secondary weapons instead of reading them from Primary weapon.
Fixed an issue that caused vehicles killed by damage dealt by a known house but without a known source TechnoType (f.ex animation warhead damage) to not be recorded as killed correctly and thus not spring map trigger events etc.
Fixed transports recursively put into each other not having a correct killer set after second transport when being killed by something.
Example gradient SHP drawing with 75% translucency, before and after
Translucent RLE SHPs will now be drawn using a more precise and performant algorithm that has no green tint and banding. Can be disabled with
rulesmd.ini -> [General] -> FixTransparencyBlitters=no.Only applies to Z-aware drawing mode for now.
Fixed projectiles with
Inviso=truesuffering from potential inaccuracy problems if combined withAirburst=yesor Warhead withEMEffect=true.Fixed the bug when
MakeInfantrylogic on BombClass resulted inNeutralside infantry.Fixed railgun particles being drawn to wrong coordinate against buildings with non-default
TargetCoordOffsetor when force-firing on bridges.Fixed building
TargetCoordOffsetnot being taken into accord for several things like fire angle calculations and target lines.In singleplayer missions, the player can now see cloaked objects owned by allied houses.
Fixed BibShape drawing for a couple of frames during buildup for buildings with long buildup animations.
Animation with
Tiled=yesnow supportsCustomPalette.Attempted to avoid units from retaining previous orders (attack,grind,garrison,etc) after changing ownership (mind-control,abduction,etc).
Fixed buildings’
NaturalParticleSystembeing created for in-map pre-placed structures.Fixed jumpjet units being unable to visually tilt or be flipped if
TiltCrashJumpjet=no.Unlimited (more than 5)
AlternateFLHentries for units.Warheads spawning debris now use
MaxDebrisas an actual cap for number of debris to spawn instead ofMaxDebris- 1.If both
PrimaryandSecondaryweapons can fire at air targets (projectile hasAA=true),Primarycan now be picked instead of always forcingSecondary. Also applies toIsGattling=true, with odd-numbered and even-numberedWeaponXslots instead ofPrimaryandSecondary, respectively.IsGattling=truecan now fall back to secondary weapon slot (even-numberedWeaponXslots) if primary one (odd-numbered) cannot fire at current target (armor type,CanTarget(Houses), shield etc).Fixed
LandTargeting=1not preventing from targeting TerrainTypes (trees etc.) on land.Fixed
NavalTargeting=6not preventing from targeting empty water cells or TerrainTypes (trees etc.) on water.Fixed
NavalTargeting=7and/orLandTargeting=2resulting in still targeting TerrainTypes (trees etc.) on land withPrimaryweapon.Fixed infantry without
C4=truebeing killed in water if paradropped, chronoshifted etc. even if they can normally enter water.Allowed MCV to redeploy in campaigns using a new toggle different from
[MultiplayerDialogSettings] -> MCVRedeploys.Fixed buildings with
UndeploysIntobutUnsellable=no&ConstructionYard=nounable to be sold normally, by usingUndeploysInto.Sellable=true. RestoredEVA_StructureSoldfor buildings withUndeploysIntowhen being selled.Fixed
WaterBound=truebuildings withUndeploysIntonot correctly setting the location for the vehicle to move into when undeployed.CanC4=falseon building makes building take atleast 1 point of damage if the raw damage is non-zero but is lowered to below 1 byVersesetc.CanC4.AllowZeroDamage=truedisables this. Negative damage (that is, afterVersesetc have been applied) also now bypasses this check entirely without having to enable anything.Buildings with primary weapon that has
AG=falseprojectile now have attack cursor when selected.Weapons with
AA=trueprojectiles can now be set to fire exclusively at air targets by settingAAOnly=true, regardless of other conditions. This is useful becauseAG=falseonly prevents targeting ground cells (and cannot be changed without breaking existing behaviour) and for cases whereLandTargetingcannot be used.Transports with
OpenTopped=trueand weapon that hasBurstabove 1 and passengers firing out no longer have the passenger firing offset shift lateral position based on burst index.Fixed disguised infantry not using custom palette for drawing the disguise when needed.
Disguised infantry now show appropriate insignia when disguise is visible, based on the disguise type and house. Original unit’s insignia is always shown to observers and if disguise blinking is enabled for the current player by
[General] -> DisguiseBlinkingVisibility.Buildings with superweapons no longer display
SuperAnimThreeat beginning of match if pre-placed on the map.SpySat=yescan now be applied using building upgrades.AI players can now build
Naval=trueandNaval=falsevehicles concurrently like human players do.Fixed the bug when jumpjets were snapping into facing bottom-right when starting movement (observable when the starting unit is a jumpjet and is ordered to move).
Objects with
Paletteset now have their color tint adjusted accordingly by superweapons, map retint actions etc. if they belong to a house using any color scheme instead of only those from the first half of[Colors]list.Animations using
AltPaletteare now remapped to their owner’s color scheme instead of first listed color scheme and no longer draw over shroud. Color scheme from[AudioVisual] -> AnimRemapDefaultColorSchemeis used if anim has no owner, which defaults to first listed color scheme from[Colors]still.They can also have map lighting apply on them if
AltPalette.ApplyLightingis set to true.
Fixed
DeployToFirenot considering building placement rules forDeploysIntobuildings and as a result not working properly withWaterBoundbuildings.Fixed
DeployToFirenot recalculating firer’s position on land if it cannot currently deploy.Arcing=trueprojectile elevation inaccuracy can now be fixed by settingArcing.AllowElevationInaccuracy=false.Wall overlays are now drawn with the custom palette defined in
Paletteinartmd.iniif possible.Setting
ReloadInTransportto true on units withAmmowill allow the ammo to be reloaded according toReloadorEmptyReloadtimers even while the unit is inside a transport.It is now possible to enable
VersesandPercentAtMaxto be applied on negative damage by settingApplyModifiersOnNegativeDamageto true on the Warhead.Attached animations on flying units now have their layer updated immediately after the parent unit, if on same layer they always draw above the parent.
Fixed an issue where the powered anims of
Powered/PoweredSpecialbuildings cease to update when being captured by enemies.Fixed a glitch related to incorrect target setting for missiles.
Fixed EIP 00529A14 when attempting to read
[Header]section of campaign maps.Units will no longer rotate its turret under EMP.
Jumpjets will no longer wobble under EMP.
Removed jumpjet units’ deceleration when crashing onto buildings.
Fixed
AmbientDamagewhen used withIsRailgun=yesbeing cut off by elevation changes.Fixed railgun and fire particles being cut off by elevation changes.
Fixed teleport units’ (for example
[CLEG]) frozen-still timer being cleared after load game.Fixed teleport units being unable to visually tilt on slopes.
Fixed rockets’ shadow location.
Fixed units with Teleport, Tunnel or Fly locomotor being unable to be visually flipped like other locomotors do.
Aircraft docking on buildings now respect
[AudioVisual] -> PoseDiras the default setting and do not always land facing north or in case of pre-placed buildings, the building’s direction.Spawned aircraft now align with the spawner’s facing when landing.
Fixed the bug that waypointing unarmed infantry with agent/engineer/occupier to a spyable/capturable/occupiable building triggers
EnteredByevent by executing capture mission.PowerUpNbuilding animations can now usePowered&PoweredLight/Effect/Specialkeys.Fixed a desync potentially caused by displaying of cursor over selected
DeploysIntounits.Skipped drawing rally point line when undeploying a factory.
Tint effects are now correctly applied to SHP vehicles and all types of aircraft as well as building animations regardless of their position.
Iron Curtained / Force Shielded objects now always use the correct tint color.
Objects in invalid map coordinates are no longer used for starting view and AI base center calculations.
Units & buildings with
DecloakToFire=falseweapons now cloak while targeting & reloading.Units with
Sensors=truewill no longer reveal ally buildings.Air units are now reliably included by target scan with large range and Warhead detonation by large
CellSpread.OverlayTypes now read and use
ZAdjustif specified in theirartmd.inientry.Weapons with
AA=trueProjectile can now correctly fire at air units when both firer and target are over a bridge.Fixed disguised units not using the correct palette if target has custom palette.
Building upgrades now consistently use building’s
PowerUpNanimation settings corresponding to the upgrade’sPowersUpToLevelwhere possible.Subterranean units are no longer allowed to perform deploy functions like firing weapons or
IsSimpleDeployerwhile burrowed or burrowing, they will instead emerge first like they do for transport unloading.The otherwise unused setting
[AI] -> PowerSurplus(defaults to 50) which determines how much surplus power AI players will strive to have can be restored by setting[AI] -> EnablePowerSurplusto true.Planning paths are now shown for all units under player control or when
[GlobalControls] -> DebugPlanningPaths=yesin singleplayer game modes.Fixed
Temporal=trueWarheads potentially crashing game if used to attackSlaved=trueinfantry.Fixed some locomotors (Tunnel, Walk, Mech) getting stuck when moving too fast.
Animations with
MakeInfantryandUseNormalLight=falsethat are drawn in unit palette will now have cell lighting changes applied on them.Removed 0 damage effect on jumpjet infantry from
InfDeath=9warhead.Fixed Nuke & Dominator Level lighting not applying to AircraftTypes.
Skip target scanning function calling for unarmed technos.
Projectiles created from
AirburstWeaponnow remember the WeaponType and can apply radiation etc.Fixed damaged aircraft not repairing on
UnitReload=truedocks unless they land on the dock first.Certain global tileset indices (
ShorePieces,WaterSet,CliffSet,WaterCliffs,WaterBridge,BridgeSetandWoodBridgeSet) can now be toggled to be parsed for lunar theater by setting[General] -> ApplyLunarFixesto true inlunarmd.ini. Do note that enabling this without fixing f.exWoodBridgeTileSetpointing to a tileset withTilesInSet=0will cause issues in-game.Fixed infantry
SecondaryFire/SecondaryPronesequences being displayed in water instead ofWetAttack.Fixed objects with ally target and
AttackFriendlies=truehaving their target reset every frame, particularly AI-owned buildings.<Player @ X>can now be used as owner for pre-placed objects on skirmish and multiplayer maps.Follower vehicle index for preplaced vehicles in maps is now explicitly constrained to
[Units]list in map files and is no longer thrown off by vehicles that could not be created or created vehicles having other vehicles as initial passengers.Drive/Jumpjet/Ship/Teleport locomotor did not power on when it is un-piggybacked bugfix
Stop command (
[S]by default) behavior is now more correct:Jumpjets no longer fall into a state of standing by idly.
Technos are no longer unable to stop the attack move mission.
Technos are no longer unable to stop the area guard mission.
Aircraft no longer find airport twice and overlap.
Aircraft no longer briefly pause in the air before returning.
Aircraft with
AirportBound=nono longer continue moving forward.Technos are no longer unable to stop when it is above the elevated bridge.
Technos are still not allowed to stop moving under the elevated bridge, but can stop other missions.
Now in air team members will use the 2D distance instead of the 3D distance to judge whether have reached the mission destination, so as to prevent the problem that the mission is stuck and cannot continue in some cases (such as when the jumpjet stops on the building).
Unit
Speedsetting now accepts floating-point values. Internally parsed values are clamped down to maximum of 100, multiplied by 256 and divided by 100, the result (which at this point is converted to an integer) then clamped down to maximum of 255 giving effective internal speed value range of 0 to 255, e.g leptons traveled per game frame.AirburstWeaponnow supportsIsLaser,IsElectricBolt,IsRadBeam, andAttachedParticleSystem.Subterranean movement now benefits from speed multipliers from all sources such as veterancy, AttachEffect etc.
Aircraft will now behave as expected according to it’s
MovementZoneandSpeedTypewhen moving onto different surfaces. In particular, this fixes erratic behavior when vanilla aircraft is ordered to move onto water surface and instead the movement order changes to a shore nearby.
Fixed the bug that parasite will vanish if it missed its target when its previous cell is occupied.
Prevent the units with locomotors that cause problems from entering the tank bunker.
Fixed an issue where a unit will leave an impassable invisible barrier in its original position when it is teleported by ChronoSphere onto an uncrushable unit and self destruct.
Fixed the bug that destroyed unit may leaves sensors.
FreeUnituses the unit’s ownSpeedTypeto find the spawn location.The bug where naval ships as StartUnit might spawn on land has been fixed.
When a building is transformed into a vehicle via
UndeploysInto, theSpeedTypeandMovementZoneof the target VehicleType will determine whether it can move into the target cell.Fixed an issue that harvesters with amphibious movement zone can not automatically return to refineries with
WaterBoundon water surface. Units withTeleporter=trueare not affected, as they can be used as long as set the refinery’sNavalto false.Units are now unable to kick out from a factory that is in construction process, and will not always stuck in the factory.
Fixed issues caused by incorrect reference removal (f.ex. If the unit cloaks/enters transport, it cannot gain experience from previously launched spawners/C4/projectiles).
Fixed an issue that caused
IsSonic=truewave drawing to crash the game if the wave traveled over a certain distance.Buildings with foundation bigger than 1x1 can now recycle spawner correctly.
Electric bolts that are supposed to update their position based on units current firing coords (by default, those fired by vehicles) now do so correctly for more than one concurrent electric bolt.
Fixed an issue where
FireAnglewould not work properly under certain circumstances.Fixed an issue that
MovementZone=AmphibiousDestroyerandMovementZone=AmphibiousCrushertechnos being unable to enter on water structures.Fixed an issue that aircraft carriers can not find suitable locations for attacks when under elevated bridges on their own.
Fixed an issue that in air aircraft carriers being unable to attack when it is near by elevated bridges.
Fixed an issue that aircraft carriers cannot retract its spawned aircraft when on the bridge.
Fixed an issue where the shadow of jumpjet remained on the ground when it was above the elevated bridge.
Fixed an issue that laser, electric bolt and rad beam not support
Inviso=trueprojectiles withFlakScatter=trueto scatter.Fixed the bug that healing weapons could not automatically acquire aerial targets.
Allow voxel projectiles to use
AnimPaletteandFirersPalette.Fixed an issue where AI would select unreachable buildings and get stuck when looking for buildings like tank bunkers, bio reactors, etc.
Fixed an issue that the first passenger who call the transport ship no longer board the transport ship when the land units call for boarding.
Fixed the bug that
EnterBioReactorSound,LeaveBioReactorSound,EnterGrinderSoundon technotype does not used.Fixed the bug that harvester dont stop unloading and cannot unload cargos anymore when lifting by
IsLocomotor=yeswarhead.Fixed an issue that units on the slope tilted at an excessive angle.
Fixed an issue that impassable invisible barrier generated by the behavior of infantry continuously entering vehicles.
Fixed an issue that teleport units board transport vehicles on the bridge will create an impassable invisible barrier, which may cause the game to freeze or even crash.
Fixed an issue that moving MCV with Teleport locomotion will cause reconnection error.
Fixed wrong shadow when a vehicle has hover locomotor and is being lifted by
IsLocomotor=yeswarhead.Fixed an issue that game crashes (EIP:7FB178) when infantry are about to enter an occupiable building that has been removed and is not real dead.
Fixed an issue that game crashes when spawnee has been removed and is not real dead.
Separated the AirstrikeClass pointer between the attacker/aircraft and the target to avoid erroneous overwriting issues.
Fixed the bug that buildings will always be tinted as airstrike owner.
Fixed an issue where computer players did not search for new enemies after defeating them or forming alliances with them.
Fixed the bug that infantry ignored
PassengersandSizeLimitwhen entering buildings.Fixed
VoiceDeploynot played, when deployed through hot-key/command bar.Fixed the bug that ships can travel on elevated bridges.
Dehardcoded 255 limit of
OverlayType.Fixed an issue where airstrike flare line drawn to target at lower elevation would clip.
Fixed the bug that uncontrolled scatter when elite techno attacked by aircraft or some unit try crush it.
Second weapon with
ElectricAssault=yeswill not unconditionally attack your building withOverpowerable=yes.Infantry support
IsGattling=yes.Fixed an issue that the widespread damage caused by detonation on the bridge/ground cannot affect objects on the ground/bridge who are in the opposite case.
Fixed the bug that
DamageSelfandAllowDamageOnSelfare ineffective on airforce.Fixed the bug that damaged particle dont disappear after building has repaired by engineer.
Fixed an issue of incorrect position of
TrailerAniminVoxelAnim.Fixed the bug that
OpenToppedWarpDistanceis calculated incorrectly for building target.Fixed an issue that
MovementZone=Flyharvesters can not be able to enter refinery buildings manually.Fixed an issue that jumpjet harvester cannot automatically go mining when leaving the weapons factory.
Fixed an issue that jumpjet harvester will overlap when manually entering refinery buildings and cause game crashes.
Fixed an issue that
Spawnedaircraft will fly towards the edge of the map when itsSpawneris under EMP.Projectiles with
Vertical=truenow drop straight down if fired off by AircraftTypes instead of behaving erratically. This behaviour can be turned off by settingVertical.AircraftFix=falseon the projectile.Engineers can enter buildings normally when they don’t need to be repaired (or you can force it by pressing Alt).
Player-controlled spies are not forced to perform other tasks while attacking buildings.
If
BombDisarm=yesis not present for all weapon warheads, then the engineer will no longer use the appropriate mouse action.Fixed an unusual use of DeployFireWeapon for InfantryType.
Fixed the bug that passengers’ Temporal attacks wouldn’t stop when an OpenTopped vehicle was frozen by a Temporal warhead.
Fixed the bug that vehicle owned by computer will scatter when cloaking.
Fixed the bug that submarine always turn left after changed owner by map event.
Fixed the bug that occupyable structure won’t redraw when press deploy hotkey to release all occupants.
Fixed an issue that if the garrison unload occupants when there is no open space around it would result in the disappearance of the occupants.
Fixed the bug that Locomotor warhead won’t stop working when the attacker is being affected by
Temporal=yeswarhead.Fixed the bug that
IsLocomotor=yeswarhead rendering hover units unselectable and undamageable on elevated bridge.Fixed the bug that Locomotor warhead won’t stop working when firer (except for vehicle) stop firing.
Fixed the bug that hover vehicle will sink if destroyed on bridge.
Fixed the fact that when the selected unit is in a rearmed state, it can unconditionally use attack mouse on the target.
When
Speed=0or the TechnoTypes cell cannot move due toMovementRestrictedTo, vehicles cannot attack targets beyond the weapon’s range.Area GuardandHuntmissions will also become ineffective.Fixed an issue that barrel anim data will be incorrectly overwritten by turret anim data if the techno’s section exists in the map file.
Fixed pathfinding crashes (EIP 0x42A525, 0x42C507, 0x42C554) that happened on bigger maps due to too small pathfinding node buffer.
IsSimpleDeployerBalloonHover=trueunits withDeployToLand=falseare no longer forced to land when hovering.If
DeployingAnimwithShadow=trueis played for unit currently in air its shadow will now be drawn on ground.DeployingAnimnow supports bothNormalized=trueandReverse=true. Keep in mindReverseusesLoopEndfor frame amount instead ofEndeven withoutLoopCount> 1.DeployingAnimusing unit drawer now also tint accordingly with the unit.Fixed an issue that jumpjets in air can not correctly spawn missiles.
Fixed an issue that the currently hovered planning node not update up-to-date, such as using hotkeys to select technos.
Fixed an issue that jumpjet vehicles can not stop correctly when assigned a target in range.
Fixed an issue that jumpjet infantry stop incorrectly when assigned a target out of range.
Fixed an issue that jumpjet infantry’ shadow is always drawn even if they are cloaked.
Fixed an issue that technos head to building’s dock even they are not going to dock.
Fixed an issue that the jumpjet vehicles cannot stop correctly after going berserk.
Fixed an issue that infantry walking through a cell containing a tree would cause it to be impassable to other houses.
Fixed the bug that techno unit will draw with ironcurtain and airstrike color and intensity who disguised as terrain or overlay.
Fixed an issue that the AI would enter a combat state when its building receiving damage from friendly units or damage not greater than 0.
If
[General] -> FallingDownTargetingFixis set to true, the techno with weapon withAA=yesandAG=nowill auto targeting units that are falling, such as paratroopers.Iron Curtain/Custom Tint Support for SHP Turreted Vehicles.
Reactivate unused trigger events 2, 53, and 54.
Fixed the bug that vehicle fall on infantry will make all cell content has been removed.
Fixed buildings that have their owner changed during buildup skipping buildup and sometimes not correctly clearing the state.
Fixed preplaced aircraft outside visible map being incorrectly flagged as crashing under certain conditions.
Fixed
MovementZone=Subteranneanharvesters being unable to find docks if in area enclosed by water, cliffs etc.Fixed an issue where some effects pointing to a unit were not properly cleared when the unit changed its owner.
Allow Reveal Crate to take effect when picking up by another player controlled house in campaign.
Fixed an issue where the vanilla script ignores jumpjets. Enable it through
[General] -> AIAirTargetingFix=true.Fixed the bug that naval ship will sink even they destroyed in air.
Fixed MPDebug timer displaying when debug’s visibility is off.
Fixed the issue that units will goto farest location if target is closer than
MinimumRange.Fixed a bug where units can be promoted when created via trigger actions even if they have
Trainable=false.Fixed the bug that ai will try to product aircraft even the airport has no free dock for it.
Fixed the issue where non-repairer units needed sensors to attack cloaked friendly units.
Fixed the issue that rockets do not consider the destination altitude during climbing.
Fixed the bug that if object has been removed from LogicClass in Update(), next object will be skip.
Fixed an issue that the AI would set anger towards friendly houses, causing it to act stupidly.
Fixed an issue that the AI would look for the first house in the array as an enemy instead of the nearest one when there were no enemies.
Fixed the issue that weapon selection don’t check if secondary’s warhead has
IsLocomotor=yes.
Fixes / interactions with other extensions
Weapons fired by EMPulse superweapons (Ares feature) now fully respect the firing building’s FLH.
Weapons fired by EMPulse superweapons (Ares feature) without
EMPulse.TargetSelf=truecan now create radiation.Weapons fired by EMPulse superweapons (Ares feature) now respect
Floaterand Phobos-addedGravitysetting.IsSimpleDeployerunits with Hover locomotor andDeployToLandno longer get stuck after deploying or play their move sound indefinitely.Convert.Deploydisplays ‘NoDeploy’ cursor if the new type is not allowed to move to the cell due toSpeedTypeetc.All forms of type conversion (including Ares’) now correctly update the warp-in delay if unit with teleport
Locomotorwas converted while the delay was active.All forms of type conversion (including Ares’) now correctly update
MoveSoundif a moving unit has their type changed.All forms of type conversion (including Ares’) now correctly update
OpenToppedstate of passengers in transport that is converted.Fixed an issue introduced by Ares that caused building
ActiveAnimto be incorrectly restored whileSpecialAnimwas playing and the building was sold, erased or destroyed.Fixed Ares’ Abductor weapon leaves permanent placement stats when abducting moving vehicles.
Suppressed Ares’ swizzle warning when parsing
TagsandTaskForces(typically begin with[Developer fatal]Pointer 00000000 declared change to both).Fixed Academy (Ares feature) not working on the initial payloads (Ares feature) of vehicles built from a war factory.
Fixed Ares’ InitialPayload not being created for vehicles spawned by trigger actions.
Taking over Ares’ AlphaImage respawn logic to make it not recreate in every frame for buildings, static techno and techno without turret, in order to reduce lags from it.
Fixed an issue where a portion of Ares’s trigger event 75/77 was determined unsuccessfully.
Fixed an issue where some units crashed after the deployment transformation.
Fixed the bug that AlphaImage remained after unit entered tunnel.
Fixed an issue where Ares’
Convert.Deploytriggers repeatedly when the unit is turning or moving.The game now automatically changes save file name from
SAVEGAME.NETtoSVGM_XXX.NET(whereXXXis a number) when saving to prevent occasional overwriting of the save file when using Phobos with XNA CnCNet Client and saving too frequently.1000 save files are supported, from
SVGM_000.NETtoSVGM_999.NET. When the limit is reached, the game will overwrite the latest save file.The previous
SVGM_XXX.NETfiles are cleaned up before first copy if it’s a new game, otherwise the highest numberedSVGM_XXX.NETfile is found and the index is incremented, if possible.The game also automatically copies
spawn.inito the save folder asspawnSG.iniwhen saving a game.
Note
The described behavior is a replica of and is compliant with XNA CnCNet Client’s multiplayer save game support.
Note
At the moment this is only useful if you use a version of YRpp Spawner with multiplayer saves support (along with XNA CnCNet Client).
Fixed an issue that Ares’ Type Conversion not resetting barrel’s direction by
FireAngle.Fixed the issue where Ares’
Flash.Durationcannot override the weapon’s repair flash effect.Fixed the bug that building with
CloningFacility=trueandWeaponsFactory=truemay cloning multiple vehicles and then they get stuck.Fixed a bug introduced by Ares where building types that have
UndeploysIntocannot displayAltCameoorAltCameoPCXeven when you infiltrate enemy buildings withFactory=UnitType.Fixed the issue that technos cannot spawn survivors due to non-probabilistic reasons when the tech type was destroyed.
Fixed the bug that vehicle survivor can spawn on wrong position when transport has been destroyed.
Newly added global settings
Note
This category lists all features that are globally effective without needing to be defined on any specific object.
Allow deploy controlled MCV
In vanilla, you cannot deploy a controlled vehicle to ConstructionYard=true building. Now you can customize it.
In rulesmd.ini:
[General]
AllowDeployControlledMCV=false ; boolean
Chrono sparkle animation customization & improvements
It is now possible to customize the frame delay between instances of
[General] -> ChronoSparkle1animations created on objects being warped by setting[General] -> ChronoSparkleDisplayDelay.By default on buildings with
MaxNumberOccupantshigher than 0, chrono sparkle animation would be shown at each of theMuzzleFlashXcoordinates. This behaviour is now customizable, and supportsMuzzleFlashXindices higher than 10.[General] -> ChronoSparkleBuildingDisplayPositionscan be set to show the sparkle animation on the building (building), muzzle flash coordinates of current occupants (occupants), muzzle flash coordinates of all occupant slots (occupantslots) or any combination of these.If
occupantsoroccupantslotsis listed withoutbuilding, a single chrono sparkle animation is still displayed on building if it doesn’t have any occupants or it hasMaxNumberOccupantsvalue less than 1, respectively.
The chrono sparkle animation that is displayed on building itself is also now displayed at the center of it rather than at center of its topmost cell.
In rulesmd.ini:
[General]
ChronoSparkleDisplayDelay=24 ; integer, game frames
ChronoSparkleBuildingDisplayPositions=occupantslots ; List of chrono sparkle position enum (building | occupants | occupantslots | all)
Crate improvements
There are some improvements on goodie crate logic:
The statistic distribution of the randomly generated crates is now more uniform within the visible map region by using an optimized sampling procedure.
You can now limit the crates’ spawn region to land only by setting
[CrateRules] -> CreateOnlyOnLandto true.The limit of vehicles a player can own before unit crates start giving money instead can now be customized by setting
UnitCrateVehicleCap. Negative numbers disable the cap entirely.FreeMCVsetting is now actually respected and can be used to disable the forced unit selected from[General] -> BaseUnitthat is given if player picks a crate and has enough credits but no existing buildings orBaseUnitvehicles.The previously hardcoded credits threshold that must be passed can also now be customized via
FreeMCV.CreditsThreshold.
In rulesmd.ini:
[CrateRules]
CrateOnlyOnLand=false ; boolean
UnitCrateVehicleCap=50 ; integer
FreeMCV=true ; boolean
FreeMCV.CreditsThreshold=1500 ; integer
Customizable unit image in art
Imagetag in art INI is no longer limited to AnimationTypes and BuildingTypes, and can be applied to all TechnoTypes (InfantryTypes, VehicleTypes, AircraftTypes, BuildingTypes).The tag specifies only the file name (without extension) of the asset that replaces TechnoType’s graphics. If the name in
Imageis also an entry in the art INI, no tags will be read from it.By default this feature is disabled to remain compatible with YR. To use this feature, enable it in rules with
ArtImageSwap=true.This feature supports SHP images for InfantryTypes, SHP and VXL images for VehicleTypes and VXL images for AircraftTypes.
In rulesmd.ini:
[General]
ArtImageSwap=false ; disabled by default
Warning
To use this feature properly, you need to remove or replace the following segments in the YR INI code to avoid compatibility issues between the original Westwood INI code and this feature.
In artmd.ini:
[CAML]
Image=JOSH
[BFRT]
Image=SREF
Hint
In vanilla, [CLNT] does not have its own image. Originally, in artmd.ini, it uses another image placeholder via Image=ARND, but due to the lack of this feature, it has no effect. Subsequently, it and [UTNK] etc. also switch to using rulesmd.ini to call image resources; however, unlike other art sections which merely changed the implementation method, it not only changes the implementation method but also switches to using Image=CIVC instead of ARND. Although this does not directly manifest as a conflict when [General] -> ArtImageSwap=true, modders may need to pay attention.
Customize resource storage
Now Ares
Storagefeature can set which Tiberium type from[Tiberiums]list should be used for storing resources in structures withRefinery.UseStorage=yesandStorage> 0.This tag can not be used without Ares.
In rulesmd.ini:
[General]
Storage.TiberiumIndex=-1 ; integer, [Tiberiums] list index
Customize the chained damage of the wall
In vanilla, when the wall is damaged, it will deal 200 damage to the walls in the 4 nearby cells. This makes connected walls more vulnerable to damage compared to single walls.
Now you can customize that damage by using the following flag.
In rulesmd.ini:
[CombatDamage]
AdjacentWallDamage=200 ; integer
Customizing effect of level lighting on air units
It is now possible to customize how air units are affected by level lighting, separately for AircraftTypes and infantry/vehicles with Jumpjet
Locomotor.AircraftLevelLightMultiplier&JumpjetLevelLightMultiplierare direct multipliers to level lighting applied on the units, for height levels above the cell they are on.
In rulesmd.ini:
[AudioVisual]
AircraftLevelLightMultiplier=1.0 ; floating point value, percents or absolute
JumpjetLevelLightMultiplier=0.0 ; floating point value, percents or absolute
Customizing default ColorScheme
In vanilla, an
AltPalette=yesanimation orVoxel=yesProjectile image that cannot properly remap will use the first Color Scheme in the[Colors]list; now it can be manually specified.
In rulesmd.ini:
[AudioVisual]
AnimRemapDefaultColorScheme= ; ColorScheme name
Iron Curtain & Force Shield extra tint intensity
It is now possible to specify additional tint intensity applied to Iron Curtained and Force Shielded units.
In rulesmd.ini:
[AudioVisual]
IronCurtain.ExtraTintIntensity=0.0 ; floating point value
ForceShield.ExtraTintIntensity=0.0 ; floating point value
Jumpjet climbing logic enhancement
You can now let the jumpjets increase their height earlier by set
JumpjetClimbPredictHeightto true. The jumpjet will raise its height 5 cells in advance, instead of only raising its height when encountering cliffs or buildings in front of it.You can also let them simply skip the stop check by set
JumpjetClimbWithoutCutOutto true. The jumpjet will not stop moving horizontally when encountering cliffs or buildings in front of it, but will continue to move forward while raising its altitude.When
JumpjetClimbPredictHeightis enabled, if the height raised five grids in advance is still not enough to cross cliffs or buildings, it will stop and move horizontally as before, unlessJumpjetClimbWithoutCutOutis also enabled.
In rulesmd.ini:
[General]
JumpjetClimbPredictHeight=false ; boolean
JumpjetClimbWithoutCutOut=false ; boolean
Move IvanBomb Position
In vanilla, IvanBomb images display and the bombs detonate at the top-leftmost cell of the building foundation instead of at the center of buildings. This can now be changed.
In rulesmd.ini:
[CombatDamage]
IvanBombAttachToCenter=false ; boolean
Warning
Due to technical constraints this cannot be customized per WeaponType.
RadialIndicator visibility
In vanilla game, a structure’s radial indicator can be drawn only when it belongs to the player. Now it can also be visible to observer. On top of that, you can specify its visibility from other houses.
In rulesmd.ini:
[AudioVisual]
RadialIndicatorVisibility=allies ; List of Affected House Enumeration (owner/self | allies/ally | enemies/enemy | all)
Re-enable obsolete [JumpjetControls]
Re-enable obsolete
[JumpjetControls], the keys in it will be as the default value of jumpjet units.Moreover, added two tags for missing ones.
In rulesmd.ini:
[JumpjetControls]
Crash=5.0 ; floating point value
NoWobbles=false ; boolean
Note
CruiseHeight is for JumpjetHeight, WobblesPerSecond is for JumpjetWobbles, WobbleDeviation is for JumpjetDeviation, and Acceleration is for JumpjetAccel. All other corresponding keys just simply have no Jumpjet prefix.
Skirmish AI behavior dehardcode
In vanilla, there is a hardcoded behavior that when an skirmish AI player has no factory and has not taken damage for a while, it will sell its buildings and set its units to hunt. This can be customized now.
[General] -> AIFireSaleand[General] -> AIAllToHuntcontrol whether the AI will act selling and hunting respectively.[General] -> AIFireSaleDelaydefines a timer, it will only work if[General] -> AIFireSaleis set totrue. When the first time the AI reaches the trigger condition of vanilla behavior, the timer starts and prevents the selling behavior from happening until the timer is expired.You can use these flags to make the AIs “all in” before they are defeated.
Another hardcoded behavior is that, when the AI deploys a MCV, it will gather all of its forces to that place. This can be toggle off now.
[General] -> GatherWhenMCVDeploycontrols this behavior.
In rulesmd.ini:
[General]
AIFireSale=true ; boolean
AIFireSaleDelay=0 ; integer, number of frames
AIAllToHunt=true ; boolean
GatherWhenMCVDeploy=true ; boolean
Use 8-bit RGB parameters for [ColorAdd]
In vanilla, the values in the
[ColorAdd]entry are used as RGB565 (0-31 for red & blue, 0-63 for green). Now, with this setting, you can use the more user-friendly 8-bit RGB (0-255) for input.This works for
LaserTargetColor,IronCurtainColor,BerserkColorandForceShieldColor.
In rulesmd.ini:
[AudioVisual]
ColorAddUse8BitRGB=false ; boolean
Veinholes & Weeds
Veinholes
Veinhole monsters now work like they used to in Tiberian Sun.
Their core parameters are still loaded from
[General].The Warhead used by veins is specified under
[CombatDamage]. The warhead has to haveVeinhole=yesset.Veinholes are hardcoded to use several overlay types.
The vein attack animation specified under
[AudioVisual]is what deals the damage. The animation has to be properly listed under[Animations]as well.Units can be made immune to veins the same way as in Tiberian Sun.
The monster itself is represented by the
VEINTREETerrainType, which hasIsVeinhole=trueset. Its strength is what determines the strength of the Veinhole.
Note
Everything listed below functions identically to Tiberian Sun. Many of the tags from Tiberian Sun have been re-enabled. The values provided below are identical to those found in TS and YR rules. You can read more about them on ModENC: VeinholeGrowthRate, VeinholeShrinkRate, MaxVeinholeGrowth, VeinDamage, VeinholeTypeClass, VeinholeWarhead, Veinhole, VeinAttack, ImmuneToVeins, IsVeinhole
In rulesmd.ini:
[General]
VeinholeGrowthRate=300 ; integer
VeinholeShrinkRate=100 ; integer
MaxVeinholeGrowth=2000 ; integer
VeinDamage=5 ; integer
VeinholeTypeClass=VEINTREE ; TerrainType
[CombatDamage]
VeinholeWarhead=VeinholeWH ; WarheadType
[VeinholeWH]
Veinhole=yes
[AudioVisual]
VeinAttack=VEINATAC ; AnimationType
[TechnoType]
EliteAbilities=VEIN_PROOF
ImmuneToVeins=yes
[VEINTREE]
IsVeinhole=true
Strength=1000 ; integer - the strength of the Veinhole
Warning
The game expects certain overlays related to Veinholes to have certain indices, they are listed below. Please keep in mind that the indices in the OverlayTypes list are 0-based, formed internally by the game, and the identifiers left of “=” don’t matter. Vanilla rulesmd.ini already has the required overlays listed at the correct indices.
In rulesmd.ini:
[OverlayTypes]
126=VEINS ; The veins (weeds)
167=VEINHOLE ; The Veinhole itself
178=VEINHOLEDUMMY ; A technical overlay
Weeds & Weed Eaters
Vehicles with
Weeder=yescan now collect weeds. The weeds can then be deposited into a building withWeeder=yes.Weeds are not stored in a building’s storage, but rather in a House’s storage. The weed capacity is listed under
[General] -> WeedCapacity.Weeders now show the ore gathering animation. It can be customized the same way as for harvesters.
Weeders can use the Teleport locomotor like chrono miners.
Total amount of weeds in storage can be displayed on sidebar, see Weeds counter.
Weed-consuming superweapons
Superweapons can consume weeds to recharge, like the Chemical Missile special in Tiberian Sun.
Note
As the code for the Chemical Missile had been removed, setting Type=ChemMissile will not work.
In rulesmd.ini:
[SOMESW] ; SuperWeaponType
UseWeeds=no ; boolean - should the SW use weeds to recharge?
UseWeeds.Amount= ; integer - how many? default is General->WeedCapacity
UseWeeds.StorageTimer=no ; boolean - should the counter on the sidebar display the % of weeds stored?
UseWeeds.ReadinessAnimationPercentage=0.9 ; double - when this many weeds % are stored, the SW will show it's ready on the building (open nuke/open chrono, etc.)
Voxel light source customization
Voxel by C&CrispS
It is now possible to change the position of the light relative to the voxels. This allows for better lighting to be set up.
Only the direction of the light is accounted, the distance to the voxel is not accounted.
Vanilla light (assuming
UseFixedVoxelLighting=false) is located roughly atVoxelLightSource=0.201,-0.907,-0.362.
In rulesmd.ini:
[AudioVisual]
UseFixedVoxelLighting=false ; boolean, whether to fix the lighting
VoxelLightSource= ; X,Y,Z - position of the light in the world relative to each voxel, floating point values
Hint
In order to easily preview the light source settings use the VXL Viewer and VPL Generator tool by thomassneddon. To use the tool unpack it somewhere, then drag the main VXL file of a voxel that you will use to preview onto it (auxilliary VXL and HVA files must be in the same folder).
Keep in mind that the tool doesn’t account for UseFixedVoxelLighting=true as of yet, so the values shown in tool need to be offset when putting in the game with with fixed voxel lighting.
Waypoints for buildings
In vanilla, buildings are forbidden to use waypoints. Now you can allow that using the following flag.
In rulesmd.ini:
[General]
BuildingWaypoints=false ; boolean
Aircraft
Carryall pickup voice
It is now possible to override
VoiceMoveforCarryall=trueaircraft for when commanding it to pick up vehicles by settingVoicePickup.
In rulesmd.ini:
[SOMEAIRCRAFT] ; AircraftType
VoicePickup= ; Sound entry
Customize the scatter caused by aircraft attack mission
In vanilla, when an aircraft attacks, it forces the target’s cell to trigger a scatter. Now you can disable this behavior by setting the following flag to
false.
In rulesmd.ini:
[SOMEAIRCRAFT] ; AircraftType
FiringForceScatter=true ; boolean
Extended Aircraft Missions
Aircraft will now be able to use waypoints.
When a
guardcommand ([G]by default) or aarea guardcommand ([Ctrl]+[Alt]) is issued, the aircraft will search for targets around the position (forguardis the current location, forarea guardis the target position) and return immediately when ammos are depleted.If the target is not found, or if there is still ammo when the target is destroyed, it will continue to hover over the guarded area.
When an
attack movecommand ([Ctrl]+[Shift]) is issued, the aircraft will move towards the destination and search for nearby targets on the route for attack. Once ammo is depleted or the destination is reached, it will return.If the automatically selected target is destroyed but ammo is not depleted yet during the process, the aircraft will continue flying to the destination.
In addition, the actions of aircraft are also changed.
ExtendedAircraftMissions.SmoothMovingcontrols whether the aircraft will return to the airport when the distance to the destination is less than half ofSlowdownDistanceor its turning radius.ExtendedAircraftMissions.EarlyDescendcontrols whether the aircraft not have to fly directly above the airport before starting to descend when the distance between the aircraft and the landing point is less thanSlowdownDistance(also work for aircraft spawned by aircraft carriers).ExtendedAircraftMissions.RearApproachcontrols whether the aircraft should start landing at the airport from the opposite direction ofLandingDir.ExtendedAircraftMissions.FastScramblecontrols whether the aircraft can scramble when its airport has been destroyed.ExtendedAircraftMissions.UnlandDamagecontrols the damage suffered by the aircraft every 4 frames when there is no airport for the aircraft to land. If the value is negative, it will crash immediately. Not recommended to use whenExtendedAircraftMissionsis not enabled.
In rulesmd.ini:
[General]
ExtendedAircraftMissions=false ; boolean
ExtendedAircraftMissions.UnlandDamage=-1 ; integer
[SOMEAIRCRAFT] ; AircraftType
ExtendedAircraftMissions.SmoothMoving= ; boolean, default to [General] -> ExtendedAircraftMissions
ExtendedAircraftMissions.EarlyDescend= ; boolean, default to [General] -> ExtendedAircraftMissions
ExtendedAircraftMissions.RearApproach= ; boolean, default to [General] -> ExtendedAircraftMissions
ExtendedAircraftMissions.FastScramble= ; boolean, default to [General] -> ExtendedAircraftMissions
ExtendedAircraftMissions.UnlandDamage= ; integer, default to [General] -> ExtendedAircraftMissions.UnlandDamage
Note
And now when ExtendedAircraftMissions is enabled, aircraft that can land at the airport will check at any time to see if they have a dock. Therefore, if there are aircraft in your mission that require dock and you have not provided enough or not disabled the feature, they will crash immediately
Fixed spawn distance & spawn height for airstrike / SpyPlane aircraft
It is now possible to have aircraft spawned from
(Elite)AirstrikeTeamTypeorType=SpyPlanesuperweapons to be created at fixed distance from their intended target/destination instead of from edge of the map by settingSpawnDistanceFromTarget.SpawnHeightcan also be used to override the initial height of the aircraft, which defaults toFlightLevel, or if not set then[General] -> FlightLevel.
In rulesmd.ini:
[SOMEAIRCRAFT] ; AircraftType
SpawnDistanceFromTarget= ; floating point value, distance in cells
SpawnHeight= ; integer, height in leptons
Landing direction
By default aircraft land facing the direction specified by
[AudioVisual] -> PoseDir. This can now be customized per AircraftType viaLandingDir, defaults to[AudioVisual] -> PoseDir. If the building the aircraft is docking to has aircraft docking direction set, that setting takes priority over this.Negative values are allowed as a special case for
AirportBound=falseaircraft which makes them land facing their current direction.
In rulesmd.ini:
[SOMEAIRCRAFT] ; AircraftType
LandingDir= ; Direction type (integers from 0-255). Accepts negative values as a special case.
Animations
Animation weapon and damage settings
Weaponcan be set to a WeaponType, to create a projectile and immediately detonate it instead of simply dealingDamagebyWarhead. This allows weapon effects to be applied.Damage.Delaydetermines delay between two applications ofDamage. RequiresDamageto be set to 1.0 or above. Value of 0 disables the delay. Keep in mind that this is measured in animation frames, not game frames. Depending onRate, animation may or may not advance animation frames on every game frame.Damage.DealtByInvoker, if set to true, makes anyDamagedealt to be considered as coming from the animation’s invoker (f.ex, firer of the weapon if it is WarheadAnimList/SplashListanimation, the destroyed vehicle if it isDestroyAnimanimation or the object the animation is attached to). If invoker has died or does not exist, the house the invoker belonged to is still used to deal damage and apply Phobos-introduced Warhead effects etc. If not set, the animation’s owner house, or failing that, owning house of object it is attached to or the building it belongs to is used to deal the damage.Damage.ApplyFirepowerMultdetermines whether or not firepower modifiers from the animation’s invoker are applied on the damage dealt from this animation, if exists.
Damage.ApplyOncePerLoop, if set to true, makesDamagebe dealt only once per animation loop (on single loop animations, only once, period) instead of on every frame or intervals defined byDamage.Delay. The frame on which it is dealt is determined byDamage.Delay, defaulting to after the first animation frame.
In artmd.ini:
[SOMEANIM] ; AnimationType
Weapon= ; WeaponType
Damage.Delay=0 ; integer, animation frames
Damage.DealtByInvoker=false ; boolean
Damage.ApplyOncePerLoop=false ; boolean
Damage.ApplyFirepowerMult=false ; boolean
Note
Weapon and Damage.Delay, beyond the other additions, should function similarly to the equivalent features introduced by Ares and take precedence over them if Phobos is used together with Ares.
Attached animation position customization
You can now customize position of attached animations via different values for
AttachedAnimPosition.default: Animation shows up at the parent object’s logical position (for buildings, this is the top-leftmost cell / cell #0).center: Animation shows up at the parent object’s visual center.ground: Animation shows up at the parent object’s visual center but forced to ground level. Note that the animations is still considered attached to the object and is likely to be drawn above objects that the object itself would cover unless other settings are used to compensate.
In artmd.ini:
[SOMEANIM] ; AnimationType
AttachedAnimPosition=default ; Attached animation position enumeration (default|center|ground)
Customizable debris & meteor impact and warhead detonation behaviour
ExplodeOnWatercan be set to true to make the animation explode on impact with water.ExpireAnimwill be played andWarheadis detonated or used to deal damage / generate light flash.Warhead.Detonate, if set to true, makes theWarheadfully detonate instead of simply being used to deal damage and generate light flash if it hasBright=true.WakeAnimcontains wake animations to play ifExplodeOnWateris not set and the animation impacts with water. Defaults to[General] -> WakeifIsMeteoris not set to true, otherwise no animation. If more than one animation is listed, a random one is selected.SplashAnimscontains list of splash animations used ifExplodeOnWateris not set and the animation impacts with water.If
SplashAnims.PickRandomis set to true, picks a random animation fromSplashAnimsto use on each impact with water. Otherwise last listed animation fromSplashAnimsis used.
ExtraShadowcan be set to false to disable the display of shadows on the ground.
In artmd.ini:
[SOMEANIM] ; AnimationType
ExplodeOnWater=false ; boolean
Warhead.Detonate=false ; boolean
WakeAnim= ; List of AnimationTypes
SplashAnims= ; List of AnimationTypes, default to [CombatDamage] -> SplashList
SplashAnims.PickRandom=false ; boolean
ExtraShadow=true ; boolean
Customize whether Crater=yes animation would destroy tiberium
In vanilla, the anim with
Crater=yesis hardcoded to destroy the tiberium in its cell. Now you can disable this behavior by setting the following tags tofalse.
In rulesmd.ini:
[General]
AnimCraterDestroyTiberium=true ; boolean
In artmd.ini:
[SOMEANIM] ; AnimationType
Crater.DestroyTiberium= ; boolean, default to [General] -> AnimCraterDestroyTiberium
Fire animations spawned by Scorch & Flamer
Tiberian Sun allowed
Scorch=trueandFlamer=trueanimations to spawn fire animations from[AudioVisual] -> SmallFire&LargeFire. This behaviour has been reimplemented and is fully customizable.ConstrainFireAnimsToCellSpotscontrols whether or not spawned animations are locked to cell spots (e.g the subcell positions infantry are also constrained to).FireAnimDisallowedLandTypescontrols which landtypes the fire animations are not allowed to spawn on. Defaults towater,rock,beach,iceforScorch=true,noneotherwise.AttachFireAnimsToParentcontrols if the spawned animations are attached to the owner of the parent animation if it is also attached. Defaults to true forScorch=true, otherwise false.SmallFireCountdetermines number of small fire animations to spawn by bothScorch=trueandFlamer=trueanimations. Defaults to 2 forFlamer=true, otherwise 1.SmallFireAnimscan be used to set the animation types, defaults to[AudioVisual] -> SmallFire(single animation).SmallFireChancesis a list of probabilities for the animations to spawn, up toSmallFireCountamount of items are read. Last item listed is used if count exceeds the number of listed probabilities. Defaults to1.0,0.5forFlamer=true,1.0otherwise.SmallFireDistancesis a list of distances in cells for the animations to spawn at from the parent animation’s coordinates, up toSmallFireCountamount of items are read. Last item listed is used if count exceeds the number of listed probabilities. Defaults to0.25,0.625forFlamer=true,0.0otherwise.
LargeFireCountdetermines number of large fire animations to spawn byFlamer=trueanimations only.LargeFireAnimscan be used to set the animation types, defaults to[AudioVisual] -> LargeFire(single animation).LargeFireChancesis a list of probabilities for the animations to spawn, up toLargeFireCountamount of items are read. Last item listed is used if count exceeds the number of listed probabilities.LargeFireDistancesis a list of distances in cells for the animations to spawn at from the parent animation’s coordinates, up toLargeFireCountamount of items are read. Last item listed is used if count exceeds the number of listed probabilities.
In artmd.ini:
[SOMEANIM] ; AnimationType
ConstrainFireAnimsToCellSpots=true ; boolean
FireAnimDisallowedLandTypes= ; List of LandTypes (none | clear | road | water | rock | wall | tiberium | beach | rough | ice | railroad | tunnel | weeds)
AttachFireAnimsToParent= ; boolean
SmallFireCount= ; integer
SmallFireAnims= ; List of AnimationTypes
SmallFireChances= ; List of floating point values (percent or absolute)
SmallFireDistances= ; List of floating point values, distance in cells
LargeFireCount=1 ; integer
LargeFireAnims= ; List of AnimationTypes
LargeFireChances=0.5 ; List of floating point values (percent or absolute)
LargeFireDistances=0.4375 ; List of floating point values, distance in cells
Note
Save for the change that Flamer does not spawn animations if the parent animation is in air, the default settings should provide identical results to similar feature from Ares.
Layer on animations attached to objects
You can now customize whether or not animations attached to objects follow the object’s layer or respect their own
Layersetting. If this is unset, attached animations usegroundlayer.
In artmd.ini:
[SOMEANIM] ; AnimationType
Layer.UseObjectLayer= ; boolean
Ore stage threshold for HideIfNoOre
You can now customize which growth stage should an ore/tiberium cell have to have animation with
HideIfNoOredisplayed. Cells with growth stage less than specified value won’t allow the anim to display.
In artmd.ini:
[SOMEANIM] ; AnimationType
HideIfNoOre.Threshold=0 ; integer, minimal ore growth stage
Buildings
AI base construction modification
AI can now have some new behaviors.
AIAutoDeployMCVcontrols whether AI will still automatically deploy the mcv after owning a construction yard.AISetBaseCentercontrols whether AI will still set the newly deployed construction yard as the base center after owning a construction yard.AIBiasSpawnCellcontrols whether AI will preferentially select the construction yard close to the birth point as the base center (useless in campaign).AIForbidConYardcontrols whether AI cannot place buildings withConstructionYard=true. AI will try to build one after a construction yard is destroyed but will not put it down. After that, it will continue to build other buildings. Building a construction yard will still take some time. You can try to reduce the build time of it.AINodeWallsOnlycontrols whether AI can only automatically connect adjacent walls when there are wall base nodes around.AICleanWallNodecontrols whether AI cannot place walls when there are noProtectWithWallbuildings around. If it cannot be placed, this base node will also be removed.
In rulesmd.ini:
[AI]
AIAutoDeployMCV=true ; boolean
AISetBaseCenter=true ; boolean
AIBiasSpawnCell=false ; boolean
AIForbidConYard=false ; boolean
AINodeWallsOnly=false ; boolean
AICleanWallNode=false ; boolean
Aircraft docking direction
It is now possible to customize the landing direction for docking aircraft via
AircraftDockingDir(N)(Noptionally replaced by 0-based index for eachDockingOffsetseparately,AircraftDockingDirandAircraftDockingDir0are synonymous and will be used if direction is not set for a specific offset) on the dock building. This overrides the aircraft’s own landing direction setting and defaults to[AudioVisual] -> PoseDir.
In rulesmd.ini:
[SOMEBUILDING] ; BuildingType
AircraftDockingDir(N)= ; Direction type (integers from 0-255)
Allows refineries to use multiple ActiveAnim simultaneously
In vanilla, the refinery uses different ActiveAnims depending on the storage. You can now make it use multiple ActiveAnims simultaneously like any other building.
In artmd.ini:
[SOMEBUILDING] ; BuildingType
Refinery.UseNormalActiveAnim=false ; boolean
Allowed / disallowed types for FactoryPlant
It is now possible to customize which TechnoTypes benefit from bonuses of a
FactoryPlant=truebuilding by listing them onFactoryPlant.AllowTypesand/orFactoryPlant.DisallowTypes.FactoryPlant.Multiplier(Ares feature) is still applied on the bonuses if they are in effect.
In rulesmd.ini:
[SOMEBUILDING] ; BuildingType
FactoryPlant.AllowTypes= ; List of TechnoTypes
FactoryPlant.DisallowTypes= ; List of TechnoTypes
Apply ZShapePointMove during buildups
By default buildings do not apply
ZShapePointMove(which offsets the ‘z shape’ applied on buildings which is used to adjust them in depth buffer and is used to fix issues related to that such as corners of buildings getting cut off when drawn) when buildup is being displayed. This behaviour can now be toggled by settingZShapePointMove.OnBuildup.
In artmd.ini:
[SOMEBUILDING] ; BuildingType
ZShapePointMove.OnBuildup=false ; boolean
Buildings considered as vehicles
By default game considers buildings with both
UndeploysIntoset andFoundationequaling1x1as vehicles, in a manner of speaking. This behaviour can now be toggled individually of these conditions by settingConsideredVehicle. These buildings are counted as vehicles for unit count tracking, are not considered as base under attack when damaged and can be mass selected by default, for an example.When capturing such “buildings”, the player won’t be notified by EVA capture event.
In rulesmd.ini:
[SOMEBUILDING] ; BuildingType
ConsideredVehicle= ; boolean
Custom exit cell for infantry factory
By default
Factory=InfantryTypebuildings use exit cell for the created infantry based on hardcoded settings if any ofGDIBarracks,NODBarracksorYuriBarracksare set to true. It is now possible to define arbitrary exit cell for such building viaBarracksExitCell. Below is a reference of the cell offsets for the hardcoded values.
Key |
Cell Offset |
|---|---|
|
1,2 |
|
2,2 |
|
2,1 |
In rulesmd.ini:
[SOMEBUILDING] ; BuildingType
BarracksExitCell= ; X,Y - cell offset
Custom whether to synchronously change the owner of the RadioLink-linked units when the owner of a building changes
In vanilla, buildings with RadioLink (f.ex. war factory and air base) will change the owner of the RadioLink-linked units when the owner of the building changes. Now you can toggle this behaviour off by the following flags.
In rulesmd.ini:
[General]
BuildingRadioLink.SyncOwner=true ; boolean
[SOMEBUILDING] ; BuildingType
BuildingRadioLink.SyncOwner= ; boolean, default to [General] -> BuildingRadioLink.SyncOwner
Customizable garrison and bunker properties
You can now customize damage or ROF multipliers of a garrison or tank bunker building.
You can now customize enter or exit sound of a tank bunker building.
In rulesmd.ini:
[SOMEBUILDING] ; BuildingType
OccupyDamageMultiplier= ; floating point value, default to [CombatDamage] -> OccupyDamageMultiplier
OccupyROFMultiplier= ; floating point value, default to [CombatDamage] -> OccupyROFMultiplier
BunkerDamageMultiplier= ; floating point value, default to [CombatDamage] -> BunkerDamageMultiplier
BunkerROFMultMultiplier= ; floating point value, default to [CombatDamage] -> BunkerROFMultMultiplier
BunkerWallsUpSound= ; Sound entry, default to [AudioVisual] -> BunkerWallsUpSound
BunkerWallsDownSound= ; Sound entry, default to [AudioVisual] -> BunkerWallsDownSound
Customizable selling buildup sequence length for buildings that can undeploy
By default buildings with
UndeploysIntowill only play 23 frames of their buildup sequence (in reverse starting from last frame) when being sold as opposed to being undeployed. This can now be customized viaSellBuildupLength.
In rulesmd.ini:
[SOMEBUILDING] ; BuildingType
SellBuildupLength=23 ; integer, number of buildup frames to play
Customizable & new grinder properties
Using ally grinder, restricting to vehicles only and refund display (Project Phantom)
You can now customize which types of objects a building with
Grindingset can grind as well as the grinding sound.Grinding.AllowAllieschanges whether or not to allow units to enter allies’ buildings.Grinding.AllowOwnerchanges whether or not to allow units to enter your own buildings.Grinding.AllowTypescan be used to define InfantryTypes and VehicleTypes that can be grinded by the building. Listing any will disable grinding for all types except those listed.Grinding.DisallowTypescan be used to exclude InfantryTypes or VehicleTypes from being able to enter the grinder building.Grinding.PlayDieSoundcontrols if the units’DieSoundandVoiceDieare played when entering the grinder.Grinding.Soundis a sound played by when object is grinded by the building.Grinding.Weaponis a weapon fired at the building & by the building when it grinds an object. Will only be fired if at least weapon’sROFamount of frames have passed since it was last fired.Grinding.Weapon.RequiredCreditscan be set to have the weapon require accumulated credits from grinding to fire. Accumulated credits for this purpose are reset every time when the weapon fires.
For money string indication upon grinding, please refer to
DisplayIncome.
In rulesmd.ini:
[SOMEBUILDING] ; BuildingType
Grinding.AllowAllies=false ; boolean
Grinding.AllowOwner=true ; boolean
Grinding.AllowTypes= ; List of InfantryTypes / VehicleTypes
Grinding.DisallowTypes= ; List of InfantryTypes / VehicleTypes
Grinding.PlayDieSound=true ; boolean
Grinding.Sound= ; Sound entry, default to [AudioVisual] -> EnterGrinderSound
Grinding.Weapon= ; WeaponType
Grinding.Weapon.RequiredCredits=0 ; integer
Customize overpower logic
Now you can specific how building can be overpowerd.
In rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
ElectricAssaultLevel=1 ; integer
[SOMEBUILDING] ; BuildingType
Overpower.KeepOnline=2 ; integer, negative values mean that cannot keep online
Overpower.ChargeWeapon=1 ; integer, negative values mean that weapons can never be switched
Note
Ares’ Battery Super Weapon won’t be affected by this.
Disable DamageSound
Now you can disable
DamageSoundof a building.
In rulesmd.ini:
[SOMEBUILDING] ; BuildingType
DisableDamageSound=false ; boolean
Exclude Factory from providing multiple factory bonus
It is now possible to exclude a building with
Factoryfrom counting towardsMultipleFactorybonus.
In rulesmd.ini:
[SOMEBUILDING] ; BuildingType
ExcludeFromMultipleFactoryBonus=false ; boolean
Power plant damage factor
It is possible to customize the power decrement of a power plant when it’s damaged. The actual power output for this plant will be:
Powerminuses the product of original power decrement andPowerplant.DamageFactor. Can’t reduce power output lower than 0.Specifically, if the factor is set to 0.0, power output won’t be decreased by losing health for this power plant.
In rulesmd.ini:
[SOMEBUILDING] ; BuildingType
PowerPlant.DamageFactor=1.0 ; floating point value
Skip anim delay for burst fire
In Red Alert 1, the tesla coil will attack multiple times after charging animation. This is not possible in Red Alert 2, where the building must play the charge animation every time it fires.
Now you can implement the above logic using the following flag.
In artmd.ini:
[SOMEBUILDING] ; BuildingType
IsAnimDelayedBurst=true ; boolean
Note
The prism towers’ fire is hardcoded to be delayed. Their fire will ignore this flag, just as they ignore IsAnimDelayedFire.
Unit repair customization
It is now possible to customize the repairing of units by
UnitRepair=true,UnitReload=trueandHospital=truebuildings.Units.RepairRatecustomizes the rate at which the units are repaired. This defaults to[General] -> ReloadRateifUnitReload=trueand if overridden per AircraftType (Ares feature) can tick at different time for each docked aircraft. Setting this overrides that behaviour. ForUnitRepair=truebuildings this defaults to[General] -> URepairRate.On
UnitReload=truebuilding setting this to negative value will fully disable the repair functionality.
Units.RepairStephow muchStrengthis restored per repair tick.Units.RepairPercentis a multiplier to cost of repairing (cost / (maximum health / repair step)). Note that the final cost is set to 1 if it is less than that.Units.UseRepairCostcan be used to customize if repair cost is applied at all. Defaults to false for infantry, true for everything else.
In rulesmd.ini:
[SOMEBUILDING] ; BuildingType
Units.RepairRate= ; floating point value, ingame minutes
Units.RepairStep= ; integer, default to [General] -> RepairStep
Units.RepairPercent= ; floating point value, percents or absolute, default to [General] -> RepairPercent
Units.UseRepairCost= ; boolean
Customize if cloning need power
In vanilla, cloning vats can work fine even low power. Starting from Ares 2.0, they need power to work. Now you can specific it.
In rulesmd.ini:
[SOMEBUILDING] ; BuildingType
Cloning.Powered=true ; boolean
Infantry
Auto deploy for GI-like infantry
In RA2, the GI-like infantry controlled by the AI will automatically deploy to use their more powerful secondary weapons when engaging the enemy. This feature was broken in Yuri’s Revenge. Now you can use the following flags to re-enable this feature.
In rulesmd.ini:
[General]
InfantryAutoDeploy=false ; boolean
[SOMEINFANTRY] ; InfantryType
InfantryAutoDeploy= ; boolean, default to [General] -> InfantryAutoDeploy
Prone speed customization
In vanilla, infantry has hardcoded prone speed. Now you can customize it.
In rulesmd.ini:
[General]
ProneSpeed.Crawls=0.67 ; floating point value, multiplier
ProneSpeed.NoCrawls=1.5 ; floating point value, multiplier
[SOMEINFANTRY] ; InfantryType
ProneSpeed= ; floating point value, multiplier, by default, use the corresponding global value according to Crawls
Particle systems
Fire particle target coordinate adjustment when firer rotates
By default particle systems with
BehavesLike=Fireshift their target coordinates if the object that created the particle system (e.g firer of a weapon) is rotating. This behavior can now be disabled per particle system type.
In rulesmd.ini:
[SOMEPARTICLESYSTEM] ; ParticleSystemType
AdjustTargetCoordsOnRotation=true ; boolean
Particles
Customizable gas particle speed
Gas particles can now drift at a custom speed.
In rulesmd.ini:
[GASPARTICLE] ; Particle with BehavesLike=Gas
Gas.MaxDriftSpeed=2 ; integer (TS default is 5)
Projectiles
Airburst & Splits
AirburstWeaponlogic has been reimplemented and thus there are several additions & changes to it.Splitscan be set to true to use projectile splitting logic from Firestorm, with the number of split projectiles defined byCluster.RetargetAccuracydefines the probability that the splitted projectiles head to the same target as the original projectile.RetargetSelfdetermines if it is possible for the splitted projectiles to aim at the firer of the original projectile.RetargetSelf.Probabilityis the probability that if the original firer is chosen as a target, it is kept as the target instead of rerolled to another.
Splits.TargetingDistanceis the distance in cells that any potential target has to be within from the original target coordinates to be eligible for targeting by the splitted projectiles.Splits.TargetCellRangeis the distance in whole cells from the original target cell from which the splitted projectiles can pick new target cells if not enough TechnoType targets were found nearby.Splits.UseWeaponTargeting, if set to true, enables weapon targeting filter for when checking targets for splitted projectiles. Target’sLegalTargetsetting, WarheadVersesagainstArmoras well asAirburstWeaponweapon targeting filters & AttachEffect filters will be checked.Do note that this overrides checking Warhead for
AffectsAllies/Owner/Enemiesfor targeting. You can useCanTargetHousesonAirburstWeaponto achieve similar behaviour, however.
Behaviour for if
Airburstis set to true can also be customized.AirburstSpreadis the distance in cells that the effect covers, with each cell in range being targeted byAirburstWeaponby default.Airburst.UseCluster, if set to true, makes it so that only number of cells in the affected area dictated byClusterwill be affected, instead of all of them.If
Airburst.RandomClustersis set to true, the cells affected will be picked by random. Otherwise they will be evenly spaced (counting from center to edges of affected area).
Airburst.TargetAsSourcecan be used to override source or ‘firing’ coordinate to match that of the intended target instead of projectile’s current position.If
Airburst.TargetAsSource.SkipHeightis also set, then projectile’s current height will be used instead of target’s height still.
AroundTargetcontrols whether or not targets for projectiles created byAirburstorSplitsare checked for in area around the original projectile’s intended target, or where the original projectile detonated. Defaults to value ofSplits.AirburstWeapon.ApplyFirepowerMultdetermines whether or not firepower modifiers from the firer of the original projectile are applied on the projectiles created fromAirburstWeapon.AirburstWeapon.SourceScatterMinandAirburstWeapon.SourceScatterMaxcan be used to scatter the source or ‘firing’ coordinate around the original coordinate.
In rulesmd.ini:
[SOMEPROJECTILE] ; Projectile
Splits= ; boolean
RetargetAccuracy=0.0 ; floating point value, percents or absolute (0.0-1.0)
RetargetSelf=true ; boolean
RetargetSelf.Probability=0.5 ; floating point value, percents or absolute (0.0-1.0)
Splits.TargetingDistance=5.0 ; floating point value, distance in cells
Splits.TargetCellRange=3 ; integer, cell offset
Splits.UseWeaponTargeting=false ; boolean
AirburstSpread=1.5 ; floating point value, distance in cells
Airburst.UseCluster=false ; boolean
Airburst.RandomClusters=false ; boolean
Airburst.TargetAsSource=false ; boolean
Airburst.TargetAsSource.SkipHeight=false ; boolean
AroundTarget= ; boolean
AirburstWeapon.ApplyFirepowerMult=false ; boolean
AirburstWeapon.SourceScatterMin=0.0 ; floating point value, distance in cells
AirburstWeapon.SourceScatterMax=0.0 ; floating point value, distance in cells
Note
Splits, AirburstSpread, RetargetAccuracy, RetargetSelf and AroundTarget, beyond the other additions, should function similarly to the equivalent features introduced by Ares and take precedence over them if Phobos is used together with Ares.
Cluster scatter distance customization
ClusterScatter.MinandClusterScatter.Maxcan be used to set minimum and maximum distance, respectively, in cells from the original detonation coordinate any additional detonations ifClusteris set to value higher than 1 can appear at.
In rulesmd.ini:
[SOMEPROJECTILE] ; Projectile
ClusterScatter.Min=1.0 ; floating point value, distance in cells
ClusterScatter.Max=2.0 ; floating point value, distance in cells
Customizable projectile gravity
You can now specify individual projectile gravity.
Setting
Gravity=0is not recommended as it will cause the projectile to fly backwards and be unable to hit the target which is not at the same height. We suggest to useStraightTrajectory instead. See here.
In rulesmd.ini:
[SOMEPROJECTILE] ; Projectile
Gravity=6.0 ; floating point value
Customizing initial facing behavior
Previously projectiles that had
Voxel=trueimages were hardcoded to have downwards initial trajectory. This behavior can now be toggled on for other types of projectiles or disabled for voxel projectiles. In addition to defaulting totrueforVoxel=trueprojectiles, it also now defaults to true for anyVertical=trueprojectile.
In rulesmd.ini:
[SOMEPROJECTILE] ; Projectile
VerticalInitialFacing= ; boolean
FlakScatter distance customization
By default
FlakScatter=truemakesInviso=trueprojectiles scatter within a distance range calculated as[Minimum * 2, Maximum * 2]in cells, where the Minimum is 0 and Maximum is[CombatDamage] -> BallisticScatter, resulting in a range of0to2 * BallisticScattercells. This behavior can now be customized usingBallisticScatter.Minto set the Minimum value andBallisticScatter.Maxto set the Maximum value. If not set, the default values are used. When estimating the actual scatter range, remember that the original*2multiplier mechanism still applies.
In rulesmd.ini:
[SOMEPROJECTILE] ; Projectile
BallisticScatter.Min= ; floating point value, distance in cells
BallisticScatter.Max= ; floating point value, distance in cells
Shrapnel enhancements
Shrapnel appearing against ground & buildings in Project Phantom
ShrapnelWeaponcan now be triggered against ground & buildings viaShrapnel.AffectsGroundandShrapnel.AffectsBuildings.Setting
Shrapnel.UseWeaponTargetingnow allows weapon target filtering to be enabled forShrapnelWeapon. Target’sLegalTargetsetting, WarheadVersesagainstArmoras well asShrapnelWeaponweapon targeting filters & AttachEffect filters will be checked.Do note that this overrides the normal check of only allowing shrapnels to hit non-allied objects. Use
CanTargetHouses=enemiesto manually enable this behaviour again.
In rulesmd.ini:
[SOMEPROJECTILE] ; Projectile
Shrapnel.AffectsGround=false ; boolean
Shrapnel.AffectsBuildings=false ; boolean
Shrapnel.UseWeaponTargeting=false ; boolean
Technos
Airstrike flare visual customizations
It is now possible to customize color of airstrike flare tint on target on the TechnoType calling in the airstrike as well as customize the color of the line drawn to target.
LaserTargetColorcan be used to set the index of color from[ColorAdd].AirstrikeLineColorsets the color of the line and dot drawn from firer to target.
In rulesmd.ini:
[AudioVisual]
AirstrikeLineColor=255,0,0 ; integer - Red,Green,Blue
[SOMETECHNO] ; TechnoType
LaserTargetColor= ; integer - [ColorAdd] index, default to [AudioVisual] -> LaserTargetColor
AirstrikeLineColor= ; integer - Red,Green,Blue, default to [AudioVisual] -> AirstrikeLineColor
Airstrike target eligibility
By default whether or not a building can be targeted by airstrikes (
Airstrike=trueWarhead) depends on value ofCanC4, which also affects other things. This can now be changed independently by settingAllowAirstrike. If not set, defaults to value ofCanC4. For non-building targets, the default value is true.AirstrikeTargetsdetermines what types of targets are valid airstrike targets for this Warhead.The airstrike aircraft will now aim at the target itself rather than the cell beneath its feet, therefore it is possible to properly designate air strikes against non-building targets.
In rulesmd.ini:
[SOMETECHNO] ; TechnoType
AllowAirstrike= ; boolean
[SOMEWARHEAD] ; WarheadType
AirstrikeTargets=buildings ; List of Affected Target Enumeration (none|infantry|units|buildings|all)
Alternate FLH customizations
AlternateFLH.OnTurretcan be used to customize whether or notAlternateFLHused forOpenToppedtransport firing coordinates, multiple mind control link offsets etc. is calculated relative to the unit’s turret if available or body.AlternateFLH.ApplyVehiclecan be used to customize whether or not a transport applies itsAlternateFLHto passengers of the VehicleType, who by default use their own FLH, as opposed to passengers of the InfantryType who adhere toAlternateFLH.
In artmd.ini:
[SOMETECHNO] ; TechnoType
AlternateFLH.OnTurret=true ; boolean
AlternateFLH.ApplyVehicle=false ; boolean
Building-provided self-healing customization
It is now possible to set a global cap for the effects of
InfantryGainSelfHealandUnitsGainSelfHealby settingInfantryGainSelfHealCap&UnitsGainSelfHealCapunder[General], respectively.Whether or not
MultiplayPassive=truehouses benefit from these effects can be controlled viaGainSelfHealAllowMultiplayPassive.In campaign, whether or not these effects for player can be benefited by houses with
PlayerControl=truecan be controlled viaGainSelfHealFromPlayerControl.Whether or not these effects can be benefited by allied houses can be controlled via
GainSelfHealFromAllies.It is also possible to change the pip frames displayed from
pips.shpindividually for infantry, units and buildings by setting the frames for infantry & unit self-healing onPips.SelfHeal.(Infantry/Units/Buildings)under[AudioVisual], respectively.Pips.SelfHeal.(Infantry/Units/Buildings).Offsetcan be used to customize the pixel offsets for the displayed pips, individually for infantry, units and buildings.
Whether or not a TechnoType benefits from effects of
InfantryGainSelfHealorUnitsGainSelfHealbuildings or neither can now be controlled by settingSelfHealGainType.If
SelfHealGainTypeis not set, InfantryTypes and VehicleTypes withOrganicset to true gain self-healing fromInfantryGainSelfHeal, other VehicleTypes fromUnitsGainSelfHealand AircraftTypes & BuildingTypes never gain self-healing.
In rulesmd.ini:
[General]
InfantryGainSelfHealCap= ; integer, maximum amount of InfantryGainSelfHeal that can be in effect at once, must be 1 or higher
UnitsGainSelfHealCap= ; integer, maximum amount of UnitsGainSelfHeal that can be in effect at once, must be 1 or higher
GainSelfHealAllowMultiplayPassive=true ; boolean
GainSelfHealFromPlayerControl=false ; boolean
GainSelfHealFromAllies=false ; boolean
[AudioVisual]
Pips.SelfHeal.Infantry=13,20 ; integer, frames of pips.shp for infantry & unit-self healing pips, respectively
Pips.SelfHeal.Units=13,20 ; integer, frames of pips.shp for infantry & unit-self healing pips, respectively
Pips.SelfHeal.Buildings=13,20 ; integer, frames of pips.shp for infantry & unit-self healing pips, respectively
Pips.SelfHeal.Infantry.Offset=25,-35 ; X,Y, pixels relative to default
Pips.SelfHeal.Units.Offset=33,-32 ; X,Y, pixels relative to default
Pips.SelfHeal.Buildings.Offset=15,10 ; X,Y, pixels relative to default
[SOMETECHNO] ; TechnoType
SelfHealGainType= ; Self-Heal Gain Type Enumeration (noheal|infantry|units)
Customizable ChronoSphere teleport delays for units
It is now possible to customize (globally and per TechnoType) the warp-in delay for units teleporting through
Type=ChronoSphere/WarpSuperweapon, both before and after the jump.
In rulesmd.ini:
[General]
ChronoSphereDelay=0 ; integer, game frames
ChronoSpherePreDelay=60 ; integer, game frames
[SOMETECHNO] ; TechnoType
ChronoSphereDelay= ; integer, game frames, default to [General] -> ChronoSphereDelay
ChronoSpherePreDelay= ; integer, game frames, default to [General] -> ChronoSpherePreDelay
Warning
Due to technical constraints, these settings do not apply to buildings teleported by Ares’ customizable ChronoSphere SW. They only have a pre-teleport delay equal to [General] -> ChronoDelay.
Customizable harvester ore gathering animation
Custom ore gathering anims in Project Phantom
You can now specify which anim should be drawn when a harvester of specified type is gathering specified type of ore.
In rulesmd.ini:
[SOMETECHNO] ; TechnoType
OreGathering.Anims= ; List of AnimationTypes
OreGathering.FramesPerDir=15 ; List of integers
OreGathering.Tiberiums=0 ; List of Tiberium IDs
Customizable target evaluation map zone check behaviour
By default, any non-AircraftType units seeking targets via ScriptType team mission (action)
0 Attack Target Typeor any attack team missions introduced in Phobos check if the potential target is in same map zone as the attacking unit to be able to pick it as a target. This can now be customized to allow objects from any map zone with no constraints (TargetZoneScanType=any) or only if they are within weapon range (TargetZoneScanType=inrange).
In rulesmd.ini:
[SOMETECHNO] ; TechnoType
TargetZoneScanType=same ; target zone scan enumeration (same|any|inrange)
Customizable Teleport/Chrono Locomotor settings per TechnoType
Chrono Legionnaire and Ronco using different teleportation settings in YR: New War
You can now specify Teleport/Chrono Locomotor settings per TechnoType to override default rules values. Unfilled values default to values in
[General].Applicable to Techno that have Teleport/Chrono Locomotor attached, or being chronowarped by chronosphere.
Chronoshift.WarpOutandChronoshift.WarpInwill overrideWarpOutandWarpInrespectively when the techno is being chronowarped by chronosphere, if set.
WarpAwayspecify the anim when the techno is being erased byTemporal=yeswarhead. Will override Ares’Temporal.WarpAwaytag on warhead, if set.If more than one animation is listed in
WarpOut,WarpInorWarpAway, a random one is selected.
In rulesmd.ini:
[SOMETECHNO] ; TechnoType
WarpOut= ; List of AnimationTypes (played when Techno warping out), default to [General] -> WarpOut
WarpIn= ; List of AnimationTypes (played when Techno warping in), default to [General] -> WarpIn
Chronoshift.WarpOut= ; List of AnimationTypes (played when Techno warping out by chronosphere), default to [TechnoType] -> WarpOut
Chronoshift.WarpIn= ; List of AnimationTypes (played when Techno warping in by chronosphere), default to [TechnoType] -> WarpIn
WarpAway= ; List of AnimationTypes (played when Techno being erased by Temporal=yes warhead), default to [General] -> WarpAway
ChronoTrigger= ; boolean, if yes then delay varies by distance, if no it is a constant
ChronoDistanceFactor= ; integer, amount to divide the distance to destination by to get the warped out delay
ChronoMinimumDelay= ; integer, the minimum delay for teleporting, no matter how short the distance
ChronoRangeMinimum= ; integer, can be used to set a small range within which the delay is constant
ChronoDelay= ; integer, delay after teleport for chronosphere
Customizable veterancy insignias
You can now customize veterancy insignia of TechnoTypes.
Insignia.(Rookie|Veteran|Elite)can be used to set a custom insignia file, optionally for each veterancy stage. Like the original / default file,pips.shp, they are drawn usingpalette.palas palette.InsigniaFrame(.Rookie|Veteran|Elite)can be used to set (zero-based) frame index of the insignia to display, optionally for each veterancy stage. Using -1 uses the default setting. Default settings are -1 (none) for rookie, 14 for veteran and 15 for elite.A shorthand
InsigniaFramescan be used to list them in order from rookie, veteran and elite instead as well.InsigniaFrame(.Rookie|Veteran|Elite)takes priority over this.These settings will be overriden by the properties set in InsigniaType, if
InsigniaTypeis set.
Normal insignia can be overridden for specific weapon modes of
Gunner=trueunits by settingInsignia(.Frame/.Frames).WeaponNwhereNstands for 1-based weapon mode index. If not set, defaults to non-mode specific insignia settings.These settings will be overriden by the properties set in InsigniaType, if
InsigniaType.WeaponNis set.
Normal insignia can be overridden when its current passenger size reaches a certain amount by setting
Insignia(.Frame/.Frames).PassengersNwhereNstands for the current passenger size amount (from 0 toPassengersof the transport). If not set, defaults to non-passenger specific insignia settings. Will be overridden by weapon mode insignia settings, if set.These settings will be overriden by the properties set in InsigniaType, if
InsigniaType.PassengersNis set.
Insignia.ShowEnemycontrols whether or not the insignia is shown to enemy players.You can make insignias appear only on selected units using
DrawInsignia.OnlyOnSelected.Position for insignias can be adjusted by setting
DrawInsignia.AdjustPos.Infantryfor infantry,DrawInsignia.AdjustPos.Buildingsfor buildings, andDrawInsignia.AdjustPos.Unitsfor others.DrawInsignia.AdjustPos.BuildingsAnchorcan be set to an anchor point to anchor the insignia position relative to the building’s selection bracket. By default the insignia position is not anchored to the selection bracket.DrawInsignia.UsePixelSelectionBracketDeltacan be set to use techno’sPixelSelectionBracketDeltato additionally adjust insignias vertically.
In rulesmd.ini:
[General]
EnemyInsignia=true ; boolean
[AudioVisual]
DrawInsignia.OnlyOnSelected=false ; boolean
DrawInsignia.UsePixelSelectionBracketDelta=false ; boolean
DrawInsignia.AdjustPos.Infantry=5,2 ; X,Y, position offset from default
DrawInsignia.AdjustPos.Units=10,6 ; X,Y, position offset from default
DrawInsignia.AdjustPos.Buildings=10,6 ; X,Y, position offset from default
DrawInsignia.AdjustPos.BuildingsAnchor= ; Hexagon vertex enumeration (top|lefttop|leftbottom|bottom|rightbottom|righttop)
[SOMETECHNO] ; TechnoType
Insignia= ; filename - excluding the .shp extension
Insignia.Rookie= ; filename - excluding the .shp extension
Insignia.Veteran= ; filename - excluding the .shp extension
Insignia.Elite= ; filename - excluding the .shp extension
InsigniaFrame=-1 ; int, frame of insignia shp (zero-based) or -1 for default
InsigniaFrame.Rookie=-1 ; int, frame of insignia shp (zero-based) or -1 for default
InsigniaFrame.Veteran=-1 ; int, frame of insignia shp (zero-based) or -1 for default
InsigniaFrame.Elite=-1 ; int, frame of insignia shp (zero-based) or -1 for default
InsigniaFrames=-1,-1,-1 ; int, frames of insignia shp (zero-based) or -1 for default
Insignia.WeaponN= ; filename - excluding the .shp extension
Insignia.WeaponN.Rookie= ; filename - excluding the .shp extension
Insignia.WeaponN.Veteran= ; filename - excluding the .shp extension
Insignia.WeaponN.Elite= ; filename - excluding the .shp extension
InsigniaFrame.WeaponN=-1 ; int, frame of insignia shp (zero-based) or -1 for default
InsigniaFrame.WeaponN.Rookie=-1 ; int, frame of insignia shp (zero-based) or -1 for default
InsigniaFrame.WeaponN.Veteran=-1 ; int, frame of insignia shp (zero-based) or -1 for default
InsigniaFrame.WeaponN.Elite=-1 ; int, frame of insignia shp (zero-based) or -1 for default
InsigniaFrames.WeaponN=-1,-1,-1 ; int, frames of insignia shp (zero-based) or -1 for default
Insignia.PassengersN= ; filename - excluding the .shp extension
Insignia.PassengersN.Rookie= ; filename - excluding the .shp extension
Insignia.PassengersN.Veteran= ; filename - excluding the .shp extension
Insignia.PassengersN.Elite= ; filename - excluding the .shp extension
InsigniaFrame.PassengersN=-1 ; int, frame of insignia shp (zero-based) or -1 for default
InsigniaFrame.PassengersN.Rookie=-1 ; int, frame of insignia shp (zero-based) or -1 for default
InsigniaFrame.PassengersN.Veteran=-1 ; int, frame of insignia shp (zero-based) or -1 for default
InsigniaFrame.PassengersN.Elite=-1 ; int, frame of insignia shp (zero-based) or -1 for default
InsigniaFrames.PassengersN=-1,-1,-1 ; int, frames of insignia shp (zero-based) or -1 for default
Insignia.ShowEnemy= ; boolean, defaults to [General] -> EnemyInsignia
Note
Insignia customization besides the InsigniaFrames shorthand should function similarly to the equivalent feature introduced by Ares and takes precedence over it if Phobos is used together with Ares.
Customizable wake anim
You can now specify the
Wakeanim per TechnoType to override default rules value.Wake.GrappleandWake.Sinkingcan be used to further customize wake anim when the techno is being parasited or sunken.
In rulesmd.ini:
[SOMETECHNO] ; TechnoType
Wake= ; Anim (played when Techno moving on the water), default to [General] -> Wake
Wake.Grapple= ; Anim (played when Techno being parasited on the water), defaults to [TechnoType] -> Wake
Wake.Sinking= ; Anim (played when Techno sinking), defaults to [TechnoType] -> Wake
Customize bridge falling down damage
Use different fall damage depending on whether it lands in water in Zero Boundary by @Stormsulfur
Now you can customize the damage a unit receives when it falls from a bridge.
FallingDownDamagecustomizes the damage a unit receives at the end of a fall. It can be a percentage or an integer.FallingDownDamage.Watercustomizes the damage a unit receives when it falls onto the water. Defaults toFallingDownDamage.If it is a negative percentage, corresponding damage will be dealt based on the current health of the unit.
In rulesmd.ini:
[SOMETECHNO] ; TechnoType
FallingDownDamage= ; integer / percentage
FallingDownDamage.Water= ; integer / percentage
Damaged speed customization
In vanilla, units using drive/ship loco will has hardcoded speed multiplier when damaged. Now you can customize it.
The max valuebale value is 1.0, you cannot make unit get faster on yellow condition by it.
In rulesmd.ini:
[General]
DamagedSpeed=0.75 ; floating point value, multiplier
[SOMETECHNO] ; TechnoType
DamagedSpeed= ; floating point value, multiplier
Debris voxel animations limitation
Now, the original
DebrisMaximumscan be used in conjunction with newDebrisMinimumsto limit the quantity ofDebrisTypeswhenDebrisTypes.Limitis enabled.The default value of
DebrisTypes.Limitis whether the number ofDebrisMaximumsis greater than (not equal to) 1 (for compatibility reasons).
In rulesmd.ini:
[SOMETECHNO] ; TechnoType
DebrisTypes.Limit= ; boolean
DebrisMaximums= ; List of integers
DebrisMinimums= ; List of integers
Hint
How to generate DebrisTypes in the game:
Generate the total number of debris through
MaxDebrisandMinDebrisfirst.Traverse
DebrisTypesand limit the quantity range throughDebrisMaximumsandDebrisMinimums.When the number of generated debris will exceeds the total number, limit the quantity and end the traversal.
When the number of debris generated after a single traversal is not enough to exceed the total number, it will end if
DebrisTypes.Limitis enabled, otherwise the traversal will restart like vanilla game do.
DropPod
DropPod properties can now be customized on a per-TechnoType (non-building) basis.
If you want to attach the trailer animation to the pod, set
DropPod.Trailer.Attachedto yes.By default LaserTrails that are attached to the infantry will not be drawn if it’s on DropPod.
If you really want to use it, set
DropPodOnlyon the LaserTrail’s type entry in art.
If you want
DropPod.Weaponto be fired only upon hard landing, setDropPod.Weapon.HitLandOnlyto true.The landing speed is not smaller than it’s current height /10 + 2 for unknown reason. A small
DropPod.Speedvalue therefore results in exponential deceleration.
Note
Due to technical constraints DropPod.AirImage is only drawn for InfantryTypes (as the DropPod is the infantry itself with its image swapped). This may change in future.
In rulesmd.ini:
[SOMETECHNO] ; TechnoType
DropPod.Angle= ; double, default to [General] -> DropPodAngle, measured in radians
DropPod.AtmosphereEntry= ; anim, default to [AudioVisual] -> AtmosphereEntry
DropPod.GroundAnim= ; 2 anims, default to [General] -> DropPod
DropPod.AirImage= ; SHP file, the pod's shape, default to POD
DropPod.Height= ; int, default to [General] -> DropPodHeight
DropPod.Puff= ; anim, default to [AudioVisual] -> DropPodPuff
DropPod.Speed= ; int, default to [General] -> DropPodSpeed
DropPod.Trailer= ; anim, default to [General] -> DropPodTrailer, which by default is SMOKEY
DropPod.Trailer.Attached= ; boolean, default to no
DropPod.Trailer.SpawnDelay= ; int, number of frames between each spawn of DropPod.Trailer, default to 6
DropPod.Weapon= ; weapon, default to [General] -> DropPodWeapon
DropPod.Weapon.HitLandOnly= ; boolean, default to no
Note
[General] -> DropPodTrailer is Ares feature.
Exploding object customizations
By default
Explodes=trueTechnoTypes have all of their passengers killed when they are destroyed. This behaviour can now be disabled by settingExplodes.KillPassengers=false.BuildingTypes with
Explodes=truecan by default explode even when they are still being built or sold. This can be disabled by settingExplodes.DuringBuildupto false. This causes them to behave as ifExplodeswas set to false while being built up or sold.
In rulesmd.ini:
[SOMETECHNO] ; TechnoType
Explodes.KillPassengers=true ; boolean
[SOMEBUILDING] ; BuildingType
Explodes.DuringBuildup=true ; boolean
Forbid parallel AI queues
You can now set if specific types of factories do not have AI production cloning issue instead of Ares’ indiscriminate behavior of
AllowParallelAIQueues=no.If
AllowParallelAIQueues=no(Ares feature) is set, the tags have no effect.
You can also exclude specific TechnoTypes from being built in parallel by AI by setting
ForbidParallelAIQueuesto true on a TechnoType.
In rulesmd.ini:
[GlobalControls]
AllowParallelAIQueues=yes ; must be set yes/true unless you don't use Ares
ForbidParallelAIQueues.Infantry=no ; boolean
ForbidParallelAIQueues.Vehicle=no ; boolean
ForbidParallelAIQueues.Navy=no ; boolean
ForbidParallelAIQueues.Aircraft=no ; boolean
ForbidParallelAIQueues.Building=no ; boolean
[SOMETECHNO] ; TechnoType
ForbidParallelAIQueues=false ; boolean
Force techno targeting in distributed frames to improve performance
When you create many technos in a same frame (i.e. starting the game with a campaign map that initially has a large number of technos), they will always scan for targets in a synchronous period, causing game lag. Increasing targeting delay alone will not make things better, as their targeting is still synchronized.
It is now possible to force them to seek targets separately. If
DistributeTargetingFrame=trueis set, techno’s targeting timer will be initiated with a random delay, ranging in [0,15]. This can distribute their targeting timing within 15 frames, thus alleviating the above-mentioned lag.You can use
DistributeTargetingFrame.AIOnlyto make it only work for AI (Players are not likely to have so many technos.)
In rulesmd.ini:
[General]
DistributeTargetingFrame=false ; boolean
DistributeTargetingFrame.AIOnly=true ; boolean
[SOMETECHNO] ; TechnoType
DistributeTargetingFrame= ; boolean
Iron Curtain & Force Shield effects on organics customization
In vanilla game, when Iron Curtain is applied on
Organic=trueunits like squids or infantry, they could only get killed instantly byC4Warhead. This behavior is now unhardcoded and can be set withIronCurtain.EffectOnOrganicsglobally and on per-TechnoType basis withIronCurtain.Effect. Following values are respected:kill: Iron Curtain kills the organic object with a specifc warhead. This is the default value forOrganic=trueunits and infantry if not otherwise specified.invulnerable: Iron Curtain makes the organic object invulnerable like buildings and vehicles.ignore: Iron Curtain doesn’t give any effect on the organic object.
Identical controls are available for Force Shield as well.
In rulesmd.ini:
[CombatDamage]
IronCurtain.EffectOnOrganics=kill ; Iron Curtain effect Enumeration (kill | invulnerable | ignore)
IronCurtain.KillOrganicsWarhead= ; WarheadType, default to [CombatDamage] -> C4Warhead
ForceShield.EffectOnOrganics=kill ; Iron Curtain effect Enumeration (kill | invulnerable | ignore)
ForceShield.KillOrganicsWarhead= ; WarheadType, default to [CombatDamage] -> C4Warhead
[SOMETECHNO] ; TechnoType with Organic=true
IronCurtain.Effect= ; IronCurtain effect Enumeration (kill | invulnerable | ignore)
IronCurtain.KillWarhead= ; WarheadType, default to [CombatDamage] -> IronCurtain.KillOrganicsWarhead
ForceShield.Effect= ; IronCurtain effect Enumeration (kill | invulnerable | ignore)
ForceShield.KillWarhead= ; WarheadType, default to [CombatDamage] -> ForceShield.KillOrganicsWarhead
Jumpjet rotating on crashing toggle
Jumpjet that is going to crash starts to change its facing uncontrollably, this can now be turned off.
In rulesmd.ini:
[SOMETECHNO] ; TechnoType
JumpjetRotateOnCrash=true ; boolean
Warning
This may subject to further changes.
Kill spawns on low power
Powered=yesstructures that spawn aircraft like Aircraft Carriers will stop targeting the enemy if low power.Spawned aircraft self-destruct if they are flying.
In rulesmd.ini:
[SOMESTRUCTURE] ; BuildingType
Powered.KillSpawns=false ; boolean
PipScale pip customizations
It is now possible to change the size of pips (or more accurately the pixel increment to the next pip drawn) displayed on
PipScale.Pips.Generic.(Buildings.)Sizeis for non-ammo pips on non-building TechnoTypes / buildings, accordingly, andPips.Ammo.(Buildings.)Sizeis in turn for ammo pips, split similarly between non-building technos and buildings.Ammo pip size can also be overridden on per TechnoType-basis using
AmmoPipSize.
Ammo pip frames can now also be customized.
AmmoPipFrameandEmptyAmmoPipFrameare frames (zero-based) ofpips2.shpused for ammo pip and empty ammo pip (this is not set by default) for whenPipWrap=0(this is the default).AmmoPipWrapStartFrameis used as start frame (zero-based, frompips2.shp) for whenPipWrapis above 0. The start frame is the empty frame and up toAmmodivided byPipWrapframes after it are used for the different reload stages.AmmoPipOffsetcan be used to shift the starting position of ammo pips.
Pips for TechnoTypes with
Spawnscan now also be customized.ShowSpawnsPipsdetermines whether or not these pips are shown at all, as they are independent fromPipScalesetting.SpawnsPipFrameandEmptySpawnsPipFrameare frames (zero-based) ofpips.shp(for buildings) orpips2.shp(for others) used for a spawnee pip and empty spawnee pip, respectively.SpawnsPipSizedetermines the pixel increment to the next pip drawn. Defaults to[AudioVisual] -> Pips.Generic.(Buildings.)Sizeif not set.SpawnsPipoffsetcan be used to shift the starting position of spawnee pips.
Pips for
Storagecan now also be customized via new keys in[AudioVisual].Pips.Tiberiums.Framescan be used to list frames (zero-based) ofpips.shp(for buildings) orpips2.shp(for others) used for tiberium types, in the listed order corresponding to tiberium type index. Defaults to 5 for tiberium type index 1, otherwise 2.Pips.Tiberiums.EmptyFramecan be used to set the frame for empty slots, defaults to 0.
Pips.Tiberiums.DisplayOrdercontrols in which order the tiberium type pips are displayed, takes a list of tiberium type indices. Any tiberium type not listed will be displayed in sequential order after the listed ones.Pips.Tiberiums.WeedFramecontrols which frame is displayed on Technos withWeeder=yes, takes a (zero-based) index of a frame inpips.shp(for buildings) orpips2.shp(for others). Defaults to 1.Pips.Tiberiums.WeedEmptyFramecan be used to set the frame for empty weed slots, defaults to 0.
In rulesmd.ini:
[AudioVisual]
Pips.Generic.Size=4,0 ; X,Y, increment in pixels to next pip
Pips.Generic.Buildings.Size=4,2 ; X,Y, increment in pixels to next pip
Pips.Ammo.Size=4,0 ; X,Y, increment in pixels to next pip
Pips.Ammo.Buildings.Size=4,2 ; X,Y, increment in pixels to next pip
Pips.Tiberiums.EmptyFrame=0 ; integer, frame of pips.shp (buildings) or pips2.shp (others) (zero-based)
Pips.Tiberiums.Frames=2,5,2,2 ; List of integers, frames of pips.shp (buildings) or pips2.shp (others) (zero-based)
Pips.Tiberiums.DisplayOrder=0,2,3,1 ; List of integers, tiberium type indices
Pips.Tiberiums.WeedEmptyFrame=0 ; integer, frame of pips.shp (buildings) or pips2.shp (others) (zero-based)
Pips.Tiberiums.WeedFrame=1 ; integer, frame of pips.shp (buildings) or pips2.shp (others) (zero-based)
[SOMETECHNO] ; TechnoType
AmmoPipFrame=13 ; integer, frame of pips2.shp (zero-based)
EmptyAmmoPipFrame=-1 ; integer, frame of pips2.shp (zero-based)
AmmoPipWrapStartFrame=14 ; integer, frame of pips2.shp (zero-based)
AmmoPipSize= ; X,Y, increment in pixels to next pip
AmmoPipOffset=0,0 ; X,Y, position offset from default
ShowSpawnsPips=true ; boolean
SpawnsPipFrame=1 ; integer, frame of pips.shp (buildings) or pips2.shp (others) (zero-based)
EmptySpawnsPipFrame=0 ; integer, frame of pips.shp (buildings) or pips2.shp (others) (zero-based)
SpawnsPipSize= ; X,Y, increment in pixels to next pip
SpawnsPipOffset=0,0 ; X,Y, position offset from default
Power drain for units
Infantry, vehicles and aircraft can now drain or provide
PowerifUnitPowerDrain=trueis set.
In rulesmd.ini:
[General]
UnitPowerDrain=false ; boolean
[SOMETECHNO] ; TechnoType
Power=0 ; integer, positive means output, negative means drain
RadarInvisible for non-enemy house
In vanilla,
RadarInvisibleis ignored if the techno is allied with the current player. Now you can change this behavior.
In rulesmd.ini:
[SOMETECHNO] ; TechnoType
RadarInvisibleToHouse= ; Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all), default to enemy if RadarInvisible=true, none otherwise
Subterranean unit travel height and speed
It is now possible to control the height at which units with subterranean (Tunnel)
Locomotortravel, globally or per TechnoType.Subterranean movement speed is now also customizable, both globally and per TechnoType. If per-TechnoType value is negative, global value is used. This does not affect the speed at which the unit moves vertically when burrowing which is determined by
Speedmultiplied by[General] -> TunnelSpeed.
In rulesmd.ini:
[General]
SubterraneanHeight=-256 ; integer, height in leptons (1/256th of a cell)
SubterraneanSpeed=19 ; floating point value
[SOMETECHNO] ; TechnoType
SubterraneanHeight= ; integer, height in leptons (1/256th of a cell)
SubterraneanSpeed=-1 ; floating point value
Warning
SubterraneanHeight expects negative values to be used and may behave erratically if set to above -50.
Target scanning delay optimization
In vanilla, the game used
NormalTargetingDelayandGuardAreaTargetingDelayto globally control the target searching intervals. Increasing these values would make units stupid, while decreasing them would cause game lag.Now, you can define them per techno, also allowing different values for AI and players. The default values are the same as those originally defined by the vanilla flags.
You can also specific this delay for attack move mission. The default value is
NormalTargetingDelay.
In rulesmd.ini:
[General]
AINormalTargetingDelay= ; integer, game frames
PlayerNormalTargetingDelay= ; integer, game frames
AIGuardAreaTargetingDelay= ; integer, game frames
PlayerGuardAreaTargetingDelay= ; integer, game frames
AIAttackMoveTargetingDelay= ; integer, game frames
PlayerAttackMoveTargetingDelay= ; integer, game frames
[SOMETECHNO] ; TechnoType
AINormalTargetingDelay= ; integer, game frames
PlayerNormalTargetingDelay= ; integer, game frames
AIGuardAreaTargetingDelay= ; integer, game frames
PlayerGuardAreaTargetingDelay= ; integer, game frames
AIAttackMoveTargetingDelay= ; integer, game frames
PlayerAttackMoveTargetingDelay= ; integer, game frames
Voxel body multi-section shadows
UH-0 helicopter with dynamic propeller and its shadow in Bellum Æternum
It is also now possible for vehicles and aircraft to display shadows for multiple sections of the voxel body at once, instead of just one section specified by
ShadowIndex, by specifying the section indices inShadowIndices(which defaults toShadowIndex) in unit’sartmd.inientry.ShadowIndex.FrameandShadowIndices.Framecan be used to customize which frame of the HVA animation for the section fromShadowIndexandShadowIndicesis used to display the shadow, respectively. -1 is special value which means currently shown frame is used, andShadowIndices.Framedefaults to this.
In artmd.ini:
[SOMETECHNO] ; TechnoType
ShadowIndices= ; List of integers (voxel section indices)
ShadowIndex.Frame=0 ; integer (HVA animation frame index)
ShadowIndices.Frame= ; List of integers (HVA animation frame indices)
Voxel shadow scaling in air
It is now possible to adjust how voxel air units (
VehicleType&AircraftType) shadows scale in air. By default the shadows scale byAirShadowBaseScale(defaults to 0.5) amount if unit isConsideredAircraft=true.If
HeightShadowScaling=true, the shadow is scaled by amount that is determined by following formula:Max(AirShadowBaseScale ^ (currentHeight / ShadowSizeCharacteristicHeight), HeightShadowScaling.MinScale), wherecurrentHeightis unit’s current height in leptons,ShadowSizeCharacteristicHeightoverrideable value that defaults to the maximum cruise height (JumpjetHeight,FlightLeveletc) andHeightShadowScaling.MinScalesets a floor for the scale.
In rulesmd.ini:
[AudioVisual]
AirShadowBaseScale=0.5 ; floating point value
HeightShadowScaling=false ; boolean
HeightShadowScaling.MinScale=0.0 ; floating point value
[SOMETECHNO] ; TechnoType
ShadowSizeCharacteristicHeight= ; integer, height in leptons
Allow techno type considered as other type when recruiting techno for teams
It is now possible to make techno type considered as other type when recruiting techno for teams, both for AI team recruitment and
Create Teamaction.Only affect techno that’s presented on the map. Cannot make AI produce this type of techno if it doesn’t have any.
In rulesmd.ini:
[SOMETECHNO] ; TechnoType
TeamMember.ConsideredAs= ; List of TechnoTypes
Terrains
Animated TerrainTypes
Animated trees used in Ion Shock
By default
IsAnimated,AnimationRateandAnimationProbabilityonly work on TerrainTypes withSpawnsTiberiumset to true. This restriction has now been lifted.Length of the animation can now be customized by setting
AnimationLengthas well, defaulting to half (or quarter if damaged frames are enabled) the number of frames in TerrainType’s image.
In rulesmd.ini:
[SOMETERRAINTYPE] ; TerrainType
AnimationLength= ; integer, number of frames
Custom palette
You can now specify custom palette for TerrainTypes in similar manner as TechnoTypes can.
In artmd.ini:
[SOMETERRAINTYPE] ; TerrainType
Palette= ; filename - excluding .pal extension and three-character theater-specific suffix
Note
This palette behaves like an object palette and does not use tint etc. that have been applied to the tile the TerrainType resides on like a TerrainType using tile palette would.
Customizable ore spawners
Different ore spawners in Rise of the East
You can now specify which type of ore certain TerrainType would generate.
It’s also now possible to specify a range value for an ore generation area different compared to standard 3x3 rectangle. Ore will be uniformly distributed across all affected cells in a spread range.
You can specify which ore growth stage will be spawned and how many cells will be filled with ore per ore generation animation. Corresponding tags accept either a single integer value or two comma-separated values to allow randomized growth stages from the range (inclusive).
In rulesmd.ini:
[SOMETERRAINTYPE] ; TerrainType
SpawnsTiberium.Type=0 ; tiberium/ore type index
SpawnsTiberium.Range=1 ; integer, radius in cells
SpawnsTiberium.GrowthStage=3 ; integer - single or comma-sep. range
SpawnsTiberium.CellsPerAnim=1 ; integer - single or comma-sep. range
Damaged frames and crumbling animation
By default game shows damage frame only for TerrainTypes alive at only 1 point of health left. Because none of the original game TerrainType assets were made with this in mind, the logic is now locked behind a new key
HasDamagedFrames.Instead of showing at 1 point of HP left, TerrainTypes switch to damaged frames once their health reaches
[AudioVisual] -> ConditionYellow.Terrainpercentage of their maximum health.
In addition, TerrainTypes can now show ‘crumbling’ animation after their health has reached zero and before they are deleted from the map by setting
HasCrumblingFramesto true.Crumbling frames start from first frame after both regular & damaged frames and ends at halfway point of the frames in TerrainType’s image.
Sound event from
CrumblingSound(if set) is played when crumbling animation starts playing.Destroy animation & sound only play after crumbling animation has finished.
In rulesmd.ini:
[AudioVisual]
ConditionYellow.Terrain= ; floating-point value, default to [AudioVisual] -> ConditionYellow
[SOMETERRAINTYPE] ; TerrainType
HasDamagedFrames=false ; boolean
HasCrumblingFrames=false ; boolean
CrumblingSound= ; Sound entry
Note
The number of regular & damage frames considered for this depends on value of HasDamagedFrames and for IsAnimated TerrainTypes, AnimationLength (see Animated TerrainTypes). Exercise caution and ensure there are correct amount of frames to display.
Minimap color customization
TerrainTypes can now be made to display on minimap with different colors by setting
MinimapColor.
In rulesmd.ini:
[SOMETERRAINTYPE] ; TerrainType
MinimapColor= ; integer - Red,Green,Blue
Passable & buildable-upon TerrainTypes
TerrainTypes can now be made passable or buildable upon by setting
IsPassableorCanBeBuiltOn, respectively.Movement cursor is displayed on
IsPassableTerrainTypes unless force-firing.CanBeBuiltOn=trueterrain objects are removed when building is placed on them.
In rulesmd.ini:
[SOMETERRAINTYPE] ; TerrainType
IsPassable=false ; boolean
CanBeBuiltOn=false ; boolean
Tiberiums (ores)
Minimap color customization
Ore can now be made to display on minimap with different colors by setting
MinimapColoron Tiberiums.
In rulesmd.ini:
[SOMEORE] ; Tiberium
MinimapColor= ; integer - Red,Green,Blue
Vehicles
Allow miners do area guard
In vanilla, when miners enter area guard mission, they immediately switch to harvest mission. Now you can make them perform area guard mission normally like other technos.
We made it work only for miners controlled by the player, because this will prevent AI’s miners from going work.
If
Harvester.CanGuardArea.RequireTargetset to true, it’ll switch back to regular harvest mission when there’s no valid target within its guard range.
In rulesmd.ini:
[SOMEVEHICLE] ; VehicleType
Harvester.CanGuardArea=false ; boolean
Harvester.CanGuardArea.RequireTarget=false ; boolean
Bunker entering check dehardcode
In vanilla, vehicles entering tank bunkers are subject to a series of hardcoding restrictions, including having to have turrets, having to have weapons, and not having Hover speed types. Now you can skip these restrictions.
This needs to be used with
Bunkerable=yes.This flag only skips the static check, that is, the check on the unit type. The dynamic check (cannot be parasitized) remains unchanged.
In rulesmd.ini:
[SOMEVEHICLE] ; VehicleType
BunkerableAnyway=false ; boolean
Warning
Skipping checks with this feature doesn’t mean that vehicles and tank bunkers will interact correctly. Following the simple checks performed by the provider of this feature, bunkerability is mainly determined by Locomotor. The details about locomotors’ bunkerability can be found on ModEnc.
Custom Unit Crate Reroll Chance
It is possible to influence weighting of units given from crates (
CrateGoodie=true) viaCrateGoodie.RerollChance, which determines the chance that if this type of unit is rolled, it will reroll again for another type of unit.
In rulesmd.ini:
[SOMEVEHICLE] ; VehicleType
CrateGoodie.RerollChance=0.0 ; floating point value, percents or absolute (0.0-1.0)
Customize harvester dump amount
Now you can limit how much ore the harvester can dump out per time, like it in Tiberium Sun.
Less than or equal to 0 means no limit, it will always dump out all at one time.
In rulesmd.ini:
[General]
HarvesterDumpAmount=0.0 ; float point value
[SOMEVEHICLE] ; VehicleType
HarvesterDumpAmount= ; float point value
Customize type selection for IFV
In vanilla game, when using type selection command on IFVs, all of them will be selected regardless of their current modes, which is allowed to customize now.
WeaponGroupAsNdetermines which group the IFV is in when enablingWeaponN, where N stands for 1-based weapon mode index. IFVs in the same group will be selected together during type a selection, while not included those in different groups.TypeSelectUseIFVModedetermines whether all IFV modes will be considered as its own group by default during a type selection.If it’s set to true,
WeaponGroupAsNwill be default to N for eachWeaponN, which makes each of them become a standalone type during a type selection.If it’s set to false,
WeaponGroupAsNwill be default to 0 for all weapons, which makes type selection on IFVs work the same as before.
In rulesmd.ini:
[General]
TypeSelectUseIFVMode=false ; boolean
[SOMEVEHICLE] ; VehicleType
WeaponGroupAsN= ; string, default to N if [General] -> TypeSelectUseIFVMode=true, and 0 if false
Customizing crushing tilt and slowdown
Vehicles with
Crusher=trueandOmniCrusher=true/MovementZone=CrusherAllwere hardcoded to tilt when crushing vehicles / walls respectively. This now obeysTiltsWhenCrushesbut can be customized individually for these two scenarios usingTiltsWhenCrusher.VehiclesandTiltsWhenCrusher.Overlays, which both default toTiltsWhenCrushes.CrushForwardTiltPerFramedetermines how much the forward tilt is adjusted per frame when crushing overlays or vehicles. Defaults to -0.02 for vehicles using Ship locomotor crushing overlays, -0.050000001 for all other cases.CrushOverlayExtraForwardTiltis additional forward tilt applied after an overlay has been crushed by the vehicle.It is possible to customize the movement speed slowdown when
MovementZone=CrusherAllvehicle crushes walls by settingCrushSlowdownMultiplier.You can also disable the slowdown completely by using the flag
SkipCrushSlowdown. This is not the same asCrushSlowdownMultiplier=1.0. Used to avoid a bug where the vehicle sometimes loses speed whenAccelerates=trueandMovementZone=CrushAllare set.
In rulesmd.ini:
[SOMEVEHICLE] ; VehicleType
TiltsWhenCrushes.Vehicles= ; boolean
TiltsWhenCrushes.Overlays= ; boolean
CrushForwardTiltPerFrame= ; floating point value
CrushOverlayExtraForwardTilt=0.02 ; floating point value
CrushSlowdownMultiplier=0.2 ; floating point value
SkipCrushSlowdown=false ; boolean
Destroy animations
DestroyAnimhas been extended to work with VehicleTypes, with option to pick random animation ifDestroyAnim.Randomis set to true. These animations store owner and facing information for use with CreateUnit logic.
In rulesmd.ini:
[SOMEVEHICLE] ; VehicleType
DestroyAnim= ; List of AnimationTypes
DestroyAnim.Random=true ; boolean
IsSimpleDeployer vehicle ammo change on deploy
Ammo.AddOnDeploydetermines the number of ammo added or subtracted after the vehicle has deployed or undeployed.Ammo count cannot go below 0 or above the maximum ammo for vehicle’s type (in case the deploy results in type conversion, type is the one after the conversion).
In rulesmd.ini:
[SOMEVEHICLE] ; VehicleType
Ammo.AddOnDeploy=0 ; integer
IsSimpleDeployer customizations
It is possible to enable checking if the deployed unit (if type conversion is in use, the conversion result will be used for these checks) is allowed to deploy on the cell which will also affect deploy cursor availability by setting
IsSimpleDeployer.ConsiderPathfindingto true.You can explicitly disable deploying on cells of specified land types using
IsSimpleDeployer.DisallowedLandTypes. Defaults towater,beachfor units with Jumpjet or Hover locomotor withDeployToLand=true,nonefor others.
In vanilla game only units with
DeployingAnimwere constrained to a specific deploy facing and it was not customizable per unit.DeployDircan be set to override this per unit (defaults to[AudioVisual] -> DeployDirfor units withDeployingAnim, -1 otherwise), including using value of -1 to disable the facing restriction.Multiple new options for deploy animations:
DeployingAnimscan be used instead ofDeployingAnim(if both are set,DeployingAnimstakes precedence) to define a list of direction-specific deploy animations to play. Largest power of 2 the number of listed animations falls to is used as number of directions/animations. Less than 8 animations listed results in only first listed one being used.DeployingAnim.KeepUnitVisibledetermines if the unit is not hidden while the animation is playing.DeployingAnim.ReverseForUndeploycontrols whether or not the animation is played in reverse for undeploying.DeployingAnim.UseUnitDrawercontrols whether or not the animation is displayed in the unit’s palette and team colours or regular animation palette, including a potential custom palette.
In rulesmd.ini:
[SOMEVEHICLE] ; VehicleType
IsSimpleDeployer.ConsiderPathfinding=false ; boolean
IsSimpleDeployer.DisallowedLandTypes= ; List of LandTypes (none | clear | road | water | rock | wall | tiberium | beach | rough | ice | railroad | tunnel | weeds)
DeployDir= ; Facing type (integers from 0-7 or -1)
DeployingAnims= ; List of AnimationTypes
DeployingAnim.KeepUnitVisible=false ; boolean
DeployingAnim.ReverseForUndeploy=true ; boolean
DeployingAnim.UseUnitDrawer=true ; boolean
Make harvesters do addtional scan after unload
In vanilla, miners will remember their current location when they reach full load and move to that location after unloading. This makes miners to gradually move deeper into the mine and ignore the closer minerals.
Now you can have the miner search for the nearest mineral again after unloading. If a closer mineral is found, the miner will go to that location instead of the previously recorded location.
In rulesmd.ini:
[General]
HarvesterScanAfterUnload=false ; boolean
[SOMEVEHICLE] ; VehicleType
HarvesterScanAfterUnload= ; boolean, default to [General] -> HarvesterScanAfterUnload
Preserve Iron Curtain / Force Shield status on type conversion
Bugfix in action
Iron Curtain status is now preserved by default when converting between TechnoTypes via
DeploysInto/UndeploysInto. Force Shield status preservation is turned off by default.This behavior can be turned on/off per-TechnoType and on global basis.
IronCurtain.Modifier/ForceShield.Modifier(whichever is applicable) is re-applied upon type conversion.
In rulesmd.ini:
[CombatDamage]
IronCurtain.KeptOnDeploy=true ; boolean
ForceShield.KeptOnDeploy=false ; boolean
[SOMETECHNO] ; VehicleType with DeploysInto or BuildingType with UndeploysInto
IronCurtain.KeptOnDeploy= ; boolean, default to [CombatDamage] -> IronCurtain.KeptOnDeploy
ForceShield.KeptOnDeploy= ; boolean, default to [CombatDamage] -> ForceShield.KeptOnDeploy
Retain target on movement command
It is now possible for vehicles to retain their target when issued movement command by setting
KeepTargetOnMoveto true.Note that no check is done whether or not the vehicle or the weapon can actually fire while moving, this is on modder’s discretion.
The target is automatically reset if the vehicle moves beyond the weapon’s range from the target.
KeepTargetOnMove.Weapondetermines the weapon to be used for range check. If set to -1, the game will select the weapon against the target by default logic.It’s recommended to set it to a specific weapon for better performance, unless there’s a need to use multiple weapons for different targets.
KeepTargetOnMove.NoMorePursuitcontrols whether the unit will restart chasing the target for attack when it stops again, otherwise it will clear the target when it moves away.KeepTargetOnMove.ExtraDistancecan be used to modify the distance considered ‘out of range’ from the target (it is added to weapon range), negative values work to reduce the distance.
In rulesmd.ini:
[SOMEVEHICLE] ; VehicleType
KeepTargetOnMove=false ; boolean
KeepTargetOnMove.Weapon=-1 ; integer, weapon slot index
KeepTargetOnMove.NoMorePursuit=true ; boolean
KeepTargetOnMove.ExtraDistance=0 ; floating point value, distance in cells
Sinking behavior dehardcode
In vanilla, whether a ship sinks when it dies on the water is determined by multiple settings of hardcoding. The speed of the sinking is hardcoded to 5 Leptons per frame.
Now you can determine whether a ship sinks with a dedicated flag
Sinkable, and useSinkSpeedto customize the speed at which the ship sinks.Sinkable.SquidGrabcontrols the behavior of a ship when it is killed by a squid. Set it tofalseto cause the ship to take a lethal damage instead of sinking directly at that time (and thus obeySinkablesettings).
In rulesmd.ini:
[SOMEVEHICLE] ; VehicleType
Sinkable= ; boolean
SinkSpeed=5 ; integer, leptons per frame
Sinkable.SquidGrab=true ; boolean
Stationary vehicles
Setting VehicleType
Speedto 0 now makes game treat them as stationary, behaving in very similar manner to deployed vehicles withIsSimpleDeployerset to true. Should not be used on buildable vehicles, as they won’t be able to exit factories.
Turret recoil
Now you can use
TurretRecoilto control units’ turret/barrel recoil effect when firing.TurretTravelandBarrelTravelcontrol the maximum recoil distance.TurretRecoil.Suppresscan prevent the weapon from producing this effect when firing.
In rulesmd.ini:
[SOMEVEHICLE] ; VehicleType
TurretRecoil=no ; boolean
TurretTravel=2 ; integer, pixels
TurretCompressFrames=1 ; integer, game frames
TurretHoldFrames=1 ; integer, game frames
TurretRecoverFrames=1 ; integer, game frames
BarrelTravel=2 ; integer, pixels
BarrelCompressFrames=1 ; integer, game frames
BarrelHoldFrames=1 ; integer, game frames
BarrelRecoverFrames=1 ; integer, game frames
[SOMEWEAPON] ; WeaponType
TurretRecoil.Suppress=no ; boolean
Note
The logic above was not reverse-engineered but reimplemented to achieve the same effect, hence there might be some differences in behavior compared to Tiberian Sun version.
Unit Without Turret Always Turn To Target
Now vehicles without turret will attempt to turn to the target while the weapon is cooling down, rather than after the weapon has cooled down, by setting
NoTurret.TrackTargetto true.
In rulesmd.ini:
[General]
NoTurret.TrackTarget=false ; boolean
[SOMEVEHICLE] ; VehicleType
NoTurret.TrackTarget= ; boolean, defaults to [General] -> NoTurret.TrackTarget
Note
Jumpjet can also be affected by this if firing an OmniFire weapon with OmniFire.TurnToTarget set to true.
Voxel turret shadow
Vehicle voxel turrets can now draw shadows if
[AudioVisual] -> DrawTurretShadowis set to true. This can be overridden per VehicleType by settingTurretShadowin the vehicle’sartmd.inisection.
In rulesmd.ini:
[AudioVisual]
DrawTurretShadow=false ; boolean
In artmd.ini:
[SOMEVEHICLE] ; VehicleType
TurretShadow= ; boolean
VoxelAnims
Customizable debris & meteor impact and warhead detonation behaviour
The INI keys and behaviour is mostly identical to the equivalent behaviour available to regular animations. Main difference is that the keys must be listed in the VoxelAnim’s entry in
rulesmd.ini, notartmd.ini.
Customizable debris trailer anim spawn delay
You can now customize the generation interval of VoxelAnim’s trailer animation.
In rulesmd.ini:
[SOMEVOXELANIM] ; VoxelAnimType
Trailer.SpawnDelay=2 ; integer, game frames
Warheads
Allowing damage dealt to firer
You can now allow warhead to deal damage (and apply damage-adjacent effects such as
KillDriverandDisableWeapons/Sonar/Flash.Duration(Ares features)) on the object that is considered as the firer of the Warhead even if it does not haveDamageSelf=true.Note that effect of
Psychedelic=true, despite being tied to damage will still fail to apply on the firer as it does not affect any objects belonging to same house as the firer, including itself.
In rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
AllowDamageOnSelf=false ; boolean
Combat light customizations
You can now set minimum detail level at which combat light effects are shown by setting
[AudioVisual] -> CombatLightDetailLevelorCombatLightDetailLevelon Warhead.You can now set a percentage chance a combat light effect is shown on Warhead impact by setting
CombatLightChance.Setting
CLIsBlackto true on Warhead will now turn the flash black like on hitting an Iron Curtained object, irregardless of other color settings.
In rulesmd.ini:
[AudioVisual]
CombatLightDetailLevel=0 ; integer
[SOMEWARHEAD] ; WarheadType
CombatLightDetailLevel= ; integer, default to [AudioVisual] -> CombatLightDetailLevel
CombatLightChance=1.0 ; floating point value, percents or absolute (0.0-1.0)
CLIsBlack=false ; boolean
Custom debris animations and additional debris spawn settings
You can now use
DebrisAnimsto specify a list of debris animations to spawn instead of animations from[General] -> MetallicDebriswhen Warhead withMaxDebris> 0 and noDebrisTypes(VoxelAnims) listed is detonated.Debris.Conventional, if set to true, makesDebrisTypesorDebrisAnimsonly spawn if Warhead is fired on non-water cell.
In rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
DebrisAnims= ; List of AnimationTypes
Debris.Conventional=false ; boolean
Custom debris voxel animations limitation
Now, the original
DebrisMaximumscan be used in conjunction with newDebrisMinimumsto limit the quantity ofDebrisTypeswhenDebrisTypes.Limitis enabled.The default value of
DebrisTypes.Limitis whether the number ofDebrisMaximumsis greater than (not equal to) 1 (for compatibility reasons).
In rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
DebrisTypes.Limit= ; boolean
DebrisMaximums= ; List of integers
DebrisMinimums= ; List of integers
Customizable rocker amplitude
The rocker amplitude of warheads with
Rocker=yesused to be determined byDamagevalue of the weapon. You can now override it with fixed value and add a multiplier to it.When both multiplier and override values are set - both are used.
In rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
Rocker.AmplitudeMultiplier=1.0 ; floating point value, multiplier
Rocker.AmplitudeOverride= ; integer
Customizable Warhead animation behaviour
It is possible to make game play random animation from
AnimListby settingAnimList.PickRandomto true. The result is similar to whatEMEffect=trueproduces, however it comes with no side-effects (EMEffect=truepreventsInviso=trueprojectiles from snapping on targets, making them miss moving targets).If
AnimList.CreateAllis set to true, all animations fromAnimListare created, instead of a single anim based on damage or random ifAnimList.PickRandomis set to true.If
AnimList.CreationIntervalis set to a value higher than 0, there will be that number of detonations of the Warhead before animations fromAnimListwill be created again. If the Warhead had a TechnoType firing it, this number is remembered by the TechnoType across all Warheads fired by it, otherwise it is shared between all detonations of same WarheadType period. This can be useful for things likeAirburstwith large spread where one might want uniform distribution of animations to appear but not on every detonation.AnimList.ScatterMin&AnimList.ScatterMaxcan be used to set a range in cells around which any created animations will randomly scatter around from the impact point.SplashListcan be used to override animations displayed if the Warhead hasConventional=trueand it hits water.SplashList.PickRandom,SplashList.CreateAll,SplashList.CreationIntervalandSplashList.Scatter(Min/Max)apply to these animations in same manner as theAnimListequivalents.
CreateAnimsOnZeroDamage, if set to true, makes it so thatAnimListorSplashListanimations are created even if the weapon that fired the Warhead deals zero damage.
Setting
Conventional.IgnoreUnitsto true on Warhead withConventional=truewill make the Warhead detonate on non-underwater VehicleTypes on water tiles as if they are water tiles, instead of treating it as land. This determines whether to useAnimListorSplashListwhen hitting surface ships.
In rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
AnimList.PickRandom=false ; boolean
AnimList.CreateAll=false ; boolean
AnimList.CreationInterval=0 ; integer
AnimList.ScatterMin=0.0 ; floating point value, distance in cells
AnimList.ScatterMax=0.0 ; floating point value, distance in cells
SplashList= ; List of AnimationTypes, default to [CombatDamage] -> SplashList
SplashList.PickRandom=false ; boolean
SplashList.CreateAll=false ; boolean
SplashList.CreationInterval=0 ; integer
SplashList.ScatterMin=0.0 ; floating point value, distance in cells
SplashList.ScatterMax=0.0 ; floating point value, distance in cells
CreateAnimsOnZeroDamage=false ; boolean
Conventional.IgnoreUnits=false ; boolean
Customizable Warhead trigger conditions
AffectsBelowPercentandAffectsAbovePercentcan be used to set the health percentage thresholds that target needs to be below/equal and/or above of for the Warhead to detonate. If target has zero health left this check is bypassed.If set to
false,AffectsNeutralmakes the warhead can’t damage or affect target that belongs to neutral house.If set to
false,EffectsRequireVersesmakes the Phobos-introduced warhead effects trigger even if it can’t damage the target because of it’s current ArmorType (e.g. 0% inVerses).
In rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
AffectsBelowPercent=1.0 ; floating point value, percents or absolute
AffectsAbovePercent=0.0 ; floating point value, percents or absolute
AffectsNeutral=true ; boolean
EffectsRequireVerses=false ; boolean
Customizing decloak on damaging targets
You can now specify whether or not the warhead decloaks objects that are damaged by the warhead.
In rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
DecloakDamagedTargets=true ; boolean
Customizing parasite
Now you can specify which targets the parasite will culling them.
Squid grapple anim is hardcoded to use
SQDGin vanilla, Now you can choose it.
In rulesmd.ini:
[AudioVisual]
Parasite.GrappleAnim= ; animation
[SOMEWARHEAD] ; WarheadType
Parasite.CullingTarget=infantry ; List of Affected Target Enumeration (none|aircraft|infantry|units|all)
Parasite.GrappleAnim= ; animation
Dehardcode the ZAdjust of warhead anim
In vanilla, the animations generated by
AnimListhave a hard-codedZAdjust=-15. Now you can customize it in the following ways.If these flags are set to 0, the
ZAdjustdefined by the anim will be used.
In rulesmd.ini:
[AudioVisual]
WarheadAnimZAdjust=-15 ; Integer
[SOMEWARHEAD] ; WarheadType
AnimZAdjust= ; Integer, default to [AudioVisual] -> WarheadAnimZAdjust
Delay automatic attack on the controlled unit
Now you can make the techno that has just been mind controlled not be automatically attacked by its original friendly forces for a period of time defined by
MindControl.ThreatDelayon the mind control warhead.This will not affect the manual selection of attacks and is useless with permanent mind control.
In rulesmd.ini:
[General]
MindControl.ThreatDelay=0 ; integer, game frames
[SOMEWARHEAD] ; WarheadType
MindControl.ThreatDelay= ; integer, game frames, default to [General] -> MindControl.ThreatDelay
Nonprovocative Warheads
You can now make Warheads behave in nonprovocative fashion. Warheads with
Nonprovocative=trueexhibit following behaviours:They will not generate any EVA announcements upon hitting targets, be it for attacking ore miners, base buildings or ally base buildings.
They will not spring ‘attacked’ / ‘attacked by’ events. Note that if the Warhead deals actual damage, events that check for that can still be sprung.
They will not evoke defense response from AI players when used to attack base buildings,
ToProtect=trueTechnoTypes or members of TeamTypes withWhiner=true.They will not evoke retaliation from TechnoTypes hit by the Warhead.
In rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
Nonprovocative=false ; boolean
Note
Due to technical constraints, this does not suppress warnings from Ares’ EMP effect.
Restricting screen shaking to current view
You can now specify whether or not the warhead can only shake screen (
ShakeX/Ylo/hi) if it is detonated while visible on current screen view.
In rulesmd.ini:
[SOMEWARHEAD] ; WarheadType
ShakeIsLocal=false ; boolean
Weapons
AmbientDamage customizations
You can now specify separate Warhead used for
AmbientDamageviaAmbientDamage.Warheador make it never apply to weapon’s main target by settingAmbientDamage.IgnoreTargetto true.
In rulesmd.ini:
[SOMEWEAPON] ; WeaponType
AmbientDamage.Warhead= ; WarheadType
AmbientDamage.IgnoreTarget=false ; boolean
Can attack allies
Weapons now support
AttackFriendliesandAttackCursorOnFriendlies. They override the firer’sAttackFriendliesandAttackCursorOnFriendlies.
In rulesmd.ini:
[SOMEWEAPON] ; WeaponType
AttackFriendlies= ; boolean
AttackCursorOnFriendlies= ; boolean
Charge turret delays
It is now possible to customize the delay of
IsChargeTurret=trueunit turret animation per weapon, perBurstshot instead of defaulting to weapon’s rearm timer (ROF,Burst.Delaysetc). Delay in the list corresponding to burst shot is used, or last delay listed if number of listed values is lower than the current burst index. Delay of 0 or less means previous delay, if applicable, is not restarted.Note that unlike the default rearm timer that uses
ROF, any modifiers are not applied to explicitly set charge turret delays.
In rulesmd.ini:
[SOMEWEAPON] ; WeaponType
ChargeTurret.Delays= ; List of integers - game frames
Customizable disk laser radius

You can now set disk laser animation radius using a new tag.
In rulesmd.ini:
[SOMEWEAPON] ; WeaponType
DiskLaser.Radius=240 ; integer
; 240 is the default saucer disk radius
Customizable ROF random delay
By default weapon
ROFhas a random delay of 0 to 2 frames added to it. This random delay is now customizable, globally and on per-WeaponType basis.
In rulesmd.ini:
[CombatDamage]
ROF.RandomDelay=0,2 ; integer - single or comma-sep. range (game frames)
[SOMEWEAPON] ; WeaponType
ROF.RandomDelay= ; integer - single or comma-sep. range (game frames), default to [CombatDamage] -> ROF.RandomDelay
Customizing whether passengers are kicked out when an aircraft fires
You can now customize whether aircraft will forcefully eject passengers (vanilla behavior) or fire its weapon when attempting to fire.
In rulesmd.ini:
[SOMEWEAPON] ; WeaponType
KickOutPassengers=true ; boolean
Disable FireOnce resetting infantry sequence
It is now possible to disable
FireOnce=trueweapon resetting infantry sequences after firing viaFireOnce.ResetSequence. Target will be forgotten like before, the firing sequence will simply continue playing after firing if there are any frames left.
In rulesmd.ini:
[SOMEWEAPON] ; WeaponType
FireOnce.ResetSequence=true ; boolean
Electric bolt customizations
EBolt customization utilized for different Tesla bolt weapon usage (RA2: Reboot)
You can now specify individual bolts you want to disable for
IsElectricBolt=trueweapons. Note that this is only a visual change.By default
IsElectricBolt=trueeffect draws a bolt with 8 arcs. This can now be customized per WeaponType withBolt.Arcs. Value of 0 results in a straight line being drawn.Bolt.Durationcan be specified to explicitly set the overall duration of the visual electric bolt effect. Only values in range of 1 to 31 are accepted, values outside this range are clamped into it.Bolt.FollowFLHcan be used to override the default behaviour where the electric bolt source coordinates change to match the unit’s firing coord on every frame (making it follow unit’s movement, rotation etc). Defaults to true on vehicles, false for everything else.
In rulesmd.ini:
[SOMEWEAPON] ; WeaponType
Bolt.Disable1=false ; boolean
Bolt.Disable2=false ; boolean
Bolt.Disable3=false ; boolean
Bolt.Arcs=8 ; integer
Bolt.Duration=17 ; integer, game frames
Bolt.FollowFLH= ; boolean
Note
Due to technical constraints, these features do not work with electric bolts created from support weapon of Ares’ Prism Forwarding or those from AirburstWeapon.
Single-color lasers
Comparison of IsSingleColor=yes lasers with higher thickness to regular ones (RA2: Reboot)
You can now set laser to draw using only
LaserInnerColorby settingIsSingleColor, in same manner asIsHouseColorlasers do using player’s team color. These lasers respect laser thickness. Note that this is not available on prism support weapons.
In rulesmd.ini:
[SOMEWEAPON] ; WeaponType
IsSingleColor=false ; boolean