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. This is needed for registering the objects before they are loaded.

  • init.lua will load the units if they are used in the game

  • Help 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.

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: