Designing Games with Xconq - Static Relationships Between Types

Go to the first, previous, next, last section, table of contents.

## Static Relationships Between Types

In general, static relationships are those that must always hold during a turn. Xconq will usually only test these when necessary, but this is up to the implementation. From the players' and designers' point of view, these relationships can never be violated, even temporarily.

- Occupants and Transports
- Units and Terrain
- Units and Materials
- Terrain and Materials
- Units and Advances

### Occupants and Transports

A unit inside another unit is an "occupant" in a "transport", even if the "transport" can never move. There are two kinds of capacity. Generic capacity is shared by all different types, while guaranteed capacity is for a particular type only.

UnitTypeProperty: `capacity` n

This property is the limit on the sum of sizes of units that may occupy this type of unit, not counting the exclusive capacities.

TableUU: `unit-size-as-occupant` u1 u2 -> n

This table is the "size" of a (full-sized) unit u1 when it is in a transport u2. Defaults to `1`.

TableUU: `unit-capacity-x` u1 u2 -> n

This table is the number of units of type u2 that are guaranteed a place in a unit of type u1.

TableUU: `occupant-max` u1 u2 -> n

This table is the upper limit on the number of occupants of this type (not counting `unit-capacity-x`).

UnitTypeProperty: `occupant-total-max` n

This property is the upper limit on occupants of all types together. Defaults to `-1`, which allows unlimited occupancy.

UnitTypeProperty: `mobile-total-max` n

This property is the upper limit on the number of mobile units (speed > 0) allowed as occupants. Defaults to `-1`, which allows unlimited occupancy.

UnitTypeProperty: `facility-total-max` n

This property is the upper limit on the number of facility units (`facility` is true) allowed as occupants. Defaults to `-1`, which allows unlimited occupancy.

A unit that is an occupant may not always have the same capabilities as when it is out in the open. Its vision, combat, construction, and capacity may be affected.

TableUU: `occupant-vision` u1 u2 -> n%

This is the effect on u1's vision of being an occupant in a unit of type u2. If the value is 0, then u1 is completely blind while an occupant. Defaults to `100`.

TableUU: `occupant-combat` u1 u2 -> n%

This table defines the effect on the combat abilities of a unit of type u1 when an occupant in a unit of type u2. If `0`, then the occupant cannot attack or fire. Defaults to `100`.

TableUU: `occupant-can-construct` u1 u2 -> t/f

This table is `true` if u1 can create or complete units while an occupant of u2. Defaults to `false`.

TableUU: `occupant-can-have-occupants` u1 u2 -> t/f

This table is `true` if u1 can have occupants of its own while an occupant of u2. Defaults to `false`.

### Units and Terrain

This section describes relationships between units and terrain. Units can be set to disappear or be wrecked on particular types of terrain. If the terrain can be occupied safely, there may be a limit on the numbers of units that can be in the same cell.

TableUT: `vanishes-on` u t -> t/f

This table is `true` if a unit u will disappear instantly if it somehow ends up on terrain of type t. Defaults to `false`.

TableUT: `wrecks-on` u t -> t/f

This table is `true` if a unit u will wreck instantly if it somehow ends up on terrain of type t. Defaults to `false`.

TerrainTypeProperty: `capacity` n

This property is the limit on the sum of unit sizes that may share this cell. Defaults to `1`.

TableUT: `unit-size-in-terrain` u t -> n

This table is the "size" of a (full-sized) unit u when it is in/on the terrain t. Defaults to `1`. (Note that this is not the same as the size property of an advanced unit.)

TableUT: `terrain-capacity-x` u t -> n

This table is the number of (full-sized) units of type u that are guaranteed to have a place in the cell.

Note that the units' sides are irrelevant; the sizes of units of all sides are added together. Limits are calculated separately for the connection and open terrain in a cell; however, it is possible for a unit in a cell to override any capacity due to connections in that cell.

TableUT: `capacity-negation` u t -> t/f

UnitTypeProperty: `stack-order` n

This property is the relative position of this type of unit within a stack of different units. Larger values put units higher in the stack. The exact values are unimportant, they are just used as sort keys. The use of this value is to ensure that particular types are "seen first" when looking at a cell, so for instance if a truck and a city are stacked on the same cell, everybody will see the city and not the truck. The owner of these units can still see them. If the stack-order of two units is the same, then the higher-numbered type will be higher in the stack.

There is a possible bizarrity with stacking limits and units that can't see each other when in the same hex, namely that a player could be prevented from moving a unit into a cell that looks like it has enough room.

### Units and Materials

Units can carry materials.

TableUM: `unit-storage-x` u m -> n

This table is the space reserved specifically for each type of material.

Materials that represent people may surrender to a unit in their cell.

TableUT: `people-surrender-chance` u t -> n%

This table is the base chance that people in terrain of type t will change sides if a unit of type u is in their cell.

TableUM: `people-surrender-effect` u m -> n

This is a multiplier that takes the people type into account. Defaults to `100`.

### Terrain and Materials

TableTM: `terrain-storage-x` t m -> n

This table is the maximum amount of a material m that may be present in a cell with terrain t.

### Units and Advances

TableUA: `advance-needed-to-build` u a -> t/f

This table is true whenever the side must have achieved advance a before it can being to construct units of type u.

UnitTypeProperty: `obsolete` a

This property is the type of advance that makes a unit obsolete, meaning that units of that type may longer be constructed (existing units are unaffected though). Defaults to `non-advance`, meaning that the unit type is never obsolete.

Go to the first, previous, next, last section, table of contents.