Difference between revisions of "TerrainCodesWML"

From The Battle for Wesnoth Wiki
(Terrain strings '''''(SVN terrain only)''''')
(Decoding the Terrain Codes: P is used for Portals)
 
(38 intermediate revisions by 15 users not shown)
Line 1: Line 1:
 
{{WML Tags}}
 
{{WML Tags}}
== Values of terrain letters ==
 
  
What each letter represents in Wesnoth maps,
+
Note: the old (1.2) terrain system is no longer documented here. If you have 1.2 maps you will need to convert them using [[Maintenance_tools|wmllint]].
and the possible values of the ''letter'' key.
 
  
See [[TerrainWML]] for information on how to define a terrain.
+
== Terrain strings ==
  
* '''A''' human (snow) hill village
+
The following rules hold for terrain strings. Note most of these rules are not validated since it would slow down Wesnoth; not following these rules might break Wesnoth.
* '''a''' human hill village
 
* '''B''' desert village (adobe)
 
* '''b''' human mountain village
 
* '''C''' castle
 
* '''c''' shallow water, "coast"
 
* '''D''' underground village (cave, village), "dungeon village"
 
* '''d''' sand, (old desert)
 
* '''E''' desert road
 
* '''e''' elven (snow) village
 
* '''F''' forest (snow)
 
* '''f''' forest
 
* '''G''' savanna (grass)
 
* '''g''' grass
 
* '''H''' hills (snow)
 
* '''h''' hills
 
* '''I''' desert
 
* '''i''' ice (tundra)
 
* '''J''' desert hills
 
* '''j''' -nothing- (will be snowy mountains)
 
* '''K''' keep (castle)
 
* '''k''' river ford (grass, shallow water)
 
* '''L''' tropical forest village (savanna, village)
 
* '''l''' lava (canyon)
 
* '''M''' desert mountains
 
* '''m''' mountain
 
* '''N''' ruined castle
 
* '''n''' encampment (castle)
 
* '''O''' -nothing- (will probably be an Orc Castle one day)
 
* '''o''' dwarven castle (castle)
 
* '''P''' desert oasis
 
* '''p''' dwarven village
 
* '''Q''' sunken ruin
 
* '''q''' ruin (swamp)
 
* '''R''' road (grass)
 
* '''r''' dirt (grass)
 
* '''S''' tundra
 
* '''s''' deep water
 
* '''T''' forest (tropical)
 
* '''t''' village
 
* '''U''' desert village (tent)
 
* '''u''' cave
 
* '''V''' snow village (tundra, village)
 
* '''v''' human village (village)
 
* '''W''' cavewall
 
* '''w''' swamp
 
* '''X''' canyon (replaced by chasm in trunk)
 
* '''x''' reserved for UMCs
 
* '''Y''' swamp village (swamp, village)
 
* '''y''' reserved for UMCs
 
* '''Z''' mermen village (shallow water)
 
* '''z''' reserved for UMCs
 
* '''/''','''|''','''\''' bridge (grass, shallow water)
 
* '''~''' fog
 
* ' ' void/shroud (it uses the "space" character)
 
* '''*''' reserved for UMCs
 
* '''^''' reserved for UMCs
 
* '''%''' reserved for UMCs
 
* '''@''' reserved for UMCs
 
* '''[''' rockbound cave
 
* ''']''' mushroom grove
 
* ''' ' ''' illuminated cave
 
* ''' ? ''' great Elven tree
 
* ''' & ''' impassable mountains
 
* ''' " ''' ???
 
* ''' $ ''' ???
 
* ''' . ''' ???
 
* ''' ; ''' ???
 
* ''' : ''' ???
 
* ''' < ''' ???
 
* ''' > ''' ???
 
* ''' _ ''' ???
 
* ''' ` ''' ???
 
  
==Reserved letters and non-letter Characters==
+
* terrain strings are composed from one or two terrain codes of 2 to 4 characters (bytes) each, separated by ^.
Reserved letters are for custom terrains in user-made campaigns. In addition to these it is currently also possible to use other characters not on the above list to represent custom terrain, such as ½ § @ % etc., but new "official" terrain may be assigned for these characters in the future. So when creating custom terrain, the letters marked as reserved on the above list should be used first.
+
* terrain codes start with a capital letter and the following letters are lower case
Use campaign definitions (see [[CampaignWML]]) to prevent your custom terrains from interfering with other campaigns.
+
* terrain strings can only contain letters, the symbols /|\ which are meant for directional items like bridges and the symbol ^
 +
* the underscore is used as a leader for internal terrain codes
 +
* the star '*' can be used for wildcards in some places where a terrain code is required for matching
 +
* the symbol ^ indicates that a terrain is created with layers, for example Gs^Fp means Semi-dry Grass(<b>Gs</b>) with a Forest(<b>Fp</b>) overlay.
  
