LuaMapGenerator

From The Battle for Wesnoth Wiki
Revision as of 14:05, 11 December 2018 by Gfgtdf (talk | contribs) (Created page with "The page describes the api available for lua map generators that is differnt from the ingame lua api. ==== wesnoth.find_path ==== * '''wesnoth.find_path(''src'', ''dst'', '...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

The page describes the api available for lua map generators that is differnt from the ingame lua api.


wesnoth.find_path

  • wesnoth.find_path(src, dst, cost_function, mapsize_x, mapsize_y, include_border)

Behaves slightly differntly than in the ingame lua api with the same name in particular it no longer accepts unit arguments and explicitly nees the map size.


wesnoth.create_map

  • wesnoth.create_map (map_data)
  • wesnoth.find_path(width, height, terrain)

Creates a gamemap object, which has the following functions and properties

  • get_terrain(loc)
  • set_terrain(loc, terrain)
  • get_locations(filter, locs_to_check)
  • get_tiles_radius(locations, filter_radius)
  • terrain_mask(x_offset, y_offset, data, optional_argeument_table)
  • width number
  • height number
  • data string

The filters about use custom lua filter objects that can be constructed via wesnoth.create_filter

wesnoth.create_filter

creates a lua filter object from a table describing a lua terrainfilter, this is similar but not the same as wml filters, compiling these into lua objects makes it much faster. A lua filtertable is a table which at index 1 has the type of the filter and the rest depends on the type of the filter, for example wesnoth.create_filter { "terrain", "K*"} " will create a filter that matches keeps. THe follwing types of theilter are known:

  • { "terrain", terraincode } matches for terrain terraincode
  • { "all", <filter1>, <filter2>, <filter3>, ... } matches when all the subfilters match
  • { "any", <filter1>, <filter2>, <filter3>, ... } matches when any the subfilters match
  • { "none", <filter1>, <filter2>, <filter3>, ... } matches when none the subfilters match
  • { "notall", <filter1>, <filter2>, <filter3>, ... } matches when not all the subfilters match
  • { "adjacent", <subfilter>, [count = <count>], [adjacent = <adjacent>]} matches when count adjacent tiles matchthe subfilter ('adjacent=' defaults to 'n,nw,sw,s,se,ne')
  • { "radius", <radius>, <subfilter>, filter_radius = <filter_radius> } radius: number, filter_radius: subfilter.

It is reccomended to create a helper function for filter construction for example:

f = {
	terrain =  function(terrain)
		return { "terrain", terrain }
	end,
	all =  function(...)
		return { "all", ... }
	end,
	any =  function(...)
		return { "any", ... }
	end,
	none =  function(...)
		return { "none", ... }
	end,
	adjacent =  function(f, ad, count)
		return { "adjacent",  f, adjacent = ad, count = count }
	end,
	radius =  function(r, f, f_r)
		return { "radius", r, f, filter_radius = f_r}
	end,
}

wesnoth.create_filter(
  f.all(
    f.terrain("K*"),
    f.radius(4, f.terrain("^V*"))
  )
)

for a filter that matches keepos that are at most distance 4 to a village