Variable concepts
Built-in variables in SLIC serve two purposes. First,
they contain information about objects in the game. For example, when you have
code that deals with a city, it will have access to a variable named
city. To find out how many people live in the city, you can use
city.population. Because you may sometimes have to deal with more than
one city, an index as to which city you mean can be inserted between the
container name and the member you are interested in. For example,
city.1.population is the same as city.population since 1 is the
default index if none is given. But city.2.population is the population
of the second city in the current context. This use of indices is not specific
to the city container, it works for all containers except g,
clicked, and special.
The second use of built-in variables is to make triggers fire when certain
events occur in the game. Often, the variables you can and can't use in a
trigger or a message called from a trigger are determined by the conditions used
to fire that trigger. There are other ways to gain access to some objects,
however. More on that later. In general, you will write triggers like:
trigger 'AnExampleTrigger' when (city.built) {
// city is now a valid variable.
}
The above trigger will fire whenever a city is built. Code inside the
trigger can use the variable city to examine or modify the city. For
example, we can modify the trigger above to plant a free warrior in every newly
built city:
trigger 'AnExampleTrigger' when (city.built) {
// Only give a warrior if there aren't already some military units
if(city.combatunits < 1) {
CreateUnit(city.owner, UnitType("UNIT_WARRIOR"), city.location, 0);
}
}
This trigger says that whenever a city is built, check to see if there are
already any military units in the same square as the city. If there aren't, then
create a new warrior belonging to the city's owner, at distance 0 from the
city's location.
See Examples
for more on trigger events.
Each trigger object you create is only triggered for one type of event, even
though it may contain more than one variable that can be used as a trigger
event! See Trigger
Priorities for a discussion of how to determine which events will cause your
trigger to be run. A good way to be safe is to just put as little logic in the
when(...) condition as possible, and instead move everything else to an if(...)
{} inside the trigger.
Variables marked with (no value) below are only useful as trigger conditions.
That is, their value is undefined outside the when(...) of a trigger.
Variable Reference
Containers
These top level built-ins are used to contain information
about various objects. Some of them can also be used on their own in various
places.
g - contains global information (never useful by itself)
city - a city.
player - a player.
unit - a unit.
clicked - never useful by itself. Members only useful as trigger
conditions.
special - never useful by itself. Contains members useful as trigger
conditions.
discovery - a discovery (advance).
wonder - a wonder.
agreement - a diplomatic agreement.
location - a map location.
government - a government.
gold - an amount of gold.
building - a city building.
pop - a population (worker).
good - a trade good.
action - contains a string passed from the game for some special
purpose, not generally useful except for the specific places it's used in the
main script file.
timer - Timers can be set to go off after a specified number of
seconds.
Global container
g.year - the current turn #, the first turn of the game being 0.
g.pollution - the current amount of pollution in the world.
g.player - the player who is moving right now.
g.maxscore - the base score value from the difficulty database.
g.tutorialplayer - if the tutorial is on, which player is the
tutorial player.
City Container
city.population - the population of the city. Triggers when a city
grows.
city.food - the amount of food stored in the city.
city.owner - the city's owner.
city.location - the location of the city. triggers when a new city is
founded.
city.built - triggers when a new city is founded. (no value)
city.building - triggers when a city starts building a building. The
value is the index of the building in improve.txt.
city.buildingunit - triggers when a city starts building a unit. The
value is the index of the unit in units.txt.
city.buildingendgame - triggers when a city starts building an
endgame object. That is, the objects used to win scientifically. The value is
the index into endgame.txt.
city.buildingwonder - triggers when a city starts building a wonder.
The value is the index into wonder.txt.
city.happiness - the city's happiness.
city.combatunits - the number of military units in the city's
square.
city.captured - triggers when a city is captured (no value)
city.buildingnothing - triggers when a city builds the last thing in
it's queue. (no value)
city.selected - triggers when a city becomes selected. (no value)
city.deselected - triggers when a city is deselected. (no value)
city.overtimecost - the amount of gold it would take to rush buy
whatever the city is currently building.
city.pollution - the amount of pollution the city is producing each
turn.
city.queue - the number of items in the city's build queue.
Player Container
player.gold - the amount of gold the player has. Triggers at the
beginning of the player's turn.
player.cities - the number of cities the player has. Triggers at the
beginning of the player's turn.
player.goods - How many trade goods the player has altogether.
Triggers at the beginning of the player's turn.
player.discoveries - how many advances the player has. Triggers at
the beginning of the player's turn.
player.capitol - The player's capitol city. Can be used in place of
city in many places. Triggers at the beginning of the player's turn.
player.pollution - how much pollution the player is producing.
Triggers at the beginning of the player's turn.
player.sciencerate - the player's current science setting
(0-100).
player.totalunits - the total number of units the player owns.
player.publicworkstax - the current setting of the player's public
works tax.
player.publicworkslevel - the current amount of public works
stored.
player.government - the player's government, as an index into
govern.txt.
player.score - the player's current score.
player.sightedunit - triggers when the player sees an enemy unit
(unit will contain the unit sighted, unit.2 is the unit that
sighted it.) (no value)
player.readiness - the player's current readiness setting (0-2)
player.messages - the number of unread messages the player has.
Unit container
unit.location - the unit's location.
unit.type - the unit's type as an index into units.txt.
unit.owner - the unit's owner.
unit.built - triggers when a unit is built (no value)
unit.sighted - triggers when a unit is sighted. unit.2 is the
unit that did the sighting. (no value)
unit.launched - triggers when a unit is launched into space (no
value)
unit.beginturn - triggers for every unit at the beginning of the
turn. Use this sparingly! It can slow things down. (no value)
unit.dead - triggers when a unit dies.(no value)
unit.deadnofuel - triggers when a unit dies because it ran out of
fuel. (no value)
unit.deadnosupport - triggers when a unit dies from lack of support.
(no value)
unit.deadother - triggers when a unit dies for some other reason. (no
value)
unit.moved - triggers whenever a unit moves. (no value)
unit.donemoving - triggers whenever a unit reaches the end of a
movement order.(no value)
unit.selected - triggers whenever a unit is selected. (no value)
unit.deselected - triggers whenever a unit is deselected (no
value)
unit.embarked - triggers when a unit boards a transport (no
value)
unit.debarked - triggers when a unit leaves a transport (no
value)
unit.fortified - triggers when a unit fortifies (no value)
Clicked Container
clicked.unit - triggers when the user clicks on a unit. (no
value)
clicked.unexplored - triggers when the user clicks on an unexplored
(black) part of the map. (no value)
Discovery Container
discovery.type - triggers when a player gains a new advance. The
value is the index into advance.txt. player.1 is the player that
discovered it.
discovery.traded - triggers when players trade advances
diplomatically. player.1 is the player receiving the advance,
player.2 is the player giving it.
Wonder Container
wonder.started - triggers when a player starts building a wonder.
player.1 is the player building it. The value is the index into
wonder.txt.
wonder.finished - triggers when a wonder is completed. The value is
the index into wonder.txt.
wonder.almostfinished - triggers when a wonder is nearly complete
(the same time the messages to this effect are sent)
Agreement Container
agreement.broken - triggers when a diplomatic agreement is broken.
player.1 is the player who broke the agreement, and player.2 is
the player with whom the agreement was made.
Special Container
special.unitselected - triggers when a unit is selected. (no
value)
special.allunitsmoved - triggers when the current player moves the
last of his units. (no value)
special.workview - triggers when the player opens the work view.(no
value)
special.continentshared - true if the continent the player's capitol
is on is shared with at least one other civ.
special.contact - triggers when contact is made between two units.
unit.1 and unit.2 are the units in question.
special.attacked - triggers when a battle takes place. unit.1
is a unit in the attacking army, unit.2 is a unit in the defending army.
(no value)
special.tradescreen - triggers when the trade screen is opened. (no
value)
special.diplomaticscreen - triggers when the diplomacy screen is
opened. (no value)
special.createstack - triggers whenever units are grouped together.
player.1 is the player that did the grouping. (no value)
special.bombarded - triggers whenever a unit bombards another.
unit.1 is the attacker, unit.2 is the defender. (no value)
special.counterbombarded - triggers whenever a unit bombards and is
then counter bombarded. unit.1 is the original attacker, unit.2 is
the defender who is counter bombarding. (no value)
special.activedefense - triggers whenever an active defender actively
defends. unit.1 is the active defender, unit.2 is the unit against
which it is defending. (no value)
special.indulgences - triggers when a cleric/televangelist sells
indulgences. unit.1 is the cleric, city.1 is the city to which it
is selling indulgences.
special.terrorism - triggers when various terrorist acts are done.
unit.1 is the terrorist unit, city.1 is the city against which the
act was made. (no value)
special.converted - triggers when a city is converted. unit.1
is the cleric, city.1 is the city which was converted.
special.citizenenslaved - triggers when a slaver takes a slave from a
city. unit.1 is the slaver, city.1 is the city from which a slave
was taken. (no value)
special.settlerenslaved - triggers when a slaver captures a settler.
unit.1 is the slaver, player.2 is the player whose settler was
captured.(no value)
special.victoryenslavement - triggers when a slaver captures a slave
due to winning a battle. unit.1 is the slaver, player.2 is the
player who was defeated in battle. (no value)
special.popmoved - triggers whenever a player moves a worker. (no
value)
special.popmovedoffgood - triggers whenever a player moves a worker
off a trade good. City.1 is the city to which the worker belongs. (no
value)
special.popmovedongood - triggers whenever a player moves a worker
onto a trade good. good.1 is the good, city.1 is the city to
which the pop belongs.
special.buildfarm - triggers when a player starts building a farm.
player.1 is the player, location.1 is the place it's being built.
(no value)
special.buildroad - triggers when a player starts building a road.
player.1 is the player, location.1 is the place it's being built.
(no value)
special.buildmine - triggers when a player starts building a mine.
player.1 is the player, location.1 is the place it's being built.
(no value)
special.buildinstallation - triggers when a player starts building an
installation. player.1 is the player, location.1 is the place it's
being built. (no value)
special.buildtransform - triggers when a player starts a terraform.
player.1 is the player, location.1 is the place it's being built.
(no value)
special.tradeoffer - triggers when a player makes a trade offer.
player.1 is the player making the offer, good.1 is the good being
offered, gold.1 is the amount asked for the good. (no value)
special.traderoute - triggers when a domestic trade route is created.
player.1 is the player who owns the route, city.1 is the source
city, city.2 is the destination, and good.1 is the good being
traded. (no value)
special.foreigntraderoute - same as special.traderoute, except it
triggers when an international trade route is created. player.2 is the
other player. gold.1 will also contain the amount of gold being paid for
the route. (no value)
special.piracy - triggers when someone pirates a trade route.
player.1 is the owner of the source of the route, player.2 is the
owner of the destination, player.3 is the player doing the piracy,
unit.1 is the unit doing the piracy, city.1 is the source city,
city.2 is the destination city. (no value)
special.pillage - triggers when someone pillages. unit.1 is
the unit doing the pillaging, player.1 is the player doing the pillaging,
and player.2 is the player who owns the square being pillaged. (no
value)
special.cantsettlenomovement - triggers when a unit tries to settle
but can't because it's out of movement points. (no value)
special.agechange - triggers when a player enters a new age.
player.1 is the player. (no value)
special.sentceasefire - triggers when a cease fire request is sent
from player.1 to player.2. (no value)
special.lockedstack - triggers when a player groups more than one
unit together. unit.1 is one of the units involved, and player.1
is one of the players.
special.stackedcombat - triggers when combat takes place in which at
least one army has more than one unit. unit.1 is a unit in the attacking
army, and unit.2 is a defender. player.1 is the attacking player,
and player.2 is the defending player. (no value)
special.tutorialdeactivated - triggers when the tutorial is
deactivated (no value)
special.singlecombat - triggers when combat occurs between two armies
that each have only one unit. unit.1 is the attacker, and unit.2
is the defender.
Gold Container
gold.amount - an amount of gold passed in from the game to a
messagebox.
Building Container
building.built - triggers when a building is built. Value is the
index into improve.txt.
Timer Container
timer.expired - triggers when a timer set with StartTimer() expires.
(no value)
Population Container
pop.location - the location of the pop.
pop.type - the type of the pop, as an index into pop.txt.
Good Container
good.type - the type of the good, as an index into goods.txt.
Back to
Civilization: Call to Power