== Terrain strings '''''[[User:SkeletonCrew#Branch_terrain|(SVN terrain only)]]''''' ==
+
Starting positions are defined by a number followed by 1 space and then the terrain string.
The terrains will be changed from a single letter to a multi letter system. There will be a compability layer for a short while. This layer doesn't work for campaigns with custom terrains, these campaigns have to be changed to use the new system.
 
  
The following rules are stated for the new terrain letters, note most of these rules are not validated since it would slow down Wesnoth; not following these rules might break Wesnoth.
+
The letters Y,y,Z,z are reserved for UMC and mainline campaigns, so any string containing any of these letters is a custom terrain. Other undefined terrain strings are reserved for future expansion within Wesnoth.
* terrain strings are between 2 and 4 characters
 
* terrain strings start with a capital letter and the following letters are lower case
 
* terrain strings can only contain letters and the symbols /|\ which are meant for directional items like bridges.
 
* the underscore is used for internal terrains
 
* the star '*' can be used for wildcards in some parts
 
  
Starting positions are defined by a number followed by 1 space and then the terrain string; this means that a starting position is no longer automatically a keep.
+
=== Terrain Table ===
  
The letters Y,y,Z,z are reserved for UMC so any string containing any of these letters is a custom terrain. Other undefined terrain strings are reserved for future expansion within Wesnoth.
+
The list of terrains can be found at [[TerrainCodeTableWML]]. Since most overlays can be combined with most bases the list is not complete.
  
=== Conversion form old to new ===
+
== Adding terrains ==
Map conversion logic is included in the [[Maintenance_tools|upconvert]] tool (in newer versions, [[Maintenance_tools|wmllint]]). This script will, among other things, convert a map with the old letters to the new strings. Here is a lookup table with the letters.
+
When adding terrains make sure the following files are also checked:
 
 
char= a    b    c    d    e    f    g    h    i    j    k    l    m     
 
