Defining Units¶
A tribe can have the following types of units: buildings (militarysites, partially_finished, productionsites, trainingsites and warehouses; headquarters are a special case of warehouse), immovables, workers, wares, and a ship.
The definitions for the tribes’ units are located in the subdirectories of
data/tribes
. Each subdirectory needs to have a register.lua
and an init.lua
file.
register.lua
will inform the engine about the existence of units and their attributes if they have any. Attributes are only supported for immovables (and critters). This is needed for registering the objects before they are loaded.init.lua
will load the units if they are used in the gameHelp texts contained in
data/tribes/initialization/<tribe_name>/units.lua
will provide the information used by the in-game help (‘Tribal Encyclopedia’) and by our website’s online Encyclopedia.
Example for init.lua
:
push_textdomain("tribes")
wl.Descriptions():new_immovable_type {
name = "berry_bush_blueberry_tiny",
...
}
wl.Descriptions():new_immovable_type {
name = "berry_bush_blueberry_small",
...
}
wl.Descriptions():new_immovable_type {
name = "berry_bush_blueberry_medium",
...
}
wl.Descriptions():new_immovable_type {
name = "berry_bush_blueberry_ripe",
...
}
pop_textdomain()
The matching register.lua
would look like this:
return {
berry_bush_blueberry_tiny = { "seed_berrybush" },
berry_bush_blueberry_small = {},
berry_bush_blueberry_medium = { "flowering" },
berry_bush_blueberry_ripe = { "ripe_bush" },
}
Note
If you are defining multiple unit types that can be enhanced or that will
transform into each other in the same init.lua
, the enhanced/transformed type
needs to be listed first.
Also, berry_bush_blueberry_small
in this example has no attributes, so its
attribute table is empty.
In addition to its normal attributes, every unit defined by an add-on needs to define exactly one of the special attributes __skip_if_exists
or __replace_if_exists
. This attribute determines how the engine proceeds if a description of the same name has already been registered. Units not contained in an add-on may not use these attributes.
Available unit types: