NAME¶
xbattle - a multi-user battle strategy game
SYNOPSIS¶
xbattle [-<color> <display>...] [-<option>
<argument>...]
DESCRIPTION¶
Assign a team color and display to each player, and any number of options with
argument where required. <color> can be a monochrome tone, -black -white
-dark -light, or a color, -red -green -blue ; <display> is the name of
the x display for each player. Command line arguments can be supplied in any
order. For a quick introduction, go straight to the EXAMPLES section below.
Also, see the tutorials supplied with the game, which are "csh"
shell scripts that start up example games.
OPTIONS¶
USAGE: xbattle <args>
-<c1> <str> color to display name <str>
-<c1>_<c2> <str> colors to display name <str>
-area troops proportional to area
-attack allow use of attack key
-armies <int> number of ordered armies
-basemap use map scheme, bases visible
-bases <int> number of ordered bases
-board <int> size of board (in cells, x=y)
-boardx <int> width of board (in cells)
-boardy <int> height of board (in cells)
-border <int> border around board
-bound allow drag-bounded vector sets
-build <int> build cities with <int> segments
-build_cost <int> cost to build city segment
-build_limit <int> limit cities each side can build
-color <spec> set RGB values for color <str>
-color_inverse <spec> set color <s1> inverse to <s2>
-decay <int> make troops slowly die off
-diamond use diamond tiling
-dig [int] [int] step terrain lowering
-dig_cost <int> cost of each dig step
-digin <int> provide entrenchment
-disrupt attacks break supply lines
-draw <int> specify a troop drawing method
-dump <file> dump configuration to <file>
-edit [file] interactively edit xbattle board
-erode make unused paths erode
-erode_thresh <int> threshold for erosion
-farms <int> troops slowly grow
-fight <int> intensity of fighting
-fill [int] [int] step terrain raising
-fill_cost <int> cost of each fill step
-forest <int> density of forest
-forest_color <spec> RGB values for forest level
-forest_tones <int> number of forest levels
-grid show grid
-guns <int> range of artillery
-guns_cost <int> cost of each artillery shell
-guns_damage <int> damage done by artillery shell
-help print argument list
-hex use hexagonal tiling
-hidden invisible enemy vectors
-hills <int> slope of hills
-hill_color <spec> RGB values for hill level <int>
-hill_tones <int> number of allowable hill levels
-horizon [int] can't see enemy past [int] cells
-load [file] load board from [file]
-localmap mapping with invisible terrain
-manage managed control of commands
-manpos manual positioning of board
-map use basic map scheme
-march <int> number of delays between marches
-maxval <int> maximum cell troop capacity
-militia <int> randomly distributed troops
-move <int> speed of troop flow
-nospigot [int] cease attack if outnumbered
-octagon use octagonal/square tiling
-options <file> read xbattle options from <file>
-opt_file.xbo shorthand -options opt_file.xbo
-overwrite just use terrain from load file
-para <int> range of paratroopers
-para_cost <int> cost of each paratrooper
-para_damage <int> invading strength of paratrooper
-peaks <int> number of terrain peaks
-peak_bias <float> peak distribution bias (0.0-2.0)
-rbases <int> number of distributed bases
-rbase_range <int> distance of rbase from enemy
-repeat repeat of last mouse command
-replay [file] replay stored game from [file]
-reserve allow reserve of troops
-scuttle [int] enable city scuttling
-scuttle_cost <int> cost of scuttle
-sea <int> pervasiveness (+ levels) of sea
-sea_block use block-fills, not hue-fills
-sea_color <spec> RGB values for sea level <int>
-sea_tones <int> number of allowable sea levels
-sea_value <float> darkness of seas for b/w games
-seed <int> random number generator seed
-speed <int> speed of updates
-square <int> side length of cell
-stipple <spec> set stipple (b/w) pattern
-store [file] store game for later replay
-towns <int> density of distributed towns
-triangle use triangular tiling
-trough_bias <float> trough setting bias (0.0-2.0)
-xpos <int> x position of board on display
-ypos <int> y position of board on display
-wrap wrapping around edges of board
RUN-TIME COMMAND SUMMARY¶
COMMANDS IN GAMEBOARD¶
LFT MOUSE: toggle command vector
MID MOUSE: clear and set new command vector
RGT MOUSE: repeat previous command (-repeat)
SHIFT-LFT MOUSE: march (-march) fork move (else)
SHIFT-MID MOUSE: force march (-march) fork move (else)
SHIFT-RGT MOUSE: paratroops (-para)
CTRL-RGT MOUSE: artillery (-guns)
CRTL-'s': pause game
CRTL-'q': resume game
CRTL-'p': save game state to map file
'a': attack enemy square (-attack)
'b': build base (-build)
'B': build full base (-build & -manage)
's': scuttle base (-scuttle)
'f': fill terrain (-fill)
'F': fill full terrain (-fill & -manage)
'd': dig terrain (-dig)
'D': dig full terrain (-dig & -manage)
'p': paratroops (-para)
'P': paratroops - on (-para & -manage)
'g': artillery (-guns)
'G': artillery - on (-guns & -manage)
'z': cancel all movement
'c': cancel managed operation (-manage)
'0'-'9': reserve (-reserve)
COMMANDS IN TEXT AREA¶
CONTROL-c: quit the game
CONTROL-w: quit game but watch others play on
CONTROL-g: ring bell on all game displays
CONTROL-p: dump the current game state
OTHER CHARACTER: append to message string
DESCRIPTION¶
xbattle is a concurrent multi-player battle strategy game that captures the
dynamics of a wide range of military situations. The game board is a matrix of
game cells (such as squares or hexes) which can be occupied by troops of
various colors or shades. The number of troops in a cell is indicated by the
size of a colored troop circle (or square) within that cell. The troops are
commanded by clicking the mouse near the edge of the cell in the direction
that the movement is to take place. The command will be acknowledged by the
appearance of a movement vector, and thereafter, in each update cycle, a
certain proportion of the troops will move from the source cell to the
destination cell until the source cell is exhausted. Movement vectors can be
set in several directions at once, in which case the movement is divided
evenly between the vector directions, and the command remains active until
canceled. Thus a trail of circles can be set up as a supply line that will
deliver troops steadily at its endpoint. The movement vector remains active
even if the number of troops in that cell is zero, although the movement
vector will then be displayed at half length. The game is concurrent, so that
commands are given continuously by all players without waiting for turns.
TEAM SIDES AND PLAYERS¶
-<color>, -color, -color_inverse, -stipple
The game is started from one display, and each player must play from a separate
display, players being assigned to a color team by the command line option
"-<color> <display>". The parameter <color>
determines the color of the troops of that team, which can be either a
monochrome tone like black, white, dark, light, or a true color like red,
green, blue, although the true colors will appear on a monochrome monitor as
either black or white with an identifying character in each troop marker which
is the first letter of the color name. For instance, the team color
"-red" would appear on a monochrome monitor as black with a letter
"R" in the middle of each troop marker. The legal team color names
can be selected from any color defined in the file /usr/lib/X11/rgb.txt which
includes such bizarre entries as "LavenderBlush",
"MistyRose", "PapayaWhip" as well as the standard
"red", "green", "blue" and "black" and
"white" etc. Alternatively, colors can be defined individually in
the default file (.xbattle), an option file (see OPTIONS section below), or in
the command line itself using the "-color <str> <r> <g>
<b>" option. With this option, the color is given by <str>,
and the red green and blue components by <r>, <g>, and <b>
respectively, in the range (0-255). A black and white pattern can be assigned
to correspond to color name <str> via the "-stipple <str> 8 x
<hex>" option, where the binary breakdown of each of eight hex
numbers (in form like "0xa4") specifies one of the eight rows of the
pattern.
By default, xbattle supports the colors "dark", "light",
"gator", "brick", which appear as bitmap textures on
monochrome monitors, allowing monochrome players to have six distinguishable
team colors. A number of people can be assigned to the same team by repeating
the color for different displays, for example "-red display1 -red
display2", and each member of the team will be able to command any troops
of that team. The <display> argument designates the name of the display
on which the team of that color is playing, so each player must be given a
color and a display. Display names can be found with the unix command
"who", which will list display names for users in the last column
like (cnsxk:0.0). The system console is always designated unix:0.0. The
display name can be modified for remote games, for example the terminal
cnsxk:0.0 on park.bu.edu (email address of machine "park") is
designated cnsxk.bu.edu:0.0 . XBattle recognizes :0.0 as the default (screen
zero on the display), so the :0.0 may be omitted from the display name.
XBattle also recognizes a special display name "me", which means the
display from which the program is started. When playing between color and
monochrome displays the colors can be specified more exactly by concatenating
a color name with a monochrome name, for example "-red_white" (color
first), which would display that team as red on color monitors and white on
monochrome monitors. All command line flags and arguments for the game can be
given in any order as long as the argument directly follows its flag, and most
arguments are scaled to range from 1 to 10, with 5 being the default value. It
is also possible to set different game parameters for the different displays,
so that the game can be biased to favor a less experienced player (see BIASED
GAMES below).
OPTIONS¶
-options
A large number of command line options are available to define the parameters of
the game. In essence, xbattle is many thousands of games rolled into one. The
options can be presented in any order, and may be typed in with the command
line, or they can be stored in an options file (default filename =
default.xbo), or some can be stored and others added to the command line. The
format for the options file is exactly the same as the format for the command
line except that in the file each option (plus argument, where applicable) is
placed on a separate line. So, for example, the game...
xbattle -black me -white cnsxk:0.0 -armies 4 -farms 5
-attack
could also be played with the command...
xbattle -black me -white cnsxk:0.0 -options myoptions.xbo
or alternatively with the shorthand version...
xbattle -black me -white cnsxk:0.0 -myoptions.xbo
where the file myoptions.xbo consists of the lines...
-armies 4
-farms 5
-attack
If the specified options file cannot be found in the current directory, xbattle
will search the default xbo directory DEFAULT_XBO_DIR, which can be specified
at compile time in the makefile.
XBattle checks for the presence of the default file ~/.xbattle, in which options
can be set in advance, saving the trouble of having to set them at run time or
include an options files. The default file is typically used to set up
commands which are used in nearly every game at a particular site. Thus a
typical default file might contain color (and black and white) definitions,
cell size, artillery damage, and the like. Option files, on the other hand,
are typically used to define specific scenarios involving unique combinations
of command line arguments. Conflicting commands in the default and options
file are resolved in favor of the options file.
TROOPS¶
-bases, -rbases, -rbase_range, -armies, -militia
Initial troop allocation is controlled by several command options, including
-bases <n>, -rbases <n>, -armies <n> and -militia <n>.
Armies and militia are troops on the gameboard, whereas bases which are
indicated by circles on the gameboard, provide a steady supply of troops. The
-bases option allocates <n> bases to each team, symmetrically arranged
on the game board, whereas -rbases <n> arranges them randomly (which
works well with the -horizon option). The minimum distance between enemy bases
(in cells) can optionally be set using the -rbase_range <n> command.
Note that large values of <n> may not allow any valid rbase allocation,
in which case xbattle will exit with an error message. The -armies option
allocates <n> armies (full troop cells) symmetrically arrayed, whereas
-militia <n> scatters militia of random strengths to random locations,
with a probabilistic density of <n>. At least one of these four options
is required to provide initial troops for the game, and they may be used in
arbitrary combinations.
RESUPPLY¶
-towns, -farms, -decay, -erode, -erode_thresh
The bases created by the -bases or -rbases produce a steady supply of fresh
troops. The bases can be occupied by an opposing team, with the troops
produced by such bases are always the color of the occupying force. The
capture of all bases thus becomes the strategic objective of the game. This
arrangement simulates desert warfare, as long and tenuous supply lines develop
between the base and the battle areas. Another form of resupply is provided by
the command option "-towns <n>". This produces a number of
smaller unoccupied supply sources scattered randomly over the game board at a
density determined by the argument <n>, and with random rates of troop
production, indicated by the radius of the circle on the game board. Towns
must be occupied by a team to begin producing troops. This option simulates
yet a larger scale of operation as the combatants battle to occupy the towns.
A more distributed form of resupply is evoked by the command option
"-farms <n>" whereby every cell of the game board will produce
troops as soon as it is occupied, at a rate proportional to the argument
<n>, and the strategic objective becomes the occupation of the largest
areas of the gameboard. This option simulates a yet larger scale of operation
and requires complex management of resources to concentrate the distributed
resources and deliver them to the battle front. In large scale scenarios
additional realism may be added by using the "-decay <n>"
option whereby the troop strength in all troop cells decays constantly in
proportion to the value of the decay argument. This reflects the fact that
armies constantly consume resources even while they are idle, and an army
without constant resupply will wither away. With the decay option, a set of
bases, towns or farms can only support armies of limited size, and the armies
will dynamically grow or shrink until they reach that size. Since this number
includes the troops that make up the supply line, the fighting power of an
army diminishes with the length of the supply line. The default decay value is
zero, i.e. no decay. All the resupply options can be used in any combination.
The "-erode <n>" command doesn't affect resuply, per se, but
it does effect the movement vectors through which troops flow by causing them
to erode away as they grow older. All movement vectors in a cell will be unset
at a random time not to be less than <n> update cycles, with probability
of erosion for each subsequent cycle determined by the "-erode_thresh
<m>" argument, where <m> is the percentage chance of erosion.
ENHANCED MOVEMENT COMMANDS¶
-repeat, -bound, -attack, -march, -reserve
With the option "-repeat" you can repeat the last command using the
right mouse. If for example your last command to a cell consisted of a
"move up" command by clicking near the top edge of the cell, you can
now command other cells to also move up by clicking in those cells with the
right mouse. That way you no longer have to aim your click exactly at the top
side of those cells, but can click the right mouse anywhere in that cell,
which saves time. This command is supported in biased games - i.e. it can be
set for one team but not another. Commands can be made to apply to more than
one cell with the option "-bound". This is achieved by defining a
bounding rectangle within which the command is valid. For instance, to command
a block of cells to all move up simultaneously, you place your mouse near the
top edge of a cell (may be unoccupied, or enemy occupied) and press the button
(setting the command "go up", then you drag the mouse to another
game cell where you release the button. The start and end cells of the mouse
drag define the opposite corners of a rectangle within which all the game
cells occupied by your troops receive the command "go up". The
"-attack" option makes quick, multiple front attacks possible. By
issuing an "a" command in an enemy cell, all adjacent friendly
troops will automatically alter their movement vectors so as to attack the
enemy cell, and only that cell. The "-reserve" option allows a
player to define a level of reserves to remain in the cell despite any
movement vectors. For instance a reserve level of 5 would ensure that the cell
will maintain a reserve of 50% capacity, and movement out of that cell will
only occur with troops in excess of the reserve level. This is extremely
useful when a supply line must pass through a strategically important part of
the board. The reserve level is set in a particular game cell by pointing to
that cell with the mouse and striking a number key, "1" for 10%
reserves, "2"for 20% reserves, and so forth up to "9" for
90% reserves.
With the option "-march <n>", troops may be commanded to march
in a particular direction and to continue in that direction without further
commands. March commands are activated with shift left or shift middle mouse
button. For example, if you click near the top edge of a cell with "shift
left mouse", the troops will begin to march up, and on arrival in the
next cell they will transfer the march command to that cell so that they will
continue marching upwards to the next cell, and so forth. If a marching column
encounters hostile forces the march command is canceled and the column stops.
To prevent marching columns from traveling much faster than manually commanded
troops, the march argument <n> defines the number of game update cycles
that the troops must wait in each new cell before marching on to the next
cell, so that "-march 1" will result in a fast march, whereas
"-march 10" will be slow. The "march command" is indicated
on the game board by a double command vector (looks like an "="
sign) in the appropriate direction, and the march command is always passed on
to the head of the column. March commands may be set in cells that are NOT
occupied by your troops, and will be activated when a marching column arrives
in that cell. This allows you to define turns in the path of the marching
column to avoid obstacles. A "stop march" command may also be set to
program the marching column to stop in that cell. This is achieved by clicking
"shift left mouse" in the center of that cell, and will be displayed
as an empty box in that cell. When set with the left mouse, the march vector
is overwritten on to existing command vectors encountered in the march path,
whereas when set with the middle mouse the march vector removes and replaces
existing command vectors. March commands are canceled by clicking on the cell
without the shift key. March commands may be set in cells that are beyond the
visible horizon in the normal way , and will appear as a double vector in that
cell so long as that cell is not a "sea" cell. If the target cell
contains invisible enemy troops, then the march command vectors will appear
initially, but disappear again as soon as the enemy is approached close enough
to be visible. March commands are specific to the team that sets them, and
different march commands may be set by different teams in the same game cell.
The double command vectors are visible only to the team that sets them.
GAME PLAY¶
-fight, -speed, -move, -seed,
-digin, -nospigot, -disrupt, -maxval
Whenever troops of different colors occupy the same game cell, a battle ensues,
indicated by concentric markers of the two colors, and a "crossed
swords" (X) symbol. During battle, one or both sides can incur losses
according to a random nonlinear function that disproportionately favors the
more numerous troops. The steepness of the nonlinearity, i.e. the advantage
given to the more numerous side, is controlled by the -fight parameter. A
small value will produce lengthy drawn out battles which favor a defensive
strategy, whereas a large value produces quick decisive battles where the
random element is more significant, favoring an offensive strategy even
against superior odds. In the absence of the -fight option, the default value
of 5 is used. The -fight parameter is also automatically modulated by the game
speed parameter (-speed) in order to slow down battles in fast games and vice
versa. Since only 1/3 of the troops can enter a cell in each update cycle
(with the default -move 5), attackers of a full cell are always outnumbered
initially, unless a coordinated attack is launched from three sides
simultaneously. The -move argument thus has a significant influence on the
efficacy of an attack. The -disrupt option dictates that when a game cell
comes under attack, all its command vectors are immediately canceled, breaking
supply lines which must be repaired by hand after the attack. In other words,
there can be no movement under fire, and even small forces can be used to
provide covering fire to "pin down" a larger force, at least until
they are counter-attacked and eliminated. A side effect of this option is that
when an attacking cell is counterattacked, both cells attempt to cancel each
other's movement, i.e. to interrupt the attack. The cell that is updated next
will prevail, canceling the command vector of the other cell. Since the game
cells are updated in a random sequence, there is no telling which cell will
prevail, and the commander must click repeatedly to renew the command vector
in order to press home the attack under opposition. This simulates the
tactical situation where a commander must personally intervene to ensure the
maximal effort is applied at the most critical points of the battle. The
"-seed <n>" option simply sets the seed of the random number
generator to <n>, which is useful for recreating scenarios. By default
the random number generator is seeded with a combination of the system time
and process ID number --- a more-or-less random number.
In each update cycle some fraction of the troops in a game cell move to adjacent
cells indicated by the command vectors. The default fraction is 1/3, so that
in each successive cycle, 1/3 of the remaining troops move out of the cell
until it is empty. That fraction is adjusted with the -move argument, 1 for
less movement, and 10 for more movement. The option -digin <n> simulates
the time and effort required for troops to dig in and build fortifications.
This is achieved by reducing the rate of flow of troops into a cell as it
fills up to capacity, so that to achieve a really full troop cell the men must
dig in and settle down to accommodate the last arrivals. The argument
<n> modulates the strength of this effect, from 1 to 10 for small to
large. The maximum number of troops which can occupy a single cell is set via
-maxval <n>. Note that for octagonal tiling only, the some cells (the
square ones) will have different maxvals.
The -nospigot [n] option causes troops to automatically cease attacks when they
are highly outnumbered, preventing the "spigoting" (perhaps
"siphoning" would be more appropriate) which can empty whole supply
lines into needless slaughter. Neighboring supply lines are shut off whenever
the troops in a cell are outnumbered by a ratio given by the argument to the
nospigot command.
BOARD CONFIGURATION¶
-cell, -board, -boardx, -boardy, -border, -manpos,
-xpos, -ypos, -area, -wrap, -grid
The dimensions of the game board can be tailored via the -boardx <n> and
-boardy <n> options which set the horizontal and vertical board
dimensions, in terms of cells. The -board <n> option creates a square
board. The dimension of each cell, in pixels, is set by the -cell <n>
option. The xbattle window border can be set with -border <n>, while the
initial x and y position of the game board can be set with -xpos <n> and
-ypos <n> respectively. The -manpos option allows each player to
position his or her window interactively (does not work with all window
managers). A grid indicating the borders of each cell is established via the
-grid command (the default), and can be eliminated via the negative command
-no_grid. Game play wraps around the edged of the board if the -wrap option is
invoked, although certain tiling schemes require even or odd board dimensions
for wrap to work properly in both the horizontal and vertical directions.
Troop markers are scaled by area (proportional to number), rather than
diameter, if the -area option is used.
TILING METHODS¶
-diamond, -square, -hex, -octagon, -triangle
A number of different tiling methods are available in xbattle, each of which
employs cells of a different shape. Square cells in a rectangular grid are
used for the -square option (the default). Hexagonal cells are used with the
-hex option. The -diamond option results in a square tiling, tilted by 45
degrees. A tiling consisting of two orientations of equilateral triangles is
invoked with the -triangle option. The -octagon option results in a tiling
consisting of a combination of regular octagons and small squares. Since
different cell shapes have different neighborhoods, troop movement in the
different tilings can have a very different feel, and may take some getting
used to.
DRAWING METHODS¶
-draw
The method of drawing and erasing troops and terrain is defined via the -draw
<n> option, where the argument indicates one of five distinct
techniques, of varying speed and flicker. They are: Method 0: Erase the cell
by drawing a circle the color of the terrain, then redraw the cell contents.
This is the method employed in xbattle versions before 5.3. Although simple
and fast, the onscreen erasing and redrawing often results in annoying
flicker. METHOD 1: Erase and redraw cells as for method 0, but do the whole
process on a backing store pixmap, then copy the cell to the window. The copy
from the pixmap to the window adds some overhead, but flicker is completely
eliminated. METHOD 2: Copy a blank cell from pixmap storage to a working
pixmap, draw the cell contents, then copy the cell to the window. This method
exchanges the cell erase of method 1 for a pixmap-to-pixmap copy operation to
also provide flicker-free game animation. Unfortunately this method only works
for square tilings, since only rectangular cells can be perfectly extracted
during X-Window copy operations. METHOD 3: Copy the cell from the window to a
pixmap (along with a little surround for non-square cells), erase with a
circle, redraw the contents, and then copy the cell back to the window. Like
method 0, but with two extra copy operations and no flicker. METHOD 4: Copy
the cell from the window to a pixmap, erase the contents (including terrain)
via an AND operation, draw the terrain via an OR operation, draw the cell
contents, and copy back to the window. This method is fabulously complex, but
has the advantage of being the only of the above method which redraws the
entire cell contents, including terrain. Method 0 is still the default. With
any reasonably fast-drawing machine, methods 1, 2, and 3 should provide quick
enough animation. Method 4 is a bit cumbersome. Which of the methods is the
fastest depends on how fast the source machine is at drawing circles and at
copying rectangles. Due to the buffering of X Window drawing commands, even
method 0 provides reasonably good results since the cell erases often never
appear on the screen before the cell redraw.
GUNS AND PARATROOPS¶
-guns, -guns_damage, -guns_cost,
-para, -para_damage, -para_cost,
-manage
The command option -guns <n> enables the key 'g' to be used to control
artillery, which can be shot from any occupied game cell. The range and
direction of the shot are determined by the position of the cursor in the game
cell relative to the center of the cell --- near center for short range and
near the edge for long range, as modulated by the argument <n>. Every
shell costs a number of troops from the source cell equal to the argument of
-guns_cost <n> (default: 2), and destroys a number of troops at the
destination cell equal to the argument of -guns_damage <n> (default: 1).
The fall of shot is indicated by the brief appearance of a little dot of the
attacker's color. With the -horizon option the fall of shot may not be visible
for long range shots, although invisible enemy troops will be destroyed where
the shell falls. Artillery can damage both friend and foe, so it must be used
with caution. Paratroops are enabled by the option -para <n>, and are
launched similarly to artillery using the 'p' key. The cost of dropping a
number of troops equal to the argument of -para_damage <n> (default: 1)
at the destination cell is equal to the argument of -para_cost <n>
(default: 3). The drop zone is indicated by the brief appearance of a
parachute symbol. When used with the -manage option, artillery and paratroops
can be deployed continuously with the 'G' and 'P' keys instead of the 'g' and
'p' keys. This will initiate a continuous barrage that will only stop when the
source cell is exhausted, but will recommence when it is resupplied. The
managed command is indicated by the letters "GUN" or "PAR"
in the source cell, and can be canceled with either the 'c' key, or by giving
the source cell a movement command.
TERRAIN¶
-hills, -hill_tones, -hill_color,
-peaks, -peak_bias, -trough_bias,
-forest, -forest_tones, -forest_color,
-sea, -sea_block, -sea_tones, -sea_color, -sea_value
The command option -hills <n> initializes random hills which restrict
movement when going from low to high elevation, and enhance movement from high
to low, but do not affect movement on the level. The elevation is indicated by
the shade of gray, light for high and dark for low on monochrome, and brownish
for high and greenish for low on color displays. The argument controls the
amount of energy gained and lost on hills, i.e. the steepness. Hills provide a
tactical advantage when attacking downhill. With very steep hills (-hills 9)
movement from very low to very high elevation (a cliff) is virtually
impossible. The number of discrete elevation levels is set via the -hill_tones
<n> option. On color monitors, the hill hues can be tailored via the
-hill_color <n> <red> <green> <blue>, where <n>
specifies the elevation index (from 0 to hill_tones-1) to be changed to the
RGB triplet. The color of unspecified elevation indices are linearly
interpolated based on specified indices.
The command option -forest <n> initializes random forests which restrict
movement within the forest, but do not affect movement from thin to thick
forest. On both color and monochrome displays, thick forest is dark, and thin
is light. Forest may not be used in conjunction with hills. When transitioning
from one forest thickness to another, the movement is determined by the
destination cell, not the source cell, so that troops deployed within a forest
but at the boundary have a tactical advantage over those deployed outside the
boundary. As for hills, the number of distinct forest densities is specified
via the -forest_tones <n> option, with colors being specified by the
-forest_color <n> <red> <green> <blue> option.
The command option -sea <n> generates randomly distributed bodies of
water, whose prevalence is determined by the argument <n>. Such bodies
of water cannot be crossed by infantry. A small value creates scattered ponds
and lakes, which influences the tactical deployment of troops, whereas a large
value creates a maze-like pattern of fjords or rivers which isolate blocks of
land into islands which can only be taken by paratroops. On monochrome
monitors water appears dark mottled grey, and on color monitors it appears as
various shades of blue. Like hills, seas have elevation (depths), the number
of which is controlled via the -sea_tones <n> option, with colors
determined by the -sea_color <n> <red> <green> <blue>
option. Besides looking nice, sea depths are useful when playing with the -dig
and -fill options (see the TERRAIN MODIFICATIONS section). On monochrome
monitors, the option -sea_value <float> determines the blackness of the
shallowest sea, expressed as a fraction. For backwards compatibility, sea
depths can also be indicated by the size of the sea marker if the -sea_block
option is invoked.
Hills (and forest and seas) are created by a complex terrain generation
algorithm which bases elevations (or densities, in the case of forests) on a
number of fixed points, as specified by the -peaks <n> option. Based on
these <n> points with randomly determined position and elevation, the
elevation of the rest of the game cells is determined via a non-linear
interpolation process. The -peak_bias <float> option determines how hill
elevations and forest densities will be distributed --- 0.0 yields generally
low-elevation terrain, with spire-like mountains, while 2.0 yields generally
high-elevation terrain, with deep ravines. The default value of 1.0 results in
pleasantly contoured terrain. Similarly, the -trough_bias <float> option
controls the distribution of sea depths.
TERRAIN MODIFICATION¶
-dig, -dig_cost,
-fill, -fill_cost,
-build, -build_cost, -build_limit,
-scuttle, -scuttle_cost,
-manage
The command options -dig [n] and -fill [n] allow run time modification of the
terrain by digging hills and seas down to lower elevation or filling them up
to higher elevation. This allows the construction and breaching of defensive
fortifications. The cost of these operations (in troops) is determined by the
-dig_cost <n> and -fill_cost <n> options. The operations are
accomplished by positioning the mouse on the friendly cell and striking the
"d" key (for dig) or the "f" key (for fill). With the -sea
option, -dig <n> and -fill <n> can be supplied with an argument
which specifies the number of sea depths (see also -sea_tones). Since it is
impossible to occupy a sea cell to fill it, filling seas is accomplished by
setting the command vector as if to move into the sea, and then pressing
"f". Likewise for digging a sea deeper. For all other fill and dig
operations the troop cell may not have any command vectors set.
The -build <n> and -scuttle [n] options allow the building and destruction
of bases (or towns). The costs of these operations (in troops) are determined
by -build_cost <n> and -scuttle_cost <n>. When the mouse is
positioned on a friendly cell and the "b" key is pressed, the troops
are exchanged for a 1/<n> fraction of a base, displayed as an arc
segment. Thus <n> building commands are required to produce a functional
base. When the capture of a base by the enemy seems inevitable, it is often
advisable to scuttle the base to prevent it falling into enemy hands.
Scuttling is performed by positioning the mouse on the base and pressing the
"s" key. If the build option is not enabled, this reduces the size
(and production capacity) of that base by one scuttle unit for each
scuttle_cost of troops expended, where a scuttle unit is defined by the
argument of the scuttle option (default: 5). Usually, several keystrokes are
required to complete the destruction. When used in conjunction with the -build
option, instead of reducing the size of the base, each scuttle operation
removes a section (arc segment) of the base, at a troop cost indicated by the
-scuttle_cost <n> option. A base will not produce troops if even a
single segment is missing, although of course it is less expensive to repair
(with "b" build) a base with fewer segments missing.
As with -guns and -para, the -dig, -fill, and -build options (but not the
-scuttle option) can be "managed" with the -manage option, which
allows a player to issue a single command to initiate a sequence of repeated
dig, fill, or build operations using the keys 'D', 'F', and 'B' respectively.
The managed operation will continue until the task is done, as long as the
cell is resupplied. The managed operation will be indicated by the letters
"DIG", "FIL" or "BLD" respectively in the
managed cell. Managed operation can be canceled with the 'c' key, or by
issuing a movement command to the cell.
VISIBILITY¶
-horizon, -hidden, -map, -basemap, -localmap
The command option -horizon [n] restricts the view of enemy troop deployment to
within <n> cells of any friendly troops. Horizon can be called with no
argument, in which case the default <n> = 2 is used. Intelligence of
more remote regions can be gathered by use of paratroops. The command option
-hidden (no arguments) makes the command vectors of the enemy invisible at any
range. The command option -map is similar to -horizon except that it restricts
your view of geographical objects as well as enemy troops, although it will
"remember" any terrain that you have seen once, as if you had mapped
that information. The -basemap option maps bases and towns as it does the
terrain --- once you see them, they're remembered. The option -localmap maps
only the local area around your troops, and features disappear as you move
away again.
STORE AND REPLAY¶
-store, -replay
The -store <file> option allows you to store enough information about the
visual progress of the game to reconstruct it later with -replay <file>
option. When -replay is used, all other command options are ignored except the
-<color> <display> options, which can be used to send the replay
to other displays. When doing so, only the <display> portion of the
option is used, the <color> is ignored. So, if you play a game with many
command line parameters and several displays with the argument -store
<file>, after the game you can repeat the same command line but just
change -store to -replay, and the game will be replayed on the displays of all
the original combatants. When xbattle is called with the -replay option alone,
the default display will be "me". If store or replay are called
without a file name, the default name "xbattle.xba" will be used. In
the replay, the view restrictions of the -horizon option are deactivated, i.e.
all enemy troops are visible. The replay action can be paused or resumed by
typing any key, and can be interrupted with either control-c or control-q.
GAME STATE SAVING, LOADING, AND EDITING¶
-load, -dump, -overwrite, -edit
The game state can be saved at any point during the game with the control-p key.
This creates a file called "xbattle.xbt", or the name given with the
argument -dump <filename>, which represents the state of the game board
at the time of saving. Future games can be started from the saved game state
with the command option "-load <file>" where <file> is
optional if the file name is "xbattle.xbt". If the specified load
file cannot be found in the current directory, xbattle will search the default
xbt directory DEFAULT_XBT_DIR, which can be specified at compile time in the
makefile. Note that most game parameters ARE NOT STORED. Only terrain features
(forest, hills, seas, towns etc.) and troop deployment. This means that if you
were playing with -farms, -decay, and -guns then you will have to type them in
if you want them for the new game. The terrain and boardsize of the saved map
file will override all terrain and boardsize arguments when loaded. Troop and
town/base producing options (such as -militia, -towns, and -rbases) will add
new features on top of the loaded game state. If the -overwrite option is
issued, only the terrain and cities from the loaded game will be used --- no
troops will appear. This is useful for repeating games with interesting
terrains with different troop configurations.
Game boards can be created or modified with the -edit function, which is called
with the command option "-edit <file>" where <file> is
optional if the file name is "xbattle.xbt". With this option, no
game is played, but instead, the mouse and key commands control the features
of the map to be edited. To edit an existing file, use "-edit
<file>" and type "l" when the editor comes up. This will
load the file named in the edit argument. To save that file, type
"d" and the file will be saved to the same file name. No provision
is made for saving to a different file name. When using the edit mode, the
command line arguments must reflect the number and color of players to be
used, and the sea, forest or hills options if they will be required. For
example, to create a map called "mymap.xbt" with three color teams
and seas, could use the command "xbattle -edit mymap.xbt -sea 7 -white me
-black you -dark you". Note the use of the special display
"you", which is a dummy display name used as a place holder for the
black and dark colors. The interactive commands are as follows:
left button: lower terrain by one notch (sea lowest)
middle button: raise terrain by one notch
right button: toggle between lowest and mid terrain
c: create city (growth = 100)
t: create town (growth = 80)
v: create village (growth = 60)
k: increase size of city by 5 percent
j: decrease size of city by 5 percent
s: scuttle city - remove 36 degrees of arc
b: build city - add 36 degrees of arc
0-9: create troop marker with troops of current color
[: decrease troops by 1
]: increase troops by 1
r: increment current color
f: change color of existent troop marker
d: dump board with name <filename>
l: load board with name <filename>
q: quit
With the -edit option, the -overwrite option has a slightly different function.
Rather than suppress the display of troops, as it does when combined with
-load option, the -overwrite option causes default terrain to be generated for
editing. Note that boards created with during the edit process are stored in
reduced format, whereas boards saved during game play are stored in standard
format, which includes more information about each cell, at the cost of about
15 times more storage space. Standard format files can also be edited.
INTERACTIVE COMMANDS (MOUSE AND KEYBOARD)¶
Movement commands are performed with the left and middle mouse buttons, to
direct the command vector. A click in the center of the game cell clears all
command vectors; a click near an edge sets the vector in that direction, and a
click near a corner sets the two adjacent vectors. The left mouse toggles
command vectors while the middle mouse clears existing vectors and sets a new
vector (An alternative command system is available, see COMPILATION OPTIONS
below). The right mouse is used to repeat the last used command (with -repeat
option). The keyboard is interpreted differently depending on whether the
mouse is positioned on the gameboard or on the text area below. On the
gameboard, the the keys control-s and control-q pause and resume the game
respectively. The 'z' key cancels all command vectors to the cell containing
the cursor (like a click in the center of the cell). The key control-p saves
the current game to a map file (see Saving Game State commands below). There
are also a variety of keyboard commands available with different options, to
control special functions on the gameboard. These keystrokes are described in
detail with the description of the appropriate options (see -guns, -para,
-build, -scuttle, -fill, -dig, -reserve). In the text area below the keyboard,
the keys control-c and control-q both exit the player from the game, although
the game continues among the remaining players until they also quit, and the
key control-w also exits the player, but allows him or her to continue
watching as the other players play on. The rest of the keyboard is used for
communication between participants through text lines. This is especially
useful when playing between remote sites- each team has its own text line, and
the color of the text matches the color of the team. The control-g key rings
the bell on all displays, which can be used to draw attention to a new
message. All keyboard commands can be reconfigured by changing the pairings in
the keyboard.h file and recompiling.
BIASED GAMES¶
The game can be biased to favor a less experienced player, or for any other
reason, in the following way. In the normal syntax, the command line argument
"-<color>" is immediately followed by the
"<display>" argument, for example "-black me". It is
possible to define command line options that are specific to only one display
with the syntax "-<color> { <options> } <display>"
where <options> refers to a list of command line options as before, but
is included in a set of braces between the team color and the display (note
the spaces on either side of the braces). For example,
xbattle -black { -fight 10 } me -white { -fight 5 } cnsxk
where black (on display "me") has the advantage of greater firepower
than white (on display "cnsxk"). Not all options can be biased,
specifically options that control the global behavior of the game, such as
-speed, -hex, and -board. Note also that if you are using player specific and
global options, the global options MUST be listed first, otherwise they will
overwrite the play specific options. For example,
xbattle -black { -fight 10 } me -white cnsxk -fight 5
will result in a fight 5 for both players. In order to achieve the desired
result, the command line must be...
xbattle -fight 5 -black { -fight 10 } me -white cnsxk
where the local option overwrites only the black team's fight value.
EXTENSIONS¶
A great deal of effort has been made in the design of this game to make it as
simple and modular as possible. Please send any interesting variations or
extensions to lesher@cns.bu.edu.
EXAMPLES¶
Here are some example games to give an idea of the variability of the
parameters. The first example is a simple symmetrical game between
"me" in black on my own display, and a white opponent on the display
"cnsxk:0.0". The troops will be rapidly exhausted in this small
skirmish.
xbattle -black me -white cnsxk:0.0 -armies 4
The next example adds bases, which will produce a much prolonged conflict
involving long supply lines between the front and the bases, much like desert
warfare. One conflict in this battle represents a skirmish like the entire
game of the previous example. In this example black is playing on the display
cnsxk:0.0, and white is on the system console. Note that the extension
":0.0" can be omitted.
xbattle -black cnsxk -white unix -armies 4 -bases 2
The next example is a game with militia scattered around initially, that have to
race to occupy the towns and link up with their compatriots before they can
eliminate the enemy. This is a dynamic scenario requiring tactical and
strategic skill and fast reflexes. In this example black is playing on
cnsxk:0.0 while white is playing on the system console of the remote machine
thalamus.bu.edu.
xbattle -black cnsxk -white thalamus.bu.edu -towns 2
-militia 2 -hills 7
Here is a favorite around B.U. where the land is broken up by many bodies of
water creating isolated islands, and view of the enemy is restricted to nearby
cells, resulting in lots of surprises. Paratroops can be used for
reconnaissance by launching them into unknown sectors, and they must be used
in conjunction with heavy artillery barrages for airborne assaults from one
landmass to the next. In this example the color display will show cyan and red
teams, while the monochrome monitor will show white and black teams
respectively. The decay option prevents huge armies from building up at the
end of the game, and the -store option is used to store this game to the file
"xbattle.xba".
xbattle -cyan_white thalamus:0.0 -red_black cnsxk
-rbases 5 -sea 8 -guns 4 -para 4 -horizon 2
-decay 3 -store xbattle.xba
Now, the previous stored game is replayed to the original displays by repeating
the original command line except that -store is changed to -replay. This is
convenient if you have command line editing facilities.
xbattle -cyan_white thalamus:0.0 -red_black cnsxk
-rbases 5 -sea 8 -guns 4 -para 4 -horizon
-replay xbattle.xba
With -replay, all arguments are actually ignored except the displays, so you
could achieve exactly the same result with the simpler command
xbattle -black thalamus:0.0 -black cnsxk -replay
where the -black argument flags the subsequent argument as a displayname, but is
otherwise ignored, i.e. any color name would suffice. The filename for -replay
is omitted, so that the default file name "xbattle.xba" is used.
The next example illustrates the use of the options file, xbos/tribal.xbo, to
set up a game including, decay, seas, farms, militia, and many other options.
xbattle -black me -white thalamus -options xbos/tribal.xbo
Options files can also be read in individually for the two players, as in the
following example...
xbattle -options game.xbo -black me
-white { -options xbos/weak.xbo } thalamus
This results in a biased game where both black and white receive the options
defined in game.xbo, and white receives some specific handicaps defined in
weak.xbo. For example, weak.xbo could define 2 rbases instead of 5, horizon of
1 instead of 2, and lower movement and fighting values. Since these options
overwrite existing options in game.xbo, the command line arguments may NOT be
typed in arbitrary order. Global options must be defined before they are
overwritten by the specific options to the white team.
SAMPLE .XBO AND .XBT FILES¶
To provide some idea of the range of gameplay available with xbattle, a number
of option files (.xbo extension) and dump files (.xbt extension) are provided
with the xbattle 5.4.1 release in the "xbos" and "xbts"
subdirectories, respectively. These are listed below, along with very brief
descriptions.
tribal.xbo mad scramble, every man for himself
skirmish.xbo intrigue, espionage, plotting
demo.xbo demo which includes ALL options
atlas.xbo standard atlas terrain/color scheme
desert.xbo mountainous desert terrain/color scheme
io.xbo Io-like terrain/color scheme
space.xbo space-like terrain/color scheme
tropical.xbo tropical islands terrain/color scheme
tundra.xbo tundra-like terrain/color scheme
castle.xbt moated fortress with villages
natural.xbt natural streams, lakes, and hills
PLAYING TIPS¶
The first thing you must learn is to click quickly and accurately on the game
cells. Do not focus your attention on one region of the board, but scan the
whole board frequently. Look at the big picture- capture the towns that will
support each other, especially a well positioned cluster of big towns.
Eliminate all enemy troops from your rear, and advance outwards, preferably
from a corner, with a well supplied front. Travel in convoy for speed and
efficiency in safe regions, especially if you are playing with -decay, but fan
out near the enemy to provide alternate routes to a broad front (click on the
corner to open two command vectors simultaneously). Avoid head-on assaults on
the enemy, but rather dig in and wait for him to attack while you try to turn
his flank and cut off his supplies to the front, or concentrate at his weakest
points. When advancing, try to attack weak cells with strong ones to gain
maximum advantage, and be alert for losing battles of your weak cells pouring
into a strong enemy cell, which will drain your resources until you cancel the
attack and build up reserves. If however you are fighting a delaying action,
or retreating under fire then you should attack strong enemy cells with your
weak ones on a broad front to conserve resources. This is particularly
effective with the -disrupt option. Always try to attack a cell from two or
more sides, and build up sufficient strength before launching an attack on a
strong cell. Always consider the "manufacturing capacity" of the
enemy, i.e. the number and size of bases and towns, as the one with the most
capacity will eventually win. Watch out for single enemy commandos near your
unprotected bases, especially when playing with paratroops, and use such
commandos to good effect against an inattentive opponent. You can keep a base
fortified while sending troops to the front by use of recurrent connections,
going in loops or in both directions, or by establishing dead-end branches
along the supply line to accumulate local reserves. You should always have a
few strong reserves near your base when playing with -horizon or -para, to
ensure against surprise attacks. When playing with horizon and paratroops use
the paratroops to gather intelligence from beyond the horizon. When playing
with paratroops or artillery, you can create a network of recurrent
connections near the bases that will provide protection by automatically
sending troops into parts of the net that are knocked out.
COMPILATION OPTIONS¶
Certain other game options or alternatives are allowed at compile time by
editing the file "constant.h" and setting certain global flags to
FIXED_TRUE or FIXED_FALSE, before compiling the program. The flag FIXED_UNIX
should be set to FIXED_FALSE if you will be running on a non-unix platform. On
unix systems the select() function is used to enhance efficiency and reduce
computer load. The FIXED_INVERT flag may be set to FIXED_FALSE if you do not
like the appearance of the inverted command vector within the troop cell. The
FIXED_VARMOUSE option may be set to FIXED_TRUE if you would like the mouse
operations to be redefined so that the left mouse adds command vectors, and
the middle mouse subtracts such vectors. The flag FIXED_PAUSE may be set to
FIXED_FALSE to disable the ability to pause and resume the game with control-s
and control-q. The FIXED_SHOWFLOW flag in extern.h may be set to FIXED_FALSE
to make the displayed command vectors remain at full length even when the
troop strength is zero. The flag FIXED_NEWCOLORMAP can be set to FIXED_TRUE to
create a private color map for the game, useful when the default color map is
full. The flag FIXED_MULTITEXT can be set to FIXED_FALSE, whereby instead of
having a single text line for each player, two text lines are shared by all
the players. The flag FIXED_MULTIFLUSH can be set to FIXED_TRUE, whereby
command vectors appear immediately after the command is given, although
performance is noticeably impaired. If a player repeatedly "nukes"
the whole game when he is losing, you can set FIXED_FATAL_RECOVER to
FIXED_TRUE in constant.h to enable this option. User may choose between
FIXED_USE_LONGJMP and FIXED_USE_PROCEDURE methods if FIXED_FATAL_RECOVER is
set true. The former uses the c commands setjmp() and longjmp(). The latter
uses a normal procedure call to recover. Recommended use of LONGJMP. After 20
fatal errors program kicks out, as a failsafe. WARNING players use
FATAL_RECOVER at their own risk. If the flag FIXED_TIMER is set set to
FIXED_TRUE, the elapsed time from game startup will be displayed in the lower
left hand corner of the screen, within the text pane. If FIXED_UNIX is set to
FIXED_FALSE, the timer will not work.
BUGS¶
When the system is slow, there is a noticeable time lag between the mouse
positioning and the keystroke registration, so that a keystroke for a cell
pointed to by the mouse might be actually recorded in the next cell the mouse
moves to. Similarly, a shifted mouse click (as for paratroops) might be
delayed so that by the time it is processed the shift key is no longer being
depressed, and it is recorded as an unshifted mouse click (as for artillery).
Under such circumstances, avoid issuing rapid command sequences. Remote play
is extremely difficult. When a {player specific option} is followed by a
universal option, the former is overwritten by the latter, so the { player
specific option } should always follow the universal option.
AUTHORS¶
Greg Lesher (lesher@cns.bu.edu), Steve Lehar (slehar@park.bu.edu), and some
sections of code from Mark Lauer (elric@basser.cs.su.oz.au). Helpful
suggestions, bug reports, and ideas were gratefully received from numerous
contributors from all over the world.