return to top ↑ Ares logo

Ares Documentation

Table of Contents

Show Ares 0.2 documentation

Due to the length of the TOC, it is hidden by default. Click here to expand it.

Introduction

Ares is the new tool to extend the capabilities of Yuri's Revenge. It was conceived by pd near the end of 2007, and is currently in an early development and testing cycle.

This documentation is aimed primarily at Ares testers, as Ares is a work in progress and subject to many further changes. However, the documentation is also aimed at mod authors wishing to make use of the new functionality that Ares offers.

Ares is incorporated into Yuri's Revenge via the use of Syringe, a program developed by pd to 'inject' DLL code into a running executable without modifying the executable itself. In this case, the Ares DLL is injected into the Yuri's Revenge 1.001 main executable, gamemd.exe.

Syringe can be run directly via a command line prompt, or automatically using Launch Base. See the respective documentations of those programs for further details.

Compatibility Notes

RockPatch/NPatch

Ares is not intended to be used in conjunction with any third party patch that modifies the executable of the game. This is due to fairly obvious technical reasons that were best summarized by Renegade: [paraphrase] You can't use the USA maps on your GPS to navigate through Russia.
...because sooner or later you will drive down a road that doesn't exist, and off a cliff.

Save Games

For the same reasons, Ares does not support loading save games or scripted IPB videos that were created with any other version of the game than the very same version of Ares (not even the original Yuri's Revenge save games are supported).
NB: Unfortunately, for the moment, save games are not functional at all in Ares. This is a known problem that will be fixed in the future - Ares will eventually be able to load games that were saved using [the exact same version of] Ares.

Known Major Issues

Known Minor Issues

Bug Fixes

Ares provides three types of bug fixes:

  1. Fixes to genuine bugs in the original, unmodded Yuri's Revenge 1.001, that cannot be fixed simply by modifying INI files or graphics (like the UMP does).
  2. Fixes to logic that goes unused in the unmodded game, or at least not used to its full capabilities – i.e. game logic that often does not work as expected when used in mods.
    [This section might have included logic that existed in Tiberian Sun but was removed by Yuri's Revenge 1.001, however we have dedicated a whole separate chapter to restored Tiberian Sun logic.]
  3. Corrections and enhancements to code efficiency that reduce loading times and in-game lag without affecting gameplay mechanics. Also hardware/operating system related crashes.

Type 1 Fixes (Original Bugs)

Temporal Warheads Earn Experience By Killing Friendly Units

When a unit kills an enemy unit it gains experience which can lead to that unit becoming veteran or elite. Killing friendly units (your own or your allies') does not earn experience in this way.
However, Temporal warheads (warheads with Temporal=yes set) did use to earn experience when killing friendly units. This is no longer the case. Temporal warheads no longer gain experience when used against allies

'Absolute-Damage' Prism Support Modifier

Whenever a game mode or map declared the [General] section without re-stating the PrismSupportModifier, the PrismSupportModifier from rulesmd.ini would get multiplied by 100, thus causing supported Prism Towers to deal seemingly 'instant-kill' damage.

This bug is now fixed, however it should be noted that several official maps used to exhibit this bug and so are 'fixed' by the UMP by re-stating PrismSupportModifier which means that these maps are now set at the original 150%, regardless of what your mod may set it to (so if you are incorporating the UMP into your mod and change the modifier as well then you will need to amend the 'fixed' UMP maps accordingly).Prism support modifier fixed for game modes/maps.

Frozen Mutation (MakeInfantry) Animations

Infantry killed by a mutation warhead appear to transform into another InfantryType. Internally this is achieved by playing an animation, upon completion of which a new infantry unit is spawned. If the cell where the new infantry is to be spawned is already occupied then the animation will pause on the final frame until the obstacle is cleared. The original game would allocate memory for the new infantry on every frame but would fail to de-allocate that memory when the infantry could not be placed. The more time that passes with the animation in this state, the worse the memory leak gets – resulting in the game eventually grinding to a halt. Ares fixes this by simply deleting the animation if the new infantry unit cannot be spawned.Stuck mutation animations are deleted (thus preventing a memory leak)

Misleading Veteran Naval Cameos

When you infiltrate an enemy War Factory, any [trainable] VehicleTypes' (not AircraftTypes) cameos (build icons) will gain the veteran symbol, indicating that they will start veteran when built. However, only vehicles built from a War Factory will actually start veteran, not vehicles built from a Naval Yard. Ares ensures that only the vehicles that will actually start veteran gain the veteran symbol for their cameos.Spying a war factory will not give you veteran build icons for naval units incorrectly.

Secret Lab Boon Weighting

The random weighting of each possible Secret Lab boon was not calculated correctly – the later a boon appeared in the list the less likely it was to appear in-game. For example, if the Grand Cannon were not picked as the boon for the first Secret Lab on the map (probability 1/8) then it could not be picked for any of the other Secret Labs. This has been fixed such that every Secret Lab will pick its boon completely at random, independently of other Secret Labs on the map.Secret lab boons are picked truly at random.

Too Many Secret Labs

If there were more Secret Labs on the map than there were possible boons then all of the Secret Labs would be 'empty'. This has been fixed such that every Secret Lab will pick its boon completely at random, independently of other Secret Labs on the map.Too many secret labs on a map would cause them all to be empty. Not anymore.

AI Targeting Cloaked Objects With Major Super Weapons

When AI controlled Super weapons with Type=WeatherStorm or Type=Nuke picked their target, they failed to ignore cloaked objects (such as Submarines) and, as a result, sometimes selected them as targets, ruining the appearance of fair play. Cloaked objects are no longer considered as targets for these super weapons.AI will not use weather storms or nukes on cloaked units.

Enemy Harvester Guard Mode Exploit

It was possible to issue the 'guard mode' order to enemy harvesters as if they were your own units. Players unaware of this exploit would find their economy crippled when facing an unscrupulous player. It is no longer possible to issue the guard mode order to enemy harvesters."Enemy harvester guard mode" exploit no longer works.

Parasites In Airborne Units

If a parasite (e.g. Terror Drone) entered a unit that can fly (e.g. Nighthawk) and that unit was destroyed by the parasite whilst airborne then the parasite would appear, unscathed, on the ground beneath the destroyed unit. In Ares, the parasite will instead appear at the same height as the destroyed airborne unit and fall to the ground - where it will be destroyed by the impact.Parasites that destroy an airborne unit will fall to the ground and be destroyed too.

Warhead Verses' Special Values

The Verses flag (which is used on warheads to manipulate the damage dealt versus different armor types) has three special-case values used to define additional behavior:

However, a bug with the way the floating point values are compared means that these behaviors were not always applied consistently. Ares fixes this bug so the behavior should always be consistent now.
The special behaviors can also now be toggled independently of the Verses value (see Additional ArmorTypes and Verses).Warhead verses special values (0%/1%/2%) should now apply their behavior consistently.

Unit Sounds Played At Inappropriate Times

When a unit was pulled by a Magnetron it would play its MoveSound, even though it was not moving under its own power. Now, this sound will only be played when the unit moves under its own power.Units pulled by a Magnetron will on longer play their move sound.

Type 2 Fixes (Mod Logics)

Unit Sounds Played At Inappropriate Times

When an InfantryType with MovementZone=AmphibiousDestroyer was carried between water and land inside an 'open topped' vehicle (e.g. a Nighthawk converted into a flying Battle Fortress), their EnterWaterSound/ExitWaterSound would be played. Now, these sounds will only be played when the InfantryType themselves physically enters/leaves water.

Buildable Secret Labs

Secret Lab boons were picked on map load so if a Secret Lab were not pre-placed on the map then it would not provide a boon. With Ares, Secret Labs constructed by a player will randomly pick a boon that that player could not build at the time the Secret Lab was placed.Buildable secret labs will now have a boon.

Buildable Construction Yards

Construction Yards that were made buildable from the sidebar would cause an Internal Error if the player started construction of one and then cancelled it. This error no longer occurs.Buildable construction yards no longer cause an IE when canceled.

Animation Damage Warheads

Animations may have appeared to deal damage randomly rather than based on the warhead specified. In fact, animations were hard-coded to deal damage using the warhead specified by [CombatDamage]►FlameDamage2, unless the animation ID was [INVISO], in which case the warhead used was [CombatDamage]►C4Warhead. With Ares, the [Animation]►Warhead= flag will be adhered to, with the aforementioned warheads used as the default if [Animation]►Warhead is not specified.Animations' warhead flag now works.Warhead=

Initial Veteran Cameos

When you infiltrate, say, an enemy Barracks, any [trainable] infantry that you subsequently build will start veteran. The infantry's cameos (build icons) will gain the veteran symbol to indicate this. However, if the country you are playing as has any units that always 'start veteran' then those units did not gain the veteran symbol for their cameos. Now they do.Units that start veteran as a country-specific bonus will now have veteran build icons.

Only InfantryTypes Can Overpower Buildings

Tesla Troopers, for example, can overpower Tesla Coils to make them fire a more powerful weapon. If the same logic was applied to vehicles (for example, the Tesla Tank), to make them overpower buildings in the same way, then the overpowering weapon of the vehicle would fire but would not, in fact, overpower the building. Now vehicles can overpower buildings properly.Vehicles can overpower buildings.

OpenTopped Transports Do Not Decloak To Fire

If a passenger inside an 'open topped' vehicle (e.g. the Battle Fortress) fired a weapon with DecloakToFire=yes set then the open topped vehicle (if it were cloaked) would not decloak when the weapon was fired. Now it will.OpenTopped transports will decloak to fire when their passengers fire.

RadBeams And Waves Using The Wrong FLH

The weapon effects of Radiation Beams and Waves (Sonic and Magnetron Beams) would always get drawn from the FLH of the firing unit's current primary weapon rather than from the FLH of the weapon that actually fired the beam/wave. Now the weapon effects will be drawn using the correct FLH.

Note that the Magnetron does not have a SecondaryFireFLH set in the unmodded game, so any mod using Ares will need to set this themselves. You may also need to correct the FLHs for the IFV.RadBeams and waves will use the correct FLH (instead of always using PrimaryFLH).

Sonic Wave Ambient Damage

The Warhead and AmbientDamage settings used when applying ambient damage from a sonic weapon were always taken from the unit's current primary weapon rather than the weapon that actually fired the wave. Now these settings are taken from the weapon that fired the wave.Sonic wave ambient damage comes from the correct weapon (instead of always Primary).

Ivan Bombs Can Only Be Fired By InfantryTypes

If an Ivan Bomb weapon was given to any unit other than an InfantryType then the weapon would fire but the Ivan Bomb would not actually get attached to the target. Now Ivan Bombs can be fired by VehicleTypes, AircraftTypes and BuildingTypes as well.
NB: BuildingTypes do not get the Dynamite cursor.Ivan bombs can be fired by any unit (instead of just infantry).

BuildingType Upgrades Are Not Viable Prerequisites

Before Ares, upgrades did not appear to work as prerequisites – if you had the upgrade, you still didn't satisfy the prerequisite. In fact, only the most recently constructed BuildingType would be checked to see if it had the upgrade. With Ares, all upgrades on all BuildingTypes are eligible to satisfy any prerequisite logic that a normal BuildingType can.

In addition, upgrades can now satisfy a super weapon's AuxBuilding.Building upgrades can now be used as prerequisites.

Custom Palettes

The original game supports custom palettes on TechnoTypes using Palette= (filename, excluding .pal extension) on the TechnoType's entry in artmd.ini. However, the game would crash (with the message "You have violated the limit of having only one extra building Palette" in the (non-existent) log file) if you used the Palette flag more than once. And, of course, the one extra palette was already in use on the Statue of Liberty. Ares removes this limit and lets you use custom palettes on all TechnoTypes to your heart's content.
NB: It is not known why this apparently arbitrary limit on custom palettes was in place – it may have been there to mask a bug that we don't yet know about.Units can specify a custom palette.

Factory Load Sharing

If you had queued up a lot of vehicles such that the primary factory could not cope with the rapid exit cycle then the game would search for alternative exits – other instances of the same BuildingType. In Ares this has been extended to search for all BuildingTypes with the same Factory= and Naval= settings.
NB: This fix currently prevents the so-called 'kennel hack' from working.Factory load sharing for factories of the same type, rather than just the same ID.

New Construction Options

One cause of the NCO bug (where the EVA will announce "new construction options" when, in fact, there aren't any) was the game's failure to check if the player had the appropriate factory type to build the unit concerned (e.g. a VehicleType factory for VehicleTypes). Such a check will now take place, thus removing this cause of the NCO bug."New construction options" no longer announced if player does not have the correct factory type for a unit.

"Special" Weapons Only Functional In The Primary Slot

Units with weapons that use MindControl=yes, Parasite=yes or Temporal=yes require special treatment behind-the-scenes in order to function. However, the original game only performed this treatment if those units had such weapons as their Primary weapon. The treatment would not be applied for Secondary weapons and thus result in crashes. Ares performs the treatment for Secondary weapons too.
NB: The 'special treatment' sets up the object wielding these weapons. However, the original code is not designed to handle an object having more than one weapon with 'special' functionality so it is not recommended to have multiple weapons with the same type of special functionality on a single object.Special weapons (mind-control/parasite/temporal) will now work in the Secondary slot.

DestroyAnims Don't Remap

The remappable parts of animations played via the use of the DestroyAnims= flag (when a building is destroyed) used to remain red in color – they would not get remapped to the owning player's house color. Now they will. Note that the games files already include suitable animations for some buildings, however some of these (the Allied Barracks and Prism Tower) use the red palette indexes rather than the remappable indexes so you will need to recolor the images.DestroyAnims can use remappable colors.

DestroyAnims Cause Reconnection Errors

The DestroyAnims= flag used to cause reconnection errors in multiplayer whenever it was used. This should not happen anymore.DestroyAnims don't cause reconnection errors anymore.

BuildingTypes and InfantryTypes Do Not Reload Ammo Properly

See ModEnc://Ammo for exact details of this problem. Put simply, ammo/reloading logic did not work properly on BuildingTypes or InfantryTypes and was essentially useless on those object types. Ares fixes this logic such that these object types will now reload their ammo properly. Note that AircraftTypes are hard-coded to require docking to reload.

Additionally, BuildingTypes with Hospital=yes or Armory=yes limit their special effects to the current Ammo they have, and previously those structures were hardwired to never reload their ammo. This restriction has been lifted, so you might need to revise the balance of such structures.Infantry and buildings can now reload ammo correctly.

Unit Instances Not Counting Towards BuildLimit

If you have a vehicle which deploys into a structure, both the deploying vehicle and the structure will now count towards the BuildLimit of that vehicle.Vehicles that deploy into a building now count towards the BuildLimit of that building, and vice versa.

Hijackers inside stolen vehicles now count towards the Hijacker's BuildLimit.Hijackers inside vehicles now count towards that hijacker's BuildLimit.

The 100-Unit Bug

There is no longer an upper limit on the InfantryTypes, VehicleTypes and AircraftTypes lists. NB: The so-called Whiteboy Bug (where graphical glitches and even game freezing can occur when there are 74 or more cameos visible on the sidebar at the same time) has not been fixed.100-unit bug fixed for infantry, vehicles and aircraft (there's no longer a limit on these).

PKT Duplication

Multiple loose PKT files can now be used without their contents being duplicated (unless you duplicate the mapfilters, of course).Multiple loose PKT files no longer have their contents duplicated.

Overriding Missionsmd.pkt

You can now override the original missionsmd.pkt by placing your own version in an expandmd##.mix file (the game has been modified to load these files before langmd.mix).Missionsmd.pkt can now be overridden by your own version inside expandmd##.mix

Moving Alpha Lights

The original game includes a little-known flag that allows all ObjectTypes (anything placeable on the map - Projectiles, Trees, Overlays, Smudges (not the IsometricTileTypes), Aircraft, Infantry, Vehicles and Buildings) to have a lighting effect displayed on them.
[Object]►AlphaImage=ALPHATST instructs the game to display ALPHATST.shp on the object as a lighting effect. The SHP must be saved without any compression (just like mouse.sha).

Ares adds two improvements to this feature:

Mind-Controller Parasites

MC-parasites would draw a mind-control link between the mind-controlled unit and the point on the map where the parasite entered the unit. Now the link will not be drawn at all. You can also use MindControl.Permanent instead, in order to use the perma-mc animation.Mind-controller parasites will no longer draw the mind-control link when the the target is selected.

SpyPlane.Count Decoupled From AllyParaDropNum

If you set AllyParaDropNum= to a list of integers so as to send multiple InfantryTypes in the paradrop (and thus multiple paradrop planes) then the SpyPlane super weapon would also send the same number of planes as there were elements in that list. In Ares, the number of spy planes sent out is now specified by the super weapon's own SpyPlane.Count= flag (which defaults to 1).SpyPlane.Count decoupled from AllyParaDropNum.

DigSound

[AudioVisual]►DigSound= is used for both the global Nuke siren and the sound made when a subterranean unit (with Locomotor={4A582743-9839-11d1-B709-00A024DDAFD1}) digs into or emerges from the ground. With Ares, the super weapon can specify its own Nuke.Sound= (which defaults to [AudioVisual]►DigSound=).Nuke super weapons can be overridden to use a sound other than DigSound for their siren.

Jumpjet Shadows

If a Jumpjet vehicle uses SHP-based imagery then the shadow would only be drawn when the unit was at rest on the ground or if Turret=yes were set (and then the shadow would appear directly underneath the unit instead of on the ground). Now the shadow will always be drawn correctly on the ground.Shadows on jumpjet units will now be drawn correctly when the unit is airborne.

Vehicle Paradrop Offset

Passengers of AircraftTypes get paradropped out if the AircraftType fires its weapon. The passengers would always use the infantry sub-cell positions for where they would be spawned, even if the passenger were not an InfantryType. This ultimately meant that vehicles would appear to fall part-way into the ground upon landing. This error no longer happens in Ares.
(The same problem also used to occur with vehicles paradropped from aircraft with Carryall=yes set.)Vehicles that are paradropped will now be centered correctly on the cell they land on, rather than being offset.

Air-To-Air Combat

Anti-air weapons (where the projectile has AA=yes set) could not be used by AircraftTypes – aircraft simply would not attack other airborne units. Now, anti-air weapons work just fine on aircraft. No additional flags are required.Aircraft can now attack other aircraft if given a weapon with an AA=yes projectile.

BaseUnit

[General]►BaseUnit= specifies the list of VehicleTypes that are considered to be MCVs. Only the first 3 entries of this list were recognized by the game, which means that additional sides would never be playable in non-Short Games (among other limitations). Ares removes this limit so all entries in the list are now recognized.BaseUnit= can now hold more than 3 vehicles.

BuildConst

If you get into low power then the EVA will announce 'low power', but only if you have one of the first 3 buildings from the [AI]►BuildConst= list. With Ares, you'll get the EVA announcement if you have any building from the list."Low power" announcement used to occur only if you owned one of the first 3 buildings from BuildConst=. This now works if you have any building on the list.

Infantry Lost In Special Function Buildings

Infantry sent into an Armory or old-style Tech Hospital emerge a few moments later, having had the relevant benefit applied (e.g. promotion or healing). However, if the building were destroyed, sold or undeployed whilst the InfantryType were still inside then that InfantryType would remain in 'limbo' whilst still counting towards the owning player's units (e.g. defeat conditions, build limit, etc). Ares will make sure that such InfantryTypes are ejected from the building in those situations.Infantry still inside a Hospital or Armory when it is destroyed/sold may go into limbo instead of emerging, meaning that they still count towards the player's units. Now they will emerge.

Multiple AI Factories Clone Units

If the AI were modified to build multiple factories of the same type then every time they built a unit from that factory type they would produce a copy of that unit from every additional factory. For example, if the AI were made to build a second War Factory then they would get a second copy of every vehicle they build. This behavior is disabled by default in Ares, although a flag has been added to allow mod authors to turn it back on if they really want to:

[GlobalControls]►AllowParallelAIQueues= (boolean)
Set this to yes to re-enable AI factory cloning.
If an AI is made to build multiple factories of the same type they will no longer result in cloned units/buildings (this can be turned back on if desired).GlobalControlsAllowParallelAIQueues=

Alternate Theater Art For BuildingTypes (Ares 0.2)

BuildingTypes whose artmd.ini entry has NewTheater=yes set would have the second letter of their SHP filenames replaced by another letter, depending on the theater of the current map. For example, GAWEAP uses SHP files named GAWEAP* on arctic maps, GTWEAP* on temperate maps, GDWEAP* on desert maps and so on. In the event that a SHP file with the appropriate filename does not exist, the game falls back to GTWEAP*.
However, in Yuri's Revenge this filename-adjusting logic only works for BuildingTypes whose Image ID starts with G, N, Y or C. Ares extends this logic to work for Image IDs starting with any letter (A-Z or a-z).

Amphibious Objects Sink When Chronoshifted Onto Water

When an amphibious (not hover) object - that is, one that can normally enter water cells without problem - was chronoshifted onto water by the Chrono Sphere, it would sink. Ares corrects this so that all amphibious objects can be chronoshifted onto water without sinking.Amphibious objects no longer sink when chronoshifted onto water.

Temporal Warheads Still Affect Objects That Are Not Warpable

Attacking a unit with a Temporal=yes warhead when it should not be susceptible due to having Warpable=no set, could still experience some negative effects. Units that were mind-controlled by the unwarpable unit would be freed and aircraft-spawners would have those aircraft destroyed. Unwarpable units are no longer affected in this manner. Temporal warheads no longer affect objects that are not Warpable

Hardcoded Wall/Gate Interactions

In Tiberian Sun you could place buildable gates on top of existing walls. This logic still exists in Yuri's Revenge. However, the logic was hardcoded to only work with GAWALL and NAWALL, so it wouldn't work with Yuri's wall (YAWALL) or, indeed, any other walls you might add to the game. Ares changes this so that all overlays with Wall=yes set can have gates "slammed" onto them.
NB: The automatic joining of walls to the gates still only works for GAWALL and NAWALL however this will be fixed in future.Gates can be slammed onto any walls, not just GAWALL or NAWALL.

Type 3 Fixes (Performance)

Several performance enhancements.

Restored Tiberian Sun Logic

The Yuri's Revenge engine is based on the Red Alert 2 engine which, in turn, is based on the Tiberian Sun engine.
Various features that existed in Tiberian Sun were removed in Red Alert 2, and further features were removed in Yuri's Revenge and in the 1.001 patch.
The extent to which these features no longer exist in Yuri's Revenge 1.001 varies, from not functioning correctly to complete removal of the logic (sometimes because simply using the logic causes an Internal Error).
Below is a list of the features that Ares has restored, along with any changes or enhancements to the way those features used to work in Tiberian Sun.
Note that, in many cases, Ares has drastically changed the way these features are implemented.

EMP

Vehicles affected by EMP (Electromagnetic Pulse) are paralyzed in a similar manner to a Chrono Legionnaire erasing a unit. Unlike the Chrono Legionnaire however, EMP'd vehicles can still be attacked by other units.
EMP paralysis affects units in various ways:EMP weapons

NB: Tiberian Sun used the weapon's Damage flag to determine how long the EMP effect would last. Ares, however, uses 2 new flags (EMP.Duration and EMP.Cap) to provide greater control. The weapon's Damage will be delivered independently from EMP paralysis (so a weapon can both damage and paralyze its target). Tiberian Sun also used the flag EMEffect=yes, which is not used in Ares.

[Warhead]►EMP.Duration= (integer – frames)
[Warhead]►EMP.Cap= (integer – frames)
The above two flags are used together to determine how long (in frames) the affected units will be EMP'd for.EMP.Duration=EMP.Cap=

The game keeps track of how much longer each unit will remain paralyzed. Each unit essentially has a hidden EMP counter that counts down frame by frame until it reaches zero, at which point the unit will be re-activated. This counter is what gets modified by EMP warheads.

First we will look at positive EMP.Duration – the targets are going to be paralyzed.

Next we will look at negative EMP.Duration – for example, a friendly unit trying to re-activate the already-paralyzed unit.

[TechnoType]►ImmuneToEMP= (boolean)
The above flag specifies whether or not the TechnoType is immune to the effects of EMP. The default immunity status is determined based on the following rules:
  • BuildingTypes:
    ImmuneToEMP defaults to no for BuildingTypes that have Powered=yes and a negative Power= value set.
    ImmuneToEMP defaults to no for BuildingTypes that provide one or more of the following special functions:
    • Radar
    • Super weapons
    • Undeploy into a vehicle (e.g. Construction Yards)
    • Powers vehicles (e.g. Robot Control Centre)
    • Gap Generator
    • Sensors
    • Laser Fence Posts
  • InfantryTypes:
    ImmuneToEMP defaults to yes for InfantryTypes unless Cyborg=yes is set (in which case, ImmuneToEMP defaults to no.
  • VehicleTypes and AircraftTypes:
    ImmuneToEMP defaults to no for VehicleTypes and AiracraftTypes unless Organic=yes is set (in which case, ImmuneToEMP defaults to yes.

Manually setting ImmuneToEMP always overrides the default.

EMP immunity can also be granted via the new veteran/elite ability "EMPIMMUNE". Just set VeteranAbilities=EMPIMMUNE or EliteAbilities=EMPIMMUNE on the TechnoType.

EMP immunity also respects TypeImmune, AffectsAllies and AffectsEnemies on the warhead. ImmuneToEMP=

SellUnit

In Tiberian Sun you could sell units that were docked with a structure by using the normal Sell button on the sidebar. In Yuri's Revenge, a super weapon with Action=SellUnit achieves the same function. However, if such a super weapon were fired on a unit inside a Tank Bunker then an Internal Error would occur (sometimes this would be delayed until the destruction of the Tank Bunker). Ares prevents the error occurring.SellUnit super weapon no longer causes IEs with Tank Bunker.

PowerToggle

In Tiberian Sun there was a button on the sidebar that allowed players to turn their own buildings on and off and in low power situations. In Yuri's Revenge, a super weapon with Action=PowerToggle achieves the same function. However, if such a super weapon were fired into an empty cell then an Internal Error would occur. Ares prevents the error occurring.PowerToggle super weapon no longer causes IE when targetting an empty cell.

Spotlights

Spotlights would cause an Internal Error whenever they were created. The error no longer occurs so spotlights can now be used.Spotlights

[Unit]►HasSpotlight= (boolean)
If set to yes, creates a spotlight from the unit (note that this is now available to all of the Big Four types, not just BuildingTypes). When attached to a BuildingType, the spotlight still behaves like it used to, just circling around, but when it is attached to a different unit type, such as a VehicleType, it is fixed to shine straight ahead.HasSpotlight=
[Unit]►Spotlight.StartHeight= (integer - leptons)
Specifies the number of leptons above the ground at which the spotlight will be generated. Defaults to 250.Spotlight.StartHeight=
[Unit]►Spotlight.Distance= (integer - leptons)
The number of leptons ahead of the unit where the spotlight will reach the ground. Defaults to 1024.Spotlight.Distance=
[Unit]►Spotlight.AttachedTo= (enumeration - one of body|turret|barrel)
The part of the unit that the spotlight will align to in regards to facing. If set to "body" then the spotlight will be pointed in the direction the unit's body is facing, if set to "turret" then the spotlight will be pointed in the direction the unit's turret is facing. Does not work on BuildingTypes. Defaults to body.Spotlight.AttachedTo=
[Unit]►Spotlight.DisableRed= (boolean)
If set to yes then the spotlight will not emit any red light. Defaults to no.Spotlight.DisableRed=
[Unit]►Spotlight.DisableGreen= (boolean)
If set to yes then the spotlight will not emit any green light. Defaults to no.Spotlight.DisableGreen=
[Unit]►Spotlight.DisableBlue= (boolean)
If set to yes then the spotlight will not emit any blue light. Defaults to no.Spotlight.DisableBlue=
[Unit]►Spotlight.DisableColor= (boolean)
If set to yes then the spotlight will paint the ground darker, instead of brighter, and the disable red/green/blue flags mentioned above will be ignored.Spotlight.DisableColor=

Laser Fences

Laser Fences used to work in Red Alert 2 and Yuri's Revenge 1.000 but stopped working with the arrival of the 1.001 patch, in that the 'lasers' never turned on (this appears to have been an incidental change and not something Westwood did intentionally).

Laser Fences now work just the same as they did in Tiberian Sun. You need a BuildingType with LaserFencePost=yes to act as a corner post, and another BuildingType with LaserFence=yes which will be placed in between the corner posts automatically (see the original building's SHP from Tiberian Sun to see how the art is controlled). These fences are impassable to ground objects and invulnerable to normal damage, but when a corner post is destroyed, the fences connected to it are lost. When the corner post loses power, the fences connected to it go offline and become freely passable. When the post regains power, the fences reactivate and any object unfortunate enough to be traversing them will be destroyed.Laser FencesLaserFence=LaserFencePost=

Firestorm Wall

The Firestorm Wall and super weapon can now be implemented in Yuri's Revenge.
See the New Super Weapon Types: Firestorm section) for details.

Amphibious Voxel Changes

In Tiberian Sun, the Amphibious APC would appear to sink into the water. This was achieved by changing the imagery from apc.vxl to apcw.vxl. With Ares, you can now specify:
[VehicleType]►WaterVoxel= (any string)
...to make the amphibious unit's voxel change from XXXX.vxl to XXXXwo.vxl when in water.
NB: In future this will be changed to use the entered string as the voxel filename. WaterVoxel= Amphibious vehicles can change their voxel when moving between water/land.

New & Enhanced In-Game Logic

This chapter documents all the completely new features that have been added to the game.

Sides & Countries

In the original game the sides and countries were, for the most part, hard-coded. You could not add to, remove or reorder the 10 countries or 3 sides. Ares, however, makes these tasks possible – you can now have up to 16? countries and 16 sides, and you can customize these in numerous ways...New sides & countries (including numerous enhancements).

Countries

Countries are specified in the [Countries] list in rulesmd.ini. Any country with Multiplay=yes set will appear in the country selection drop-down list and be eligible for random selection if the player chooses 'Random'.Countries can be excluded from the 'random country' option, or given differing weights.

The [Countries] list can contain up to 32 countries, however taunts will only work for 16 of these.

Each country can be customized using the following flags in the country's INI section:
NB: The following filename specifications (where raw C-style format specifiers like %s are required) are going to be changed into safer versions in the future. The replacement style has not been decided yet.

[Country]►File.Flag= (filename, including the .pcx extension)
The PCX file to use for the country's flag, in the format "filename.pcx".File.Flag=
[Country]►File.LoadScreen= (filename, including the .shp extension)
The SHP file to use for the country's loading screen, in the format "filename%s.shp". The filename specified must include "%s", which will be substituted for the current screen width (640 or 800 pixels). For example, File.LoadScreen=ls%susstates.shp will make the game load ls800usstates.shp.File.LoadScreen=
[Country]►File.LoadScreenPAL= (filename, including the .pal extension)
The palette file to use for the country's loading screen, in the format "filename.pal".File.LoadScreenPAL=
[Country]►File.Taunt= (filename, including the Taunts\ directory and .wav extension)
Path of the files to use for the country's taunts, in the format "Taunts\filename%02i.wav". The filename specified must include "%02i", which will be substituted for the taunt ID (01 through 08). For example, File.Taunt=Taunts\tauam%02i.wav will make the game load taunts tauam01.wav through tauam08.wav.
NB: Taunts will only be registered for up to 16 countries.File.Taunt=
[Country]►LoadScreenText.Name= (CSF label)
Name of the country, displayed on the loading screen (where a map of the country is usually shown). For example, LoadScreenText.Name=Name:Americans.LoadScreenText.Name=
[Country]►LoadScreenText.SpecialName= (CSF label)
Name of the country's special weapon, displayed on the loading screen. For example, LoadScreenText.SpecialName=Name:apara.LoadScreenText.SpecialName=
[Country]►LoadScreenText.Brief= (CSF label)
Description of the country and its special weapon, displayed on the loading screen. For example, LoadScreenText.Brief=loadbrief:usa.LoadScreenText.Brief=
[Country]►MenuText.Status= (CSF label)
Brief description of the country, displayed in the status bar of the country selection screen when the player mouse-overs that country in the country selection drop-down list.MenuText.Status=
[Country]►RandomSelectionWeight= (integer)
Specifies how likely it is that this country will be randomly selected when a player chooses 'Random'. The probability of this country being picked is calculated by dividing this country's RandomSelectionWeight value by the sum of all Multiplay=yes countries' RandomSelectionWeight values. Defaults to 1.RandomSelectionWeight=
[Country]►AI.PowerPlants= (list of BuildingTypes)
A list of buildings that the AI will treat as this country's power plants.AI.PowerPlants=

Sides

Sides are specified in the [Sides] list in rulesmd.ini.

There is no limit to the number of sides that can be defined. However, only 16 fully-working countries can be implemented (see above).

Each side can (and should) define its own values for the following flags in the side's INI section:

[Side]►DefaultDisguise= (InfantryType)
Default InfantryType that disguisable infantry will be disguised as when first created.DefaultDisguise=
[Side]►Crew= (InfantryType)
The InfantryType that is spawned as a survivor when objects (with Crewed=yes set) owned by this side are destroyed (or, in the case of buildings, sold)Crew=
[Side]►SurvivorDivisor= (integer)
An object's refund amount is divided by this number to determine how many survivors will be spawned when this object is destroyed (or, in the case of buildings, sold).SurvivorDivisor=
[Side]►AI.BaseDefenses= (list of BuildingTypes)
List of base defense buildings that the AI can build.AI.BaseDefenses=
[Side]►AI.BaseDefenseCounts= (list of integers)
The maximum number of each corresponding base defense building (listed against AI.BaseDefenses) that the AI can build.AI.BaseDefenseCounts=
[Side]►LoadScreenText.Color= (R,G,B)
Text on the loading screen for this side will be displayed in this color.LoadScreenText.Color=
[Side]►ParaDrop.Types= (list of InfantryTypes and/or VehicleTypes)
The units that will be paradropped by Type=ParaDrop super weapons (such as the one normally provided by a Tech Airport) for this side. Defaults to [General]►AllyParaDropInf for GDI (Allied), [General]►SovParaDropInf for Nod (Soviet), and [General]►YuriParaDropInf for ThirdSide (Yuri).
NB: The original flags used to control the paradrop units only accept InfantryTypes. To include VehicleTypes in a paradrop you must use the new ParaDrop.Types and ParaDrop.Num flags.ParaDrop.Types=
[Side]►ParaDrop.Num= (list of integers)
The quantity of each corresponding unit (listed against ParaDrop.Types) that will be paradropped. Defaults to [General]►AllyParaDropNum for GDI (Allied), [General]►SovParaDropNum for Nod (Soviet), and [General]►YuriParaDropNum for ThirdSide (Yuri).ParaDrop.Num=
[Side]►Sidebar.MixFileIndex= (integer)
The MIX file number to use for the sidebar (e.g. 1 for the Allied sidec01.mix, 2 for the Soviet sidec02.mix)Sides can specify their own unique UI.Sidebar.MixFileIndex=
[Side]►Sidebar.YuriFileNames= (boolean)
Whether or not to use the Yuri sidebar file names (sidec02md.mix and the Yuri-specific files within that MIX).Sidebar.YuriFileNames=
[Side]►EVA.Tag= (EVA event)
Name of the INI tag to load from evamd.ini for this side's EVA (vocal interface assistant – e.g. Eva for Allied, Sofia for Soviet and Some Guy for Yuri).
NB: EVA.Tag is not yet implemented.EVA.Tag=

Weapons

[WeaponTypes] Section

This new section allows you to declare new weapons without having to declare a dummy unit to parse them (like the official "WEEDGUY" hack). This works in the same way as the existing [Warheads] section. Any WeaponType listed under the [WeaponTypes] section will be parsed by the game and can be used as a shrapnel weapon or a new weapon in a game mode, etc.

Radiation Beams

Before Ares, Radiation beams could not be customized – they were always either green or blue depending on the type of weapon. Now, however, radiation beams can be customized using the following flags (which affect weapons with IsRadBeam=yes set and/or IsRadEruption=yes set) in the weapon's INI section:Rad beams can have custom colors, duration and amplitude.

[Weapon]►Beam.Color= (R,G,B)
The color that the beam will be drawn in. Defaults to [AudioVisual]►ChronoBeamColor for weapons with a Temporal warhead, and [Radiation]►RadColor for weapons with a non-Temporal warhead.Beam.Color=
[Weapon]►Beam.IsHouseColor= (boolean)
Whether or not the beam should be drawn using the firing unit's player color instead of the specific color specified by Beam.Color.Beam.IsHouseColor=
[Weapon]►Beam.Duration= (integer)
The number of frames for which the beam should be visible. Default is 15 as per original RadBeams. The RadEruption effect originally used a random value between 5 and 20.Beam.Duration=
[Weapon]►Beam.Amplitude= (float)
The amplitude of the beam (possibly measured in pixels?). Defaults to 40.0 as per original RadBeams. The RadEruption effect originally used a random value between 100.0 and 500.0.Beam.Amplitude=

Electric Bolt Coloring

[Weapon]►Bolt.Color1= (R,G,B)
[Weapon]►Bolt.Color2= (R,G,B)
[Weapon]►Bolt.Color3= (R,G,B)
The three colors used to draw this Electric Bolt. Can be omitted to use the default values (default values are palette-dependent as opposed to RGB).Electric bolts can have custom colors.Bolt.Color1=Bolt.Color2=Bolt.Color3=

Wave Effects

An unused weapon effect (present in the game code but disabled) has been enabled. It is similar in appearance to the old laser beam or the old disruptor wave from previous games. For now it is referred to as Laser.Enabled unused IsLaser wave effect.

[Weapon]►Wave.IsLaser= (boolean)
[Weapon]►Wave.IsBigLaser= (boolean)

IsLaser and IsBigLaser should technically produce two different effects, however so far no difference has been observed.
The following flags are applicable to all Wave effects; the aforementioned Wave.Is(Big)Laser=yes as well as Sonic=yes and IsMagBeam=yes.Wave.IsLaser=Wave.IsBigLaser=

Wave Coloring

[Weapon]►Wave.Color= (R,G,B)
The color of the wave. Default value is different depending on the type of Wave.
NB: Sonic Waves do no yet have a sensible default Wave.Color.Wave.Color=
[Weapon]►Wave.IsHouseColor= (boolean)
If this is set to yes then the wave will be drawn in the firing unit's house color instead of the color specified by Wave.Color.Waves can have custom colors.Wave.IsHouseColor=

Wave Direction

Waves are drawn in different directions (from firer to target or vice versa) depending on the type of wave and the circumstances. This direction can now be customized in several ways. The following flags all default to no unless otherwise specified.

[Weapon]►Wave.ReverseAgainstVehicles= (boolean)
Whether or not the wave will be drawn from the target to the firer when the target is a VehicleType. Defaults to yes if IsMagBeam=yes is set on the weapon.Wave.ReverseAgainstVehicles=
[Weapon]►Wave.ReverseAgainstBuildings= (boolean)
Whether or not the wave will be drawn from the target to the firer when the target is a BuildingType.Wave.ReverseAgainstBuildings=
[Weapon]►Wave.ReverseAgainstInfantry= (boolean)
Whether or not the wave will be drawn from the target to the firer when the target is an InfantryType.Wave.ReverseAgainstInfantry=
[Weapon]►Wave.ReverseAgainstAircraft= (boolean)
Whether or not the wave will be drawn from the target to the firer when the target is an AircraftType.Wave.ReverseAgainstAircraft=
[Weapon]►Wave.ReverseAgainstOthers= (boolean)
Whether or not the wave will be drawn from target to firer when the target is anything not covered by the other 'ReverseAgainst' flags (i.e. trees, overlays, empty cells, etc.).Customisable wave direction.Wave.ReverseAgainstOthers=

Wave Ambient Damage

All waves can now deal disruptor-style damage to objects that they pass through, a feature that was previously limited to Sonic Waves only. As a reminder, the flags that control this are:

[Weapon]►AmbientDamage= (integer)
How much damage the wave deals to objects it passes through. Defaults to zero.
[Weapon]►Warhead= (WarheadType)
The warhead used to deal ambient damage as well as normal damage.Customisable Ivan bomb clones.

Customizable Ivan Bombs

As with many other features of Yuri's Revenge, the settings that control Crazy Ivan Bombs are global so you can't have multiple variations of them with their own controls. With Ares it is now possible to create new Ivan Bomb-esque weapons – new types of sticky bomb with whatever settings you like. The only aspect of Ivan Bombs that hasn't been de-globalized is the ability to remote detonate the bombs – this feature is either enabled or disabled for all Ivan Bomb types.

When IvanBomb=yes is set on the weapon's warhead, the weapon can specify the following flags in order to customize that bomb.

[Weapon]►IvanBomb.Warhead= (WarheadType)
The warhead that will be used when the bomb detonates.IvanBomb.Warhead=
[Weapon]►IvanBomb.Damage= (integer)
The damage that will be dealt when the bomb detonates.IvanBomb.Damage=
[Weapon]►IvanBomb.Detachable= (boolean)
Whether or not Engineers can remove this bomb from units it has been attached to.IvanBomb.Detachable=
[Weapon]►IvanBomb.DestroysBridges= (boolean)
Whether or not this bomb can be used on Bridge Repair Huts in order to destroy the corresponding Bridge.
NB: Bombs can always be attached to Bridge Huts, but the resulting explosion will not destroy the bridge unless IvanBomb.DestroysBridges=yes is set.IvanBomb.DestroysBridges=
[Weapon]►IvanBomb.Delay= (integer)
The number of frames that will elapse before the bomb detonates automatically.IvanBomb.Delay=
[Weapon]►IvanBomb.AttachSound= (Sound name)
The sound that will be played when the bomb is attached to a target.IvanBomb.AttachSound=
[Weapon]►IvanBomb.TickingSound= (Sound name)
The sound that will be played whilst the bomb is attached to a unit. In order for this sound to loop correctly, the sound must have Control=loop set in its INI section in soundmd.ini.IvanBomb.TickingSound=
[Weapon]►IvanBomb.Image= (filename, including the .shp extension)
The SHP file for the image to display over a unit that has a bomb attached to them, in the format "filename.shp". If the image cannot be loaded then the game will fall back to the default bombcurs.shp.IvanBomb.Image=
[Weapon]►IvanBomb.FlickerRate= (integer)
The rate at which the bomb SHP will flip back and forth between two frames to give the impression of a flickering fuse.
On every game frame, the frame of the bomb SHP is calculated as follows:
frameToShow = (Game.CurrentFrame – Bomb.PlantingFrame) / (Bomb.Delay / (Bomb.Image.Frames – 1))
IF (CurrentFrame mod (2 * Bomb.FlickerRate) >= Bomb.FlickerRate) THEN frameToShow = frameToShow + 1
Originally this logic was hard-coded to ignore the last frame of the bomb SHP, which was originally planned to be used for so called "death bombs" which were cut from the game before Red Alert 2 was released. This hard-coding has been changed so that the whole SHP is now considered for the fuse, however this means that you'll now see that extra frame from bombcurs.shp, unless you replace that SHP file.
Image of bombcurs.shp IvanBomb.FlickerRate=

Warheads

Iron Curtain Effect

[Warhead]►IronCurtain.Duration= (integer)
Endows the target unit(s) with the Iron Curtain effect for the specified number of frames, if they are not already under the effect. Units that are already under the effect will have the duration of the effect extended by the specified number of frames (the duration is cumulative rather than absolute).
If the duration value is negative then a unit's current Iron Curtain effect (if any) will be shortened by the specified number of frames (so you could create a weapon that will nullify the Iron Curtain effect by setting IronCurtain.Duration=-99999).IronCurtain.Duration=

This feature works with CellSpread to affect multiple targets.
NB: No other warhead properties (e.g. Verses) affect the application of this effect.Weapons can apply the Iron Curtain effect for a specified number of frames (stackable).

Permanent Mind-Control

[Warhead]►MindControl.Permanent= (boolean)
If the warhead has MindControl.Permanent=yes set as well as MindControl=yes set then the mind-control will be permanent.MindControl.Permanent=

Permanent mind-control is handled in the same way as the Psychic Dominator effect – previously-mind-controlled units (even permanently) are re-mind-controlled, and the mind-controller does not have a limit on the number of units that it can permanently mind-control.

Unlike the Psychic Dominator, buildings are susceptible to permanent mind-control if the warhead can target them.Permanent mind-control weapons.

Customizable WarpAway

If [Warhead]►Temporal.WarpAway is set, it specifies the animation to be played when this warhead erases an object, instead of [General]►WarpAway=.Per-weapon WarpAway animation.Temporal.WarpAway=

Ion Cannon Ripple Effect

[Warhead]►Ripple.Radius= (integer, scale unknown)
This generates a visual shockwave when the warhead detonates, identical to the one produced by Tiberian Sun's Ion Cannon. It is recommended that you don't set Radius above 79. Note that this is a visual effect only.Ion Cannon ripple effect for weapons.Ripple.Radius=

Deployed Infantry Damage multiplier

[Warhead]►Deployed.Damage= (float - multiplier)
A multiplier applied to Damage if the InfantryType receiving it is currently deployed.Deployed.Damage=

Note that this is not the same as the existing ProneDamage= flag; deployed units are not considered to be prone. Defaults to 100%.Per-warhead damage multiplier against deployed infantry.

AffectsEnemies

[Warhead]►AffectsEnemies= (boolean)
Specifies whether or not this warhead can damage enemy units. This has no effect on the warhead's ability to target enemy units. A counterpart to the existing AffectsAllies flag.AffectsEnemies= flag added (counterpart for AffectsAllies=).AffectsEnemies=

InfDeathAnim

[Warhead]►InfDeathAnim= (string, animation ID)
Specifies the animation to display when an InfantryType (with NotHuman=no) is killed by this warhead. Works in the same way as existing InfDeath animations except this flag allows you to specify an animation ID rather than an integer. Further more, the animation will be treated as the correct type (e.g. mutation or non-mutation) automatically, which means that you can now have any number of mutations that produce player-owned InfantryTypes. See MakeInfantryOwner for how to control which player will gain control of 'mutated' infantry.New InfDeaths (InfDeathAnim= any animation, auto-detect mutation).InfDeathAnim=

Additional ArmorTypes and Verses

The new [ArmorTypes] section can be used to define new ArmorTypes for objects (in addition to the 11 existing ArmorTypes; none, flak, plate, light, medium, heavy, wood, steel, concrete, special_1 and special_2).

[ArmorTypes]
paper=steel
magic=11%

paper=steel declares a new ArmorType called "paper" whose Verses on each warhead defaults to being the same as that warhead's Verses against the "steel" ArmorType. magic=11% declares a new ArmorType called "magic" whose Verses on all warheads defaults to 11%.
These ArmorTypes can be assigned to objects in the same way as the standard ArmorTypes (case-insensitively). Their susceptibility to specific warheads can be specified as follows:

[Warhead]►Versus.magic=150%
makes this warhead very good at damaging objects with Armor=magic.Versus.*=

Note that each individual ArmorType's versus value is specified using the new "Versus.*" flag, whereas the original 11 ArmorTypes versus values are specified using the original Verses flag (note Westwood's misspelling of "versus").

The original Verses= flag parser no longer crashes if you specify less than 11 values.Additional armor types which can default to reacting like an existing armor type.ArmorTypes

Warhead Verses' Special Values

The Verses flag has three special-case values that can be used to define additional behavior:

These behaviors can now be toggled on or off independently of the damage multiplier (so you can now have a warhead that is 100% effective against an armor type but, at the same time, will not directly target a unit with that ArmorType).

[Warhead]►Versus.magic.ForceFire= (boolean)
Whether or not this warhead is allowed to be force-fired on the "magic" ArmorType.Versus.*.ForceFire=
[Warhead]►Versus.steel.Retaliate= (boolean)
Whether or not this warhead is allowed to be used in retaliation against the "steel" ArmorTypeVersus.*.Retaliate=
[Warhead]►Versus.clingfilm.PassiveAcquire= (boolean)
Whether or not this warhead is allowed to be used to attack the "clingfilm" ArmorType automatically.Versus.*.PassiveAcquire=

Note Ares' correct spelling of "acquire".Warhead verses special behaviours can be decoupled from Verses (ForceFire/Retaliate/PassiveAcquire).

MakeInfantryOwner

The original MakeInfantry logic would always grant ownership of newly-created infantry to the neutral side, unless the animation was caused by an InfantryType being killed by an InfDeath=9 warhead (in which case the killing player would get ownership of the new InfantryType). Ares lets you choose which player will gain ownership, from one of several options.

[Animation]►MakeInfantryOwner= (enumeration – invoker|killer|victim|neutral|random)
Specifies which house will own the resulting InfantryType that gets created after this animation has played. The animation's re-mappable colors will be shown in that house's color.

Note that this is not a warhead property – it goes on the corresponding animation entry in artmd.ini. However, MakeInfantryOwner only works for specific animations; namely those invoked by InfDeathAnim, DeathAnims and map triggers. The deafult MakeInfantryOwner is 'invoker', which corresponds to a different player depending on the animation.

'random' will pick a random player from all players in the game, including neutral.
NB: Like InfDeath=9, all mutation animations will be rendered in the unit palette instead of anim.pal.MakeInfantry animations (InfDeathAnim, DeathAnims, map triggers) can choose who the owner will be as killer|victim|neutral|random.MakeInfantryOwner=

Super Weapons

In Yuri's Revenge, there is very little you can do to change or add to the existing super weapons – most super weapon-related features are hard-coded to only work as designed for the original super weapons. Ares, however, includes several new ways to customize existing super weapons as well as several wholly new super weapons.Super Weapons:

Building Animations

Buildings can display specific animations for when the attached super weapon is charging, is nearly charged (1 minute remaining in the normal game), is ready to be fired, and when it fires. However, in Yuri's Revenge, these animations only work properly for the original super weapons. In Ares, these will work for any super weapon.Building animations played correctly for new super weapons.

Cursors

Setting Action=Custom on a super weapon will allow you to specify custom mouse cursors for the super weapon, using the following flags:Custom cursors.

[SuperWeapon]►Cursor.Frame= (integer)
Starting frame of the cursor from mouse.sha. Defaults to the Attack cursor.Cursor.Frame=
[SuperWeapon]►Cursor.Count= (integer)
Number of frames in the animated cursor.Cursor.Count=
[SuperWeapon]►Cursor.Interval= (integer)Cursor.Interval=
How often to animate the cursor? Default is 5.
[SuperWeapon]►Cursor.MiniFrame= (integer)
Same as Cursor.Frame, except this is for the mouse cursor when positioned on the minimap.Cursor.MiniFrame=
[SuperWeapon]►Cursor.MiniCount= (integer)
Same as Cursor.Count, except this is for the mouse cursor when positioned on the minimap.Cursor.MiniCount=
[SuperWeapon]►Cursor.HotSpot= (HotSpot X, HotSpot Y)
Specifies the coordinates on the cursor that are considered to be the 'tip' – that is, the point from which the click event will handled. HotSpot X should be one of "Left", "Center" or "Middle". HotSpot Y should be one of "Top", "Middle" or "Bottom".
For example, Cursor.HotSpot=Left,Top will treat the top-left corner of the cursor as the tip. Default is "Center,Middle".

All of the above "Cursor." flags have a corresponding "NoCursor." flag, which allows you to specify the cursor that will be displayed then the mouse pointer is positioned over a point where the super weapon cannot be fired (e.g. the Force Shield cannot be fired over empty ground, so will display an alternate cursor to indicate this).Cursor.HotSpot=

[SuperWeapon]►NoCursor.Frame=
[SuperWeapon]►NoCursor.Count=
[SuperWeapon]►NoCursor.Interval=
[SuperWeapon]►NoCursor.MiniFrame=
[SuperWeapon]►NoCursor.MiniCount=
[SuperWeapon]►NoCursor.HotSpot=
The "NoCursor." flags default to the same value as their "Cursor." counterparts.NoCursor.Count=NoCursor.Frame=NoCursor.HotSpot=NoCursor.Interval=NoCursor.MiniCount=NoCursor.MiniFrame=

Cost

The firing of a super weapon can now add or subtract credits from the firing player's cash reserve.

[SuperWeapon]►Money.Amount= (integer – credits)
This many credits are added to the firing player's account when the super weapon is fired. Use a negative number to subtract credits.Money.Amount=

NB: Players are not prevented from firing the super weapon if they do not have sufficient funds for the Money.Amount being subtracted.Money deductable when firing a superweapon.

Animation/Sound

[SuperWeapon]►SW.Animation= (animation)
The animation to display at the super weapon's target cell.SW.Animation=
[SuperWeapon]►SW.AnimationHeight= (integer)
How high above the target cell to display the animation.Custom animation played at target cell.SW.AnimationHeight=

Targeting

[SuperWeapon]►SW.FireIntoShroud= (boolean)
Whether or not this super weapon is allowed to fire into an unexplored area of the map. Default is yes.FireIntoShroud optional.SW.FireIntoShroud=

EVA Events

[SuperWeapon]►EVA.Detected= (EVA event)
The EVA event that will be triggered when the super weapon building is constructed (the EVA event is not played for the owner of the building).EVA.Detected=
[SuperWeapon]►EVA.Ready= (EVA event)
The EVA event that will be triggered when the super weapon is ready to fire (the EVA event is only played for the owner of the super weapon).EVA.Ready=
[SuperWeapon]►EVA.Activated= (EVA event)
The EVA event that will be triggered when the super weapon is fired.EVA.Activated=

NB: There is a known bug that can cause the EVA events to be played incorrectly.Custom EVA events.

Enhanced Super Weapon Types

Type=ParaDrop

The original flags that control the units provided by the generic paradrop super weapons (AllyParaDropInf, SovParaDropInf and YuriParaDropInf) only accept InfantryTypes. If you try to include a VehicleType via these lists then the game will create a new InfantryType instead - with the same parameters as the existing VehicleType - ultimately resulting in an invisible InfantryType being delivered in the paradrop.

With Ares, there are 2 new side-specific flags (ParaDrop.Types and ParaDrop.Num) that override the old flags. These new flags will accept VehicleTypes as well as InfantryTypes.

		[Side]►ParaDrop.Types=E1,MTNK,FV
		[Side]►ParaDrop.Num=6,2,1
	

NB: Because the new flags are side-specific, this means there is still a limit of 1 unique paradrop set per side. This will be addressed in the future.ParaDrops can include vehicles.

Type=SpyPlane
[SuperWeapon]►SpyPlane.Type= (AircraftType)
The AircraftType that will be sent as a spy plane. Defaults to SPYP.SpyPlane.Type=
[SuperWeapon]►SpyPlane.Count= (integer)
The number of spy planes to be sent out. Defaults to 1.SpyPlane.Count=
[SuperWeapon]►SpyPlane.Mission= (mission)
The mission that the aircraft will be sent on (Guard, Attack, Move, etc). Defaults to SpyPlane_Approach.SpyPlane can now specify which AircraftType, how many, and what mission to perform.SpyPlane.Mission=
Type=Nuke
[SuperWeapon]►Nuke.Sound= (sound)
The sound to use for the Nuke siren. Defaults to [AudioVisual]►DigSound=.Custom nuke siren sound.Nuke.Sound=

New Super Weapon Types

NB: The AI cannot use the new SuperWeapon Types yet. Control similar to RockPatch's AITargetingType= will be added soon.

Type=SonarPulse

The Sonar Pulse is a variation of the original Red Alert Sonar Pulse - it can only be fired into water cells and will cause any cloaked units situated on a water cell to temporarily decloak.

[SuperWeapon]►SonarPulse.Range= (integer)
The radius, in cells, that the decloak effect will be applied.SonarPulse.Range=
[SuperWeapon]►SonarPulse.Delay= (integer)
The duration, in frames, that the decloak effect will last.SonarPulse.Delay=

NB: If the affected unit gained its cloaking ability via VeteranAbilities or EliteAbilities then it will only decloak for a moment, as opposed to the full duration specified by the super weapon.New super weapon type: SonarPulse (briefly reveals cloaked units).

Type=GenericWarhead

The Generic Warhead super weapon will detonate the specified warhead at the target cell.

[SuperWeapon]►GenericWarhead.Warhead= (warhead)
The warhead that will be detonated when in the target cell when the super weapon is fired. Note the warhead is detonated in a cell, not on a unit, so chances are you will want to set a CellSpread on the warhead to make sure the desired targets (especially InfantryTypes) are affected.GenericWarhead.Warhead=
[SuperWeapon]►GenericWarhead.Damage= (integer)
The amount of damage that will be dealt by the warhead.New super weapon type: GenericWarhead (detonate any warhead at target cell).GenericWarhead.Damage=
Don't forget that the BuildingType will need DamageSelf=yes set (just like the Soviet Nuclear Missile Silo) if you want the warhead to be capable of damaging the firing building.
Type=UnitDelivery

The Unit Delivery super weapon will create the specified unit(s) in the target cell. This uses the CellSpread model to place the units.

[SuperWeapon]►SW.Deliver= (list of TechnoTypes)
The list of units that will be delivered. This works for infantry, vehicles, aircraft and buildings.SW.Deliver=
[SuperWeapon]►SW.DeliverBuildups= (boolean)
Whether or not buildings delivered by this super weapon should play their buildup animation prior to becoming available.SW.DeliverBuildups=

All objects are placed on the ground, including aircraft. Flying units that never land (e.g. the Rocketeer and Kirovs) will take off.
If a cell is occupied, the super weapon will retry on the next cell and so on, until the object gets placed. Once the first unit is placed, this process starts again for the next item in the list. Infantry squads are grouped in a single cell. The search will skip an item if it has not been placed after testing 100 cells.

You can mix in naval units and they will be placed where they can normally exist.

If you have more than one building, the resulting placement might look odd.

The actual delivery of the units happens all at once, on the 20th frame after firing the super weapon. This delayed-effect logic will most likely be customizable in future and so, in future, the delay for this super weapon may default to a different amount.New super weapon type: UnitDelivery (create unit(s) at target cell).

Type=Firestorm

This superweapon is a recreation of the Tiberian Sun Firestorm superweapon.
When activated, all structures owned by the firing player that have Firestorm.Wall=yes set will emit an energy field, blocking all hostile projectiles (except those with SubjectToFirestorm=no set) from passing through. The energy field also destroys any friend or foe unlucky (or stupid) enough to come into direct contact with active cells.

BuildingTypes with Firestorm.Wall=yes set will act as a section of the Firestorm Wall and auto-connect to other nearby pieces (check the original building's SHP from Tiberian Sun to see how the art is controlled).

This Superweapon uses the old Charge-Drain logic: once activated, the effect will persist for a duration determined by [General]►ChargeToDrainRatio, after which it will automatically shut down and the superweapon will restart its charging process. Whilst the effect is active you can click the super weapon button again to manually deactivate it, thus allowing the recharge process to begin earlier and finish faster. Refer to ModEnc for more information about Charge-Drain logic.

In Tiberian Sun, the Charge-Drain feature was disableable through an INI flag ([SuperWeapon]►UseChargeDrain=no) however: Ares forces this logic to be used regardless of the value of that flag. Ares also forces this super weapon to ignore its assigned Action, if any, as this is required to make it activate from a single click of the sidebar icon.
NB: The animations used by this logic are temporarily hard-coded to "FSIDLE", "FSGRND" and "FSAIR", as was used in Tiberian Sun.
NB: The AI has a lot of problems with targets behind an active Firestorm Wall, although this should not be a major problem due to the relatively small amount of game time that the Wall is active for. Firestorm Wall Firestorm.Wall= SubjectToFirestorm=

Survivors

In the original Red Alert, pilots would parachute from destroyed aircraft. Ares reintroduces this feature along with some additional improvements, all of which are customizable.

AircraftTypes and VehicleTypes have the option of spawning a pilot (or driver) when they are destroyed. In order for a pilot to be spawned from an airborne unit, the ground beneath the destroyed unit must be clear.

The following flags control the percent chance of a survivor being spawned, and the type of unit that that survivor will be.

[Unit]►Survivor.Side#= (InfantryType) (where # is the zero-based index of the side – e.g. 0 for Allied, 1 for Soviet, 2 for Yuri)
The InfantryType that can emerge from this unit as a survivor when the unit was owned by the corresponding side. For example, Survivor.Side0=E1 would cause the spawned survivor (if any) to be a GI when the destroyed unit was owned by an Allied player.
Defaults to the owning side's Crew=.Survivor.Side#=
[Unit]►Survivor.PilotCount= (integer)
The number of pilots that will attempt to be spawned when this unit is destroyed (provided that the ground beneath the destroyed unit is clear).
Defaults to 1 if the unit has Crewed=yes set, 0 otherwise.Survivor.PilotCount=
[Unit]►Survivor.RookiePilotChance= (integer between 0 and 100)
[Unit]►Survivor.VeteranPilotChance= (integer between 0 and 100)
[Unit]►Survivor.ElitePilotChance= (integer between 0 and 100)
The percent chance that each individual pilot will be spawned when this unit is destroyed.
Defaults to [General]►CrewEscape=50%Survivor.RookiePilotChance=Survivor.VeteranPilotChance=Survivor.ElitePilotChance=
[Unit]►Survivor.RookiePassengerChance= (integer between 0 and 100)
[Unit]►Survivor.VeteranPassengerChance= (integer between 0 and 100)
[Unit]►Survivor.ElitePassengerChance= (integer between 0 and 100)
Determines the percent chance that each of the unit's passengers (if any) will survive. Rookie/Veteran/Elite refers to the veteran level of the transport unit – a unit with a higher veteran level could be made to have a greater (or lesser) chance of allowing its passengers to survive. Passengers will be spawned in the cells around the destroyed unit and, so, if these cells are not clear then the passengers will not be spawned.Survivor.RookiePassengerChance=Survivor.VeteranPassengerChance=Survivor.ElitePassengerChance=

These flags default to a special-case value of -1 which means "use the original game logic" (i.e. land-based vehicles such as the Battle Fortress will eject their passengers but jumpjet vehicles such as the Nighthawk will not).
Note that, for airborne vehicles such as the Nighthawk, there is no way to say "passengers can survive on the ground, but aren't allowed to paradrop from the air" – if they can survive they can survive.

If either the pilots or any passengers are 'killed' because they were not spawned (i.e. because the ground was not clear or the random chance did not luck in) then they count as having been killed by the unit that killed the transport. If Survivor.PilotChance=0 then the pilots will not count as having been killed (however, passengers will always count as having been killed, even if Survivor.PassengerChance=0).

Spawned pilots will be spawned with 50% of their maximum health and the same amount of experience as the destroyed unit had. Passengers will emerge with both their health and their experience unchanged.Percent chance for pilots and/or passengers to emerge/parachute from destroyed vehicles/aircraft.

Operator

Any TechnoType can now require a specific InfantryType to be among its passengers before it will function.

[TechnoType]►Operator= (string, either an InfantryType or "_ANY_")
Specifies the InfantryType that must be among the TechnoType's passengers before the TechnoType will function. If "_ANY_" (sans quotes) is specified then it doesn't matter which InfantryType is inside as long as some InfantryType is.Operator=

On the TechnoType you will need to set Passengers=1 (or higher) and SizeLimit=1 (or higher).

For BuildingTypes you will also need to set InfantryAbsorb=yes.

If the needed passenger is not inside then the TechnoType will power down in a similar fashion to the Robot Tank when the Robot Control Centre is offline – the unit will not be able to move or fire.

BuildingTypes without their Operator will not be able to fire their weapon, if they have one.

No other building-specific functions will be affected (e.g. providing power, being a factory, undeploying, super weapons, radar, etc).

Mirage Tanks without their Operator will still maintain their disguise.

NB: The AI behaves unpredicatably when faced with units that require Operators and may not be subject to certain effects. You should prevent the AI from building anything that requires an Operator.Vehicles and buildings can be made to require an operator (driver) before they will function.

Solid Buildings

Buildings can now be made 'solid' to projectiles, meaning that projectiles will detonate when hitting a building rather than passing through it.
In rulesmd.ini:

[Projectile]►SubjectToBuildings= (boolean)
Whether or not this projectile can be blocked by solid buildings. Defaults to no.SubjectToBuildings=

In artmd.ini:

[BuildingArt]►SolidHeight= (integer – cells)
How tall the solid part of the building is considered to be, measured in cells (each cell has a height of 256 leptons), so buildings with a large amount of clear space near their top can allow projectiles to fly through that space. Negative values (e.g. -1) tell the game to consider the building's full Height as solid. Default is zero, meaning the building is not at all solid (as per the normal game).
NB: The solid building logic does not lend itself well to non-rectangular buildings, such as the Paris Tower or Space Needle.SolidHeight=

NB: The solid building logic does not lend itself well to non-rectangular buildings, such as the Paris Tower or Space Needle.Buildings can be made solid (like walls) to certain projectiles.

Urban Combat – Trenches

This section covers several new features that were designed together in order to allow mod authors to add occupiable trenches to the game.
These features do not all have to be used together to implement trenches though - each feature has been designed to be customizable and can be used separately.
NB: This means that these individual features do not distinguish between buildings that are a trench and buildings that are not. It is important that you understand how each new flag works - both on its own and in conjunction with other trench-related flags.Numerous features added to support trenches:

Pass Through

Urban Combat buildings can now specify what percentage of attacks against them will 'pass through' to the occupants inside – damaging them rather than the building itself.Weapons can be made to pass through urban combat buildings to the occupants inside (including fatal chance and damage modifier).

[BuildingType]►UC.PassThrough= (float - chance)
The percentage of shots that will pass through to the occupants (and therefore not damage this building). Defaults to zero percent (i.e. all shots damage the building / no shots damage the occupants). When there are no occupants inside then UC.PassThrough will be ignored (i.e. all shots damage the building).UC.PassThrough=
[BuildingType]►UC.FatalRate= (float - chance)
In the event that a shot has passed through, the percentage of those shots that will instantly kill one occupant, disregarding the weapon entirely. Defaults to zero percent.UC.FatalRate=
[BuildingType]►UC.DamageMultiplier= (float - multiplier)
If a shot has passed through but isn't necessarily fatal then one occupant will be damaged. The damage dealt by the weapon will be multiplied by UC.DamageMultiplier. Defaults to 100% (i.e. no change to the damage dealt by the weapon).UC.DamageMultiplier=
[Projectile]►SubjectToTrenches= (boolean)
Whether or not this projectile will override the normal UC.PassThrough chance on targeted buildings. If the projectile has SubjectToTrenches=no set, and the target building has UC.PassThrough set greater than zero, then the building will be treated as if it had UC.PassThrough=100%, when hit by this projectile. If SubjectToTrenches=yes is set (default), then the normal UC.PassThrough chance will be used when the building is hit by this projectile.SubjectToTrenches=

SubjectToTrenches was very much intended for trenches - a Grenadier, for example, would easily be able to drop their grenade into an open trench and would therefore definitely harm the occupants.
NB: The name 'SubjectToTrenches' is misleading if you are not thinking about trenches. This has an effect on all occupiable buildings with UC.PassThrough > 0%.

Illustration of different SubjectToTrenches values Illustration of different UC.PassThrough values

Squatters' Rights

You can now specify that Battle Bunkers, for example, can be captured by enemy infantry just by having them walk in and garrison the building as if it were their own.

[BuildingType]►Bunker.Raidable= (boolean)
Whether or not this building can be garrisoned by an enemy player's infantry, provided the building is not already occupied.Bunker.Raidable=

If Bunker.Raidable=yes is set and the building is empty then the building can be garrisoned by any player's infantry. When another player garrisons the building, ownership is transferred to that player. At this point the building can only be further garrisoned by the player whose troops are inside. If the occupants leave the building then ownership of the building is transferred back to its original owner. Whilst a building is held by a player that is not the "true" owner, that building cannot be sold.Unoccupied player buildings can be garrisoned by enemy infantry.

Advanced Rubble

If you really hit a trench hard enough to destroy it you're only doing one of two things; either you're turning a small hole into a larger hole, or you're making it collapse. Either way, you don't really remove the trench from the battlefield - just render it unusable. It will be easier to re-dig a trench there than on untouched soil, and, on the other hand, you can't just build there like nothing ever happened.

Advanced Rubble is implemented in a similar way to other upgrade systems in Ares:

[BuildingType]►Rubble.Destroyed= (BuildingType)
The new BuildingType that this BuildingType will transform into upon destruction. Buildings that are created via Rubble.Destroyed will have the following properties forced upon them:
Capturable=no
TogglePower=no
Unsellable=yes
ClickRepairable=no
CanBeOccupied=no
The building will be created with 99% of its maximum Strength. This, combined with ClickRepairable=no, ensures that Engineers will get a repair cursor over the building.Rubble.Destroyed=
[BuildingType]►Rubble.Intact= (BuildingType)
The new BuildingType that this BuildingType will transform into when it is repaired.Rubble.Intact=

Note that Engineers will not be 'used up' by this repair process - they keep existing outside of the trench. This is very much intended for trenches: an Engineer would not be repairing/rebuilding an entire building, just re-digging a trench so his work would not be too exhausting.
NB: You should ensure that the in-tact trench and the collapsed trench both have the same Foundation. Otherwise, if the necessary cells are not clear, the replacement BuildingType will not get created.Buildings can be converted into a different building on destruction (rubble) and back again on repair by an engineer.

Known bug: #850

Traversing Trenches

A major concept of trenches is the ability for infantry to move from one segment of a trench to the next, on the basis that adjacent segments are connected and, in essence, the same trench.

[BuildingType]►IsTrench= (string - trench type ID)
Specifies a unique name for this particular trench so that the game knows that it is a trench for traversal purposes, and allows occupants to transfer between segments of the same trench type.IsTrench=

For example, let's say you have IsTrench=AlliedModern. You have 2 segments of this trench adjacent to one another and one of these segments is garrisoned. If you select the garrisoned segment and then position the mouse cursor over the adjacent segment, you will get an 'enter' cursor over the adjacent segment. Clicking now with the enter cursor showing will transfer the occupants from the garrisoned segment into the adjacent segment.
NB: There is no special image-handling with IsTrench logic (yet); you will not get nice rows of trenches with proper joins/closed off ends like you do with, say, walls or Laser Fences.Infantry can jump from one urban combat building to an adjacent one.

Custom Building Foundations

Building Foundations can now be any shape and size, not just the few predefined options previously available. For example, you can now recreate the old Red Alert Repair Depot foundation. The INI coding is rather complex, so instead of writing it manually, it's recommended to use the Custom Foundation Generator developed by Renegade.

When creating foundations, don't forget to create the outlines.

NB: War Factories are hard-coded to use the unit exit paths from the original game so changing the foundation for these buildings is not recommended. The preferred exit point for a unit exiting a War Factory is hard-coded to be the 11th cell of the Outline. Buildings can have any size and shape of custom foundations.

Prerequisites

The prerequisite system has been enhanced in several ways. New flags are described below, and an issue has been resolved with regard to upgrades as prerequisites (see Type 2 Fixes).Prerequisites:

[Unit]►Prerequisite.RequiredTheaters= (list of theater names)
The map theaters in which the unit is available. Defaults to all theaters. For example, if only the SNOW theater were specified then the unit would only be available on arctic maps. This allows you to implement, for example, the AlternateArcticArt functionality used on the Navy SEAL, but for all unit types and all theaters (however this may present challenges for your AI). The theater names are:
  • TEMPERATE - most maps
  • SNOW - arctic/snowy maps
  • URBAN - some city maps
  • DESERT - some desert maps, older maps use Temperate
  • LUNAR - Soviet Mission 6
  • NEWURBAN - most YR urban maps
PrerequisiteOverride does not override Prerequisite.RequiredTheaters.Units can require the map to be a specific theater (desert/snow/lunar/etc).Prerequisite.RequiredTheaters=
[Unit]►Prerequisite.Negative= (list of BuildingTypes)
The buildings that preclude construction of the unit. If the player owns one or more of the buildings on this list then the unit will not be available.
PrerequisiteOverride does not override Prerequisite.Negative.PrerequisiteNegative makes a unit unavailable if a building on the list is owned.Prerequisite.Negative=
[Unit]►Prerequisite.Lists= (integer)
Specifies how many extra Prerequisite lists are available (see below). Defaults to zero.Prerequisite.Lists=
[Unit]►Prerequisite.List#= (list of BuildingTypes) (where # is the 1-based index of the prerequisite list, the maximum specified by Prerequisite.Lists)
Each prerequisite list acts as an independent copy of the existing Prerequisite flag. For example, if you set Prerequisite=GAPILE,GATECH and Prerequisite.List1=NAHAND,NATECH then the unit will be available to any player who owns both an Allied Barracks and Battle Lab, or a Soviet Barracks and Battle Lab (a minimum of one of the prerequisite lists must be satisfied).
Prerequisite.List0, if specified, overrides the existing Prerequisite flag.Multiple separate prerequisite lists - a unit can require any one of several sets of buildings.Prerequisite.List#=
[Unit]►Prerequisite.StolenTechs= (list of integers)
The list of stealable technology types that must be stolen before this object can be built. See Stolen Technology for more information.New StolenTech requirements.Prerequisite.StolenTechs=

Below is a flowchart of the current prerequisite system. Blue sections are unchanged from the original system. Pink sections have been modified or added by Ares.

Flowchart of the current prerequisite system

Generic Prerequisite Groups

You can now create custom generic prerequisite groups like the existing POWER (PrerequisitePower), FACTORY (PrerequisiteFactory), BARRACKS (PrerequisiteBarracks), RADAR (PrerequisiteRadar), TECH (PrerequisiteTech) and PROC (PrerequisiteProc and PrerequisiteProcAlternate) groups.

To create new groups simply include the new [GenericPrerequisites] section and add flags with the format GROUPNAME= (list of BuildingTypes). For example:

[GenericPrerequisites]
NAVALYARD=GAYARD,NAYARD,YAYARD
CONYARD=GACNST,NACNST,YACNST
AIRFORCE=GAAIRC,AMRADR

If you declare any of the existing groups (POWER/FACTORY/BARRACKS/RADAR/TECH/PROC) then the BuildingTypes specified in the [GenericPrerequisites] section will be used instead of those specified on the original PrerequisiteGroup flags (i.e. [GenericPrerequisites]►POWER=, if specified, overrides [General]►PrerequisitePower=). Take note that [GenericPrerequisites]►PROC= does not override or nullify [General]►PrerequisiteProcAlternate=.New Prerequisite Groups.GenericPrerequisites

Secret Labs

Secret Lab logic had some flaws which have been resolved (see Type 1 Fixes). In addition to those fixes, Secret Lab logic has been extended with the following 'per building' flags. SecretLab=yes must be set on the building before it will be treated as a Secret Lab and so allow these flags to be considered.

[Building]►SecretLab.PossibleBoons= (list of TechnoTypes)
Specifies all the buildings, vehicles, infantry and aircraft that this particular building could potentially award as a secret lab boon. The original Secret Lab system had three separate flags to control this which were all global and did not allow for AircraftTypes.SecretLab.PossibleBoons=
[Building]►SecretLab.GenerateOnCapture= (boolean)
The boon offered by a Secret Lab is picked when the building is first created (or on map load if it is pre-placed). If SecretLab.GenerateOnCapture=yes is set then every time the building is captured it will re-pick the boon to be offered. Defaults to no.SecretLab.GenerateOnCapture=

Each possible boon can specify the following flags...

[Boon]►Secret.RequiredHouses= (list of countries)
Which countries are allowed to get this unit as a secret lab boon. This is only checked when the boon is picked so if SecretLab.GenerateOnCapture=no then the boon can still be obtained by a country not on the Secret.RequiredHouses list (if the original owner's country is on the list).Secret.RequiredHouses=
[Boon]►Secret.ForbiddenHouses= (list of countries)
Which countries are not allowed to get this unit as a secret lab boon. This is only checked when the boon is picked so if SecretLab.GenerateOnCapture=no then the boon can still be obtained by a country that is on the Secret.RequiredHouses list (if the original owner's country is not on the list).Secret.ForbiddenHouses=

The boon ultimately offered is picked at random, but only boons that are not presently buildable by the owner of the Secret Lab (civilian in the case of pre-placed buildings without GenerateOnCapture=yes) are eligible to be picked.
NB: This means that such Secret Labs may appear to disobey Secret.RequiredHouses and Secret.ForbiddenHouses when captured. This is not a bug.Per-building secret lab boons.

Hard-coded Unit Properties

The game is hard-coded to do certain things with certain unit IDs. Namely the [COW], [DESO] and [FV]. These units can now have said special properties switched off, and other units can be given these properties if you want.Hard-coded properties of Cows and Desolators can be toggled on/off for any infantry.

IsCow

The [COW] was hard-coded to play its idle animation more frequently than other infantry and was also hard-coded to move around randomly. You can now set IsCow=yes on other InfantryTypes or, indeed, IsCow=no on the [COW].IsCow=

IsDesolator

The [DESO] was hard-coded to have different deploy-weapon firing timing than other units. The change to the timing appears to be related to the unit's art Sequence although the exact effect has not been investigated. You can now set IsDesolator=yes on other InfantryTypes or, indeed, IsDesolator=no on the [DESO].IsDesolator=

Multiple IFVs / Gunner

The [FV] was the only unit to be checked for the special turret and weapon flags, such as SniperTurretIndex. With Ares, all VehicleTypes with Gunner=yes set will read those flags. This means that you can now have multiple types of IFV.Custom IFV clones.

Customizable Insignia

Units can now have custom insignia (chevrons) to represent their veterancy level.

[TechnoType]►Insignia.Rookie= (filename, excluding the .shp extension)
[TechnoType]►Insignia.Veteran= (filename, excluding the .shp extension)
[TechnoType]►Insignia.Elite= (filename, excluding the .shp extension)
For example, Insignia.Rookie=SAMPLE would display sample.shp as the insignia while the object is rookie.Insignia.Rookie=Insignia.Veteran=Insignia.Elite=

These SHPs - like the original pips.shp - are expected to be in the theater palette. If you specify an insignia, the first frame of its SHP will be drawn. Veteran and Elite objects without the insignia specified will still display the 15th/16th frames of pips.shp as usual.Custom insignia for veteran/elite units.

Customizable Parachute Animations

Objects can now have their own individual parachute animation.

[Object]►Parachute.Anim= (animation)
Specifies the animation from artmd.ini to use as the object's parachute when the object is falling. If omitted, Parachute.Anim will default to PARACH. The SHP is expected to be in the unit palette.Parachute.Anim=

While the animation is playing, the object's falling speed will reach, but not exceed, [General]►ParachuteMaxFallRate=. After the animation disappears, if the object is still falling then the object's speed will increase to match [General]►NoParachuteMaxFallRate=. Custom parachute animations.

Custom Cameo Palettes

Rather than always using the cameo palette, individual cameos can now use their own bespoke palette.
In artmd.ini:

[UnitArt]►CameoPalette= (filename, including the .pal extension)
Specifies the palette to use for the unit's cameo (Cameo and AltCameo must use the same palette), in the format "filename.pal".
Defaults to cameo.pal.CameoPalette=

In rulesmd.ini:

[SuperWeapon]►SidebarPalette= (filename, including the .pal extension)
Specifies the palette to use for the super weapon's SidebarImage, in the format "filename.pal". Defaults to cameo.pal.Custom palettes for cameos.SidebarPalette=

NB: The cameo must not use the color at index 0 of the palette. It will be transparent in-game.

Spy Behavior

Yuri's Revenge only permits a Spy to achieve one effect on infiltrating, which is determined by a hard-coded order of precedence. Spy infiltration logic has been rewritten in Ares to be more flexible, including some new effects that a Spy can achieve.

All of the following flags default to no or zero.

[BuildingType]►SpyEffect.Custom= (boolean)
Whether or not to use the Ares spy infiltration logic instead of the original Yuri's Revenge logic.SpyEffect.Custom=

NB: Must be set to yes for any of the following effects to work...Spy behaviour:Multiple effects can be achieved on a single building.

Radar

[BuildingType]►SpyEffect.ResetRadar= (boolean)
Whether or not spying this enemy building will cause the normal radar sabotage behavior (i.e. re-shrouding the enemy's map down to just the terrain that they can presently see).SpyEffect.ResetRadar=
[BuildingType]►SpyEffect.RevealRadar= (boolean) *NEW EFFECT*
Whether or not spying this enemy radar will reveal to you, the infiltrator, all of the terrain that they, the enemy, have thus far explored. The building must also have Radar=yes set.New effect: Reveal radar (shows you what the enemy can see).SpyEffect.RevealRadar=

Power

[BuildingType]►SpyEffect.PowerOutageDuration= (integer - frames)
The number of frames for which the enemy's power will be sabotaged (i.e. temporarily reduced to zero).Per-building power outage duration.SpyEffect.PowerOutageDuration=

Money

[BuildingType]►SpyEffect.StolenMoneyAmount= (integer - credits) *NEW EFFECT*
The amount of credits that will be stolen from the enemy upon spying this enemy building.New effect: Steal money amount (steals a set amount of money rather than a percentage).SpyEffect.StolenMoneyAmount=
[BuildingType]►SpyEffect.StolenMoneyPercentage= (float - multiplier)
The percentage of the enemy's current credits that will be stolen from the enemy upon spying this enemy building. Only has an effect if SpyEffect.StolenMoneyAmount=0.
The amount of money ultimately stolen from the enemy is always capped by the amount of money they presently have (i.e. if SpyEffect.StolenMoneyAmount=500 but the enemy only has 200 credits then you will only gain 200 credits from spying the building).Per-building steal money percentage.SpyEffect.StolenMoneyPercentage=

Super Weapons

[BuildingType]►SpyEffect.ResetSuperweapons= (boolean)
Whether or not spying this enemy building will cause all super weapons attached to it (SuperWeapon, SuperWeapon2 and all super weapons on attached upgrades) to have their countdown timers restarted.SpyEffect.ResetSuperweapons=

Stolen Technology

[BuildingType]►SpyEffect.StolenTechIndex= (integer)
The stealable technology type that is stolen upon spying this enemy building.New effect: Stolen tech index (multiple new stolen techs).SpyEffect.StolenTechIndex=
[TechnoType]►Prerequisite.StolenTechs= (list of integers)
The list of stealable technology types that must be stolen before this object can be built.SpyEffect.StolenTechs=

In Yuri's Revenge, there were only three types of stealable technology available and these were hard-coded to specific buildings.
Spying [GATECH] satisfies RequiresStolenAlliedTech=yes
Spying [NATECH] satisfies RequiresStolenSovietTech=yes
Spying [YATECH] satisfies RequiresStolenThirdTech=yes
In Ares, spying a building with SpyEffect.StolenTechIndex=2 (for example) satisfies the stolen tech requirements for units that require stolen tech 2.
NB: If you set SpyEffect.Custom=yes on GATECH, NATECH or YATECH then those buildings will no longer satisfy the old RequiresStolen*Tech flags.

Factories

[BuildingType]►SpyEffect.UnitVeterancy= (boolean)
Whether or not spying this enemy factory will make all future units you build from your own factories of the same type start veteran. For example, spying an enemy barracks with SpyEffect.UnitVeterancy=yes set will cause all future InfantryTypes that you build to start veteran.
NB: This only works for VehicleType and InfantryType factories at present. Also note that infiltrating any VehicleType factory (i.e. War Factory or Naval Yard) will only make land vehicles start veteran - Naval vehicles cannot be made to start veteran through spy infiltration logic.SpyEffect.UnitVeterancy=
[BuildingType]►SpyEffect.RevealProduction= (boolean) *NEW EFFECT*
Whether or not spying this enemy factory will allow you to see what the enemy is presently building from that factory. Once the building has been spied, select the building and the cameo of the unit that is being produced will be displayed over the building.

Screenshot of a current production being revealed

New effect: Reveal production cameo (shows you what the enemy are currently building). SpyEffect.RevealProduction=

AlternateTheaterArt

The Navy Seal has AlternateArcticArt=yes set, which causes the game to use the image file seala.shp on arctic maps, instead of seal.shp. This logic works for any InfantryType, however this only works for the arctic theater and only for InfantryTypes.

[TechnoType]►AlternateTheaterArt= (boolean)
Specifies whether or not this SHP-based unit can have alternate art depending on the theater of the current map. For example, setting Image=JUNK and AlternateTheaterArt=yes on a unit will make the unit load artmd.ini section [JUNKA] on arctic, [JUNKD] on desert, and so on according to theater. If any of those sections do not exist then the unit will fall back to [JUNK]. So quite similar to AlternateArcticArt, just automatic and smarter. Defaults to no.
NB: This only works for SHP-based units. Voxels do not use this system and cannot have theater-specifc art (you'd have to use Prerequisite.RequiredTheaters to achieve that).AlternateTheaterArt=

Miscellaneous Modding Enhancements

All the changes/additions that make various tasks easier for the mod author, but don't directly provide any new functionality.

[#include]

Ares allows you to split your rulesmd.ini file up into separate pieces so as to better organise the various settings. Any INI files you list under the new [#include] section will be loaded once the main file itself has finished loading. INI files included in this manner can also specify their own [#include] section to load further INIs. There is no depth limit, and the file loading recursion is depth-first (In English: if the original INI file includes multiple files, and an included file includes other files itself, those second-level files will be included before resuming inclusion of the remaining first-level ones. Recurse again if necessary.)

For example, the [#include] section you specify in rulesmd.ini may look something like this:

[#include]
	1=rules_sw.ini
	2=rules_vehicles.ini
	3=rules_buildings.ini
	4=rules_aircraft.ini
	5=rules_infantry.ini

As each INI file is loaded, any flag that is encountered that has already been defined will have its value updated with the newly found value. Using the above include list as an example, if [E1]►Strength=200 is specified in rulesmd.ini, and [E1]►Strength=300 is specified in rules_infantry.ini, then the GI will have Strength=300 in-game.

INI files are taken to be relative to the Red Alert 2 directory. Values in the include list can include subfolders (e.g. 5=MyMod\rules_infantry.ini). The currently loaded MIXes are also scanned for the files if a loose file of that name cannot be found, however, this only works if you do not specify a subfolder.[#include] section allows rulesmd.ini to be split up into separate files.#include

String Table Enhancements

In addition to ra2md.csf, the game will now load – stringtable00.csf through stringtable99.csf. These string tables will add to or replace strings that were included in previously loaded string tables.

It is also now possible to name objects in INI code (without having to create a string table entry) by using the NOSTR: prefix. For example, UIName=NOSTR:Sonar Pulse will be displayed as "Sonar Pulse". However, the string (including the prefix) cannot exceed 31 characters.Object names can be written directly into rulesmd.ini rather than adding them to the string table.

List Lengths

There are several INI flags that take a comma-separated list of values. The game imposes a maximum length for INI flag values of 128 characters which isn't always long enough for lists – especially with some of the extensions that Ares allows. This limit has been relaxed for flags that take lists – the maximum length for flags that take lists is now 2048 characters.Several INI flag lists have been extended to allow more text to be parsed.

MIX Loading Order

expandmd##.mix files are now loaded earlier, allowing them to override content from langmd.mix.expandmd##.mix can override content from langmd.mix.

Loose Audio Files

The game can now load WAV files that are loose in the Red Alert 2 game directory – they no longer have to be packed into a BAG file. Sounds should be referenced in audiomd.ini just the same as always (without the .wav extension).WAV files loose in the Red Alert 2 directory can now be played, without having to include them in audio.bag.

Mouse.sha

SHP compression can now be used on mouse.sha. Without Ares, using SHP compression on mouse.sha would result in a garbled mouse cursor in-game.SHP compression can be used on mouse.sha.

InfantryElectrocuted

The animation displayed for a dying InfantryType when the warhead that killed them had InfDeath=5 used to be hard-coded to the second animation from the [Animations] list. You can now specify [AudioVisual]►InfantryElectrocuted= instead. If InfantryElectrocuted is not defined then the game will search for an animation named "ELECTRO", before finally falling back to the second animation like before.Animation for InfDeath=5 can be overriden using InfantryElectrocuted= (instead of using the second animation from [Animations]).InfantryElectrocuted=

Snowmd.ini

[General]►Medians=71
This setting is needed to prevent an Internal Error occurring in the Random Map Generator if Urban Areas are enabled by the user. This change is also needed by the Terrain Expansion.

In order to avoid internal errors, Ares sets this to 71 by default if it's not specified in the terrain control file.Snowmd.ini defaults Medians=71 (this is needed by the Terrain Expansion and also prevents an IE in the Random Map Generator when Urban Ares are enabled).

User Interface Features

Numerous enhancements and additions have been made to the user interface – aspects of Yuri's Revenge outside the main in-game battlefield view.

Loading Screen

The initial loading screen displayed when first starting Yuri's Revenge now indicates that Ares is active and stresses that it is a test version.

Internal Errors / Debugging

When an Internal Error occurs, the except.txt file that is produced has been modified so as to output more information that is both relevant to mod authors, and also relevant to us, the developers, when debugging the changes and additions introduced by Ares.

except.txt may include a timestamp in the filename to prevent existing an existing except.txt file being overwritten.

Ares will give you the option to produce a crash dump file to assist in determining the cause of the error. This file will be stored in a Debug folder within the main game directory. Note that the crash dump file is very large and may only be readable by the Ares developers. Like except.txt, this file will include a timestamp in the filename.

If you have turned on debug logging (see Command Line Arguments and Keyboard Commands) then the game will produce a debug.log file in the aforementioned Debug folder. Like except.txt, this file will include a timestamp in the filename. The log file may contain useful information for helping diagnose problems with your mod or Ares itself.

In the event of an Internal Error, Ares can sometimes tell you what caused the error. For example:

Screenshot of an Ares Internal Error dialog showing the cause of an Internal Error
Here, Ares can determine what caused the error.


Screenshot of an Ares Internal Error dialog showing an unsolved Internal Error
Here, the error cannot be figured out - Ares offers to create a full crash report.


Screenshot of an Ares Internal Error dialog after recording an Internal Error
The crash report has been generated. Ares will close after showing this message.

Some potential errors may now be triggered when loading rather than waiting for the error to crop up in game.Improved Internal Error handling and debug logs to assist with debugging mods/Ares.

Bitmap Screenshots

With Ares active, screenshots are now generated as BMP files rather than PCX. BMP files are smaller in size and are more widely supported.
NB:The BMP files are written in reverse line order. This is perfectly valid but some graphics editors may not support it.Screenshots saved as BMP files rather than PCX.

Random Map Generator

Ares lets you create random maps using some new map styles – Archipelago terrain and the Desert tileset.
NB: these options are not affected by the "Surprise Me" function for the moment.

The RMG will now place bridges at random on maps that include rivers.Random Map Generator enhancements:

A new checkbox – 'Place Urban Areas' – allows the user to add an assortment of streets and urban combat buildings at random spots throughout the generated map. The objects placed by this feature are hard-coded to the following list for the time being:

Place Urban Areas option.Bridges over rivers.New terrain style: Archipelago.New tileset: Desert.NB: Urban areas generated in the minimap preview do not always correspond to content generated ingame, especially in Desert maps – this is still being investigated.
In addition, there are reports of this feature not working at all with certain settings. (Known issue: #794)

Keyboard Commands (Hotkeys)

Ares includes several new commands that can be issued in game via the use of keyboard hotkeys. Note that the labels for these hotkeys are presently hard-coded, unlike the standard Yuri's Revenge hotkeys (which use the string table).

Map Snapshot

A key can be assigned to save a snapshot of the current game as a YRM map file, which can be edited in FinalAlert 2 YR.
NB: Loading the generated map file in-game causes an Internal Error. The reason for this is not yet known. If you do encounter it then please provide the developers with the crash information.Map snapshot command (saves a YRM map file of the current map).

Debug Logging

A key can be assigned to toggle debug.log writing on and off. See Internal Errors / Debugging

Type Data Dumping

A key can be assigned to output some additional information to the debug.log file (see above). The additional information is written to the log each time the key is pressed. This includes information such as AI trigger weighting, so mod authors can see how the AI is performing over the course of a game.
Note that debug.log file writing must be turned on otherwise the data will not be written to the file.Type data dumping command (dump type information to a log file, including AI trigger weights).

AI Assume Control

A key can be assigned to have the AI take control of your base so that you can observe what the AI does. This is for testing purposes only.
NB: You must let the AI assume control of your base before you deploy your MCV, otherwise the AI will do nothing.
NB: This hot key is available in multiplayer at present however this will most likely be changed in future.

Command Line Arguments

-CD
Allows the game to run without the Yuri's Revenge CD. Requires the content of the Yuri's Revenge CD to be copied to the Red Alert 2 directory first.Command line option to not require the Yuri's Revenge CD.
-NOLOGO
Prevents the EA logo video from playing before the game begins to load.
NB: Launch Base has its own option to just prevent the video playing for mods that do not include their own video.Command line option to not play the EA/Westwood logo video.
-DEBUG
Turns debug.log file writing on initially. See Internal Errors / Debugging

New Game Resolutions

Various new resolutions have been enabled by default in the Options screen, up to 4096x4096. This is the same effect provided by the AllowHiResModes setting or the HIRES cheat code, both of which are obsolete in Ares.AllowHiResMods enabled by default.

Lone Player Skirmish

You can now start a single player skirmish game without any AI players. This is primarily used for testing a mod without having to worry about the AI attacking you.Can play single player skirmish without any computer players.

Graphics / Surface Drawing

This is for advanced users only! By default, most of the game's drawing surfaces are allocated in system memory, but two of them (frequently used destination buffers) default to GPU memory.
Techniques used by the game to draw images to the screen require the former ones to be copied to the latter ones, and this operation is fairly expensive. Ares allows you to allocate those surfaces in system memory, which means the source to destination copying is almost free.

In ares.ini you can add the following section:

[Graphics.Advanced]
DirectX.Force= (hardware|emulation)
Surface.$surface.Memory= (System|VRAM)
Surface.$surface.Force3D= (true|false)

...where $surface is one of Composite, Alternate, Hidden, Sidebar or Tile.

NB: enabling Force3D forces Memory into VRAM mode.
NB: Ares.ini is not intended to be included or edited by mods, as this file may include various other settings in future that the end-user wishes to set themselves. Launch Base does not permit mods to include ares.ini, and also provides its own interface to allow the user to modify the above graphical settings.Graphics/Surface drawing options can be configured by the user (advanced users only).

Required Changes For Mods Using Ares

Unfortunately, Ares will not simply "work" without changes to the original game files. The reason for this is that maintaining compatibility with the original game files whilst still offering the enhancements that are Ares' raison d'être would make implementing Ares features (both for us, the developers, and you, the mod author) considerably more complex, ultimately wasting time that would be better spent on other tasks.

This section details the modifications you'll most likely need to make to ensure your mod does not receive any unexpected changes from simply being run whilst Ares is active.

In future these changes will be provided as extensions to the standard files that are included with the YR Unofficial 1.002 Mini-Patch Developer's Pack.

artmd.ini

bombcurs.shp

This animation needs to have its last frame removed if you don't want to see the previously unused skull image. See IvanBomb.FlickerRate.

ares.mix

Mods should not include ares.mix. This new MIX file is bundled with Ares to provide any new/modified files that Ares changes/additions rely on. This MIX file presently includes:

Credits

Ares is being developed by:

Documentation by DCoder, Marshall, Nighthawk and Renegade. If there are any omissions or errors in this document, please file a bug under the category "Wrong Information" or "Outdated Information", whichever fits better.
If you feel something is not explained clearly enough, please post on the RenegadeProjects Network Forums and let us know where the issue is.

Special Thanks

Westwood Studios

For creating this great game in the first place. Although you guys really should've fired half of your coding staff (out of a cannon, into the sun).

Marshall

For developing Launch Base and the YR Unofficial 1.002 Mini-Patch (UMP), and whipping this documentation into shape.

Renegade

For hosting Ares itself, performing the duties of Project Manager, creating the HTML version of the Ares manual and, of course, contributing code and helper tools.

Ares Testers

For devoting their free time to testing Ares and giving us feedback - this enables us to make Yuri's Revenge and Ares even better.

Appendix A – New Flags/Sections

This is a list of new flags/sections only. Existing flags/sections whose functionality has changed are not listed here (except in extreme cases).

Appendix B – Ares Feature Summary

Below is a list of everything that Ares brings to Yuri's Revenge as a series of quick bullet points.

Bug Fixes

Restored Tiberian Sun Logic

New Features

Appendix C – RockPatch/NPatch Features Not (Yet) Included

30 of 59 NPatch features are presently unique to NPatch (this is an approximation and subject to interpretation).

51 of 84 Ares features are unique to Ares (again, this is an approximation and subject to interpretation, however we have tried to be strict in only counting totally unique features).
This does not count the Bug Fixes section (NPatch documentation does not go into detail about the extent of bug fixes, if any).