Basic Variable Use
by ArgCmdr


Variables are a basic programming concept, and are vital for event-action characteristics. In fact, triggers on maps are based on variables, though you cannot define them. For example, in a trigger you have an event that happens. When this event happens the action fires. That "when this event happens" is a variable. In a programming structure this would be:

IF EVENT = N
DO ACTION

What means that if event happening is N (the selected), the action fires. In this case event is a variable, and if the variable is = N, the trigger fires.

The variables used in RA2 are Locals and Globals. Local variables take value only during a misson/map. Globals, take their values through missions, so if you do something in map 3, something differnet can happen in map 5. This is usually used in TS, for the mission selection, as this disables the secondary missions from the choosing map. In Ra2, this seems not to work on saves, though it works fine normally. Meaning that if you play maps constantly and not save and continue some other day, globals accomplish their function. If you save, Global values (at least to my thinking) seem to take a temporal value that is mantained during the level (NOT MISSION), that´s why this variables do not mantain value through saves, cause this is the use they had in TS, their default value restored after passing a level (not a mission, level was the number of mission needed to be completed to access the next level with its correspondant animation). My theory is based on facts, as i have tried globals on saves with no results so far.

A variable in game is can have only two values, what they are called "boolean" in programming: 0 or 1 (in fact, sometimes, anything different than 0), say false and true, no and yes, bad and good, wrong and right. Set Variable means add to variable a postive value. So if I (the variable) is = 0, then you can ste it and that way the value go into 1. Clear Variable means go back value of variable to 0. This are the only values available, as for event-actions there are not multiple cases, its destroyed, or alive, is ok or wrong, same boolean concept. In this case there are only two values, cause the probable others (like captured, or infiltrated) are defined by the Entered by event, and also when a building is captured it is considered destroyed. However variables here can only be set to numbers, or at least its more secure. Different things are statements in INI files, there specific parameters go to statements, some boolean, but this ones usually are described by words.

To add a variable to a map you can make it by FA2 or a text editor (always on the map file) In FA2: Go to Edit --> Local Variables Click on the first undefined (if none is 0) on the deployable menu. Name it Set its initial value (Depend on what u will use it for, if you have different concepts and want in a mission that the player keeps alive a structure, set it to 1, (true, alive), and then on the lose trigger set clear variable so that means a more attractive logic, although its the same, there is no rational difference, just affects the logic and thinking of the map-maker.

There are little base actions and events using local variables, but enough.

Events:

Local is Set (Makes the trigger fire when the variable´s value is true, or equal to 1)
Parameter: The defined variable

Local Is Cleared (Makes the trigger fire when the variable´s value is false, or 0)
Parameter: The defined variable

Actions: Set Local (Makes the variable change value to true or 1)
Parameter: The defined variable

Clear Local (Makes the variable change value to false or 0)
Parameter: The defined variable One of the multiple uses of this is on missions.

They are quite good to set multiple objectives to converge in a trigger, they can also be used to spawn different triggers. In this case we will try to make the player win when it has destroyed two specific factories. Point here is that if you make the following trigger:

Name: Factories destroyed
Type: 0 (standard)
Tag : None
Event: Attached Object Destroyed
Parameter/s: The one/s u attach
Action: Win

You will get the fault than when one of the objects attached (When multiple, if not the trigger works correctly) is destroyed the trigger fires. And player wins when destroying just one building and not both. Variables get useful here:

First define the variables setting the as follows:

Name:WF1
Initial Value: 0

Name:WF2
Initial Value: 0

Then make the triggers:

Name: Factory1
Type: 0
Tag: None
Owner: House that needs to destroy factory
Event: Attached Object Destroyed
Parameter: The attached object (WarFactory1)
NOTE:Remember to attach the object to this trigger!!!
Action: Set Variable
Parameter: The variable you wanna set (In this case WF1)

Name: Factory2
Type: 0
Tag: None
Owner:House that needs to destroy factory
Event: Attached Object Destroyed
Parameter: The attached object (War Factory2)
NOTE:Remember to attach the object to this trigger!!!
Action: Set Variable
Parameter: The variable you wanna set (In this case WF2)

Name: Win
Type: 0
Tag: None
Owner: The house that wins when this events happen
Events:
1-Local is set (Parameter WF1)
2-Local is set (Parameter WF2)
Actions: 1-Win (Parameter, house of the winner)

This way player wins when destroys both factories and not one. As another example, you can make the player lose when Tanya dies. This is much easier, and as advice, doesn´t need variables at all (If you make a Attached object destroyed (event)/ Lose (action), you get the same result with less work, FA2 says this (variables) is a good way to make it, but much more time is lost. Anyway its easy to explain, and you will proof if you understood:

Make a Variable called Tanya killed, initial value set to 0
Make a trigger standard, named Tanya is killed, with no tags and owned by any house, easier if player or enemy as event does not say destroyed by.
Event: Destroyed by anything (so anyone)
Action: Set Variable "Tanya killed"
Open Tanya´s window and attach the tag of this trigger to the unit by selecting it on the deployable menu on the proprties of the unit, and clicking on OK
Make a new trigger pointing, "lose (tanya dead)" as name, and the rest as default, with the owner as the player.
Event: Variable Set, "Tanya Killed"
Action: Lose, Player House

If Tanya is not present on the map and comes by reinforcements, set the corresponding tag on the teamtype instead of the unit properties (Properties of teamtype instead of properties of unit). If Tanya is not alone in the team, you can do several things depending on the way she appears, but always make a special teamtype for her, and if you want the player to think it comes out of the transport, while she is not on that team, you can create a team composed by her, spwaned at the waypoint where the transport deploys, and using a sound "Exit transport" so that it appears she was in, while she is not.

Another thing you can do and that is usually good looking is add a delay on the lose trigger, so that you don´t lose inmediately and you get time to add a text saying Tanya is dead, mission lost or similar. Very easy, just add an action to the first described trigger, and use Enable Trigger (#53) and as parameter set the other trigger related "lose (tanya dead)". Get that trigger then, check the disabled box, and add a new event, elapsed time, and as parameter the number of seconds you wish to pass between she dies and player gets lose indicator.

As said, variables have several uses, like for example when X trucks have unloaded their cargo. I think you can figure that out, you must set as many variables as trucks in existance and set the variables whenever the corresponding truck unloads its cargo. (This is tricky and invloves other map editing skils, like scripts and celltag placing) But with this you are well covered.)