Form: side
[ num ] [ id ] properties...
This form has the effect of declaring a side to exist. If the number
num or symbol id is supplied and matches that of a side
that has already been created, then the properties will modify the
pre-existing side.
Otherwise a new side object will be created, with a arbitrarily-chosen
numeric id ranging between 1 and sides-max
. If the given
id is a symbol, then the side's numeric id will be bound to that
symbol.
GlobalVariable: sides-min
n
The minimum number of sides that are required for a game. A new game
cannot be started with fewer than sides-min
sides. Defaults to
1
.
GlobalVariable: sides-max
n
The maximum number of sides that are allowed in a game. This is a limit
which is set by the designer of the game module. Xconq also has a
built-in upper limit (MAXSIDES
), and this is typically 15
.
Defaults to MAXSIDES
.
GlobalVariable: sides-wanted
n
The ideal number of sides for a game. This is the initial number of sides
that a new game will have during side setup. This should be between
sides-min
and sides-max
, inclusive. Defaults to 2
.
Form: side-defaults
properties...
This form sets the defaults for all newly-created sides declared subsequently. These defaults will be set before the new side's properties are interpreted. This form has no effect on existing sides or on side declarations that modify existing sides.
If the game design allows, all of these properties can be set at startup by the players (see <side config> and below). Omission of some of these results in suppression or substitution, depending on the interface and the situation. Omission of all name properties allows the side to go unmentioned, which is useful when the concept of "side" is useless or confusing to a player (as in some adventure games). All of these properties may be set at any time by any player.
SideProperty: name
str
This property is the proper name of a side, as a country or alliance
name. Examples include "Axis"
and "Hyperborea"
.
SideProperty: long-name
str
This property is the long form of a side's name, as in "People's
Republic of Hyperborea"
. Defaults to be the same as the side's name.
SideProperty: short-name
str
This property is an short name or acronym for the side, often just the
letters of the long name, as in "PRH"
.
SideProperty: noun
str
This property is the name of an individual unit or person belonging to
the side. Defaults to ""
, which suppresses any mention of the
side when (textually) describing the individual.
SideProperty: plural-noun
str
This property is what you would call a group of individuals. Defaults
to the most common plural form of the noun
(in English, the
default pluralizer adds an "s"), so any alternative plural noun, such
as "Chinese"
, will need an explicit plural-noun
value.
SideProperty: adjective
str
This property is an adjective that can be used of individuals on the
side, as in "Spanish"
. Defaults to ""
, which suppresses
use of the adjective.
As a complete example, a side named "Poland"
would have a long
name "Kingdom of Poland"
, short name "Po"
, noun
"Pole"
, plural noun "Poles"
, and adjective
"Polish"
.
Alternatively, one can specify a side namer to do the work of naming sides.
GlobalVariable: side-namer
namer-id
The name of a known namer that will be used to generate the names of
all the sides (except the independent side). Defaults to
default-side-names
.
SideProperty: color
str
This property is a comma-separated list of colors that represents the
side. Defaults to "black"
.
SideProperty: emblem-name
str
This property is the name of a graphical icon that represents the side.
An emblem name of "none"
suppresses any emblem display for the
side. Defaults to ""
, which gives the side a randomly-selected
emblem.
SideProperty: names-locked
t/f
If the value of this property is true
, then the player cannot
modify any of the side's names. Defaults to false
.
SideProperty: class
str
This property is a side's class, which is a keyword that characterizes the side. Any number of sides may be in the same class.
Once a side is in the game, it can never be totally removed. However, sides can become inactive.
SideProperty: active
t/f
This property is true
if the side is still actively participating
in the game. If the side has won, lost, or simply withdrew, this will
be false
. Any units on a side not in the game are effectively
frozen statues; they don't do anything, and are untouchable by anyone
else. Defaults to true
.
SideProperty: status
lose/draw/win
This property tells how this side did in the game. Defaults to
draw
.
GlobalConstant: win
These constants are the different possible values for a side's status.
SideProperty: ever-active
t/f
This property records if the side was ever active during the course of a game. Sides that were never active (perhaps because they are used in some scenarios of a game design but not others) will not be recorded in the scorefile.
SideProperty: advantage
n
Initial and min/max limits on advantage for the side. All default to the values of the corresponding global variables.
By default, sides are neutral with respect to each other.
Control is a situation where one side can observe and move another side's units, but not vice versa. The controlling side can also just take the units of the controlled side. If the controlled side loses or resigns, then the controlling side automatically gets everything. Both sides must agree to this relationship.
SideProperty: controlled-by
side
This property refers to the side controlling this one. If 0, then the side is not under control.
The closest side relationship is one of trust. A trusted side unit's may do anything at any time, including entering and leaving units on the other side, consuming the other side's materials, and so forth.
SideProperty: trusts
side-value-list
This property is true for any side that is trusted by this side. Note
that this relationship need not be symmetrical. Defaults to
false
for all sides.
Note that these parameters apply only to relationships as enforced by Xconq. In an actual game, both human and robot sides can make agreements and have positive/negative opinions about the other sides.
SideProperty: trades
side-value-list
This property defines the trading relationship with other sides.
Note: Currently not implemented.
SideProperty: next-numbers
utype-value-list
This property gives the next serial numbers that will be assigned to
units acquired by this side. Defaults to 1
for each unit type
(Dijkstra notwithstanding, that's still where people start numbering
things).
If the unit is of a type that gets numbered (assign-number
property is true), then any unit of that type, acquired by any means
whatsoever, will be assigned the next-numbers
value for that type
and next-numbers
will be incremented.
A side can have its own set of namers (see below) that will be used for units and geographical features associated with that side.
SideProperty: unit-namers
utype-value-list
This property specifies which namers will be used with which types that the side starts out with or creates new units. These will not be run automatically on captured units or gifts.
SideProperty: feature-namers
feature-type-value-list
This property specifies which namers to use with which geographical
features in the side's initial country (if if has one). Defaults to
()
.
The tech level of a side determines what it can do with each type of unit.
SideProperty: tech
utype-value-list
This property assigns a tech level to each unit type named.
SideProperty: init-tech
utype-value-list
This property is the tech level at the beginning of the current turn.
SideProperty: advances-done
atype-value-list
This property is the state of the side's research on each advance. A value of -1 indicates that the advance has been achieved.
SideProperty: advance-goal
atype
The research goal that the side is presently working toward.
SideProperty: current-advance
atype
The research topic that the side is presently working on.
View-related properties record the side's knowledge about the world, other units, weather, etc.
These properties are necessary only if the relevant globals are set a
certain way (see-all
is false, etc).
SideProperty: terrain-view
layer-data...
This property is the side's current knowledge of the world's terrain.
Defaults to ()
.
SideProperty: terrain-view-dates
layer-data...
This property is the dates of the side's current knowledge of the
world's terrain. Defaults to ()
.
SideProperty: aux-terrain-view
ttype layer-data...
This property is the side's current knowledge of the world's aux terrain
of type ttype. Defaults to ()
.
SideProperty: aux-terrain-view-dates
ttype layer-data...
This property is the dates of the side's current knowledge of the
world's aux terrain of type ttype. Defaults to ()
.
SideProperty: unit-views
unit-view...
This property is the side's current knowledge of the positions of units
in the world. It is a list of unit-view objects, where each has
the forms (type side id x y)
. Defaults to ()
.
SideProperty: material-view
mtype layer-data...
This property is the side's current knowledge of the amounts of each
type of material at each location in the world. Defaults to ()
.
SideProperty: material-view-dates
ttype layer-data...
If the weather is not always known and up-to-date, then the following properties what is known and when the information was recorded.
SideProperty: temperature-view
layer-data...
SideProperty: temperature-view-dates
layer-data...
SideProperty: cloud-view
layer-data...
SideProperty: cloud-bottom-view
layer-data...
SideProperty: cloud-height-view
layer-data...
SideProperty: cloud-view-dates
layer-data...
SideProperty: wind-view
layer-data...
SideProperty: wind-view-dates
layer-data...
SideProperty: initial-center-at
x y
This property is the preferred location at which to center the first map displayed by an interface.
SideProperty: turn-time-used
seconds
This property is the number of (real) seconds that this side has been moving units during the present turn.
SideProperty: total-time-used
seconds
This property is the number of (real) seconds that this side has been moving units during the course of the game.
SideProperty: timeouts
n
This property is the number of "time outs" a side gets for the game.
SideProperty: timeouts-used
n
This property is the number of "time outs" a side has already used up.
SideProperty: finished-turn
t/f
This property is true if the side has declared that it is finished
moving things during this turn. Defaults to false
.
SideProperty: willing-to-draw
t/f
This property is true if the side will go along with any other side that
wants to end the game in a draw. Defaults to false
.
Doctrines are objects that units consult to decide about individual behavior.
SideProperty: doctrines
utype-property-groups...
This property is the side's unit-type-specific doctrine. Each
utype-property-group has the form (unit-types
doctrine)
. Defaults to ()
.
SideProperty: doctrines-locked
t/f
This property says whether the docrine-unit type correspondence for the
side may be altered during the game. This property does not control
whether or not the properties of the doctrines may be altered. Defaults
to false
.
SideProperty: default-doctrine
doctrine-id
This property is the base doctrine that applies to all unit types by default.
Form: doctrine
[ id ] properties...
This form creates a doctrine with the given id and properties.
DoctrineProperty: resupply-percent
n%
This property indicates that when the level of a operationally-consumed
material is at n% of capacity, try to resupply. Defaults to
50
.
DoctrineProperty: rearm-percent
n%
This property indicates that when the level of a combat-consumed material is at n% of capacity, try to resupply.
DoctrineProperty: repair-percent
n%
This property indicates that when the unit's hp is at n% of max, make a plan to repair.
DoctrineProperty: construction-run
type-value-list
This property is the default number of units to build when construction has been requested.
DoctrineProperty: locked
t/f
This property is true if the properties of the doctrine cannot be
modified by the side's player during the game. Defaults to
false
.
Sides can be restricted to only acting with certain kinds of units, or only doing certain kinds of actions.
SideProperty: could-act-with
utype-value-list
A list of unit type and boolean pairs.
If the boolean value is true
,
then the side can use the unit type to act with.
If false
, then the side cannot use the unit type to perform
any actions.
Defaults to true
for all unit types for all sides but the independent
sides. Defaults to false
for all unit types for the independent side.
The differing behavior of the independent side is due to legacy reasons.
SideProperty: could-construct
utype-value-list
A list of unit type and boolean pairs.
If the boolean value is true
,
then the side can construct the unit type.
If false
, then the side cannot construct the unit type.
Defaults to true
for all unit types.
SideProperty: self-unit
unit
This property identifies a unit that represents the side itself. The
value may be a unit id, number, string, or symbol. Defaults to
0
, which means that no unit represents the side. See below for
more details on self units.
SideProperty: units
list
This property is a weighted list of units that could be given to the
side during setup in order to satisfy the side's start-with
numbers.
SideProperty: treasury
mtype-value-list
This property is the quantity of each type of material belonging to the side as a whole, independent of materials in specific units.
SideProperty: priority
n
The order in which the side will get to act, relative to other sides and
to units. Defaults to -1
. Note that the sequential
variant will automatically cause side priority to be set to nonnegative
values, unless the value is already nonnegative.
SideProperty: action-priorities
(utype val)...
This property is the acting priority of units belonging to the side.
SideProperty: scores
(skid val)...
This property is the current values of any numeric scores being kept for
the side. It is a list of pairs of scorekeeper id and value. Defaults
to ()
.
SideProperty: attack-stats
n...
These properties are the raw counts of attacks and hits, by attacking
and defending unit types. Default to ()
.
SideProperty: gain-counts
n...
SideProperty: loss-counts
n...
These properties are the raw counts of unit gains and losses, organized by unit type and gain/loss reason.
Form: independent-units
properties...
Like the side
form, but sets properties for independent units.
SideProperty: ui-data
data...
This property contains interface-specific data for the side. This is mainly for preservation across game save/restores. The property's value has the form
((interface-type data) (interface-type data) ...)
so that each interface can maintain its own data separately.
SideProperty: ai-data
data...
This property is information about the AIs associated with a side. The property's value has the form
((ai-type data) (ai-type data)
...)
so that each type of AI can maintain its own data separately. The form and meaning of each AI's data is specific to it alone.
SideProperty: standing-order
data...
This property contains the list of standing orders for the side.
GlobalConstant: always
This symbol indicates a standing order that is always to be executed
by a unit.
GlobalConstant: @
This symbol indicates a standing order that units of the specified
types are to execute when at a given location.
GlobalConstant: in
This symbol indicates a standing order that units of the specified
types are to execute when occupying a given unit.
GlobalConstant: near
This symbol indicates a standing order that units of the specified types are to execute when within a given distance of a given location.
The independent side is in most ways a side like the others, but in other ways it is incomplete. For instance, independent units act, well, independently of each other.
GlobalVariable: no-indepside-ingame
t/f
This variable is true if the game should not allow the players to make the independent units active. This is appropriate for historical games where all the participating side are predefined, for instance.
GlobalVariable: indepside-has-ai
t/f
This is true if an AI should be created for the independent side.
GlobalVariable: indepside-can-build
t/f
This is true if independent units may construct new units.
GlobalVariable: indepside-can-develop
t/f
This is true if independent units may develop their technology.
Player objects are rarely necessary when building game designs; they typically only appear in saved games, in order to ensure that the same players get the same sides upon restoration.
SideProperty: player
id
This property is the unique identifier of a player that is running this
side. Defaults to 0
, which means that no player has been
assigned to the side.
Form: player
[ id ] properties...
This form defines a player. If the id is supplied and matches the id of an existing player, then the player object is updated using the properties, otherwise a new player object will be created, using the given id if supplied, otherwise creating a new value.
GlobalVariable: player-sides-locked
t/f
This variable is true
if the player/side assignment may not be
changed while the game is starting up. Defaults to false
.
The number of players must always be less than the number of sides (sides without players just don't do anything).
PlayerProperty: name
str
This property identifies the player by name.
PlayerProperty: config-name
str
This property identifies a particular set of doctrine and other definitions that the player is using.
PlayerProperty: display-name
str
This property identifies the display being used by the player's interface. The interpretation of this value is dependent on the interface in use.
PlayerProperty: ai-type-name
str
This property is the type of AI that will play the side if requested or
necessary. The set of choices depends on what has been compiled into
Xconq. (The general-purpose AI type "mplayer"
will usually
be available, but is not guaranteed.) An ai-type-name
of
""
means that no AI will run this player.
PlayerProperty: password
str
This property is the encoding of a password that must be entered before this player object can be reused successfully.
PlayerProperty: initial-advantage
n
This property is an initial relative strength at which the player should
start. Some synthesis methods can use this to give more units or some
other advantage to each player according to the requested strength.
Defaults to 1
.
GlobalVariable: advantage-min
n
GlobalVariable: advantage-max
n
GlobalVariable: advantage-default
n
These variables set the bounds and default values for players' initial
advantages. Default to 1
, 9999
, and 1
,
respectively.
Xconq is not guaranteed to be able to be able to set up a game with any combination of player advantages; the limits depend on the capabilities and characteristics of the synthesis methods that use the requested advantages in their calculations.
The properties of a side can come from a number of different sources (here listed in order of precedence):
side
form for the side.
side-defaults
form for the game.
Note that interface-specific and general config files can never alter certain properties of a side, and can only alter others if they are not locked.