str=  Vhh  Vhm  Ww  Ds  Vea  Ff  Gg  Hh  Ai        Wwf  Ql  Mm 
 
  
char= n    o    p    q    r    s    t    u    v    w    x    y    z
+
data/multiplayer/factions/* contains favorite positions for the different factions, this is only used for the random map generator at the moment so it is not very important.
str=  Ce  Cud  Vud  Chs  Re  Wo  Veg  Uu  Vhg  Ss
 
  
char= A    B    C    D    E    F    G    H    I    J    K    L    M     
+
data/core/macros/abilities.cfg contains the definition of ''submerge'' and ''ambush'' so depending on the change these need to be updated.
str=  Vhha Vda  Ch  Vu  Rd  Fa  Gs  Ha  Dd  Hd  _K  Vht  Md
 
  
  char= N   O   P   Q   R   S   T   U   V   W   X   Y   Z
+
== Decoding the Terrain Codes ==
str= Chr      Do  Chw  Rr  Aa  Ft  Vdt  Vha  Xu  Qxu  Vs  Vwm
+
The initial letters of each terrain code have a standard meaning, though some are not obvious.
 +
* A = “Arctic” i.e. frozen
 +
* B = “Bridge”
 +
* C = “Castle”
 +
* D = “Desert”
 +
* E = "Embellishment"
 +
* F = “Forest”
 +
* G = “Grass” i.e. flat
 +
* H = “Hills”
 +
* I = "Interior" (possible future use)
 +
* J = ''testing''
 +
* K = “Keep”
 +
* L
 +
* M = “Mountains”
 +
* N
 +
* O
 +
* P = “Portal” i.e. doors, gates
 +
* Q = "Un-walkable", {{DevFeature1.17|7}} also used for elevation overlays
 +
* R = “Road”, also used for “Rails”
 +
* S = “Swamp”
 +
* T = {{DevFeature1.15|2}} “Toadstool” i.e. fungus
 +
* U = “Underground”
 +
* V = “Village”
 +
* W = “Water”
 +
* X = "Impassable"
 +
* Y = ''Reserved for UMC''
 +
* Z = ''Reserved for UMC''
 +
* _ = "special system stuff"
  
char= /    |    \    &    _    ~    ?    ]    [    '
+
Additional letters do not always follow the same meaning, but are as consistent as possible.
str=  Bww/ Bww| Bww\ Xm  _s  _f  Fet  Uf  Uh  Uui
 
  
=== Terrain Table ===
+
* \, |, / = for indicating the direction of bridges
This is a list of the terrains, the strings used for them in the new map format, the letters used for them in the old map format, their id and the terrains they take their stats from.
+
* a =
 +
* b =
 +
* c = "city"
 +
* d = "dry or desert, deciduous"
 +
* e = "encampment"
 +
* f = "flowers, fall"
 +
* g
 +
* h = "human"
 +
* i = "ice"
 +
* j
 +
* k
 +
* l = "lava"
 +
* m = "mixed"
 +
* n
 +
* o = "orc"
 +
* p = "pine"
 +
* q
 +
* r
 +
* s = "simple"
 +
* t = "archetype", a hidden terrain used only as a base for other terrains
 +
* u = "underground"
 +
* v = "elvish"
 +
* w
 +
* x = "chasm"
 +
* y = ''Reserved for UMC''
 +
* z = ''Reserved for UMC''
  
<table border="1"><tr>
+
== Terrain codes in map data ==
<th>ID</th>
 
<th>String</th>
 
<th>Old letter</th>
 
<th>Name</th>
 
<th>Stats from</th>
 
</tr>
 
<tr>
 
<td>off_map</td>
 
<td>_off^_usr</td>
 
<td></td>
 
<td>None</td>
 
<td></td>
 
</tr>
 
<tr>
 
<td>shroud</td>
 
<td>_s</td>
 
<td></td>
 
<td>Shroud</td>
 
<td></td>
 
</tr>
 
<tr>
 
<td>fog</td>
 
<td>_f</td>
 
<td>~</td>
 
<td>Fog</td>
 
<td></td>
 
</tr>
 
<tr>
 
<td>ice</td>
 
<td>Ai</td>
 
<td>i</td>
 
<td>Ice</td>
 
<td>Snow</td>
 
</tr>
 
<tr>
 
<td>tundra</td>
 
<td>Aa</td>
 
<td>S</td>
 
<td>Snow</td>
 
<td></td>
 
</tr>
 
<tr>
 
<td>bridge</td>
 
<td>Ww^Bw|</td>
 
<td>|</td>
 
<td>Bridge</td>
 
<td>Grassland,Shallow Water</td>
 
</tr>
 
<tr>
 
<td>bridgediag1</td>
 
<td>Ww^Bw/</td>
 
<td>/</td>
 
<td>Bridge</td>
 
<td>Grassland,Shallow Water</td>
 
</tr>
 
<tr>
 
<td>bridgediag2</td>
 
<td>Ww^Bw\</td>
 
<td>\</td>
 
<td>Bridge</td>
 
<td>Grassland,Shallow Water</td>
 
</tr>
 
<tr>
 
<td>bridgedeep</td>
 
<td>Wo^Bw|</td>
 
<td></td>
 
<td>Bridge</td>
 
<td>Grassland,Deep Water</td>
 
</tr>
 
<tr>
 
<td>bridgedeepdiag1</td>
 
<td>Wo^Bw/</td>
 
<td></td>
 
<td>Bridge</td>
 
<td>Grassland,Deep Water</td>
 
</tr>
 
<tr>
 
<td>bridgedeepdiag2</td>
 
<td>Wo^Bw\</td>
 
<td></td>
 
<td>Bridge</td>
 
<td>Grassland,Deep Water</td>
 
</tr>
 
<tr>
 
<td>bridgeswamp</td>
 
<td>Ss^Bw|</td>
 
<td></td>
 
<td>Bridge</td>
 
<td>Grassland,Swamp</td>
 
</tr>
 
<tr>
 
<td>bridgeswampdiag1</td>
 
<td>Ss^Bw/</td>
 
<td></td>
 
<td>Bridge</td>
 
<td>Grassland,Swamp</td>
 
</tr>
 
<tr>
 
<td>bridgeswampdiag2</td>
 
<td>Ss^Bw\</td>
 
<td></td>
 
<td>Bridge</td>
 
<td>Grassland,Swamp</td>
 
</tr>
 
<tr>
 
<td>encampment</td>
 
<td>Ce</td>
 
<td>n</td>
 
<td>Encampment</td>
 
<td>Castle</td>
 
</tr>
 
<tr>
 
<td>castle</td>
 
<td>Ch</td>
 
<td>y</td>
 
<td>Castle</td>
 
<td></td>
 
</tr>
 
<tr>
 
<td>castle</td>
 
<td>Cv</td>
 
<td>y</td>
 
<td>Elven Castle</td>
 
<td>Castle</td>
 
</tr>
 
<tr>
 
<td>dwarven_castle</td>
 
<td>Cud</td>
 
<td>o</td>
 
<td>Dwarven Castle</td>
 
<td>Castle</td>
 
</tr>
 
<tr>
 
<td>ruin</td>
 
<td>Chr</td>
 
<td>N</td>
 
<td>Ruin</td>
 
<td>Castle</td>
 
</tr>
 
<tr>
 
<td>sunkenruin</td>
 
<td>Chw</td>
 
<td>Q</td>
 
<td>Sunken Ruin</td>
 
<td>Castle,Shallow Water</td>
 
</tr>
 
<tr>
 
<td>swampruin</td>
 
<td>Chs</td>
 
<td>q</td>
 
<td>Swamp Ruin</td>
 
<td>Castle,Swamp</td>
 
</tr>
 
<tr>
 
<td>encampment_keep</td>
 
<td>Ke</td>
 
<td></td>
 
<td>Encampment keep</td>
 
<td>Castle</td>
 
</tr>
 
<tr>
 
<td>human_keep</td>
 
<td>Kh</td>
 
<td></td>
 
<td>Keep</td>
 
<td>Castle</td>
 
</tr>
 
<tr>
 
<td>elven_keep</td>
 
<td>Kv</td>
 
<td></td>
 
<td>Elven Keep</td>
 
<td>Castle</td>
 
</tr>
 
<tr>
 
<td>dwarven_keep</td>
 
<td>Kud</td>
 
<td></td>
 
<td>Dwarven keep</td>
 
<td>Castle</td>
 
</tr>
 
<tr>
 
<td>ruined_keep</td>
 
<td>Khr</td>
 
<td></td>
 
<td>Ruined keep</td>
 
<td>Castle</td>
 
</tr>
 
<tr>
 
<td>sunken_keep</td>
 
<td>Khw</td>
 
<td></td>
 
<td>Sunken keep</td>
 
<td>Castle,Shallow Water</td>
 
</tr>
 
<tr>
 
<td>swamp_keep</td>
 
<td>Khs</td>
 
<td></td>
 
<td>Swamp keep</td>
 
<td>Castle,Swamp</td>
 
</tr>
 
<tr>
 
<td>crater</td>
 
<td>Dd^Dc</td>
 
<td></td>
 
<td>Crater</td>
 
<td>Sand</td>
 
</tr>
 
<tr>
 
<td>desert</td>
 
<td>Dd</td>
 
<td>I</td>
 
<td>Desert</td>
 
<td>Sand</td>
 
</tr>
 
<tr>
 
<td>sand_rubble</td>
 
<td>Dd^Dr</td>
 
<td></td>
 
<td>Rubble</td>
 
<td>Hills</td>
 
</tr>
 
<tr>
 
<td>sand</td>
 
<td>Ds</td>
 
<td>d</td>
 
<td>Sand</td>
 
<td></td>
 
</tr>
 
<tr>
 
<td>oasis</td>
 
<td>Dd^Do</td>
 
<td>P</td>
 
<td>Oasis</td>
 
<td>Sand</td>
 
</tr>
 
<tr>
 
<td>snow_forest</td>
 
<td>Aa^Fpa</td>
 
<td>F</td>
 
<td>Snow Forest</td>
 
<td>Snow,Forest</td>
 
</tr>
 
<tr>
 
<td>great_tree</td>
 
<td>Gg^Fet</td>
 
<td>?</td>
 
<td>Great Tree</td>
 
<td>Forest</td>
 
</tr>
 
<tr>
 
<td>forest</td>
 
<td>Gs^Fp</td>
 
<td>f</td>
 
<td>Forest</td>
 
<td></td>
 
</tr>
 
<tr>
 
<td>tropical_forest</td>
 
<td>Gs^Ft</td>
 
<td>T</td>
 
<td>Tropical Forest</td>
 
<td>Forest</td>
 
</tr>
 
<tr>
 
<td>grassland</td>
 
<td>Gg</td>
 
<td>g</td>
 
<td>Grassland</td>
 
<td></td>
 
</tr>
 
<tr>
 
<td>grassland_flowers</td>
 
<td>Ggf</td>
 
<td></td>
 
<td>Grassland</td>
 
<td>Grassland</td>
 
</tr>
 
<tr>
 
<td>savanna</td>
 
<td>Gs</td>
 
<td>G</td>
 
<td>Savanna</td>
 
<td>Grassland</td>
 
</tr>
 
<tr>
 
<td>snow_hills</td>
 
<td>Ha</td>
 
<td>H</td>
 
<td>Snow Hills</td>
 
<td>Snow,Hills</td>
 
</tr>
 
<tr>
 
<td>desert_hills</td>
 
<td>Hd</td>
 
<td>J</td>
 
<td>Dunes</td>
 
<td>Sand,Hills</td>
 
</tr>
 
<tr>
 
<td>hills</td>
 
<td>Hh</td>
 
<td>h</td>
 
<td>Hills</td>
 
<td></td>
 
</tr>
 
<tr>
 
<td>desert_mountains</td>
 
<td>Md</td>
 
<td>M</td>
 
<td>Mountains</td>
 
<td>Mountains</td>
 
</tr>
 
<tr>
 
<td>mountains</td>
 
<td>Mm</td>
 
<td>m</td>
 
<td>Mountains</td>
 
<td></td>
 
</tr>
 
<tr>
 
<td>canyon</td>
 
<td>Qxu</td>
 
<td>X</td>
 
<td>Chasm</td>
 
<td></td>
 
</tr>
 
<tr>
 
<td>lava</td>
 
<td>Ql</td>
 
<td>l</td>
 
<td>Lava</td>
 
<td>Chasm</td>
 
</tr>
 
<tr>
 
<td>road</td>
 
<td>Rd</td>
 
<td>E</td>
 
<td>Desert road</td>
 
<td>Grassland</td>
 
</tr>
 
<tr>
 
<td>dirt</td>
 
<td>Re</td>
 
<td>r</td>
 
<td>Dirt</td>
 
<td>Grassland</td>
 
</tr>
 
<tr>
 
<td>road</td>
 
<td>Rr</td>
 
<td>E</td>
 
<td>Road</td>
 
<td>Grassland</td>
 
</tr>
 
<tr>
 
<td>farm</td>
 
<td>Re^Gvs</td>
 
<td></td>
 
<td>Farmland</td>
 
<td>Grassland</td>
 
</tr>
 
<tr>
 
<td>swamp_water</td>
 
<td>Ss</td>
 
<td>w</td>
 
<td>Swamp</td>
 
<td></td>
 
</tr>
 
<tr>
 
<td>cave</td>
 
<td>Uu</td>
 
<td>u</td>
 
<td>Cave</td>
 
<td></td>
 
</tr>
 
<tr>
 
<td>cave_beam</td>
 
<td>Uu^Ii</td>
 
<td>'</td>
 
<td>Cave Lit</td>
 
<td>Cave</td>
 
</tr>
 
<tr>
 
<td>fungus</td>
 
<td>Uu^Uf</td>
 
<td>]</td>
 
<td>Mushroom Grove</td>
 
<td></td>
 
</tr>
 
<tr>
 
<td>fungusabove</td>
 
<td>Re^Uf</td>
 
<td></td>
 
<td>Mushroom Grove</td>
 
<td>Mushroom Grove</td>
 
</tr>
 
<tr>
 
<td>rocky_cave</td>
 
<td>Uh</td>
 
<td>[</td>
 
<td>Rockbound Cave</td>
 
<td>Cave,Hills</td>
 
</tr>
 
<tr>
 
<td>rocky_cave_beam</td>
 
<td>Uh^Ii</td>
 
<td></td>
 
<td>Rockbound Cave Lit</td>
 
<td>Cave,Hills</td>
 
</tr>
 
<tr>
 
<td>desert_village</td>
 
<td>Dd^Vda</td>
 
<td>U</td>
 
<td>Village</td>
 
<td>Village,Sand</td>
 
</tr>
 
<tr>
 
<td>desert_village</td>
 
<td>Dd^Vdt</td>
 
<td>U</td>
 
<td>Village</td>
 
<td>Village,Sand</td>
 
</tr>
 
<tr>
 
<td>elven_snow_village</td>
 
<td>Aa^Vea</td>
 
<td>e</td>
 
<td>Village</td>
 
<td>Village</td>
 
</tr>
 
<tr>
 
<td>village</td>
 
<td>Gg^Ve</td>
 
<td>t</td>
 
<td>Village</td>
 
<td>Village</td>
 
</tr>
 
<tr>
 
<td>snow_village</td>
 
<td>Aa^Vha</td>
 
<td>V</td>
 
<td>Village</td>
 
<td>Village</td>
 
</tr>
 
<tr>
 
<td>village</td>
 
<td>Gg^Vh</td>
 
<td>t</td>
 
<td>Village</td>
 
<td></td>
 
</tr>
 
<tr>
 
<td>hill_village</td>
 
<td>Hh^Vhh</td>
 
<td>a</td>
 
<td>Village</td>
 
<td>Village,Hills</td>
 
</tr>
 
<tr>
 
<td>snow-hill_village</td>
 
<td>Ha^Vhha</td>
 
<td>A</td>
 
<td>Village</td>
 
<td>Village,Hills</td>
 
</tr>
 
<tr>
 
<td>mountain_village</td>
 
<td>Mm^Vhh</td>
 
<td>b</td>
 
<td>Village</td>
 
<td>Village,Mountains</td>
 
</tr>
 
<tr>
 
<td>tropical_forest_village</td>
 
<td>Gs^Vht</td>
 
<td>L</td>
 
<td>Village</td>
 
<td>Village</td>
 
</tr>
 
<tr>
 
<td>underground_village</td>
 
<td>Uu^Vu</td>
 
<td>D</td>
 
<td>Village</td>
 
<td>Village,Cave</td>
 
</tr>
 
<tr>
 
<td>dwarven_village</td>
 
<td>Uu^Vud</td>
 
<td>p</td>
 
<td>Village</td>
 
<td>Village,Cave</td>
 
</tr>
 
<tr>
 
<td>mermen_village</td>
 
<td>Ww^Vm</td>
 
<td>Z</td>
 
<td>Village</td>
 
<td>Shallow Water</td>
 
</tr>
 
<tr>
 
<td>swamp_village</td>
 
<td>Ss^Vhs</td>
 
<td>Y</td>
 
<td>Village</td>
 
<td>Village,Swamp</td>
 
</tr>
 
<tr>
 
<td>swamp_merfolk-village</td>
 
<td>Ss^Vm</td>
 
<td></td>
 
<td>Village</td>
 
<td>Swamp</td>
 
</tr>
 
<tr>
 
<td>deep_water</td>
 
<td>Wo</td>
 
<td>s</td>
 
<td>Deep Water</td>
 
<td></td>
 
</tr>
 
<tr>
 
<td>shallow_water</td>
 
<td>Ww</td>
 
<td>c</td>
 
<td>Shallow Water</td>
 
<td></td>
 
</tr>
 
<tr>
 
<td>ford</td>
 
<td>Wwf</td>
 
<td>k</td>
 
<td>River Ford</td>
 
<td>Grassland,Shallow Water</td>
 
</tr>
 
<tr>
 
<td>cloud</td>
 
<td>Mm^Xm</td>
 
<td>&</td>
 
<td>Impassable Mountains</td>
 
<td>Cave Wall</td>
 
</tr>
 
<tr>
 
<td>clouddese
 
  
==== Specials ====
+
This is not the Matrix. You normally don't need to look at encoded maps. However, it can be beneficial and useful for more advanced users to understand the usage of terrain strings in raw map file.
These terrains are hardcoded in the game and translated
 
automatically. The old UMC terrains are here for backwards
 
compability this compability will only be guaranteed till
 
the next major release after 1.2.(That would be 1.4 or 2.0.)
 
As stated before the * will no longer be supported.
 
  
<table border="1"><tr>
+
The encoding for maps has a specific format in Wesnoth:
<th>String</th>
 
<th>Old letter</th>
 
<th>Description</th>
 
<th>Theme</th>
 
</tr>
 
 
 
<tr>
 
<td>_f</td>
 
<td>~</td>
 
<td>fog</td>
 
<td>misc</td>
 
</tr>
 
 
 
<tr>
 
<td>_s</td>
 
<td> (space character)</td>
 
<td>void/shroud</td>
 
<td>misc</td>
 
</tr>
 
 
 
</table>
 
 
 
== Adding terrains ==
 
When adding terrains make sure the following files are also checked:
 
  
data/faction/* contains favorite positions for the different factions, this is only used for the random map generator at the moment so it is not very important.
+
* A map starts with a header with the following keys
 +
** '''usage''', this should be 'map' for a map and 'mask' for an overlay mask
 +
** '''border_size''', the size of the border, should be 1 for map and 0 for mask. When the border_size is 1 the map border is part of the map data, this means the user can define the border instead of the game taking a guess.
 +
** {{DevFeature1.13|12}} These keys are now deprecated and will be ignored if present. The blank line mentioned below is not required if these keys are absent.
 +
* Between the header and the data should be 1 empty line
 +
* A map data file consists of any number of lines, each with the same number of terrain codes.
 +
* Each string may be padded with spaces or tabs and must be separated with a comma, except for the last string on a line this one may not have a comma.
 +
* When the file is interpreted, each terrain code will be replaced by the terrain it refers to.
 +
* Empty lines are allowed before, after and between lines of characters, between lines is not advised.
 +
* Terrains may be prefixed with a number followed by one space, these indicate the starting position for side ''n''.
 +
** For Wesnoth 1.12.6, ''n'' = 1, 2, 3, ... 9, and the multiplayer server will refuse maps with more than 9 sides.
 +
** For Wesnoth 1.14, more than 9 sides can work, discussion https://r.wesnoth.org/t48129 and https://r.wesnoth.org/t48082
 +
* {{DevFeature1.13|12}} In addition to side numbers, terrains may be prefixed by any number of strings (which should consist of alphanumeric characters only, including underscores). All names and side numbers must be delimited by spaces and are separated from the actual terrain code by an additional space.
 +
** This is broken according to https://r.wesnoth.org/p627595
  
data/abilities.cfg contains the definition of ''submerge'' and ''ambush'' so depending on the change these need to be updated.
+
Since text file tiles are squares while game tiles are hexes, some tiles must be shifted.
 +
Tiles in even-numbered columns are shifted down 1/2 of a tile.
 +
For example, to have a road of connected dirt ('Re') tiles, the map data would look like this:
  
data/utils/utils.cfg contains the macro STARTING_VILLAGES which contains a list of village strings. This list doesn't support wildcards (yet).
+
usage=map
 +
border_size=1
 +
 +
Re, Re, Gg, Gg, Gg, Gg, Gg, Gg
 +
Gg, Gg, Re, Re, Gg, Gg, Gg, Gg
 +
Gg, Gg, Gg, Gg, Re, Re, Gg, Gg
 +
Gg, Gg, Gg, Gg, Gg, Gg, Re, Re
  
 
== See Also ==
 
== See Also ==
 
* [[TerrainWML]]
 
* [[TerrainWML]]
 +
* [[TerrainCodeTableWML]]
 
* [[ReferenceWML]]
 
* [[ReferenceWML]]
  
 
[[Category: WML Reference]]
 
[[Category: WML Reference]]

Latest revision as of 05:30, 29 April 2024

[edit]WML Tags

A:

abilities, about, achievement, achievement_group, add_ai_behavior, advanced_preference, advancefrom, advancement, advances, affect_adjacent, ai, allied_with, allow_end_turn, allow_extra_recruit, allow_recruit, allow_undo, and, animate, animate_unit, animation, aspect, attack (replay, weapon), attack_anim, attacks (special, stats), avoid;

B:

base_unit, background_layer, berserk, binary_path, break, brush;

C:

campaign, cancel_action, candidate_action, capture_village, case, chance_to_hit, change_theme, chat, checkbox, choice, choose, clear_global_variable, clear_menu_item, clear_variable, color_adjust, color_palette, color_range, command (action, replay), continue, core, credits_group, criteria;

D:

damage, damage_type, death, deaths, default, defend, defends, defense, delay, deprecated_message, destination, difficulty, disable, disallow_end_turn, disallow_extra_recruit, disallow_recruit, do, do_command, drains, draw_weapon_anim;

E:

editor_group, editor_music, editor_times, effect, else (action, animation), elseif, endlevel, end_turn (action, replay), enemy_of, engine, entry (credits, options), era, event, experimental_filter_ability, experimental_filter_ability_active, experimental_filter_specials, extra_anim;

F:

facet, facing, fake_unit, false, feedback, female, filter (concept, event), filter_adjacent, filter_adjacent_location, filter_attack, filter_attacker, filter_base_value, filter_condition, filter_defender, filter_enemy, filter_location, filter_opponent, filter_own, filter_owner, filter_radius, filter_recall, filter_second, filter_second_attack, filter_self, filter_side, filter_student, filter_vision, filter_weapon, filter_wml, find_path, fire_event, firststrike, floating_text, fonts, for, foreach, found_item, frame;

G:

game_config, get_global_variable, goal, gold, gold_carryover;

H:

harm_unit, has_ally, has_attack, has_unit, has_achievement, have_location, have_unit, heal_on_hit, heal_unit, healed_anim, healing_anim, heals, hide_help, hide_unit, hides;

I:

idle_anim, if (action, animation, intro), illuminates, image (intro, terrain), init_side, insert_tag, inspect, item, item_group;

J:

jamming_costs, join;

K:

kill, killed;

L:

label, language, leader, leader_goal, leadership, leading_anim, levelin_anim, levelout_anim, lift_fog, limit, literal, load_resource, locale, lock_view, lua;

M:

male, menu_item, message, micro_ai, missile_frame, modification, modifications, modify_ai, modify_side, modify_turns, modify_unit, modify_unit_type, move, move_unit, move_unit_fake, move_units_fake, movement_anim, movement costs, movetype, multiplayer, multiplayer_side, music;

N:

not, note;

O:

object, objective, objectives, on_undo, open_help, option, options, or;

P:

part, petrifies, petrify, place_shroud, plague, poison, post_movement_anim, pre_movement_anim, primary_attack, primary_unit, print, progress_achievement, put_to_recall_list;

R:

race, random_placement, recall (action, replay), recalls, recruit, recruit_anim, recruiting_anim, recruits, redraw, regenerate, remove_event, remove_item, remove_object, remove_shroud, remove_sound_source, remove_time_area, remove_trait, remove_unit_overlay, repeat, replace_map, replace_schedule, replay, replay_start, reset_fog, resistance (ability, unit), resistance_defaults, resolution, resource, return, role, rule;

S:

save, scenario, screen_fade, scroll, scroll_to, scroll_to_unit, secondary_attack, secondary_unit, section, select_unit, sequence, set_achievement, set_extra_recruit, set_global_variable, set_menu_item, set_recruit, set_specials, set_variable, set_variables, sheath_weapon_anim, show_if (message, objective, set_menu_item), show_objectives, side, skirmisher, slider, slow, snapshot, sound, sound_source, source (replay, teleport), special_note, specials, split, stage, standing_anim, statistics, status, store_gold, store_items, store_locations, store_map_dimensions, store_reachable_locations, store_relative_direction, store_side, store_starting_location, store_time_of_day, store_turns, store_unit, store_unit_defense, store_unit_defense_on, store_unit_type, store_unit_type_ids, store_villages, story, swarm, sub_achievement, switch, sync_variable;

T:

target, team, teleport (ability, action), teleport_anim, terrain, terrain_defaults, terrain_graphics, terrain_mask, terrain_type, test, test_condition, test_do_attack_by_id, text_input, textdomain, theme, then, tile, time, time_area, topic, toplevel, trait, transform_unit, traveler, true, tunnel;

U:

unhide_unit, unit (action, scenario), unit_overlay, unit_type, unit_worth, units, unlock_view, unpetrify, unstore_unit, unsynced;

V:

value, variable, variables, variant, variation, victory_anim, village, vision_costs, volume;

W:

while, wml_message, wml_schema;

Z:

zoom;

Note: the old (1.2) terrain system is no longer documented here. If you have 1.2 maps you will need to convert them using wmllint.

Terrain strings

The following rules hold for terrain strings. Note most of these rules are not validated since it would slow down Wesnoth; not following these rules might break Wesnoth.

  • terrain strings are composed from one or two terrain codes of 2 to 4 characters (bytes) each, separated by ^.
  • terrain codes start with a capital letter and the following letters are lower case
  • terrain strings can only contain letters, the symbols /|\ which are meant for directional items like bridges and the symbol ^
  • the underscore is used as a leader for internal terrain codes
  • the star '*' can be used for wildcards in some places where a terrain code is required for matching
  • the symbol ^ indicates that a terrain is created with layers, for example Gs^Fp means Semi-dry Grass(Gs) with a Forest(Fp) overlay.

Starting positions are defined by a number followed by 1 space and then the terrain string.

The letters Y,y,Z,z are reserved for UMC and mainline campaigns, so any string containing any of these letters is a custom terrain. Other undefined terrain strings are reserved for future expansion within Wesnoth.

Terrain Table

The list of terrains can be found at TerrainCodeTableWML. Since most overlays can be combined with most bases the list is not complete.

Adding terrains

When adding terrains make sure the following files are also checked:

data/multiplayer/factions/* contains favorite positions for the different factions, this is only used for the random map generator at the moment so it is not very important.

data/core/macros/abilities.cfg contains the definition of submerge and ambush so depending on the change these need to be updated.

Decoding the Terrain Codes

The initial letters of each terrain code have a standard meaning, though some are not obvious.

  • A = “Arctic” i.e. frozen
  • B = “Bridge”
  • C = “Castle”
  • D = “Desert”
  • E = "Embellishment"
  • F = “Forest”
  • G = “Grass” i.e. flat
  • H = “Hills”
  • I = "Interior" (possible future use)
  • J = testing
  • K = “Keep”
  • L
  • M = “Mountains”
  • N
  • O
  • P = “Portal” i.e. doors, gates
  • Q = "Un-walkable", (Version 1.17.7 and later only) also used for elevation overlays
  • R = “Road”, also used for “Rails”
  • S = “Swamp”
  • T = (Version 1.15.2 and later only) “Toadstool” i.e. fungus
  • U = “Underground”
  • V = “Village”
  • W = “Water”
  • X = "Impassable"
  • Y = Reserved for UMC
  • Z = Reserved for UMC
  • _ = "special system stuff"

Additional letters do not always follow the same meaning, but are as consistent as possible.

  • \, |, / = for indicating the direction of bridges
  • a =
  • b =
  • c = "city"
  • d = "dry or desert, deciduous"
  • e = "encampment"
  • f = "flowers, fall"
  • g
  • h = "human"
  • i = "ice"
  • j
  • k
  • l = "lava"
  • m = "mixed"
  • n
  • o = "orc"
  • p = "pine"
  • q
  • r
  • s = "simple"
  • t = "archetype", a hidden terrain used only as a base for other terrains
  • u = "underground"
  • v = "elvish"
  • w
  • x = "chasm"
  • y = Reserved for UMC
  • z = Reserved for UMC

Terrain codes in map data

This is not the Matrix. You normally don't need to look at encoded maps. However, it can be beneficial and useful for more advanced users to understand the usage of terrain strings in raw map file.

The encoding for maps has a specific format in Wesnoth:

  • A map starts with a header with the following keys
    • usage, this should be 'map' for a map and 'mask' for an overlay mask
    • border_size, the size of the border, should be 1 for map and 0 for mask. When the border_size is 1 the map border is part of the map data, this means the user can define the border instead of the game taking a guess.
    • (Version 1.13.12 and later only) These keys are now deprecated and will be ignored if present. The blank line mentioned below is not required if these keys are absent.
  • Between the header and the data should be 1 empty line
  • A map data file consists of any number of lines, each with the same number of terrain codes.
  • Each string may be padded with spaces or tabs and must be separated with a comma, except for the last string on a line this one may not have a comma.
  • When the file is interpreted, each terrain code will be replaced by the terrain it refers to.
  • Empty lines are allowed before, after and between lines of characters, between lines is not advised.
  • Terrains may be prefixed with a number followed by one space, these indicate the starting position for side n.
  • (Version 1.13.12 and later only) In addition to side numbers, terrains may be prefixed by any number of strings (which should consist of alphanumeric characters only, including underscores). All names and side numbers must be delimited by spaces and are separated from the actual terrain code by an additional space.

Since text file tiles are squares while game tiles are hexes, some tiles must be shifted. Tiles in even-numbered columns are shifted down 1/2 of a tile. For example, to have a road of connected dirt ('Re') tiles, the map data would look like this:

usage=map
border_size=1

Re, Re, Gg, Gg, Gg, Gg, Gg, Gg
Gg, Gg, Re, Re, Gg, Gg, Gg, Gg
Gg, Gg, Gg, Gg, Re, Re, Gg, Gg
Gg, Gg, Gg, Gg, Gg, Gg, Re, Re

See Also

This page was last edited on 29 April 2024, at 05:30.