# infrastructure.lua¶

This script contains function that ease setting up an initial infrastructure for maps. This includes placing buildings and roads.

connected_road(roadtype, plr, sflag, descr[, create_carriers = true])

This is a convenience function to create roads and waterways. It is basically a frontend to wl.game.Player.place_road(). The road is forced, that is other stuff in the way is removed. A sample usage:

local game = wl.Game()


This would create a road starting from the Flag standing at field(20,20) which must exist and goes from there 2 steps right (east), places a new flag. Then it goes one step bottom-right and one step right, places the next flag and then goes two steps right again and places the last flag.

Parameters
• roadtype (string) – ‘normal’, ‘busy’, or ‘waterway’

• plr (wl.game.Player) – The player for which the road is created

• sflag (wl.map.Flag) – The starting flag for this road.

• descr – The description of this road. This are comma separated directions as those accepted by wl.game.Player.place_road(). A | defines a flag.

• create_carriers (boolean) – If this is true carriers are created for the roads. Otherwise no carriers will be created.

prefilled_buildings(plr, b1_descr[, b2_descr, ...])

Create pre-filled buildings. Each description is a arrays which contain building type, build field and pre-fill information. A sample usage:

prefilled_buildings(wl.Game().players[1],
{"sentry", 57, 9}, -- Sentry completely full with soldiers
{"sentry", 57, 9, soldier={[{0,0,0,0}]=1}}, -- Sentry with one soldier
{"bakery", 55, 20, inputs = {wheat=6, water=6}}, -- bakery with wares and workers
{"well", 52, 30}, -- a well with workers
)

Parameters
• plr (wl.game.Player) – The player for which the building is created

• b1_descr (array) –

An array of tables. Each table must contain at least the name of the building, and the x and y positions of the field where the building should be created. Optional entries are:

wares

A table of (name,count) as expected by wl.map.Warehouse.set_wares(). This is valid for wl.map.Warehouse and must not be used otherwise.

inputs

A table of (name,count) as expected by wl.map.ProductionSite.set_inputs(). Inputs are wares or workers which are consumed by the building. This is valid for wl.map.ProductionSite and must not be used otherwise.

soldiers

A table of (soldier_descr,count) as expected by wl.map.HasSoldiers.set_soldiers(). If this is nil, the site will be filled with {0,0,0,0} soldiers.

workers

A table of (workers_name,count) as expected by wl.map.Warehouse.set_workers(). Note that ProductionSites are filled with workers by default.

Returns

A table of created buildings

place_building_in_region(plr, building, region[, opts])

Tries to place a building randomly in the given region. It places houses using prefilled_buildings(), therefore uses the same options. If it fails, an error is thrown. This is a most useful function when defining starting conditions (initializations) in normal games.

Parameters
• plr (wl.game.Player) – The player for which the building is created

• building (string) – The name of the building to create.

• region (array) – The fields which are tested for suitability.

• opts (table) – A table with prefill information (wares, soldiers, workers, see prefilled_buildings())

Returns

The building created

is_building(immovable)

Checks whether an immovable is a finished building, i.e. not a construction site.

Parameters

immovable – The immovable to test

Returns

true if the immovable is a building

add_wares_to_warehouse(player, warehouse, waretable)

Adds(subtracts) wares to the first warehouse of specified type

Parameters
• player – the player to add wares to

• warehouse – The type of warehouse (string) to add wares to

• waretable – a table of pairs {ware = value}

check_trees_rocks_poor_hamlet(player, sf, warehouse, waretable_rocks, waretable_trees)

Checks for rocks or trees in the region of the player starting field and adds wares if no immovables found

Parameters
• player – the player to check

• sf – starting field of the player

• warehouse – The type of warehouse (string) to add wares to

• waretable_rocks – a table of pairs {ware = value} to add if no rocks

• waretable_trees – a table of pairs {ware = value} to add if no trees