<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.wesnoth.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Octalot</id>
	<title>The Battle for Wesnoth Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.wesnoth.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Octalot"/>
	<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/Special:Contributions/Octalot"/>
	<updated>2026-04-20T04:29:14Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.16</generator>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=GermanTranslationUnitNames&amp;diff=74924</id>
		<title>GermanTranslationUnitNames</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=GermanTranslationUnitNames&amp;diff=74924"/>
		<updated>2026-03-26T20:04:14Z</updated>

		<summary type="html">&lt;p&gt;Octalot: /* Hinweise zur Übersetzung */ Although this page has a lot of useful information, link to the unit types database for names of unit types&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Hinweise zur Übersetzung ==&lt;br /&gt;
&lt;br /&gt;
Auf dieser Seite fassen wir alle wichtigen Informationen zusammen, so dass inoffizielle Erweiterungen und der offizielle Inhalt des Spiels weitestgehend synchron sind. Hier findet ihr Informationen, die für sie wichtig sind, ebenso wie bedeutende Orte oder gebräuchliche Formulierungen, die fast in jeder Kampagne vorkommen.&lt;br /&gt;
&lt;br /&gt;
Die deutschen Namen der Einheitentypen sind anderswo:&lt;br /&gt;
* 1.18: https://units.wesnoth.org/1.18/mainline/de_DE/mainline.html&lt;br /&gt;
* Dev: https://units.wesnoth.org/trunk/mainline/de_DE/mainline.html&lt;br /&gt;
&lt;br /&gt;
=== Generelles ===&lt;br /&gt;
&lt;br /&gt;
Die Übersetzung sollte vom Stil her der Sprache des Mittelalters entsprechen. Das bedeutet beispielsweise, dass man statt &amp;quot;Sie&amp;quot; &amp;quot;Ihr&amp;quot; verwendet. Zudem müsst und solltet ihr euch nicht strikt an das Original halten. Wenn euch eine Formulierung einfällt, die euch besser gefällt, solltet ihr diese auch verwenden, solange evtl. wichtige Informationen erhalten bleiben.&lt;br /&gt;
&lt;br /&gt;
=== Zeichensetzung und Ähnliches ===&lt;br /&gt;
&lt;br /&gt;
Es werden die typografisch richtigen Satzzeichen verwendet:&lt;br /&gt;
&lt;br /&gt;
* Anführungszeichen: »Text«, nicht &amp;quot;Text&amp;quot; oder 'Text'&lt;br /&gt;
* Bindestrich: normales Minuszeichen&lt;br /&gt;
* Gedankenstrich: &amp;quot;Text – Einschub&amp;quot;, nicht &amp;quot;Text - Einschub&amp;quot; oder &amp;quot;Text -- Einschub&amp;quot; (Halb- statt Viertel-Geviertstrich)&lt;br /&gt;
** Im Englischen wird stattdessen der Geviertstrich benutzt (auch bekannt als &amp;quot;em dash&amp;quot;, so lang wie ein m). Dabei werden dort keine Leerzeichen davor oder danach gesetzt. Im Deutschen werden um den Halbgeviertstrich (auch &amp;quot;en dash&amp;quot;) Leerzeichen eingefügt.&lt;br /&gt;
** Für die passende Tastenkombination, siehe hier: http://de.wikipedia.org/wiki/Halbgeviertstrich#Eingabe_bei_Computersystemen_und_-programmen&lt;br /&gt;
* Apostroph: &amp;quot;Geht’s&amp;quot;, nicht &amp;quot;Geht's&amp;quot;.&lt;br /&gt;
* Anrede (groß- bzw. kleingeschriebene Personal-/Possessivpronomen): &lt;br /&gt;
** Unterhaltung im Spiel - je nach Situation und Charakter:&lt;br /&gt;
*** Kleinschreibung beim Duzen (richtig: &amp;quot;Meiner Treu, du bist ein Lump!&amp;quot;, falsch: &amp;quot;Meiner Treu, Du bist ein Lump!&amp;quot;).&lt;br /&gt;
*** Großschreibung beim Ihrzen (richtig: &amp;quot;Meiner Treu, Ihr seid ein Lump!&amp;quot;, falsch: &amp;quot;Meiner Treu, ihr seid ein Lump!&amp;quot;).&lt;br /&gt;
*** Ob geduzt oder geihrzt wird, sollte für die einzelnen Charaktere über die Kampagne hinweg konsistent sein.&lt;br /&gt;
** Wird der Spieler angesprochen:&lt;br /&gt;
*** Ihrzen + Großschreibung (richtig: &amp;quot;Bewegt Euren Anführer über die Brücke.&amp;quot;, falsch: &amp;quot;Bewegt euren Anrührer über die Brücke.&amp;quot;).&lt;br /&gt;
*** Niemals Siezen!&lt;br /&gt;
* Die vollständige (englische) Typografie-Anleitung gibt es [[Typography_Style_Guide|hier]]; Bash-Scripts zum automatisierten Anpassen der Sonderzeichen [[TranslatorShellscript|hier]].&lt;br /&gt;
* Das Dach&amp;quot;^&amp;quot; ist eine Übersetzerhilfe: Alles vor diesem Zeichen wird in der Übersetzung ignoriert. Beispiel: &amp;quot;rod of justice^Take it!&amp;quot; – Der zu übersetzende String heißt eigentlich nur &amp;quot;Take it&amp;quot;. Damit der Bezug von &amp;quot;it&amp;quot; klar wird, spezifiziert der Programmierer, dass es sich auf &amp;quot;rod of justice&amp;quot; bezieht. Die Übersetzung könnte also sein: &amp;quot;Schnapp dir das Ding!&amp;quot;.&lt;br /&gt;
* $Variablen müssen im übersetzten Text genau gleich sein.&lt;br /&gt;
* Bei formatiertem Text (z.B. &amp;lt;italic&amp;gt;text='Battle for Wesnoth'&amp;lt;/italic&amp;gt;) handelt es sich um Pango Markup. Achtet darauf, dass es für jedes öffnende &amp;lt; bzw. ' auch ein schließendes gibt, da solche Fehler oft schwer zu finden sind. Auch zusätzliche Leerzeichen sind innerhalb einer solchen Auszeichnung beim Übersetzen nicht erlaubt – vergesst aber nicht, dass außerhalb davon zur Worttrennung i.d.R. eins dazugehört.&lt;br /&gt;
&lt;br /&gt;
== Mainline (offizieller Inhalt des Spiels) ==&lt;br /&gt;
&lt;br /&gt;
=== Einheiten ===&lt;br /&gt;
&lt;br /&gt;
Details zum letzten Namensüberarbeitungsprojekt finden sich [[GermanTranslationNameRework|hier]].&lt;br /&gt;
Die Übersetzungen wurden in die Entwicklerversion eingearbeitet.&lt;br /&gt;
&lt;br /&gt;
Damit niemand 'Goblin' mit 'Goblin' übersetzt oder 'Wose' mit 'Baummensch', orientiert euch bitte an folgenden Übersichten:&lt;br /&gt;
&lt;br /&gt;
[http://units.wesnoth.org/trunk/mainline/de_DE/mainline.html Mainline]&lt;br /&gt;
&lt;br /&gt;
[http://units.wesnoth.org/trunk/mainline/de_DE/Sceptre_of_Fire.html Das Zepter des Feuers]&lt;br /&gt;
&lt;br /&gt;
[http://units.wesnoth.org/trunk/mainline/de_DE/Delfadors_Memoirs.html Delfadors Memoiren]&lt;br /&gt;
&lt;br /&gt;
[http://units.wesnoth.org/trunk/mainline/de_DE/The_Rise_of_Wesnoth.html Der Aufstieg Wesnoths]&lt;br /&gt;
&lt;br /&gt;
[http://units.wesnoth.org/trunk/mainline/de_DE/The_Hammer_of_Thursagan.html Der Hammer von Thursagan]&lt;br /&gt;
&lt;br /&gt;
[http://units.wesnoth.org/trunk/mainline/de_DE/Heir_To_The_Throne.html Der Thronerbe]&lt;br /&gt;
&lt;br /&gt;
[http://units.wesnoth.org/trunk/mainline/de_DE/Descent_into_Darkness.html Die dunklen Künste]&lt;br /&gt;
&lt;br /&gt;
[https://units.wesnoth.org/trunk/mainline/de_DE/Two_Brothers.html Die Geschichte zweier Brüder]&lt;br /&gt;
&lt;br /&gt;
[http://units.wesnoth.org/trunk/mainline/de_DE/LOW.html Die Legende von Wesmere]&lt;br /&gt;
&lt;br /&gt;
[http://units.wesnoth.org/trunk/mainline/de_DE/The_South_Guard.html Die Südwacht]&lt;br /&gt;
&lt;br /&gt;
[https://units.wesnoth.org/trunk/mainline/de_DE/An_Orcish_Incursion.html Ein Einmarsch der Orks]&lt;br /&gt;
&lt;br /&gt;
[http://units.wesnoth.org/trunk/mainline/de_DE/Liberty.html Freiheit]&lt;br /&gt;
&lt;br /&gt;
[https://units.wesnoth.org/trunk/mainline/de_DE/Secrets%20of%20the%20Ancients.html Geheimnisse der Alten]&lt;br /&gt;
&lt;br /&gt;
[http://units.wesnoth.org/trunk/mainline/de_DE/Eastern_Invasion.html Invasion der Finsternis]&lt;br /&gt;
&lt;br /&gt;
[http://units.wesnoth.org/trunk/mainline/de_DE/Son_of_the_Black-Eye.html Schwarzauges Sohn]&lt;br /&gt;
&lt;br /&gt;
[http://units.wesnoth.org/trunk/mainline/de_DE/Dead_Water.html Stille Wasser]&lt;br /&gt;
&lt;br /&gt;
[http://units.wesnoth.org/trunk/mainline/de_DE/Under_the_Burning_Suns.html Unter brennenden Sonnen]&lt;br /&gt;
&lt;br /&gt;
[http://units.wesnoth.org/trunk/mainline/de_DE/Northern_Rebirth.html Wiedergeburt des Nordens]&lt;br /&gt;
&lt;br /&gt;
=== Gruppierungen ===&lt;br /&gt;
==== Rassen / Ethnien ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | Drakes&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | Draken&lt;br /&gt;
|-&lt;br /&gt;
| Dunefolk&lt;br /&gt;
| Menschen (Dünenvolk)&lt;br /&gt;
|-&lt;br /&gt;
| Dwarves&lt;br /&gt;
| Zwerge&lt;br /&gt;
|-&lt;br /&gt;
| Elves&lt;br /&gt;
| Elfen&lt;br /&gt;
|-&lt;br /&gt;
| Goblins&lt;br /&gt;
| Kobolde&lt;br /&gt;
|-&lt;br /&gt;
| Humans&lt;br /&gt;
| Menschen (Wesnoth)&lt;br /&gt;
|-&lt;br /&gt;
| Khalifate*&lt;br /&gt;
| Menschen (Kalifat)&lt;br /&gt;
|-&lt;br /&gt;
| Merfolk, Mermen**&lt;br /&gt;
| Meervolk (Rasse)&lt;br /&gt;
Wasserleute, -männer/-frauen (Dialoge etc.)&lt;br /&gt;
|-&lt;br /&gt;
| Mechanical&lt;br /&gt;
| Kriegsgerät&lt;br /&gt;
|-&lt;br /&gt;
| Monsters&lt;br /&gt;
| Monster&lt;br /&gt;
|-&lt;br /&gt;
| Nagas&lt;br /&gt;
| Nagas&lt;br /&gt;
|-&lt;br /&gt;
| Ogres&lt;br /&gt;
| Oger&lt;br /&gt;
|-&lt;br /&gt;
| Orcs&lt;br /&gt;
| Orks&lt;br /&gt;
|-&lt;br /&gt;
| Saurians / Lizards&lt;br /&gt;
| Saurianer / Echsen&lt;br /&gt;
|-&lt;br /&gt;
| Trolls&lt;br /&gt;
| Trolle&lt;br /&gt;
|-&lt;br /&gt;
| Undead&lt;br /&gt;
| Untote&lt;br /&gt;
|-&lt;br /&gt;
| Woses&lt;br /&gt;
| Waldschrate&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''*''' Mit Wesnoth 1.14 wurden die 'Khalifate' in 'Dunefolk' umbenannt.&amp;lt;br /&amp;gt;&lt;br /&gt;
'''**''' Im englischen Text wird als Bezeichnung für die Rasse &amp;quot;Merfolk&amp;quot; statt &amp;quot;Mermen&amp;quot; bevorzugt, aber siehe: [https://github.com/wesnoth/wesnoth/issues/2940 Issue 2940].&lt;br /&gt;
&lt;br /&gt;
==== Fraktionen ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | Alliance of Darkness&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | Allianz der Finsternis&lt;br /&gt;
|-&lt;br /&gt;
| Alliance of Light&lt;br /&gt;
| Allianz des Lichtes&lt;br /&gt;
|-&lt;br /&gt;
| Drakes&lt;br /&gt;
| Draken&lt;br /&gt;
|-&lt;br /&gt;
| Knalgan Alliance&lt;br /&gt;
| Knalga Allianz&lt;br /&gt;
|-&lt;br /&gt;
| Loyalists&lt;br /&gt;
| Loyalisten&lt;br /&gt;
|-&lt;br /&gt;
| Northerners&lt;br /&gt;
| Nordmannen&lt;br /&gt;
|-&lt;br /&gt;
| Rebels&lt;br /&gt;
| Rebellen&lt;br /&gt;
|-&lt;br /&gt;
| Undead&lt;br /&gt;
| Untote&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Bedeutende Orte ===&lt;br /&gt;
Details zur Geographie von Wesnoth sind auf der Seite [[WesnothGeography]] zu finden (nicht auf neustem Stand).&lt;br /&gt;
==== Gewässer / Inseln ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | Arkan-thoria&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | Arkan-thoria (Fluss)&lt;br /&gt;
|-&lt;br /&gt;
| Bay of Pearls&lt;br /&gt;
| Perlenbucht&lt;br /&gt;
|-&lt;br /&gt;
| Bilheld (isle)&lt;br /&gt;
| Bilheld (Insel)&lt;br /&gt;
|-&lt;br /&gt;
| Black River&lt;br /&gt;
| Schwarzer Fluss&lt;br /&gt;
|-&lt;br /&gt;
| Great River&lt;br /&gt;
| Großer Fluss&lt;br /&gt;
|-&lt;br /&gt;
| Green Isle&lt;br /&gt;
| Grüne Insel&lt;br /&gt;
|-&lt;br /&gt;
| Island Vrug&lt;br /&gt;
| Insel von Vrug&lt;br /&gt;
|-&lt;br /&gt;
| Isle of Alduin&lt;br /&gt;
| Insel Alduin&lt;br /&gt;
|-&lt;br /&gt;
| Lake Aelin&lt;br /&gt;
| Aelin-See&lt;br /&gt;
|-&lt;br /&gt;
| River Aethen&lt;br /&gt;
| Aethen (Fluss)&lt;br /&gt;
|-&lt;br /&gt;
| River Bork&lt;br /&gt;
| Bork (Fluss)&lt;br /&gt;
|-&lt;br /&gt;
| River Listra&lt;br /&gt;
| Listra (Fluss)&lt;br /&gt;
|-&lt;br /&gt;
| River Oumph&lt;br /&gt;
| Oumph (Fluss)&lt;br /&gt;
|-&lt;br /&gt;
| River Weldyn&lt;br /&gt;
| Weldyn (Fluss)&lt;br /&gt;
|-&lt;br /&gt;
| Shimmering Isle&lt;br /&gt;
| Insel des Glanzes&lt;br /&gt;
|-&lt;br /&gt;
| Sleepless Sea&lt;br /&gt;
| Ruheloses Meer&lt;br /&gt;
|-&lt;br /&gt;
| The Far Sea&lt;br /&gt;
| Das Ferne Meer&lt;br /&gt;
|-&lt;br /&gt;
| The Ford of Abez&lt;br /&gt;
| Furt von Abez&lt;br /&gt;
|-&lt;br /&gt;
| The Great Ocean&lt;br /&gt;
| Der Große Ozean&lt;br /&gt;
|-&lt;br /&gt;
| The Lake Vrug&lt;br /&gt;
| Vrugsee&lt;br /&gt;
|-&lt;br /&gt;
| The Three Sisters (isle)&lt;br /&gt;
| Die Drei Schwestern (Insel)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Wälder ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | Aethenwood&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | Aethenwälder&lt;br /&gt;
|-&lt;br /&gt;
| Black Forest&lt;br /&gt;
| Schwarzer Wald&lt;br /&gt;
|-&lt;br /&gt;
| Forest of Thelien&lt;br /&gt;
| Thelien-Wald&lt;br /&gt;
|-&lt;br /&gt;
| Glyn's Forest&lt;br /&gt;
| Glyns Gehölz&lt;br /&gt;
|-&lt;br /&gt;
| Greenwood&lt;br /&gt;
| Grüner Hain&lt;br /&gt;
|-&lt;br /&gt;
| Grey Woods&lt;br /&gt;
| Grauer Wald&lt;br /&gt;
|-&lt;br /&gt;
| Lintanir Forest&lt;br /&gt;
| Lintanir-Forst&lt;br /&gt;
|-&lt;br /&gt;
| Silent Forest&lt;br /&gt;
| Stiller Wald&lt;br /&gt;
|-&lt;br /&gt;
| Southwood&lt;br /&gt;
| Südwald&lt;br /&gt;
|-&lt;br /&gt;
| Wesmere Forest&lt;br /&gt;
| Wesmerewälder&lt;br /&gt;
|-&lt;br /&gt;
| Oldwood (Green Isle)&lt;br /&gt;
| Alter Wald (Grüne Insel)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Gebirge / Höhlen / Täler ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | Broken Mountains (Green Isle)&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | Splittergebirge (Grüne Insel)&lt;br /&gt;
|-&lt;br /&gt;
| Brown Hills&lt;br /&gt;
| Braune Hügel&lt;br /&gt;
|-&lt;br /&gt;
| Caverns of Chaincolt&lt;br /&gt;
| Chaincolt-Höhlen&lt;br /&gt;
|-&lt;br /&gt;
| Caves of Knalga&lt;br /&gt;
| Knalga&lt;br /&gt;
|-&lt;br /&gt;
| Dulatus Hills&lt;br /&gt;
| Dulatushügel&lt;br /&gt;
|-&lt;br /&gt;
| Estmark Hills&lt;br /&gt;
| Ostmarken&lt;br /&gt;
|-&lt;br /&gt;
| Gryphon Mt.&lt;br /&gt;
| Berg der Greifen&lt;br /&gt;
|-&lt;br /&gt;
| Heart Mountains&lt;br /&gt;
| Erzgebirge&lt;br /&gt;
|-&lt;br /&gt;
| Mountains of Dorth&lt;br /&gt;
| Dorth-Gebirge&lt;br /&gt;
|-&lt;br /&gt;
| Mountains of Haag&lt;br /&gt;
| Haager Berge&lt;br /&gt;
|-&lt;br /&gt;
| Mountains of Peril&lt;br /&gt;
| Tückische Gipfel&lt;br /&gt;
|-&lt;br /&gt;
| Mourned Hills&lt;br /&gt;
| Trauerhügel&lt;br /&gt;
|-&lt;br /&gt;
| Shorbear caves&lt;br /&gt;
| Shorbear Höhlen&lt;br /&gt;
|-&lt;br /&gt;
| The Vale (of Blossoming Trees)&lt;br /&gt;
| Tal der blühenden Bäume&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Sümpfe / Moore ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | Bitter Swamp&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | Sumpf der Tränen&lt;br /&gt;
|-&lt;br /&gt;
| Black Marshes&lt;br /&gt;
| Schwarzes Moor&lt;br /&gt;
|-&lt;br /&gt;
| Swamp of Dread&lt;br /&gt;
| Sumpf der Furcht&lt;br /&gt;
|-&lt;br /&gt;
| Swamp of Esten (Green Isle)&lt;br /&gt;
| Sümpfe von Esten (Grüne Insel)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Wüsten / Ebenen ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | Barren Plains&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | Karge Steppe&lt;br /&gt;
|-&lt;br /&gt;
| Desert of Death&lt;br /&gt;
| Todeswüste&lt;br /&gt;
|-&lt;br /&gt;
| Frosty Wastes&lt;br /&gt;
| Frostwüste&lt;br /&gt;
|-&lt;br /&gt;
| Horse Plains&lt;br /&gt;
| Ebene der Pferde&lt;br /&gt;
|-&lt;br /&gt;
| North Plains&lt;br /&gt;
| Nördlichen Ebenen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Städte / Dörfer / Festen ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | Blackmore (Green Isle)&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | Mortingen (Grüne Insel)&lt;br /&gt;
|-&lt;br /&gt;
| Blackwater Port &lt;br /&gt;
| Schwarzwasserhafen&lt;br /&gt;
|-&lt;br /&gt;
| Clearwater Port (Green Isle)&lt;br /&gt;
| Klarwasserhafen (Grüne Insel)&lt;br /&gt;
|-&lt;br /&gt;
| Dwarven Doors&lt;br /&gt;
| Zwergenpforte&lt;br /&gt;
|-&lt;br /&gt;
| Elensefar&lt;br /&gt;
| Elensefar&lt;br /&gt;
|-&lt;br /&gt;
| Dorest&lt;br /&gt;
| Dorest&lt;br /&gt;
|-&lt;br /&gt;
| Fort Kerlath&lt;br /&gt;
| Fort Kerlath&lt;br /&gt;
|-&lt;br /&gt;
| Fort Than&lt;br /&gt;
| Fort Than&lt;br /&gt;
|-&lt;br /&gt;
| Halstead&lt;br /&gt;
| Halstead (Festung)&lt;br /&gt;
|-&lt;br /&gt;
| Jeyvan's Haven (Green Isle)&lt;br /&gt;
| Jeyvans Rast (Grüne Insel)&lt;br /&gt;
|-&lt;br /&gt;
| Prestim&lt;br /&gt;
| Prestim&lt;br /&gt;
|-&lt;br /&gt;
| Saurgrath&lt;br /&gt;
| Saurgrath&lt;br /&gt;
|-&lt;br /&gt;
| Shorbear Hold&lt;br /&gt;
| Feste Shorbear&lt;br /&gt;
|-&lt;br /&gt;
| Soradoc&lt;br /&gt;
| Soradoc&lt;br /&gt;
|-&lt;br /&gt;
| Southbay (Green Isle)&lt;br /&gt;
| Südbucht (Grüne Insel)&lt;br /&gt;
|-&lt;br /&gt;
| Spellkeep&lt;br /&gt;
| Bannheim&lt;br /&gt;
|-&lt;br /&gt;
| Stormvale (Green Isle)&lt;br /&gt;
| Sturmtal (Grüne Insel)&lt;br /&gt;
|-&lt;br /&gt;
| Weldyn&lt;br /&gt;
| Weldyn&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Sonstige ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | Estmark&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | Ostmarken&lt;br /&gt;
|-&lt;br /&gt;
| Fallen Lich Point (Green Isle)&lt;br /&gt;
| Platz zum gefallenen Lich (Grüne Insel)&lt;br /&gt;
|-&lt;br /&gt;
| Irdya – the wide green world&lt;br /&gt;
| Irdya – die weite grüne Welt&lt;br /&gt;
|-&lt;br /&gt;
| Far North&lt;br /&gt;
| Weiter Norden&lt;br /&gt;
|-&lt;br /&gt;
| land of the Clans&lt;br /&gt;
| Lande der Sippen&lt;br /&gt;
|-&lt;br /&gt;
| Midlands (Green Isle)&lt;br /&gt;
| Mittellande (Grüne Insel)&lt;br /&gt;
|-&lt;br /&gt;
| Northlands&lt;br /&gt;
| Nordlande&lt;br /&gt;
|-&lt;br /&gt;
| old eastern mines&lt;br /&gt;
| östliche Minen&lt;br /&gt;
|-&lt;br /&gt;
| Southern / Northern Outpost&lt;br /&gt;
| Südlicher / Nördlicher Außenposten&lt;br /&gt;
|-&lt;br /&gt;
| the Great Continent&lt;br /&gt;
| der Große Kontinent&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Waffen und Gegenstände ===&lt;br /&gt;
&lt;br /&gt;
==== Waffen ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | axe&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | Axt&lt;br /&gt;
|-&lt;br /&gt;
| ballista&lt;br /&gt;
| Balliste	&lt;br /&gt;
|-&lt;br /&gt;
| baneblade&lt;br /&gt;
| Spektralklinge&lt;br /&gt;
|-&lt;br /&gt;
| battle axe&lt;br /&gt;
| Streitaxt&lt;br /&gt;
|-&lt;br /&gt;
| battle claws&lt;br /&gt;
| Kampfkralle&lt;br /&gt;
|-&lt;br /&gt;
| beak&lt;br /&gt;
| Schnabelhieb&lt;br /&gt;
|-&lt;br /&gt;
| buckler&lt;br /&gt;
| Rundschild&lt;br /&gt;
|-&lt;br /&gt;
| berserker frenzy&lt;br /&gt;
| Raserei&lt;br /&gt;
|-&lt;br /&gt;
| bite&lt;br /&gt;
| Biss&lt;br /&gt;
|-&lt;br /&gt;
| bow&lt;br /&gt;
| Bogen&lt;br /&gt;
|-&lt;br /&gt;
| chill tempest	&lt;br /&gt;
| Schattenpfeile&lt;br /&gt;
|-&lt;br /&gt;
| chill wave&lt;br /&gt;
| Frostwelle&lt;br /&gt;
|-&lt;br /&gt;
| claws&lt;br /&gt;
| Klauen&lt;br /&gt;
|-&lt;br /&gt;
| cleaver&lt;br /&gt;
| Fleischerbeil&lt;br /&gt;
|-&lt;br /&gt;
| club&lt;br /&gt;
| Keule&lt;br /&gt;
|-&lt;br /&gt;
| crossbow&lt;br /&gt;
| Armbrust&lt;br /&gt;
|-&lt;br /&gt;
| crush&lt;br /&gt;
| Zermalmen&lt;br /&gt;
|-&lt;br /&gt;
| curse&lt;br /&gt;
| Fluch&lt;br /&gt;
|-&lt;br /&gt;
| dagger&lt;br /&gt;
| Dolch&lt;br /&gt;
|-&lt;br /&gt;
| dragonstaff&lt;br /&gt;
| Drachenstab&lt;br /&gt;
|-&lt;br /&gt;
| ensnare&lt;br /&gt;
| Zorn des Waldes&lt;br /&gt;
|-&lt;br /&gt;
| entangle&lt;br /&gt;
| Efeumantel&lt;br /&gt;
|-&lt;br /&gt;
| faerie fire&lt;br /&gt;
| Feenfeuer&lt;br /&gt;
|-&lt;br /&gt;
| faerie touch&lt;br /&gt;
| Feenhauch&lt;br /&gt;
|-&lt;br /&gt;
| fangs&lt;br /&gt;
| Fänge&lt;br /&gt;
|-&lt;br /&gt;
| fire claws&lt;br /&gt;
| Feuerklauen&lt;br /&gt;
|-&lt;br /&gt;
| fire breath&lt;br /&gt;
| Feueratem&lt;br /&gt;
|-&lt;br /&gt;
| fireball&lt;br /&gt;
| Feuerball&lt;br /&gt;
|-&lt;br /&gt;
| fist&lt;br /&gt;
| Faust&lt;br /&gt;
|-&lt;br /&gt;
| gossamer&lt;br /&gt;
| Spinnfäden&lt;br /&gt;
|-&lt;br /&gt;
| greatsword&lt;br /&gt;
| Krummschwert&lt;br /&gt;
|-&lt;br /&gt;
| halberd&lt;br /&gt;
| Hellebarde&lt;br /&gt;
|-&lt;br /&gt;
| hammer&lt;br /&gt;
| Hammer&lt;br /&gt;
|-&lt;br /&gt;
| hatchet&lt;br /&gt;
| Wurfbeil&lt;br /&gt;
|-&lt;br /&gt;
| ink&lt;br /&gt;
| Tinte&lt;br /&gt;
|-&lt;br /&gt;
| javelin&lt;br /&gt;
| Wurfspeer&lt;br /&gt;
|-&lt;br /&gt;
| jaw&lt;br /&gt;
| Kiefer&lt;br /&gt;
|-&lt;br /&gt;
| knife&lt;br /&gt;
| Messer&lt;br /&gt;
|-&lt;br /&gt;
| lance&lt;br /&gt;
| Lanze&lt;br /&gt;
|-&lt;br /&gt;
| lightbeam&lt;br /&gt;
| Heiliges Licht&lt;br /&gt;
|-&lt;br /&gt;
| lightning bolt&lt;br /&gt;
| Blitzschlag&lt;br /&gt;
|-&lt;br /&gt;
| longbow&lt;br /&gt;
| Langbogen&lt;br /&gt;
|-&lt;br /&gt;
| mace&lt;br /&gt;
| Streitkolben&lt;br /&gt;
|-&lt;br /&gt;
| missile&lt;br /&gt;
| Magiegeschoss&lt;br /&gt;
|-&lt;br /&gt;
| morning star&lt;br /&gt;
| Morgenstern&lt;br /&gt;
|-&lt;br /&gt;
| mud glob&lt;br /&gt;
| Schlammklumpen&lt;br /&gt;
|-&lt;br /&gt;
| naia touch&lt;br /&gt;
| Naias Berührung&lt;br /&gt;
|-&lt;br /&gt;
| net&lt;br /&gt;
| Netz&lt;br /&gt;
|-&lt;br /&gt;
| pike&lt;br /&gt;
| Pike&lt;br /&gt;
|-&lt;br /&gt;
| pincers&lt;br /&gt;
| Scheren&lt;br /&gt;
|-&lt;br /&gt;
| pitchfork&lt;br /&gt;
| Mistforke&lt;br /&gt;
|-&lt;br /&gt;
| plague staff&lt;br /&gt;
| Stab der Plagen&lt;br /&gt;
|-&lt;br /&gt;
| ram&lt;br /&gt;
| Mauerbrecher&lt;br /&gt;
|-&lt;br /&gt;
| runic hammer&lt;br /&gt;
| Runenhammer&lt;br /&gt;
|-&lt;br /&gt;
| sabre&lt;br /&gt;
| Säbel&lt;br /&gt;
|-&lt;br /&gt;
| scimitar&lt;br /&gt;
| Krummsäbel&lt;br /&gt;
|-&lt;br /&gt;
| shadow wave&lt;br /&gt;
| Schattenwelle&lt;br /&gt;
|-&lt;br /&gt;
| short sword&lt;br /&gt;
| Kurzschwert&lt;br /&gt;
|-&lt;br /&gt;
| slam&lt;br /&gt;
| Sturzflug&lt;br /&gt;
|-&lt;br /&gt;
| sling&lt;br /&gt;
| Schleuder&lt;br /&gt;
|-&lt;br /&gt;
| smash (Eyestalk)&lt;br /&gt;
| Rankenhieb (Augenranke)&lt;br /&gt;
|-&lt;br /&gt;
| spear&lt;br /&gt;
| Speer&lt;br /&gt;
|-&lt;br /&gt;
| staff&lt;br /&gt;
| Stab&lt;br /&gt;
|-&lt;br /&gt;
| sting&lt;br /&gt;
| Stachel&lt;br /&gt;
|-&lt;br /&gt;
| sword&lt;br /&gt;
| Schwert&lt;br /&gt;
|-&lt;br /&gt;
| tail&lt;br /&gt;
| Schwanz&lt;br /&gt;
|-&lt;br /&gt;
| tentacle	&lt;br /&gt;
| Tentakel&lt;br /&gt;
|-&lt;br /&gt;
| thorns&lt;br /&gt;
| Dornen&lt;br /&gt;
|-&lt;br /&gt;
| throwing knives&lt;br /&gt;
| Wurfmesser&lt;br /&gt;
|-&lt;br /&gt;
| thunderstick&lt;br /&gt;
| Donnerstock&lt;br /&gt;
|-&lt;br /&gt;
| torch&lt;br /&gt;
| Fackel&lt;br /&gt;
|-&lt;br /&gt;
| touch&lt;br /&gt;
| Berührung&lt;br /&gt;
|-&lt;br /&gt;
| trident&lt;br /&gt;
| Dreizack&lt;br /&gt;
|-&lt;br /&gt;
| wail&lt;br /&gt;
| Klage&lt;br /&gt;
|-&lt;br /&gt;
| war blade&lt;br /&gt;
| Kriegsklinge&lt;br /&gt;
|-&lt;br /&gt;
| war talon&lt;br /&gt;
| Kriegsklaue&lt;br /&gt;
|-&lt;br /&gt;
| water spray&lt;br /&gt;
| Peitschende Gischt&lt;br /&gt;
|-&lt;br /&gt;
| web&lt;br /&gt;
| Netz&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Waffenfähigkeiten ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | backstab&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | Hinterlistiger Angriff&lt;br /&gt;
|-&lt;br /&gt;
| berserk&lt;br /&gt;
| Kampfrausch&lt;br /&gt;
|-&lt;br /&gt;
| charge&lt;br /&gt;
| Ansturm&lt;br /&gt;
|-&lt;br /&gt;
| daze&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| drains&lt;br /&gt;
| Lebensentzug&lt;br /&gt;
|-&lt;br /&gt;
| first strike&lt;br /&gt;
| Erstschlag&lt;br /&gt;
|-&lt;br /&gt;
| magical&lt;br /&gt;
| Magie&lt;br /&gt;
|-&lt;br /&gt;
| marksman&lt;br /&gt;
| Treffsicherheit&lt;br /&gt;
|-&lt;br /&gt;
| petrifies&lt;br /&gt;
| Versteinerung&lt;br /&gt;
|-&lt;br /&gt;
| plague&lt;br /&gt;
| Untote Plage&lt;br /&gt;
|-&lt;br /&gt;
| poison&lt;br /&gt;
| Gift&lt;br /&gt;
|-&lt;br /&gt;
| slows&lt;br /&gt;
| Verlangsamung&lt;br /&gt;
|-&lt;br /&gt;
| swarm&lt;br /&gt;
| Schwarm&lt;br /&gt;
|-&lt;br /&gt;
| shock&lt;br /&gt;
| Blitzangriff&lt;br /&gt;
|-&lt;br /&gt;
| stun&lt;br /&gt;
| Lähmung&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Schadenstypen ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | arcane&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | Arkan&lt;br /&gt;
|-&lt;br /&gt;
| blade&lt;br /&gt;
| Klinge&lt;br /&gt;
|-&lt;br /&gt;
| cold&lt;br /&gt;
| Kälte&lt;br /&gt;
|-&lt;br /&gt;
| fire&lt;br /&gt;
| Feuer&lt;br /&gt;
|-&lt;br /&gt;
| impact&lt;br /&gt;
| Wucht&lt;br /&gt;
|-&lt;br /&gt;
| pierce&lt;br /&gt;
| Stich&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Gegenstände===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | Flaming Sword&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | Flammenschwert&lt;br /&gt;
|-&lt;br /&gt;
| Holy Water&lt;br /&gt;
| Weihwasser&lt;br /&gt;
|-&lt;br /&gt;
| Poison&lt;br /&gt;
| Gift&lt;br /&gt;
|-&lt;br /&gt;
| Potion of Decay&lt;br /&gt;
| Trank des Verfalls&lt;br /&gt;
|-&lt;br /&gt;
| Potion of Healing&lt;br /&gt;
| Trank der Heilung&lt;br /&gt;
|-&lt;br /&gt;
| Potion of Strength&lt;br /&gt;
| Trank der Stärke&lt;br /&gt;
|-&lt;br /&gt;
| Ring of Regeneration&lt;br /&gt;
| Ring der Regeneration&lt;br /&gt;
|-&lt;br /&gt;
| Ring of Power&lt;br /&gt;
| Ring der Kraft&lt;br /&gt;
|-&lt;br /&gt;
| Ring of Slowness&lt;br /&gt;
| Ring der Langsamkeit&lt;br /&gt;
|-&lt;br /&gt;
| Rod of Justice&lt;br /&gt;
| Stab der Gerechtigkeit&lt;br /&gt;
|-&lt;br /&gt;
| Sceptre of Fire&lt;br /&gt;
| Zepter des Feuers / Feuerzepter&lt;br /&gt;
|-&lt;br /&gt;
| Staff of righteous Flame&lt;br /&gt;
| Stab aufflammender Gerechtigkeit&lt;br /&gt;
|-&lt;br /&gt;
| Staff of Swiftness&lt;br /&gt;
| Stab der Geschwindigkeit&lt;br /&gt;
|-&lt;br /&gt;
| Storm Trident&lt;br /&gt;
| Dreizack des Sturms&lt;br /&gt;
|-&lt;br /&gt;
| Void Armor&lt;br /&gt;
| Rüstung der Leere&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Charakteristiken, Fertigkeiten ===&lt;br /&gt;
&lt;br /&gt;
==== Charakteristiken ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | aged&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | Gealtert&lt;br /&gt;
|-&lt;br /&gt;
| dextrous&lt;br /&gt;
| Geschickt&lt;br /&gt;
|-&lt;br /&gt;
| dim&lt;br /&gt;
| Tumb&lt;br /&gt;
|-&lt;br /&gt;
| elemental&lt;br /&gt;
| Elementar&lt;br /&gt;
|-&lt;br /&gt;
| fearless&lt;br /&gt;
| Furchtlos&lt;br /&gt;
|-&lt;br /&gt;
| leral&lt;br /&gt;
| Wild&lt;br /&gt;
|-&lt;br /&gt;
| healthy&lt;br /&gt;
| Vital&lt;br /&gt;
|-&lt;br /&gt;
| intelligent&lt;br /&gt;
| Intelligent&lt;br /&gt;
|-&lt;br /&gt;
| loyal&lt;br /&gt;
| Loyal&lt;br /&gt;
|-&lt;br /&gt;
| mechanical&lt;br /&gt;
| Mechanisch&lt;br /&gt;
|-&lt;br /&gt;
| quick&lt;br /&gt;
| Schnell&lt;br /&gt;
|-&lt;br /&gt;
| resilient&lt;br /&gt;
| Robust&lt;br /&gt;
|-&lt;br /&gt;
| slow&lt;br /&gt;
| Lahm&lt;br /&gt;
|-&lt;br /&gt;
| strong&lt;br /&gt;
| Kräftig&lt;br /&gt;
|-&lt;br /&gt;
| undead&lt;br /&gt;
| Untot&lt;br /&gt;
|-&lt;br /&gt;
| weak&lt;br /&gt;
| Schwächlich&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Fertigkeiten ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | ambush&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | Waldkenntnis&lt;br /&gt;
|-&lt;br /&gt;
| concealment&lt;br /&gt;
| Gassenwissen&lt;br /&gt;
|-&lt;br /&gt;
| cures&lt;br /&gt;
| Kurieren&lt;br /&gt;
|-&lt;br /&gt;
| feeding&lt;br /&gt;
| Kanibalismus&lt;br /&gt;
|-&lt;br /&gt;
| heals +X&lt;br /&gt;
| Heilen +x&lt;br /&gt;
|-&lt;br /&gt;
| illuminates&lt;br /&gt;
| Lichtaura&lt;br /&gt;
|-&lt;br /&gt;
| leadership&lt;br /&gt;
| Führungsqualitäten&lt;br /&gt;
|-&lt;br /&gt;
| nightstalk&lt;br /&gt;
| Schemen&lt;br /&gt;
|-&lt;br /&gt;
| regenerates&lt;br /&gt;
| Regeneration&lt;br /&gt;
|-&lt;br /&gt;
| skirmisher&lt;br /&gt;
| Plänkler&lt;br /&gt;
|-&lt;br /&gt;
| steadfast&lt;br /&gt;
| Unerschütterlich&lt;br /&gt;
|-&lt;br /&gt;
| submerge&lt;br /&gt;
| Abtauchen&lt;br /&gt;
|-&lt;br /&gt;
| teleport&lt;br /&gt;
| Teleportation&lt;br /&gt;
|-&lt;br /&gt;
| disengage&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| distract&lt;br /&gt;
| Ablenken&lt;br /&gt;
|-&lt;br /&gt;
| formation&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| initiative&lt;br /&gt;
| Kampfgespür&lt;br /&gt;
|-&lt;br /&gt;
| inspire&lt;br /&gt;
| Begeistern&lt;br /&gt;
|-&lt;br /&gt;
| support&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| teaching&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Gebräuchliche Formulierungen ===&lt;br /&gt;
&lt;br /&gt;
==== Missionsziele ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | Death of X (or Y)&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | X (oder Y) fällt in der Schlacht&lt;br /&gt;
|-&lt;br /&gt;
| Turns run out&lt;br /&gt;
| Rundenlimit überschritten&lt;br /&gt;
|-&lt;br /&gt;
| Defeat all enemy leaders&lt;br /&gt;
| Besiegt alle gegnerischen Anführer&lt;br /&gt;
|-&lt;br /&gt;
| Move X to the signpost in the Y&lt;br /&gt;
| Führt X zum Wegweiser im Y&lt;br /&gt;
|-&lt;br /&gt;
| Move X to the sign&lt;br /&gt;
| Führt X zur Markierung&lt;br /&gt;
|-&lt;br /&gt;
| Early finish bonus&lt;br /&gt;
| Bonus für frühzeitiges Ende&lt;br /&gt;
|-&lt;br /&gt;
| Alternative objective&lt;br /&gt;
| Alternative Mission&lt;br /&gt;
|-&lt;br /&gt;
| Bonus objective&lt;br /&gt;
| Bonusmission&lt;br /&gt;
|-&lt;br /&gt;
| Optional (objective)&lt;br /&gt;
| Optional / Optionale Mission&lt;br /&gt;
|-&lt;br /&gt;
| Optional Scenario&lt;br /&gt;
| Optionales Szenario&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Schwierigkeitsgrade / Beschreibungen ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | (Novice / Beginner level, xx scenarios.)&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | (Einstufung: Einfach, xx Szenarien)&lt;br /&gt;
|-&lt;br /&gt;
| (Intermediate level, xx scenarios.)&lt;br /&gt;
| (Einstufung: Mittel, xx Szenarien)&lt;br /&gt;
|-&lt;br /&gt;
| (Expert level, xx scenarios.)&lt;br /&gt;
| (Einstufung: Schwierig, xx Szenarien)&lt;br /&gt;
|-&lt;br /&gt;
| Beginner&lt;br /&gt;
| Sehr einfach&lt;br /&gt;
|-&lt;br /&gt;
| Easy&lt;br /&gt;
| Einfach&lt;br /&gt;
|-&lt;br /&gt;
| Normal&lt;br /&gt;
| Normal&lt;br /&gt;
|-&lt;br /&gt;
| Challenging&lt;br /&gt;
| Herausfordernd&lt;br /&gt;
|-&lt;br /&gt;
| Difficult&lt;br /&gt;
| Schwierig&lt;br /&gt;
|-&lt;br /&gt;
| Nightmare&lt;br /&gt;
| Alptraum&lt;br /&gt;
|-&lt;br /&gt;
| X scenarios (X story-only / dialog-only)&lt;br /&gt;
| x Szenarien + x Erzählung / Dialog&lt;br /&gt;
|-&lt;br /&gt;
| All scenarios are playable, but there may be bugs or balancing issues &lt;br /&gt;
| Alle Szenarien sind spielbar, vereinzelt können aber Fehler auftreten. Auch die Abstimmung der Schwierigkeitsgrade ist noch nicht abgeschlossen.&lt;br /&gt;
|-&lt;br /&gt;
| rated PG-13 (Parental Guidance)&lt;br /&gt;
| &amp;lt;!-- FSK ist für Filme, USK für Videospiele, USK 13 existiert in Deutschland aber nicht, Wesnoth ist USK 6 freigegeben, siehe https://usk.de/?s=wesnoth Der Prüfantrag wurde 2010 vom Axel-Springer-Verlag gestellt, damit BfW auf einer Beilage der Zeitschrift &amp;quot;Computer Bild&amp;quot; veröffentlicht werden konnte --&amp;gt;USK ab 6 (Unterhaltungssoftware Selbstkontrolle)&lt;br /&gt;
|-&lt;br /&gt;
| This campaign contains mature themes, some of which may be unsuitable for children.&lt;br /&gt;
This campaign depicts explicit violence which may not be appropriate for younger children.&lt;br /&gt;
| In dieser Kampagne werden Gewaltszenen dargestellt, die besonders für Spieler im Kindesalter ungeeignet sind!&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Credits (Herausgeber, Mitarbeiter, Danksagung) ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | And special thanks to everyone else who I forgot to mention.&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | Und besonderen Dank an alle, die ich vergessen habe zu erwähnen.&lt;br /&gt;
|-&lt;br /&gt;
| Artwork Support&lt;br /&gt;
| Mitwirkung grafische Gestaltung&lt;br /&gt;
|-&lt;br /&gt;
| Artwork and Graphics Design&lt;br /&gt;
| Grafik&lt;br /&gt;
|-&lt;br /&gt;
| Author (of this campaign)&lt;br /&gt;
| Autor (der Kampagne)&lt;br /&gt;
|-&lt;br /&gt;
| Campaign Design&lt;br /&gt;
| Kampagnengestaltung&lt;br /&gt;
|-&lt;br /&gt;
| Campaign Epilog and Continuity&lt;br /&gt;
| Kampagnenepilog und -fortsetzung&lt;br /&gt;
|-&lt;br /&gt;
| Campaign Maintenance&lt;br /&gt;
| Betreuung&lt;br /&gt;
|-&lt;br /&gt;
| Co-author&lt;br /&gt;
| Mitautor&lt;br /&gt;
|-&lt;br /&gt;
| Code &lt;br /&gt;
| Programmierung / Kodierung&lt;br /&gt;
|-&lt;br /&gt;
| Completion, Porting and Maintenance&lt;br /&gt;
| Fertigstellung, Portierung und Betreuung&lt;br /&gt;
|-&lt;br /&gt;
| Conception and Original&lt;br /&gt;
| Design Konzeption&lt;br /&gt;
|-&lt;br /&gt;
| Contributions Images&lt;br /&gt;
| Beiträge Grafiken&lt;br /&gt;
|-&lt;br /&gt;
| Contributors&lt;br /&gt;
| Mitwirkende&lt;br /&gt;
|-&lt;br /&gt;
| Current Maintainer&lt;br /&gt;
| Betreuung&lt;br /&gt;
|-&lt;br /&gt;
| Custom AI Development&lt;br /&gt;
| Anpassung und Entwicklung KI&lt;br /&gt;
|-&lt;br /&gt;
| Forum Support and Feedback&lt;br /&gt;
| Support und Rückmeldung aus dem Forum&lt;br /&gt;
|-&lt;br /&gt;
| Miscellaneous&lt;br /&gt;
| Verschiedenes&lt;br /&gt;
|-&lt;br /&gt;
| Music Development&lt;br /&gt;
| Musikkomposition&lt;br /&gt;
|-&lt;br /&gt;
| Porting&lt;br /&gt;
| Anpassung an aktuelle BfW-Versionen / Portierung &lt;br /&gt;
|-&lt;br /&gt;
| Prose and Grammatical Assistance&lt;br /&gt;
| Prosatext und Sprachhilfe&lt;br /&gt;
|-&lt;br /&gt;
| Proofreading&lt;br /&gt;
| Korrekturlesen&lt;br /&gt;
|-&lt;br /&gt;
| Sprites and Portraits&lt;br /&gt;
| Grafikdateien und Portraits&lt;br /&gt;
|-&lt;br /&gt;
| Story Art&lt;br /&gt;
| Handlungsillustrierung&lt;br /&gt;
|-&lt;br /&gt;
| Story Development / Corrections&lt;br /&gt;
| Handlungsausarbeitung&lt;br /&gt;
|-&lt;br /&gt;
| Technical Adviser&lt;br /&gt;
| Technischer Berater&lt;br /&gt;
|-&lt;br /&gt;
| (Gameplay) Testing  / Test Beta-Version&lt;br /&gt;
| Testspieler&lt;br /&gt;
|-&lt;br /&gt;
| Text Revision&lt;br /&gt;
| Textrevision&lt;br /&gt;
|-&lt;br /&gt;
| Translators / Translations&lt;br /&gt;
| Übersetzungen&lt;br /&gt;
|-&lt;br /&gt;
| Translation Assistance &lt;br /&gt;
| Übersetzungshilfe&lt;br /&gt;
|-&lt;br /&gt;
| Unit Sprites, Halo &amp;amp; Animation Art&lt;br /&gt;
| Grafikdateien, Lichteffekte und Animationen&lt;br /&gt;
|-&lt;br /&gt;
| WML / Code Contributors&lt;br /&gt;
| WML Code / Code-Beiträge&lt;br /&gt;
|-&lt;br /&gt;
| WML Assistance&lt;br /&gt;
| WML-Entwicklung&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Verschiedenes ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | (whispered), (whispers)&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | (geflüstert), (flüstert)&lt;br /&gt;
|-&lt;br /&gt;
| BW (Before Wesnoth)&lt;br /&gt;
| im Jahr x vor Wesnoth&lt;br /&gt;
|-&lt;br /&gt;
| YW (Years Wesnoth)&lt;br /&gt;
| im Jahre x Wesnoths (JW)&lt;br /&gt;
|-&lt;br /&gt;
| Lord / Lady&lt;br /&gt;
| Ehrenanrede für Titelträger des Hochadels:&lt;br /&gt;
Herr/Frau + Titel (Graf/Gräfin, Herzog, Baron(in) ...)&lt;br /&gt;
u. U. auch: Gebieter(in), Herrscher(in), Landes- / Stadtherr(in)&lt;br /&gt;
|-&lt;br /&gt;
| mylord, my lord, milord&lt;br /&gt;
| (gnädiger) Herr, mein Gebieter&lt;br /&gt;
|-&lt;br /&gt;
| mylady, my lady, dear lady, milady&lt;br /&gt;
| gnädige Dame, meine Herrin&lt;br /&gt;
|-&lt;br /&gt;
| Minister&lt;br /&gt;
| (Stadt)Ratsmitglied, Hofrat&lt;br /&gt;
|-&lt;br /&gt;
| AI (Artificial Intelligence)&lt;br /&gt;
| KI (Künstliche Intelligenz), computergesteuerte Akteure&lt;br /&gt;
|-&lt;br /&gt;
| AMLA (After Maximum Level Advancement)&lt;br /&gt;
| AMLA (Sonderbonus statt Stufenaufstieg)&lt;br /&gt;
|-&lt;br /&gt;
| campaign&lt;br /&gt;
| Kampagne&lt;br /&gt;
|-&lt;br /&gt;
| cutscene&lt;br /&gt;
| Zwischensequenz&lt;br /&gt;
|-&lt;br /&gt;
| era&lt;br /&gt;
| Epoche&lt;br /&gt;
|-&lt;br /&gt;
| faction&lt;br /&gt;
| Fraktion&lt;br /&gt;
|-&lt;br /&gt;
| level&lt;br /&gt;
| Spielabschnitt, Stufe&lt;br /&gt;
|-&lt;br /&gt;
| mission&lt;br /&gt;
| Mission, Aufgabe&lt;br /&gt;
|-&lt;br /&gt;
| MP (Multiplayer) mode&lt;br /&gt;
| Mehrspieler- / Koop-Modus&lt;br /&gt;
|-&lt;br /&gt;
| Multiplayerlobby&lt;br /&gt;
| Mehrspielerlobby&lt;br /&gt;
|-&lt;br /&gt;
| NPC (non-player character)&lt;br /&gt;
| Nicht-Spieler-Charakter (NSC), computergesteuerte Einheit&lt;br /&gt;
|-&lt;br /&gt;
| quest&lt;br /&gt;
| Auftrag, Suche, Jagd, Herausforderung&lt;br /&gt;
|-&lt;br /&gt;
| scenario&lt;br /&gt;
| Szenarium, Szenario, Partie, (Episode, Teil)&lt;br /&gt;
|-&lt;br /&gt;
| SP (single-player) mode&lt;br /&gt;
| Einzelspieler- / Solo-Modus&lt;br /&gt;
|-&lt;br /&gt;
| side&lt;br /&gt;
| Partei&lt;br /&gt;
|-&lt;br /&gt;
| team&lt;br /&gt;
| Allianz (Bei »Team« wäre nicht eindeutig ob Partei/Allianz)&lt;br /&gt;
|-&lt;br /&gt;
| turn&lt;br /&gt;
| Runde&lt;br /&gt;
|-&lt;br /&gt;
| Whiteboard&lt;br /&gt;
| Planungsmodus&lt;br /&gt;
|-&lt;br /&gt;
| WML (Wesnoth Markup Language)&lt;br /&gt;
| WML (Wesnoth Auszeichnungssprache)&lt;br /&gt;
|-&lt;br /&gt;
| ZoC / Zone of Control&lt;br /&gt;
| Kontrollzone (KonZ), Sicherheitszone&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== AddOns (inoffizielle Erweiterungen) ==&lt;br /&gt;
&lt;br /&gt;
Der folgende Bereich zeigt gängige Namen/Begriffe aus Übersetzungen von Beiträgen anderer Benutzer (UMC). Damit die gleiche Einheit/Sache möglichst nicht unter verschiedenen Bezeichnungen im Umlauf ist, könnt ihr hier Bezeichnungen veröffentlichen.&lt;br /&gt;
&lt;br /&gt;
=== Einheiten ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | Abomination (LotI L4 Ghul)&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | Widerling&lt;br /&gt;
|-&lt;br /&gt;
| Bison&lt;br /&gt;
| Wisent (NF)&lt;br /&gt;
|-&lt;br /&gt;
| Mosquito&lt;br /&gt;
| Stechmücke (S)&lt;br /&gt;
|-&lt;br /&gt;
| Saurian Haruspex (RotW)&lt;br /&gt;
| Saurianischer Opferpriester&lt;br /&gt;
|-&lt;br /&gt;
| Shark (BW)&lt;br /&gt;
| Hai&lt;br /&gt;
|-&lt;br /&gt;
| Vampire&lt;br /&gt;
| Vampir&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Rassen / Ethnie / Fraktionen ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | Animal&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | Getier&lt;br /&gt;
|-&lt;br /&gt;
| Aquatics (BW)&lt;br /&gt;
| Wassertiere&lt;br /&gt;
|-&lt;br /&gt;
| Carapaces (BW)&lt;br /&gt;
| Panzertiere&lt;br /&gt;
|-&lt;br /&gt;
| Dark Elves&lt;br /&gt;
| Dunkelelfen / Dunkle Elfen&lt;br /&gt;
|-&lt;br /&gt;
| Elementals&lt;br /&gt;
| Elementargeister / Urgeschöpfe (FoaP)&lt;br /&gt;
|-&lt;br /&gt;
| Faerie&lt;br /&gt;
| Feenwesen&lt;br /&gt;
|-&lt;br /&gt;
| Northern Barbarians&lt;br /&gt;
| Nordbarbaren&lt;br /&gt;
|-&lt;br /&gt;
| Ungulate (FoaP)&lt;br /&gt;
| Huftiere&lt;br /&gt;
|-&lt;br /&gt;
| Steelhive Robots&lt;br /&gt;
| Geschmiedete (LotI)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Geographie ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | Black Isle  (Far Sea, TRs)&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | Schwarze Insel (Fernes Meer)&lt;br /&gt;
|-&lt;br /&gt;
|Oxbow Swamp (RotW)&lt;br /&gt;
|Sumpf der stillen Wasser&lt;br /&gt;
|-&lt;br /&gt;
| Pogo Bog (S)&lt;br /&gt;
| Pogo Sumpf &lt;br /&gt;
|-&lt;br /&gt;
| Xaffrasz (S - Saurian city)&lt;br /&gt;
| Xaffrasz&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Waffen ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | crystal fire (BW)&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | Kristallfeuer (BW)&lt;br /&gt;
|-&lt;br /&gt;
| explosion (S)&lt;br /&gt;
| Explosion&lt;br /&gt;
|-&lt;br /&gt;
| horns (FoaP)&lt;br /&gt;
| Hörner&lt;br /&gt;
|-&lt;br /&gt;
| quarterstaff&lt;br /&gt;
| Kampfstab&lt;br /&gt;
|-&lt;br /&gt;
| shield&lt;br /&gt;
| Schild&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Waffenfähigkeiten ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | petrifies&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | Versteinerung&lt;br /&gt;
|}&lt;br /&gt;
=== Gegenstände ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | armor&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | Rüstung&lt;br /&gt;
|-&lt;br /&gt;
| altar&lt;br /&gt;
| Opfertisch&lt;br /&gt;
|-&lt;br /&gt;
| caravan&lt;br /&gt;
| Planwagen&lt;br /&gt;
|-&lt;br /&gt;
| storm orb (BW)&lt;br /&gt;
| Sturmkugel&lt;br /&gt;
|}&lt;br /&gt;
=== Fertigkeiten ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | darkens&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | Verdunkeln&lt;br /&gt;
|-&lt;br /&gt;
| invisible&lt;br /&gt;
| Unsichtbar&lt;br /&gt;
|-&lt;br /&gt;
| penetrate&lt;br /&gt;
| Unterwandern&lt;br /&gt;
|}&lt;br /&gt;
=== Charakteristiken ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | horrid&lt;br /&gt;
| style=&amp;quot;width: 300px;&amp;quot; | Grauenerregend&lt;br /&gt;
|-&lt;br /&gt;
| loot (S)&lt;br /&gt;
| Stehlen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
&lt;br /&gt;
* [[GermanTranslation|Hauptseite für deutsche Übersetzung]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Translations]]&lt;/div&gt;</summary>
		<author><name>Octalot</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=GettextForTranslators&amp;diff=74874</id>
		<title>GettextForTranslators</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=GettextForTranslators&amp;diff=74874"/>
		<updated>2026-02-28T13:11:54Z</updated>

		<summary type="html">&lt;p&gt;Octalot: /* Textdomains and getting the files to translate */ Use wesnoth-tsg instead of wesnoth-httt as an example&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==  Gettext for translators  ==&lt;br /&gt;
&lt;br /&gt;
=== For the engine and mainline campaigns ===&lt;br /&gt;
&lt;br /&gt;
The target audience of this page is anyone who wants to help with a language that's already in the list on [[WesnothTranslations]]. The files for these languages have already been set up, someone is already the maintainer, and the pages linked from that page say where to go and how to introduce yourself to the team. The effort is split with separate teams for each language, and each team can have its own working style.&lt;br /&gt;
&lt;br /&gt;
Because each team can work in different ways, please do not submit translations as pull requests on Github. While that seems like a good idea, it causes potential complications, so we ask that everyone talks to their language's maintainer and submits changes in the way that the maintainer decides to use.&lt;br /&gt;
&lt;br /&gt;
If you're starting a completely new translation, or taking over as the maintainer of a translation, then the next place to read would be the [[WesnothTranslationsHowTo]] page.&lt;br /&gt;
&lt;br /&gt;
=== For add-ons ===&lt;br /&gt;
&lt;br /&gt;
The target audience is anyone who wants to help translate an add-on, assuming the add-on's maintainer has already set it up for translation. Translations are shipped with the add-on, so it's up to the maintainer to choose how to receive the files and organise the workflow.&lt;br /&gt;
&lt;br /&gt;
To translate an add-on, skip to the [[#Files_for_add-ons|Files for add-ons]] section.&lt;br /&gt;
&lt;br /&gt;
If you are the maintainer of the add-on, the instructions for setting up the translation are on [[GettextForWesnothDevelopers]].&lt;br /&gt;
&lt;br /&gt;
== Textdomains and getting the files to translate ==&lt;br /&gt;
&lt;br /&gt;
The progress for each language is shown on https://www.wesnoth.org/gettext/ . Click on your language, and you'll see a breakdown into sections ''(textdomains)'', such as&lt;br /&gt;
* wesnoth&lt;br /&gt;
* wesnoth-editor&lt;br /&gt;
* wesnoth-help&lt;br /&gt;
* wesnoth-units&lt;br /&gt;
* wesnoth-lib (contains strings shared by game and editor)&lt;br /&gt;
* wesnoth-tsg (The South Guard campaign)&lt;br /&gt;
* wesnoth-utbs (the Under the Burning Suns campaign)&lt;br /&gt;
* etc&lt;br /&gt;
&lt;br /&gt;
Each has a separate file with a .po extension. For example, the Swedish translation has abbreviation ''sv'', and its translation of the editor's strings is in ''wesnoth-editor/sv.po''. The page on https://www.wesnoth.org/gettext/?view=langs&amp;amp;version=branch&amp;amp;lang=sv links to the current version in the main Git repository.&lt;br /&gt;
&lt;br /&gt;
Although the .po files contain text, please send the complete files as email attachments (or whichever method your team uses), rather than cutting and pasting lines from the file into an email. The translated strings are&lt;br /&gt;
very sensitive to formatting and whitespace changes.&lt;br /&gt;
&lt;br /&gt;
=== Files when running the game ===&lt;br /&gt;
&lt;br /&gt;
When the game runs it will look for an .mo file, for example ''translations/sv/LC_MESSAGES/wesnoth-editor.mo''. If you want to test your text in-game and you're happy to modify your installation:&lt;br /&gt;
&lt;br /&gt;
* Some .po editors can automatically generate .mo files.&lt;br /&gt;
* Deleting the .mo file will make the game look for ''translations/wesnoth-editor/sv.po'' instead.&lt;br /&gt;
&lt;br /&gt;
However you can also send your untested .po file to the maintainer and they should check that it looks correct in-game.&lt;br /&gt;
&lt;br /&gt;
=== Files for add-ons ===&lt;br /&gt;
&lt;br /&gt;
This assumes the add-on has .po files rather than .mo files. The engine supports both, but only .po are editable. For example, an add-on called Son of Haldric that has a Swedish translation would likely store it in:&lt;br /&gt;
&lt;br /&gt;
* ''data/add-ons/Son_of_Haldric/translations/wesnoth-Son_of_Haldric/sv.po'' .&lt;br /&gt;
&lt;br /&gt;
That comes from:&lt;br /&gt;
&lt;br /&gt;
* ''data/add-ons/Son_of_Haldric'' is where all files from the add-on are stored&lt;br /&gt;
* ''translations/wesnoth-Son_of_Haldric'' is configured by the maintainer&lt;br /&gt;
* ''sv'' is the language code for Swedish. The codes for each language are given in the big table on [https://www.wesnoth.org/gettext/ https://www.wesnoth.org/gettext/] .&lt;br /&gt;
&lt;br /&gt;
If it's been set up for translation but hasn't yet been translated into Swedish, it may instead have a file called ''wesnoth-Son_of_Haldric.pot''. This is a template which you can copy to &amp;quot;sv.po&amp;quot;, however first try opening the .pot file directly in your [[#Tools|translation tool]], as the it will likely prompt you to create a translation from the template.&lt;br /&gt;
&lt;br /&gt;
After editing the file, either refresh the cache (press F5 on the title screen) or restart Wesnoth to see the changes.&lt;br /&gt;
&lt;br /&gt;
Warning: files in the add-on directory will be overwritten or deleted if it's updated using the in-game Add-on Manager, so keep backups of files in a separate directory.&lt;br /&gt;
&lt;br /&gt;
== How to translate ==&lt;br /&gt;
&lt;br /&gt;
Now that you have the .po file to edit, it can be worked on using any of the programs listed in the [[#Tools|Tools section]]. The general preference in Wesnoth seems to be towards Poedit, but they all work on the same .po file format.&lt;br /&gt;
&lt;br /&gt;
The general concept is that the GUI will show the strings in English, along with a text-box to add the translation.&lt;br /&gt;
&lt;br /&gt;
=== Hints ===&lt;br /&gt;
&lt;br /&gt;
In addition to the English text, most strings have some additional information which in Poedit will be shown in the bottom-right of the screen. For example, the tutorial's &amp;quot;... this quintain!&amp;quot; has &amp;quot;[message]: speaker=Delfador&amp;quot;, meaning that it's [[InterfaceActionsWML#.5Bmessage.5D|said]] by the unit with id &amp;quot;Delfador&amp;quot;. Sometimes the hint is less obvious, often lines will be &amp;quot;[message]: speaker=unit&amp;quot;, normally meaning the unit whose move, attack, or death has triggered an event.&lt;br /&gt;
&lt;br /&gt;
Some strings will have additional hints, such as &amp;quot;Addressing Konrad&amp;quot; or &amp;quot;Addressing Li'sar&amp;quot;. The level of detail varies a lot between campaigns, please don't be afraid to point out when something needs to be improved.&lt;br /&gt;
&lt;br /&gt;
The .po files also say which source file the string came from, in Poedit 3.4 this is found in a right-click menu (right-click on a string in the top-left pane of the GUI).&lt;br /&gt;
&lt;br /&gt;
=== Carets ===&lt;br /&gt;
&lt;br /&gt;
There are ambiguous strings which should be translated in a different way depending on where they appear. For example, we have &amp;quot;General&amp;quot; in the preferences as &amp;quot;General preferences&amp;quot; and we can also have &amp;quot;a General&amp;quot;. These strings can have different translations for a given language, so we use &amp;quot;context&amp;quot; to solve this. The prefix only tries to give a hint about the string, and should be not translated, for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=po&amp;gt;&lt;br /&gt;
msgid &amp;quot;Prefs section^General&amp;quot;&lt;br /&gt;
msgstr &amp;quot;General&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As another example, these lines in the tutorial both have the hint &amp;quot;[message]: speaker=student&amp;quot;; they're spoken by Konrad and Li'sar respectively:&lt;br /&gt;
* &amp;quot;A quintain? You want me to fight a dummy?&amp;quot;&lt;br /&gt;
* &amp;quot;female^A quintain? You want me to fight a dummy?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
When an English string has a caret (the ^ symbol) in it, then everything before the first caret is removed before showing it to the player. In the translated strings, leave out everything before the caret.&lt;br /&gt;
&lt;br /&gt;
These caret hints are very commonly used in Wesnoth for strings where the translation may depend on the gender of the speaker, or the person spoken to. They're also used for strings such as &amp;quot;Prefs section^General&amp;quot;, where the string is the label on the &amp;quot;general preferences&amp;quot; tab, not a military rank.&lt;br /&gt;
&lt;br /&gt;
If you forget to strip out the caret hint, it will be displayed to the user unless the entire string is identical to the source text. This means that it should be stripped out even if the text is otherwise identical, to avoid breaking it if it's later determined that the text needs to be changed. For example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=po&amp;gt;&lt;br /&gt;
# wrong but seems to work (shows as &amp;quot;Root&amp;quot;)&lt;br /&gt;
msgid &amp;quot;filesystem_path_system^Root&amp;quot;&lt;br /&gt;
msgstr &amp;quot;filesystem_path_system^Root&amp;quot;&lt;br /&gt;
# wrong and shows as &amp;quot;filesystem_path_system^Wurzel&amp;quot;&lt;br /&gt;
msgid &amp;quot;filesystem_path_system^Root&amp;quot;&lt;br /&gt;
msgstr &amp;quot;filesystem_path_system^Wurzel&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Warnings ===&lt;br /&gt;
&lt;br /&gt;
Some editors can automatically detect inconsistencies between the English and the translated text, for example if the original ends with a full-stop and the translation ends with an exclamation mark. Poedit defaults to showing these above even the untranslated strings, but these can be false-positives - generally someone's already looked at these and decided that the translated text is better as-is.&lt;br /&gt;
&lt;br /&gt;
=== Fuzzy strings ===&lt;br /&gt;
&lt;br /&gt;
One of the downsides of Gettext is that spelling and grammar corrections in the English text break the link between the original and the translated text. The tools that generate .po files try to recover from this by using the old translation for the new English text, and marking the string as ''fuzzy''; in Poedit these are sorted below the completely untranslated strings, and shown with the &amp;quot;Needs Work&amp;quot; button lit along with a note about what the previous English text was.&lt;br /&gt;
&lt;br /&gt;
Be wary, this mechanism can also generate incorrect suggestions. For example it may decide that &amp;quot;Landar left $number troops to guard the council&amp;quot; is a spelling correction of &amp;quot;Kalenz left $number troops to guard the council&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Parts to leave untranslated ==&lt;br /&gt;
&lt;br /&gt;
Some translatable strings mix text to be translated with placeholders that are handled by the engine before displaying the text to the player. The text of the placeholder needs to be left untranslated.&lt;br /&gt;
&lt;br /&gt;
=== Dollar signs ===&lt;br /&gt;
&lt;br /&gt;
Most placeholders start with a dollar sign (&amp;lt;code&amp;gt;$&amp;lt;/code&amp;gt;), for example, &amp;lt;code&amp;gt;$number&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;$gold_amount&amp;lt;/code&amp;gt;. The details are in [[VariablesWML#Variable Substitution|VariablesWML]], but for translation the general rules are:&lt;br /&gt;
&lt;br /&gt;
Characters that appear in placeholders are letters, numbers, square brackets, underscores, full stops and question marks. Square brackets always appear in balanced pairs, and often enclose a secondary (nested) placeholder.&lt;br /&gt;
&lt;br /&gt;
* After a dollar sign, every character in the list above is part of the placeholder.&lt;br /&gt;
* A space ends the placeholder, and the space is also displayed to the player.&lt;br /&gt;
* A vertical bar (&amp;lt;code&amp;gt;|&amp;lt;/code&amp;gt;) ends the placeholder, and the vertical bar isn't displayed to the player.&lt;br /&gt;
* If you need to put a full stop or question mark immediately after a placeholder that doesn't end with a vertical bar, add a vertical bar to separate them. Although it's not ''always'' necessary, it ''never'' hurts to add the vertical bar to be on the safe side.&lt;br /&gt;
* A dollar sign at the end of the string, or directly followed by a vertical bar (&amp;lt;code&amp;gt;$|&amp;lt;/code&amp;gt;), is displayed as a dollar sign.&lt;br /&gt;
* Obscure cases should have a hint about the string.&lt;br /&gt;
&lt;br /&gt;
=== Markup ===&lt;br /&gt;
&lt;br /&gt;
Some strings contain formatting markup. This comes in two styles. The most common is [[Pango formatting|Pango markup]], which is an HTML-like formatting language. The other is the custom help page markup, which looks superficially similar but is rather different, and is documented here.&lt;br /&gt;
&lt;br /&gt;
Like HTML, help markup consists of tags enclosed in angle brackets (eg &amp;lt;code&amp;gt;&amp;lt;italic&amp;gt;&amp;lt;/code&amp;gt;), with a slash added to the closing tag. The difference lies in what comes between the tags, which takes a key=value format where the value is usually enclosed in single quotes. There can be multiple key=value pairs, separated by spaces. Generally, all of that should be left untouched, with the exception of the &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt; key. If you see something like &amp;lt;code&amp;gt;&amp;lt;italic&amp;gt;text='some text'&amp;lt;/italic&amp;gt;&amp;lt;/code&amp;gt;, the only part that should be translated is &amp;quot;some text&amp;quot;. Or if you see &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;ref&amp;gt;dst='movement' text='zones of control'&amp;lt;/ref&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, then only &amp;quot;zones of control&amp;quot; should be translated, and the rest should be left untouched.&lt;br /&gt;
&lt;br /&gt;
If you need to include a single quote within &amp;lt;code&amp;gt;text='...'&amp;lt;/code&amp;gt;, you can add a backslash before it. However, most of the time it's preferred to use [[Typography_Style_Guide#Character_Usage_Summary|typographic punctuation]] instead.&lt;br /&gt;
&lt;br /&gt;
==  FAQ  ==&lt;br /&gt;
* '''What are &amp;quot;Plural-forms&amp;quot;?'''&lt;br /&gt;
** Some languages have different word forms for different numbers of things (for example in English we have &amp;quot;1 thing&amp;quot; but &amp;quot;2 thing'''s'''&amp;quot;). The rules are different for different languages. You can find them [http://translate.sourceforge.net/wiki/l10n/pluralforms here].&lt;br /&gt;
* '''Who can I ask for further information?'''&lt;br /&gt;
** You can ask in [[Support|Discord or IRC]]. Ping Ivanovic in Discord's #development or IRC's #wesnoth-dev channel. If you don't like IRC, send a mail to crazy-ivanovic AT gmx DOT net, or pm him (ivanovic) at the forum.&lt;br /&gt;
* '''Why is the diff from the previous version so huge? I have only made a small change to the .po file with poedit.'''&lt;br /&gt;
** When saving a .po file, poedit unwraps all strings. Usually, all .po files are wrapped at 80 characters, so if you want smaller diffs and less merge conflicts, you can execute the following commands each time after editing with poedit:&lt;br /&gt;
&lt;br /&gt;
   msgattrib file.po &amp;gt; file.po1&lt;br /&gt;
   mv file.po1 file.po&lt;br /&gt;
&lt;br /&gt;
==  Tools  ==&lt;br /&gt;
&lt;br /&gt;
There are several tools to work with .po files:&lt;br /&gt;
* [https://pofile.net/free-po-editor Free PO editor] (Web based)&lt;br /&gt;
* [http://userbase.kde.org/Lokalize Lokalize] (Unix KDE) (Formerly known as [https://directory.fsf.org/wiki/KBabel KBabel])&lt;br /&gt;
* [https://kate-editor.org/ Kate] (Unix KDE)&lt;br /&gt;
* [http://wiki.gnome.org/Apps/Gtranslator GTranslator] (Unix Gnome)&lt;br /&gt;
* [http://virtaal.translatehouse.org Virtaal] (Multiplatform)&lt;br /&gt;
* [http://www.poedit.net/ poEdit] (Multiplatform)&lt;br /&gt;
* [http://www.gnu.org/software/emacs/emacs.html Emacs with po-mode] (Multiplatform)&lt;br /&gt;
* [http://www.vim.org/ Vim] with [http://www.vim.org/scripts/script.php?script_id=695 PO plug-in] (Multiplatform)&lt;br /&gt;
* [https://www.geany.org/ Geany] with [https://plugins.geany.org/pohelper.html PoHelper plug-in] (GTK3 / Multiplatform)&lt;br /&gt;
* [https://pypi.org/project/translate-toolkit/ Translate toolkit] (Python)&lt;br /&gt;
* [https://pootle.translatehouse.org/ Pootle] (Web-based)&lt;br /&gt;
* [https://transdict.com/ TransDict] (Web-based)&lt;br /&gt;
* [https://docs.translatehouse.org/projects/localization-guide/en/latest/guide/tools/list.html Translatehouse web page with a list of more tools]&lt;br /&gt;
&lt;br /&gt;
Of course, you can edit po files with any UTF-8 capable text editor, but the tools listed above have great advantages over any text editor regarding .po translation, like going to next fuzzy/untranslated string, searching only in specific fields (msgid, msgstr, comment), ...&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[WesnothTranslations]]&lt;br /&gt;
* [[WesnothTranslationsHowTo]]&lt;br /&gt;
* [[GettextForWesnothDevelopers]]&lt;br /&gt;
* [[TranslatorShellscript]]&lt;br /&gt;
* [http://www.wesnoth.org/gettext/ Translation statistics]&lt;br /&gt;
&lt;br /&gt;
[[Category:Translations]]&lt;/div&gt;</summary>
		<author><name>Octalot</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=GUIWidgetInstanceWML&amp;diff=74829</id>
		<title>GUIWidgetInstanceWML</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=GUIWidgetInstanceWML&amp;diff=74829"/>
		<updated>2026-02-15T13:08:08Z</updated>

		<summary type="html">&lt;p&gt;Octalot: /* Tree view */ document has_minimum&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Widget instance ==&lt;br /&gt;
Inside a grid (which is inside all container widgets) a widget is&lt;br /&gt;
instantiated. With this instantiation some more variables of a widget can&lt;br /&gt;
be tuned. This page will describe what can be tuned.&lt;br /&gt;
&lt;br /&gt;
== Widget ==&lt;br /&gt;
All widgets placed in the cell have some values in common:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!key&lt;br /&gt;
!type&lt;br /&gt;
!default&lt;br /&gt;
!description&lt;br /&gt;
|-&lt;br /&gt;
| id&lt;br /&gt;
| [[GUIVariable#string|string]]&lt;br /&gt;
| &amp;quot;&amp;quot;&lt;br /&gt;
| This value is used for the engine to identify 'special' items. This means that for example a text_box can get the proper initial value. This value should be unique or empty. Those special values are documented at the window definition that uses them. NOTE items starting with an underscore are used for composed widgets and these should be unique per composed widget.&lt;br /&gt;
|-&lt;br /&gt;
| definition&lt;br /&gt;
| [[GUIVariable#string|string]]&lt;br /&gt;
| &amp;quot;default&amp;quot;&lt;br /&gt;
| The id of the widget definition to use. This way it's possible to select a specific version of the widget e.g. a title label when the label is used as title.&lt;br /&gt;
|-&lt;br /&gt;
| linked_group&lt;br /&gt;
| [[GUIVariable#string|string]]&lt;br /&gt;
| &amp;quot;&amp;quot;&lt;br /&gt;
| The linked group the control belongs to.&lt;br /&gt;
|-&lt;br /&gt;
| label&lt;br /&gt;
| [[GUIVariable#t_string|t_string]]&lt;br /&gt;
| &amp;quot;&amp;quot;&lt;br /&gt;
| Most widgets have some text associated with them, this field contain the value of that text. Some widgets use this value for other purposes, this is documented at the widget. E.g. an image uses the filename in this field.&lt;br /&gt;
|-&lt;br /&gt;
| use_markup&lt;br /&gt;
| | [[GUIVariable#bool|bool]]&lt;br /&gt;
| false&lt;br /&gt;
| Whether [https://docs.gtk.org/Pango/pango_markup.html Pango Markup] could be used to format the `label` of this widget (bold, italic, font color, alpha etc.)&lt;br /&gt;
|-&lt;br /&gt;
| tooltip&lt;br /&gt;
| [[GUIVariable#t_string|t_string]]&lt;br /&gt;
| &amp;quot;&amp;quot;&lt;br /&gt;
| If you hover over a widget a while (the time it takes can differ per widget) a short help can show up.This defines the text of that message. This field may not be empty when 'help' is set.&lt;br /&gt;
|-&lt;br /&gt;
| help&lt;br /&gt;
| [[GUIVariable#t_string|t_string]]&lt;br /&gt;
| &amp;quot;&amp;quot;&lt;br /&gt;
| If you hover over a widget and press F10 (or the key the user defined for the help tip) a help message can show up. This help message might be the same as the tooltip but in general (if used) this message should show more help. This defines the text of that message.&lt;br /&gt;
|-&lt;br /&gt;
| use_tooltip_on_label_overflow&lt;br /&gt;
| [[GUIVariable#bool|bool]]&lt;br /&gt;
| true&lt;br /&gt;
| If the text on the label is truncated and the tooltip is empty the label can be used for the tooltip. If this variable is set to true this will happen.&lt;br /&gt;
|-&lt;br /&gt;
| debug_border_mode&lt;br /&gt;
| [[GUIVariable#unsigned|unsigned]]&lt;br /&gt;
| 0&lt;br /&gt;
| The mode for showing the debug border. This border shows the area reserved for a widget. This function is only meant for debugging and might not be available in all Wesnoth binaries. Available modes: &lt;br /&gt;
* '''0:''' no border. &lt;br /&gt;
* '''1:''' 1 pixel border. &lt;br /&gt;
* '''2:''' floodfill the widget area.&lt;br /&gt;
|-&lt;br /&gt;
| debug_border_color&lt;br /&gt;
| [[GUIVariable#color|color]]&lt;br /&gt;
| &amp;quot;&amp;quot;&lt;br /&gt;
| The color of the debug border.&lt;br /&gt;
|-&lt;br /&gt;
| size_text&lt;br /&gt;
| [[GUIVariable#t_string|t_string]]&lt;br /&gt;
| &amp;quot;&amp;quot;&lt;br /&gt;
| Sets the minimum width of the widget depending on the text in it. (Note not implemented yet.)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Button ==&lt;br /&gt;
A button is a control that can be pushed to start an action or close a dialog.&lt;br /&gt;
&lt;br /&gt;
Instance of a button. When a button has a return value it sets the&lt;br /&gt;
return value for the window. Normally this closes the window and returns&lt;br /&gt;
this value to the caller. The return value can either be defined by the&lt;br /&gt;
user or determined from the id of the button. The return value has a&lt;br /&gt;
higher precedence as the one defined by the id. (Of course it's weird to&lt;br /&gt;
give a button an id and then override its return value.)&lt;br /&gt;
&lt;br /&gt;
When the button doesn't have a standard id, but you still want to use the&lt;br /&gt;
return value of that id, use return_value_id instead. This has a higher&lt;br /&gt;
precedence as return_value.&lt;br /&gt;
&lt;br /&gt;
List with the button specific variables:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!key&lt;br /&gt;
!type&lt;br /&gt;
!default&lt;br /&gt;
!description&lt;br /&gt;
|-&lt;br /&gt;
| return_value_id&lt;br /&gt;
| [[GUIVariable#string|string]]&lt;br /&gt;
| &amp;quot;&amp;quot;&lt;br /&gt;
| The return value id.&lt;br /&gt;
|-&lt;br /&gt;
| return_value&lt;br /&gt;
| [[GUIVariable#int|int]]&lt;br /&gt;
| 0&lt;br /&gt;
| The return value.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Supported values for return_value_id:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!string&lt;br /&gt;
!value&lt;br /&gt;
!description&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;ok&amp;quot;||-1||Equivalent to closing the dialog by pressing the Enter key&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;cancel&amp;quot;||-2||Equivalent to closing the dialog by pressing the Esc key&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;quit&amp;quot;||-2||An alias for cancel&lt;br /&gt;
|-&lt;br /&gt;
|&amp;quot;&amp;quot;||N/A||Clears any previously set return_value_id&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Combobox ==&lt;br /&gt;
{{DevFeature1.19|0}}&lt;br /&gt;
[[File:Combobox.png|frame|right|A Combobox with its list open]]&lt;br /&gt;
A widget with a text box and a dropdown list. Selecting an element from the list sets the value of the text box to that item of the list. The user can also manually enter a value in the text box.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! key !! type !! default !! description&lt;br /&gt;
|-&lt;br /&gt;
| label || [[GUIVariable#string|string]] || &amp;quot;&amp;quot; || The text of the combobox&lt;br /&gt;
|-&lt;br /&gt;
| max_input_length || [[GUIVariable#int|int]] || 0 || Maximum length of text in characters that can be entered into the combobox&lt;br /&gt;
|-&lt;br /&gt;
| hint_text || [[GUIVariable#string|string]] || &amp;quot;&amp;quot; || Text that is shown in the background when there is no input&lt;br /&gt;
|-&lt;br /&gt;
| hint_image || [[GUIVariable#string|string]] || &amp;quot;&amp;quot; || Image that is shown in the background when there is no input&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Subtag [option] ===&lt;br /&gt;
Specifies the initial list of options to be shown in the &amp;lt;code&amp;gt;combobox&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot;&lt;br /&gt;
!key !!type !!default !!description&lt;br /&gt;
|-&lt;br /&gt;
| label || [[GUIVariable#t_string|t_string]] || &amp;quot;&amp;quot; || Name of the option.&lt;br /&gt;
|-&lt;br /&gt;
| tooltip || [[GUIVariable#t_string|t_string]] || &amp;quot;&amp;quot; || Tooltip that is shown when the mouse hovers above this option.&lt;br /&gt;
|-&lt;br /&gt;
| icon || [[GUIVariable#string|string]] || &amp;quot;&amp;quot; || WML path to the icon to be shown alongside the text in this option, if any.&lt;br /&gt;
|-&lt;br /&gt;
| details || [[GUIVariable#t_string|t_string]] || &amp;quot;&amp;quot; || Short description about this option.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Drawing ==&lt;br /&gt;
A drawing is widget with a fixed size and gives access to the canvas of the widget in the window instance. This allows special display only widgets.&lt;br /&gt;
&lt;br /&gt;
If either the width or the height is not zero the drawing functions as a&lt;br /&gt;
fixed size drawing.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!key&lt;br /&gt;
!type&lt;br /&gt;
!default&lt;br /&gt;
!description&lt;br /&gt;
|-&lt;br /&gt;
| width&lt;br /&gt;
| [[GUIVariable#f_unsigned|f_unsigned]]&lt;br /&gt;
| 0&lt;br /&gt;
| The width of the drawing.&lt;br /&gt;
|-&lt;br /&gt;
| height&lt;br /&gt;
| [[GUIVariable#f_unsigned|f_unsigned]]&lt;br /&gt;
| 0&lt;br /&gt;
| The height of the drawing.&lt;br /&gt;
|-&lt;br /&gt;
| draw&lt;br /&gt;
| [[GUIVariable#config|config]]&lt;br /&gt;
| mandatory&lt;br /&gt;
| The config containing the drawing.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The variable available are the same as for the window resolution see&lt;br /&gt;
http://www.wesnoth.org/wiki/GUIToolkitWML#Resolution_2 for the list of&lt;br /&gt;
items.&lt;br /&gt;
&lt;br /&gt;
== Grid Listbox ==&lt;br /&gt;
List with the listbox specific variables:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!ID (return value)&lt;br /&gt;
!Type&lt;br /&gt;
!Mandatory&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| vertical_scrollbar_mode&lt;br /&gt;
| [[GUIToolkitWML#scrollbar_mode|scrollbar_mode]]&lt;br /&gt;
| initial_auto&lt;br /&gt;
| Determines whether or not to show the scrollbar.&lt;br /&gt;
|-&lt;br /&gt;
| horizontal_scrollbar_mode&lt;br /&gt;
| [[GUIToolkitWML#scrollbar_mode|scrollbar_mode]]&lt;br /&gt;
| initial_auto&lt;br /&gt;
| Determines whether or not to show the scrollbar.&lt;br /&gt;
|-&lt;br /&gt;
| header&lt;br /&gt;
| [[GUIToolkitWML#grid|grid]]&lt;br /&gt;
| []&lt;br /&gt;
| Defines the grid for the optional header. (This grid will automatically get the id _header_grid.)&lt;br /&gt;
|-&lt;br /&gt;
| footer&lt;br /&gt;
| [[GUIToolkitWML#grid|grid]]&lt;br /&gt;
| []&lt;br /&gt;
| Defines the grid for the optional footer. (This grid will automatically get the id _footer_grid.)&lt;br /&gt;
|-&lt;br /&gt;
| list_definition&lt;br /&gt;
| [[GUIToolkitWML#section|section]]&lt;br /&gt;
| mandatory&lt;br /&gt;
| This defines how a listbox item looks. It must contain the grid definition for 1 row of the list.&lt;br /&gt;
|-&lt;br /&gt;
| list_data&lt;br /&gt;
| [[GUIToolkitWML#section|section]]&lt;br /&gt;
| []&lt;br /&gt;
| A grid alike section which stores the initial data for the listbox. Every row must have the same number of columns as the 'list_definition'.&lt;br /&gt;
|-&lt;br /&gt;
| has_minimum&lt;br /&gt;
| [[GUIToolkitWML#bool|bool]]&lt;br /&gt;
| true&lt;br /&gt;
| If false, less than one row can be selected.&lt;br /&gt;
|-&lt;br /&gt;
| has_maximum&lt;br /&gt;
| [[GUIToolkitWML#bool|bool]]&lt;br /&gt;
| true&lt;br /&gt;
| If false, more than one row can be selected.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Horizontal listbox ==&lt;br /&gt;
A horizontal listbox is a control that holds several items of the same type.  Normally the items in a listbox are ordered in rows, this version orders them in columns instead.&lt;br /&gt;
&lt;br /&gt;
List with the horizontal listbox specific variables:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!ID (return value)&lt;br /&gt;
!Type&lt;br /&gt;
!Mandatory&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
| vertical_scrollbar_mode&lt;br /&gt;
| [[GUIToolkitWML#scrollbar_mode|scrollbar_mode]]&lt;br /&gt;
| initial_auto&lt;br /&gt;
| Determines whether or not to show the scrollbar.&lt;br /&gt;
|-&lt;br /&gt;
| horizontal_scrollbar_mode&lt;br /&gt;
| [[GUIToolkitWML#scrollbar_mode|scrollbar_mode]]&lt;br /&gt;
| initial_auto&lt;br /&gt;
| Determines whether or not to show the scrollbar.&lt;br /&gt;
|-&lt;br /&gt;
| header&lt;br /&gt;
| [[GUIToolkitWML#grid|grid]]&lt;br /&gt;
| []&lt;br /&gt;
| Defines the grid for the optional header. (This grid will automatically get the id _header_grid.)&lt;br /&gt;
|-&lt;br /&gt;
| footer&lt;br /&gt;
| [[GUIToolkitWML#grid|grid]]&lt;br /&gt;
| []&lt;br /&gt;
| Defines the grid for the optional footer. (This grid will automatically get the id _footer_grid.)&lt;br /&gt;
|-&lt;br /&gt;
| list_definition&lt;br /&gt;
| [[GUIToolkitWML#section|section]]&lt;br /&gt;
| mandatory&lt;br /&gt;
| This defines how a listbox item looks. It must contain the grid definition for 1 row of the list.&lt;br /&gt;
|-&lt;br /&gt;
| list_data&lt;br /&gt;
| [[GUIToolkitWML#section|section]]&lt;br /&gt;
| []&lt;br /&gt;
| A grid alike section which stores the initial data for the listbox. Every row must have the same number of columns as the 'list_definition'.&lt;br /&gt;
|-&lt;br /&gt;
| has_minimum&lt;br /&gt;
| [[GUIToolkitWML#bool|bool]]&lt;br /&gt;
| true&lt;br /&gt;
| If false, less than one row can be selected.&lt;br /&gt;
|-&lt;br /&gt;
| has_maximum&lt;br /&gt;
| [[GUIToolkitWML#bool|bool]]&lt;br /&gt;
| true&lt;br /&gt;
| If false, more than one row can be selected.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In order to force widgets to be the same size inside a horizontal listbox,&lt;br /&gt;
the widgets need to be inside a linked_group.&lt;br /&gt;
&lt;br /&gt;
Inside the list section there are only the following widgets allowed&lt;br /&gt;
* grid (to nest)&lt;br /&gt;
* selectable widgets which are&lt;br /&gt;
** toggle_button&lt;br /&gt;
** toggle_panel&lt;br /&gt;
&lt;br /&gt;
== Image ==&lt;br /&gt;
An image shows a static image whose path is specified by its '''[[GUIWidgetInstanceWML#Widget|label]]''' key. Unlike other widgets, the '''label''' key here is not translatable since it specifies a path. The path is a standard WML path, i.e., &amp;lt;code&amp;gt;label=&amp;quot;units/konrad.png&amp;quot;&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;label=&amp;quot;~add-ons/MyAddon/image/test.png&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
It has no other extra fields.&lt;br /&gt;
&lt;br /&gt;
== Label ==&lt;br /&gt;
A label displays text provided via the '''[[GUIWidgetInstanceWML#Widget|label]]''' key that can be wrapped but no scrollbars are provided. For a version with scrollbars, see the [[GUIWidgetInstanceWML#Scroll_Label|Scroll Label]] widget.&lt;br /&gt;
&lt;br /&gt;
[[File:Title Label.png|frame|right|A Label with definition &amp;quot;title&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
List with the label specific variables:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!key !!type !!default !!description&lt;br /&gt;
|-&lt;br /&gt;
| wrap || [[GUIVariable#bool|bool]] || false || Is wrapping enabled for the label.&lt;br /&gt;
|-&lt;br /&gt;
| characters_per_line || [[GUIVariable#unsigned|unsigned]] || 0 || Sets the maximum number of characters per line. This is only an approximate means of limiting the line's length, since the width of a character differs. E.g. iii is smaller than MMM. When the value is non-zero it also implies '''wrap''' is true. &lt;br /&gt;
When having long strings, wrapping them can increase readability. A rule of thumb is 66 characters per line is considered the optimum for a one column text.&lt;br /&gt;
|-&lt;br /&gt;
| text_alignment || [[GUIVariable#h_align|h_align]] || left || The way the text is aligned inside the canvas.&lt;br /&gt;
|-&lt;br /&gt;
| can_shrink || [[GUIVariable#bool|bool]] || false || Whether the label can shrink past its optimal size.&lt;br /&gt;
|-&lt;br /&gt;
| link_aware || [[GUIVariable#bool|bool]] || false || Whether the label is link aware. This means it is rendered with links highlighted, and responds to click events on those links.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Listbox ==&lt;br /&gt;
A listbox is a control that holds several items of the same type. Normally the items in a listbox are ordered in rows, this version might allow more options for ordering the items in the future.&lt;br /&gt;
&lt;br /&gt;
List with the listbox specific variables:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!key&lt;br /&gt;
!type&lt;br /&gt;
!default&lt;br /&gt;
!description&lt;br /&gt;
|-&lt;br /&gt;
| vertical_scrollbar_mode&lt;br /&gt;
| [[GUIVariable#scrollbar_mode|scrollbar_mode]]&lt;br /&gt;
| initial_auto&lt;br /&gt;
| Determines whether or not to show the scrollbar.&lt;br /&gt;
|-&lt;br /&gt;
| horizontal_scrollbar_mode&lt;br /&gt;
| [[GUIVariable#scrollbar_mode|scrollbar_mode]]&lt;br /&gt;
| initial_auto&lt;br /&gt;
| Determines whether or not to show the scrollbar.&lt;br /&gt;
|-&lt;br /&gt;
| header&lt;br /&gt;
| [[GUIVariable#grid|grid]]&lt;br /&gt;
| []&lt;br /&gt;
| Defines the grid for the optional header. (This grid will automatically get the id _header_grid.)&lt;br /&gt;
|-&lt;br /&gt;
| footer&lt;br /&gt;
| [[GUIVariable#grid|grid]]&lt;br /&gt;
| []&lt;br /&gt;
| Defines the grid for the optional footer. (This grid will automatically get the id _footer_grid.)&lt;br /&gt;
|-&lt;br /&gt;
| list_definition&lt;br /&gt;
| [[GUIVariable#section|section]]&lt;br /&gt;
| mandatory&lt;br /&gt;
| This defines how a listbox item looks. It must contain the grid definition for 1 row of the list.&lt;br /&gt;
|-&lt;br /&gt;
| list_data&lt;br /&gt;
| [[GUIVariable#section|section]]&lt;br /&gt;
| []&lt;br /&gt;
| A grid alike section which stores the initial data for the listbox. Every row must have the same number of columns as the 'list_definition'.&lt;br /&gt;
|-&lt;br /&gt;
| has_minimum&lt;br /&gt;
| [[GUIVariable#bool|bool]]&lt;br /&gt;
| true&lt;br /&gt;
| If false, less than one row can be selected.&lt;br /&gt;
|-&lt;br /&gt;
| has_maximum&lt;br /&gt;
| [[GUIVariable#bool|bool]]&lt;br /&gt;
| true&lt;br /&gt;
| If false, more than one row can be selected.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In order to force widgets to be the same size inside a listbox, the widgets&lt;br /&gt;
need to be inside a linked_group.&lt;br /&gt;
&lt;br /&gt;
Inside the list section there are only the following widgets allowed&lt;br /&gt;
* grid (to nest)&lt;br /&gt;
* selectable widgets which are&lt;br /&gt;
** toggle_button&lt;br /&gt;
** toggle_panel&lt;br /&gt;
&lt;br /&gt;
== Matrix ==&lt;br /&gt;
List with the matrix specific variables:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!key&lt;br /&gt;
!type&lt;br /&gt;
!default&lt;br /&gt;
!description&lt;br /&gt;
|-&lt;br /&gt;
| vertical_scrollbar_mode&lt;br /&gt;
| [[GUIVariable#scrollbar_mode|scrollbar_mode]]&lt;br /&gt;
| initial_auto&lt;br /&gt;
| Determines whether or not to show the scrollbar.&lt;br /&gt;
|-&lt;br /&gt;
| horizontal_scrollbar_mode&lt;br /&gt;
| [[GUIVariable#scrollbar_mode|scrollbar_mode]]&lt;br /&gt;
| initial_auto&lt;br /&gt;
| Determines whether or not to show the scrollbar.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Menu Button ==&lt;br /&gt;
[[File:Menu Button.png|thumb|left|A Menu Button with it's list open.]]&lt;br /&gt;
A button that shows a dropdown list when clicked. The user can select any one of the predefined options.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!key&lt;br /&gt;
!type&lt;br /&gt;
!default&lt;br /&gt;
!description&lt;br /&gt;
|-&lt;br /&gt;
| return_value_id&lt;br /&gt;
| [[GUIVariable#string|string]]&lt;br /&gt;
| &amp;quot;&amp;quot;&lt;br /&gt;
| The return value id.&lt;br /&gt;
|-&lt;br /&gt;
| return_value&lt;br /&gt;
| [[GUIVariable#int|int]]&lt;br /&gt;
| 0&lt;br /&gt;
| The return value.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Subtag [option] ===&lt;br /&gt;
Specifies the initial list of options to be shown in the &amp;lt;code&amp;gt;menu_button&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot;&lt;br /&gt;
!key !!type !!default !!description&lt;br /&gt;
|-&lt;br /&gt;
| label || [[GUIVariable#t_string|t_string]] || &amp;quot;&amp;quot; || Name of the option.&lt;br /&gt;
|-&lt;br /&gt;
| tooltip || [[GUIVariable#t_string|t_string]] || &amp;quot;&amp;quot; || Tooltip that is shown when the mouse hovers above this option.&lt;br /&gt;
|-&lt;br /&gt;
| icon || [[GUIVariable#string|string]] || &amp;quot;&amp;quot; || WML path to the icon to be shown alongside the text in this option, if any.&lt;br /&gt;
|-&lt;br /&gt;
| details || [[GUIVariable#t_string|t_string]] || &amp;quot;&amp;quot; || Short description about this option.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Minimap ==&lt;br /&gt;
A minimap to show the gamemap, this only shows the map and has no interaction options. This version is used for map previews, there will be a another version which allows interaction.&lt;br /&gt;
&lt;br /&gt;
A minimap has no extra fields.&lt;br /&gt;
&lt;br /&gt;
== Multiline Text ==&lt;br /&gt;
{{DevFeature1.17|26}}&lt;br /&gt;
&lt;br /&gt;
Base class for a multiline text area.  Not to be used directly in a GUI, use the [[GUIWidgetInstanceWML#Scroll_Text|scroll_text]] widget instead.&lt;br /&gt;
&lt;br /&gt;
The following variables exist:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!key&lt;br /&gt;
!type&lt;br /&gt;
!default&lt;br /&gt;
!description&lt;br /&gt;
|-&lt;br /&gt;
| label&lt;br /&gt;
| [[GUIVariable#t_string|t_string]]&lt;br /&gt;
| &amp;quot;&amp;quot;&lt;br /&gt;
| The initial text of the text box.&lt;br /&gt;
|-&lt;br /&gt;
| history&lt;br /&gt;
| [[GUIVariable#string|string]]&lt;br /&gt;
| &amp;quot;&amp;quot;&lt;br /&gt;
| The name of the history for the text box. A history saves the data entered in a text box between the games. With the up and down arrow it can be accessed. To create a new history item just add a new unique name for this field and the engine will handle the rest.&lt;br /&gt;
|-&lt;br /&gt;
| editable&lt;br /&gt;
| [[GUIVariable#bool|bool]]&lt;br /&gt;
| &amp;quot;true&amp;quot;&lt;br /&gt;
| If the contents of the text box can be edited.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Multimenu Button ==&lt;br /&gt;
[[File:Multimenu Button.png|thumb|right|A Multimenu Button with its list open]]&lt;br /&gt;
A widget clicking on which shows a list from which one or more options can be selected.&lt;br /&gt;
&lt;br /&gt;
List with the multimenu_button specific variables:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!key !!type !!default !!description&lt;br /&gt;
|-&lt;br /&gt;
| return_value_id || [[GUIVariable#string|string]] || &amp;quot;&amp;quot; || The return value id.&lt;br /&gt;
|-&lt;br /&gt;
| return_value || [[GUIVariable#int|int]] || 0 || The return value.&lt;br /&gt;
|-&lt;br /&gt;
| maximum_shown || [[GUIVariable#int|int]] || -1 || The maximum number of currently selected values to list on the button.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Subtag [option] ===&lt;br /&gt;
Specifies the initial list of options to be shown in the &amp;lt;code&amp;gt;multimenu_button&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot;&lt;br /&gt;
!key !!type !!default !!description&lt;br /&gt;
|-&lt;br /&gt;
| label || [[GUIVariable#t_string|t_string]] || &amp;quot;&amp;quot; || Name of the option.&lt;br /&gt;
|-&lt;br /&gt;
| tooltip || [[GUIVariable#t_string|t_string]] || &amp;quot;&amp;quot; || Tooltip that is shown when the mouse hovers above this option.&lt;br /&gt;
|-&lt;br /&gt;
| checkbox || [[GUIVariable#bool|bool]] || &amp;quot;&amp;quot; || Whether the checkbox alongside this option is selected or not.&lt;br /&gt;
|-&lt;br /&gt;
| details || [[GUIVariable#t_string|t_string]] || &amp;quot;&amp;quot; || Short description about this option.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Multi page ==&lt;br /&gt;
A multi page is a control that contains several 'pages' of which only one is visible. The pages can contain the same widgets containing the same 'kind' of data or look completely different.&lt;br /&gt;
&lt;br /&gt;
List with the multi page specific variables:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!key&lt;br /&gt;
!type&lt;br /&gt;
!default&lt;br /&gt;
!description&lt;br /&gt;
|-&lt;br /&gt;
| page_definition&lt;br /&gt;
| [[GUIVariable#section|section]]&lt;br /&gt;
| mandatory&lt;br /&gt;
| This defines how a multi page item looks. It must contain the grid definition for at least one page.&lt;br /&gt;
|-&lt;br /&gt;
| page_data&lt;br /&gt;
| [[GUIVariable#section|section]]&lt;br /&gt;
| []&lt;br /&gt;
| A grid alike section which stores the initial data for the multi page. Every row must have the same number of columns as the 'page_definition'.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Panel ==&lt;br /&gt;
A panel is an item which can hold other items. The difference between a grid and a panel is that it's possible to define how a panel looks. A grid in an invisible container to just hold the items.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!key&lt;br /&gt;
!type&lt;br /&gt;
!default&lt;br /&gt;
!description&lt;br /&gt;
|-&lt;br /&gt;
| grid&lt;br /&gt;
| [[GUIVariable#grid|grid]]&lt;br /&gt;
| mandatory&lt;br /&gt;
| Defines the grid with the widgets to place on the panel.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Password box ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!key&lt;br /&gt;
!type&lt;br /&gt;
!default&lt;br /&gt;
!description&lt;br /&gt;
|-&lt;br /&gt;
| label&lt;br /&gt;
| [[GUIVariable#t_string|t_string]]&lt;br /&gt;
| &amp;quot;&amp;quot;&lt;br /&gt;
| The initial text of the password box.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Progress bar ==&lt;br /&gt;
A progress bar shows the progress of a certain object.&lt;br /&gt;
&lt;br /&gt;
A progress bar has no extra fields.&lt;br /&gt;
&lt;br /&gt;
== Repeating button ==&lt;br /&gt;
A repeating_button is a control that can be pushed down and repeat a certain action. Once the button is down every x milliseconds it is down a new down event is triggered.&lt;br /&gt;
&lt;br /&gt;
== Rich Label ==&lt;br /&gt;
{{DevFeature1.19|x}}&lt;br /&gt;
&lt;br /&gt;
A label that shows formatted text marked up with [[Help markup]]. It can show embedded images, links and tables inside text.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!key !!type !!default !!description&lt;br /&gt;
|-&lt;br /&gt;
| text_alignment || [[GUIVariable#h_align|h_align]] || left || The way the text is aligned inside the canvas.&lt;br /&gt;
|-&lt;br /&gt;
| padding || [[GUIVariable#int|int]] || 5 || Internal padding, used in various spaces and between different types of elements (for example, between two float image, between a header and following text and so on).&lt;br /&gt;
|-&lt;br /&gt;
| width || [[GUIVariable#f_int|f_int]] || 500 || Width of its internal formatted content. Text will wrap beyond this width.&lt;br /&gt;
|-&lt;br /&gt;
| link_aware || [[GUIVariable#bool|bool]] || false || Whether the label is link aware. This means it is rendered with links highlighted, and responds to click events on those links.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Scroll Label ==&lt;br /&gt;
A scroll label is a label that wraps its text and also has a vertical scrollbar. This way a text can't be too long to be shown for this widget.&lt;br /&gt;
&lt;br /&gt;
List with the scroll label specific variables:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!key&lt;br /&gt;
!type&lt;br /&gt;
!default&lt;br /&gt;
!description&lt;br /&gt;
|-&lt;br /&gt;
| vertical_scrollbar_mode&lt;br /&gt;
| [[GUIVariable#scrollbar_mode|scrollbar_mode]]&lt;br /&gt;
| initial_auto&lt;br /&gt;
| Determines whether or not to show the scrollbar.&lt;br /&gt;
|-&lt;br /&gt;
| horizontal_scrollbar_mode&lt;br /&gt;
| [[GUIVariable#scrollbar_mode|scrollbar_mode]]&lt;br /&gt;
| initial_auto&lt;br /&gt;
| Determines whether or not to show the scrollbar.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Scroll Text ==&lt;br /&gt;
{{DevFeature1.19|x}}&lt;br /&gt;
&lt;br /&gt;
A multiline text area that shows a scrollbar if the text gets too long.&lt;br /&gt;
&lt;br /&gt;
List with the scrollbar container specific variables:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!key&lt;br /&gt;
!type&lt;br /&gt;
!default&lt;br /&gt;
!description&lt;br /&gt;
|-&lt;br /&gt;
| vertical_scrollbar_mode&lt;br /&gt;
| [[GUIVariable#scrollbar_mode|scrollbar_mode]]&lt;br /&gt;
| initial_auto&lt;br /&gt;
| Determines whether or not to show the scrollbar.&lt;br /&gt;
|-&lt;br /&gt;
| horizontal_scrollbar_mode&lt;br /&gt;
| [[GUIVariable#scrollbar_mode|scrollbar_mode]]&lt;br /&gt;
| initial_auto&lt;br /&gt;
| Determines whether or not to show the scrollbar.&lt;br /&gt;
|-&lt;br /&gt;
| editable&lt;br /&gt;
| [[GUIVariable#bool|bool]]&lt;br /&gt;
| &amp;quot;true&amp;quot;&lt;br /&gt;
| If the contents of this scroll_text can be edited.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Scrollbar panel ==&lt;br /&gt;
Instance of a scrollbar_panel.&lt;br /&gt;
&lt;br /&gt;
List with the scrollbar_panel specific variables:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!key&lt;br /&gt;
!type&lt;br /&gt;
!default&lt;br /&gt;
!description&lt;br /&gt;
|-&lt;br /&gt;
| vertical_scrollbar_mode&lt;br /&gt;
| [[GUIVariable#scrollbar_mode|scrollbar_mode]]&lt;br /&gt;
| initial_auto&lt;br /&gt;
| Determines whether or not to show the scrollbar.&lt;br /&gt;
|-&lt;br /&gt;
| horizontal_scrollbar_mode&lt;br /&gt;
| [[GUIVariable#scrollbar_mode|scrollbar_mode]]&lt;br /&gt;
| initial_auto&lt;br /&gt;
| Determines whether or not to show the scrollbar.&lt;br /&gt;
|-&lt;br /&gt;
| definition&lt;br /&gt;
| [[GUIVariable#section|section]]&lt;br /&gt;
| mandatory&lt;br /&gt;
| This defines how a scrollbar_panel item looks. It must contain the grid definition for 1 row of the list.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Slider ==&lt;br /&gt;
&lt;br /&gt;
A slider is a control that can select a value by moving a grip on a groove.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!key&lt;br /&gt;
!type&lt;br /&gt;
!default&lt;br /&gt;
!description&lt;br /&gt;
|-&lt;br /&gt;
| best_slider_length&lt;br /&gt;
| [[GUIVariable#unsigned|unsigned]]&lt;br /&gt;
| 0&lt;br /&gt;
| The best length for the sliding part.&lt;br /&gt;
|-&lt;br /&gt;
| minimum_value&lt;br /&gt;
| [[GUIVariable#int|int]]&lt;br /&gt;
| 0&lt;br /&gt;
| The minimum value the slider can have.&lt;br /&gt;
|-&lt;br /&gt;
| maximum_value&lt;br /&gt;
| [[GUIVariable#int|int]]&lt;br /&gt;
| 0&lt;br /&gt;
| The maximum value the slider can have.&lt;br /&gt;
|-&lt;br /&gt;
| step_size&lt;br /&gt;
| [[GUIVariable#unsigned|unsigned]]&lt;br /&gt;
| 0&lt;br /&gt;
| The number of items the slider's value increases with one step.&lt;br /&gt;
|-&lt;br /&gt;
| value&lt;br /&gt;
| [[GUIVariable#int|int]]&lt;br /&gt;
| 0&lt;br /&gt;
| The value of the slider.&lt;br /&gt;
|-&lt;br /&gt;
| minimum_value_label&lt;br /&gt;
| [[GUIVariable#t_string|t_string]]&lt;br /&gt;
| &amp;quot;&amp;quot;&lt;br /&gt;
| If the minimum value is chosen there might be the need for a special value (eg off). When this key has a value that value will be shown if the minimum is selected.&lt;br /&gt;
|-&lt;br /&gt;
| maximum_value_label&lt;br /&gt;
| [[GUIVariable#t_string|t_string]]&lt;br /&gt;
| &amp;quot;&amp;quot;&lt;br /&gt;
| If the maximum value is chosen there might be the need for a special value (eg unlimited)). When this key has a value that value will be shown if the maximum is selected.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Spinner ==&lt;br /&gt;
{{DevFeature1.17|26}}&lt;br /&gt;
&lt;br /&gt;
[[File:Spinner.png|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
A textbox with two repeating buttons, which allow increasing/decreasing of the numerical value inside the textbox.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!key&lt;br /&gt;
!type&lt;br /&gt;
!default&lt;br /&gt;
!description&lt;br /&gt;
|-&lt;br /&gt;
| wrap&lt;br /&gt;
| [[GUIVariable#bool|bool]]&lt;br /&gt;
| 0&lt;br /&gt;
| Should the contents of the textbox wrap?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Spacer ==&lt;br /&gt;
A spacer is a dummy item to either fill in a widget since no empty items are allowed or to reserve a fixed space.&lt;br /&gt;
&lt;br /&gt;
If either the width or the height is non-zero the spacer functions as a&lt;br /&gt;
fixed size spacer.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!key !!type !!default !!description&lt;br /&gt;
|-&lt;br /&gt;
| width || [[GUIVariable#f_unsigned|f_unsigned]] || 0 || The width of the spacer.&lt;br /&gt;
|-&lt;br /&gt;
| height || [[GUIVariable#f_unsigned|f_unsigned]] || 0 || The height of the spacer.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The variable available are the same as for the window resolution see&lt;br /&gt;
http://www.wesnoth.org/wiki/GUIToolkitWML#Resolution_2 for the list of&lt;br /&gt;
items.&lt;br /&gt;
&lt;br /&gt;
== Tab Container ==&lt;br /&gt;
{{DevFeature1.19|0}}&lt;br /&gt;
&lt;br /&gt;
A container widget that can show its contents separated into various pages, each of which are accessible.&lt;br /&gt;
&lt;br /&gt;
It can contain one or more &amp;lt;code&amp;gt;[tab]&amp;lt;/code&amp;gt; tags inside it, each defining a tab's name, image (if any) and the contents of the tag, specified by the &amp;lt;code&amp;gt;[data]&amp;lt;/code&amp;gt; tag inside the &amp;lt;code&amp;gt;[tab]&amp;lt;/code&amp;gt; tag.&lt;br /&gt;
&lt;br /&gt;
=== Subtag [tab] ===&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot;&lt;br /&gt;
!key !!type !!default !!description&lt;br /&gt;
|-&lt;br /&gt;
| name || [[GUIVariable#t_string|t_string]] || &amp;quot;&amp;quot; || Name of the tab&lt;br /&gt;
|-&lt;br /&gt;
| image || [[GUIVariable#string|string]] || &amp;quot;&amp;quot; || Image for the tab to be shown alongside the name, if any&lt;br /&gt;
|-&lt;br /&gt;
| [data] || [[GUIVariable#grid|grid]] || empty grid || This subtag contains a grid that defines the contents for this tab.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Text box ==&lt;br /&gt;
A single line text entry widget.&lt;br /&gt;
&lt;br /&gt;
[[File:Text Box.png|frame|right|A Text Box]]&lt;br /&gt;
&lt;br /&gt;
{| class = &amp;quot;wikitable&amp;quot;&lt;br /&gt;
!key !!type !!default !!description&lt;br /&gt;
|-&lt;br /&gt;
| label || [[GUIVariable#t_string|t_string]] || &amp;quot;&amp;quot; || The initial text of the text box.&lt;br /&gt;
|-&lt;br /&gt;
| history || [[GUIVariable#string|string]] || &amp;quot;&amp;quot; || The name of the history for the text box. A history saves the data entered in a text box between the games. With the up and down arrow it can be accessed. To create a new history item just add a new unique name for this field and the engine will handle the rest.&lt;br /&gt;
|-&lt;br /&gt;
| max_input_length || [[GUIVariable#int|int]] || 0 || Maximum length of text in characters that can be entered into the combobox&lt;br /&gt;
|-&lt;br /&gt;
| hint_text || [[GUIVariable#string|string]] || &amp;quot;&amp;quot; || Text that is shown in the background when there is no input&lt;br /&gt;
|-&lt;br /&gt;
| hint_image || [[GUIVariable#string|string]] || &amp;quot;&amp;quot; || Image that is shown in the background when there is no input&lt;br /&gt;
|-&lt;br /&gt;
| editable || [[GUIVariable#bool|bool]] || &amp;quot;true&amp;quot; || If the contents of the text box can be edited.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Toggle button ==&lt;br /&gt;
Variables:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!key&lt;br /&gt;
!type&lt;br /&gt;
!default&lt;br /&gt;
!description&lt;br /&gt;
|-&lt;br /&gt;
| grid&lt;br /&gt;
| [[GUIVariable#grid|grid]]&lt;br /&gt;
| mandatory&lt;br /&gt;
| Defines the grid with the widgets to place on the panel.&lt;br /&gt;
|-&lt;br /&gt;
| return_value_id&lt;br /&gt;
| [[GUIVariable#string|string]]&lt;br /&gt;
| &amp;quot;&amp;quot;&lt;br /&gt;
| The return value id.&lt;br /&gt;
|-&lt;br /&gt;
| return_value&lt;br /&gt;
| [[GUIVariable#int|int]]&lt;br /&gt;
| 0&lt;br /&gt;
| The return value.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Toggle panel ==&lt;br /&gt;
A toggle panel is an item which can hold other items. The difference between&lt;br /&gt;
a grid and a panel is that it's possible to define how a panel looks. A grid&lt;br /&gt;
in an invisible container to just hold the items. The toggle panel is a&lt;br /&gt;
combination of the panel and a toggle button, it allows a toggle button with&lt;br /&gt;
its own grid.&lt;br /&gt;
&lt;br /&gt;
Variables:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!key&lt;br /&gt;
!type&lt;br /&gt;
!default&lt;br /&gt;
!description&lt;br /&gt;
|-&lt;br /&gt;
| grid&lt;br /&gt;
| [[GUIVariable#grid|grid]]&lt;br /&gt;
| mandatory&lt;br /&gt;
| Defines the grid with the widgets to place on the panel.&lt;br /&gt;
|-&lt;br /&gt;
| return_value_id&lt;br /&gt;
| [[GUIVariable#string|string]]&lt;br /&gt;
| &amp;quot;&amp;quot;&lt;br /&gt;
| The return value id, see [[GUIToolkitWML#Button]] for more information.&lt;br /&gt;
|-&lt;br /&gt;
| return_value&lt;br /&gt;
| [[GUIVariable#int|int]]&lt;br /&gt;
| 0&lt;br /&gt;
| The return value, see [[GUIToolkitWML#Button]] for more information.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tree view ==&lt;br /&gt;
A tree view is a control that holds several items of the same or different types. The items shown are called tree view nodes and when a node has children, these can be shown or hidden. Nodes that contain children need to provide a clickable button in order to fold or unfold the children.&lt;br /&gt;
&lt;br /&gt;
List with the tree view specific variables:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!key&lt;br /&gt;
!type&lt;br /&gt;
!default&lt;br /&gt;
!description&lt;br /&gt;
|-&lt;br /&gt;
| vertical_scrollbar_mode&lt;br /&gt;
| [[GUIVariable#scrollbar_mode|scrollbar_mode]]&lt;br /&gt;
| initial_auto&lt;br /&gt;
| Determines whether or not to show the scrollbar.&lt;br /&gt;
|-&lt;br /&gt;
| horizontal_scrollbar_mode&lt;br /&gt;
| [[GUIVariable#scrollbar_mode|scrollbar_mode]]&lt;br /&gt;
| initial_auto&lt;br /&gt;
| Determines whether or not to show the scrollbar.&lt;br /&gt;
|-&lt;br /&gt;
| indention_step_size&lt;br /&gt;
| [[GUIVariable#unsigned|unsigned]]&lt;br /&gt;
| 0&lt;br /&gt;
| The number of pixels every level of nodes is indented from the previous level.&lt;br /&gt;
|-&lt;br /&gt;
| node&lt;br /&gt;
| [[GUIVariable#unsigned|unsigned]]&lt;br /&gt;
| mandatory&lt;br /&gt;
| The tree view can contain multiple node sections. This part needs more documentation.&lt;br /&gt;
|-&lt;br /&gt;
| id&lt;br /&gt;
| [[GUIVariable#unsigned|unsigned]]&lt;br /&gt;
| &amp;quot;&amp;quot;&lt;br /&gt;
| .&lt;br /&gt;
|-&lt;br /&gt;
| return_value_id&lt;br /&gt;
| [[GUIVariable#unsigned|unsigned]]&lt;br /&gt;
| &amp;quot;&amp;quot;&lt;br /&gt;
| .&lt;br /&gt;
|-&lt;br /&gt;
| has_minimum&lt;br /&gt;
| [[GUIVariable#bool|bool]]&lt;br /&gt;
| true&lt;br /&gt;
| If true, a tree with at least one item will always have something selected (except when items are being deleted). Although this is {{DevFeature1.19|21}}, the previous behavior is equivalent to setting this to true. The GUI doesn't provide a way to unselect items, the purpose of setting this to false is to add a landing page, as the campaign menu does.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
NOTE more documentation and examples are needed.&lt;br /&gt;
&lt;br /&gt;
== Vertical scrollbar ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Viewport ==&lt;br /&gt;
A viewport is an special widget used to view only a part of the widget it `holds'.&lt;br /&gt;
&lt;br /&gt;
List with the viewport specific variables:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!key&lt;br /&gt;
!type&lt;br /&gt;
!default&lt;br /&gt;
!description&lt;br /&gt;
|-&lt;br /&gt;
| grow_direction&lt;br /&gt;
| [[GUIVariable#grow_direction|grow_direction]]&lt;br /&gt;
| mandatory&lt;br /&gt;
| The direction in which new items grow.&lt;br /&gt;
|-&lt;br /&gt;
| parallel_items&lt;br /&gt;
| [[GUIVariable#unsigned|unsigned]]&lt;br /&gt;
| mandatory&lt;br /&gt;
| The number of items that are growing in parallel.&lt;br /&gt;
|-&lt;br /&gt;
| item_definition&lt;br /&gt;
| [[GUIVariable#section|section]]&lt;br /&gt;
| mandatory&lt;br /&gt;
| The definition of a new item.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category: WML Reference]]&lt;br /&gt;
[[Category: GUI WML Reference]]&lt;/div&gt;</summary>
		<author><name>Octalot</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=UnitTypeWML&amp;diff=74742</id>
		<title>UnitTypeWML</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=UnitTypeWML&amp;diff=74742"/>
		<updated>2026-01-16T13:13:49Z</updated>

		<summary type="html">&lt;p&gt;Octalot: /* Removed keys */ Update reference to docs for update_unit_type&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WML Tags}}&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Unit Type ==&lt;br /&gt;
&lt;br /&gt;
Each '''[unit_type]''' tag defines one unit type. (for the use of [unit] to create a unit, see [[SingleUnitWML]])&lt;br /&gt;
&lt;br /&gt;
Unit animation syntax is described in [[AnimationWML]]. In addition to the animation tags described there, the following key/tags are recognized:&lt;br /&gt;
* '''advances_to''': When this unit has ''experience'' greater than or equal to ''experience'', it is replaced by a unit of the type that the value of ''advances_to'' refers to. All modifications that have been done to the unit are applied to the unit it is replaced by. The special value 'null' says that the unit does not advance but gets an AMLA instead. Can be a comma-separated list of units that can be chosen from upon advancing.&lt;br /&gt;
* '''alignment''': one of lawful/neutral/chaotic/liminal (See [[TimeWML]]). Default is &amp;quot;neutral&amp;quot;.&lt;br /&gt;
* '''attacks''': the number of times that this unit can attack each turn. Default is 1.&lt;br /&gt;
* '''cost''': when a player recruits a unit of this type, the player loses ''cost'' gold. If this would cause gold to drop below 0,  the unit cannot be recruited. Default is 1.&lt;br /&gt;
* '''recall_cost''': {{DevFeature1.13|0}} the default recall cost of units of this type, overriding the recall cost set in scenario [[SideWML|[side]]] tags or the global [[GameConfigWML|[game_config]]] value. Individual units may override this value in [[SingleUnitWML|[unit]]]. A value of -1 is equivalent to not specifying this attribute. {{DevFeature1.15|0}} Units are now recalled for AI sides even if the recall_cost is larger than the unit's worth (essentially its cost, plus potentially a bonus for experience points). In 1.14 and earlier, units were not recalled by the AI in this case even if this was the only recall/recruit action possible to the AI.&lt;br /&gt;
* '''description''': (translatable) the text displayed in the unit descriptor box for this unit. Default 'No description available...'. &lt;br /&gt;
* '''do_not_list''': Not used by the game, but by tools for browsing and listing the unit tree. If this is 'yes', the unit will be ignored by these tools. {{DevFeature1.13|?}} When placing units in debug mode this unit isn't listed (but can still be placed using the :create command). This restriction is lifted in version &amp;lt;b&amp;gt;1.14.3&amp;lt;/b&amp;gt;.&lt;br /&gt;
* '''ellipse''': the ellipse image to display under the unit, which is normally team-colored. Default is &amp;quot;misc/ellipse&amp;quot;. &amp;quot;-nozoc&amp;quot; and &amp;quot;-leader&amp;quot; are automatically appended for units without zone of control and with canrecruit=yes respectively. The [http://www.wesnoth.org/macro-reference.xhtml#IS_HERO IS_HERO]/[http://www.wesnoth.org/macro-reference.xhtml#MAKE_HERO MAKE_HERO]/[http://www.wesnoth.org/macro-reference.xhtml#UNMAKE_HERO UNMAKE_HERO] macros change the ellipse to/back from &amp;quot;misc/ellipse-hero&amp;quot;. Finally, setting this to &amp;quot;none&amp;quot; will cause the unit to not have any ellipses displayed under it regardless of the user's preferences.&amp;lt;br/&amp;gt;WARNING: Be aware that setting this to &amp;quot;misc/ellipse-hero&amp;quot; for a unit with canrecruit=yes will result in the ellipse being &amp;quot;misc/ellipse-hero-leader&amp;quot;, which is not a supported combination (it doesn't have a graphic, and will cause error logs that the graphic is missing). This is tracked as bug [https://github.com/wesnoth/wesnoth/issues/6258 6258] on GitHub.&amp;lt;br/&amp;gt;{{DevFeature1.17|26}} canrecruit=yes is now supported with &amp;quot;misc/ellipse-hero&amp;quot;, since &amp;quot;misc/ellipse-hero-leader&amp;quot; has been added in [https://github.com/wesnoth/wesnoth/pull/8375 8375].&lt;br /&gt;
* '''experience''': When this unit has experience greater than or equal to ''experience'', it is replaced by a unit with 0 experience of the type that the value of ''advances_to'' refers to. All modifications that have been done to the unit are applied to the unit it is replaced by.&lt;br /&gt;
* '''flag_rgb''': usually set by [http://www.wesnoth.org/macro-reference.xhtml#MAGENTA_IS_THE_TEAM_COLOR MAGENTA_IS_THE_TEAM_COLOR]; specifies the colours in the base flag to use for team-colouring the unit, expressed as a colour name (such as magenta) or a comma-separated list of RGB values (in hex format).&lt;br /&gt;
* '''gender''': has a value of either ''male'' or ''female'', and determines which of the keys ''male_names'' and ''female_names''  should be read. When a unit of this type is recruited, it will be randomly assigned a name by the random name generator, which will use these names as a base. If '''gender''' is not specified it defaults to ''male''.&lt;br /&gt;
* '''halo''': an image to place centered on the unit. It is drawn on top of the unit, and on top of surrounding units if the image is larger than one hex. It works similarly to the halo attribute of {{tag|InterfaceActionsWML|item}}, and it can be animated with a comma-separated list of images.&lt;br /&gt;
* '''hide_help''': (yes|no) default=no. Determines if the unit type will appear in the in-game help.&lt;br /&gt;
* '''hitpoints''': the maximum HP that the unit has, and the HP it has when it is created.&lt;br /&gt;
* '''id''': the value of the ''type'' key for units of this type. This is required and must be unique among all [unit_type] tags. An ''id'' must consist only of alphanumerics and spaces (or underscores). ''type'' keys are found in [[SingleUnitWML]] and [[FilterWML]]. For example, id=Drake Flare&lt;br /&gt;
*'''ignore_race_traits''': 'yes' or 'no' (default). Determines whether racial traits (see [[UnitsWML]]) are applied. &lt;br /&gt;
* '''image''': sets the base image of the unit, which is used on the map.&lt;br /&gt;
* '''image_icon''': sets an alternative image to be used to represent the unit in any UI dialogs such as the recruit dialog, attack dialog and the unit image box in the sidebar. This is usually a variant of the image with any transparent padding removed, and is usually needed for images that have extra transparent padding for correct positioning on the game map. The image specified by this key will be scaled to 72x72px in the Unit Recruit/Unit Create dialog's listbox and 144x144px on the unit preview panel (the panel that shows the unit's detailed stats, located on left side on recruit/create dialog and on both sides of the attack dialog). [[ImagePathFunctions#Crop_Function|~CROP]] function can be useful here. Scaling might not be a good idea because it will be internally scaled as mentioned above. You can see Loyalists Paladin or the Fire Dragon/Skeletal Dragon units as an example.&lt;br /&gt;
* '''level''': the amount of upkeep the unit costs.  After this unit fights, its opponent gains ''level'' experience. See also kill_experience ([[GameConfigWML]]), and leadership ([[AbilitiesWML]]).&lt;br /&gt;
* '''upkeep''': the amount of upkeep the unit costs if it differs from its level.&lt;br /&gt;
* '''movement''': the number of move points that this unit receives each turn.&lt;br /&gt;
* '''movement_type''': See [[UnitsWML#.5Bmovetype.5D|movetype]]. Note that the tags '''[movement_costs]''', '''[vision_costs]''', '''[defense]''', and '''[resistance]''' can be used to modify this movetype.&lt;br /&gt;
* '''name''': (translatable) displayed in the Status Table for units of this type.&lt;br /&gt;
* '''num_traits''': the number of traits that units of this type should receive when they are recruited, overriding the value set in the [[UnitsWML#.5Brace.5D|[race]]] tag.&lt;br /&gt;
* '''profile''': the portrait image to use for this unit type. You can also set a portrait for an individual unit instead of the whole unit type (see [[SingleUnitWML]]). The engine first looks for the image in the transparent subdirectory and if found that image is used. If not found it will use the image as-is. If the image width or height is equal or above 300 the engine will scale the image with a factor between 1/2 and 1. For images which should only be shown on the right side in the dialog append ~RIGHT() to the image.&lt;br /&gt;
** If &amp;quot;unit_image&amp;quot; is given instead of a filename, uses the unit's base image as the portrait (in the same manner that unit types without portraits do by default).&lt;br /&gt;
** If &amp;quot;none&amp;quot; is given instead of a filename, no image will be displayed.&lt;br /&gt;
* '''small_profile''': the image to use when a smaller portrait is needed than the one used for messages (e.g., in the help system). When this attribute is missing, the value of the '''profile''' attribute is used instead. When present, the heuristic for finding a transparent portrait is disabled for the '''profile''' attribute, so the correct '''profile''' should be set too. If '''profile''' is not present, '''small_profile''' is ignored. Note that image modifiers are allowed; they might be useful for cropping and rescaling a portrait:&lt;br /&gt;
 small_profile=&amp;quot;portraits/elves/transparent/marksman+female.png~CROP(0,20,380,380)~SCALE(205,205)&amp;quot;&lt;br /&gt;
 profile=&amp;quot;portraits/elves/transparent/marksman+female.png&amp;quot;&lt;br /&gt;
* '''race''': See {{tag|UnitsWML|race}}.  Also used in standard unit filter (see [[FilterWML]]). Mainline Wesnoth features following values:  bats, drake, dwarf, elf, falcon, goblin, gryphon, human, dunefolk, lizard, mechanical, merman, monster, naga, ogre, orc, troll, undead, wolf, wose. They are defined in /data/core/units.cfg.&lt;br /&gt;
* '''undead_variation''': When a unit of this type is killed by a weapon with the plague special, this variation is applied to the new plague unit that is created, whatever its type. For example, if the plague special creates Walking Corpses and undead_variation is set to &amp;quot;troll&amp;quot;, you'll get a troll Walking Corpse. Defaults to the undead_variation set in this unit type's race.&lt;br /&gt;
* '''usage''': the way that the AI should recruit this unit, as determined by the scenario designer. (See ''recruitment_pattern'', [[AiWML]]).  The following are conventions on usage:&lt;br /&gt;
** ''scout'': Fast, mobile unit meant for exploration and village grabbing.&lt;br /&gt;
** ''fighter'': Melee fighter, melee attack substantially more powerful than ranged.&lt;br /&gt;
** ''archer'': Ranged fighter, ranged attack substantially more powerful than melee.&lt;br /&gt;
** ''mixed fighter'': Melee and ranged fighter, melee and ranged attacks roughly equal.&lt;br /&gt;
** ''healer'': Specialty 'heals' or 'cures'.&lt;br /&gt;
:Note that this field primarily affects recruitment.  It also has a small effect on unit movement (the AI tries to keep scouts away from enemies, to some extent).  It does not affect the AI's behavior in combat; that is always computed from attack power and hitpoints. Non-standard usages may be used as well.&lt;br /&gt;
* '''vision''': the number of vision points to calculate the unit's sight range. Defaults to ''movement'' if not present.&lt;br /&gt;
* '''jamming''': the number of jamming points. Defaults to ''0'' if not present. See [[UnitsWML#.5Bmovetype.5D|[jamming_costs]]]&lt;br /&gt;
* '''zoc''': if &amp;quot;yes&amp;quot; the unit will have a zone of control regardless of level.  If present but set to anything other than &amp;quot;yes,&amp;quot; the unit will have no zone of control.  If the tag is omitted, zone of control is dictated by unit level (level 0 = no zoc, level 1+ = has zoc).&lt;br /&gt;
* '''die_sound''': sets the sound, which is used when the unit dies.&lt;br /&gt;
* '''healed_sound''': sets the sound used when the unit is healed in any way (default: heal.wav).&lt;br /&gt;
* '''hp_bar_scaling''': Overrides the attribute in ([[GameConfigWML]]).&lt;br /&gt;
* '''xp_bar_scaling''': Overrides the attribute in ([[GameConfigWML]]).&lt;br /&gt;
* '''bar_offset_x''', '''bar_offset_y''': The offset of the hp and xp bars from the normal bar position of 72x72 unit sprite.&lt;br /&gt;
&lt;br /&gt;
== After max level advancement (AMLA) ==&lt;br /&gt;
* '''[advancement]''': describes what happens to a unit when it reaches the XP required for advancement.  It is considered as an advancement in the same way as advancement described by '''advances_to'''; however, if the player chooses this advancement, the unit will have one or more effects applied to it instead of advancing.&lt;br /&gt;
** '''id''': unique identifier for this advancement; ''Required'' if there are multiple advancement options, or if ''strict_amla=no''.&lt;br /&gt;
** '''always_display''': if set to true displays the AMLA option even if it is the only available one.&lt;br /&gt;
** '''description''': a description displayed as the option for this advancement if there is another advancement option that the player must choose from; otherwise, the advancement is chosen automatically and this key is irrelevant.&lt;br /&gt;
** '''image''': an image to display next to the description in the advancement menu.&lt;br /&gt;
** '''max_times''': default 1.  The maximum times the unit can be awarded this advancement. Pass -1 for &amp;quot;unlimited&amp;quot;.&lt;br /&gt;
** '''strict_amla''':  (yes|no) default=no. Disable the AMLA if the unit can advance to another unit.&lt;br /&gt;
** '''major_amla''': (yes|no) default=no. Sets whether the unit's XP bar is blue(=yes) or purple(=no). In case of more [advancement] tags, if there is one with major_amla=yes, the XP bar will be blue.&lt;br /&gt;
** '''require_amla''': An optional list of AMLA ''id'' keys that act as prerequisites for this advancement to become available.  Order is not important, and an AMLA id can be repeated any number of times to indicate that another advancement must be chosen several times before this advancement option will become available.&lt;br /&gt;
*** example: &amp;lt;tt&amp;gt;require_amla=tough,tough,incr_damage&amp;lt;/tt&amp;gt; assumes there exist other [advancement] options called ''id=tough'' and ''id=incr_damage''.  Once ''tough'' is chosen twice and ''incr_damage'' is chosen once, then the current [advancement] will become available.&lt;br /&gt;
*** ''require_amla=tough,incr_damage,tough'' is an equivalent way of expressing this.&lt;br /&gt;
** '''exclude_amla''': {{DevFeature1.13|2}} An optional list of AMLA ''id'' keys that represent AMLAs that are mutually exclusive to this one. Order is not important, and an AMLA id can be repeated. If the unit already has any of the AMLAs that appear once in this list, then this AMLA will not be made available. If an AMLA id appears multiple times in the list, then this AMLA will be made available only if the other AMLA has been chosen less than the number of times it appears in the list. Of course, for this to really make two AMLAs mutually exclusive, you need to add ''exclude_amla'' to both AMLA defintions.&lt;br /&gt;
** '''[effect]''': A modification applied to the unit whenever this advancement is chosen.  See [[EffectWML]]&lt;br /&gt;
** '''[filter]''': A  [[StandardUnitFilter]],  the advancement will only be available when the unit passes this filter during the time the advancement dialog is shown.&lt;br /&gt;
&lt;br /&gt;
== Attacks ==&lt;br /&gt;
* '''[attack]''': one of the unit's attacks.&lt;br /&gt;
** '''description''': a translatable text for name of the attack, to be displayed to the user.&lt;br /&gt;
** '''name''': the name of the attack. Used as a default description, if ''description'' is not present, and to determine the default icon, if ''icon'' is not present (see below).  Non-translatable.  Used for the ''has_weapon'' key and animation filters; see [[StandardUnitFilter]] and [[AnimationWML]]&lt;br /&gt;
** '''type''': the damage type of the attack.  Used in determining resistance to this attack (see {{tag|UnitsWML|movetype|resistance}}). Usually this is one of ''blade'', ''pierce'', ''impact'', ''fire'', ''cold'', or ''arcane'', but it can be set to anything (as long as it contains only letters, numbers, and underscores). When using a custom type, you will need to set its user-visible name using [[LanguageWML]]. {{DevFeature1.15|0}} When showing the icon for a custom damage type in the sidebar, the game will look for a file called icons/profiles/''type''.png under your addon's images folder. For example, the icon for a damage type called ''electric'' would be at images/icons/profiles/electric.png.&lt;br /&gt;
** '''[specials]''': contains the specials of the attack. See [[AbilitiesWML#The_.5Bspecials.5D_tag|AbilitiesWML]].&lt;br /&gt;
** '''specials_list''': {{DevFeature1.19|18}} A comma-separated list of weapon special [[AbilitiesWML#Common_keys_and_tags_for_every_weapon_special|'''unique_id''']]s. If defined in the registry [[UnitsWML#.5Bweapon_specials.5D|[units][weapon_specials]]], these will be added to this attack as if their full definition was included in '''[specials]'''. Example: ''specials_list=plague,magical''.&lt;br /&gt;
** '''icon''': the image to use as an icon for the attack in the attack choice menu, as a path relative to the images directory. Defaults to the attack's name in the attacks directory (Ex. if ''name=sword'' then default is ''icon=attacks/sword.png''). &lt;br /&gt;
** '''range''': the range of the attack.  Used to determine the enemy's retaliation, which will be of the same type. The range can be anything (as long as it contains only letters, numbers, and underscores), but the standard values are ''melee'' and ''ranged''. Units can only retaliate against attacks for which they have a corresponding attack of the same range. When using a custom range, you will need to set its user-visible name using [[LanguageWML]]. {{DevFeature1.15|0}} When showing the icon for a custom range in the sidebar the game will look for a file called icons/profiles/''range''_attack.png under your addon's images folder. For example, the icon for a range called ''very_long'' would be at images/icons/profiles/very_long_attack.png.&lt;br /&gt;
** '''max_range''': maximum distance (in number of hexes) to which this attack works. Default is 1.&lt;br /&gt;
*** This currently lacks UI and AI support.&lt;br /&gt;
** '''min_range''': minimum distance (in number of hexes) to which this attack works. Default is 1.&lt;br /&gt;
*** This currently lacks UI and AI support.&lt;br /&gt;
** '''damage''': the damage of this attack&lt;br /&gt;
** '''number''': the number of strikes per attack this weapon has&lt;br /&gt;
** '''accuracy''': a number added to the chance to hit whenever using this weapon offensively (i.e. during a strike with this attack, regardless of who initiated the combat); negative values work too&lt;br /&gt;
** '''parry''': a number deducted from the enemy chance to hit whenever using this weapon defensively (i.e. during the enemy's strike, regardless of who initiated the combat); negative values work too&lt;br /&gt;
** '''movement_used''': determines how many movement points using this attack expends. By default all movement is used up, set this to 0 to make attacking with this attack expend no movement.&lt;br /&gt;
** '''attacks_used''': {{DevFeature1.17|12}} determines how many attacks this attack expends (default 1). This number is deducted from the unit's &amp;lt;tt&amp;gt;attacks_left&amp;lt;/tt&amp;gt; when they use this attack.&lt;br /&gt;
** '''attack_weight''': multiplier for total damage that the AI should use to choose which attack to use when attacking (and offer to player as default). Setting it to 0 disables the attack on attack. Until {{DevFeature1.19|2}} positive attack_weight was ignored.&lt;br /&gt;
** '''defense_weight''': used to determine which attack is used for retaliation. This affects gameplay, as the player is not allowed to determine his unit's retaliation weapon. Setting it to 0 disable the attacks on defense.&lt;br /&gt;
** '''alignment''': {{DevFeature1.19|5}} decouples the attack's alignment from the unit's alignment. One of ''lawful'', ''neutral'', ''chaotic'', ''liminal'' (See [[TimeWML]]). If unspecified, the unit alignment is used. Only useful for units with multiple attacks, otherwise you can change the unit alignment instead.&lt;br /&gt;
&lt;br /&gt;
== Base and variations ==&lt;br /&gt;
These create related unit types, for example the Walking Corpse's swimming, mounted, animal, etc. variations.&lt;br /&gt;
&lt;br /&gt;
* {{anchor|base_unit|'''[base_unit]'''}}: Contains one attribute, '''id''', which must be the ID of a unit type.  If specified, the UnitTypeWML for that unit is copied and then this unit_type's WML overrides parts as documented in [[InternalActionsWML#.5Bset_variables.5D|[set_variables]mode=merge]]. Additionally, the unit will be marked as variation of the base unit in its own help page, but not in the help page of the base unit.&lt;br /&gt;
* {{anchor|variation|'''[variation]'''}}: Defines a variation of a unit, this tag appears inside the base type's '''[unit_type]''' tag. Variations are invoked with an [effect] tag or the variation= attribute in [[SingleUnitWML]].&lt;br /&gt;
** '''variation_id''': Mandatory. The value of '''variation=''' used in SingleUnitWML to choose this variant.&lt;br /&gt;
** '''variation_name''': Translatable. The name of the variation, which is displayed in the help and in debug mode. Not setting this looks bad unless combined with '''hide_help'''=yes.&lt;br /&gt;
** '''inherit''': if ''yes'', inherits all the properties of the base unit, as if by [[InternalActionsWML#.5Bset_variables.5D|[set_variables]mode=merge]]. Defaults to no.&lt;br /&gt;
*** The '''id''' key is always inherited, regardless of the value of '''inherit'''.&lt;br /&gt;
** All keys and tags of '''[unit_type]''', except ''[advancefrom]'', ''[base_unit]'', ''[female]'', ''[male]'', and ''[variation]''.&lt;br /&gt;
* '''[male]''', '''[female]''': These can specify a variation based on gender for a unit. If these are provided, they will automatically apply based upon the gender of a unit.&lt;br /&gt;
** '''inherit''': if ''yes'', inherits all the properties of the base type, as if by [[InternalActionsWML#.5Bset_variables.5D|[set_variables]mode=merge]]. Defaults to yes.&lt;br /&gt;
*** The '''id''' key is always inherited, regardless of the value of '''inherit'''.&lt;br /&gt;
** All '''[unit_type]''' tags and keys, excluding ''[advancefrom]'', ''[base_unit]'', ''[female]'', and ''[male]''.&lt;br /&gt;
&lt;br /&gt;
When merging the data, subtags can be deleted with ''__remove=yes'', as documented in ''[set_variables]''.&lt;br /&gt;
&lt;br /&gt;
== Other tags ==&lt;br /&gt;
* '''[abilities]''': Defines the abilities of a unit. See [[AbilitiesWML]]&lt;br /&gt;
* '''abilities_list''': {{DevFeature1.19|18}} A comma-separated list of ability [[AbilitiesWML#Common_keys_and_tags_for_every_ability|'''unique_id''']]s. If defined in the registry [[UnitsWML#.5Babilities.5D|[units][abilities]]], these will be added to this unit type as if their full definition was included in '''[abilities]'''. Example: ''abilities_list=heals_8,regenerates''.&lt;br /&gt;
&lt;br /&gt;
* '''[event]''': Any [event] written inside the [unit_type] tag will get included into any scenario where a unit of this type appears in. Note that such events get included when a unit of this type first appears in the scenario, not automatically when the scenario begins (meaning that ''name=prestart'' events, for example, would usually never trigger). See [[EventWML]] and [[WML_Abilities|WML Abilities]]. {{DevFeature1.19|4}} Abilities support [event].&lt;br /&gt;
&lt;br /&gt;
* '''[trait]''': Adds an additional trait to the pool. See [[UnitsWML]] for the syntax.&lt;br /&gt;
* '''[special_note]''' {{DevFeature1.15|2}} see [[UnitTypeWML#Special_Notes|below]].&lt;br /&gt;
&lt;br /&gt;
== Special Notes ==&lt;br /&gt;
&lt;br /&gt;
Use of the '''[special_note]''' tags and attributes results in a bulleted list of special notes in the unit type's help page and in the sidebar tooltip for the unit type's name. Prior to 1.15.2, the old format for special notes was simply text included in the '''[unit_type]description''' attribute.&lt;br /&gt;
&lt;br /&gt;
Note that the sidebar tooltip shows the notes for the current unit, but opening the help-browser by right-clicking on a unit shows the notes for generic units of that type. These can be different if the unit has '''[modifications]'''.&lt;br /&gt;
&lt;br /&gt;
Text given in the following attributes will be collected and shown as the special notes for units and unit types:&lt;br /&gt;
&lt;br /&gt;
* {{DevFeature1.15|2}} [unit_type][special_note]note=&lt;br /&gt;
* {{DevFeature1.15|2}} [unit][special_note]note= (these are used ''instead of'' any defined in the [unit_type])&lt;br /&gt;
* {{DevFeature1.15|14}} [movetype][special_note]note=&lt;br /&gt;
* {{DevFeature1.15|14}} [''ability tag name'']special_note=&lt;br /&gt;
* {{DevFeature1.15|14}} [attack][specials][''special tag name'']special_note=&lt;br /&gt;
* {{DevFeature1.15|14}} [language]special_note_damage_type_''TYPE''=&lt;br /&gt;
    &lt;br /&gt;
It's no longer necessary to put these notes in each unit_type's .cfg file, and the macros for doing so are now deprecated.&lt;br /&gt;
&lt;br /&gt;
== Removed keys ==&lt;br /&gt;
&lt;br /&gt;
These don't work any more, the documentation is left here as an aid to porting old code.&lt;br /&gt;
&lt;br /&gt;
* {{anchor|advancefrom|'''[advancefrom]'''}}: {{DevFeature1.15|4}} replaced by [[AddonsWML#modify_unit_type|[modify_unit_type]]]. Defines the previous unit type on the advancement tree. Allows a campaign-specific unit to be spliced into an already existing advancement tree.  It should generally be used only inside a campaign ifdef, to prevent changes to other campaigns. Since all multiplayer content shares MULTIPLAYER define, using advancefrom changes unit type even if the addon is not actively used. For that reason multiplayer advancefrom may only be used with unit types defined in the same addon - then everyone who has the unit has it with same advancements.  This tag makes changes to the ''advances_to'' and ''experience'' keys of a base unit to make it advance into this unit.  It takes these keys:&lt;br /&gt;
** ''unit'': the id of the base unit from which this unit advances.  This adds the unit into the list of units which ''unit'' can advance into.&lt;br /&gt;
** ''experience'': (optional) If present the experience needed to advance is set to this value. If there are more than one [advancefrom] tags referencing the same base unit within the same preprocessor scope (e.g. a campaign #ifdef) with experience= keys, the lowest value of these is chosen.  Note: this will also lower the experience required to advance to other units which the base unit can advance into.&lt;br /&gt;
: If the previous unit type makes use of '''[male]''' and/or '''[female]''' tags, then the current (new) unit type is expected to also. That is, the subtypes defined by those tags will only receive this advancement if the new type has a corresponding tag.&lt;br /&gt;
{{DevFeature1.15|4}} '''[advancefrom]''' was effectively removed in 1.15.4. The intention was to deprecate it, but  the compatibility code that was meant to support it in 1.16 was untested and nonfunctional.&lt;br /&gt;
&lt;br /&gt;
== Deprecating units ==&lt;br /&gt;
&lt;br /&gt;
A macro is provided for deprecating a unit, which uses the built-in deprecation system but hard-codes the level to 3 (meaning &amp;quot;for removal&amp;quot;). The syntax is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=wml&amp;gt;{DEPRECATED_UNIT old_id new_id version}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also set the new_id to an empty string if there is no replacement.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[AnimationWML]]&lt;br /&gt;
* [[ReferenceWML]]&lt;br /&gt;
* [[TerrainWML]]&lt;br /&gt;
&lt;br /&gt;
[[Category: WML Reference]]&lt;/div&gt;</summary>
		<author><name>Octalot</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=UnitTypeWML&amp;diff=74741</id>
		<title>UnitTypeWML</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=UnitTypeWML&amp;diff=74741"/>
		<updated>2026-01-15T10:37:52Z</updated>

		<summary type="html">&lt;p&gt;Octalot: /* Other tags */ Make a section for [base_unit] and [variation], make it findable when searching for __remove.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WML Tags}}&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Unit Type ==&lt;br /&gt;
&lt;br /&gt;
Each '''[unit_type]''' tag defines one unit type. (for the use of [unit] to create a unit, see [[SingleUnitWML]])&lt;br /&gt;
&lt;br /&gt;
Unit animation syntax is described in [[AnimationWML]]. In addition to the animation tags described there, the following key/tags are recognized:&lt;br /&gt;
* '''advances_to''': When this unit has ''experience'' greater than or equal to ''experience'', it is replaced by a unit of the type that the value of ''advances_to'' refers to. All modifications that have been done to the unit are applied to the unit it is replaced by. The special value 'null' says that the unit does not advance but gets an AMLA instead. Can be a comma-separated list of units that can be chosen from upon advancing.&lt;br /&gt;
* '''alignment''': one of lawful/neutral/chaotic/liminal (See [[TimeWML]]). Default is &amp;quot;neutral&amp;quot;.&lt;br /&gt;
* '''attacks''': the number of times that this unit can attack each turn. Default is 1.&lt;br /&gt;
* '''cost''': when a player recruits a unit of this type, the player loses ''cost'' gold. If this would cause gold to drop below 0,  the unit cannot be recruited. Default is 1.&lt;br /&gt;
* '''recall_cost''': {{DevFeature1.13|0}} the default recall cost of units of this type, overriding the recall cost set in scenario [[SideWML|[side]]] tags or the global [[GameConfigWML|[game_config]]] value. Individual units may override this value in [[SingleUnitWML|[unit]]]. A value of -1 is equivalent to not specifying this attribute. {{DevFeature1.15|0}} Units are now recalled for AI sides even if the recall_cost is larger than the unit's worth (essentially its cost, plus potentially a bonus for experience points). In 1.14 and earlier, units were not recalled by the AI in this case even if this was the only recall/recruit action possible to the AI.&lt;br /&gt;
* '''description''': (translatable) the text displayed in the unit descriptor box for this unit. Default 'No description available...'. &lt;br /&gt;
* '''do_not_list''': Not used by the game, but by tools for browsing and listing the unit tree. If this is 'yes', the unit will be ignored by these tools. {{DevFeature1.13|?}} When placing units in debug mode this unit isn't listed (but can still be placed using the :create command). This restriction is lifted in version &amp;lt;b&amp;gt;1.14.3&amp;lt;/b&amp;gt;.&lt;br /&gt;
* '''ellipse''': the ellipse image to display under the unit, which is normally team-colored. Default is &amp;quot;misc/ellipse&amp;quot;. &amp;quot;-nozoc&amp;quot; and &amp;quot;-leader&amp;quot; are automatically appended for units without zone of control and with canrecruit=yes respectively. The [http://www.wesnoth.org/macro-reference.xhtml#IS_HERO IS_HERO]/[http://www.wesnoth.org/macro-reference.xhtml#MAKE_HERO MAKE_HERO]/[http://www.wesnoth.org/macro-reference.xhtml#UNMAKE_HERO UNMAKE_HERO] macros change the ellipse to/back from &amp;quot;misc/ellipse-hero&amp;quot;. Finally, setting this to &amp;quot;none&amp;quot; will cause the unit to not have any ellipses displayed under it regardless of the user's preferences.&amp;lt;br/&amp;gt;WARNING: Be aware that setting this to &amp;quot;misc/ellipse-hero&amp;quot; for a unit with canrecruit=yes will result in the ellipse being &amp;quot;misc/ellipse-hero-leader&amp;quot;, which is not a supported combination (it doesn't have a graphic, and will cause error logs that the graphic is missing). This is tracked as bug [https://github.com/wesnoth/wesnoth/issues/6258 6258] on GitHub.&amp;lt;br/&amp;gt;{{DevFeature1.17|26}} canrecruit=yes is now supported with &amp;quot;misc/ellipse-hero&amp;quot;, since &amp;quot;misc/ellipse-hero-leader&amp;quot; has been added in [https://github.com/wesnoth/wesnoth/pull/8375 8375].&lt;br /&gt;
* '''experience''': When this unit has experience greater than or equal to ''experience'', it is replaced by a unit with 0 experience of the type that the value of ''advances_to'' refers to. All modifications that have been done to the unit are applied to the unit it is replaced by.&lt;br /&gt;
* '''flag_rgb''': usually set by [http://www.wesnoth.org/macro-reference.xhtml#MAGENTA_IS_THE_TEAM_COLOR MAGENTA_IS_THE_TEAM_COLOR]; specifies the colours in the base flag to use for team-colouring the unit, expressed as a colour name (such as magenta) or a comma-separated list of RGB values (in hex format).&lt;br /&gt;
* '''gender''': has a value of either ''male'' or ''female'', and determines which of the keys ''male_names'' and ''female_names''  should be read. When a unit of this type is recruited, it will be randomly assigned a name by the random name generator, which will use these names as a base. If '''gender''' is not specified it defaults to ''male''.&lt;br /&gt;
* '''halo''': an image to place centered on the unit. It is drawn on top of the unit, and on top of surrounding units if the image is larger than one hex. It works similarly to the halo attribute of {{tag|InterfaceActionsWML|item}}, and it can be animated with a comma-separated list of images.&lt;br /&gt;
* '''hide_help''': (yes|no) default=no. Determines if the unit type will appear in the in-game help.&lt;br /&gt;
* '''hitpoints''': the maximum HP that the unit has, and the HP it has when it is created.&lt;br /&gt;
* '''id''': the value of the ''type'' key for units of this type. This is required and must be unique among all [unit_type] tags. An ''id'' must consist only of alphanumerics and spaces (or underscores). ''type'' keys are found in [[SingleUnitWML]] and [[FilterWML]]. For example, id=Drake Flare&lt;br /&gt;
*'''ignore_race_traits''': 'yes' or 'no' (default). Determines whether racial traits (see [[UnitsWML]]) are applied. &lt;br /&gt;
* '''image''': sets the base image of the unit, which is used on the map.&lt;br /&gt;
* '''image_icon''': sets an alternative image to be used to represent the unit in any UI dialogs such as the recruit dialog, attack dialog and the unit image box in the sidebar. This is usually a variant of the image with any transparent padding removed, and is usually needed for images that have extra transparent padding for correct positioning on the game map. The image specified by this key will be scaled to 72x72px in the Unit Recruit/Unit Create dialog's listbox and 144x144px on the unit preview panel (the panel that shows the unit's detailed stats, located on left side on recruit/create dialog and on both sides of the attack dialog). [[ImagePathFunctions#Crop_Function|~CROP]] function can be useful here. Scaling might not be a good idea because it will be internally scaled as mentioned above. You can see Loyalists Paladin or the Fire Dragon/Skeletal Dragon units as an example.&lt;br /&gt;
* '''level''': the amount of upkeep the unit costs.  After this unit fights, its opponent gains ''level'' experience. See also kill_experience ([[GameConfigWML]]), and leadership ([[AbilitiesWML]]).&lt;br /&gt;
* '''upkeep''': the amount of upkeep the unit costs if it differs from its level.&lt;br /&gt;
* '''movement''': the number of move points that this unit receives each turn.&lt;br /&gt;
* '''movement_type''': See [[UnitsWML#.5Bmovetype.5D|movetype]]. Note that the tags '''[movement_costs]''', '''[vision_costs]''', '''[defense]''', and '''[resistance]''' can be used to modify this movetype.&lt;br /&gt;
* '''name''': (translatable) displayed in the Status Table for units of this type.&lt;br /&gt;
* '''num_traits''': the number of traits that units of this type should receive when they are recruited, overriding the value set in the [[UnitsWML#.5Brace.5D|[race]]] tag.&lt;br /&gt;
* '''profile''': the portrait image to use for this unit type. You can also set a portrait for an individual unit instead of the whole unit type (see [[SingleUnitWML]]). The engine first looks for the image in the transparent subdirectory and if found that image is used. If not found it will use the image as-is. If the image width or height is equal or above 300 the engine will scale the image with a factor between 1/2 and 1. For images which should only be shown on the right side in the dialog append ~RIGHT() to the image.&lt;br /&gt;
** If &amp;quot;unit_image&amp;quot; is given instead of a filename, uses the unit's base image as the portrait (in the same manner that unit types without portraits do by default).&lt;br /&gt;
** If &amp;quot;none&amp;quot; is given instead of a filename, no image will be displayed.&lt;br /&gt;
* '''small_profile''': the image to use when a smaller portrait is needed than the one used for messages (e.g., in the help system). When this attribute is missing, the value of the '''profile''' attribute is used instead. When present, the heuristic for finding a transparent portrait is disabled for the '''profile''' attribute, so the correct '''profile''' should be set too. If '''profile''' is not present, '''small_profile''' is ignored. Note that image modifiers are allowed; they might be useful for cropping and rescaling a portrait:&lt;br /&gt;
 small_profile=&amp;quot;portraits/elves/transparent/marksman+female.png~CROP(0,20,380,380)~SCALE(205,205)&amp;quot;&lt;br /&gt;
 profile=&amp;quot;portraits/elves/transparent/marksman+female.png&amp;quot;&lt;br /&gt;
* '''race''': See {{tag|UnitsWML|race}}.  Also used in standard unit filter (see [[FilterWML]]). Mainline Wesnoth features following values:  bats, drake, dwarf, elf, falcon, goblin, gryphon, human, dunefolk, lizard, mechanical, merman, monster, naga, ogre, orc, troll, undead, wolf, wose. They are defined in /data/core/units.cfg.&lt;br /&gt;
* '''undead_variation''': When a unit of this type is killed by a weapon with the plague special, this variation is applied to the new plague unit that is created, whatever its type. For example, if the plague special creates Walking Corpses and undead_variation is set to &amp;quot;troll&amp;quot;, you'll get a troll Walking Corpse. Defaults to the undead_variation set in this unit type's race.&lt;br /&gt;
* '''usage''': the way that the AI should recruit this unit, as determined by the scenario designer. (See ''recruitment_pattern'', [[AiWML]]).  The following are conventions on usage:&lt;br /&gt;
** ''scout'': Fast, mobile unit meant for exploration and village grabbing.&lt;br /&gt;
** ''fighter'': Melee fighter, melee attack substantially more powerful than ranged.&lt;br /&gt;
** ''archer'': Ranged fighter, ranged attack substantially more powerful than melee.&lt;br /&gt;
** ''mixed fighter'': Melee and ranged fighter, melee and ranged attacks roughly equal.&lt;br /&gt;
** ''healer'': Specialty 'heals' or 'cures'.&lt;br /&gt;
:Note that this field primarily affects recruitment.  It also has a small effect on unit movement (the AI tries to keep scouts away from enemies, to some extent).  It does not affect the AI's behavior in combat; that is always computed from attack power and hitpoints. Non-standard usages may be used as well.&lt;br /&gt;
* '''vision''': the number of vision points to calculate the unit's sight range. Defaults to ''movement'' if not present.&lt;br /&gt;
* '''jamming''': the number of jamming points. Defaults to ''0'' if not present. See [[UnitsWML#.5Bmovetype.5D|[jamming_costs]]]&lt;br /&gt;
* '''zoc''': if &amp;quot;yes&amp;quot; the unit will have a zone of control regardless of level.  If present but set to anything other than &amp;quot;yes,&amp;quot; the unit will have no zone of control.  If the tag is omitted, zone of control is dictated by unit level (level 0 = no zoc, level 1+ = has zoc).&lt;br /&gt;
* '''die_sound''': sets the sound, which is used when the unit dies.&lt;br /&gt;
* '''healed_sound''': sets the sound used when the unit is healed in any way (default: heal.wav).&lt;br /&gt;
* '''hp_bar_scaling''': Overrides the attribute in ([[GameConfigWML]]).&lt;br /&gt;
* '''xp_bar_scaling''': Overrides the attribute in ([[GameConfigWML]]).&lt;br /&gt;
* '''bar_offset_x''', '''bar_offset_y''': The offset of the hp and xp bars from the normal bar position of 72x72 unit sprite.&lt;br /&gt;
&lt;br /&gt;
== After max level advancement (AMLA) ==&lt;br /&gt;
* '''[advancement]''': describes what happens to a unit when it reaches the XP required for advancement.  It is considered as an advancement in the same way as advancement described by '''advances_to'''; however, if the player chooses this advancement, the unit will have one or more effects applied to it instead of advancing.&lt;br /&gt;
** '''id''': unique identifier for this advancement; ''Required'' if there are multiple advancement options, or if ''strict_amla=no''.&lt;br /&gt;
** '''always_display''': if set to true displays the AMLA option even if it is the only available one.&lt;br /&gt;
** '''description''': a description displayed as the option for this advancement if there is another advancement option that the player must choose from; otherwise, the advancement is chosen automatically and this key is irrelevant.&lt;br /&gt;
** '''image''': an image to display next to the description in the advancement menu.&lt;br /&gt;
** '''max_times''': default 1.  The maximum times the unit can be awarded this advancement. Pass -1 for &amp;quot;unlimited&amp;quot;.&lt;br /&gt;
** '''strict_amla''':  (yes|no) default=no. Disable the AMLA if the unit can advance to another unit.&lt;br /&gt;
** '''major_amla''': (yes|no) default=no. Sets whether the unit's XP bar is blue(=yes) or purple(=no). In case of more [advancement] tags, if there is one with major_amla=yes, the XP bar will be blue.&lt;br /&gt;
** '''require_amla''': An optional list of AMLA ''id'' keys that act as prerequisites for this advancement to become available.  Order is not important, and an AMLA id can be repeated any number of times to indicate that another advancement must be chosen several times before this advancement option will become available.&lt;br /&gt;
*** example: &amp;lt;tt&amp;gt;require_amla=tough,tough,incr_damage&amp;lt;/tt&amp;gt; assumes there exist other [advancement] options called ''id=tough'' and ''id=incr_damage''.  Once ''tough'' is chosen twice and ''incr_damage'' is chosen once, then the current [advancement] will become available.&lt;br /&gt;
*** ''require_amla=tough,incr_damage,tough'' is an equivalent way of expressing this.&lt;br /&gt;
** '''exclude_amla''': {{DevFeature1.13|2}} An optional list of AMLA ''id'' keys that represent AMLAs that are mutually exclusive to this one. Order is not important, and an AMLA id can be repeated. If the unit already has any of the AMLAs that appear once in this list, then this AMLA will not be made available. If an AMLA id appears multiple times in the list, then this AMLA will be made available only if the other AMLA has been chosen less than the number of times it appears in the list. Of course, for this to really make two AMLAs mutually exclusive, you need to add ''exclude_amla'' to both AMLA defintions.&lt;br /&gt;
** '''[effect]''': A modification applied to the unit whenever this advancement is chosen.  See [[EffectWML]]&lt;br /&gt;
** '''[filter]''': A  [[StandardUnitFilter]],  the advancement will only be available when the unit passes this filter during the time the advancement dialog is shown.&lt;br /&gt;
&lt;br /&gt;
== Attacks ==&lt;br /&gt;
* '''[attack]''': one of the unit's attacks.&lt;br /&gt;
** '''description''': a translatable text for name of the attack, to be displayed to the user.&lt;br /&gt;
** '''name''': the name of the attack. Used as a default description, if ''description'' is not present, and to determine the default icon, if ''icon'' is not present (see below).  Non-translatable.  Used for the ''has_weapon'' key and animation filters; see [[StandardUnitFilter]] and [[AnimationWML]]&lt;br /&gt;
** '''type''': the damage type of the attack.  Used in determining resistance to this attack (see {{tag|UnitsWML|movetype|resistance}}). Usually this is one of ''blade'', ''pierce'', ''impact'', ''fire'', ''cold'', or ''arcane'', but it can be set to anything (as long as it contains only letters, numbers, and underscores). When using a custom type, you will need to set its user-visible name using [[LanguageWML]]. {{DevFeature1.15|0}} When showing the icon for a custom damage type in the sidebar, the game will look for a file called icons/profiles/''type''.png under your addon's images folder. For example, the icon for a damage type called ''electric'' would be at images/icons/profiles/electric.png.&lt;br /&gt;
** '''[specials]''': contains the specials of the attack. See [[AbilitiesWML#The_.5Bspecials.5D_tag|AbilitiesWML]].&lt;br /&gt;
** '''specials_list''': {{DevFeature1.19|18}} A comma-separated list of weapon special [[AbilitiesWML#Common_keys_and_tags_for_every_weapon_special|'''unique_id''']]s. If defined in the registry [[UnitsWML#.5Bweapon_specials.5D|[units][weapon_specials]]], these will be added to this attack as if their full definition was included in '''[specials]'''. Example: ''specials_list=plague,magical''.&lt;br /&gt;
** '''icon''': the image to use as an icon for the attack in the attack choice menu, as a path relative to the images directory. Defaults to the attack's name in the attacks directory (Ex. if ''name=sword'' then default is ''icon=attacks/sword.png''). &lt;br /&gt;
** '''range''': the range of the attack.  Used to determine the enemy's retaliation, which will be of the same type. The range can be anything (as long as it contains only letters, numbers, and underscores), but the standard values are ''melee'' and ''ranged''. Units can only retaliate against attacks for which they have a corresponding attack of the same range. When using a custom range, you will need to set its user-visible name using [[LanguageWML]]. {{DevFeature1.15|0}} When showing the icon for a custom range in the sidebar the game will look for a file called icons/profiles/''range''_attack.png under your addon's images folder. For example, the icon for a range called ''very_long'' would be at images/icons/profiles/very_long_attack.png.&lt;br /&gt;
** '''max_range''': maximum distance (in number of hexes) to which this attack works. Default is 1.&lt;br /&gt;
*** This currently lacks UI and AI support.&lt;br /&gt;
** '''min_range''': minimum distance (in number of hexes) to which this attack works. Default is 1.&lt;br /&gt;
*** This currently lacks UI and AI support.&lt;br /&gt;
** '''damage''': the damage of this attack&lt;br /&gt;
** '''number''': the number of strikes per attack this weapon has&lt;br /&gt;
** '''accuracy''': a number added to the chance to hit whenever using this weapon offensively (i.e. during a strike with this attack, regardless of who initiated the combat); negative values work too&lt;br /&gt;
** '''parry''': a number deducted from the enemy chance to hit whenever using this weapon defensively (i.e. during the enemy's strike, regardless of who initiated the combat); negative values work too&lt;br /&gt;
** '''movement_used''': determines how many movement points using this attack expends. By default all movement is used up, set this to 0 to make attacking with this attack expend no movement.&lt;br /&gt;
** '''attacks_used''': {{DevFeature1.17|12}} determines how many attacks this attack expends (default 1). This number is deducted from the unit's &amp;lt;tt&amp;gt;attacks_left&amp;lt;/tt&amp;gt; when they use this attack.&lt;br /&gt;
** '''attack_weight''': multiplier for total damage that the AI should use to choose which attack to use when attacking (and offer to player as default). Setting it to 0 disables the attack on attack. Until {{DevFeature1.19|2}} positive attack_weight was ignored.&lt;br /&gt;
** '''defense_weight''': used to determine which attack is used for retaliation. This affects gameplay, as the player is not allowed to determine his unit's retaliation weapon. Setting it to 0 disable the attacks on defense.&lt;br /&gt;
** '''alignment''': {{DevFeature1.19|5}} decouples the attack's alignment from the unit's alignment. One of ''lawful'', ''neutral'', ''chaotic'', ''liminal'' (See [[TimeWML]]). If unspecified, the unit alignment is used. Only useful for units with multiple attacks, otherwise you can change the unit alignment instead.&lt;br /&gt;
&lt;br /&gt;
== Base and variations ==&lt;br /&gt;
These create related unit types, for example the Walking Corpse's swimming, mounted, animal, etc. variations.&lt;br /&gt;
&lt;br /&gt;
* {{anchor|base_unit|'''[base_unit]'''}}: Contains one attribute, '''id''', which must be the ID of a unit type.  If specified, the UnitTypeWML for that unit is copied and then this unit_type's WML overrides parts as documented in [[InternalActionsWML#.5Bset_variables.5D|[set_variables]mode=merge]]. Additionally, the unit will be marked as variation of the base unit in its own help page, but not in the help page of the base unit.&lt;br /&gt;
* {{anchor|variation|'''[variation]'''}}: Defines a variation of a unit, this tag appears inside the base type's '''[unit_type]''' tag. Variations are invoked with an [effect] tag or the variation= attribute in [[SingleUnitWML]].&lt;br /&gt;
** '''variation_id''': Mandatory. The value of '''variation=''' used in SingleUnitWML to choose this variant.&lt;br /&gt;
** '''variation_name''': Translatable. The name of the variation, which is displayed in the help and in debug mode. Not setting this looks bad unless combined with '''hide_help'''=yes.&lt;br /&gt;
** '''inherit''': if ''yes'', inherits all the properties of the base unit, as if by [[InternalActionsWML#.5Bset_variables.5D|[set_variables]mode=merge]]. Defaults to no.&lt;br /&gt;
*** The '''id''' key is always inherited, regardless of the value of '''inherit'''.&lt;br /&gt;
** All keys and tags of '''[unit_type]''', except ''[advancefrom]'', ''[base_unit]'', ''[female]'', ''[male]'', and ''[variation]''.&lt;br /&gt;
* '''[male]''', '''[female]''': These can specify a variation based on gender for a unit. If these are provided, they will automatically apply based upon the gender of a unit.&lt;br /&gt;
** '''inherit''': if ''yes'', inherits all the properties of the base type, as if by [[InternalActionsWML#.5Bset_variables.5D|[set_variables]mode=merge]]. Defaults to yes.&lt;br /&gt;
*** The '''id''' key is always inherited, regardless of the value of '''inherit'''.&lt;br /&gt;
** All '''[unit_type]''' tags and keys, excluding ''[advancefrom]'', ''[base_unit]'', ''[female]'', and ''[male]''.&lt;br /&gt;
&lt;br /&gt;
When merging the data, subtags can be deleted with ''__remove=yes'', as documented in ''[set_variables]''.&lt;br /&gt;
&lt;br /&gt;
== Other tags ==&lt;br /&gt;
* '''[abilities]''': Defines the abilities of a unit. See [[AbilitiesWML]]&lt;br /&gt;
* '''abilities_list''': {{DevFeature1.19|18}} A comma-separated list of ability [[AbilitiesWML#Common_keys_and_tags_for_every_ability|'''unique_id''']]s. If defined in the registry [[UnitsWML#.5Babilities.5D|[units][abilities]]], these will be added to this unit type as if their full definition was included in '''[abilities]'''. Example: ''abilities_list=heals_8,regenerates''.&lt;br /&gt;
&lt;br /&gt;
* '''[event]''': Any [event] written inside the [unit_type] tag will get included into any scenario where a unit of this type appears in. Note that such events get included when a unit of this type first appears in the scenario, not automatically when the scenario begins (meaning that ''name=prestart'' events, for example, would usually never trigger). See [[EventWML]] and [[WML_Abilities|WML Abilities]]. {{DevFeature1.19|4}} Abilities support [event].&lt;br /&gt;
&lt;br /&gt;
* '''[trait]''': Adds an additional trait to the pool. See [[UnitsWML]] for the syntax.&lt;br /&gt;
* '''[special_note]''' {{DevFeature1.15|2}} see [[UnitTypeWML#Special_Notes|below]].&lt;br /&gt;
&lt;br /&gt;
== Special Notes ==&lt;br /&gt;
&lt;br /&gt;
Use of the '''[special_note]''' tags and attributes results in a bulleted list of special notes in the unit type's help page and in the sidebar tooltip for the unit type's name. Prior to 1.15.2, the old format for special notes was simply text included in the '''[unit_type]description''' attribute.&lt;br /&gt;
&lt;br /&gt;
Note that the sidebar tooltip shows the notes for the current unit, but opening the help-browser by right-clicking on a unit shows the notes for generic units of that type. These can be different if the unit has '''[modifications]'''.&lt;br /&gt;
&lt;br /&gt;
Text given in the following attributes will be collected and shown as the special notes for units and unit types:&lt;br /&gt;
&lt;br /&gt;
* {{DevFeature1.15|2}} [unit_type][special_note]note=&lt;br /&gt;
* {{DevFeature1.15|2}} [unit][special_note]note= (these are used ''instead of'' any defined in the [unit_type])&lt;br /&gt;
* {{DevFeature1.15|14}} [movetype][special_note]note=&lt;br /&gt;
* {{DevFeature1.15|14}} [''ability tag name'']special_note=&lt;br /&gt;
* {{DevFeature1.15|14}} [attack][specials][''special tag name'']special_note=&lt;br /&gt;
* {{DevFeature1.15|14}} [language]special_note_damage_type_''TYPE''=&lt;br /&gt;
    &lt;br /&gt;
It's no longer necessary to put these notes in each unit_type's .cfg file, and the macros for doing so are now deprecated.&lt;br /&gt;
&lt;br /&gt;
== Removed keys ==&lt;br /&gt;
&lt;br /&gt;
These don't work any more, the documentation is left here as an aid to porting old code.&lt;br /&gt;
&lt;br /&gt;
* {{anchor|advancefrom|'''[advancefrom]'''}}: {{DevFeature1.15|4}} replaced by [[ModificationWML|[modify_unit_type]]]. Defines the previous unit type on the advancement tree. Allows a campaign-specific unit to be spliced into an already existing advancement tree.  It should generally be used only inside a campaign ifdef, to prevent changes to other campaigns. Since all multiplayer content shares MULTIPLAYER define, using advancefrom changes unit type even if the addon is not actively used. For that reason multiplayer advancefrom may only be used with unit types defined in the same addon - then everyone who has the unit has it with same advancements.  This tag makes changes to the ''advances_to'' and ''experience'' keys of a base unit to make it advance into this unit.  It takes these keys:&lt;br /&gt;
** ''unit'': the id of the base unit from which this unit advances.  This adds the unit into the list of units which ''unit'' can advance into.&lt;br /&gt;
** ''experience'': (optional) If present the experience needed to advance is set to this value. If there are more than one [advancefrom] tags referencing the same base unit within the same preprocessor scope (e.g. a campaign #ifdef) with experience= keys, the lowest value of these is chosen.  Note: this will also lower the experience required to advance to other units which the base unit can advance into.&lt;br /&gt;
: If the previous unit type makes use of '''[male]''' and/or '''[female]''' tags, then the current (new) unit type is expected to also. That is, the subtypes defined by those tags will only receive this advancement if the new type has a corresponding tag.&lt;br /&gt;
{{DevFeature1.15|4}} '''[advancefrom]''' was effectively removed in 1.15.4. The intention was to deprecate it, but  the compatibility code that was meant to support it in 1.16 was untested and nonfunctional.&lt;br /&gt;
&lt;br /&gt;
== Deprecating units ==&lt;br /&gt;
&lt;br /&gt;
A macro is provided for deprecating a unit, which uses the built-in deprecation system but hard-codes the level to 3 (meaning &amp;quot;for removal&amp;quot;). The syntax is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=wml&amp;gt;{DEPRECATED_UNIT old_id new_id version}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also set the new_id to an empty string if there is no replacement.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[AnimationWML]]&lt;br /&gt;
* [[ReferenceWML]]&lt;br /&gt;
* [[TerrainWML]]&lt;br /&gt;
&lt;br /&gt;
[[Category: WML Reference]]&lt;/div&gt;</summary>
		<author><name>Octalot</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=Authoring_tools&amp;diff=74721</id>
		<title>Authoring tools</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=Authoring_tools&amp;diff=74721"/>
		<updated>2026-01-09T09:05:42Z</updated>

		<summary type="html">&lt;p&gt;Octalot: /* trackplacer */ Remove the tool's documentation, leaving the file format&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page collects information about tools in the Wesnoth source tree that are intended to help you write campaign WML. &lt;br /&gt;
&lt;br /&gt;
== tmx_trackplacer ==&lt;br /&gt;
&lt;br /&gt;
{{DevFeature1.15|3}} '''tmx_trackplacer''' is a tool for editing journey tracks - the sequences of dots, crossed-sword, and flag symbols (track markers) that march across the story screens at the beginning of many Wesnoth scenarios.&lt;br /&gt;
&lt;br /&gt;
You'll need Tiled, a GPLv2 map editor:&lt;br /&gt;
* Debian / Ubuntu: install the &amp;quot;tiled&amp;quot; package&lt;br /&gt;
* other platforms: https://www.mapeditor.org/&lt;br /&gt;
* these instructions were written with version 1.2.4&lt;br /&gt;
&lt;br /&gt;
=== Usage ===&lt;br /&gt;
&lt;br /&gt;
Assume the campaign that we want to make a map for is Story of Wose, which is set on the Green Isle. Start by putting a copy of the map in the campaign:&lt;br /&gt;
&lt;br /&gt;
    mkdir Story_of_Wose/images/maps&lt;br /&gt;
    cp WESNOTH_DIR/data/campaigns/The_Rise_Of_Wesnoth/images/maps/green_isle.png Story_of_Wose/images/maps/&lt;br /&gt;
&lt;br /&gt;
Create a template .tmx file with the tool:&lt;br /&gt;
&lt;br /&gt;
    WESNOTH_DIR/data/tools/tmx_trackplacer Story_of_Wose/images/maps/green_isle.png -o temp.tmx&lt;br /&gt;
&lt;br /&gt;
=== In Tiled ===&lt;br /&gt;
&lt;br /&gt;
Start Tiled with the temp.tmx file. Expect to see the Green Isle map. On the right hand side of the screen there should be two windows:&lt;br /&gt;
* in the top, tabs ''Minimap'', ''Objects'' and ''Layers''. The Layers tab will have only ''background''.&lt;br /&gt;
* in the bottom, tabs ''Terrains'' and ''Tilesets''. The Tilesets tab should have ''wesnoth journey icons'' with the red dot, battle and rest markers.&lt;br /&gt;
https://user-images.githubusercontent.com/101462/66930950-ac876c80-f035-11e9-9599-d5dc4301acf2.png&lt;br /&gt;
&lt;br /&gt;
In Layers, create a ''New Layer'' of type ''Object Layer''. A typical name for this layer is '''JOURNEY'''. Ensure that this layer is selected.&lt;br /&gt;
From the menu bar at the top, select ''Insert Tile''.&lt;br /&gt;
From the Tilesets tab, choose dots, battles or rests, and click on the map to add them. The first two items placed will define the start of the journey; every item placed after the first two will be inserted in to the sequence based on whether it appears to be at the end or in the middle.&lt;br /&gt;
&lt;br /&gt;
For Story of Wose, the journey doubles back on itself. For this we'll split the journey in to two parts - rename '''JOURNEY''' to '''JOURNEY_PART1''', and add a new layer '''JOURNEY_PART2'''. You can use the opacity control at the top of the layers window to see what's on each layer.&lt;br /&gt;
&lt;br /&gt;
'''JOURNEY_PART1''' starts with a battle, and ends with a battle:&lt;br /&gt;
https://user-images.githubusercontent.com/101462/66930947-abeed600-f035-11e9-89e8-efde15f2a48d.png&lt;br /&gt;
&lt;br /&gt;
'''JOURNEY_PART2''' starts with dots, has a battle and then ends with another battle:&lt;br /&gt;
https://user-images.githubusercontent.com/101462/66930949-abeed600-f035-11e9-86a0-18c90c151c76.png&lt;br /&gt;
&lt;br /&gt;
Save the .tmx file.&lt;br /&gt;
&lt;br /&gt;
=== Creating the .cfg ===&lt;br /&gt;
&lt;br /&gt;
Convert the .tmx file to a .cfg file:&lt;br /&gt;
&lt;br /&gt;
    WESNOTH_DIR/data/tools/tmx_trackplacer temp.tmx -o Story_of_Wose/utils/bigmap.cfg&lt;br /&gt;
&lt;br /&gt;
Expect to see:&lt;br /&gt;
&lt;br /&gt;
    Read data: &amp;lt;Journey based on map file 'Story_of_Wose/images/maps/green_isle.png', with tracks {JOURNEY_PART1,JOURNEY_PART2}&amp;gt;&lt;br /&gt;
    Exporting as cfg&lt;br /&gt;
&lt;br /&gt;
At the moment, tmx_trackplacer doesn't have a way to preview the animations, other than loading the .cfg with Wesnoth itself. For testing, let's put all of the journey in at the start of the first scenario, Story_of_Wose/scenarios/1_The_Oldwood.cfg&lt;br /&gt;
&lt;br /&gt;
    #define STORY_BACKGROUND&lt;br /&gt;
        [background_layer]&lt;br /&gt;
            image=maps/background.jpg&lt;br /&gt;
            scale_vertically=yes&lt;br /&gt;
            scale_horizontally=no&lt;br /&gt;
            keep_aspect_ratio=yes&lt;br /&gt;
        [/background_layer]&lt;br /&gt;
        [background_layer]&lt;br /&gt;
            image=maps/green_isle.png&lt;br /&gt;
            scale_vertically=yes&lt;br /&gt;
            scale_horizontally=no&lt;br /&gt;
            keep_aspect_ratio=yes&lt;br /&gt;
            base_layer=yes&lt;br /&gt;
        [/background_layer]&lt;br /&gt;
    #enddef&lt;br /&gt;
&lt;br /&gt;
    [story]&lt;br /&gt;
        [part]&lt;br /&gt;
            {STORY_BACKGROUND}&lt;br /&gt;
            {JOURNEY_PART1_STAGE1}&lt;br /&gt;
        [/part]&lt;br /&gt;
        [part]&lt;br /&gt;
            {STORY_BACKGROUND}&lt;br /&gt;
            {JOURNEY_PART1_STAGE2}&lt;br /&gt;
        [/part]&lt;br /&gt;
        [part]&lt;br /&gt;
            {STORY_BACKGROUND}&lt;br /&gt;
            {JOURNEY_PART1_COMPLETE}&lt;br /&gt;
            {JOURNEY_PART2_STAGE1}&lt;br /&gt;
        [/part]&lt;br /&gt;
        [part]&lt;br /&gt;
            {STORY_BACKGROUND}&lt;br /&gt;
            {JOURNEY_PART1_COMPLETE}&lt;br /&gt;
            {JOURNEY_PART2_STAGE2}&lt;br /&gt;
        [/part]&lt;br /&gt;
        [part]&lt;br /&gt;
            story= _ &amp;quot;Today I want to tell you another story, a mere footnote in the history books if it is even remembered at all.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This should now show at the start of the campaign. Remember to refresh Wesnoth's cache if it doesn't appear.&lt;br /&gt;
&lt;br /&gt;
=== Could this be integrated as a Tiled plugin? ===&lt;br /&gt;
&lt;br /&gt;
Yes it could. Implementing it as a file converter was the easier option for development, and the code is (hopefully) modular enough for reuse.&lt;br /&gt;
&lt;br /&gt;
== trackviewer ==&lt;br /&gt;
&lt;br /&gt;
{{DevFeature1.15|3}} Map journey track animation preview tool, shows the journey without needing to start Wesnoth and refresh the cache. It’s a support program which assumes you’re either editing the .cfg file with a text editor or using Tiled with [[Authoring_tools#tmx_trackplacer|tmx_trackplacer]]; in other words, it's the part of the [[Authoring_tools#trackplacer|old trackplacer]] that wasn't covered by tmx_trackplacer.&lt;br /&gt;
&lt;br /&gt;
At least on Linux you can have both Tiled and this open on the same file. Save the file in Tiled, alt+tab to this, and press enter to reload the file.&lt;br /&gt;
&lt;br /&gt;
Keys:&lt;br /&gt;
* Escape quits&lt;br /&gt;
* Return or Enter reloads the .cfg or .tmx file, and restarts the animation&lt;br /&gt;
* Space pauses/unpauses&lt;br /&gt;
&lt;br /&gt;
== trackplacer's bigmap.cfg files ==&lt;br /&gt;
&lt;br /&gt;
'''trackplacer''' was the original tool for creating the journey tracks, the sequences of dots, crossed-sword, and flag symbols (track markers) that march across the story screens at the beginning of many Wesnoth scenarios. The tool itself has been replaced by the others on this page, this section remains to document the file format used in bigmap.cfg files (the filename itself isn't important, but in mainline has standardised on that name).&lt;br /&gt;
&lt;br /&gt;
To understand what your 'bigmap.cfg' does, you need to know that journey-track markers can be put on your story screens by two different sets of macros.  One, used for 'new' marks, is displayed in color with quarter-second delays; the other, 'old' set displays marks in white with no delay.  Your journey track is divided into stages by battle and rest markers; conventionally, you want to display the latest (most recent) stage with the new macros and all previous stages with the old ones.  &lt;br /&gt;
&lt;br /&gt;
Your track will be saved in .cfg format as a sequence of macro definitions with names like '''JOURNEY_STAGE_1''', '''JOURNEY_STAGE_2''' and so on.  '''JOURNEY_STAGE_1''' will draw the first stage in the 'new' color parts.  '''JOURNEY_STAGE_2''' will draw the first stage in the 'old' color and the second stage in the 'new' one; '''JOURNEY_STAGE_3''' will draw the first and second stages in the 'old' color parts and the third stage in the 'new' one; and so on.&lt;br /&gt;
&lt;br /&gt;
There will be a final macro '''JOURNEY_COMPLETE''' that displays the entire track in the 'old' color. This will be useful when you are piecing together multiple tracks, say for a campaign with branches.&lt;br /&gt;
&lt;br /&gt;
The track information in your bigmap.cfg will be enclosed in special comments&lt;br /&gt;
that look like this:&lt;br /&gt;
&lt;br /&gt;
    # trackplacer: tracks begin&lt;br /&gt;
    # trackplacer: tracks end&lt;br /&gt;
&lt;br /&gt;
'''trackplacer_tmx''' will not alter anything it finds outside these comments, and will always enclose everything it writes in them.&lt;br /&gt;
&lt;br /&gt;
Special comments may appear in your ''journey.cfg'', looking like this:&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;tt&amp;gt;# trackplacer: &amp;amp;lt;property&amp;amp;gt;=&amp;amp;lt;value&amp;amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These set properties that '''trackplacer_tmx''' may use.  At present there is only one such property: &amp;lt;tt&amp;gt;map&amp;lt;/tt&amp;gt;, which records the name of the mapfile on which your track is laid.  Don't remove this comment, '''trackplacer_tmx''' needs it.&lt;br /&gt;
&lt;br /&gt;
== Wesnoth Map Tracker ==&lt;br /&gt;
A standalone free and open source GUI tool that is available from here: https://github.com/babaissarkar/WesnothMapTracker&lt;br /&gt;
&lt;br /&gt;
It allows you to open an image file (say the Wesnoth Map) and place markers upon it, and the corresponding macro code is generated like this:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=wml&amp;gt;&lt;br /&gt;
  {NEW_JOURNEY 455 300}&lt;br /&gt;
  {NEW_REST 500 300}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that it cannot generate a full map.cfg yet, just the part mentioned. For detailed instructions please visit the link above.&lt;br /&gt;
&lt;br /&gt;
[[Category:Tools]]&lt;/div&gt;</summary>
		<author><name>Octalot</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=Authoring_tools&amp;diff=74720</id>
		<title>Authoring tools</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=Authoring_tools&amp;diff=74720"/>
		<updated>2026-01-09T08:53:51Z</updated>

		<summary type="html">&lt;p&gt;Octalot: /* CampSynt */ Removed all documentation about this obsolete tool&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page collects information about tools in the Wesnoth source tree that are intended to help you write campaign WML. &lt;br /&gt;
&lt;br /&gt;
== tmx_trackplacer ==&lt;br /&gt;
&lt;br /&gt;
{{DevFeature1.15|3}} '''tmx_trackplacer''' is a tool for editing journey tracks - the sequences of dots, crossed-sword, and flag symbols (track markers) that march across the story screens at the beginning of many Wesnoth scenarios.&lt;br /&gt;
&lt;br /&gt;
You'll need Tiled, a GPLv2 map editor:&lt;br /&gt;
* Debian / Ubuntu: install the &amp;quot;tiled&amp;quot; package&lt;br /&gt;
* other platforms: https://www.mapeditor.org/&lt;br /&gt;
* these instructions were written with version 1.2.4&lt;br /&gt;
&lt;br /&gt;
=== Usage ===&lt;br /&gt;
&lt;br /&gt;
Assume the campaign that we want to make a map for is Story of Wose, which is set on the Green Isle. Start by putting a copy of the map in the campaign:&lt;br /&gt;
&lt;br /&gt;
    mkdir Story_of_Wose/images/maps&lt;br /&gt;
    cp WESNOTH_DIR/data/campaigns/The_Rise_Of_Wesnoth/images/maps/green_isle.png Story_of_Wose/images/maps/&lt;br /&gt;
&lt;br /&gt;
Create a template .tmx file with the tool:&lt;br /&gt;
&lt;br /&gt;
    WESNOTH_DIR/data/tools/tmx_trackplacer Story_of_Wose/images/maps/green_isle.png -o temp.tmx&lt;br /&gt;
&lt;br /&gt;
=== In Tiled ===&lt;br /&gt;
&lt;br /&gt;
Start Tiled with the temp.tmx file. Expect to see the Green Isle map. On the right hand side of the screen there should be two windows:&lt;br /&gt;
* in the top, tabs ''Minimap'', ''Objects'' and ''Layers''. The Layers tab will have only ''background''.&lt;br /&gt;
* in the bottom, tabs ''Terrains'' and ''Tilesets''. The Tilesets tab should have ''wesnoth journey icons'' with the red dot, battle and rest markers.&lt;br /&gt;
https://user-images.githubusercontent.com/101462/66930950-ac876c80-f035-11e9-9599-d5dc4301acf2.png&lt;br /&gt;
&lt;br /&gt;
In Layers, create a ''New Layer'' of type ''Object Layer''. A typical name for this layer is '''JOURNEY'''. Ensure that this layer is selected.&lt;br /&gt;
From the menu bar at the top, select ''Insert Tile''.&lt;br /&gt;
From the Tilesets tab, choose dots, battles or rests, and click on the map to add them. The first two items placed will define the start of the journey; every item placed after the first two will be inserted in to the sequence based on whether it appears to be at the end or in the middle.&lt;br /&gt;
&lt;br /&gt;
For Story of Wose, the journey doubles back on itself. For this we'll split the journey in to two parts - rename '''JOURNEY''' to '''JOURNEY_PART1''', and add a new layer '''JOURNEY_PART2'''. You can use the opacity control at the top of the layers window to see what's on each layer.&lt;br /&gt;
&lt;br /&gt;
'''JOURNEY_PART1''' starts with a battle, and ends with a battle:&lt;br /&gt;
https://user-images.githubusercontent.com/101462/66930947-abeed600-f035-11e9-89e8-efde15f2a48d.png&lt;br /&gt;
&lt;br /&gt;
'''JOURNEY_PART2''' starts with dots, has a battle and then ends with another battle:&lt;br /&gt;
https://user-images.githubusercontent.com/101462/66930949-abeed600-f035-11e9-86a0-18c90c151c76.png&lt;br /&gt;
&lt;br /&gt;
Save the .tmx file.&lt;br /&gt;
&lt;br /&gt;
=== Creating the .cfg ===&lt;br /&gt;
&lt;br /&gt;
Convert the .tmx file to a .cfg file:&lt;br /&gt;
&lt;br /&gt;
    WESNOTH_DIR/data/tools/tmx_trackplacer temp.tmx -o Story_of_Wose/utils/bigmap.cfg&lt;br /&gt;
&lt;br /&gt;
Expect to see:&lt;br /&gt;
&lt;br /&gt;
    Read data: &amp;lt;Journey based on map file 'Story_of_Wose/images/maps/green_isle.png', with tracks {JOURNEY_PART1,JOURNEY_PART2}&amp;gt;&lt;br /&gt;
    Exporting as cfg&lt;br /&gt;
&lt;br /&gt;
At the moment, tmx_trackplacer doesn't have a way to preview the animations, other than loading the .cfg with Wesnoth itself. For testing, let's put all of the journey in at the start of the first scenario, Story_of_Wose/scenarios/1_The_Oldwood.cfg&lt;br /&gt;
&lt;br /&gt;
    #define STORY_BACKGROUND&lt;br /&gt;
        [background_layer]&lt;br /&gt;
            image=maps/background.jpg&lt;br /&gt;
            scale_vertically=yes&lt;br /&gt;
            scale_horizontally=no&lt;br /&gt;
            keep_aspect_ratio=yes&lt;br /&gt;
        [/background_layer]&lt;br /&gt;
        [background_layer]&lt;br /&gt;
            image=maps/green_isle.png&lt;br /&gt;
            scale_vertically=yes&lt;br /&gt;
            scale_horizontally=no&lt;br /&gt;
            keep_aspect_ratio=yes&lt;br /&gt;
            base_layer=yes&lt;br /&gt;
        [/background_layer]&lt;br /&gt;
    #enddef&lt;br /&gt;
&lt;br /&gt;
    [story]&lt;br /&gt;
        [part]&lt;br /&gt;
            {STORY_BACKGROUND}&lt;br /&gt;
            {JOURNEY_PART1_STAGE1}&lt;br /&gt;
        [/part]&lt;br /&gt;
        [part]&lt;br /&gt;
            {STORY_BACKGROUND}&lt;br /&gt;
            {JOURNEY_PART1_STAGE2}&lt;br /&gt;
        [/part]&lt;br /&gt;
        [part]&lt;br /&gt;
            {STORY_BACKGROUND}&lt;br /&gt;
            {JOURNEY_PART1_COMPLETE}&lt;br /&gt;
            {JOURNEY_PART2_STAGE1}&lt;br /&gt;
        [/part]&lt;br /&gt;
        [part]&lt;br /&gt;
            {STORY_BACKGROUND}&lt;br /&gt;
            {JOURNEY_PART1_COMPLETE}&lt;br /&gt;
            {JOURNEY_PART2_STAGE2}&lt;br /&gt;
        [/part]&lt;br /&gt;
        [part]&lt;br /&gt;
            story= _ &amp;quot;Today I want to tell you another story, a mere footnote in the history books if it is even remembered at all.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This should now show at the start of the campaign. Remember to refresh Wesnoth's cache if it doesn't appear.&lt;br /&gt;
&lt;br /&gt;
=== Could this be integrated as a Tiled plugin? ===&lt;br /&gt;
&lt;br /&gt;
Yes it could. Implementing it as a file converter was the easier option for development, and the code is (hopefully) modular enough for reuse.&lt;br /&gt;
&lt;br /&gt;
== trackviewer ==&lt;br /&gt;
&lt;br /&gt;
{{DevFeature1.15|3}} Map journey track animation preview tool, shows the journey without needing to start Wesnoth and refresh the cache. It’s a support program which assumes you’re either editing the .cfg file with a text editor or using Tiled with [[Authoring_tools#tmx_trackplacer|tmx_trackplacer]]; in other words, it's the part of the [[Authoring_tools#trackplacer|old trackplacer]] that wasn't covered by tmx_trackplacer.&lt;br /&gt;
&lt;br /&gt;
At least on Linux you can have both Tiled and this open on the same file. Save the file in Tiled, alt+tab to this, and press enter to reload the file.&lt;br /&gt;
&lt;br /&gt;
Keys:&lt;br /&gt;
* Escape quits&lt;br /&gt;
* Return or Enter reloads the .cfg or .tmx file, and restarts the animation&lt;br /&gt;
* Space pauses/unpauses&lt;br /&gt;
&lt;br /&gt;
== trackplacer ==&lt;br /&gt;
&lt;br /&gt;
'''UPDATE: per Elvish_Hunter in [https://forums.wesnoth.org/viewtopic.php?f=21&amp;amp;t=48478&amp;amp;p=631121#p631121 this thread]: &lt;br /&gt;
'''&amp;lt;nowiki&amp;gt;&amp;quot;trackplacer is outdated (it requires the obsolete PyGTK toolkit, which doesn't run on Python 3) and terribly bugged (it doesn't run at all on Windows, for example).&amp;quot;&amp;lt;/nowiki&amp;gt; You should either use [[Authoring tools#tmx_trackplacer|tmx_trackplacer]], or use image editing software to find the X and Y coordinates to create each dot or cross manually.&lt;br /&gt;
-------------&lt;br /&gt;
&lt;br /&gt;
'''trackplacer''' is a tool for visually editing journey tracks.  Journey tracks are the sequences of dots, crossed-sword, and flag symbols (track markers) that march across the story screens at the beginning of many Wesnoth scenarios.&lt;br /&gt;
&lt;br /&gt;
A 'journey' is an object containing a map file name and a (possibly empty) list of tracks, each with a name and each consisting of a sequence of track markers. This program exists to visually edit journeys represented as specially delimited sections in in .cfg files.&lt;br /&gt;
&lt;br /&gt;
When you run '''trackplacer''', it will pop up a file selection dialog asking you to select either a map image or a .cfg file.  When you select a map image, you will be starting a new set of journey tracks on that map.  If you select a .cfg, the .cfg will be scanned for macros describing journey tracks.  All other content in the .cfg, except for some magic special comments interpreted by '''trackplacer''' (which will be described later on) is ignored.&lt;br /&gt;
&lt;br /&gt;
Once you have a map (and possibly also a set of track for it), there is always a currently selected track (shown in red) and possibly one or more unselected tracks (shown in white).  You can add journey markers to the select track by clicking the left mouse button; they will appear on the screen.  The rule for adding markers to the track is as follows: if the two markers closest to the mouse pointer are adjacent on the track, insert the new marker between them in the track order. Otherwise, append it to the end of the track.&lt;br /&gt;
&lt;br /&gt;
You can click on and drag a marker with the middle mouse button to move it. Moving a marker preserves its place in the track order.  The right mouse button pops up an information window describing all features overlapping the pointer; it will disappear when you release.&lt;br /&gt;
&lt;br /&gt;
Radiobuttons in the upper-left-hand corner of the '''trackplacer''' window let you select placing battle markers (crossed swords) and rest markers (a flag).  If you click the trashcan icon, clicking on track markers will remove them.  If you click the copy/convert button, clicking on unselected track markers will copy them. &lt;br /&gt;
&lt;br /&gt;
When copying, '''trackplacer''' looks under the mouse pointer for a marker from an unselected track.  If it finds one, it creates a matching new icon on the selected track, preserving its pixel coordinates exactly.  This can be useful when you want two named tracks to end at exactly the same spot.&lt;br /&gt;
&lt;br /&gt;
The '''Animate''' button erases all icons, then redisplays them in order with a delay between each redraw, so you can see the track order.&lt;br /&gt;
&lt;br /&gt;
The '''Save''' button saves your work.  Your track will be saved on .cfg format as a sequence of macro definitions that you can insert in the story parts of your campaign.  Conventionally, the place to put this .cfg is in a file named 'journey.cfg' in the 'utils/' directory of your campaign, near your private macro files (if you have any).  Then the definitions will automatically be available in your scenario files.&lt;br /&gt;
&lt;br /&gt;
The '''Properties''' button brings up a dialog that allows you to edit key/value pairs associated with the track that may affect the behavior of '''trackplacer'''. Currently only two such properties are defined: &amp;quot;map&amp;quot; has the name of the track's base file as its value, and &amp;quot;prefix&amp;quot; sets the prefix to be used when generating macro names (defaulting to '''JOURNEY''').&lt;br /&gt;
&lt;br /&gt;
The '''Tracks''' button pops up a list of controls, one for each track.  You can change the state of the checkboxes to control which tracks are visible. The radiobuttons can be used to select a track for editing.  You can also add and rename tracks here.  Hover over the controls for tooltips.&lt;br /&gt;
&lt;br /&gt;
The Help button displays documentation.&lt;br /&gt;
&lt;br /&gt;
The Quit button ends your session, asking for confirmation if you have unsaved changes.&lt;br /&gt;
&lt;br /&gt;
To understand what your 'journey.cfg' does, you need to know that journey-track markers can be put on your story screens by two different sets of macros.  One, used for 'new' marks, is displayed in color with quarter-second delays; the other, 'old' set displays marks in white with no delay.  Your journey track is divided into stages by battle and rest markers; conventionally, you want to display the latest (most recent) stage with the new macros and all previous stages with the old ones.  &lt;br /&gt;
&lt;br /&gt;
Your track will be saved in .cfg format as a sequence of macro definitions with names like '''JOURNEY_STAGE_1''', '''JOURNEY_STAGE_2''' and so on.  '''JOURNEY_STAGE_1''' will draw the first stage in the 'new' color parts.  '''JOURNEY_STAGE_2''' will draw the first stage in the 'old' color and the second stage in the 'new' one; '''JOURNEY_STAGE_3''' will draw the first and second stages in the 'old' color parts and the third stage in the 'new' one; and so on.&lt;br /&gt;
&lt;br /&gt;
There will be a final macro '''JOURNEY_COMPLETE''' that displays the entire track in the 'old' color. This will be useful when you are piecing together multiple tracks, say for a campaign with branches.&lt;br /&gt;
&lt;br /&gt;
The track information in your journey.cfg will be enclosed in special comments&lt;br /&gt;
that look like this:&lt;br /&gt;
&lt;br /&gt;
    # trackplacer: tracks begin&lt;br /&gt;
    # trackplacer: tracks end&lt;br /&gt;
&lt;br /&gt;
'''trackplacer''' will not alter anything it finds outside these comments, and will always enclose everything it writes in them.&lt;br /&gt;
&lt;br /&gt;
Special comments may appear in your ''journey.cfg'', looking like this:&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;tt&amp;gt;# trackplacer: &amp;amp;lt;property&amp;amp;gt;=&amp;amp;lt;value&amp;amp;gt;&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These set properties that '''trackplacer''' may use.  At present there is only one such property: &amp;lt;tt&amp;gt;map&amp;lt;/tt&amp;gt;, which records the name of the mapfile on which your track is laid.  Don't remove this comment, '''trackplacer''' needs it.&lt;br /&gt;
&lt;br /&gt;
'''trackplacer''' has one known bug: you can confuse it (or possibly the underlying toolkit, or X) by dragging markers rapidly across other markers. If this happens to you, click '''Animate''' to refresh and slow down.&lt;br /&gt;
&lt;br /&gt;
== Wesnoth Map Tracker ==&lt;br /&gt;
A standalone free and open source GUI tool that is available from here: https://github.com/babaissarkar/WesnothMapTracker&lt;br /&gt;
&lt;br /&gt;
It allows you to open an image file (say the Wesnoth Map) and place markers upon it, and the corresponding macro code is generated like this:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=wml&amp;gt;&lt;br /&gt;
  {NEW_JOURNEY 455 300}&lt;br /&gt;
  {NEW_REST 500 300}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that it cannot generate a full map.cfg yet, just the part mentioned. For detailed instructions please visit the link above.&lt;br /&gt;
&lt;br /&gt;
[[Category:Tools]]&lt;/div&gt;</summary>
		<author><name>Octalot</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=AbilitiesWML&amp;diff=74711</id>
		<title>AbilitiesWML</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=AbilitiesWML&amp;diff=74711"/>
		<updated>2026-01-04T11:39:41Z</updated>

		<summary type="html">&lt;p&gt;Octalot: /* Common keys and tags for abilities with a value */ Arbitrary values for priority commonly use -10&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WML Tags}}&lt;br /&gt;
==  Abilities and their effects ==&lt;br /&gt;
&lt;br /&gt;
There are two types of abilities: ones that apply to units (called ''abilities'') and ones that only apply when using a particular attack (called ''specials'' or ''weapon specials'').  A unit may have multiple abilities and an attack can have multiple specials.&lt;br /&gt;
&lt;br /&gt;
Each ability or special defines an effect based on one to three units. Most abilities apply to a single unit, and '''[filter_self]''' can be used to determine when the ability is active. Weapon specials apply to two units, which can be filtered either as &amp;quot;attacker&amp;quot; and &amp;quot;defender&amp;quot; (with the obvious meaning) or as &amp;quot;self&amp;quot; and &amp;quot;other&amp;quot; – the unit that possesses the special, and that unit's opponent. When filtering on the &amp;quot;other&amp;quot; unit, you use '''[filter_opponent]'''.&lt;br /&gt;
&lt;br /&gt;
Leadership-style abilities are a more complex case, as they involve three units. Like a weapon special, there is an attacker and defender, but there is also a third unit that could be referred to as the &amp;quot;teacher&amp;quot;. The &amp;quot;teacher&amp;quot; is the unit that possesses the ability, so it is referred to as &amp;quot;self&amp;quot; in the ability. A leadership ability works by temporarily granting a weapon special to either the attacker or the defender. The unit that benefits from this is referred to as the &amp;quot;student&amp;quot;, while the unit that does not benefit is simply the &amp;quot;other&amp;quot; unit. When filtering on the &amp;quot;other&amp;quot; unit, you use '''[filter_opponent]''', while the student can be filtered with '''[filter_student]'''.&lt;br /&gt;
&lt;br /&gt;
== The ''[abilities]'' tag ==&lt;br /&gt;
&lt;br /&gt;
The following tags are used to describe an ability in WML:&lt;br /&gt;
&lt;br /&gt;
* '''[heals]''': modifies the hitpoints of a unit at the beginning of the healer's turn&lt;br /&gt;
* '''[regenerate]''': modifies the hitpoints of a unit at the beginning of the unit's turn&lt;br /&gt;
* '''[resistance]''': modifies the resistance of a unit to damage&lt;br /&gt;
* '''[leadership]''': modifies the damage of a unit&lt;br /&gt;
* '''[skirmisher]''': negates enemy zones of control&lt;br /&gt;
* '''[illuminates]''': modifies the time of day adjacent to the affected units&lt;br /&gt;
* '''[teleport]''': allows the unit to teleport&lt;br /&gt;
* '''[hides]''': renders the unit invisible to enemies&lt;br /&gt;
* {{DevFeature1.15|0}} All [[#The_.5Bspecials.5D_tag|weapon specials]] except for '''[plague]''', '''[heal_on_hit]''', and '''[swarm]''' can be placed in the '''[abilities]''' tag. These [[#Extra_tags_and_keys_used_by_weapon_specials_as_abilities|&amp;quot;weapon specials as abilities&amp;quot;]] will give the weapon special to all attacks the unit has.&lt;br /&gt;
* '''[defense]''' {{DevFeature1.19|16}}: modifies the chances of being hit by the opponent's weapon, this value can be modified by the parry attribute, the accuracy attribute of the opponent's weapon, or by their special weapon '''[chance_to_hit]'''. Be careful, the more you increase the value, the less chance the opponent has of hitting you. Using same standard numerical attributes as '''[attacks]''' .&lt;br /&gt;
* Any other tag is valid (for example '''[dummy]'''), but will result in an ability that does nothing but report it's there. '''Note:''' a dummy ability must have an id for the name and description to display.&lt;br /&gt;
* {{DevFeature1.15|3}} All the engine [[#The_.5Bspecials.5D_tag|weapon specials]] can be placed in the [abilities] tag now.&lt;br /&gt;
&lt;br /&gt;
=== Available formula variables in Abilities and Weapon Specials  ===&lt;br /&gt;
&lt;br /&gt;
{{DevFeature1.15|?}} When using formulas in abilities and weapon specials, the following formula variables are available:&lt;br /&gt;
* '''self''': (unit) the unit that has the ability&lt;br /&gt;
* '''student''': (unit) for leadership-like abilities this is the unit that is adjacent to the unit that has the ability; if affect_self=yes, this is also unit who has ability.&lt;br /&gt;
* '''attacker''': (unit) for attack-related abilities and weapon specials, this is the attacking unit during the attack.&lt;br /&gt;
* '''defender''': (unit) for attack-related abilities and weapon specials, this is the defending unit during the attack.&lt;br /&gt;
* '''other''': (unit) the unit whose stats get modified from the ability. For abilities without 'apply_to=opponent' this is always the same as 'student'.&lt;br /&gt;
&lt;br /&gt;
=== Common keys and tags for every ability ===&lt;br /&gt;
&lt;br /&gt;
{{DevFeature1.13|?}} All keys inside any ability that expects a numeric value will also accept formulas using &lt;br /&gt;
[[Wesnoth Formula Language]]. In order to use a formula in these keys, you must enclose it in parentheses. However, do '''not''' precede those parentheses with a dollar sign like &amp;lt;code&amp;gt;$(...)&amp;lt;/code&amp;gt;, since that will erase the &amp;lt;tt&amp;gt;self&amp;lt;/tt&amp;gt; variable.&lt;br /&gt;
&lt;br /&gt;
* '''name''': the (translatable) name of the ability. If omitted, the ability will be a hidden ability.&lt;br /&gt;
* '''female_name''': the (translatable) name of the ability when possessed by a female unit. Defaults to ''name'' if not specified.&lt;br /&gt;
* '''name_inactive''': the (translatable) name of the ability when inactive. Defaults to ''name'' if not specified; if the ability is supposed to be not displayed when inactive, you must explicitly set ''name_inactive'' to an empty string (nothing after the equals sign).&lt;br /&gt;
* '''female_name_inactive''': the (translatable) name of the ability when inactive and possessed by a female unit. Defaults to ''name_inactive'' if not specified. You should thus set ''female_name'' as well!&lt;br /&gt;
* '''description''': the (translatable) description of the ability.&lt;br /&gt;
* '''description_inactive''': the (translatable) description of the ability when inactive. Defaults to ''description'' if not specified.&lt;br /&gt;
* '''special_note''' {{DevFeature1.15|14}} Translatable string, which will be displayed in the unit’s help. See also [[UnitTypeWML#Special_Notes]].&lt;br /&gt;
* '''affect_self''': if equal to 'yes' (default), the ability will affect the unit that has it.&lt;br /&gt;
* '''affect_allies''': if equal to 'yes', the ability will affect units from the same and allied sides in the specified adjacent hexes. If set to 'no' it will not affect own or allied sides. If not set (default) it will affect units on the same side but not from allied sides.&lt;br /&gt;
* '''affect_enemies''': if equal to 'yes' (default is 'no'), the ability will affect enemies in the specified adjacent hexes.&lt;br /&gt;
* '''id''': this ability will not be cumulative with other abilities using this id. Must be present if cumulative is anything other than 'yes'.&lt;br /&gt;
* '''unique_id''': {{DevFeature1.19|18}} A unique identifier for this ability, used for the registry under [[UnitsWML#.5Babilities.5D|[units][abilities]]]. If not defined, falls back to '''id'''. Used to add this ability via '''abilities_list''' key in '''[unit_type]''' or '''[effect]apply_to=new_ability'''.&lt;br /&gt;
* '''halo_image''': {{DevFeature1.17|22}} if used, the halo specified showed on unit affected by ability.&lt;br /&gt;
* '''overlay_image''': {{DevFeature1.17|22}} if used, the overlay specified showed on unit affected by ability.&lt;br /&gt;
* '''halo_image_self''': {{DevFeature1.17|22}} if used, the halo specified showed on unit who has ability when active.&lt;br /&gt;
* '''overlay_image_self''': {{DevFeature1.17|22}} if used, the overlay specified showed on unit who has ability when active.&lt;br /&gt;
* '''[filter]''': [[StandardUnitFilter]] If the unit owning the ability does not match this filter, the ability will be inactive.&lt;br /&gt;
* {{anchor|affect_adjacent|'''[affect_adjacent]'''}}: an adjacent unit that does not match this filter will not receive its effects. There can be multiple [affect_adjacent] tags in a single ability; a unit needs to match any one of these to receive the effects. The side requirement of matching units is defined by the '''affect_allies''' and '''affect_enemies''' keys. If there are no [affect_adjacent] tags, then no adjacent units will receive the effects.&lt;br /&gt;
** '''adjacent''': a comma separated list of any combination of these directions: '''n''','''ne''','''se''','''s''','''sw''','''nw'''. (See [[StandardLocationFilter#Directions|notes]])&lt;br /&gt;
** '''[filter]''': a [[StandardUnitFilter]]. {{DevFeature1.13|2}} The variable $other_unit refers to the unit owning the ability.&lt;br /&gt;
** '''radius''': {{DevFeature1.19|13}} set to 1 by default, it determines the range within which units can be affected beyond immediately adjacent units, if the value is equal to 'full-map', the area is the entire map.&lt;br /&gt;
* '''[filter_self]''': if the owner of the ability does not match this filter, it will not receive the effects of the ability. [filter_self] takes a [[StandardUnitFilter]] as argument.&lt;br /&gt;
* '''[filter_adjacent]''': if an adjacent unit does not match this filter, the ability will not be active and no-one will receive its affects. Takes extra keys ''adjacent'', ''count'', ''is_enemy'', just like in a [[StandardUnitFilter]], with the one difference that, in the absence of a specified ''count'', all listed directions must match (so, with two directiones eg ''adjacent=n,s'', the default is ''count=2''). In fact, it's really a shorthand for a [filter_adjacent] nested within [filter]. The variables $this_unit and {{DevFeature1.13|2}} $other_unit both work as you'd expect. Multiple [filter_adjacent] can be provided, all of which must pass for the ability to activate. {{DevFeature1.19|18}} '''filter_adjacent''' is deprecated and will likely be removed in version 1.21, since a version already exists in the [[StandardUnitFilter]].&lt;br /&gt;
* '''[filter_adjacent_location]''': like [filter_adjacent], but filters on locations instead of units. This is a shorthand for [filter][filter_location][filter_adjacent_location]. {{DevFeature1.19|18}} '''filter_adjacent_location''' is deprecated and will likely be removed in version 1.21, since a version already exists in the [[StandardUnitFilter]].&lt;br /&gt;
* {{anchor|filter_base_value|'''[filter_base_value]'''}}: filters on the value before any modifications; uses the keys '''equals''', '''not_equals''', etc. If several keys are used all have to match.&lt;br /&gt;
* '''[event]''': [[EventWML]]. {{DevFeature1.19|4}} An [event] to be included into any scenario where a unit with this ability appears in. Note that such events get included when a unit with this ability first appears in the scenario, not automatically when the scenario begins (meaning that ''name=prestart'' events, for example, would usually never trigger). See [[WML_Abilities|WML Abilities]]. Shortcut of [unit_type][event].&lt;br /&gt;
&lt;br /&gt;
=== Common keys and tags for abilities with a value ===&lt;br /&gt;
&lt;br /&gt;
The '''[leadership]''', '''[heals]''', '''[regenerate]''',and '''[illuminates]''' abilities take values that specify how those abilities modify their respective base values.&lt;br /&gt;
&lt;br /&gt;
* '''value''': the value to be used. Available inside translatable strings as '''$value'''.&lt;br /&gt;
* '''add''': the number to add to the base value. Note the interaction with '''sub''' in [[#Common_calculations]]. Available inside translatable strings as '''$add'''.&lt;br /&gt;
* '''sub''': the number to subtract from the base value. Available inside translatable strings as '''$sub'''.&lt;br /&gt;
* '''multiply''': this multiplies the base value. Available inside translatable strings as '''$multiply'''.&lt;br /&gt;
* '''divide''': this divides the base value. Available inside translatable strings as '''$divide'''.&lt;br /&gt;
* '''max_value''': {{DevFeature1.19|2}}  maximum special value. Default: no limit. Available inside translatable strings as '''$max_value'''.&lt;br /&gt;
* '''min_value''': {{DevFeature1.19|2}}  minimum special value. Default: no limit. Available inside translatable strings as '''$min_value'''.&lt;br /&gt;
* '''priority''': {{DevFeature1.19|19}}  This attribute allows a higher-priority ability to use as its base the value returned by a lower-priority ability of the same type; for example a negative priority will cause the value to be calculated before checking whether the mainline marksman ability should override it. The value is arbitrary, but generally -10 is chosen to allow for another (not yet known) ability to be placed in between the known ones. Default: 0.&lt;br /&gt;
* '''cumulative''': if set to 'yes', the [leadership] value will be added to another [leadership] value= same if have same id=, for other abilities, the highest value between value= or base_value will be chosen.&lt;br /&gt;
* '''[filter_base_value]''': filters on the value before any modifications; uses the keys '''equals''', '''not_equals''', '''less_than''', '''greater_than''', '''less_than_equal_to''', '''greater_than_equal_to'''.&lt;br /&gt;
&lt;br /&gt;
==== Common calculations ====&lt;br /&gt;
&lt;br /&gt;
Several abilities and weapon specials take the keys '''add''', '''sub''', '''multiply''' and '''divide'''.&lt;br /&gt;
&lt;br /&gt;
{{DevFeature1.19|4}} '''add''' and '''sub''' work independently.&lt;br /&gt;
&lt;br /&gt;
Prior to 1.19.4:&lt;br /&gt;
&lt;br /&gt;
* If '''add''' and '''sub''' are used in the same ability, the '''add''' is ignored&lt;br /&gt;
* If '''add''' and '''sub''' are used in separate abilities with the same id, or with the default id that's used when no id is specified, then the order in which the abilities are encountered controls the calculation, which may change depending on units' positions on the map.&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[heals]'' ability ===&lt;br /&gt;
* '''value''': the amount healed.&lt;br /&gt;
* Use common keys and tags for abilities with a value.&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[regenerate]'' ability ===&lt;br /&gt;
* '''value''': the amount healed.&lt;br /&gt;
* Use common keys and tags for abilities with a value&lt;br /&gt;
&lt;br /&gt;
=== Extra keys and tags used by the ''[resistance]'' ability ===&lt;br /&gt;
&lt;br /&gt;
* '''value''': set resistance to this value.&lt;br /&gt;
* '''max_value''': maximum resistance value. Default: 0%. {{DevFeature1.17|24}} Default: no limit.&lt;br /&gt;
* '''min_value''': {{DevFeature1.19|0}} minimum resistance value. Default: no limit.&lt;br /&gt;
* Use common keys and tags for abilities with a value&lt;br /&gt;
* '''apply_to''': a list of damage types; if left out, the ability applies to all types.&lt;br /&gt;
* '''active_on''': one of 'defense' or 'offense'; if left out, the ability is active on both.&lt;br /&gt;
These keys affect the actual resistance (e.g. -20%), not the damage modifier normally used in [resistance] (e.g. 120).&lt;br /&gt;
* '''[filter_weapon]''': {{DevFeature1.15|0}} If present, the resistance ability only takes effect when the owner of the ability uses a matching weapon.&lt;br /&gt;
* '''[filter_second_weapon]''': {{DevFeature1.15|0}} If present, the resistance ability only takes effect when the opponent uses a matching weapon.&lt;br /&gt;
&lt;br /&gt;
=== Extra keys and tags used by the ''[defense]'' ability ===&lt;br /&gt;
* '''value''': set defense to this value. Warning, the chance to be hit decrease when value of ability increase.&lt;br /&gt;
* Use common keys and tags for abilities with a value&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[leadership]'' ability ===&lt;br /&gt;
&lt;br /&gt;
* '''value''': the percentage bonus to damage.&lt;br /&gt;
* Use common keys and tags for abilities with a value&lt;br /&gt;
''Note:'' cumulative leadership with '''cumulative=yes''' and '''value=''' doesn't work in 1.16 (but fixed in 1.17.12 and later). To work around use '''add=''' or '''sub=''' key (it doesn't require cumulative) (https://github.com/wesnoth/wesnoth/issues/6466 ). If you want each instance of a ''[leadership]'' with the same id to be added you will be able to reuse '''cumulative=yes''' in 1.17.12 and later, otherwise, if you want to add the value of another ''[leadership]'' only once even with the same id in several copies, use '''add'''.&lt;br /&gt;
* '''[filter_weapon]''': {{DevFeature1.15|0}} If present, the leadership ability only takes effect when the owner of the ability uses a matching weapon.&lt;br /&gt;
* '''[filter_second_weapon]''': {{DevFeature1.15|0}} If present, the leadership ability only takes effect when the opponent uses a matching weapon.&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[illuminates]'' ability ===&lt;br /&gt;
&lt;br /&gt;
Because this ability changes the terrain instead of units on it, affect_self, affect_allies, affect_enemies and [filter_adjacent] have no effect. If you use [affect_adjacent] the terrain under and adjacent to adjacent unit will be changed.&lt;br /&gt;
* '''value''': the percentage bonus to lawful units. Units with '''alignment=lawful''' do +''value'' % damage when under the influence of a unit with this ability. Units with '''alignment=chaotic''' do -''value'' % damage. Units with '''alignment=neutral''' are unaffected by this ability. Units with '''alignment=liminal''' do -(abs(''value'')) % damage. ''value'' can be a negative number; this is useful if you want to give Chaotic units an advantage instead of Lawful ones. &lt;br /&gt;
* Use Common keys and tags for abilities with a value&lt;br /&gt;
* '''max_value''': the maximum percentage bonus given. Cannot be less than 0. Defaults to 0 if not present.&lt;br /&gt;
* '''min_value''': the minimum percentage bonus given. Cannot be greater than 0. Defaults to 0 if not present.&lt;br /&gt;
* '''radius''': {{DevFeature1.19|15}} defines the radius of the ability, by default only the terrain the user is on and adjacent hexes are affected, but this can now be extended to a radius defined by '''radius''' ; if '''radius'''=all_map then the whole map will be affected.&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[hides]'' ability ===&lt;br /&gt;
&lt;br /&gt;
* '''alert''': the displayed text when the unit is discovered. Default &amp;quot;Ambushed!&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Extra tags used by the ''[teleport]'' ability ===&lt;br /&gt;
&lt;br /&gt;
* '''[tunnel]''' - a [[DirectActionsWML#.5Btunnel.5D|tunnel tag]] (without the remove key) defining the tunneling source and target hexes, and maybe other conditions. (It automatically applies only to the unit with the ability.)  You may use $teleport_unit inside the [tunnel][source] and [tunnel][target] tag for filtering purposes.&lt;br /&gt;
&lt;br /&gt;
=== Extra tags and keys used by weapon specials as abilities ===&lt;br /&gt;
&lt;br /&gt;
* {{anchor|filter_student|'''[filter_student]'''}}: {{DevFeature1.15|0}} If present, only the unit matching this filter, either the possessor of the ability if affect_self=yes, or an adjacent unit matching '''[filter_adjacent]''' will be affected. &lt;br /&gt;
* '''[filter_adjacent_student]''': {{DevFeature1.19|10}} if an adjacent unit to student does not match this filter, the ability will not be active and no-one will receive its affects. Takes extra keys ''adjacent'', ''count'', ''is_enemy'', just like in a [[StandardUnitFilter]], with the one difference that, in the absence of a specified ''count'', all listed directions must match (so, with two directiones eg ''adjacent=n,s'', the default is ''count=2''). In fact, it's really a shorthand for a [filter_adjacent] nested within [filter_student]. The variables $this_unit and $other_unit both work as you'd expect. Multiple [filter_adjacent_student] can be provided, all of which must pass for the ability to activate.&lt;br /&gt;
** '''radius''': {{DevFeature1.19|13}} determines the distance of units that can be filtered and not just adjacent units, '''radius''' is set to 1 by default. {{DevFeature1.19|18}} '''[filter_adjacent_student]''' is removed because having multiple shorthands requires giving them specific names for abilities used as weapons, and it's even simpler to use the [[StandardUnitFilter]].&lt;br /&gt;
* '''[filter_adjacent_student_location]''': {{DevFeature1.19|10}} like [filter_adjacent_student], but filters on locations instead of units. This is a shorthand for [filter_student][filter_location][filter_adjacent_location]. {{DevFeature1.19|18}} '''[filter_adjacent_student_location]''' is removed because having multiple shorthands requires giving them specific names for abilities used as weapons, and it's even simpler to use the [[StandardUnitFilter]].&lt;br /&gt;
* '''overwrite_specials''': {{DevFeature1.15|13}} If present, allows a special abilities weapon with a numerical value to impose its value and ignore values of abilities or specials of the same type. If '''overwrite_specials=one_side''', the specials and abilities used by the opponent of the unit affected by the ability with this key and applied to it will not be affected. If '''overwrite_specials=both_sides''', all non-key-carrying abilities and all specials of the same type affecting the recipient unit will be affected, even if used by the opponent (used in the macro FORCE_CHANCE_TO_HIT).&lt;br /&gt;
* {{anchor|overwrite|'''[overwrite]'''}}: {{DevFeature1.17|22}} Part of '''overwrite_specials'''. Allows more flexibility in determining which specials should take priority over other specials of the same type.&lt;br /&gt;
** '''priority''': A numeric value to use when determining which special should be used if multiple specials of the same type have the '''overwrite_specials''' attribute. Default is 0.&lt;br /&gt;
** {{anchor|filter_specials|'''[experimental_filter_specials]'''}}: [[StandardAbilityFilter]] Further attributes to filter specials by to determine if it should take priority over other specials. Accepts the same attributes as [experimental_filter_ability].&lt;br /&gt;
** '''description_affected''': {{DevFeature1.17|13}} becomes the '''description''' of the weapon special, without changing the '''description''' of the ability&lt;br /&gt;
** '''name_affected''': {{DevFeature1.17|13}} becomes the '''name''' of the weapon special, without changing the '''name''' of the ability&lt;br /&gt;
* Other keys and tags appropriate to the specific weapon special.&lt;br /&gt;
&lt;br /&gt;
=== Macros for common abilities ===&lt;br /&gt;
&lt;br /&gt;
[https://www.wesnoth.org/macro-reference.html#file:abilities.cfg macro reference]&lt;br /&gt;
* ABILITY_AMBUSH&lt;br /&gt;
* ABILITY_CURES&lt;br /&gt;
* ABILITY_HEALS&lt;br /&gt;
* ABILITY_ILLUMINATES&lt;br /&gt;
* ABILITY_LEADERSHIP_LEVEL_1 to ABILITY_LEADERSHIP_LEVEL_5&lt;br /&gt;
* {{DevFeature1.13|2}} ABILITY_LEADERSHIP (replaces the above leadership macros, which are now deprecated)&lt;br /&gt;
* ABILITY_NIGHTSTALK&lt;br /&gt;
* ABILITY_REGENERATES&lt;br /&gt;
* ABILITY_SKIRMISHER&lt;br /&gt;
* ABILITY_STEADFAST&lt;br /&gt;
* ABILITY_SUBMERGE&lt;br /&gt;
* ABILITY_TELEPORT&lt;br /&gt;
&lt;br /&gt;
== The ''[specials]'' tag ==&lt;br /&gt;
&lt;br /&gt;
The '''[specials]''' tag goes inside the '''[attack]''' tag. It can contain the following tags:&lt;br /&gt;
&lt;br /&gt;
* '''[attacks]''': modifies the number of attacks of a weapon, in using '''value''', '''add''', '''sub''', '''multiply''' or '''divide''' attributes&lt;br /&gt;
* '''[berserk]''': pushes the attack for more than one combat round, using '''value''' attribute, '''value''' is 1 by default&lt;br /&gt;
* '''[chance_to_hit]''': modifies the chance to hit of a weapon, using same standard numerical attributes as '''[attacks]'''&lt;br /&gt;
* '''[damage]''': modifies the damage of a weapon, using same attributes as '''[attacks]''' and '''[chance_to_hit]'''&lt;br /&gt;
* '''[damage_type]''' {{DevFeature1.17|23}}: changes the damage type of a weapon&lt;br /&gt;
* '''[defense]''' {{DevFeature1.19|15}}: modifies the chances of being hit by the opponent's weapon, this value can be modified by the parry attribute, the accuracy attribute of the opponent's weapon, or by their special weapon '''[chance_to_hit]'''. Be careful, the more you increase the value, the less chance the opponent has of hitting you. Using same standard numerical attributes as '''[attacks]''' {{DevFeature1.19|16}} [defense] is no longer a weapon special but an ability.&lt;br /&gt;
* '''[disable]''': disables the weapon&lt;br /&gt;
* '''[drains]''': heals the attacker '''value''' percentage of the damage dealt, using same attributes as '''[attacks]''' and '''[chance_to_hit]''', '''value''' is 50 by default&lt;br /&gt;
* '''[firststrike]''': forces the weapon to always strike first&lt;br /&gt;
* '''[heal_on_hit]''': heals the attacker when an attack connects, using same attributes as '''[attacks]''' and '''[chance_to_hit]''', '''value''' is 0 by default&lt;br /&gt;
* '''[petrifies]''': turns the target to stone&lt;br /&gt;
* '''[plague]''': when used to kill an enemy, a friendly unit takes its place&lt;br /&gt;
* '''[poison]''': poisons the target&lt;br /&gt;
* '''[slow]''': slows the target&lt;br /&gt;
* '''[swarm]''': number of strikes decreases as the unit loses hitpoints&lt;br /&gt;
Any other tag is valid, but will result in a special that does nothing but report it is there.&lt;br /&gt;
&lt;br /&gt;
=== Common keys and tags for every weapon special ===&lt;br /&gt;
&lt;br /&gt;
{{DevFeature1.13|?}} All keys inside any weapon special that expects a numeric value will also accept formulas using [[Wesnoth Formula Language]]. In order to use a formula in these keys, you must enclose it in parentheses.&lt;br /&gt;
&lt;br /&gt;
* '''name''': the (translatable) name of the special. If omitted, the special will be hidden from the player.&lt;br /&gt;
* '''name_inactive''': the (translatable) name of the special when inactive. Defaults to ''name'' if not specified; if the special is supposed to be not displayed when inactive, you must explicitly set ''name_inactive'' to an empty string (nothing after the equals sign).&lt;br /&gt;
* '''description''': the (translatable) description of the special.&lt;br /&gt;
* '''description_inactive''': the (translatable) description of the special when inactive. Defaults to ''description'' if not specified.&lt;br /&gt;
* '''special_note''' {{DevFeature1.15|14}} Translatable string, which will be displayed in the unit’s help. See also [[UnitTypeWML#Special_Notes]].&lt;br /&gt;
* '''id''': this ability will not be cumulative with other specials using this id.&lt;br /&gt;
* '''unique_id''': {{DevFeature1.19|18}} A unique identifier for this weapon special, used for the registry under [[UnitsWML#.5Bweapon_specials.5D|[units][weapon_specials]]]. If not defined, falls back to '''id'''. Used to add this weapon special via '''[unit_type][attack]specials_list''', or via [[EffectWML]].&lt;br /&gt;
* '''active_on''': one of '''defense''' or '''offense'''; if left out, the special is active on both.&lt;br /&gt;
* '''apply_to''': one of '''self''','''opponent''','''attacker''','''defender''','''both''' (default: ''self''). Determines who the effects of this special are applied to.&lt;br /&gt;
* '''[filter_adjacent]''': if an adjacent unit does not match this filter, the special will not be active and no-one will receive its effects. Takes extra keys ''adjacent'', ''count'', ''is_enemy'', just like in a [[StandardUnitFilter]]. In fact, it's really a shorthand for a [filter_adjacent] nested within [filter_self], with the one difference that, in the absence of a specified ''count'', all listed directions must match (so, with two directiones eg ''adjacent=n,s'', the default is ''count=2''). The variables $this_unit and {{DevFeature1.13|2}} $other_unit both work as you'd expect. Multiple [filter_adjacent] can be provided, all of which must pass for the ability to activate. {{DevFeature1.19|18}} '''filter_adjacent''' is deprecated and will likely be removed in version 1.21, since a version already exists in the [[StandardUnitFilter]] and ''count'' is no longer required.&lt;br /&gt;
* '''[filter_adjacent_location]''': like [filter_adjacent], but filters on locations instead of units. This is a shorthand for [filter_self][filter_location][filter_adjacent_location]. {{DevFeature1.19|18}} '''filter_adjacent_location''' is deprecated and will likely be removed in version 1.21, since a version already exists in the [[StandardUnitFilter]].&lt;br /&gt;
* {{anchor|filter_self|'''[filter_self]'''}}: the special will only be active if the owner matches this [[StandardUnitFilter]] (SUF).&lt;br /&gt;
** '''[filter_weapon]''': a [[FilterWML#Filtering_Weapons|standard weapon filter]], including special=.&lt;br /&gt;
** '''$other_unit''': {{DevFeature1.13|2}} The special variable $other_unit refers to the opponent.&lt;br /&gt;
* {{anchor|filter_opponent|'''[filter_opponent]'''}}: the special will only be active if the opponent matches this SUF.&lt;br /&gt;
** '''[filter_weapon]''': a [[FilterWML#Filtering_Weapons|standard weapon filter]], including special=.&lt;br /&gt;
** '''$other_unit''': {{DevFeature1.13|2}} The special variable $other_unit refers to the unit that owns the weapon.&lt;br /&gt;
* {{anchor|filter_attacker|'''[filter_attacker]'''}}: the special will only be active if the attacker matches this SUF.&lt;br /&gt;
** '''[filter_weapon]''': a [[FilterWML#Filtering_Weapons|standard weapon filter]], including special=.&lt;br /&gt;
** '''$other_unit''': {{DevFeature1.13|2}} The special variable $other_unit refers to the defender.&lt;br /&gt;
* {{anchor|filter_defender|'''[filter_defender]'''}} the special will only be active if the defender matches this SUF.&lt;br /&gt;
** '''[filter_weapon]''': a [[FilterWML#Filtering_Weapons|standard weapon filter]], including special=.&lt;br /&gt;
** '''$other_unit''': {{DevFeature1.13|2}} The special variable $other_unit refers to the attacker.&lt;br /&gt;
* '''overwrite_specials''': if equal to 'one_side', then only this unit's specials are evaluated. If equal to 'both_sides', then both this unit's specials and any of the opponent's weapon specials that affect this unit are evaluated. If a special with this attribute is active, it will take precedence over any other specials of the same type that do not have this attribute. Don't applied to boolean weapon special like [poison] ,[slow], [firststrike] or [petrifies].&lt;br /&gt;
* '''[overwrite]''': {{DevFeature1.17|22}} Allows more flexibility in determining which specials should take priority over other specials of the same type.&lt;br /&gt;
** '''priority''': A numeric value to use when determining which special should be used if multiple specials of the same type have the '''overwrite_specials''' attribute. Default is 0.&lt;br /&gt;
** '''[experimental_filter_specials]''': [[StandardAbilityFilter]] Further attributes to filter specials by to determine if it should take priority over other specials. Accepts the same attributes as [experimental_filter_ability], {{DevFeature1.19|5}} [experimental_filter_specials] deprecated, use [filter_specials] instead.&lt;br /&gt;
* '''[event]''': [[EventWML]]. {{DevFeature1.19|4}} An [event] to be included into any scenario where a unit with this weapon special appears in. Note that such events get included when a unit with this weapon special first appears in the scenario, not automatically when the scenario begins (meaning that ''name=prestart'' events, for example, would usually never trigger). See [[WML_Abilities|WML Abilities]]. Shortcut of [unit_type][event].&lt;br /&gt;
&lt;br /&gt;
=== Common keys and tags for specials with a value ===&lt;br /&gt;
&lt;br /&gt;
The '''[damage]''', '''[attacks]''', and '''[chance_to_hit]''' specials take values that specify how those specials modify their respective base values. The '''[drains]''' special takes a value specifying the percentage of damage drained (default 50) and '''[heal_on_hit]''' takes the amount to heal (default 0; negative values will harm the attacker, but not kill). &lt;br /&gt;
&lt;br /&gt;
* '''value''': the value to be used. Available inside translatable strings as '''$value'''.&lt;br /&gt;
* '''add''': the number to add to the base value. Note the interaction with '''sub''' in [[#Common_calculations]]. Available inside translatable strings as '''$add'''.&lt;br /&gt;
* '''sub''': the number to subtract from the base value. Available inside translatable strings as '''$sub'''.&lt;br /&gt;
* '''multiply''': this multiplies the base value. Available inside translatable strings as '''$multiply'''.&lt;br /&gt;
* '''divide''': this divides the base value. Available inside translatable strings as '''$divide'''.&lt;br /&gt;
* '''max_value''': {{DevFeature1.19|2}}  maximum special value. Default: no limit. Available inside translatable strings as '''$max_value'''.&lt;br /&gt;
* '''min_value''': {{DevFeature1.19|2}}  minimum special value. Default: no limit. Available inside translatable strings as '''$min_value'''.&lt;br /&gt;
* '''priority''': {{DevFeature1.19|19}}  This attribute allows a higher-priority special to use as its base the value returned by a lower-priority special of the same type. Default: 0.&lt;br /&gt;
* '''cumulative''': if set to 'yes', this special will be cumulative with the base value.&lt;br /&gt;
* '''backstab''': if set to 'yes', this special will only apply to the attacker, and only when there is an enemy on the target's opposite side (i.e. when the standard backstab special applies). {{DevFeature1.13|2}} This is now deprecated. The same functionality can be achieved with a [filter_adjacent] in [filter_opponent]; see the implementation of the default backstab special for details.&lt;br /&gt;
* '''[filter_base_value]''': filters on the value before any modifications; uses the keys '''equals''', '''not_equals''', '''less_than''', '''greater_than''', '''less_than_equal_to''', '''greater_than_equal_to'''.&lt;br /&gt;
&lt;br /&gt;
==== Common calculations ====&lt;br /&gt;
&lt;br /&gt;
Several abilities and weapon specials take the keys '''add''', '''sub''', '''multiply''' and '''divide'''.&lt;br /&gt;
&lt;br /&gt;
{{DevFeature1.19|4}} '''add''' and '''sub''' work independently.&lt;br /&gt;
&lt;br /&gt;
Prior to 1.19.4:&lt;br /&gt;
&lt;br /&gt;
* If '''add''' and '''sub''' are used in the same ability, the '''add''' is ignored&lt;br /&gt;
* If '''add''' and '''sub''' are used in separate abilities with the same id, or with the default id that's used when no id is specified, then the order in which the abilities are encountered controls the calculation, which may change depending on units' positions on the map.&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[damage_type]'' special ===&lt;br /&gt;
&lt;br /&gt;
{{DevFeature1.17|23}}&lt;br /&gt;
&lt;br /&gt;
* '''replacement_type''': replaces the attack type with the specified type when [damage_type] is active.&lt;br /&gt;
* '''alternative_type''': add a second type of attack to the existing type, it is always the one of the two which will do the most damage to the opponent which will be used.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' In 1.18, alternative_type may be stronger than expected, as the damage calculations sometimes ignore [resistance] abilities. This is a known bug, which occurs deterministically and will be left unfixed in 1.18.x to prevent Out Of Sync errors.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' If a [damage_type] special includes a [filter_weapon]type=, that filter is tested against the base type of the weapon, ignoring all [damage_type] specials.&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[berserk]'' special ===&lt;br /&gt;
&lt;br /&gt;
* '''value''': the maximum number of combat rounds (default 1).&lt;br /&gt;
* '''cumulative''': if set to 'yes', this special will be cumulative with other active berserk specials (on the current combatant, not with an opponent's berserk).&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[plague]'' special ===&lt;br /&gt;
&lt;br /&gt;
* '''type''': the unit type to be spawned on kill. When not specified, the default is the unit type of the unit doing the plaguing. This value can be used via the PO variable '''$type''' inside translatable string keys, such as '''description'''.&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[swarm]'' special ===&lt;br /&gt;
&lt;br /&gt;
* '''swarm_attacks_max''': the maximum number of attacks for the swarm. Defaults to the base number of attacks modified by any applicable [attacks] specials. If this is specified, then the base number of attacks is ignored.&lt;br /&gt;
* '''swarm_attacks_min''': the minimum number of attacks for the swarm. Defaults to zero. This can be set higher than swarm_attacks_max to cause a unit to gain attacks as health decreases.&lt;br /&gt;
The ratio of the unit's current to maximum hit points will be used to scale the number of attacks between these two values.&lt;br /&gt;
&lt;br /&gt;
Prior to version 1.11, a [swarm] special will cause [attacks] specials to be ignored. In 1.11 and later, [attacks] specials are applied before [swarm].&lt;br /&gt;
&lt;br /&gt;
=== Macros for common weapon specials ===&lt;br /&gt;
&lt;br /&gt;
[https://www.wesnoth.org/macro-reference.html#file:weapon_specials.cfg macro reference]&lt;br /&gt;
* WEAPON_SPECIAL_BACKSTAB&lt;br /&gt;
* WEAPON_SPECIAL_BERSERK&lt;br /&gt;
* WEAPON_SPECIAL_CHARGE&lt;br /&gt;
* WEAPON_SPECIAL_DRAIN&lt;br /&gt;
* WEAPON_SPECIAL_FIRSTSTRIKE&lt;br /&gt;
* WEAPON_SPECIAL_MAGICAL&lt;br /&gt;
* WEAPON_SPECIAL_MARKSMAN&lt;br /&gt;
* WEAPON_SPECIAL_PLAGUE&lt;br /&gt;
* WEAPON_SPECIAL_PLAGUE_TYPE TYPE&lt;br /&gt;
* WEAPON_SPECIAL_POISON&lt;br /&gt;
* WEAPON_SPECIAL_SLOW&lt;br /&gt;
* WEAPON_SPECIAL_STONE&lt;br /&gt;
* WEAPON_SPECIAL_SWARM&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[UnitTypeWML]]&lt;br /&gt;
* [[SingleUnitWML]]&lt;br /&gt;
* [[ReferenceWML]]&lt;br /&gt;
&lt;br /&gt;
[[Category:WML Reference]]&lt;/div&gt;</summary>
		<author><name>Octalot</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=AbilitiesWML&amp;diff=74511</id>
		<title>AbilitiesWML</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=AbilitiesWML&amp;diff=74511"/>
		<updated>2025-09-11T18:29:39Z</updated>

		<summary type="html">&lt;p&gt;Octalot: /* Extra tags and keys used by weapon specials as abilities */ Document description_affected= and name_affected=&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WML Tags}}&lt;br /&gt;
==  Abilities and their effects ==&lt;br /&gt;
&lt;br /&gt;
There are two types of abilities: ones that apply to units (called ''abilities'') and ones that only apply when using a particular attack (called ''specials'' or ''weapon specials'').  A unit may have multiple abilities and an attack can have multiple specials.&lt;br /&gt;
&lt;br /&gt;
Each ability or special defines an effect based on one to three units. Most abilities apply to a single unit, and '''[filter_self]''' can be used to determine when the ability is active. Weapon specials apply to two units, which can be filtered either as &amp;quot;attacker&amp;quot; and &amp;quot;defender&amp;quot; (with the obvious meaning) or as &amp;quot;self&amp;quot; and &amp;quot;other&amp;quot; – the unit that possesses the special, and that unit's opponent. When filtering on the &amp;quot;other&amp;quot; unit, you use '''[filter_opponent]'''.&lt;br /&gt;
&lt;br /&gt;
Leadership-style abilities are a more complex case, as they involve three units. Like a weapon special, there is an attacker and defender, but there is also a third unit that could be referred to as the &amp;quot;teacher&amp;quot;. The &amp;quot;teacher&amp;quot; is the unit that possesses the ability, so it is referred to as &amp;quot;self&amp;quot; in the ability. A leadership ability works by temporarily granting a weapon special to either the attacker or the defender. The unit that benefits from this is referred to as the &amp;quot;student&amp;quot;, while the unit that does not benefit is simply the &amp;quot;other&amp;quot; unit. When filtering on the &amp;quot;other&amp;quot; unit, you use '''[filter_opponent]''', while the student can be filtered with '''[filter_student]'''.&lt;br /&gt;
&lt;br /&gt;
== The ''[abilities]'' tag ==&lt;br /&gt;
&lt;br /&gt;
The following tags are used to describe an ability in WML:&lt;br /&gt;
&lt;br /&gt;
* '''[heals]''': modifies the hitpoints of a unit at the beginning of the healer's turn&lt;br /&gt;
* '''[regenerate]''': modifies the hitpoints of a unit at the beginning of the unit's turn&lt;br /&gt;
* '''[resistance]''': modifies the resistance of a unit to damage&lt;br /&gt;
* '''[leadership]''': modifies the damage of a unit&lt;br /&gt;
* '''[skirmisher]''': negates enemy zones of control&lt;br /&gt;
* '''[illuminates]''': modifies the time of day adjacent to the affected units&lt;br /&gt;
* '''[teleport]''': allows the unit to teleport&lt;br /&gt;
* '''[hides]''': renders the unit invisible to enemies&lt;br /&gt;
* {{DevFeature1.15|0}} All [[#The_.5Bspecials.5D_tag|weapon specials]] except for '''[plague]''', '''[heal_on_hit]''', and '''[swarm]''' can be placed in the '''[abilities]''' tag. These [[#Extra_tags_and_keys_used_by_weapon_specials_as_abilities|&amp;quot;weapon specials as abilities&amp;quot;]] will give the weapon special to all attacks the unit has.&lt;br /&gt;
* Any other tag is valid (for example '''[dummy]'''), but will result in an ability that does nothing but report it's there. '''Note:''' a dummy ability must have an id for the name and description to display.&lt;br /&gt;
* {{DevFeature1.15|3}} All the engine [[#The_.5Bspecials.5D_tag|weapon specials]] can be placed in the [abilities] tag now.&lt;br /&gt;
&lt;br /&gt;
=== Available formula variables in Abilities and Weapon Specials  ===&lt;br /&gt;
&lt;br /&gt;
{{DevFeature1.15|?}} When using formulas in abilities and weapon specials, the following formula variables are available:&lt;br /&gt;
* '''self''': (unit) the unit that has the ability&lt;br /&gt;
* '''student''': (unit) for leadership-like abilities this is the unit that is adjacent to the unit that has the ability; if affect_self=yes, this is also unit who has ability.&lt;br /&gt;
* '''attacker''': (unit) for attack-related abilities and weapon specials, this is the attacking unit during the attack.&lt;br /&gt;
* '''defender''': (unit) for attack-related abilities and weapon specials, this is the defending unit during the attack.&lt;br /&gt;
* '''other''': (unit) the unit whose stats get modified from the ability. For abilities without 'apply_to=opponent' this is always the same as 'student'.&lt;br /&gt;
&lt;br /&gt;
=== Common keys and tags for every ability ===&lt;br /&gt;
&lt;br /&gt;
{{DevFeature1.13|?}} All keys inside any ability that expects a numeric value will also accept formulas using &lt;br /&gt;
[[Wesnoth Formula Language]]. In order to use a formula in these keys, you must enclose it in parentheses. However, do '''not''' precede those parentheses with a dollar sign like &amp;lt;code&amp;gt;$(...)&amp;lt;/code&amp;gt;, since that will erase the &amp;lt;tt&amp;gt;self&amp;lt;/tt&amp;gt; variable.&lt;br /&gt;
&lt;br /&gt;
* '''name''': the (translatable) name of the ability. If omitted, the ability will be a hidden ability.&lt;br /&gt;
* '''female_name''': the (translatable) name of the ability when possessed by a female unit. Defaults to ''name'' if not specified.&lt;br /&gt;
* '''name_inactive''': the (translatable) name of the ability when inactive. Defaults to ''name'' if not specified; if the ability is supposed to be not displayed when inactive, you must explicitly set ''name_inactive'' to an empty string (nothing after the equals sign).&lt;br /&gt;
* '''female_name_inactive''': the (translatable) name of the ability when inactive and possessed by a female unit. Defaults to ''name_inactive'' if not specified. You should thus set ''female_name'' as well!&lt;br /&gt;
* '''description''': the (translatable) description of the ability.&lt;br /&gt;
* '''description_inactive''': the (translatable) description of the ability when inactive. Defaults to ''description'' if not specified.&lt;br /&gt;
* '''special_note''' {{DevFeature1.15|14}} Translatable string, which will be displayed in the unit’s help. See also [[UnitTypeWML#Special_Notes]].&lt;br /&gt;
* '''affect_self''': if equal to 'yes' (default), the ability will affect the unit that has it.&lt;br /&gt;
* '''affect_allies''': if equal to 'yes', the ability will affect units from the same and allied sides in the specified adjacent hexes. If set to 'no' it will not affect own or allied sides. If not set (default) it will affect units on the same side but not from allied sides.&lt;br /&gt;
* '''affect_enemies''': if equal to 'yes' (default is 'no'), the ability will affect enemies in the specified adjacent hexes.&lt;br /&gt;
* '''cumulative''': if set to 'yes', this ability will be cumulative with the base value for this ability. ''Beware of the bug with cumulative leadership in 1.16 https://github.com/wesnoth/wesnoth/issues/6466 , more info see below, in &amp;quot;Extra keys used by the ''leadership'' ability&amp;quot; section''. {{DevFeature1.17|5}}, bug fixed.&lt;br /&gt;
* '''id''': this ability will not be cumulative with other abilities using this id. Must be present if cumulative is anything other than 'yes'.&lt;br /&gt;
* '''halo_image''': {{DevFeature1.17|22}} if used, the halo specified showed on unit affected by ability.&lt;br /&gt;
* '''overlay_image''': {{DevFeature1.17|22}} if used, the overlay specified showed on unit affected by ability.&lt;br /&gt;
* '''halo_image_self''': {{DevFeature1.17|22}} if used, the halo specified showed on unit who has ability when active.&lt;br /&gt;
* '''overlay_image_self''': {{DevFeature1.17|22}} if used, the overlay specified showed on unit who has ability when active.&lt;br /&gt;
* '''[filter]''': [[StandardUnitFilter]] If the unit owning the ability does not match this filter, the ability will be inactive.&lt;br /&gt;
* {{anchor|affect_adjacent|'''[affect_adjacent]'''}}: an adjacent unit that does not match this filter will not receive its effects. There can be multiple [affect_adjacent] tags in a single ability; a unit needs to match any one of these to receive the effects. The side requirement of matching units is defined by the '''affect_allies''' and '''affect_enemies''' keys. If there are no [affect_adjacent] tags, then no adjacent units will receive the effects.&lt;br /&gt;
** '''adjacent''': a comma separated list of any combination of these directions: '''n''','''ne''','''se''','''s''','''sw''','''nw'''. (See [[StandardLocationFilter#Directions|notes]])&lt;br /&gt;
** '''[filter]''': a [[StandardUnitFilter]]. {{DevFeature1.13|2}} The variable $other_unit refers to the unit owning the ability.&lt;br /&gt;
** '''radius''': {{DevFeature1.19|13}} set to 1 by default, it determines the range within which units can be affected beyond immediately adjacent units, if the value is equal to 'full-map', the area is the entire map.&lt;br /&gt;
* '''[filter_self]''': if the owner of the ability does not match this filter, it will not receive the effects of the ability. [filter_self] takes a [[StandardUnitFilter]] as argument.&lt;br /&gt;
* '''[filter_adjacent]''': if an adjacent unit does not match this filter, the ability will not be active and no-one will receive its affects. Takes extra keys ''adjacent'', ''count'', ''is_enemy'', just like in a [[StandardUnitFilter]], with the one difference that, in the absence of a specified ''count'', all listed directions must match (so, with two directiones eg ''adjacent=n,s'', the default is ''count=2''). In fact, it's really a shorthand for a [filter_adjacent] nested within [filter]. The variables $this_unit and {{DevFeature1.13|2}} $other_unit both work as you'd expect. Multiple [filter_adjacent] can be provided, all of which must pass for the ability to activate.&lt;br /&gt;
* '''[filter_adjacent_location]''': like [filter_adjacent], but filters on locations instead of units. This is a shorthand for [filter][filter_location][filter_adjacent_location].&lt;br /&gt;
* {{anchor|filter_base_value|'''[filter_base_value]'''}}: filters on the value before any modifications; uses the keys '''equals''', '''not_equals''', etc. If several keys are used all have to match.&lt;br /&gt;
* '''[event]''': [[EventWML]]. {{DevFeature1.19|4}} An [event] to be included into any scenario where a unit with this ability appears in. Note that such events get included when a unit with this ability first appears in the scenario, not automatically when the scenario begins (meaning that ''name=prestart'' events, for example, would usually never trigger). See [[WML_Abilities|WML Abilities]]. Shortcut of [unit_type][event].&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[heals]'' ability ===&lt;br /&gt;
&lt;br /&gt;
* '''value''': the amount healed.&lt;br /&gt;
* '''poison''': can be one of ''slowed'' or ''cured''. ''slowed'' means poison will not take effect for adjacent units (it's not related to the weapon special &amp;quot;slows&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[regenerate]'' ability ===&lt;br /&gt;
&lt;br /&gt;
* '''value''': the amount healed.&lt;br /&gt;
* '''poison''': can be one of ''slowed'' or ''cured''.&lt;br /&gt;
&lt;br /&gt;
=== Extra keys and tags used by the ''[resistance]'' ability ===&lt;br /&gt;
&lt;br /&gt;
* '''value''': set resistance to this value.&lt;br /&gt;
* '''max_value''': maximum resistance value. Default: 0%. {{DevFeature1.17|24}} Default: no limit.&lt;br /&gt;
* '''min_value''': {{DevFeature1.19|0}} minimum resistance value. Default: no limit.&lt;br /&gt;
* '''add''': adds to resistance. Note the interaction with '''sub''' in [[#Common_calculations]].&lt;br /&gt;
* '''sub''': subtracts from resistance.&lt;br /&gt;
* '''multiply''': multiplies resistance value. &lt;br /&gt;
* '''divide''': divides resistance value.&lt;br /&gt;
* '''apply_to''': a list of damage types; if left out, the ability applies to all types.&lt;br /&gt;
* '''active_on''': one of 'defense' or 'offense'; if left out, the ability is active on both.&lt;br /&gt;
These keys affect the actual resistance (e.g. -20%), not the damage modifier normally used in [resistance] (e.g. 120).&lt;br /&gt;
* '''[filter_weapon]''': {{DevFeature1.15|0}} If present, the resistance ability only takes effect when the owner of the ability uses a matching weapon.&lt;br /&gt;
* '''[filter_second_weapon]''': {{DevFeature1.15|0}} If present, the resistance ability only takes effect when the opponent uses a matching weapon.&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[leadership]'' ability ===&lt;br /&gt;
&lt;br /&gt;
* '''value''': the percentage bonus to damage.&lt;br /&gt;
* '''add''': the cumulative percentage bonus to damage. Note the interaction with '''sub''' in [[#Common_calculations]].&lt;br /&gt;
* '''sub''': the cumulative percentage bonus subtracted to damage.&lt;br /&gt;
* '''multiply''': multiplies resistance value. &lt;br /&gt;
* '''divide''': divides resistance value.&lt;br /&gt;
''Note:'' cumulative leadership with '''cumulative=yes''' and '''value=''' doesn't work in 1.16 (but fixed in 1.17.12 and later). To work around use '''add=''' or '''sub=''' key (it doesn't require cumulative) (https://github.com/wesnoth/wesnoth/issues/6466 ). If you want each instance of a ''[leadership]'' with the same id to be added you will be able to reuse '''cumulative=yes''' in 1.17.12 and later, otherwise, if you want to add the value of another ''[leadership]'' only once even with the same id in several copies, use '''add'''.&lt;br /&gt;
* '''[filter_weapon]''': {{DevFeature1.15|0}} If present, the leadership ability only takes effect when the owner of the ability uses a matching weapon.&lt;br /&gt;
* '''[filter_second_weapon]''': {{DevFeature1.15|0}} If present, the leadership ability only takes effect when the opponent uses a matching weapon.&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[illuminates]'' ability ===&lt;br /&gt;
&lt;br /&gt;
Because this ability changes the terrain instead of units on it, affect_self, affect_allies, affect_enemies and [filter_adjacent] have no effect.&lt;br /&gt;
* '''value''': the percentage bonus to lawful units. Units with '''alignment=lawful''' do +''value'' % damage when under the influence of a unit with this ability. Units with '''alignment=chaotic''' do -''value'' % damage. Units with '''alignment=neutral''' are unaffected by this ability. Units with '''alignment=liminal''' do -(abs(''value'')) % damage. ''value'' can be a negative number; this is useful if you want to give Chaotic units an advantage instead of Lawful ones. &lt;br /&gt;
* '''add''': the cumulative percentage bonus to damage. Note the interaction with '''sub''' in [[#Common_calculations]].&lt;br /&gt;
* '''sub''': the cumulative percentage bonus subtracted to damage.&lt;br /&gt;
* '''multiply''': multiplies resistance value. &lt;br /&gt;
* '''divide''': divides resistance value.&lt;br /&gt;
* '''max_value''': the maximum percentage bonus given. Cannot be less than 0. Defaults to 0 if not present.&lt;br /&gt;
* '''min_value''': the minimum percentage bonus given. Cannot be greater than 0. Defaults to 0 if not present.&lt;br /&gt;
* '''radius''': {{DevFeature1.19|15}} defines the radius of the ability, by default only the terrain the user is on and adjacent hexes are affected, but this can now be extended to a radius defined by '''radius''' ; if '''radius'''=all_map then the whole map will be affected.&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[hides]'' ability ===&lt;br /&gt;
&lt;br /&gt;
* '''alert''': the displayed text when the unit is discovered. Default &amp;quot;Ambushed!&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Extra tags used by the ''[teleport]'' ability ===&lt;br /&gt;
&lt;br /&gt;
* '''[tunnel]''' - a [[DirectActionsWML#.5Btunnel.5D|tunnel tag]] (without the remove key) defining the tunneling source and target hexes, and maybe other conditions. (It automatically applies only to the unit with the ability.)  You may use $teleport_unit inside the [tunnel][source] and [tunnel][target] tag for filtering purposes.&lt;br /&gt;
&lt;br /&gt;
=== Extra tags and keys used by weapon specials as abilities ===&lt;br /&gt;
&lt;br /&gt;
* {{anchor|filter_student|'''[filter_student]'''}}: {{DevFeature1.15|0}} If present, only the unit matching this filter, either the possessor of the ability if affect_self=yes, or an adjacent unit matching '''[filter_adjacent]''' will be affected. &lt;br /&gt;
* '''[filter_adjacent_student]''': {{DevFeature1.19|10}} if an adjacent unit to student does not match this filter, the ability will not be active and no-one will receive its affects. Takes extra keys ''adjacent'', ''count'', ''is_enemy'', just like in a [[StandardUnitFilter]], with the one difference that, in the absence of a specified ''count'', all listed directions must match (so, with two directiones eg ''adjacent=n,s'', the default is ''count=2''). In fact, it's really a shorthand for a [filter_adjacent] nested within [filter_student]. The variables $this_unit and $other_unit both work as you'd expect. Multiple [filter_adjacent_student] can be provided, all of which must pass for the ability to activate.&lt;br /&gt;
** '''radius''': {{DevFeature1.19|13}} determines the distance of units that can be filtered and not just adjacent units, '''radius''' is set to 1 by default.&lt;br /&gt;
* '''[filter_adjacent_student_location]''': {{DevFeature1.19|10}} like [filter_adjacent_student], but filters on locations instead of units. This is a shorthand for [filter_student][filter_location][filter_adjacent_location].&lt;br /&gt;
* '''overwrite_specials''': {{DevFeature1.15|13}} If present, allows a special abilities weapon with a numerical value to impose its value and ignore values of abilities or specials of the same type. If '''overwrite_specials=one_side''', the specials and abilities used by the opponent of the unit affected by the ability with this key and applied to it will not be affected. If '''overwrite_specials=both_sides''', all non-key-carrying abilities and all specials of the same type affecting the recipient unit will be affected, even if used by the opponent (used in the macro FORCE_CHANCE_TO_HIT).&lt;br /&gt;
* {{anchor|overwrite|'''[overwrite]'''}}: {{DevFeature1.17|22}} Part of '''overwrite_specials'''. Allows more flexibility in determining which specials should take priority over other specials of the same type.&lt;br /&gt;
** '''priority''': A numeric value to use when determining which special should be used if multiple specials of the same type have the '''overwrite_specials''' attribute. Default is 0.&lt;br /&gt;
** {{anchor|filter_specials|'''[experimental_filter_specials]'''}}: [[StandardAbilityFilter]] Further attributes to filter specials by to determine if it should take priority over other specials. Accepts the same attributes as [experimental_filter_ability].&lt;br /&gt;
** '''description_affected''': {{DevFeature1.17|13}} becomes the '''description''' of the weapon special, without changing the '''description''' of the ability&lt;br /&gt;
** '''name_affected''': {{DevFeature1.17|13}} becomes the '''name''' of the weapon special, without changing the '''name''' of the ability&lt;br /&gt;
* Other keys and tags appropriate to the specific weapon special.&lt;br /&gt;
&lt;br /&gt;
=== Macros for common abilities ===&lt;br /&gt;
&lt;br /&gt;
[https://www.wesnoth.org/macro-reference.html#file:abilities.cfg macro reference]&lt;br /&gt;
* ABILITY_AMBUSH&lt;br /&gt;
* ABILITY_CURES&lt;br /&gt;
* ABILITY_HEALS&lt;br /&gt;
* ABILITY_ILLUMINATES&lt;br /&gt;
* ABILITY_LEADERSHIP_LEVEL_1 to ABILITY_LEADERSHIP_LEVEL_5&lt;br /&gt;
* {{DevFeature1.13|2}} ABILITY_LEADERSHIP (replaces the above leadership macros, which are now deprecated)&lt;br /&gt;
* ABILITY_NIGHTSTALK&lt;br /&gt;
* ABILITY_REGENERATES&lt;br /&gt;
* ABILITY_SKIRMISHER&lt;br /&gt;
* ABILITY_STEADFAST&lt;br /&gt;
* ABILITY_SUBMERGE&lt;br /&gt;
* ABILITY_TELEPORT&lt;br /&gt;
&lt;br /&gt;
== The ''[specials]'' tag ==&lt;br /&gt;
&lt;br /&gt;
The '''[specials]''' tag goes inside the '''[attack]''' tag. It can contain the following tags:&lt;br /&gt;
&lt;br /&gt;
* '''[attacks]''': modifies the number of attacks of a weapon, in using '''value''', '''add''', '''sub''', '''multiply''' or '''divide''' attributes&lt;br /&gt;
* '''[berserk]''': pushes the attack for more than one combat round, using '''value''' attribute, '''value''' is 1 by default&lt;br /&gt;
* '''[chance_to_hit]''': modifies the chance to hit of a weapon, using same standard numerical attributes as '''[attacks]'''&lt;br /&gt;
* '''[damage]''': modifies the damage of a weapon, using same attributes as '''[attacks]''' and '''[chance_to_hit]'''&lt;br /&gt;
* '''[damage_type]''' {{DevFeature1.17|23}}: changes the damage type of a weapon&lt;br /&gt;
* '''[defense]''' {{DevFeature1.19|15}}: modifies the chances of being hit by the opponent's weapon, this value can be modified by the parry attribute, the accuracy attribute of the opponent's weapon, or by their special weapon '''[chance_to_hit]'''. Be careful, the more you increase the value, the less chance the opponent has of hitting you. Using same standard numerical attributes as '''[attacks]'''&lt;br /&gt;
* '''[disable]''': disables the weapon&lt;br /&gt;
* '''[drains]''': heals the attacker '''value''' percentage of the damage dealt, using same attributes as '''[attacks]''' and '''[chance_to_hit]''', '''value''' is 50 by default&lt;br /&gt;
* '''[firststrike]''': forces the weapon to always strike first&lt;br /&gt;
* '''[heal_on_hit]''': heals the attacker when an attack connects, using same attributes as '''[attacks]''' and '''[chance_to_hit]''', '''value''' is 0 by default&lt;br /&gt;
* '''[petrifies]''': turns the target to stone&lt;br /&gt;
* '''[plague]''': when used to kill an enemy, a friendly unit takes its place&lt;br /&gt;
* '''[poison]''': poisons the target&lt;br /&gt;
* '''[slow]''': slows the target&lt;br /&gt;
* '''[swarm]''': number of strikes decreases as the unit loses hitpoints&lt;br /&gt;
Any other tag is valid, but will result in a special that does nothing but report it is there.&lt;br /&gt;
&lt;br /&gt;
=== Common keys and tags for every weapon special ===&lt;br /&gt;
&lt;br /&gt;
{{DevFeature1.13|?}} All keys inside any weapon special that expects a numeric value will also accept formulas using [[Wesnoth Formula Language]]. In order to use a formula in these keys, you must enclose it in parentheses.&lt;br /&gt;
&lt;br /&gt;
* '''name''': the (translatable) name of the special. If omitted, the special will be hidden from the player.&lt;br /&gt;
* '''name_inactive''': the (translatable) name of the special when inactive. Defaults to ''name'' if not specified; if the special is supposed to be not displayed when inactive, you must explicitly set ''name_inactive'' to an empty string (nothing after the equals sign).&lt;br /&gt;
* '''description''': the (translatable) description of the special.&lt;br /&gt;
* '''description_inactive''': the (translatable) description of the special when inactive. Defaults to ''description'' if not specified.&lt;br /&gt;
* '''special_note''' {{DevFeature1.15|14}} Translatable string, which will be displayed in the unit’s help. See also [[UnitTypeWML#Special_Notes]].&lt;br /&gt;
* '''id''': this ability will not be cumulative with other specials using this id.&lt;br /&gt;
* '''active_on''': one of '''defense''' or '''offense'''; if left out, the special is active on both.&lt;br /&gt;
* '''apply_to''': one of '''self''','''opponent''','''attacker''','''defender''','''both''' (default: ''self''). Determines who the effects of this special are applied to.&lt;br /&gt;
* '''[filter_adjacent]''': if an adjacent unit does not match this filter, the special will not be active and no-one will receive its effects. Takes extra keys ''adjacent'', ''count'', ''is_enemy'', just like in a [[StandardUnitFilter]]. In fact, it's really a shorthand for a [filter_adjacent] nested within [filter_self], with the one difference that, in the absence of a specified ''count'', all listed directions must match (so, with two directiones eg ''adjacent=n,s'', the default is ''count=2''). The variables $this_unit and {{DevFeature1.13|2}} $other_unit both work as you'd expect. Multiple [filter_adjacent] can be provided, all of which must pass for the ability to activate. &lt;br /&gt;
* '''[filter_adjacent_location]''': like [filter_adjacent], but filters on locations instead of units. This is a shorthand for [filter_self][filter_location][filter_adjacent_location].&lt;br /&gt;
* {{anchor|filter_self|'''[filter_self]'''}}: the special will only be active if the owner matches this [[StandardUnitFilter]] (SUF).&lt;br /&gt;
** '''[filter_weapon]''': a [[FilterWML#Filtering_Weapons|standard weapon filter]], including special=.&lt;br /&gt;
** '''$other_unit''': {{DevFeature1.13|2}} The special variable $other_unit refers to the opponent.&lt;br /&gt;
* {{anchor|filter_opponent|'''[filter_opponent]'''}}: the special will only be active if the opponent matches this SUF.&lt;br /&gt;
** '''[filter_weapon]''': a [[FilterWML#Filtering_Weapons|standard weapon filter]], including special=.&lt;br /&gt;
** '''$other_unit''': {{DevFeature1.13|2}} The special variable $other_unit refers to the unit that owns the weapon.&lt;br /&gt;
* {{anchor|filter_attacker|'''[filter_attacker]'''}}: the special will only be active if the attacker matches this SUF.&lt;br /&gt;
** '''[filter_weapon]''': a [[FilterWML#Filtering_Weapons|standard weapon filter]], including special=.&lt;br /&gt;
** '''$other_unit''': {{DevFeature1.13|2}} The special variable $other_unit refers to the defender.&lt;br /&gt;
* {{anchor|filter_defender|'''[filter_defender]'''}} the special will only be active if the defender matches this SUF.&lt;br /&gt;
** '''[filter_weapon]''': a [[FilterWML#Filtering_Weapons|standard weapon filter]], including special=.&lt;br /&gt;
** '''$other_unit''': {{DevFeature1.13|2}} The special variable $other_unit refers to the attacker.&lt;br /&gt;
* '''overwrite_specials''': if equal to 'one_side', then only this unit's specials are evaluated. If equal to 'both_sides', then both this unit's specials and any of the opponent's weapon specials that affect this unit are evaluated. If a special with this attribute is active, it will take precedence over any other specials of the same type that do not have this attribute. Don't applied to boolean weapon special like [poison] ,[slow], [firststrike] or [petrifies].&lt;br /&gt;
* '''[overwrite]''': {{DevFeature1.17|22}} Allows more flexibility in determining which specials should take priority over other specials of the same type.&lt;br /&gt;
** '''priority''': A numeric value to use when determining which special should be used if multiple specials of the same type have the '''overwrite_specials''' attribute. Default is 0.&lt;br /&gt;
** '''[experimental_filter_specials]''': [[StandardAbilityFilter]] Further attributes to filter specials by to determine if it should take priority over other specials. Accepts the same attributes as [experimental_filter_ability], {{DevFeature1.19|5}} [experimental_filter_specials] deprecated, use [filter_specials] instead.&lt;br /&gt;
* '''[event]''': [[EventWML]]. {{DevFeature1.19|4}} An [event] to be included into any scenario where a unit with this weapon special appears in. Note that such events get included when a unit with this weapon special first appears in the scenario, not automatically when the scenario begins (meaning that ''name=prestart'' events, for example, would usually never trigger). See [[WML_Abilities|WML Abilities]]. Shortcut of [unit_type][event].&lt;br /&gt;
&lt;br /&gt;
=== Common keys and tags for specials with a value ===&lt;br /&gt;
&lt;br /&gt;
The '''[damage]''', '''[attacks]''', and '''[chance_to_hit]''' specials take values that specify how those specials modify their respective base values. The '''[drains]''' special takes a value specifying the percentage of damage drained (default 50) and '''[heal_on_hit]''' takes the amount to heal (default 0; negative values will harm the attacker, but not kill). &lt;br /&gt;
&lt;br /&gt;
* '''value''': the value to be used. &lt;br /&gt;
* '''add''': the number to add to the base value. Note the interaction with '''sub''' in [[#Common_calculations]].&lt;br /&gt;
* '''sub''': the number to subtract from the base value.&lt;br /&gt;
* '''multiply''': this multiplies the base value.&lt;br /&gt;
* '''divide''': this divides the base value.&lt;br /&gt;
* '''cumulative''': if set to 'yes', this special will be cumulative with the base value.&lt;br /&gt;
* '''backstab''': if set to 'yes', this special will only apply to the attacker, and only when there is an enemy on the target's opposite side (i.e. when the standard backstab special applies). {{DevFeature1.13|2}} This is now deprecated. The same functionality can be achieved with a [filter_adjacent] in [filter_opponent]; see the implementation of the default backstab special for details.&lt;br /&gt;
* '''[filter_base_value]''': filters on the value before any modifications; uses the keys '''equals''', '''not_equals''', '''less_than''', '''greater_than''', '''less_than_equal_to''', '''greater_than_equal_to'''.&lt;br /&gt;
&lt;br /&gt;
==== Common calculations ====&lt;br /&gt;
&lt;br /&gt;
Several abilities and weapon specials take the keys '''add''', '''sub''', '''multiply''' and '''divide'''.&lt;br /&gt;
&lt;br /&gt;
{{DevFeature1.19|4}} '''add''' and '''sub''' work independently.&lt;br /&gt;
&lt;br /&gt;
Prior to 1.19.4:&lt;br /&gt;
&lt;br /&gt;
* If '''add''' and '''sub''' are used in the same ability, the '''add''' is ignored&lt;br /&gt;
* If '''add''' and '''sub''' are used in separate abilities with the same id, or with the default id that's used when no id is specified, then the order in which the abilities are encountered controls the calculation, which may change depending on units' positions on the map.&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[damage_type]'' special ===&lt;br /&gt;
&lt;br /&gt;
{{DevFeature1.17|23}}&lt;br /&gt;
&lt;br /&gt;
* '''replacement_type''': replaces the attack type with the specified type when [damage_type] is active.&lt;br /&gt;
* '''alternative_type''': add a second type of attack to the existing type, it is always the one of the two which will do the most damage to the opponent which will be used.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' In 1.18, alternative_type may be stronger than expected, as the damage calculations sometimes ignore [resistance] abilities. This is a known bug, which occurs deterministically and will be left unfixed in 1.18.x to prevent Out Of Sync errors.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' If a [damage_type] special includes a [filter_weapon]type=, that filter is tested against the base type of the weapon, ignoring all [damage_type] specials.&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[berserk]'' special ===&lt;br /&gt;
&lt;br /&gt;
* '''value''': the maximum number of combat rounds (default 1).&lt;br /&gt;
* '''cumulative''': if set to 'yes', this special will be cumulative with other active berserk specials (on the current combatant, not with an opponent's berserk).&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[plague]'' special ===&lt;br /&gt;
&lt;br /&gt;
* '''type''': the unit type to be spawned on kill. When not specified, the default is the unit type of the unit doing the plaguing.&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[swarm]'' special ===&lt;br /&gt;
&lt;br /&gt;
* '''swarm_attacks_max''': the maximum number of attacks for the swarm. Defaults to the base number of attacks modified by any applicable [attacks] specials. If this is specified, then the base number of attacks is ignored.&lt;br /&gt;
* '''swarm_attacks_min''': the minimum number of attacks for the swarm. Defaults to zero. This can be set higher than swarm_attacks_max to cause a unit to gain attacks as health decreases.&lt;br /&gt;
The ratio of the unit's current to maximum hit points will be used to scale the number of attacks between these two values.&lt;br /&gt;
&lt;br /&gt;
Prior to version 1.11, a [swarm] special will cause [attacks] specials to be ignored. In 1.11 and later, [attacks] specials are applied before [swarm].&lt;br /&gt;
&lt;br /&gt;
=== Macros for common weapon specials ===&lt;br /&gt;
&lt;br /&gt;
[https://www.wesnoth.org/macro-reference.html#file:weapon_specials.cfg macro reference]&lt;br /&gt;
* WEAPON_SPECIAL_BACKSTAB&lt;br /&gt;
* WEAPON_SPECIAL_BERSERK&lt;br /&gt;
* WEAPON_SPECIAL_CHARGE&lt;br /&gt;
* WEAPON_SPECIAL_DRAIN&lt;br /&gt;
* WEAPON_SPECIAL_FIRSTSTRIKE&lt;br /&gt;
* WEAPON_SPECIAL_MAGICAL&lt;br /&gt;
* WEAPON_SPECIAL_MARKSMAN&lt;br /&gt;
* WEAPON_SPECIAL_PLAGUE&lt;br /&gt;
* WEAPON_SPECIAL_PLAGUE_TYPE TYPE&lt;br /&gt;
* WEAPON_SPECIAL_POISON&lt;br /&gt;
* WEAPON_SPECIAL_SLOW&lt;br /&gt;
* WEAPON_SPECIAL_STONE&lt;br /&gt;
* WEAPON_SPECIAL_SWARM&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[UnitTypeWML]]&lt;br /&gt;
* [[SingleUnitWML]]&lt;br /&gt;
* [[ReferenceWML]]&lt;br /&gt;
&lt;br /&gt;
[[Category:WML Reference]]&lt;/div&gt;</summary>
		<author><name>Octalot</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=InterfaceActionsWML&amp;diff=74510</id>
		<title>InterfaceActionsWML</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=InterfaceActionsWML&amp;diff=74510"/>
		<updated>2025-09-10T10:38:23Z</updated>

		<summary type="html">&lt;p&gt;Octalot: /* [item] */ The image= is shown centered, not aligned to the top-left&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WML Tags}}&lt;br /&gt;
== Interface actions ==&lt;br /&gt;
&lt;br /&gt;
Part of [[ActionWML]], interface actions are actions that do not have a direct effect on gameplay;&lt;br /&gt;
instead, they show something to the player.  The main interface tags&lt;br /&gt;
are '''[message]''' and '''[objectives]''', but several other tags affect&lt;br /&gt;
the interface also.&lt;br /&gt;
&lt;br /&gt;
== [inspect] ==&lt;br /&gt;
This user interface instantly displays the gamestate inspector dialog at the current scenario state (the same one that can be brought up with [[CommandMode|the ''':inspect''' command]]), which can be used to inspect the values of WML variables, AI configuration, recall lists, and more.&lt;br /&gt;
&lt;br /&gt;
* '''name''': optional attribute to specify the name of this gamestate inspector dialog. It is just a label to help differentiate between different invocations of gamestate inspector dialog.&lt;br /&gt;
&lt;br /&gt;
== [message] ==&lt;br /&gt;
The most commonly used interface action is [message], which displays a message to the user in a dialog box. It can also be used to take input from the user.&lt;br /&gt;
&lt;br /&gt;
The following key/tags are accepted for [message]:&lt;br /&gt;
* [[StandardUnitFilter]]: The unit whose profile and name are displayed. Do not use a [filter] tag. If no unit matching this filter is found, the message is not displayed (The unit has probably been killed).&amp;lt;br&amp;gt;[message] elements should be constructed so that it is either guaranteed that a certain unit is alive, or so that dialog flows smoothly even if the message isn't displayed.&lt;br /&gt;
&lt;br /&gt;
* '''speaker''': an alternative to standard unit filter. You may specify as the value of the speaker attribute a unit id or any of the following special values:&lt;br /&gt;
** '''narrator''': the dialog box is displayed without a caption for the unit speaking or a unit image&lt;br /&gt;
** '''unit''': the primary unit for the event is speaking&lt;br /&gt;
** '''second_unit''': the secondary unit for the event is speaking&lt;br /&gt;
&lt;br /&gt;
* '''message''': (translatable) the text to display to the right of the image. ''message'' is sometimes multiple lines; if it is, be sure to use quotes(''' ' ''' or ''' &amp;quot; ''')&lt;br /&gt;
* '''male_message''', '''female_message''': {{DevFeature1.13|2}} (translatable) Used instead of ''message'' if the unit's gender matches. Never used if there is no unit (ie ''speaker=narrator''). {{DevFeature1.13|6}} This matches the primary unit, not the secondary unit.&lt;br /&gt;
* '''wait_description''': {{DevFeature1.13|2}} the description of this message displayed when other players in a mp game wait for one player doing input in a [message] (with [option]s or [text_input]).&lt;br /&gt;
* '''[show_if]''': if present then this message will only be displayed if the conditional statement in this tag is passed (see [[ConditionalActionsWML#Condition_Tags|ConditionalActionsWML]])&lt;br /&gt;
* '''side_for''': (default: all sides) comma-separated list of sides for who message is shown. This will &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; work with messages that take user input ([option]/[text_input]), which can only ever be shown to the current player. {{DevFeature1.13|0}} side_for= is now also accepted for messages with user input, it specifies on which side the message is shown (defaults to the currently playing side). For messages with input it does not accept a comma seperated list only a single number.&lt;br /&gt;
* '''image''': (default: profile image of speaker) the image to display to the left of the message text. Append ~RIGHT() if you want the image to appear on the right side. &lt;br /&gt;
** {{DevFeature1.13|0}} &amp;lt;b&amp;gt;none:&amp;lt;/b&amp;gt; display no image&lt;br /&gt;
* '''mirror''': {{DevFeature1.13|5}} whether to mirror the image specified by the '''image''' attribute.&lt;br /&gt;
* '''second_image''': {{DevFeature1.13|6}} same as the '''image''' attribute, but the image is displayed on the right of the message text. {{DevFeature1.17|7}} not working anymore {{DevFeature1.19|9}} working again&lt;br /&gt;
* '''second_mirror''': {{DevFeature1.13|6}} same as '''mirror''', but for the '''second_image''' attribute.&lt;br /&gt;
* '''image_pos''': {{DevFeature1.13|5}} whether to show the image on the left or right; supercedes the use of ~RIGHT() described above&lt;br /&gt;
* '''caption''': (default: name of speaker) the caption to display beside the image. Name to be displayed. Note: use a translation mark to avoid wmllint errors.&lt;br /&gt;
* '''scroll''': Boolean specifying whether the game view should scroll to the speaking unit. Defaults to ''yes''.&lt;br /&gt;
* '''highlight''': {{DevFeature1.13|5}} Boolean specifying whether to highlight the speaker. Defaults to ''yes''.&lt;br /&gt;
* '''sound''': a sound effect (wav file) to play as the message is displayed. This can be a comma-separated list, from which one will be randomly chosen.&lt;br /&gt;
* '''voice''', '''male_voice''', '''female_voice''': {{DevFeature1.13|?}} a sound to be played as the message is displayed. This can also be a comma-separated list, from which one will be randomly chosen. This is intended for voiceovers for the message. The gendered forms are applied the same as for '''message'''. They are never used when the speaker is the narrator - only '''voice''' is used in that case.&lt;br /&gt;
* {{anchor|message-option|'''[option]'''}}: No '''[option]''' elements have to be used. If '''[option]''' elements are present, then each option will be displayed in a menu for the user to select one option. ''Note: Messages with options will not be shown at all in prestart events''&lt;br /&gt;
** '''message''': (translatable) the text displayed for the option. {{DevFeature1.15|1}} This is now a synonym for '''description='''.&lt;br /&gt;
** '''image''', '''label''', '''description''', '''default''': See [[DescriptionWML#WML_Format|DescriptionWML]].&lt;br /&gt;
** '''value''': {{DevFeature1.13|?}} Gives the option a value to be stored in a variable.&lt;br /&gt;
** '''[show_if]''': if present then this option will only be displayed if the conditional statement in this tag is passed (see [[ConditionalActionsWML#Condition_Tags|ConditionalActionsWML]])&lt;br /&gt;
** '''[command]''': an element containing actions which are executed if the option is selected.&lt;br /&gt;
* '''variable''': {{DevFeature1.13|?}} If present, either the index or the value of the chosen option will be stored in the specified variable. Option indexing starts from 1. If option has '''[show_if]''' condition evaluated as false, then it is hidden and excluded from the indexing.&lt;br /&gt;
* {{anchor|message-text_input|'''[text_input]'''}}: there can be only one [text_input] tag. this adds a text input field to the message. ''Note: Messages with text_input will not be shown at all in prestart events''&lt;br /&gt;
** '''variable''': the variable that the user's input will be written to&lt;br /&gt;
** '''label''': a text label to the left of the input field&lt;br /&gt;
** '''max_length''': the maximum number of characters that may be typed into the field&lt;br /&gt;
** '''text''': text that is written into the field in the beginning&lt;br /&gt;
* Check [[EventWML#Multiplayer_safety]] to find out in which events you can safely use '''[option]''' and '''[text_input]''' without causing OOS.&lt;br /&gt;
&lt;br /&gt;
=== Formatting ===&lt;br /&gt;
'''[message]''' and other tags such as unit names (user_description), objectives, and floating text can make use of [https://docs.gtk.org/Pango/pango_markup.html#pango-markup Pango markup formatting codes].&lt;br /&gt;
&lt;br /&gt;
Prefer to use single quotes (') instead of double quotes (&amp;quot;) within the formatting string, as double quotes would need to be escaped in WML (&amp;quot;&amp;quot;). Escaping markup can be done with [https://github.com/wesnoth/wesnoth/blob/9daa10a9f27c5a95520e871417bbd72aa52aa688/src/font/pango/escape.hpp#L38-L42 HTML entities].&lt;br /&gt;
&lt;br /&gt;
For example, if you wanted to write &amp;quot;You are victorious!&amp;quot; in large, italic, gold letters, you might write it this way:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;span color='#BCB088' size='large' font-style='italic'&amp;gt;You are victorious!&amp;lt;/span&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
These are the codes taken from the Pango markup formatting guide:&lt;br /&gt;
&lt;br /&gt;
*'''font''', '''font_desc''': A font description string, such as &amp;quot;Sans Italic 12&amp;quot;.&lt;br /&gt;
*'''font_family''', '''face''': A font family name.&lt;br /&gt;
*'''font_size''', '''size''': Font size in 1024ths of a point, or one of the absolute sizes 'xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large', or one of the relative sizes 'smaller' or 'larger'.&lt;br /&gt;
*'''font_style''', '''style''': One of 'normal', 'oblique', 'italic'.&lt;br /&gt;
*'''font_weight''', '''weight''': One of 'ultralight', 'light', 'normal', 'bold', 'ultrabold', 'heavy', or a numeric weight.&lt;br /&gt;
*'''font_variant''', '''variant''': One of 'normal' or 'smallcaps'.&lt;br /&gt;
*'''font_stretch''', '''stretch''': One of 'ultracondensed', 'extracondensed', 'condensed', 'semicondensed', 'normal', 'semiexpanded', 'expanded', 'extraexpanded', 'ultraexpanded'.&lt;br /&gt;
*'''foreground''', '''fgcolor''', '''color''': An RGB color specification such as '#00FF00' or a color name such as 'red'. The full list of color names may be found in Pango's [https://github.com/GNOME/pango/blob/main/tools/rgb.txt rgb.txt] file.&lt;br /&gt;
*'''background, bgcolor''': An RGB color specification such as '#00FF00' or a color name such as 'red'.&lt;br /&gt;
*'''underline''': One of 'none', 'single', 'double', 'low', 'error'.&lt;br /&gt;
*'''underline_color''': The color of underlines; an RGB color specification such as '#00FF00' or a color name such as 'red'.&lt;br /&gt;
*'''rise''': Vertical displacement, in 10000ths of an em. Can be negative for subscript, positive for superscript.&lt;br /&gt;
*'''strikethrough''': 'true' or 'false' whether to strike through the text.&lt;br /&gt;
*'''strikethrough_color''': The color of strikethrough lines; an RGB color specification such as '#00FF00' or a color name such as 'red'&lt;br /&gt;
*'''fallback''': 'true' or 'false' whether to enable fallback. If disabled, then characters will only be used from the closest matching font on the system. No fallback will be done to other fonts on the system that might contain the characters in the text. Fallback is enabled by default. Most applications should not disable fallback.&lt;br /&gt;
*'''letter_spacing''': Inter-letter spacing in 1024ths of a point.&lt;br /&gt;
*'''gravity''': One of 'south', 'east', 'north', 'west', 'auto'.&lt;br /&gt;
*'''gravity_hint''': One of 'natural', 'strong', 'line'.&lt;br /&gt;
&lt;br /&gt;
The following pango attributes are also available directly as attributes of the '''[message]''' tag:&lt;br /&gt;
{{DevFeature1.13|4}}&lt;br /&gt;
&lt;br /&gt;
*'''font'''&lt;br /&gt;
*'''font_family'''&lt;br /&gt;
*'''font_size'''&lt;br /&gt;
*'''font_style'''&lt;br /&gt;
*'''font_weight'''&lt;br /&gt;
*'''font_variant'''&lt;br /&gt;
*'''font_stretch'''&lt;br /&gt;
*'''color'''&lt;br /&gt;
*'''bgcolor'''&lt;br /&gt;
*'''underline'''&lt;br /&gt;
*'''underline_color'''&lt;br /&gt;
*'''rise'''&lt;br /&gt;
*'''strikethrough'''&lt;br /&gt;
*'''strikethrough_color'''&lt;br /&gt;
*'''fallback'''&lt;br /&gt;
*'''letter_spacing'''&lt;br /&gt;
*'''gravity'''&lt;br /&gt;
*'''gravity_hint'''&lt;br /&gt;
&lt;br /&gt;
== [objectives] ==&lt;br /&gt;
The other tag used for plot development is '''[objectives]'''.&lt;br /&gt;
The '''[objectives]''' tag overwrites any previously set objectives,&lt;br /&gt;
and displays text which should describe the objectives of the scenario.&lt;br /&gt;
Scenario objectives are displayed on the player's first turn after the tag is used,&lt;br /&gt;
or as part of the event if it triggers during that player's turn.&lt;br /&gt;
Objectives can also be accessed at any time in a scenario using the&lt;br /&gt;
&amp;quot;Scenario Objectives&amp;quot; game menu option, making this tag useful for&lt;br /&gt;
scenario-specific information that the player may need to refer to during play.&lt;br /&gt;
&lt;br /&gt;
Attributes of '''[objectives]''':&lt;br /&gt;
* '''side''': Default '0'. The side to set the objectives for. A value of 0 sets objectives for all sides. note: There are side-specific objectives and default objectives, which are used in case a side doesn't have specific ones. Specifying 0 sets the default ones.&lt;br /&gt;
* '''[[StandardSideFilter]]''' tags and keys: Sets the objectives of all matching sides to these passed specifications (the rest of this [objectives] tag). If no sides (such as when passing side=0) or all sides match, sets the default objectives, and the side specific ones for the matching sides otherwise.&lt;br /&gt;
* '''bullet''': Default '• '. Replaces the default bullet, with whatever is passed, for all objectives, gold carryover notes, and notes defined with [note].&lt;br /&gt;
* '''summary''': Displayed first in the objectives text, this should describe the basic objective for the overall scenario.  Can be omitted.&lt;br /&gt;
* '''note''': Displayed last in the objectives text, this is sometimes used for hints or additional information.  Can be omitted.&lt;br /&gt;
* '''victory_string''': Default ' _ &amp;quot;Victory:&amp;quot;', this text precedes the victory objectives. Can be set to &amp;quot;&amp;quot; too.&lt;br /&gt;
* '''defeat_string''': Default ' _ &amp;quot;Defeat:&amp;quot;', this text precedes the defeat objectives. Can be set to &amp;quot;&amp;quot; too.&lt;br /&gt;
* '''gold_carryover_string''': Default ' _ &amp;quot;Gold carryover:&amp;quot;', this text precedes the gold carryover information.&lt;br /&gt;
* '''notes_string''': Default ' _ &amp;quot;Notes:&amp;quot;', this text precedes the notes.&lt;br /&gt;
* '''silent''': Default: not present. If set to &amp;quot;yes&amp;quot;, the objectives are silently changed. Else, they will be shown to the user when appropriate.&lt;br /&gt;
* '''delayed_variable_substitution''': {{DevFeature1.13|8}} If set to yes, any variables or [insert_tag] are not substituted right away. Instead, they are substituted whenever the objectives are actually viewed.&lt;br /&gt;
&lt;br /&gt;
Tags of '''[objectives]''':&lt;br /&gt;
* {{anchor|objectives-objective|'''[objective]'''}}: describes a win or loss condition. Most scenarios have multiple win or loss conditions, so use a separate [objective] subtag for each line; this helps with translations.&lt;br /&gt;
** '''bullet''': Default '• ' or whatever is set in the parent [objectives] block. Replaces the default bullet, with whatever is provided, for the objective defined by the [objective] block.&lt;br /&gt;
** '''red''': Default '0' for winning objectives, '255' for losing objectives. Overrides the default red coloring of the entire objective, including the bullet.&lt;br /&gt;
** '''green''': Default '255' for winning objectives, '0' for losing objectives. Overrides the default green coloring of the entire objective, including the bullet.&lt;br /&gt;
** '''blue''': Default '0'. Overrides the default blue coloring of the entire objective, including the bullet.&lt;br /&gt;
** '''description''': text for the specific win or loss condition.&lt;br /&gt;
** '''caption''': a text which will be displayed above the ''description''. This can be used to display a subcategory of objectives below ''victory_string'' or ''defeat_string''.&lt;br /&gt;
** '''condition''': The color and placement of the text. Values are 'win'(colored green, placed after ''victory_string'') and 'lose'(colored red, placed after ''defeat_string'').&lt;br /&gt;
** '''show_turn_counter''': If set to yes, displays the number of turns remaining in the scenario. Default is no.&lt;br /&gt;
** '''[show_if]''': A condition that disables the objective if it doesn't hold. Conditional objectives are refreshed at '''[show_objectives]''' time only, or when manually opening the scenario objectives.&lt;br /&gt;
* {{anchor|objectives-gold_carryover|'''[gold_carryover]'''}}: describes how the gold carryover works in this scenario. This is intended to be a more convenient way of displaying carryover information than using the note= key in [objectives].&lt;br /&gt;
** '''bullet''': Default '• ' or whatever is set in the parent [objectives] block. Replaces the default bullet with whatever is provided.&lt;br /&gt;
** '''red''': Default '255'. Overrides the default red coloring of the entire objective, including the bullet.&lt;br /&gt;
** '''green''': Default '255'. Overrides the default green coloring of the entire objective, including the bullet.&lt;br /&gt;
** '''blue''': Default '192'. Overrides the default blue coloring of the entire objective, including the bullet.&lt;br /&gt;
** '''bonus''' (boolean): whether an early finish bonus is granted. If omitted, early finish bonus is not mentioned.&lt;br /&gt;
** '''carryover_percentage''': the amount of carryover gold. If omitted, the amount is not mentioned.&lt;br /&gt;
** '''[show_if]''': {{DevFeature1.13|11}} Gold carryover will not be shown if the specified condition isn't met. Conditional gold carryover is refreshed at '''[show_objectives]''' time only.&lt;br /&gt;
* {{anchor|objectives-note|'''[note]'''}}: describes a note, usually used for hints or additional information. This is an easier way of adding several notes than concatenating them together into a single string to use with the ''note='' key.&lt;br /&gt;
** '''bullet''': Default '• ' or whatever is set in the parent [objectives] block. Replaces the default bullet with whatever is provided for the note defined by the [note] block.&lt;br /&gt;
** '''red''': Default '255'. Overrides the default red coloring of the entire note, including the bullet.&lt;br /&gt;
** '''green''': Default '255'. Overrides the default green coloring of the entire note, including the bullet.&lt;br /&gt;
** '''blue''': Default '255'. Overrides the default blue coloring of the entire note, including the bullet.&lt;br /&gt;
** '''description''': the text of the note.&lt;br /&gt;
** '''[show_if]''': The note will not be shown if the specified condition isn't met. Conditional notes are refreshed at '''[show_objectives]''' time only.&lt;br /&gt;
&lt;br /&gt;
== [set_menu_item] ==&lt;br /&gt;
This tag is used to add a custom option in the right-click context menu which can then be used to trigger arbitrary WML commands. The menu items can be set and modified during any event, for example during &amp;quot;start&amp;quot; or &amp;quot;prestart&amp;quot; events. The user can also assign hotkeys to these WML commands unless specified otherwise. When the hotkey is pressed the event will be fired/filtered at the current mouse position.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Due to limitations in portable devices where there are no scroll bars for context menus, there is a hard-coded limit of 7 custom WML menu items. If you really need to have more than 7 menu items, try combining some of them in a submenu. {{DevFeature1.13|0}} This limitation is being removed in a [http://forums.wesnoth.org/viewtopic.php?p=572554#p572554 future version] of Wesnoth.&lt;br /&gt;
&lt;br /&gt;
* '''id''': the unique id for this menu item. If a menu item with this id already exists, it allows you to set specific changes to that item. All menus will be sorted lexicographically by the id string. The ordering is underscores, digits, and finally letters.&lt;br /&gt;
* '''description''': the in-game text that will appear for this item in the menu.&lt;br /&gt;
* '''image''': the image to display next to this item, defaults to &amp;quot;buttons/WML-custom.png&amp;quot;&lt;br /&gt;
* '''needs_select''': if ''yes'' (default ''no''), then the latest select event (see [[EventWML]]) that triggered before this menu item was chosen will be transmitted over the network before this menu item action will be. This only has any effect in networked multiplayer, and is intended to allow more elaborate menu item behaviour there without causing out of sync errors. If you don't know what this means, just leave it. {{DevFeature1.13|6}} ''needs_select=yes'' is deprecated, consider using manual variable syncing with [sync_variable].&lt;br /&gt;
* '''synced''' {{DevFeature1.13|1}}: if ''no'' (default ''yes'') the command handler will only be run on the client that invoked the menu item; this means that changing the gamestate in a command handler of a menu item with ''synced=no'' will cause OOS&lt;br /&gt;
* '''use_hotkey''': if ''no'' (default ''yes''), then the user cannot assign hotkeys to this menu item. If ''only'', the menu item is only accessible via hotkeys, not via right-click context; you can use this in combination with [default_hotkey] if you want custom hotkeys in your campaign/mp. &lt;br /&gt;
* '''[show_if]''': If present, the menu item will only be available if the conditional statement (see [[ConditionalActionsWML#Condition_Tags|ConditionalActionsWML]]) within evaluates to true. When this is evaluated, the WML variables ''$x1'' and ''$y1'' will point to the location on which the context menu was invoked, so it's possible to for example only enable the option on empty hexes or on a particular unit.&lt;br /&gt;
* '''[filter_location]''': contains a [[StandardLocationFilter]] similar to the one found inside Single Unit Filters. The menu item will only be available on matching locations.&lt;br /&gt;
* '''[default_hotkey]''': contains a hotkey WML to specify what hotkey to assign to this, '''if the user has no hotkey assigned to this yet'''. (Unlike the rest of a menu item definition, modifying this tag has no effect on the game; it is only effective when initially defining a menu item.) Hotkey WML matches the format in the preferences file and contains the following keys:&lt;br /&gt;
** '''key''': a string that contains the key to assign to this.&lt;br /&gt;
** '''alt''', '''shift''', '''cmd'''(apple only), '''ctrl''':  boolean values.&lt;br /&gt;
** '''repeat_on_hold''' {{DevFeature1.13|12}}: if ''yes'' (default ''no''), holding the hotkey will repeat the action continuously, unless it blocks input with something like '''[message]'''. Due to a bug, versions older than 1.13.12 always repeat the action, with no way to disable it.&lt;br /&gt;
* '''[command]''': contains the WML actions to be executed when the menu item is selected. Again, the WML variables ''$x1'' and ''$y1'' will point to the location on which the context menu was invoked on.&lt;br /&gt;
** '''delayed_variable_substitution ''' (boolean yes|no, default: yes): If no, forces a variable substitution run onto the wml included in this [command] block. Use this, if you want variables which are to substitute to get the values they have at execution time of the event where this set_menu_item appears. Other than that, they get the values they have at invocation time of the menu item.&lt;br /&gt;
&lt;br /&gt;
== [clear_menu_item] ==&lt;br /&gt;
&lt;br /&gt;
Removes a menu item from the scenario.&lt;br /&gt;
Normally menu items are, including all their defining wml, automatically carried over between scenarios. This tag prevents this. (The behavior is comparable to set_variable/clear_variable).&lt;br /&gt;
* '''id''': (string): id of the menu item to clear. Can be a comma-separated list.&lt;br /&gt;
&lt;br /&gt;
== Other interface tags ==&lt;br /&gt;
&lt;br /&gt;
The following tags are also action tags:&lt;br /&gt;
&lt;br /&gt;
=== [change_theme] ===&lt;br /&gt;
&lt;br /&gt;
{{DevFeature1.13|8}}&lt;br /&gt;
&lt;br /&gt;
Change the current interface theme.&lt;br /&gt;
&lt;br /&gt;
* '''theme''': The ID of the new theme. Use &amp;lt;code&amp;gt;theme=&amp;lt;/code&amp;gt; (empty key) to switch back to the theme that the player has selected in Preferences. On &amp;lt;b&amp;gt;1.14.2&amp;lt;/b&amp;gt; and later it is also possible to omit the key entirely to achieve the same effect (on previous versions this will crash the Lua engine).&lt;br /&gt;
&lt;br /&gt;
=== [item] ===&lt;br /&gt;
Makes a graphical item appear on a certain hex. Note this only places the graphics for an item. It does not make the item do anything. Use a moveto event to make moving onto the item do something. &amp;lt;tt&amp;gt;''('''Hint:''' There are a number of predefined items that are used in various campaigns that you can make use of. You can find [http://www.wesnoth.org/macro-reference.xhtml#file:items.cfg a list of them] if you look into the items.cfg file in the wesnoth install directory (under /data/core/macros).)''&amp;lt;/tt&amp;gt;&lt;br /&gt;
* '''x''', '''y''': the location to place the item. (only for [event][item]: full [[StandardLocationFilter|SLF]] support)&lt;br /&gt;
* '''image''': the image (in ''images/'' as .png) to place on the hex. This image is aligned with the center of the hex (which is 72 pixels wide and 72 pixels tall). It is drawn underneath units. ''('''Hint:''' To position a small image somewhere other than the center, [[ImagePathFunctions#Blit_Function|BLIT]] the image onto &amp;lt;tt&amp;gt;misc/blank-hex.png&amp;lt;/tt&amp;gt; (a blank 72x72 image). The image is centered since {{DevFeature1.17|7}}, previously the images were aligned to the top-left; however this difference doesn't affect any image BLITted onto blank-hex.png, as that is the same size as a hex.)''&lt;br /&gt;
* '''halo''': an image to place centered on the hex. It is drawn on top of units. Use this instead of ''image'' if the image is bigger than the hex or if you want to animate an image ([https://github.com/wesnoth/wesnoth/issues/1219 #1219]). ''Example (where the integer after the colon is the duration of each frame or square bracket expansion as per [[AnimationWML]] is used): halo=scenery/fire1.png:100,scenery/fire2.png:100,scenery/fire3.png:100,scenery/fire4.png:100,scenery/fire5.png:100,scenery/fire6.png:100,scenery/fire7.png:100,scenery/fire8.png:100'' or equivalently (requires Wesnoth 1.11.2+): ''halo=scenery/fire[1~8].png:100''&lt;br /&gt;
* '''name''' an id that can be used to remove the item.&lt;br /&gt;
* '''team_name''': name of the team for which the item is to be displayed (hidden for others). For multiple teams just put all the names in one string, for example separated by commas. {{DevFeature1.15|0}} In 1.14 the '''[side]team_name''' attribute was expected to be a substring of this '''team_name'''. In 1.15 both are expected to be comma-separated lists of names and the item is visible if the lists intersect. ([https://github.com/wesnoth/wesnoth/pull/3533 #3533])&lt;br /&gt;
* '''visible_in_fog''': whether the item should be visible through fog or not. Default yes.&lt;br /&gt;
* '''submerge''': float, between 0 and 1: specifies how much of the image should be submerged. Gets multiplied with [[TerrainWML|[terrain]]]&amp;lt;nowiki/&amp;gt;submerge. Default 0.&lt;br /&gt;
* '''z_order''': float: defines the order the items get drawn in. Default 0.&lt;br /&gt;
* '''redraw''': (boolean yes|no, default: yes): If no, disables implicit calls to [[InterfaceActionsWML#.5Bredraw.5D|[redraw]]] when placing the items.&lt;br /&gt;
* '''[filter_team]''': {{DevFeature1.15|0}} A [[StandardSideFilter]]. Set '''team_name''' to the union of all '''[side]team_name''' attributes of all sides that match the SSF. ([https://github.com/wesnoth/wesnoth/pull/3533 #3533])&lt;br /&gt;
* {{DevFeature1.15|0}} If both '''team_name''' and '''[filter_team]''' are set, '''team_name''' is ignored.&lt;br /&gt;
&lt;br /&gt;
=== [remove_item] ===&lt;br /&gt;
Removes any graphical items on a given hex.&lt;br /&gt;
* [[StandardLocationFilter]]: the hexes to remove items from&lt;br /&gt;
* '''image''': if specified, only removes the given item if one of its 'image', 'halo' or 'name' attributes is exactly this value. (for 'halo' and 'image' this in particular means that the image name must include any [[ImagePathFunctions|image path functions]] appended to the original image name.)&lt;br /&gt;
&lt;br /&gt;
=== [print] ===&lt;br /&gt;
Displays a message across the screen. The message will disappear after a certain time, or when another [print] tag is encountered.&lt;br /&gt;
* '''text''': (translatable) the text to display. Can be an empty string to remove a previous message without showing a new one.&lt;br /&gt;
* '''size''': (default=12) the pointsize of the font to use&lt;br /&gt;
* '''duration''': the length of time to display the text for.&lt;br /&gt;
** (Before 1.15.4) This is measured in the number of 'frames', and the default is 50. A frame in Wesnoth is usually displayed for around 30ms.&lt;br /&gt;
** {{DevFeature1.15|4}} This is measured in milliseconds. Don't use the default value, because it's a mere 50ms.&lt;br /&gt;
** {{DevFeature1.15|14}} The default is 5000 milliseconds.&lt;br /&gt;
** {{DevFeature1.15|14}} The string '''unlimited''' displays the text until it's removed by another [print] tag.&lt;br /&gt;
* '''color''': (default '''0,0,0''') three comma-separated values giving the red, green and blue values (0-255).&lt;br /&gt;
* '''red''', '''green''', '''blue''': deprecated, use color=0,0,0 instead.&lt;br /&gt;
&lt;br /&gt;
=== [move_unit_fake] ===&lt;br /&gt;
Moves an image of a unit along a certain path on the map. The path does not need to be a continuous list of adjacent hexes, so for example only the start and end points can be given, in which case the straightest line between those points will be calculated and used.&lt;br /&gt;
* '''type''': the type of the unit whose image to use&lt;br /&gt;
* '''x''': a comma-separated list of x locations to move along&lt;br /&gt;
* '''y''': a comma-separated list of y locations to move along (x and y values are matched pairs)&lt;br /&gt;
* '''side''': the side of the fake unit, used for team-coloring the fake unit&lt;br /&gt;
* '''gender''': the gender of the fake unit. Example: gender=female&lt;br /&gt;
* '''variation''': the variation of the fake unit. Example: variation=undead&lt;br /&gt;
* '''image_mods''': [[ImagePathFunctions|image path functions]] sequence to be applied on the fake unit.&lt;br /&gt;
* '''force_scroll''':  Whether to scroll the map or not even when [[#.5Block_view.5D|[lock_view]]] is in effect or ''Follow Unit Actions'' is disabled in ''Advanced Preferences''. Defaults to ''yes'' starting with version '''1.11.6'''; the attribute did not exist in previous versions and this action behaved as if ''no'' was passed instead.&lt;br /&gt;
&lt;br /&gt;
=== [move_units_fake] ===&lt;br /&gt;
moves multiple images of units along paths on the map. These units are moved in lockstep.&lt;br /&gt;
* '''force_scroll''': {{DevFeature1.15|0}} Has the same meaning as in [move_unit_fake] but a different default.&lt;br /&gt;
* '''[fake_unit]''': A fake unit to move&lt;br /&gt;
** '''type''': the type of unit whose image to use&lt;br /&gt;
** '''x''': a comma-separated list of x locations to move along&lt;br /&gt;
** '''y''': a comma-separated list of y locations to move along (x and y values are matched pairs)&lt;br /&gt;
** '''side''': the side of the fake unit, used for team-coloring the fake unit&lt;br /&gt;
** '''skip_steps''': the number of steps to skip before this unit starts moving&lt;br /&gt;
&lt;br /&gt;
=== [hide_unit] ===&lt;br /&gt;
Temporarily prevents the engine from displaying the given unit. The unit does not become invisible, as it would be with the '''[hides]''' ability; it is still the same plain unit, but without an image. Useful in conjunction with '''[move_unit_fake]''': to move a leader unit into position on-screen. Until 1.8 each '''[hide_unit]''' tag only hides one unit.&lt;br /&gt;
* [[StandardUnitFilter]]: All matching units will be hidden&lt;br /&gt;
&lt;br /&gt;
=== [unhide_unit] ===&lt;br /&gt;
Stops the currently hidden units from being hidden.&lt;br /&gt;
* [[StandardUnitFilter]]: Only the matching units will be unhidden&lt;br /&gt;
&lt;br /&gt;
=== [lock_view] ===&lt;br /&gt;
Locks gamemap view scrolling for human players, so they cannot scroll the gamemap view until it is unlocked. WML or Lua actions such as '''[scroll_to]''' will continue to work normally, as they ignore this restriction; the locked/unlocked state is preserved when saving the current game.&lt;br /&gt;
&lt;br /&gt;
This feature is generally intended to be used in cutscenes to prevent the player scrolling away from scripted actions.&lt;br /&gt;
&lt;br /&gt;
{{DevFeature1.13|8}} This now also blocks the player from zooming the gamemap view. WML or Lua zoom will continue to work normally.&lt;br /&gt;
&lt;br /&gt;
=== [unlock_view] ===&lt;br /&gt;
Unlocks gamemap view scrolling for human players.&lt;br /&gt;
&lt;br /&gt;
=== [scroll] ===&lt;br /&gt;
Scroll a certain number of pixels in a given direction. Useful for earthquake/shaking effects.&lt;br /&gt;
* '''x''', '''y''': the number of pixels to scroll along the x and y axis&lt;br /&gt;
* '''side''': the side or sides for which this should happen. By default, the [scroll] happens for everyone.&lt;br /&gt;
* '''[filter_side]''': a [[StandardSideFilter]] to select the sides for which this should happen. By default, the [scroll] happens for everyone.&lt;br /&gt;
&lt;br /&gt;
=== [scroll_to] ===&lt;br /&gt;
Scroll to a given hex&lt;br /&gt;
* [[StandardLocationFilter]], do not use a [filter_location] sub-tag. If more than one location matches the filter, only the first matching location will be used.&lt;br /&gt;
* '''check_fogged''': whether to scroll even to locations covered in fog or shroud. Possible values ''yes'' (don't scroll to fog) and ''no'' (scroll even to fog), with ''no'' as the default.&lt;br /&gt;
* '''immediate''': whether to instantly warp to the target hex regardless of the scroll speed setting in Preferences (defaults to ''no'').&lt;br /&gt;
* '''highlight''': {{DevFeature1.13|5}} Whether to highlight the hex being scrolled to (defaults to ''no'').&lt;br /&gt;
* '''side''': the side or sides for which this should happen. By default, the [scroll_to] happens for everyone.&lt;br /&gt;
* '''[filter_side]''': a [[StandardSideFilter]] to select the sides for which this should happen. By default, the [scroll_to] happens for everyone.&lt;br /&gt;
&lt;br /&gt;
=== [scroll_to_unit] ===&lt;br /&gt;
Scroll to a given unit&lt;br /&gt;
* [[StandardUnitFilter]]; do not use a [filter] subtag.&lt;br /&gt;
* '''check_fogged''': whether to scroll even to locations covered in fog or shroud. Possible values ''yes'' (don't scroll to fog) and ''no'' (scroll even to fog), with ''no'' as the default.&lt;br /&gt;
* '''immediate''': whether to instantly warp to the target hex regardless of the scroll speed setting in Preferences (defaults to ''no'').&lt;br /&gt;
* '''highlight''': {{DevFeature1.13|5}} Whether to highlight the hex the unit is on (defaults to ''no'').&lt;br /&gt;
* '''for_side''': the side or sides for which this should happen. By default, the [scroll_to_unit] happens for everyone.&lt;br /&gt;
* '''[for_side]''': a [[StandardSideFilter]] to select the sides for which this should happen. By default, the [scroll_to_unit] happens for everyone.&lt;br /&gt;
&lt;br /&gt;
=== [select_unit] ===&lt;br /&gt;
Selects a given unit.&lt;br /&gt;
* [[StandardUnitFilter]]: The first unit found will be selected.&lt;br /&gt;
* '''fire_event''': whether a ''select'' event should be triggered or not (def. ''no''). (Note that select events aren't multiplayer save.)&lt;br /&gt;
* '''highlight''': whether the unit's current hex should be highlighted (def. ''yes'').&lt;br /&gt;
&lt;br /&gt;
'''Note:''' fire_event does not appear to work in 1.14 or 1.16.&lt;br /&gt;
&lt;br /&gt;
=== [sound]===&lt;br /&gt;
Plays a sound&lt;br /&gt;
* '''name''': the filename of the sound to play (in ''sounds/'' as .wav or .ogg). This can be a comma-separated list, from which one sound will be chosen randomly.&lt;br /&gt;
* '''repeat''': repeats the sound for a specified additional number of times (default=0)&lt;br /&gt;
&lt;br /&gt;
=== [sound_source] ===&lt;br /&gt;
Creates a sound source. &amp;quot;Sound sources&amp;quot; is a general name for a mechanism which makes possible for map elements to emit sounds according to some rules, where &amp;quot;map elements&amp;quot; can be specific locations or terrain types. For now, only sound sources tied to locations are supported.&lt;br /&gt;
* '''id''': a unique identification key of the sound source&lt;br /&gt;
* '''sounds''': a list of comma separated, randomly played sounds associated with the sound source&lt;br /&gt;
* '''delay''': a numerical value (in milliseconds) of the minimal delay between two playbacks of the source's sound if the source remains visible on the screen; if one scrolls out and back in, the source will be considered as ready to play&lt;br /&gt;
* '''chance''': a percentage (a value from 0 to 100) describing the chance of the source being activated every second after the delay has passed or when the source's location appears on the screen (note that it cannot play more than one file at the same time)&lt;br /&gt;
* '''check_fogged''': possible values ''yes'' and ''no'' - ''yes'' means the source will not play if its locations are fogged&lt;br /&gt;
* '''check_shrouded''': possible values ''yes'' and ''no'' - ''yes'' means the source will not play if its locations are shrouded&lt;br /&gt;
* '''x,y''': similar to x,y as found in a [[StandardLocationFilter]], these are the locations associated with the sound source&lt;br /&gt;
* '''fade_range''' (default = 3): distance in hexes that determines a &amp;quot;circular&amp;quot; area around the one specified by '''full_range''' where sound volume fades out linearly&lt;br /&gt;
* '''full_range''' (default = 14): distance in hexes that determines a &amp;quot;circular&amp;quot; area where source plays with full volume, relative to screen center&lt;br /&gt;
* '''loop''': number of times a sound sample should be looped if it stays visible. -1 means infinite (~65000)&lt;br /&gt;
&lt;br /&gt;
=== [story] ===&lt;br /&gt;
{{DevFeature1.13|8}}&lt;br /&gt;
&lt;br /&gt;
Shows the story screen.&lt;br /&gt;
* '''title''': Default title used if a part does not specify one — unlike the intro storyscreen, the scenario name is not used as a default title.&lt;br /&gt;
* '''[part]''', '''[if]''', '''[switch]''', '''[wml_message]''', '''[deprecated_message]''' : See [[IntroWML]].&lt;br /&gt;
&lt;br /&gt;
=== [remove_sound_source] ===&lt;br /&gt;
Removes a previously defined sound source.&lt;br /&gt;
* '''id''': the identification key of the sound source to remove&lt;br /&gt;
&lt;br /&gt;
=== [music] ===&lt;br /&gt;
Switches to playing different music&lt;br /&gt;
* '''name''': the filename of the music to play (in ''music/'' as .ogg)&lt;br /&gt;
* see [[MusicListWML]] for the correct syntax&lt;br /&gt;
&lt;br /&gt;
=== [volume] ===&lt;br /&gt;
Changes the game volume to a percent of the preferences volume for the game being played. Values can go from 0 to 100:  &lt;br /&gt;
* '''music''':  Changes the music volume.&lt;br /&gt;
* '''sound''':  Changes the sound volume.&lt;br /&gt;
&lt;br /&gt;
=== [color_adjust] ===&lt;br /&gt;
Adjust the color tint of terrain, by adjusting time-of-day coloring.&lt;br /&gt;
* '''red''', '''green''', '''blue''': values from -255 to 255, the amount to tint by for each color&lt;br /&gt;
&lt;br /&gt;
=== [screen_fade] ===&lt;br /&gt;
{{DevFeature1.17|6}}&lt;br /&gt;
&lt;br /&gt;
Overlay the game display with the given color, fading over the specified duration. This can be used for screen fade effects.&lt;br /&gt;
* '''red''', '''green''', '''blue''': values from 0 to 255, the final overlay color (defaults to 0,0,0)&lt;br /&gt;
* '''alpha''': value from 0 to 255, the strength of the effect. 0 means no effect and can be used to fade in. 255 means fully opaque and can be used to fully fade out to the given color. Intermediate values will end up with a partial overlay tint on the game screen.&lt;br /&gt;
* '''duration''': the length of time it will take to complete the fade, in milliseconds. If 0 the effect is immediate.&lt;br /&gt;
&lt;br /&gt;
=== [delay] ===&lt;br /&gt;
Pauses the game.&lt;br /&gt;
* '''time''': the time to pause in milliseconds&lt;br /&gt;
* '''accelerate ''' (boolean yes|no, default no): {{DevFeature1.13|0}} whether the delay is affected by acceleration. When [delay] is used to make an animation, this should be set to yes so that your animation matches the ones generated by the game.&lt;br /&gt;
&lt;br /&gt;
=== [redraw] ===&lt;br /&gt;
Redraws the screen (this normally isn't done during events, although some of the other interface actions cause the screen or parts of it to be redrawn).&lt;br /&gt;
* '''clear_shroud''' (boolean yes|no, default no): If yes, clears fog and shroud around existing units. Useful if you, for example, spawn friendly units in the middle of an event and want the shroud to update accordingly (otherwise units that spawn inside fog would remain invisible for the duration of the event, since the fog would not automatically get cleared around them).&lt;br /&gt;
* '''[[StandardSideFilter]]''': the sides for which to recalculate fog and shroud.&lt;br /&gt;
* '''side''': If used (forces clear_shroud=yes), clears fog and shroud for that side.&lt;br /&gt;
&lt;br /&gt;
=== [unit_overlay] ===&lt;br /&gt;
Sets an image that will be drawn over a particular unit, and follow it around&lt;br /&gt;
* [[StandardUnitFilter]]: All matching units will get the overlay (do not use [filter])&lt;br /&gt;
* '''image''': the image to place on the unit&lt;br /&gt;
* '''object_id''': object id to use, defaults to the '''image''' key with an &amp;quot;overlay_&amp;quot; prefix; this allows using [[DirectActionsWML#.5Bremove_object.5D|'''[remove_object]''']]&lt;br /&gt;
* '''duration''': object duration&lt;br /&gt;
&lt;br /&gt;
=== [remove_unit_overlay] ===&lt;br /&gt;
Removes a particular overlayed image from a unit&lt;br /&gt;
* [[StandardUnitFilter]]: The overlay will get removed from all matching units (do not use [filter])&lt;br /&gt;
* '''image''': the image to remove from the unit&lt;br /&gt;
* '''object_id''': object id to use&lt;br /&gt;
Using [[DirectActionsWML#.5Bremove_object.5D|'''[remove_object]''']] is also possible, see https://github.com/wesnoth/wesnoth/commit/26c2f941f2bcdd89528481e114c0375ad2a46271&lt;br /&gt;
&lt;br /&gt;
=== [animate_unit] ===&lt;br /&gt;
Uses an animation of a unit to animate it on screen (if the unit has the corresponding animation).&lt;br /&gt;
* '''flag''': The key to find the custom animation in the unit description (see the '''[extra_anim]''' description in [[AnimationWML]]). Standard animations can be triggered with the following keywords: ''leading recruited standing idling levelout levelin healing healed poisoned movement defend attack death victory pre_teleport post_teleport''&lt;br /&gt;
* '''[filter]''' with a [[StandardUnitFilter]] as argument, see [[FilterWML]]. By default, the unit at the event location will be animated. You can use this tag to choose any other unit to animate.&lt;br /&gt;
* '''[primary_attack]''': If this tag is not present, the filter for animation will be triggered with no attack. If it is here, all attacks from the unit will be filtered, and a matching one will be used to filter the animation. Takes a weapon filter as argument, see [[FilterWML]].&lt;br /&gt;
* '''[secondary_attack]''': Similar to '''[primary_attack]'''. May be needed to trigger a defense animation correctly, if there are more than one animations available for the defending unit.&lt;br /&gt;
* '''hits''': yes/no/hit/miss/kill: which according variation of a attack/defense animation shall be chosen (required)&lt;br /&gt;
* '''text''': a text to hover during the animation &lt;br /&gt;
* '''male_text''', '''female_text''': {{DevFeature1.13|2}} (translatable) gender-specific versions of the above&lt;br /&gt;
* '''red''': red value for the text color (0-255)&lt;br /&gt;
* '''green''': green value for the text color&lt;br /&gt;
* '''blue''': blue value for the text color&lt;br /&gt;
* '''with_bars''': yes/no: whether to display the status bars during the animation (e.g. the hitpoint bar)&lt;br /&gt;
* '''[animate]''': a sub block with the same syntax as '''[animate_unit]''' except that the '''[filter]''' block is mandatory to find the unit. This block will find and animate another unit simultaneously.&lt;br /&gt;
* '''[facing]''': a [[StandardLocationFilter]] specifying what hex the unit should be facing when animated&lt;br /&gt;
&lt;br /&gt;
=== [label] ===&lt;br /&gt;
Places a label on the map.&lt;br /&gt;
* '''x''', '''y''': the location of the label. {{DevFeature1.13|1}} (only for [event][label]: full [[StandardLocationFilter|SLF]] support)&lt;br /&gt;
* '''text''': what the label should say. If you put an empty string &amp;lt;code&amp;gt;&amp;quot;&amp;quot;&amp;lt;/code&amp;gt; as an argument, the label will be completely removed. Use this method if you want to remove a specific label from any location.&lt;br /&gt;
* '''team_name''': if specified, the label will only be visible to the given team.&lt;br /&gt;
* '''color''': color of the label. The format is r,g,b; r, g and b are numbers between 0 and 255. When you use Pango markup in the text, you cannot use this, but in that case you could colorize the text via Pango markup.&lt;br /&gt;
* '''visible_in_fog''': whether the label should be visible through fog or not. Default yes.&lt;br /&gt;
* '''visible_in_shroud''': whether the label should be visible through shroud or not. Default no.&lt;br /&gt;
* '''immutable''': whether this label is protected from being removed or changed by players. Default yes.&lt;br /&gt;
* '''category''': the Show/Hide Labels dialog allows showing/hiding all labels of a given category by toggling a checkbox.&lt;br /&gt;
* '''tooltip''': A tooltip visible when putting the mouse over the hex the label is on&lt;br /&gt;
* '''side''': the number of the side that placed the label. Can be 0 for labels placed by WML.&lt;br /&gt;
&lt;br /&gt;
=== [floating_text]===&lt;br /&gt;
Floats text (similar to the damage and healing numbers) on the given locations.&lt;br /&gt;
* [[StandardLocationFilter]]: the text will be floated on all matching locations simultaneously (do not use [filter] unless you intend to match one or more units).&lt;br /&gt;
* '''text''': the text to display.&lt;br /&gt;
&lt;br /&gt;
The default text color is &amp;lt;span style=&amp;quot;color: #6b8cff;&amp;quot;&amp;gt;'''#6b8cff'''&amp;lt;/span&amp;gt;. To change the color, use [[#Formatting|Pango markup]]. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Float some golden yellow text at 20,20.&lt;br /&gt;
[floating_text]&lt;br /&gt;
   x,y=20,20&lt;br /&gt;
   text=&amp;quot;&amp;lt;span color='#cccc33'&amp;gt;&amp;quot; + _ &amp;quot;Your text here&amp;quot; + &amp;quot;&amp;lt;/span&amp;gt;&amp;quot;&lt;br /&gt;
[/floating_text]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== [deprecated_message] ===&lt;br /&gt;
Shows a deprecated message in the message area, this feature is only intended to be used to warn about deprecated macros in mainline. The message is not translatable.&lt;br /&gt;
* '''message''': the message to show.&lt;br /&gt;
* '''level''': {{DevFeature1.13|10}} The deprecation level, a number from 1 to 3.&lt;br /&gt;
* '''what''': {{DevFeature1.13|10}} The name of the thing being deprecated. Use this instead of '''message''' if possible; a stock message will be generated from it. Use '''message''' only if more information is required; it will be appended to the stock message. This should not be translatable&lt;br /&gt;
* '''version''': {{DevFeature1.13|10}} For deprecation levels 2 and 3, this indicates the version in which the feature could be removed. It does ''not'' indicate the version in which it became deprecated. &lt;br /&gt;
&lt;br /&gt;
The meanings of the deprecation levels are as follows:&lt;br /&gt;
&lt;br /&gt;
# Deprecated, but will only be removed if absolutely necessary. The '''version''' key is ignored.&lt;br /&gt;
# It will be removed no earlier than a specified version.&lt;br /&gt;
# It will be removed in the next stable version&lt;br /&gt;
# It has already been removed, leaving just a stub to inform users of how to update their code.&lt;br /&gt;
&lt;br /&gt;
Note that as of 1.13.11, deprecation messages show only in the log, not in the chat message area. The '''message''' can be translatable, but does not need to be.&lt;br /&gt;
&lt;br /&gt;
=== [wml_message] ===&lt;br /&gt;
Outputs a message to Wesnoth's console output. Intended for campaign designers to output silent text to the console, without annoying the player; then, that text might contain information useful for later bug-reporting. WML wrapper of [[LuaAPI/wesnoth#wesnoth.log]], see the link for more description.&lt;br /&gt;
* '''message''': the message to show.&lt;br /&gt;
* '''to_chat''': controls whether message is visible in chat, though logger=wml means message is visible anyways. Default ''no''.&lt;br /&gt;
* '''logger''': one of '''info''', '''debug''', '''warning''', '''error''', '''wml'''. Default ''info''.&lt;br /&gt;
&lt;br /&gt;
=== [test_condition] ===&lt;br /&gt;
&lt;br /&gt;
{{DevFeature1.13|2}}&lt;br /&gt;
&lt;br /&gt;
Evaluates the contained conditional tags. If they evaluate to the expected value, it prints out a message to the console explaining which part of the condition caused this result in a way similar to [wml_message]. This can be used if your conditional test is failing and you're not sure why.&lt;br /&gt;
&lt;br /&gt;
* '''result''': Whether you expect the conditions to fail or succeed. If no (the default), a message will be printed if the conditional tags fail. If yes, a message will instead be printed if the conditional tags pass.&lt;br /&gt;
* '''logger''': Same as for [wml_message]. Defaults to &amp;quot;warning&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== [open_help] ===&lt;br /&gt;
Opens the in-game help.&lt;br /&gt;
* '''topic''': the id of the topic to open&lt;br /&gt;
&lt;br /&gt;
Examples of ids:&lt;br /&gt;
* unit_Mage&lt;br /&gt;
* unit_Dark Adept&lt;br /&gt;
* weaponspecial_charge&lt;br /&gt;
* terrain_human_castle&lt;br /&gt;
&lt;br /&gt;
The engine will print the topic ids if run from the command line with the ''--log-debug=help'' option.&lt;br /&gt;
&lt;br /&gt;
=== [show_objectives] ===&lt;br /&gt;
refreshes the objectives defined by [objectives] and its [show_if] tags, and displays them. (It is also called whenever the user explicitly asks for the objectives; this matters only if the tag was overridden by a [[LuaWML#register_wml_action|Lua]] script.)&lt;br /&gt;
* '''side''': the side to show the objectives. If not set, all sides are used.&lt;br /&gt;
* '''[[StandardSideFilter]]''' tags and keys: Tag affects the matching sides instead of just all or the one given by the integer value of the side= key.&lt;br /&gt;
&lt;br /&gt;
=== [chat] ===&lt;br /&gt;
Displays a message in the chat area, not visible for observers. Alternative unconditionally visible for everyone: [[LuaWML:Display#wesnoth.message]]. {{DevFeature1.13|9}} can be visible for observers.&lt;br /&gt;
* '''speaker''': (default=&amp;quot;WML&amp;quot;) A string for the name of the sender of the message.&lt;br /&gt;
* '''message''': The message that should be displayed.&lt;br /&gt;
* '''observable''' (boolean yes|no, default yes): {{DevFeature1.13|9}} Whether the message is displayed for observers.&lt;br /&gt;
* '''[[StandardSideFilter]]''' tags and keys as argument; if the same client controls multiple sides that match, then the message will only be displayed once.&lt;br /&gt;
&lt;br /&gt;
=== [zoom] ===&lt;br /&gt;
&lt;br /&gt;
{{DevFeature1.13|8}}&lt;br /&gt;
&lt;br /&gt;
Changes the zoom level of the map.&lt;br /&gt;
&lt;br /&gt;
* '''factor''': The new zoom factor, measured as a multiple of the base zoom.&lt;br /&gt;
* '''relative''': If yes, zoom relative to current zoom level. Otherwise, set the absolute zoom level. Default no.&lt;br /&gt;
&lt;br /&gt;
== Useful Macros ==&lt;br /&gt;
There are some predefined macros that you find useful for interface actions. You can find a complete list along with a detailed explanation of how they work [http://www.wesnoth.org/macro-reference.xhtml here].&lt;br /&gt;
* '''{HIGHLIGHT_UNIT}''' Highlight a unit on the map. Use this to show important units&lt;br /&gt;
* '''{HIGHLIGHT_IMAGE}''' Places and highlights an image on the map. Use this to show important items or locations&lt;br /&gt;
* '''{SET_IMAGE}''' Places an image on the map which has no other function.&lt;br /&gt;
* '''{QUAKE &amp;lt;soundfile&amp;gt;}''' Creates a tremor-like screenshake and plays &amp;lt;soundfile&amp;gt;. For example, '''{QUAKE (rumble.ogg)}'''.&lt;br /&gt;
* '''{FLASH_WHITE}''' Flash the screen white momentarily. You can also replace WHITE with RED, BLUE or GREEN for a different colour.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[DirectActionsWML]]&lt;br /&gt;
* [[InternalActionsWML]]&lt;br /&gt;
* [[EventWML]]&lt;br /&gt;
* [[ReferenceWML]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: WML Reference]]&lt;br /&gt;
[[Category: ActionsWML]]&lt;/div&gt;</summary>
		<author><name>Octalot</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=Timeline_of_Wesnoth&amp;diff=74086</id>
		<title>Timeline of Wesnoth</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=Timeline_of_Wesnoth&amp;diff=74086"/>
		<updated>2025-01-10T15:37:58Z</updated>

		<summary type="html">&lt;p&gt;Octalot: /* 20-130 YW: The Taming of the Wild */ Cite THoT as the source for lore about all runesmiths dying in 40YW&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Translations}}&lt;br /&gt;
This is a official chronological history of the country of Wesnoth and surrounding regions, gleaned from written accounts and verbal histories passed down through the generations. Portions of entries surrounded by parentheses and containing a question mark are assumed or unconfirmed information. The history is sorted by era, and within the era by date, using the Foundation of Wesnoth as a base. BW=Before Wesnoth, YW=Years Wesnoth. They function the same way as BC and AD do in our timekeeping system. Each of the eras is summarized before the timeline for that era begins. This history of the Great Continent is a subject of active scholarship.&lt;br /&gt;
&lt;br /&gt;
The world that Wesnoth resides in is called Irdya. Before the Great Fall and the (unchronicled) technological age, this name is only rarely used.&lt;br /&gt;
&lt;br /&gt;
''This page documents the official, canon timeline, as based on the mainline campaigns. UMC specific info should be in its own pages and should not be here.''&lt;br /&gt;
&lt;br /&gt;
'''Spoiler warning!'''&lt;br /&gt;
This page contains plot spoilers to several campaigns. &lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
[[#Prehistory - 20 YW: The Founding of Wesnoth|The Founding of Wesnoth]]&lt;br /&gt;
&lt;br /&gt;
[[#20-130 YW: The Taming of the Wild|The Taming of the Wild]]&lt;br /&gt;
&lt;br /&gt;
[[#200-350 YW: The Golden Age of Wesnoth|The Golden Age of Wesnoth]]&lt;br /&gt;
&lt;br /&gt;
[[#350-417 YW: The First Dark Age of Wesnoth|The First Dark Age of Wesnoth]]&lt;br /&gt;
&lt;br /&gt;
[[#417-530 YW: The Turmoil of Asheviere|The Turmoil of Asheviere]]&lt;br /&gt;
&lt;br /&gt;
[[#530-630 YW: The Age of Fear|The Age of Fear]]&lt;br /&gt;
&lt;br /&gt;
[[#628-673 YW: The Silver Age of Wesnoth|The Silver Age of Wesnoth]]&lt;br /&gt;
&lt;br /&gt;
[[#761-816 YW: The Legacy of Black-Eye Karun|The Legacy of Black-Eye Karun]]&lt;br /&gt;
&lt;br /&gt;
[[#After the Great Fall|After the Great Fall]]&lt;br /&gt;
&lt;br /&gt;
== Prehistory - 20 YW: The Founding of Wesnoth ==&lt;br /&gt;
During the age of the Founding of Wesnoth, there were two important geographic locations, these being the Green Isle and the Great Continent. Haldric is the main historical figure at this time. This age ends with the founding of Wesnoth as a country in the Great Continent, and with orcs attacking both elves and men from the sea.&lt;br /&gt;
&lt;br /&gt;
=== Prehistory ===&lt;br /&gt;
* Elves and dwarves inhabit the Great Continent.&lt;br /&gt;
* Humans inhabit the distant West.&lt;br /&gt;
* Haldric's people colonise the [[Geography_of_Wesnoth#The_Green_Isle|Green Isle]] from a continent further to the west.&lt;br /&gt;
&lt;br /&gt;
=== 200 BW ===&lt;br /&gt;
* The Lich-Lords arrive on the Green Isle after losing a war in the distant West.&lt;br /&gt;
* After a long war Haldric's people come to dominate the Green Isle.&lt;br /&gt;
* The 'Wesfolk' and their Lich-Lords are pushed onto marginal lands.&lt;br /&gt;
&lt;br /&gt;
=== 12 BW ===&lt;br /&gt;
* The Crown Prince of Southbay discovers the Great Continent.&lt;br /&gt;
&lt;br /&gt;
=== 11-7 BW ===&lt;br /&gt;
* The Crown Prince makes several voyages between the Green Isle and the Great Continent.&lt;br /&gt;
&lt;br /&gt;
=== 6 BW ===&lt;br /&gt;
* Following these voyages to the Great Continent, the elder Crown Prince falls ill and dies.&lt;br /&gt;
* His younger brother is implicated in a plot to kill him.&lt;br /&gt;
* As a distraction the younger Prince starts a war with the Wesfolk and their Lich-Lords.&lt;br /&gt;
* The Lich-Lords sense they will be destroyed and open gates to the homeland of the orcs in the West.&lt;br /&gt;
&lt;br /&gt;
=== 5-2 BW ===&lt;br /&gt;
* The Green Isle is overrun with orcs.&lt;br /&gt;
* The Wesfolk desert their Lich-Lords as they fear becoming prey for the orcs.&lt;br /&gt;
* [[CharactersStorys#Prince_Haldric|Prince Haldric]] leads the evacuation of the survivors to the Great Continent. [[Mainline_Campaigns#The_Rise_of_Wesnoth|'''The Rise of Wesnoth''']] begins.&lt;br /&gt;
&lt;br /&gt;
=== 1 BW ===&lt;br /&gt;
* Human settlers, led by Prince Haldric, arrive at the western coast of the Great Continent (the landfall occurs in the future Bay of Pearls) in large numbers.&lt;br /&gt;
* Humans arrive in the middle of a simmering dispute between the elves and dwarves.&lt;br /&gt;
* The elves and dwarves are distrustful of humans, and there is a small skirmish.&lt;br /&gt;
* Messengers from Wesmere Forest come and ask Haldric to come before the Ka'lian.&lt;br /&gt;
* Prince Haldric asks the Four elvish Lords ([[CharactersStorys#Lady_Dionli|Dionli]], [[CharactersStorys#Lord_Logalmier|Logalmier]], [[Aryad]], and [[El'Isomithir]]) for help and land.&lt;br /&gt;
* They set before him four quests to prove his worth, which he completes.&lt;br /&gt;
&lt;br /&gt;
=== 1 YW ===&lt;br /&gt;
* [[CharactersStorys#Prince_Haldric|Haldric]] is granted the plains north and south of the Great River.&lt;br /&gt;
* Haldric agrees to a Pact of Mutual Defence with the elves, but the Ka'lian decides it will betray him and allow humans and orcs to exhaust each other in war if the opportunity presents. Haldric, learning of this, considers the Pact a dead letter.&lt;br /&gt;
* The Ruby of Fire is temporarily hidden, and the [[CharactersStorys#Lich-Lord_Jevyan|lich-lord Jevyan]] is deceived into believing it is held by the elves. &lt;br /&gt;
* Haldric founds the country of [[Geography_of_Wesnoth#Wesnoth|Wesnoth]] in the central plain south of the great River.&lt;br /&gt;
* Reign of Haldric I (formerly prince Haldric) begins.  [[Mainline_Campaigns#The_Rise_of_Wesnoth|'''The Rise of Wesnoth''']] ends.&lt;br /&gt;
&lt;br /&gt;
=== 2 YW ===&lt;br /&gt;
* Orcs, following the ships fleeing from the Green Isle, begin to arrive on the Great Continent.&lt;br /&gt;
* These orcs are defeated by Haldric's forces.&lt;br /&gt;
* Some of the orcish survivors flee back to the Green Isle, others move to attack the elves.&lt;br /&gt;
* King Haldric helps the elves fight the surviving orcs.&lt;br /&gt;
&lt;br /&gt;
=== 3 YW ===&lt;br /&gt;
* [[Mainline_Campaigns#Winds_of_Fate|'''Winds of Fate''']] begins.&lt;br /&gt;
* Drakes arrive on the Great Continent.&lt;br /&gt;
* Elensefar and Wesmere are raided by Drakes.&lt;br /&gt;
* The drakes build an eyrie north of Wesmere.&lt;br /&gt;
&lt;br /&gt;
=== 4 YW ===&lt;br /&gt;
* [[CharactersStorys#Karron|Karron]] is banished from the Great Continent by [[CharactersStorys#Gorlack|Gorlack]]. [[Mainline_Campaigns#Winds_of_Fate|'''Winds of Fate''']] ends.&lt;br /&gt;
&lt;br /&gt;
=== 8 YW ===&lt;br /&gt;
* A second wave of orcs arrive from the Green Isle; these orcs begin claiming large portions of the northern Great Continent for themselves.&lt;br /&gt;
* [[CharactersStorys#Erlornas|Erlornas]] of Wesmere is involved in the first direct elvish clash with orcs ([[Mainline_Campaigns#An_Orcish_Incursion|'''An Orcish Incursion''']] takes place in 8-9YW).&lt;br /&gt;
* Haldric I publicly repudiates the Pact he spoke with the elves, refusing to give aid. &amp;lt;ref&amp;gt;{{Cite|treaty}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 9-11 YW ===&lt;br /&gt;
* Many elves are killed in battle by the orcs.&lt;br /&gt;
* Elvish emissaries are turned away from Wesnoth.&lt;br /&gt;
&lt;br /&gt;
=== 12 YW ===&lt;br /&gt;
* Orcs fail to take the Wesmere Forest and instead march down the coast, devastating human settlements there.&lt;br /&gt;
* Elves refuse to aid the humans in confronting the orcs.&lt;br /&gt;
* Human refugees from the coastal settlements relocate in what will become known as the Great Central Plain.  Dan'Tonk, which will become Wesnoth's largest city, is founded.&lt;br /&gt;
&lt;br /&gt;
=== 20 YW ===&lt;br /&gt;
* [[CharactersStorys#Prince_Haldric|Haldric I]] dies.&lt;br /&gt;
* [[CharactersStorys#Haldric_II|Haldric II]] ascends to the throne.&lt;br /&gt;
* [[CharactersStorys#Kalenz_2|Kalenz]] and [[CharactersStorys#Landar|Landar]] escape an orcish invasion of their home in Lintanir Forest. [[Mainline_Campaigns#Legend_of_Wesmere|'''The Legend of Wesmere''']] begins.&lt;br /&gt;
* Humans and elves decisively defeat the orcs at Tath, thus halting the orcish advance.&lt;br /&gt;
* A new treaty between humans and elves is signed and King Haldric II allows emissaries of the elves to return to Wesnoth.&lt;br /&gt;
* Elves inform [[CharactersStorys#Haldric_II|Haldric II]] of the danger posed by the unshielded Ruby of Fire.&lt;br /&gt;
* [[CharactersStorys#Kalenz_2|Kalenz]] and [[CharactersStorys#Landar|Landar]], later to become successive High Lords of the Elves, are able to sneak into an orcish camp by stealth and assassinate the Great Chief Brurbar. A long orcish civil war for succession follows. The orcs are unable to undertake action against any other race during this period and Wesnoth enjoys a long period during which it can expand with little opposition.&lt;br /&gt;
&lt;br /&gt;
== 20-130 YW: The Taming of the Wild ==&lt;br /&gt;
This era is that in which the kingdom of [[Geography_of_Wesnoth#Wesnoth|Wesnoth]] expanded and defined its borders, and settled the area which it had claimed for its own. The Taming of the Wild refers to the settling of the unsettled lands, as well as to the colonization of the Northlands. The end of this era is marked by friction between the city-state of [[Geography_of_Wesnoth#Elensefar|Elensefar]] and the country of Wesnoth, which will continue for the next several hundred years.&lt;br /&gt;
&lt;br /&gt;
=== 21 YW ===&lt;br /&gt;
* Founding of the Great Academy on Alduin.&lt;br /&gt;
&lt;br /&gt;
* [[CharactersStorys#Kalenz|Kalenz]] is relieved of command by the Ka'lian.  He retires to Lintanir Forest with [[CharactersStorys#Cleodil|Cleodil]].  A faction of xenophobic elves begins to gather around [[CharactersStorys#Landar|Landar]].&lt;br /&gt;
&lt;br /&gt;
=== 22 YW ===&lt;br /&gt;
* While studying at the Academy, [[CharactersStorys#Ardonna_.2F_Ardryn-Na|Ardonna]] resolves to spend the winter researching the Lich Lords' longevity.&lt;br /&gt;
&lt;br /&gt;
=== 23 YW ===&lt;br /&gt;
* Action of '''Secrets of the Ancients''' takes place.&lt;br /&gt;
&lt;br /&gt;
=== 25-40 YW ===&lt;br /&gt;
* In 25 YW [[CharactersStorys#Haldric_II|Haldric II]] sends an expedition to retrieve the Ruby of Fire from its place of concealment.&lt;br /&gt;
* Haldric II commissions a dwarven tribe to build the Sceptre of Fire with the Ruby of Fire as its centerpiece; elves associated with [[CharactersStorys#Landar|Landar's]] faction attack during the transfer. [[Mainline_Campaigns#The_Sceptre_of_Fire|'''Sceptre of Fire''']] begins.&lt;br /&gt;
* Action of '''The Sceptre of Fire''' takes place.  Haldric II is informed that the Sceptre was both completed and lost in the year 40.  It will not be recovered for nearly 500 years.&lt;br /&gt;
* With the death of [[CharactersStorys#Thursagan|Thursagan]], the Runemaster, all runemasters are killed and runesmithing is lost for several centuries.&amp;lt;ref&amp;gt;{{Cite|reclaiming}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 26-50 YW ===&lt;br /&gt;
* [[CharactersStorys#Landar|Landar]] declares himself High Lord of the Elves, leading to civil war.&lt;br /&gt;
&lt;br /&gt;
=== 51 YW ===&lt;br /&gt;
* Wesnothian New Writing (the script later called &amp;quot;steel-hand&amp;quot;, to distinguish it from the more complex &amp;quot;brush-hand&amp;quot; cursive brought from the [[Geography_of_Wesnoth#The_Green_Isle|Green Isle]]) is promulgated by royal decree.  From this date all royal documents and public inscriptions are in New Writing. It spreads rapidly via the mercantile class. The older brush-hand writing continues to be used for magical purposes, scholarship, and in certain elevated literary forms.&lt;br /&gt;
&lt;br /&gt;
=== 50-93 YW ===&lt;br /&gt;
* Elvish civil war (and [[Mainline_Campaigns#Legend_of_Wesmere|'''The Legend of Wesmere''']]) ends.  [[CharactersStorys#Kalenz_2|Kalenz]] declared High Lord, begins reorganizing and militarizing elvish society to fight the orcs.  In late 93 YW he cedes control to a reconstituted Ka'lian and retires again to the Forest of Lintanir.&lt;br /&gt;
&lt;br /&gt;
=== 161-164 YW ===&lt;br /&gt;
* The newly crowned king sought to make safe once and for all the wildlands that separated the human cities surrounding Weldyn and the coastal regions of [[Elensefar]].&lt;br /&gt;
* The grand army of Wesnoth, personally led by the High Council of Archmagi, destroyed all enemies residing within Wesnoth.&lt;br /&gt;
* The city-state of Elensefar is formally united to the kingdom. Settlements from it spread north of the river into the new frontier province of Annuvin, carefully avoiding the margins of Wesmere Forest.&lt;br /&gt;
&lt;br /&gt;
=== 164-176 YW ===&lt;br /&gt;
* During this twelve year span, the western fortress of Halstead was erected in the very heart of the western wilderlands.&lt;br /&gt;
&lt;br /&gt;
=== 199 YW ===&lt;br /&gt;
* Emboldened by the far-reaching arm of Halstead's protection, settlement in the west explodes&lt;br /&gt;
* The settlements of Aldril and Carcyn grow to become major cities, the first as an important port due to its position on the Bay of Pearls, and the second as a stop on the road to Elensefar and military outpost along the Great River&lt;br /&gt;
* Settlers from Carcyn cross the Great River to establish the first settlements north of it and east of Wesmere.&lt;br /&gt;
&lt;br /&gt;
== 200-350 YW: The Golden Age of Wesnoth ==&lt;br /&gt;
The Golden Age of Wesnoth was the time of the great kings, and of peace and prosperity within the kingdom. The orcs had suffered a grave defeat at the hands of Wesnoth and Elensefar seventy-five years earlier, so they did not pose much of a threat, and whenever they did attack they were quickly defeated. This allowed the army to lessen in size, and the kings of this age to undertake the great public works they are renowned for. The era ends when the king of Wesnoth dies without an heir, and a new dynasty begins.&lt;br /&gt;
&lt;br /&gt;
=== 251 YW ===&lt;br /&gt;
* [[CharactersStorys#Cleodil|Cleodil]], wife of [[CharactersStorys#Kalenz_2|Kalenz]], dies.&lt;br /&gt;
&lt;br /&gt;
=== 350 YW ===&lt;br /&gt;
* Disintegration of the Kingdom follows the death of Haldric IV.&lt;br /&gt;
* [[Geography_of_Wesnoth#Elensefar|Elensefar]] remains a province of Wesnoth but exerts increasing independence due to isolation.&lt;br /&gt;
* Treaty between lord of Elensefar and king of Wesnoth signed.&lt;br /&gt;
&lt;br /&gt;
== 350-417 YW: The First Dark Age of Wesnoth ==&lt;br /&gt;
The first Dark Age was a time of strife and invasion. When Haldric IV died, he left Wesnoth without a king, and the next 70 years were marked by short-lived dynasties, attacks by ever more aggressive orcs, and the further separation of Wesnoth and Elensefar. The Dark Age ended when Garard I took the throne, and began a new dynasty that would last for several hundred years.&lt;br /&gt;
&lt;br /&gt;
=== 360 YW ===&lt;br /&gt;
* [[CharactersStorys#Malin_Keshar|Malin Keshar]] born in Parthyn.&lt;br /&gt;
&lt;br /&gt;
=== 363 YW ===&lt;br /&gt;
* Last of [[CharactersStorys#Kalenz|Kalenz's]] children dies.  Kalenz, condemned to outlive his offspring by the potion of Crelanu, leaves the Forest of Lintanir and begins wandering the Great Continent.&lt;br /&gt;
&lt;br /&gt;
* Village of Maghre terrorized by a minor necromancer. Action of [[Mainline_Campaigns#A_Tale_Of_Two_Brothers|'''A Tale of Two Brothers''']] takes place.&lt;br /&gt;
&lt;br /&gt;
=== 389 YW ===&lt;br /&gt;
* Garard, a future king of Wesnoth, is born.&lt;br /&gt;
* [[CharactersStorys#Malin_Keshar|Malin Keshar]] returns to Parthyn from the Academy at Alduin. [[Mainline_Campaigns#Descent_into_Darkness|'''Descent Into Darkness''']] begins.&lt;br /&gt;
&lt;br /&gt;
== 417-530 YW: The Turmoil of Asheviere ==&lt;br /&gt;
King Garard's dynasty was long-lived and productive, but it was also punctuated by significant turmoil: the end of the first king's reign was marred by orcish and undead raids, and the second was murdered by his own wife and son. It was not until 517 YW that the usurpation of the throne by Queen Mother Asheviere was ended.&lt;br /&gt;
&lt;br /&gt;
=== 417 YW ===&lt;br /&gt;
* Ending years of strife and division, Garard I seizes the throne and becomes king of Wesnoth, beginning the [[Garardine Dynasty]].&lt;br /&gt;
&lt;br /&gt;
=== 440 YW ===&lt;br /&gt;
* [[CharactersStorys#Garard_II|Crown Prince Garard II]] is born.&lt;br /&gt;
&lt;br /&gt;
=== 442 YW ===&lt;br /&gt;
* [[CharactersStorys#Delfador|Delfador]], later called &amp;quot;the Great&amp;quot;, is born.&lt;br /&gt;
&lt;br /&gt;
=== 450 YW ===&lt;br /&gt;
* Prince Arand is born.&lt;br /&gt;
&lt;br /&gt;
=== 468 YW ===&lt;br /&gt;
* Zorlan becomes Great Chief of the northern orcs&lt;br /&gt;
* [[CharactersStorys#Delfador|Delfador]] graduates from the Great Academy. [[Mainline_Campaigns#Delfador.27s_Memoirs|'''Delfador's Memoirs''']] begins.&lt;br /&gt;
&lt;br /&gt;
=== 470 YW ===&lt;br /&gt;
* Garard I dies; [[CharactersStorys#Garard_II|Garard II]] ascends to the throne of Wesnoth&lt;br /&gt;
* Orcs under Great Chief Zorlan and undead raised by the necromancer [[CharactersStorys#Iliah-Malal|Iliah-Malal]] raid Wesnoth's borders. All but the first and the last three scenarios of [[Mainline_Campaigns#Delfador.27s_Memoirs|'''Delfador's Memoirs''']] take place in this year.&lt;br /&gt;
* Control of the Estmarks is effectively lost during this war, not to be regained for decades.  Outposts are built on the near side of the Weldyn to repel orc raids.  The long watch of the River Guard begins.&lt;br /&gt;
&lt;br /&gt;
=== 478 YW ===&lt;br /&gt;
* Garard II marries Asheviere.&lt;br /&gt;
* Garard issues the Edict of the Sceptre, providing that the crown shall settle after his death on whichever member of the royal family successfully retrieves it from the Caverns of Flame.&lt;br /&gt;
&lt;br /&gt;
=== 480 YW ===&lt;br /&gt;
* Crown Prince Eldred is born.&lt;br /&gt;
&lt;br /&gt;
=== 483 YW ===&lt;br /&gt;
* Erain and Ethyn, identical twins and brothers of Eldred, are born.&lt;br /&gt;
&lt;br /&gt;
=== 498 YW ===&lt;br /&gt;
* Princess Li'sar is born.&lt;br /&gt;
&lt;br /&gt;
=== 500 YW ===&lt;br /&gt;
* Prince Konrad is born, the youngest of several sons of Prince Arand.&lt;br /&gt;
* Wesnoth and the orcs of the north go to war.&lt;br /&gt;
&lt;br /&gt;
=== 501 YW ===&lt;br /&gt;
&lt;br /&gt;
===== Betrayal on the battlefield =====&lt;br /&gt;
* Garard leads his army to orc encampment at Galcadar by the Ford of Abez.&lt;br /&gt;
* Garard's forces split into two groups, one led by himself and the other by his son Eldred.&lt;br /&gt;
* Eldred betrays his father and attacks him with the troops under his control.&lt;br /&gt;
* Eldred slays King Garard and his uncle Prince Arand on the battlefield of Abez.&lt;br /&gt;
&lt;br /&gt;
===== Reprisal =====&lt;br /&gt;
* Delfador escapes the battle and heads to Weldyn.&lt;br /&gt;
* Eldred gives tribute to the orcish king, who stops his attacks.&lt;br /&gt;
* Delfador gathers a force of Loyalists to avenge Garard's Death.&lt;br /&gt;
* Eldred's forces confront Delfador's Loyalists at Weldyn.&lt;br /&gt;
* The Loyalists are defeated, but Eldred is slain by Delfador in the fight.&lt;br /&gt;
&lt;br /&gt;
===== Asheviere seizes power =====&lt;br /&gt;
* Asheviere orders the slaughter of Garard's nephews and declares herself Queen of Wesnoth.&lt;br /&gt;
* Hearing of the news Delfador infiltrates the palace.&lt;br /&gt;
* Delfador finds the youngest prince Konrad as he is slain.&lt;br /&gt;
* Delfador flees, taking Konrad's body for burial to the land of the elves.&lt;br /&gt;
* While traveling through Wesnoth, Elf Lady Parandra finds an orphaned human child.&lt;br /&gt;
* Parandra and Delfador agree to give the orphan the identity of Prince Konrad.&lt;br /&gt;
* Delfador and Konrad flee to live in refuge with the Wood Elves of the great southwestern forest.&lt;br /&gt;
&lt;br /&gt;
===== The country resists Asheviere =====&lt;br /&gt;
* Elensefar refuses to submit to Asheviere and declares itself an independent city-state.&lt;br /&gt;
* After several defeats, Wesnoth's army retreats from the remote areas of the kingdom.  The western Wesnothian border recedes, is fixed, and remains heavily defended.&lt;br /&gt;
* As a result of the loyalist withdrawal, several small human communities on the west coast of the Great Continent live in relative independence while elves flourish in the great forest to the southwest of Wesnoth.&lt;br /&gt;
* A band of Wesnoth citizens organizes resistance to Asheviere's siezure of power.  They are eventually forced to abandon their home and settle in the Three Sisters ('''Liberty''').&lt;br /&gt;
&lt;br /&gt;
=== 502-517 YW ===&lt;br /&gt;
* Delfador raises Konrad under the protection of the elves.&lt;br /&gt;
&lt;br /&gt;
=== 517 YW ===&lt;br /&gt;
* Asheviere hires orcish forces to hunt down her nephew-in-law Konrad.&lt;br /&gt;
* Orcish forces converge on Delfador's refuge.&lt;br /&gt;
* Konrad flees his home with the elves and embark upon a quest to regain the throne of Wesnoth.  '''Heir To The Throne''' begins.&lt;br /&gt;
&lt;br /&gt;
=== 518 YW ===&lt;br /&gt;
* Konrad crosses the Great River into the Northlands on a search for the Sceptre of Fire.&lt;br /&gt;
* They enter the Caves of Knalga, allied with Princess Li'sar, and find it.&lt;br /&gt;
* They return to Wesnoth and claim the throne.  '''Heir to the Throne''' ends.&lt;br /&gt;
&lt;br /&gt;
=== 522 YW ===&lt;br /&gt;
* Birth of Princess Ana'sar.&lt;br /&gt;
&lt;br /&gt;
=== 530 YW ===&lt;br /&gt;
* Wesnothian colonists begin reclaiming the Estmarks.&lt;br /&gt;
&lt;br /&gt;
=== 544 YW ===&lt;br /&gt;
* With both sides of the lower Weldyn River again civilized territory, the River Guard posts south of Soradoc are abandoned.  Wesnothian military activity shifts eastward into the Estmarks.&lt;br /&gt;
&lt;br /&gt;
== 530-630 YW: The Age of Fear ==&lt;br /&gt;
The Age of Fear takes its names from the events of the end of the era. On the surface, the first 77 years were very uneventful for the kingdom of Wesnoth. However, during this time unexplainable magical events took place, especially in the eastern lands. Previously tamed lands were slowly claimed by wilderness as fear and paranoia gradually overshadowed the spirit of pioneering and adventure displayed earlier in Wesnoth's history. In the last 10 years of the age, Wesnoth bore the brunt of the most powerful undead attack ever and was nearly destroyed. By the end of the era, most of Wesnoth had been made barren, most of the great buildings inside and outside of Weldyn were razed, and the population of Wesnoth was half of what it had been.&lt;br /&gt;
&lt;br /&gt;
It was in this era that certain areas of the chaotic Northlands were for the first time put into any kind of law and order. A small group of humans and dwarves, accepting anyone of any race who wished to join, formed themselves into the &amp;quot;Northern Alliance”, with the vision of making the Northlands safe to live in. Over time, this alliance grew slowly but steadily in power. By the end of the era, the alliance had succeeded in making a few small areas, including Knalga and the surrounding regions, stable and prosperous. Consequently, many people evacuated from the wasteland that most of Wesnoth had become and moved north - depleting the population of Wesnoth still further.&lt;br /&gt;
&lt;br /&gt;
=== 533 YW ===&lt;br /&gt;
* Delfador succumbs to old age and dies, his body is entombed alongside his staff in Eregonor.&lt;br /&gt;
* The next great sage of Wesnoth, [[CharactersStorys#Dacyn|Dacyn]], is born.&lt;br /&gt;
&lt;br /&gt;
=== 534 YW ===&lt;br /&gt;
&lt;br /&gt;
* The small community of Dwarven Doors, in the Northlands just outside Knalga, rebels against the orcish overlords.  '''Northern Rebirth''' begins.&lt;br /&gt;
* The residents, led by Tallin, head underground and find dwarves, whom they ally with.&lt;br /&gt;
* Their combined forces destroy a lich who is attempting to claim Knalga as his own.&lt;br /&gt;
* Abhai finds the [[CampaignDialogue:NR#Abhai_Finds_Rod_of_Justice|Rod of Justice]].&lt;br /&gt;
&lt;br /&gt;
=== 535 YW ===&lt;br /&gt;
&lt;br /&gt;
* The warlord-aspirant Rakshas attacks Tallin and his forces, but does not penetrate the dwarves' defences.&lt;br /&gt;
* To help defeat the orcs, Tallin secures the help of two Liches, and rescues an elvish princess to secure the help of the elves.&lt;br /&gt;
* Assisted by his new allies, Tallin smashes the forces of Rakshas.&lt;br /&gt;
* According to some historians, Tallin and the elvish princess are married; others say they parted in bad blood.&lt;br /&gt;
* To preserve the new-found peace in the Northlands, Tallin and his allies form the Northern Alliance.  '''Northern Rebirth''' ends.&lt;br /&gt;
&lt;br /&gt;
=== 550 YW ===&lt;br /&gt;
&lt;br /&gt;
* Lord Hamel of Knalga sends an expedition to Kal Kartha to determine the fate of the Hammer of Thursagan ('''The Hammer of Thursagan''' takes place in late 550 YW to early 551 YW.).&lt;br /&gt;
* Dwarves at Knalga and elsewhere  begin to reclaim the lost art of runesmithing.&lt;br /&gt;
* Wesnothian colonization expands southward past Fort Tahn.&lt;br /&gt;
&lt;br /&gt;
=== 563 YW ===&lt;br /&gt;
* Konrad and Li'sar die after an extraordinarily long reign.&lt;br /&gt;
* Princess Ana'sar becomes queen.&lt;br /&gt;
* The seer Galdren becomes prominent at the court of Weldyn.&lt;br /&gt;
&lt;br /&gt;
=== 585 YW ===&lt;br /&gt;
* Queen Ana'sar retires.&lt;br /&gt;
* Haldric VII becomes king of Wesnoth.&lt;br /&gt;
&lt;br /&gt;
=== 589 YW ===&lt;br /&gt;
* Dacyn the White Mage and Ravanal, an eastern wizard, compete to be the king's advisor.&lt;br /&gt;
* The seer Galdren dies after advising Haldric VII to choose Dacyn.&lt;br /&gt;
* The king does as Galdren advises.&lt;br /&gt;
&lt;br /&gt;
=== 593 YW ===&lt;br /&gt;
* Ravanal reveals that he has turned to evil, and flees from Weldyn.&lt;br /&gt;
* Konrad II is born.&lt;br /&gt;
* Certain southern frontier regions are formally annexed to the Kingdom of Wesnoth as the Province of Kerlath.&lt;br /&gt;
&lt;br /&gt;
=== 598 YW ===&lt;br /&gt;
* South Guard organized as  a semi-detached formation of the Royal Army, to protect the inhabitants of the frontier province of Kerlath.&lt;br /&gt;
&lt;br /&gt;
=== 607 YW ===&lt;br /&gt;
* South Guard ceases reporting.  Haldric VII sends Deoran, grandson of Haldiel, to investigate.  '''The South Guard''' takes place in 607-608 YW.&lt;br /&gt;
&lt;br /&gt;
=== 612 YW ===&lt;br /&gt;
* Haldric VII dies. Konrad II is crowned King of Wesnoth.&lt;br /&gt;
* Dacyn continues his duties as advisor with Konrad II.&lt;br /&gt;
&lt;br /&gt;
=== 625 YW ===&lt;br /&gt;
* Mysterious disappearances of livestock and peasants cause partial evacuation of the the '''Estmark Hills'''.  Lords of the Horse Plains report increased banditry from there.&lt;br /&gt;
* Konrad II sends [[CharactersStorys#Dacyn|Dacyn]] with [[CharactersStorys#Owaec|Owaec]] and [[CharactersStorys#Gweddry|Gweddry]] to man the old River Guard strongpoints. [[Mainline_Campaigns#The_Eastern_Invasion|'''Eastern Invasion''']] begins.&lt;br /&gt;
&lt;br /&gt;
=== 626 YW ===&lt;br /&gt;
* [[CharactersStorys#Mal-Ravanal|Mal-Ravanal]] attacks the middle outpost where [[CharactersStorys#Gweddry|Gweddry]] and [[CharactersStorys#Dacyn|Dacyn]] are stationed.&lt;br /&gt;
* Dacyn and Gweddry travel to the northern outpost, and, with [[CharactersStorys#Owaec|Owaec]], retreat into the northlands.&lt;br /&gt;
* In the Far North, the wife of Kai Laudiss slain in a large raid by the orcs of Tirigaz on Jotha&lt;br /&gt;
* Kai Laudiss slain by poisoned orcish dart during failed attack on the Port of Tirigaz orcs. His son, [[CharactersStorys#Kai_Krellis|Krellis]] succeeds him as Kai and relies on the wisdom of [[CharactersStorys#Cylanna|Cylanna]], a priestess.&lt;br /&gt;
* The merfolk city of Jotha is overrun by undead (Mal Kevek and others).  The action of [[Mainline_Campaigns#Dead_Water|'''Dead Water''']] takes place.&lt;br /&gt;
&lt;br /&gt;
=== 627 YW ===&lt;br /&gt;
* Wesnoth's last defences are broken and the undead march on Wesnoth&lt;br /&gt;
* In the northlands, the orcs drive [[CharactersStorys#Gweddry|Gweddry's]] army back across the river.&lt;br /&gt;
* Weldyn is besieged.&lt;br /&gt;
* Gweddry breaks through undead lines to reach Weldyn and a council is held.&lt;br /&gt;
* Gweddry's army is fortunate and kills [[CharactersStorys#Mal-Ravanal|Mal-Ravanal]].  [[Mainline_Campaigns#The_Eastern_Invasion|'''Eastern Invasion''']] ends. [[Mainline_Campaigns#Dead_water|'''Dead Water''']] ends (about this time).&lt;br /&gt;
* Wesnoth is saved, but large portions have been laid waste by the undead.&lt;br /&gt;
* After destroying [[CharactersStorys#Mal-Ravanal|Mal-Ravanal's]] henchmen the mermen relaxed and began rebuilding in earnest, and soon Jotha was restored.&lt;br /&gt;
&lt;br /&gt;
== 628-673 YW: The Silver Age of Wesnoth ==&lt;br /&gt;
&lt;br /&gt;
The Silver Age, or restoration of the Wesnothian kingdom, essentially coincides with the rest of the long and successful reign of [[CharactersStorys#Konrad_II|Konrad II]].  During this period Wesnoth largely recovered from the damage that Mal-Ravanal's undead attack had done. It would, however, never quite regain the majesty it had at the height of its power.&lt;br /&gt;
&lt;br /&gt;
The Northlands, aided by a second wave of colonization north from Wesnoth, become more civilised and stable. Although nowhere near as prosperous as Wesnoth was during its Golden Age, the Northlands developed towns of significant size and a thriving - if somewhat dangerous - trade network. &lt;br /&gt;
&lt;br /&gt;
Four major powers soon came to dominate much of the Northlands. First there were the dwarves, who controlled most of the mountains and a vast array of underground tunnels and caverns. To the east, shrouded in mystery, lay the elvish forests which continued to be inaccessible to anyone not of elvish blood. The remaining landscape was dominated either by orcish tribes, or independent human earldoms. As competition for the land grew fierce, wars smoldered between human and orcish forces. &lt;br /&gt;
&lt;br /&gt;
=== 628-635 YW ===&lt;br /&gt;
* [[CharactersStorys#Konrad_II|Konrad II]] begins his attempt to rebuild Wesnoth.&lt;br /&gt;
&lt;br /&gt;
=== 673 YW ===&lt;br /&gt;
* [[CharactersStorys#Konrad_II|Konrad II]] dies, bringing the [[Garardine Dynasty]] to an end.  Second Wesnothian civil war begins.&lt;br /&gt;
&lt;br /&gt;
== 786-826 YW: The Legacy of Black-Eye Karun ==&lt;br /&gt;
&lt;br /&gt;
After decades of struggle, Black-Eye Karun becomes the first warlord since the assassination of Great Chief Brurbar in 20 YW to unite all the different squabbling orcish tribes under his banner. Among his many accomplishments as a Sovereign, his most famous is the creation of the Great Council. &lt;br /&gt;
&lt;br /&gt;
Karun was a far-sighted individual and he knew that after his death the orcish tribes would once again turn to fighting among themselves, with little he could do to prevent that and consequent peril from the Wesnothians and elves.&lt;br /&gt;
&lt;br /&gt;
Consequently, Karun selected from among all the different tribes six of the most sober and wisest orcs and thus created the Great Council. It was the Great Council's job to stay aloof from any tribal or territorial squabbling amongst the orcs, but yet always remain there to give advice to whomever came to seek it. In order to preserve the orcish race in the event of an emergency, he invested in them the power to call up The Great Horde. It was established that every orc, no matter what tribe he came from, must obey the summons of The Great Horde and follow wholeheartedly the leader that the Great Council put at the head of The Great Horde.&lt;br /&gt;
&lt;br /&gt;
===786 YW===&lt;br /&gt;
* Karun is born.&lt;br /&gt;
&lt;br /&gt;
===805 YW===&lt;br /&gt;
* Karun devised the formation of the Great Council.&lt;br /&gt;
&lt;br /&gt;
===811 YW===&lt;br /&gt;
* A border dispute between Karun and a human enclave aligned with the Northern Alliance leaves several men and orcs dead and begins a feud that will grow into a fifteen-year war.&lt;br /&gt;
&lt;br /&gt;
===812 YW===&lt;br /&gt;
* Rahul I becomes Lord Protector of the Northern Alliance.&lt;br /&gt;
&lt;br /&gt;
===816 YW===&lt;br /&gt;
* [[CharactersStorys#Kapou.27e|Kapou’e]] is born&lt;br /&gt;
&lt;br /&gt;
===826 YW===&lt;br /&gt;
* Rahul I (Lord Protector of the Northern Alliance) and Black Eye Karun sign a peace treaty ending a 15 year war between the humans and the orcs. Soon after this Karun, is ambushed and killed in mysterious circumstances.&lt;br /&gt;
&lt;br /&gt;
===829 YW===&lt;br /&gt;
* Frustrated by the fallout of Karun's supposed assassination, Rahul I resigns, and Howgarth III takes his place as Lord Protector.&lt;br /&gt;
&lt;br /&gt;
===842 YW===&lt;br /&gt;
* Famine in the Northlands. Famine led humans to colonize some orcish lands and push orcs into desolated hill country. The few orcish tribes who had remained part of the Alliance, feeling the pressure, either left Alliance territory or revolted and were destroyed.&lt;br /&gt;
* Retaliating, the orcs systematically slaughtered human colonies and villages on their lands. Then, Earl Lanbec'h — the most powerful human warlord of the North — determined to abolish the orcish menace raised an army and conferred leadership of it to his son-in-law Baron Alber.&lt;br /&gt;
* In response, the Great Council set up by the Black Eye Karun calls upon The Great Horde and bestows leadership of it upon [[CharactersStorys#Kapou.27e|Kapou’e]]; [[Mainline_Campaigns#Son_of_the_Black_Eye|'''Son of the Black Eye''']] begins.&lt;br /&gt;
&lt;br /&gt;
===843 YW===&lt;br /&gt;
* Half of the Great Council is treacherously slain by the allied human forces and orcish unity disintegrates. Faced with the extermination of all the orcs on the Great Continent, [[CharactersStorys#Kapou.27e|Kapou’e]] forcibly asserts his control over the orcish territories and defeats the enemy forces. The Northern Alliance arrives on the scene in time for the final battle and helps Kapou’e defeat the forces of the northern earldoms, who had broken the treaty. Kapou’e then assumes the position of Sovereign over the northern tribes, and his rule ushers in an unprecedented era of unity and prosperity for the orcs.&lt;br /&gt;
* After 843: Portions of Kapou'e's army act as mercenaries in foreign struggles with other races which keeps them from attacking their nearest neighbors.&lt;br /&gt;
&lt;br /&gt;
===852 YW===&lt;br /&gt;
* [[CharactersStorys#Kapou.27e|Kapou’e]] repels a large elvish invasion.&lt;br /&gt;
&lt;br /&gt;
===858 YW===&lt;br /&gt;
* The humans once again stage an invasion but prove to be no match for the united orcish forces under the leadership of [[CharactersStorys#Kapou.27e|Kapou’e]].  [[Mainline_Campaigns#Son_of_the_Black_Eye|'''Son of the Black Eye''']] ends.&lt;br /&gt;
&lt;br /&gt;
==After the Great Fall==&lt;br /&gt;
At some unknown point in the future, an unspeakable cataclysm scorched the surface of the lands. The Wesnoth magicians try to raise up a 3rd sun in the sky, Gaia, but they fail and the 'sun' falls down over Weldyn. The capital is no more. The King and his family are dead and there is no heir. The local leaders tear apart Wesnoth. The nights become longer, days hotter. Evil creatures show up. Forests die, hills turn into rocky wastelands and fields become barren deserts. In the apocalypse allies turn against each other and friends fight over what few resources remain. The great nations were destroyed, and huge numbers of people died. Still amidst the chaos somehow small groups of people survived, sheltered in hidden places. In this post-apocalyptic world survival is a daily struggle as a few remaining tribes eke out an existence among the ruins of fallen empires. Heroic bands of elves, nomadic refugee humans, savage hordes of orcs and dark necromancers all forge new lives under the merciless dual suns, Sela and Naia, of this new Irdya.&lt;br /&gt;
&lt;br /&gt;
===??? Post-Wesnoth===&lt;br /&gt;
&lt;br /&gt;
* The Quenoth elves adapt to life in barren world of the Great Southern Desert. Over time they lost their affinity for the woodlands of their ancestry and embrace life in the sandy wastelands.&lt;br /&gt;
* Under the leadership of Tanuil, the Quenoth elves build and sustain a fortified village around a rare oasis. The village thrives amidst the hostilities of the desert.&lt;br /&gt;
* One night, a meteor storm rains from the sky and destroys the village of the Quenoth elves. '''Under the Burning Suns''' begins. The next day, Tanuil, like many others, is missing and presumed dead. Kalehssar (Kaleh), nephew of Tanuil, takes leadership of the remaining Quenoth elves as the surviving next of kin.&lt;br /&gt;
* Kaleh, heeding the voice of his god Eloh in his dreams, gathers the remaining Quenoth elves and leads them north to a new promised land, foregoing rebuilding of their desert village.&lt;br /&gt;
* The Quenoth elves battle their way north through undead, orcs, bandits and other evil, venturing underground beneath a large mountain range at the command of Eloh.&lt;br /&gt;
* Befriending unexpected allies underground, Kaleh's forces survive to the other side of the mountain.&lt;br /&gt;
* Keratur, son of Tanuil and survivor of the cataclysm, insane with fright attacks Kaleh. Kaleh defeats Keratur.&lt;br /&gt;
* Kaleh defies commands given him by a vision of Eloh.&lt;br /&gt;
* The Quenoth reach the ocean. Aided by merfolk, they escape the mainland and head for a newly discovered island, a place where the Quenoth may settle in peace.&lt;br /&gt;
* On the island, the Quenoth confront Yechnagoth, the Eater of Souls and impersonator of Eloh. Yechnagoth and army are destroyed by the Quenoth.&lt;br /&gt;
* Kaleh and the elves settle on their newfound, and newly named, Quenoth Isle. '''Under the Burning Suns''' ends.&lt;br /&gt;
&lt;br /&gt;
== History Credits ==&lt;br /&gt;
Timelined by Kamahawk and Turin.  Revised to incorporate material from later version of Legend of Wesmere and reconcile different versions of the history of the Sceptre of Fire by Eric S. Raymond.&lt;br /&gt;
&lt;br /&gt;
* History derived from the following [[Mainline_Campaigns|mainline campaigns]]:&lt;br /&gt;
** [[The Rise of Wesnoth]]&lt;br /&gt;
** [[Legend of Wesmere]]&lt;br /&gt;
** [[A Tale of Two Brothers]]&lt;br /&gt;
** [[Descent into Darkness]]&lt;br /&gt;
** [[Delfador's Memoirs]]&lt;br /&gt;
** [[Liberty]]&lt;br /&gt;
** [[Heir to the Throne]]&lt;br /&gt;
** [[Northern Rebirth]]&lt;br /&gt;
** [[The Hammer of Thursagan]]&lt;br /&gt;
** [[TheEasternInvasion|Eastern Invasion]]&lt;br /&gt;
** [[Dead Water]]&lt;br /&gt;
** [[UnderTheBurningSuns|Under the Burning Suns]]&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[Geography of Wesnoth]]&lt;br /&gt;
* [[Poetry of Wesnoth]]&lt;br /&gt;
* [[Races]]&lt;br /&gt;
* [[FactionHistory|History of various factions]]&lt;br /&gt;
* [[Future History]] '''(unofficial)'''&lt;br /&gt;
&lt;br /&gt;
[[Category:World of Wesnoth]]&lt;br /&gt;
[[Category:History]]&lt;/div&gt;</summary>
		<author><name>Octalot</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=Timeline_of_Wesnoth&amp;diff=74085</id>
		<title>Timeline of Wesnoth</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=Timeline_of_Wesnoth&amp;diff=74085"/>
		<updated>2025-01-10T14:57:32Z</updated>

		<summary type="html">&lt;p&gt;Octalot: /* Prehistory - 20 YW: The Founding of Wesnoth */ Add citation to explain where Haldric I's repudiation of the pact is stated in canon&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Translations}}&lt;br /&gt;
This is a official chronological history of the country of Wesnoth and surrounding regions, gleaned from written accounts and verbal histories passed down through the generations. Portions of entries surrounded by parentheses and containing a question mark are assumed or unconfirmed information. The history is sorted by era, and within the era by date, using the Foundation of Wesnoth as a base. BW=Before Wesnoth, YW=Years Wesnoth. They function the same way as BC and AD do in our timekeeping system. Each of the eras is summarized before the timeline for that era begins. This history of the Great Continent is a subject of active scholarship.&lt;br /&gt;
&lt;br /&gt;
The world that Wesnoth resides in is called Irdya. Before the Great Fall and the (unchronicled) technological age, this name is only rarely used.&lt;br /&gt;
&lt;br /&gt;
''This page documents the official, canon timeline, as based on the mainline campaigns. UMC specific info should be in its own pages and should not be here.''&lt;br /&gt;
&lt;br /&gt;
'''Spoiler warning!'''&lt;br /&gt;
This page contains plot spoilers to several campaigns. &lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
[[#Prehistory - 20 YW: The Founding of Wesnoth|The Founding of Wesnoth]]&lt;br /&gt;
&lt;br /&gt;
[[#20-130 YW: The Taming of the Wild|The Taming of the Wild]]&lt;br /&gt;
&lt;br /&gt;
[[#200-350 YW: The Golden Age of Wesnoth|The Golden Age of Wesnoth]]&lt;br /&gt;
&lt;br /&gt;
[[#350-417 YW: The First Dark Age of Wesnoth|The First Dark Age of Wesnoth]]&lt;br /&gt;
&lt;br /&gt;
[[#417-530 YW: The Turmoil of Asheviere|The Turmoil of Asheviere]]&lt;br /&gt;
&lt;br /&gt;
[[#530-630 YW: The Age of Fear|The Age of Fear]]&lt;br /&gt;
&lt;br /&gt;
[[#628-673 YW: The Silver Age of Wesnoth|The Silver Age of Wesnoth]]&lt;br /&gt;
&lt;br /&gt;
[[#761-816 YW: The Legacy of Black-Eye Karun|The Legacy of Black-Eye Karun]]&lt;br /&gt;
&lt;br /&gt;
[[#After the Great Fall|After the Great Fall]]&lt;br /&gt;
&lt;br /&gt;
== Prehistory - 20 YW: The Founding of Wesnoth ==&lt;br /&gt;
During the age of the Founding of Wesnoth, there were two important geographic locations, these being the Green Isle and the Great Continent. Haldric is the main historical figure at this time. This age ends with the founding of Wesnoth as a country in the Great Continent, and with orcs attacking both elves and men from the sea.&lt;br /&gt;
&lt;br /&gt;
=== Prehistory ===&lt;br /&gt;
* Elves and dwarves inhabit the Great Continent.&lt;br /&gt;
* Humans inhabit the distant West.&lt;br /&gt;
* Haldric's people colonise the [[Geography_of_Wesnoth#The_Green_Isle|Green Isle]] from a continent further to the west.&lt;br /&gt;
&lt;br /&gt;
=== 200 BW ===&lt;br /&gt;
* The Lich-Lords arrive on the Green Isle after losing a war in the distant West.&lt;br /&gt;
* After a long war Haldric's people come to dominate the Green Isle.&lt;br /&gt;
* The 'Wesfolk' and their Lich-Lords are pushed onto marginal lands.&lt;br /&gt;
&lt;br /&gt;
=== 12 BW ===&lt;br /&gt;
* The Crown Prince of Southbay discovers the Great Continent.&lt;br /&gt;
&lt;br /&gt;
=== 11-7 BW ===&lt;br /&gt;
* The Crown Prince makes several voyages between the Green Isle and the Great Continent.&lt;br /&gt;
&lt;br /&gt;
=== 6 BW ===&lt;br /&gt;
* Following these voyages to the Great Continent, the elder Crown Prince falls ill and dies.&lt;br /&gt;
* His younger brother is implicated in a plot to kill him.&lt;br /&gt;
* As a distraction the younger Prince starts a war with the Wesfolk and their Lich-Lords.&lt;br /&gt;
* The Lich-Lords sense they will be destroyed and open gates to the homeland of the orcs in the West.&lt;br /&gt;
&lt;br /&gt;
=== 5-2 BW ===&lt;br /&gt;
* The Green Isle is overrun with orcs.&lt;br /&gt;
* The Wesfolk desert their Lich-Lords as they fear becoming prey for the orcs.&lt;br /&gt;
* [[CharactersStorys#Prince_Haldric|Prince Haldric]] leads the evacuation of the survivors to the Great Continent. [[Mainline_Campaigns#The_Rise_of_Wesnoth|'''The Rise of Wesnoth''']] begins.&lt;br /&gt;
&lt;br /&gt;
=== 1 BW ===&lt;br /&gt;
* Human settlers, led by Prince Haldric, arrive at the western coast of the Great Continent (the landfall occurs in the future Bay of Pearls) in large numbers.&lt;br /&gt;
* Humans arrive in the middle of a simmering dispute between the elves and dwarves.&lt;br /&gt;
* The elves and dwarves are distrustful of humans, and there is a small skirmish.&lt;br /&gt;
* Messengers from Wesmere Forest come and ask Haldric to come before the Ka'lian.&lt;br /&gt;
* Prince Haldric asks the Four elvish Lords ([[CharactersStorys#Lady_Dionli|Dionli]], [[CharactersStorys#Lord_Logalmier|Logalmier]], [[Aryad]], and [[El'Isomithir]]) for help and land.&lt;br /&gt;
* They set before him four quests to prove his worth, which he completes.&lt;br /&gt;
&lt;br /&gt;
=== 1 YW ===&lt;br /&gt;
* [[CharactersStorys#Prince_Haldric|Haldric]] is granted the plains north and south of the Great River.&lt;br /&gt;
* Haldric agrees to a Pact of Mutual Defence with the elves, but the Ka'lian decides it will betray him and allow humans and orcs to exhaust each other in war if the opportunity presents. Haldric, learning of this, considers the Pact a dead letter.&lt;br /&gt;
* The Ruby of Fire is temporarily hidden, and the [[CharactersStorys#Lich-Lord_Jevyan|lich-lord Jevyan]] is deceived into believing it is held by the elves. &lt;br /&gt;
* Haldric founds the country of [[Geography_of_Wesnoth#Wesnoth|Wesnoth]] in the central plain south of the great River.&lt;br /&gt;
* Reign of Haldric I (formerly prince Haldric) begins.  [[Mainline_Campaigns#The_Rise_of_Wesnoth|'''The Rise of Wesnoth''']] ends.&lt;br /&gt;
&lt;br /&gt;
=== 2 YW ===&lt;br /&gt;
* Orcs, following the ships fleeing from the Green Isle, begin to arrive on the Great Continent.&lt;br /&gt;
* These orcs are defeated by Haldric's forces.&lt;br /&gt;
* Some of the orcish survivors flee back to the Green Isle, others move to attack the elves.&lt;br /&gt;
* King Haldric helps the elves fight the surviving orcs.&lt;br /&gt;
&lt;br /&gt;
=== 3 YW ===&lt;br /&gt;
* [[Mainline_Campaigns#Winds_of_Fate|'''Winds of Fate''']] begins.&lt;br /&gt;
* Drakes arrive on the Great Continent.&lt;br /&gt;
* Elensefar and Wesmere are raided by Drakes.&lt;br /&gt;
* The drakes build an eyrie north of Wesmere.&lt;br /&gt;
&lt;br /&gt;
=== 4 YW ===&lt;br /&gt;
* [[CharactersStorys#Karron|Karron]] is banished from the Great Continent by [[CharactersStorys#Gorlack|Gorlack]]. [[Mainline_Campaigns#Winds_of_Fate|'''Winds of Fate''']] ends.&lt;br /&gt;
&lt;br /&gt;
=== 8 YW ===&lt;br /&gt;
* A second wave of orcs arrive from the Green Isle; these orcs begin claiming large portions of the northern Great Continent for themselves.&lt;br /&gt;
* [[CharactersStorys#Erlornas|Erlornas]] of Wesmere is involved in the first direct elvish clash with orcs ([[Mainline_Campaigns#An_Orcish_Incursion|'''An Orcish Incursion''']] takes place in 8-9YW).&lt;br /&gt;
* Haldric I publicly repudiates the Pact he spoke with the elves, refusing to give aid. &amp;lt;ref&amp;gt;{{Cite|treaty}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 9-11 YW ===&lt;br /&gt;
* Many elves are killed in battle by the orcs.&lt;br /&gt;
* Elvish emissaries are turned away from Wesnoth.&lt;br /&gt;
&lt;br /&gt;
=== 12 YW ===&lt;br /&gt;
* Orcs fail to take the Wesmere Forest and instead march down the coast, devastating human settlements there.&lt;br /&gt;
* Elves refuse to aid the humans in confronting the orcs.&lt;br /&gt;
* Human refugees from the coastal settlements relocate in what will become known as the Great Central Plain.  Dan'Tonk, which will become Wesnoth's largest city, is founded.&lt;br /&gt;
&lt;br /&gt;
=== 20 YW ===&lt;br /&gt;
* [[CharactersStorys#Prince_Haldric|Haldric I]] dies.&lt;br /&gt;
* [[CharactersStorys#Haldric_II|Haldric II]] ascends to the throne.&lt;br /&gt;
* [[CharactersStorys#Kalenz_2|Kalenz]] and [[CharactersStorys#Landar|Landar]] escape an orcish invasion of their home in Lintanir Forest. [[Mainline_Campaigns#Legend_of_Wesmere|'''The Legend of Wesmere''']] begins.&lt;br /&gt;
* Humans and elves decisively defeat the orcs at Tath, thus halting the orcish advance.&lt;br /&gt;
* A new treaty between humans and elves is signed and King Haldric II allows emissaries of the elves to return to Wesnoth.&lt;br /&gt;
* Elves inform [[CharactersStorys#Haldric_II|Haldric II]] of the danger posed by the unshielded Ruby of Fire.&lt;br /&gt;
* [[CharactersStorys#Kalenz_2|Kalenz]] and [[CharactersStorys#Landar|Landar]], later to become successive High Lords of the Elves, are able to sneak into an orcish camp by stealth and assassinate the Great Chief Brurbar. A long orcish civil war for succession follows. The orcs are unable to undertake action against any other race during this period and Wesnoth enjoys a long period during which it can expand with little opposition.&lt;br /&gt;
&lt;br /&gt;
== 20-130 YW: The Taming of the Wild ==&lt;br /&gt;
This era is that in which the kingdom of [[Geography_of_Wesnoth#Wesnoth|Wesnoth]] expanded and defined its borders, and settled the area which it had claimed for its own. The Taming of the Wild refers to the settling of the unsettled lands, as well as to the colonization of the Northlands. The end of this era is marked by friction between the city-state of [[Geography_of_Wesnoth#Elensefar|Elensefar]] and the country of Wesnoth, which will continue for the next several hundred years.&lt;br /&gt;
&lt;br /&gt;
=== 21 YW ===&lt;br /&gt;
* Founding of the Great Academy on Alduin.&lt;br /&gt;
&lt;br /&gt;
* [[CharactersStorys#Kalenz|Kalenz]] is relieved of command by the Ka'lian.  He retires to Lintanir Forest with [[CharactersStorys#Cleodil|Cleodil]].  A faction of xenophobic elves begins to gather around [[CharactersStorys#Landar|Landar]].&lt;br /&gt;
&lt;br /&gt;
=== 22 YW ===&lt;br /&gt;
* While studying at the Academy, [[CharactersStorys#Ardonna_.2F_Ardryn-Na|Ardonna]] resolves to spend the winter researching the Lich Lords' longevity.&lt;br /&gt;
&lt;br /&gt;
=== 23 YW ===&lt;br /&gt;
* Action of '''Secrets of the Ancients''' takes place.&lt;br /&gt;
&lt;br /&gt;
=== 25-40 YW ===&lt;br /&gt;
* In 25 YW [[CharactersStorys#Haldric_II|Haldric II]] sends an expedition to retrieve the Ruby of Fire from its place of concealment.&lt;br /&gt;
* Haldric II commissions a dwarven tribe to build the Sceptre of Fire with the Ruby of Fire as its centerpiece; elves associated with [[CharactersStorys#Landar|Landar's]] faction attack during the transfer. [[Mainline_Campaigns#The_Sceptre_of_Fire|'''Sceptre of Fire''']] begins.&lt;br /&gt;
* Action of '''The Sceptre of Fire''' takes place.  Haldric II is informed that the Sceptre was both completed and lost in the year 40.  It will not be recovered for nearly 500 years.&lt;br /&gt;
* With the death of [[CharactersStorys#Thursagan|Thursagan]], the Runemaster, all runemasters are killed and runesmithing is lost for several centuries.&lt;br /&gt;
&lt;br /&gt;
=== 26-50 YW ===&lt;br /&gt;
* [[CharactersStorys#Landar|Landar]] declares himself High Lord of the Elves, leading to civil war.&lt;br /&gt;
&lt;br /&gt;
=== 51 YW ===&lt;br /&gt;
* Wesnothian New Writing (the script later called &amp;quot;steel-hand&amp;quot;, to distinguish it from the more complex &amp;quot;brush-hand&amp;quot; cursive brought from the [[Geography_of_Wesnoth#The_Green_Isle|Green Isle]]) is promulgated by royal decree.  From this date all royal documents and public inscriptions are in New Writing. It spreads rapidly via the mercantile class. The older brush-hand writing continues to be used for magical purposes, scholarship, and in certain elevated literary forms.&lt;br /&gt;
&lt;br /&gt;
=== 50-93 YW ===&lt;br /&gt;
* Elvish civil war (and [[Mainline_Campaigns#Legend_of_Wesmere|'''The Legend of Wesmere''']]) ends.  [[CharactersStorys#Kalenz_2|Kalenz]] declared High Lord, begins reorganizing and militarizing elvish society to fight the orcs.  In late 93 YW he cedes control to a reconstituted Ka'lian and retires again to the Forest of Lintanir.&lt;br /&gt;
&lt;br /&gt;
=== 161-164 YW ===&lt;br /&gt;
* The newly crowned king sought to make safe once and for all the wildlands that separated the human cities surrounding Weldyn and the coastal regions of [[Elensefar]].&lt;br /&gt;
* The grand army of Wesnoth, personally led by the High Council of Archmagi, destroyed all enemies residing within Wesnoth.&lt;br /&gt;
* The city-state of Elensefar is formally united to the kingdom. Settlements from it spread north of the river into the new frontier province of Annuvin, carefully avoiding the margins of Wesmere Forest.&lt;br /&gt;
&lt;br /&gt;
=== 164-176 YW ===&lt;br /&gt;
* During this twelve year span, the western fortress of Halstead was erected in the very heart of the western wilderlands.&lt;br /&gt;
&lt;br /&gt;
=== 199 YW ===&lt;br /&gt;
* Emboldened by the far-reaching arm of Halstead's protection, settlement in the west explodes&lt;br /&gt;
* The settlements of Aldril and Carcyn grow to become major cities, the first as an important port due to its position on the Bay of Pearls, and the second as a stop on the road to Elensefar and military outpost along the Great River&lt;br /&gt;
* Settlers from Carcyn cross the Great River to establish the first settlements north of it and east of Wesmere.&lt;br /&gt;
&lt;br /&gt;
== 200-350 YW: The Golden Age of Wesnoth ==&lt;br /&gt;
The Golden Age of Wesnoth was the time of the great kings, and of peace and prosperity within the kingdom. The orcs had suffered a grave defeat at the hands of Wesnoth and Elensefar seventy-five years earlier, so they did not pose much of a threat, and whenever they did attack they were quickly defeated. This allowed the army to lessen in size, and the kings of this age to undertake the great public works they are renowned for. The era ends when the king of Wesnoth dies without an heir, and a new dynasty begins.&lt;br /&gt;
&lt;br /&gt;
=== 251 YW ===&lt;br /&gt;
* [[CharactersStorys#Cleodil|Cleodil]], wife of [[CharactersStorys#Kalenz_2|Kalenz]], dies.&lt;br /&gt;
&lt;br /&gt;
=== 350 YW ===&lt;br /&gt;
* Disintegration of the Kingdom follows the death of Haldric IV.&lt;br /&gt;
* [[Geography_of_Wesnoth#Elensefar|Elensefar]] remains a province of Wesnoth but exerts increasing independence due to isolation.&lt;br /&gt;
* Treaty between lord of Elensefar and king of Wesnoth signed.&lt;br /&gt;
&lt;br /&gt;
== 350-417 YW: The First Dark Age of Wesnoth ==&lt;br /&gt;
The first Dark Age was a time of strife and invasion. When Haldric IV died, he left Wesnoth without a king, and the next 70 years were marked by short-lived dynasties, attacks by ever more aggressive orcs, and the further separation of Wesnoth and Elensefar. The Dark Age ended when Garard I took the throne, and began a new dynasty that would last for several hundred years.&lt;br /&gt;
&lt;br /&gt;
=== 360 YW ===&lt;br /&gt;
* [[CharactersStorys#Malin_Keshar|Malin Keshar]] born in Parthyn.&lt;br /&gt;
&lt;br /&gt;
=== 363 YW ===&lt;br /&gt;
* Last of [[CharactersStorys#Kalenz|Kalenz's]] children dies.  Kalenz, condemned to outlive his offspring by the potion of Crelanu, leaves the Forest of Lintanir and begins wandering the Great Continent.&lt;br /&gt;
&lt;br /&gt;
* Village of Maghre terrorized by a minor necromancer. Action of [[Mainline_Campaigns#A_Tale_Of_Two_Brothers|'''A Tale of Two Brothers''']] takes place.&lt;br /&gt;
&lt;br /&gt;
=== 389 YW ===&lt;br /&gt;
* Garard, a future king of Wesnoth, is born.&lt;br /&gt;
* [[CharactersStorys#Malin_Keshar|Malin Keshar]] returns to Parthyn from the Academy at Alduin. [[Mainline_Campaigns#Descent_into_Darkness|'''Descent Into Darkness''']] begins.&lt;br /&gt;
&lt;br /&gt;
== 417-530 YW: The Turmoil of Asheviere ==&lt;br /&gt;
King Garard's dynasty was long-lived and productive, but it was also punctuated by significant turmoil: the end of the first king's reign was marred by orcish and undead raids, and the second was murdered by his own wife and son. It was not until 517 YW that the usurpation of the throne by Queen Mother Asheviere was ended.&lt;br /&gt;
&lt;br /&gt;
=== 417 YW ===&lt;br /&gt;
* Ending years of strife and division, Garard I seizes the throne and becomes king of Wesnoth, beginning the [[Garardine Dynasty]].&lt;br /&gt;
&lt;br /&gt;
=== 440 YW ===&lt;br /&gt;
* [[CharactersStorys#Garard_II|Crown Prince Garard II]] is born.&lt;br /&gt;
&lt;br /&gt;
=== 442 YW ===&lt;br /&gt;
* [[CharactersStorys#Delfador|Delfador]], later called &amp;quot;the Great&amp;quot;, is born.&lt;br /&gt;
&lt;br /&gt;
=== 450 YW ===&lt;br /&gt;
* Prince Arand is born.&lt;br /&gt;
&lt;br /&gt;
=== 468 YW ===&lt;br /&gt;
* Zorlan becomes Great Chief of the northern orcs&lt;br /&gt;
* [[CharactersStorys#Delfador|Delfador]] graduates from the Great Academy. [[Mainline_Campaigns#Delfador.27s_Memoirs|'''Delfador's Memoirs''']] begins.&lt;br /&gt;
&lt;br /&gt;
=== 470 YW ===&lt;br /&gt;
* Garard I dies; [[CharactersStorys#Garard_II|Garard II]] ascends to the throne of Wesnoth&lt;br /&gt;
* Orcs under Great Chief Zorlan and undead raised by the necromancer [[CharactersStorys#Iliah-Malal|Iliah-Malal]] raid Wesnoth's borders. All but the first and the last three scenarios of [[Mainline_Campaigns#Delfador.27s_Memoirs|'''Delfador's Memoirs''']] take place in this year.&lt;br /&gt;
* Control of the Estmarks is effectively lost during this war, not to be regained for decades.  Outposts are built on the near side of the Weldyn to repel orc raids.  The long watch of the River Guard begins.&lt;br /&gt;
&lt;br /&gt;
=== 478 YW ===&lt;br /&gt;
* Garard II marries Asheviere.&lt;br /&gt;
* Garard issues the Edict of the Sceptre, providing that the crown shall settle after his death on whichever member of the royal family successfully retrieves it from the Caverns of Flame.&lt;br /&gt;
&lt;br /&gt;
=== 480 YW ===&lt;br /&gt;
* Crown Prince Eldred is born.&lt;br /&gt;
&lt;br /&gt;
=== 483 YW ===&lt;br /&gt;
* Erain and Ethyn, identical twins and brothers of Eldred, are born.&lt;br /&gt;
&lt;br /&gt;
=== 498 YW ===&lt;br /&gt;
* Princess Li'sar is born.&lt;br /&gt;
&lt;br /&gt;
=== 500 YW ===&lt;br /&gt;
* Prince Konrad is born, the youngest of several sons of Prince Arand.&lt;br /&gt;
* Wesnoth and the orcs of the north go to war.&lt;br /&gt;
&lt;br /&gt;
=== 501 YW ===&lt;br /&gt;
&lt;br /&gt;
===== Betrayal on the battlefield =====&lt;br /&gt;
* Garard leads his army to orc encampment at Galcadar by the Ford of Abez.&lt;br /&gt;
* Garard's forces split into two groups, one led by himself and the other by his son Eldred.&lt;br /&gt;
* Eldred betrays his father and attacks him with the troops under his control.&lt;br /&gt;
* Eldred slays King Garard and his uncle Prince Arand on the battlefield of Abez.&lt;br /&gt;
&lt;br /&gt;
===== Reprisal =====&lt;br /&gt;
* Delfador escapes the battle and heads to Weldyn.&lt;br /&gt;
* Eldred gives tribute to the orcish king, who stops his attacks.&lt;br /&gt;
* Delfador gathers a force of Loyalists to avenge Garard's Death.&lt;br /&gt;
* Eldred's forces confront Delfador's Loyalists at Weldyn.&lt;br /&gt;
* The Loyalists are defeated, but Eldred is slain by Delfador in the fight.&lt;br /&gt;
&lt;br /&gt;
===== Asheviere seizes power =====&lt;br /&gt;
* Asheviere orders the slaughter of Garard's nephews and declares herself Queen of Wesnoth.&lt;br /&gt;
* Hearing of the news Delfador infiltrates the palace.&lt;br /&gt;
* Delfador finds the youngest prince Konrad as he is slain.&lt;br /&gt;
* Delfador flees, taking Konrad's body for burial to the land of the elves.&lt;br /&gt;
* While traveling through Wesnoth, Elf Lady Parandra finds an orphaned human child.&lt;br /&gt;
* Parandra and Delfador agree to give the orphan the identity of Prince Konrad.&lt;br /&gt;
* Delfador and Konrad flee to live in refuge with the Wood Elves of the great southwestern forest.&lt;br /&gt;
&lt;br /&gt;
===== The country resists Asheviere =====&lt;br /&gt;
* Elensefar refuses to submit to Asheviere and declares itself an independent city-state.&lt;br /&gt;
* After several defeats, Wesnoth's army retreats from the remote areas of the kingdom.  The western Wesnothian border recedes, is fixed, and remains heavily defended.&lt;br /&gt;
* As a result of the loyalist withdrawal, several small human communities on the west coast of the Great Continent live in relative independence while elves flourish in the great forest to the southwest of Wesnoth.&lt;br /&gt;
* A band of Wesnoth citizens organizes resistance to Asheviere's siezure of power.  They are eventually forced to abandon their home and settle in the Three Sisters ('''Liberty''').&lt;br /&gt;
&lt;br /&gt;
=== 502-517 YW ===&lt;br /&gt;
* Delfador raises Konrad under the protection of the elves.&lt;br /&gt;
&lt;br /&gt;
=== 517 YW ===&lt;br /&gt;
* Asheviere hires orcish forces to hunt down her nephew-in-law Konrad.&lt;br /&gt;
* Orcish forces converge on Delfador's refuge.&lt;br /&gt;
* Konrad flees his home with the elves and embark upon a quest to regain the throne of Wesnoth.  '''Heir To The Throne''' begins.&lt;br /&gt;
&lt;br /&gt;
=== 518 YW ===&lt;br /&gt;
* Konrad crosses the Great River into the Northlands on a search for the Sceptre of Fire.&lt;br /&gt;
* They enter the Caves of Knalga, allied with Princess Li'sar, and find it.&lt;br /&gt;
* They return to Wesnoth and claim the throne.  '''Heir to the Throne''' ends.&lt;br /&gt;
&lt;br /&gt;
=== 522 YW ===&lt;br /&gt;
* Birth of Princess Ana'sar.&lt;br /&gt;
&lt;br /&gt;
=== 530 YW ===&lt;br /&gt;
* Wesnothian colonists begin reclaiming the Estmarks.&lt;br /&gt;
&lt;br /&gt;
=== 544 YW ===&lt;br /&gt;
* With both sides of the lower Weldyn River again civilized territory, the River Guard posts south of Soradoc are abandoned.  Wesnothian military activity shifts eastward into the Estmarks.&lt;br /&gt;
&lt;br /&gt;
== 530-630 YW: The Age of Fear ==&lt;br /&gt;
The Age of Fear takes its names from the events of the end of the era. On the surface, the first 77 years were very uneventful for the kingdom of Wesnoth. However, during this time unexplainable magical events took place, especially in the eastern lands. Previously tamed lands were slowly claimed by wilderness as fear and paranoia gradually overshadowed the spirit of pioneering and adventure displayed earlier in Wesnoth's history. In the last 10 years of the age, Wesnoth bore the brunt of the most powerful undead attack ever and was nearly destroyed. By the end of the era, most of Wesnoth had been made barren, most of the great buildings inside and outside of Weldyn were razed, and the population of Wesnoth was half of what it had been.&lt;br /&gt;
&lt;br /&gt;
It was in this era that certain areas of the chaotic Northlands were for the first time put into any kind of law and order. A small group of humans and dwarves, accepting anyone of any race who wished to join, formed themselves into the &amp;quot;Northern Alliance”, with the vision of making the Northlands safe to live in. Over time, this alliance grew slowly but steadily in power. By the end of the era, the alliance had succeeded in making a few small areas, including Knalga and the surrounding regions, stable and prosperous. Consequently, many people evacuated from the wasteland that most of Wesnoth had become and moved north - depleting the population of Wesnoth still further.&lt;br /&gt;
&lt;br /&gt;
=== 533 YW ===&lt;br /&gt;
* Delfador succumbs to old age and dies, his body is entombed alongside his staff in Eregonor.&lt;br /&gt;
* The next great sage of Wesnoth, [[CharactersStorys#Dacyn|Dacyn]], is born.&lt;br /&gt;
&lt;br /&gt;
=== 534 YW ===&lt;br /&gt;
&lt;br /&gt;
* The small community of Dwarven Doors, in the Northlands just outside Knalga, rebels against the orcish overlords.  '''Northern Rebirth''' begins.&lt;br /&gt;
* The residents, led by Tallin, head underground and find dwarves, whom they ally with.&lt;br /&gt;
* Their combined forces destroy a lich who is attempting to claim Knalga as his own.&lt;br /&gt;
* Abhai finds the [[CampaignDialogue:NR#Abhai_Finds_Rod_of_Justice|Rod of Justice]].&lt;br /&gt;
&lt;br /&gt;
=== 535 YW ===&lt;br /&gt;
&lt;br /&gt;
* The warlord-aspirant Rakshas attacks Tallin and his forces, but does not penetrate the dwarves' defences.&lt;br /&gt;
* To help defeat the orcs, Tallin secures the help of two Liches, and rescues an elvish princess to secure the help of the elves.&lt;br /&gt;
* Assisted by his new allies, Tallin smashes the forces of Rakshas.&lt;br /&gt;
* According to some historians, Tallin and the elvish princess are married; others say they parted in bad blood.&lt;br /&gt;
* To preserve the new-found peace in the Northlands, Tallin and his allies form the Northern Alliance.  '''Northern Rebirth''' ends.&lt;br /&gt;
&lt;br /&gt;
=== 550 YW ===&lt;br /&gt;
&lt;br /&gt;
* Lord Hamel of Knalga sends an expedition to Kal Kartha to determine the fate of the Hammer of Thursagan ('''The Hammer of Thursagan''' takes place in late 550 YW to early 551 YW.).&lt;br /&gt;
* Dwarves at Knalga and elsewhere  begin to reclaim the lost art of runesmithing.&lt;br /&gt;
* Wesnothian colonization expands southward past Fort Tahn.&lt;br /&gt;
&lt;br /&gt;
=== 563 YW ===&lt;br /&gt;
* Konrad and Li'sar die after an extraordinarily long reign.&lt;br /&gt;
* Princess Ana'sar becomes queen.&lt;br /&gt;
* The seer Galdren becomes prominent at the court of Weldyn.&lt;br /&gt;
&lt;br /&gt;
=== 585 YW ===&lt;br /&gt;
* Queen Ana'sar retires.&lt;br /&gt;
* Haldric VII becomes king of Wesnoth.&lt;br /&gt;
&lt;br /&gt;
=== 589 YW ===&lt;br /&gt;
* Dacyn the White Mage and Ravanal, an eastern wizard, compete to be the king's advisor.&lt;br /&gt;
* The seer Galdren dies after advising Haldric VII to choose Dacyn.&lt;br /&gt;
* The king does as Galdren advises.&lt;br /&gt;
&lt;br /&gt;
=== 593 YW ===&lt;br /&gt;
* Ravanal reveals that he has turned to evil, and flees from Weldyn.&lt;br /&gt;
* Konrad II is born.&lt;br /&gt;
* Certain southern frontier regions are formally annexed to the Kingdom of Wesnoth as the Province of Kerlath.&lt;br /&gt;
&lt;br /&gt;
=== 598 YW ===&lt;br /&gt;
* South Guard organized as  a semi-detached formation of the Royal Army, to protect the inhabitants of the frontier province of Kerlath.&lt;br /&gt;
&lt;br /&gt;
=== 607 YW ===&lt;br /&gt;
* South Guard ceases reporting.  Haldric VII sends Deoran, grandson of Haldiel, to investigate.  '''The South Guard''' takes place in 607-608 YW.&lt;br /&gt;
&lt;br /&gt;
=== 612 YW ===&lt;br /&gt;
* Haldric VII dies. Konrad II is crowned King of Wesnoth.&lt;br /&gt;
* Dacyn continues his duties as advisor with Konrad II.&lt;br /&gt;
&lt;br /&gt;
=== 625 YW ===&lt;br /&gt;
* Mysterious disappearances of livestock and peasants cause partial evacuation of the the '''Estmark Hills'''.  Lords of the Horse Plains report increased banditry from there.&lt;br /&gt;
* Konrad II sends [[CharactersStorys#Dacyn|Dacyn]] with [[CharactersStorys#Owaec|Owaec]] and [[CharactersStorys#Gweddry|Gweddry]] to man the old River Guard strongpoints. [[Mainline_Campaigns#The_Eastern_Invasion|'''Eastern Invasion''']] begins.&lt;br /&gt;
&lt;br /&gt;
=== 626 YW ===&lt;br /&gt;
* [[CharactersStorys#Mal-Ravanal|Mal-Ravanal]] attacks the middle outpost where [[CharactersStorys#Gweddry|Gweddry]] and [[CharactersStorys#Dacyn|Dacyn]] are stationed.&lt;br /&gt;
* Dacyn and Gweddry travel to the northern outpost, and, with [[CharactersStorys#Owaec|Owaec]], retreat into the northlands.&lt;br /&gt;
* In the Far North, the wife of Kai Laudiss slain in a large raid by the orcs of Tirigaz on Jotha&lt;br /&gt;
* Kai Laudiss slain by poisoned orcish dart during failed attack on the Port of Tirigaz orcs. His son, [[CharactersStorys#Kai_Krellis|Krellis]] succeeds him as Kai and relies on the wisdom of [[CharactersStorys#Cylanna|Cylanna]], a priestess.&lt;br /&gt;
* The merfolk city of Jotha is overrun by undead (Mal Kevek and others).  The action of [[Mainline_Campaigns#Dead_Water|'''Dead Water''']] takes place.&lt;br /&gt;
&lt;br /&gt;
=== 627 YW ===&lt;br /&gt;
* Wesnoth's last defences are broken and the undead march on Wesnoth&lt;br /&gt;
* In the northlands, the orcs drive [[CharactersStorys#Gweddry|Gweddry's]] army back across the river.&lt;br /&gt;
* Weldyn is besieged.&lt;br /&gt;
* Gweddry breaks through undead lines to reach Weldyn and a council is held.&lt;br /&gt;
* Gweddry's army is fortunate and kills [[CharactersStorys#Mal-Ravanal|Mal-Ravanal]].  [[Mainline_Campaigns#The_Eastern_Invasion|'''Eastern Invasion''']] ends. [[Mainline_Campaigns#Dead_water|'''Dead Water''']] ends (about this time).&lt;br /&gt;
* Wesnoth is saved, but large portions have been laid waste by the undead.&lt;br /&gt;
* After destroying [[CharactersStorys#Mal-Ravanal|Mal-Ravanal's]] henchmen the mermen relaxed and began rebuilding in earnest, and soon Jotha was restored.&lt;br /&gt;
&lt;br /&gt;
== 628-673 YW: The Silver Age of Wesnoth ==&lt;br /&gt;
&lt;br /&gt;
The Silver Age, or restoration of the Wesnothian kingdom, essentially coincides with the rest of the long and successful reign of [[CharactersStorys#Konrad_II|Konrad II]].  During this period Wesnoth largely recovered from the damage that Mal-Ravanal's undead attack had done. It would, however, never quite regain the majesty it had at the height of its power.&lt;br /&gt;
&lt;br /&gt;
The Northlands, aided by a second wave of colonization north from Wesnoth, become more civilised and stable. Although nowhere near as prosperous as Wesnoth was during its Golden Age, the Northlands developed towns of significant size and a thriving - if somewhat dangerous - trade network. &lt;br /&gt;
&lt;br /&gt;
Four major powers soon came to dominate much of the Northlands. First there were the dwarves, who controlled most of the mountains and a vast array of underground tunnels and caverns. To the east, shrouded in mystery, lay the elvish forests which continued to be inaccessible to anyone not of elvish blood. The remaining landscape was dominated either by orcish tribes, or independent human earldoms. As competition for the land grew fierce, wars smoldered between human and orcish forces. &lt;br /&gt;
&lt;br /&gt;
=== 628-635 YW ===&lt;br /&gt;
* [[CharactersStorys#Konrad_II|Konrad II]] begins his attempt to rebuild Wesnoth.&lt;br /&gt;
&lt;br /&gt;
=== 673 YW ===&lt;br /&gt;
* [[CharactersStorys#Konrad_II|Konrad II]] dies, bringing the [[Garardine Dynasty]] to an end.  Second Wesnothian civil war begins.&lt;br /&gt;
&lt;br /&gt;
== 786-826 YW: The Legacy of Black-Eye Karun ==&lt;br /&gt;
&lt;br /&gt;
After decades of struggle, Black-Eye Karun becomes the first warlord since the assassination of Great Chief Brurbar in 20 YW to unite all the different squabbling orcish tribes under his banner. Among his many accomplishments as a Sovereign, his most famous is the creation of the Great Council. &lt;br /&gt;
&lt;br /&gt;
Karun was a far-sighted individual and he knew that after his death the orcish tribes would once again turn to fighting among themselves, with little he could do to prevent that and consequent peril from the Wesnothians and elves.&lt;br /&gt;
&lt;br /&gt;
Consequently, Karun selected from among all the different tribes six of the most sober and wisest orcs and thus created the Great Council. It was the Great Council's job to stay aloof from any tribal or territorial squabbling amongst the orcs, but yet always remain there to give advice to whomever came to seek it. In order to preserve the orcish race in the event of an emergency, he invested in them the power to call up The Great Horde. It was established that every orc, no matter what tribe he came from, must obey the summons of The Great Horde and follow wholeheartedly the leader that the Great Council put at the head of The Great Horde.&lt;br /&gt;
&lt;br /&gt;
===786 YW===&lt;br /&gt;
* Karun is born.&lt;br /&gt;
&lt;br /&gt;
===805 YW===&lt;br /&gt;
* Karun devised the formation of the Great Council.&lt;br /&gt;
&lt;br /&gt;
===811 YW===&lt;br /&gt;
* A border dispute between Karun and a human enclave aligned with the Northern Alliance leaves several men and orcs dead and begins a feud that will grow into a fifteen-year war.&lt;br /&gt;
&lt;br /&gt;
===812 YW===&lt;br /&gt;
* Rahul I becomes Lord Protector of the Northern Alliance.&lt;br /&gt;
&lt;br /&gt;
===816 YW===&lt;br /&gt;
* [[CharactersStorys#Kapou.27e|Kapou’e]] is born&lt;br /&gt;
&lt;br /&gt;
===826 YW===&lt;br /&gt;
* Rahul I (Lord Protector of the Northern Alliance) and Black Eye Karun sign a peace treaty ending a 15 year war between the humans and the orcs. Soon after this Karun, is ambushed and killed in mysterious circumstances.&lt;br /&gt;
&lt;br /&gt;
===829 YW===&lt;br /&gt;
* Frustrated by the fallout of Karun's supposed assassination, Rahul I resigns, and Howgarth III takes his place as Lord Protector.&lt;br /&gt;
&lt;br /&gt;
===842 YW===&lt;br /&gt;
* Famine in the Northlands. Famine led humans to colonize some orcish lands and push orcs into desolated hill country. The few orcish tribes who had remained part of the Alliance, feeling the pressure, either left Alliance territory or revolted and were destroyed.&lt;br /&gt;
* Retaliating, the orcs systematically slaughtered human colonies and villages on their lands. Then, Earl Lanbec'h — the most powerful human warlord of the North — determined to abolish the orcish menace raised an army and conferred leadership of it to his son-in-law Baron Alber.&lt;br /&gt;
* In response, the Great Council set up by the Black Eye Karun calls upon The Great Horde and bestows leadership of it upon [[CharactersStorys#Kapou.27e|Kapou’e]]; [[Mainline_Campaigns#Son_of_the_Black_Eye|'''Son of the Black Eye''']] begins.&lt;br /&gt;
&lt;br /&gt;
===843 YW===&lt;br /&gt;
* Half of the Great Council is treacherously slain by the allied human forces and orcish unity disintegrates. Faced with the extermination of all the orcs on the Great Continent, [[CharactersStorys#Kapou.27e|Kapou’e]] forcibly asserts his control over the orcish territories and defeats the enemy forces. The Northern Alliance arrives on the scene in time for the final battle and helps Kapou’e defeat the forces of the northern earldoms, who had broken the treaty. Kapou’e then assumes the position of Sovereign over the northern tribes, and his rule ushers in an unprecedented era of unity and prosperity for the orcs.&lt;br /&gt;
* After 843: Portions of Kapou'e's army act as mercenaries in foreign struggles with other races which keeps them from attacking their nearest neighbors.&lt;br /&gt;
&lt;br /&gt;
===852 YW===&lt;br /&gt;
* [[CharactersStorys#Kapou.27e|Kapou’e]] repels a large elvish invasion.&lt;br /&gt;
&lt;br /&gt;
===858 YW===&lt;br /&gt;
* The humans once again stage an invasion but prove to be no match for the united orcish forces under the leadership of [[CharactersStorys#Kapou.27e|Kapou’e]].  [[Mainline_Campaigns#Son_of_the_Black_Eye|'''Son of the Black Eye''']] ends.&lt;br /&gt;
&lt;br /&gt;
==After the Great Fall==&lt;br /&gt;
At some unknown point in the future, an unspeakable cataclysm scorched the surface of the lands. The Wesnoth magicians try to raise up a 3rd sun in the sky, Gaia, but they fail and the 'sun' falls down over Weldyn. The capital is no more. The King and his family are dead and there is no heir. The local leaders tear apart Wesnoth. The nights become longer, days hotter. Evil creatures show up. Forests die, hills turn into rocky wastelands and fields become barren deserts. In the apocalypse allies turn against each other and friends fight over what few resources remain. The great nations were destroyed, and huge numbers of people died. Still amidst the chaos somehow small groups of people survived, sheltered in hidden places. In this post-apocalyptic world survival is a daily struggle as a few remaining tribes eke out an existence among the ruins of fallen empires. Heroic bands of elves, nomadic refugee humans, savage hordes of orcs and dark necromancers all forge new lives under the merciless dual suns, Sela and Naia, of this new Irdya.&lt;br /&gt;
&lt;br /&gt;
===??? Post-Wesnoth===&lt;br /&gt;
&lt;br /&gt;
* The Quenoth elves adapt to life in barren world of the Great Southern Desert. Over time they lost their affinity for the woodlands of their ancestry and embrace life in the sandy wastelands.&lt;br /&gt;
* Under the leadership of Tanuil, the Quenoth elves build and sustain a fortified village around a rare oasis. The village thrives amidst the hostilities of the desert.&lt;br /&gt;
* One night, a meteor storm rains from the sky and destroys the village of the Quenoth elves. '''Under the Burning Suns''' begins. The next day, Tanuil, like many others, is missing and presumed dead. Kalehssar (Kaleh), nephew of Tanuil, takes leadership of the remaining Quenoth elves as the surviving next of kin.&lt;br /&gt;
* Kaleh, heeding the voice of his god Eloh in his dreams, gathers the remaining Quenoth elves and leads them north to a new promised land, foregoing rebuilding of their desert village.&lt;br /&gt;
* The Quenoth elves battle their way north through undead, orcs, bandits and other evil, venturing underground beneath a large mountain range at the command of Eloh.&lt;br /&gt;
* Befriending unexpected allies underground, Kaleh's forces survive to the other side of the mountain.&lt;br /&gt;
* Keratur, son of Tanuil and survivor of the cataclysm, insane with fright attacks Kaleh. Kaleh defeats Keratur.&lt;br /&gt;
* Kaleh defies commands given him by a vision of Eloh.&lt;br /&gt;
* The Quenoth reach the ocean. Aided by merfolk, they escape the mainland and head for a newly discovered island, a place where the Quenoth may settle in peace.&lt;br /&gt;
* On the island, the Quenoth confront Yechnagoth, the Eater of Souls and impersonator of Eloh. Yechnagoth and army are destroyed by the Quenoth.&lt;br /&gt;
* Kaleh and the elves settle on their newfound, and newly named, Quenoth Isle. '''Under the Burning Suns''' ends.&lt;br /&gt;
&lt;br /&gt;
== History Credits ==&lt;br /&gt;
Timelined by Kamahawk and Turin.  Revised to incorporate material from later version of Legend of Wesmere and reconcile different versions of the history of the Sceptre of Fire by Eric S. Raymond.&lt;br /&gt;
&lt;br /&gt;
* History derived from the following [[Mainline_Campaigns|mainline campaigns]]:&lt;br /&gt;
** [[The Rise of Wesnoth]]&lt;br /&gt;
** [[Legend of Wesmere]]&lt;br /&gt;
** [[A Tale of Two Brothers]]&lt;br /&gt;
** [[Descent into Darkness]]&lt;br /&gt;
** [[Delfador's Memoirs]]&lt;br /&gt;
** [[Liberty]]&lt;br /&gt;
** [[Heir to the Throne]]&lt;br /&gt;
** [[Northern Rebirth]]&lt;br /&gt;
** [[The Hammer of Thursagan]]&lt;br /&gt;
** [[TheEasternInvasion|Eastern Invasion]]&lt;br /&gt;
** [[Dead Water]]&lt;br /&gt;
** [[UnderTheBurningSuns|Under the Burning Suns]]&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[Geography of Wesnoth]]&lt;br /&gt;
* [[Poetry of Wesnoth]]&lt;br /&gt;
* [[Races]]&lt;br /&gt;
* [[FactionHistory|History of various factions]]&lt;br /&gt;
* [[Future History]] '''(unofficial)'''&lt;br /&gt;
&lt;br /&gt;
[[Category:World of Wesnoth]]&lt;br /&gt;
[[Category:History]]&lt;/div&gt;</summary>
		<author><name>Octalot</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=GettextForWesnothDevelopers&amp;diff=74001</id>
		<title>GettextForWesnothDevelopers</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=GettextForWesnothDevelopers&amp;diff=74001"/>
		<updated>2024-11-21T09:27:04Z</updated>

		<summary type="html">&lt;p&gt;Octalot: /* Marking up strings in C++ */ Gettext isn't a full C++ parser&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is used to help Wesnoth developers and UMC authors to work with the internationalization (i18n) system, based on GNU gettext.&lt;br /&gt;
&lt;br /&gt;
==  General design of gettext use  ==&lt;br /&gt;
&lt;br /&gt;
Programs using Gettext include the strings in one language (usually English) within the source code. For each target language, a separate file provides a look-up table from English to that language. If the file is missing or doesn't have a translation for that string, the system falls back to using the English text.&lt;br /&gt;
&lt;br /&gt;
The translation mechanism usually involves a function or macro called ''_'' (a single underscore sign). Examples are in the programming-language specific sections below.&lt;br /&gt;
&lt;br /&gt;
=== Textdomains ===&lt;br /&gt;
&lt;br /&gt;
Gettext splits translations into domains. For Wesnoth, the general idea is to use distinct textdomains for each campaign or add-on, so that UMC authors can easily ship translations together with their campaigns. These domains are covered in more depth in [[GettextForTranslators]].&lt;br /&gt;
&lt;br /&gt;
The convention is to name each domain using the name of the add-on, or just its initials. For example, ''wesnoth-utbs'' or ''wesnoth-Son_of_Haldric''. For UMC, it probably makes sense to use the full name to ensure that it doesn't clash with another add-on.&lt;br /&gt;
&lt;br /&gt;
=== Caret hints ===&lt;br /&gt;
&lt;br /&gt;
Some strings look the same in English but should not necessarily look identical in translations. To handle this, those strings can be prefixed with any descriptive string and a '''^''' character. For users viewing in '''en_US''', these hints will be automatically removed from the string before showing it to the user.&lt;br /&gt;
&lt;br /&gt;
{{DevFeature1.15|2}} if the string contains more than one '''^''', the descriptive string ends at the first '''^''', everything following the first '''^''' will be shown to the user.&lt;br /&gt;
&lt;br /&gt;
{{DevFeature1.15|18}} When using gettext's Plural Forms, these prefixes can and should be used in both the singular and the plural.&lt;br /&gt;
&lt;br /&gt;
=== UTF-8 ===&lt;br /&gt;
&lt;br /&gt;
For translation, all C++, WML and Lua files should be in UTF-8. As noted in the [[Typography_Style_Guide]], some punctuation should be used that's outside of the ASCII subset.&lt;br /&gt;
&lt;br /&gt;
==  Marking up strings in C++  ==&lt;br /&gt;
&lt;br /&gt;
In C++, you can mark up strings for translations using the &amp;lt;syntaxhighlight lang=c++ inline&amp;gt;_(&amp;quot;A translation&amp;quot;)&amp;lt;/syntaxhighlight&amp;gt; and &amp;lt;syntaxhighlight lang=c++ inline&amp;gt;_n(&amp;quot;Translation&amp;quot;, &amp;quot;Translations&amp;quot;, int)&amp;lt;/syntaxhighlight&amp;gt; macros. The &amp;lt;code&amp;gt;_n&amp;lt;/code&amp;gt; macro is to be used if the string has a singular and plural form.&lt;br /&gt;
&lt;br /&gt;
You can also add comments for translators. Single-line comments must start with &amp;lt;code&amp;gt;TRANSLATORS:&amp;lt;/code&amp;gt; and be on the line ''immediately'' above the translatable string. For multi-line comments, the &amp;lt;code&amp;gt;TRANSLATORS:&amp;lt;/code&amp;gt; only needs to be on the first line to include the whole comment, and the last line must be immediately above the translatable string.&lt;br /&gt;
&lt;br /&gt;
If the string contains any placeholders, '''don't''' use &amp;lt;code&amp;gt;snprintf&amp;lt;/code&amp;gt;. Instead use WML style variables, put their values in a &amp;lt;syntaxhighlight lang=c++ inline&amp;gt;utils::string_map&amp;lt;/syntaxhighlight&amp;gt; and use the &amp;lt;code&amp;gt;VGETTEXT&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;VNGETTEXT&amp;lt;/code&amp;gt; macros instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=c++&amp;gt;&lt;br /&gt;
utils::string_map symbols;&lt;br /&gt;
symbols[&amp;quot;enemies&amp;quot;] = std::to_string(enemy_count_);&lt;br /&gt;
symbols[&amp;quot;friends&amp;quot;] = std::to_string(friend_count_);&lt;br /&gt;
std::string message;&lt;br /&gt;
if ( friend_count_ != 0  &amp;amp;&amp;amp;  enemy_count_ != 0 ) {&lt;br /&gt;
	// Omitted from the example - see the code in src/action/move.cpp for how to handle strings with two independent ints.&lt;br /&gt;
} else if ( enemy_count_ != 0 ) {&lt;br /&gt;
	// TRANSLATORS: Only enemies sighted -- bad message.&lt;br /&gt;
	// This is shown when a move is interrupted because units were revealed from the fog of war.&lt;br /&gt;
	message = VNGETTEXT(&amp;quot;Enemy unit sighted!&amp;quot;, &amp;quot;$enemies enemy units sighted!&amp;quot;, enemy_count_, symbols);&lt;br /&gt;
} else if ( friend_count_ != 0 ) {&lt;br /&gt;
	// TRANSLATORS: Only friends sighted -- good message.&lt;br /&gt;
	// This is shown when a move is interrupted because units were revealed from the fog of war.&lt;br /&gt;
	message = VNGETTEXT(&amp;quot;Friendly unit sighted&amp;quot;, &amp;quot;$friends friendly units sighted&amp;quot;, friend_count_, symbols);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;string_map&amp;lt;/code&amp;gt; can contain additional values that aren't used in the translated string. In the example above, it has both ''friends'' and ''enemies''.&lt;br /&gt;
&lt;br /&gt;
By default, all strings in C++ belong to the &amp;quot;wesnoth&amp;quot; textdomain. If a different textdomain is required, you can add a textdomain binding at the top of the source file, before any include statements. A textdomain binding looks like this: &amp;lt;syntaxhighlight lang=c++&amp;gt;#define GETTEXT_DOMAIN &amp;quot;wesnoth-lib&amp;quot;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should avoid placing translatable strings in C++ headers if at all possible. Though there are a few places where it may be unavoidable, such as if templates are in use, it creates the risk of the strings sometimes being looked up in the wrong textdomain if the header is included in multiple files with different textdomains. If possible, always factor the translatable strings out into a source file.&lt;br /&gt;
&lt;br /&gt;
Don't wrap the existing macros in more macros, as the .pot files are generated by gettext. Gettext isn't a full C++ parser, it's just searching for arguments to functions and macros in this list: &amp;lt;code&amp;gt;_ N_ _n N_n VGETTEXT VNGETTEXT sgettext vgettext sngettext vngettext&amp;lt;/code&amp;gt;. That list is defined in cmake/FindTranslationTools.cmake and po/SConscript.&lt;br /&gt;
&lt;br /&gt;
== Marking up strings in WML ==&lt;br /&gt;
&lt;br /&gt;
=== The textdomain bindings ===&lt;br /&gt;
&lt;br /&gt;
All files with translatable strings must declare which textdomain they use, which is normally done by putting ''#textdomain'' on the first line of each .wml file. See the example below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=wml&amp;gt;&lt;br /&gt;
#textdomain wesnoth-Son_of_Haldric&lt;br /&gt;
&lt;br /&gt;
[unit_type]&lt;br /&gt;
    id=Mu&lt;br /&gt;
    name= _ &amp;quot;Mu&amp;quot;&lt;br /&gt;
    # ...&lt;br /&gt;
[/unit_type]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that it is highly recommended that the first textdomain binding be on the first line of the file. Otherwise, odd stuff may happen.&lt;br /&gt;
&lt;br /&gt;
=== The translatable strings ===&lt;br /&gt;
&lt;br /&gt;
To mark a string as translatable, just put an underscore ( _ ) in front of the string you wish to be marked as translatable, like the example below. When parsing this, the engine will record both the visible text and the active textdomain, which can later be used to get the translation when displaying the text to the player.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=wml&amp;gt;&lt;br /&gt;
name= _ &amp;quot;Mu&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Notes to the translators ====&lt;br /&gt;
&lt;br /&gt;
If you think a translatable string needs additional guidance to be translated properly, you can provide a special comment that will be seen by the translators. Some hints are generated automatically, but in general if you have to wonder whether a hint is needed then it probably is. The context of the scenario isn't obvious in the translation tools, and you can't assume that the strings are shown to the translator in the same order that they appear in the WML file.&lt;br /&gt;
&lt;br /&gt;
Just begin the comment with '#po:' or '# po:' above the string in question. This must be on the line (or lines) immediately before the string that the hint applies to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=wml&amp;gt;&lt;br /&gt;
#po: &amp;quot;northern marches&amp;quot; is *not* a typo for &amp;quot;northern marshes&amp;quot; here.&lt;br /&gt;
#po: In archaic English, &amp;quot;march&amp;quot; means &amp;quot;border country&amp;quot;.&lt;br /&gt;
story=_ &amp;quot;The orcs were first sighted from the north marches of the great forest of Wesmere.&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The wmlxgettext tool will automatically generate hints for some tags, in addition to hints from '# po:' comments:&lt;br /&gt;
&lt;br /&gt;
* For ''[message]'': the ''id'', ''speaker'', ''role'' or ''type'' used to choose the speaker&lt;br /&gt;
* For ''[object]'': the ''id''&lt;br /&gt;
* For ''[unit]'': the ''id'' and ''unit_type''&lt;br /&gt;
* For ''[unit_type]'': the ''id'' and ''race''&lt;br /&gt;
* For ''[objective]'': whether it's ''condition=win'' or ''condition=lose''&lt;br /&gt;
&lt;br /&gt;
==== Things to avoid ====&lt;br /&gt;
&lt;br /&gt;
Note that there are certain things you should never do. For example, '''never''' mark an empty string as translatable, for wmlxgettext (the tool that extracts strings from WML) will abort upon detecting one. Therefore, what is seen below should never be done:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=wml&amp;gt;&lt;br /&gt;
name= _ &amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also, never put macro arguments in a translatable string, for it will not work. The reason for this is that the preprocessor does its job before gettext, thus gettext will try to replace a string that does not exist. Therefore, what is shown below should not be done:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=wml&amp;gt;&lt;br /&gt;
name= _ &amp;quot;{TYPE} Mu&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To show why it will not work:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=wml&amp;gt;&lt;br /&gt;
#define UNIT_NAME TYPE&lt;br /&gt;
    name= _ &amp;quot;{TYPE} Mu&amp;quot;&lt;br /&gt;
#enddef&lt;br /&gt;
&lt;br /&gt;
{UNIT_NAME ( _ &amp;quot;Sword&amp;quot;)}&lt;br /&gt;
{UNIT_NAME ( _ &amp;quot;Bow&amp;quot;)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
Translation catalogues would have this: &amp;quot;{TYPE} Mu&amp;quot;, therefore gettext will look for it even though it will not exist because we, in fact, have these after the preprocessor is done:&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;syntaxhighlight lang=wml&amp;gt;&lt;br /&gt;
name= _ &amp;quot;Sword Mu&amp;quot;&lt;br /&gt;
name= _ &amp;quot;Bow Mu&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
Since those are not in the catalogues, they will not get translated.&lt;br /&gt;
&lt;br /&gt;
=== Gender-specific strings ===&lt;br /&gt;
&lt;br /&gt;
Several tags, including ''[message]'', ''[abilities]'' and ''[trait]'', can choose different strings based on the gender of the unit. In English the two versions are likely to be the same, but other languages may have gender-specific words for 'I' or 'me'.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=wml&amp;gt;&lt;br /&gt;
[message]&lt;br /&gt;
    speaker=student&lt;br /&gt;
    message= _ &amp;quot;Have you found an orc for me to fight, huh? A troll?&amp;quot;&lt;br /&gt;
    female_message= _ &amp;quot;female^Have you found an orc for me to fight, huh? A troll?&amp;quot;&lt;br /&gt;
[/message]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The convention in WML is, as above, to use ''message='' and ''female_message='', with the latter string including the prefix ''female^''. The mechanism also supports ''male_message='', but all units will fall back to using the plain ''message='' value if there isn't gender-specific version that matches their gender.&lt;br /&gt;
&lt;br /&gt;
The message is chosen based on the gender of the speaking unit. To change the message based on the gender of another unit requires separate ''[message]'' tags:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=wml&amp;gt;&lt;br /&gt;
[if]&lt;br /&gt;
    [have_unit]&lt;br /&gt;
        id=student&lt;br /&gt;
        gender=male&lt;br /&gt;
    [/have_unit]&lt;br /&gt;
    [then]&lt;br /&gt;
        [message]&lt;br /&gt;
            speaker=Delfador&lt;br /&gt;
            message= _ &amp;quot;Young man, you have $student_hp hitpoints and a sword. I’m fairly sure you’ll win.&amp;quot;&lt;br /&gt;
        [/message]&lt;br /&gt;
    [/then]&lt;br /&gt;
    [else]&lt;br /&gt;
        [message]&lt;br /&gt;
            speaker=Delfador&lt;br /&gt;
            message= _ &amp;quot;female^Young lady, you have $student_hp hitpoints and a sword. I’m fairly sure you’ll win.&amp;quot;&lt;br /&gt;
        [/message]&lt;br /&gt;
    [/else]&lt;br /&gt;
[/if]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Using a macro to encapsulate most of that can be useful. The example above is from the tutorial, after expanding the ''GENDER'' macro which is defined in data/campaigns/tutorial/utils/utils.cfg.&lt;br /&gt;
&lt;br /&gt;
=== Proper nouns in strings ===&lt;br /&gt;
&lt;br /&gt;
Some languages require declensions of proper nouns - a person's name may change slightly depending on their role in a sentence. See for example [https://github.com/hrubymar10/wesnoth-cs/pull/209#issuecomment-1066163433 the Czech translators' PR 209].&lt;br /&gt;
&lt;br /&gt;
Where there are a small number of units that might be addressed, for example the two in the tutorial or the four possible allies in UtBS, it's better to have a separate translatable string for each possible character instead of interpolating '''$unit.name''' into a string.&lt;br /&gt;
&lt;br /&gt;
=== Reusing mainline translations ===&lt;br /&gt;
&lt;br /&gt;
You can reuse translations for strings in mainline domains by using multiple textdomain bindings:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=wml&amp;gt;&lt;br /&gt;
# textdomain wesnoth-Son_of_Haldric&lt;br /&gt;
&lt;br /&gt;
[unit_type]&lt;br /&gt;
    id=Mu&lt;br /&gt;
    name= _ &amp;quot;Mu&amp;quot;&lt;br /&gt;
    # ...&lt;br /&gt;
&lt;br /&gt;
    [attack]&lt;br /&gt;
        id=sword&lt;br /&gt;
        #textdomain wesnoth-units&lt;br /&gt;
        description= _ &amp;quot;sword&amp;quot;&lt;br /&gt;
        # ...&lt;br /&gt;
    [/attack]&lt;br /&gt;
   &lt;br /&gt;
    #textdomain wesnoth-Son_of_Haldric&lt;br /&gt;
    # ...&lt;br /&gt;
[/unit_type]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Of course, if you use bindings for multiple textdomains, make sure the right parts of the file are bound to the right domains. Also, never try to use the mainline campaigns’ domains, for there is no guarantee that the mainline campaigns will be available on all setups. So, only use the core domains: wesnoth, wesnoth-editor, wesnoth-lib, wesnoth-help, and wesnoth-units.&lt;br /&gt;
&lt;br /&gt;
==== The gettext helper file ====&lt;br /&gt;
&lt;br /&gt;
A gettext helper file is a lovely file that makes reusing mainline translations nice and easy, by having all strings that should use a specific textdomain in a single file. It is also more wmllint-friendly.&lt;br /&gt;
&lt;br /&gt;
Here is an example of a gettext helper file. The macro names start with 'SOH_' to ensure that they don't clash with another add-on's macros (assuming that this add-on is Son_of_Haldric).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=wml&amp;gt;&lt;br /&gt;
#textdomain wesnoth-lib&lt;br /&gt;
&lt;br /&gt;
#define SOH_STR_ICE&lt;br /&gt;
_&amp;quot;Ice&amp;quot; #enddef&lt;br /&gt;
&lt;br /&gt;
#textdomain wesnoth-units&lt;br /&gt;
&lt;br /&gt;
#define SOH_STR_SWORD&lt;br /&gt;
_&amp;quot;sword&amp;quot; #enddef&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A typical name for gettext helper files is ''mainline-strings.cfg''.&lt;br /&gt;
&lt;br /&gt;
To use it, just wire it into your add-on and use the macros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=wml&amp;gt;&lt;br /&gt;
[attack]&lt;br /&gt;
    id=sword&lt;br /&gt;
    name={SOH_STR_SWORD}&lt;br /&gt;
    # ...&lt;br /&gt;
[/attack]&lt;br /&gt;
&lt;br /&gt;
[terrain_type]&lt;br /&gt;
    id=ice2&lt;br /&gt;
    name={SOH_STR_ICE}&lt;br /&gt;
    # ...&lt;br /&gt;
[/terrain_type]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Unbalanced WML macros ===&lt;br /&gt;
&lt;br /&gt;
WML macros can be ''unbalanced'', meaning that they either include a [tag] without the corresponding [/tag] or a [/tag] before the corresponding [+tag]. These macros are expected to be used in a place where the [tag] is already open. Writing new macros using this isn't recommended; instead please ask in the WML Workshop forum about better ways to do it.&lt;br /&gt;
&lt;br /&gt;
When generating the .pot files for translation, wmlxgettext may stop with one of the errors&lt;br /&gt;
* error: Son_Of_Haldric/utils/abilities.cfg:29: unexpected closing tag '[/abilities]' outside any scope.&lt;br /&gt;
* error: Son_Of_Haldric/utils/abilities.cfg:300: End of WML file reached, but some tags were not properly closed. (nearest unclosed tag is: [abilities])&lt;br /&gt;
&lt;br /&gt;
Suppose abilities.cfg line 29 is in the definition of SOH_ABILITY_BLITZ. To get the .pot file generated, the simplest change is to use ''# wmlxgettext'' comments to add the missing opening or closing tags:&lt;br /&gt;
&lt;br /&gt;
 # wmllint: unbalanced-on&lt;br /&gt;
 # wmlxgettext: [abilities]&lt;br /&gt;
 #define SOH_ABILITY_BLITZ&lt;br /&gt;
     [dummy]&lt;br /&gt;
         id=soh_blitz&lt;br /&gt;
         # ... ability definition stuff ...&lt;br /&gt;
     [/dummy]&lt;br /&gt;
 [/abilities]&lt;br /&gt;
 # ... several lines of code, none of which are an ''#enddef'' ...&lt;br /&gt;
 [+abilities] # wmlxgettext: [/abilities]&lt;br /&gt;
 #enddef&lt;br /&gt;
 # wmllint: unbalanced-off&lt;br /&gt;
&lt;br /&gt;
== Marking up strings in Lua ==&lt;br /&gt;
&lt;br /&gt;
In Lua code, textdomains are a callable object that looks up a string. This has support for both singular and plural strings. By convention, the name &amp;lt;code&amp;gt;_&amp;lt;/code&amp;gt; is usually used for the textdomain object.&lt;br /&gt;
&lt;br /&gt;
The following sample code demonstrates how to fetch translatable strings in Lua:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=lua&amp;gt;&lt;br /&gt;
local _ = wesnoth.textdomain &amp;quot;wesnoth&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- Look up a normal string:&lt;br /&gt;
local win_condition = _ &amp;quot;Defeat enemy leader(s)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- Hints for the translators start with &amp;quot;po:&amp;quot;, as in WML:&lt;br /&gt;
-- po: Floating text shown when a unit with the &amp;quot;feeding&amp;quot; ability gets a kill&lt;br /&gt;
local text = stringx.vformat(_&amp;quot;+$value max HP&amp;quot;, { value = feeding.value})&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Plural strings are supported since Wesnoth 1.14:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=lua&amp;gt;&lt;br /&gt;
local turn_count = 5&lt;br /&gt;
turn_counter = _(&amp;quot;this turn left&amp;quot;, &amp;quot;%d turns left&amp;quot;, turn_count)&lt;br /&gt;
turn_counter = tostring(turn_counter):format(turn_count)&lt;br /&gt;
&lt;br /&gt;
-- For readability, the example's strings are slightly different to the real code.&lt;br /&gt;
-- The real strings have brackets in the text shown to the player.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Wesnoth 1.15, variables can be interpolated using names:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=lua&amp;gt;&lt;br /&gt;
-- Look up a plural string, using the preferred style (as of Wesnoth 1.15.3):&lt;br /&gt;
local turn_count = 5&lt;br /&gt;
turn_counter = _(&amp;quot;this turn left&amp;quot;, &amp;quot;$remaining_turns turns left&amp;quot;, turn_count)&lt;br /&gt;
turn_counter = turn_counter:vformat{remaining_turns = turn_count}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== The textdomain tag ==&lt;br /&gt;
&lt;br /&gt;
To tell the engine where to search for the .po and .mo files, each textdomain needs a ''[textdomain]'' tag. For add-ons and mainline campaigns, the tag is usually placed inside of the _main.cfg. This is a top-level tag, so should be outside the ''[campaign]'' or ''[modification]'' tag.&lt;br /&gt;
&lt;br /&gt;
Translatable strings from C++ and Lua use the same textdomains as WML; this WML tag tells the engine where to search for these strings irrespective of which programming language the string appeared in.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=wml&amp;gt;&lt;br /&gt;
[textdomain]&lt;br /&gt;
    name=&amp;quot;wesnoth-Son_of_Haldric&amp;quot;&lt;br /&gt;
    path=&amp;quot;data/add-ons/Son_of_Haldric/translations&amp;quot;&lt;br /&gt;
[/textdomain]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The .po (or .mo) files will be loaded from a subdirectory of the ''translations'' directory.&lt;br /&gt;
&lt;br /&gt;
== Generating the .pot and .po files for UMC ==&lt;br /&gt;
&lt;br /&gt;
For each language, Wesnoth will search for a .po file containing the translations. How to create that file will be explained below, but first the overview of where it should go. Continuing with the Son of Haldric example, the Swedish translation would be in the file:&lt;br /&gt;
&lt;br /&gt;
* ''data/add-ons/Son_of_Haldric/translations/wesnoth-Son_of_Haldric/sv.po'' .&lt;br /&gt;
&lt;br /&gt;
That comes from:&lt;br /&gt;
&lt;br /&gt;
* ''data/add-ons/Son_of_Haldric/translations'' comes from the ''[textdomain]'' tag's ''path''&lt;br /&gt;
* ''wesnoth-Son_of_Haldric'' is the textdomain's name&lt;br /&gt;
* ''sv'' is the language code for Swedish. The codes for each language are given in the big table on [https://www.wesnoth.org/gettext/ https://www.wesnoth.org/gettext/] .&lt;br /&gt;
&lt;br /&gt;
Wesnoth 1.14 (but not 1.12) supports reading .po files directly, so when you add the .po file and the new translation should appear as soon as you refresh the cache.&lt;br /&gt;
&lt;br /&gt;
=== Generating the .pot file ===&lt;br /&gt;
&lt;br /&gt;
The template (.pot) file contains all of the strings that need to be translated in the .po files, but without the translations.&lt;br /&gt;
&lt;br /&gt;
The .pot is generated from WML and Lua files using a tool called wmlxgettext. With Wesnoth 1.14.5 and later, this is shipped with Wesnoth itself as part of the [[Maintenance_tools]] and can be used from the Maintenance Tools' GUI. At the moment it's not documented on that page, but if you follow the instructions to get GUI.pyw running then you'll see there's a wmlxgettext tab.&lt;br /&gt;
&lt;br /&gt;
Pre-1.13 instructions on how to get and use it are in Nobun's [https://r.wesnoth.org/p617733 forum posting].&lt;br /&gt;
&lt;br /&gt;
==== Error messages from wmlxgettext ====&lt;br /&gt;
&lt;br /&gt;
If you get the error from ''wmlxgettext'' of &amp;quot;UTF-8 Format error. Can't decode byte 0x91 (invalid start byte).&amp;quot;, and the line in question has a curly quotation mark, that likely means that your text editor is using the Windows-1252 character set, and you need to replace the Windows quotes with their Unicode equivalents, see [[Typography_Style_Guide]] and your editor's documentation for more info. The same applies if the error message says 0x92, 0x93 or 0x94.&lt;br /&gt;
&lt;br /&gt;
If you get either &amp;quot;unexpected closing tag '[/''something'']' outside any scope&amp;quot; or &amp;quot;End of WML file reached, but some tags were not properly closed. (nearest unclosed tag is: [''something''])&amp;quot; then see [[#Unbalanced_WML_macros]] above.&lt;br /&gt;
&lt;br /&gt;
=== Generating the .po files for each language ===&lt;br /&gt;
&lt;br /&gt;
Each .po file can start as a simple copy of the .pot file. Either the author or the translator copies the template to the language-specific filename, and then the work of [[GettextForTranslators]] happens on those copies.&lt;br /&gt;
&lt;br /&gt;
Some .po editors, for example poedit, will recognise that the .pot is a template, and automatically suggest saving to a different filename. The poedit editor can also update a .po file based on changes to the .pot file.&lt;br /&gt;
&lt;br /&gt;
=== Generating the .mo files for UMC ===&lt;br /&gt;
&lt;br /&gt;
For Wesnoth 1.14, it's generally not necessary to compile the .po files to .mo files. The mainline translations still use .mo files for better performance, but UMC authors can skip the .mo compilation stage.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[WesnothTranslations]]&lt;br /&gt;
* http://www.gnu.org/software/gettext/&lt;br /&gt;
* [https://www.gnu.org/software/gettext/manual/html_node/Preparing-Strings.html#Preparing-Strings GNU gettext manual on preparing translatable strings]&lt;br /&gt;
* [[GetText]]&lt;br /&gt;
* [https://wmlxgettext-unoff.readthedocs.io/en/latest/ wmlxgettext documentation]&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Octalot</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=IGNFileFormat&amp;diff=73747</id>
		<title>IGNFileFormat</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=IGNFileFormat&amp;diff=73747"/>
		<updated>2024-09-14T09:48:12Z</updated>

		<summary type="html">&lt;p&gt;Octalot: Default blacklist is used for access to all files&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
When you upload an add-on, some files and directories are ignored and not uploaded.&lt;br /&gt;
&lt;br /&gt;
If you would prefer to have more control over which files and directories should be ignored, you should provide a &amp;lt;b&amp;gt;_server.ign&amp;lt;/b&amp;gt; file containing a list of filter patterns. Each file or directory matching any entry of the _server.ign file will not be included when uploaded to the add-ons server.&lt;br /&gt;
&lt;br /&gt;
{{DevFeature1.13|12}} The engine blocks WML and Lua from accessing any file that matches the built-in list. This was added as a security feature to block access to .git directories, disregards any _server.ign file, and is likely to change during the 1.19 dev cycle (see discussion in [https://github.com/wesnoth/wesnoth/pull/9325 PR 9325]).&lt;br /&gt;
&lt;br /&gt;
== Where do I put the file, and what goes in it? ==&lt;br /&gt;
&lt;br /&gt;
The file should be placed within the root level of your add-on (&amp;lt;i&amp;gt;data/add-ons/addon_name/_server.ign&amp;lt;/i&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
A specific format is required:&lt;br /&gt;
&lt;br /&gt;
* {{DevFeature1.13|0}}: Blank lines and lines beginning with '&amp;lt;code&amp;gt;# &amp;lt;/code&amp;gt;' (space required) are ignored.&lt;br /&gt;
* Each line should contain exactly one pattern.&lt;br /&gt;
* &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;?&amp;lt;/code&amp;gt; wildcards are supported (&amp;lt;code&amp;gt;?&amp;lt;/code&amp;gt; stands for any single character, &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; stands for any number of any characters).&lt;br /&gt;
* {{DevFeature1.13|12}}: &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; wildcards are also supported: it stands for one or more characters.&lt;br /&gt;
* Patterns with a trailing forward slash '&amp;lt;code&amp;gt;/&amp;lt;/code&amp;gt;' will match directories; the rest only match files.&lt;br /&gt;
&lt;br /&gt;
==== Default values ====&lt;br /&gt;
&lt;br /&gt;
If there is no custom _server.ign file present, a default filter will be used instead, which is as follows:&lt;br /&gt;
&lt;br /&gt;
 .+&lt;br /&gt;
 .+/&lt;br /&gt;
 __MACOSX/&lt;br /&gt;
 #*#&lt;br /&gt;
 *~&lt;br /&gt;
 *-bak&lt;br /&gt;
 *.swp&lt;br /&gt;
 *.pbl&lt;br /&gt;
 *.ign&lt;br /&gt;
 _info.cfg&lt;br /&gt;
 *.exe&lt;br /&gt;
 *.bat&lt;br /&gt;
 *.cmd&lt;br /&gt;
 *.com&lt;br /&gt;
 *.scr&lt;br /&gt;
 *.sh&lt;br /&gt;
 *.js&lt;br /&gt;
 *.vbs&lt;br /&gt;
 *.o&lt;br /&gt;
 *.ini  {{DevFeature1.13|12}}&lt;br /&gt;
 Thumbs.db&lt;br /&gt;
 *.wesnoth&lt;br /&gt;
 *.project&lt;br /&gt;
&lt;br /&gt;
If you create a custom _server.ign, you should add these entries to it.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[PblWML]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Create]]&lt;/div&gt;</summary>
		<author><name>Octalot</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=AbilitiesWML&amp;diff=73714</id>
		<title>AbilitiesWML</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=AbilitiesWML&amp;diff=73714"/>
		<updated>2024-09-08T12:50:42Z</updated>

		<summary type="html">&lt;p&gt;Octalot: Add and sub work together since 1.19.4&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WML Tags}}&lt;br /&gt;
==  Abilities and their effects ==&lt;br /&gt;
&lt;br /&gt;
There are two types of abilities: ones that apply to units (called ''abilities'') and ones that only apply when using a particular attack (called ''specials'' or ''weapon specials'').  A unit may have multiple abilities and an attack can have multiple specials.&lt;br /&gt;
&lt;br /&gt;
Each ability or special defines an effect based on one to three units. Most abilities apply to a single unit, and '''[filter_self]''' can be used to determine when the ability is active. Weapon specials apply to two units, which can be filtered either as &amp;quot;attacker&amp;quot; and &amp;quot;defender&amp;quot; (with the obvious meaning) or as &amp;quot;self&amp;quot; and &amp;quot;other&amp;quot; – the unit that possesses the special, and that unit's opponent. When filtering on the &amp;quot;other&amp;quot; unit, you use '''[filter_second]'''.&lt;br /&gt;
&lt;br /&gt;
Leadership-style abilities are a more complex case, as they involve three units. Like a weapon special, there is an attacker and defender, but there is also a third unit that could be referred to as the &amp;quot;teacher&amp;quot;. The &amp;quot;teacher&amp;quot; is the unit that possesses the ability, so it is referred to as &amp;quot;self&amp;quot; in the ability. A leadership ability works by temporarily granting a weapon special to either the attacker or the defender. The unit that benefits from this is referred to as the &amp;quot;student&amp;quot;, while the unit that does not benefit is simply the &amp;quot;other&amp;quot; unit. When filtering on the &amp;quot;other&amp;quot; unit, you use '''[filter_second]'''.&lt;br /&gt;
&lt;br /&gt;
== The ''[abilities]'' tag ==&lt;br /&gt;
&lt;br /&gt;
The following tags are used to describe an ability in WML:&lt;br /&gt;
&lt;br /&gt;
* '''[heals]''': modifies the hitpoints of a unit at the beginning of the healer's turn&lt;br /&gt;
* '''[regenerate]''': modifies the hitpoints of a unit at the beginning of the unit's turn&lt;br /&gt;
* '''[resistance]''': modifies the resistance of a unit to damage&lt;br /&gt;
* '''[leadership]''': modifies the damage of a unit&lt;br /&gt;
* '''[skirmisher]''': negates enemy zones of control&lt;br /&gt;
* '''[illuminates]''': modifies the time of day adjacent to the affected units&lt;br /&gt;
* '''[teleport]''': allows the unit to teleport&lt;br /&gt;
* '''[hides]''': renders the unit invisible to enemies&lt;br /&gt;
* {{DevFeature1.15|0}} All [[#The_.5Bspecials.5D_tag|weapon specials]] except for '''[plague]''', '''[heal_on_hit]''', and '''[swarm]''' can be placed in the '''[abilities]''' tag. These &amp;quot;weapon specials as abilities&amp;quot; will give that weapon special to all attacks the unit has if they match a unit filter like '''[filter_self|filter_opponent|filter_attacker|filter_defender|filter_student]''' and an attack filter inside of that unit filter (besides [has_attack]) called '''[filter_weapon]'''.&lt;br /&gt;
* Any other tag is valid (for example '''[dummy]'''), but will result in an ability that does nothing but report it's there. '''Note:''' a dummy ability must have an id for the name and description to display.&lt;br /&gt;
* {{DevFeature1.15|3}} All the engine [[#The_.5Bspecials.5D_tag|weapon specials]] can be placed in the [abilities] tag now.&lt;br /&gt;
&lt;br /&gt;
=== Available formula variables in Abilities and Weapon Specials  ===&lt;br /&gt;
&lt;br /&gt;
{{DevFeature1.15|?}} When using formulas in abilities and weapon specials, the following formula variables are available:&lt;br /&gt;
* '''self''': (unit) the unit that has the ability&lt;br /&gt;
* '''student''': (unit) for leadership-like abilities this is the unit that is adjacent to the unit that has the ability; if affect_self=yes, this is also unit who has ability.&lt;br /&gt;
* '''attacker''': (unit) for attack-related abilities and weapon specials, this is the attacking unit during the attack.&lt;br /&gt;
* '''defender''': (unit) for attack-related abilities and weapon specials, this is the defending unit during the attack.&lt;br /&gt;
* '''other''': (unit) the unit whose stats get modified from the ability. For abilities without 'apply_to=opponent' this is always the same as 'student'.&lt;br /&gt;
&lt;br /&gt;
=== Common keys and tags for every ability ===&lt;br /&gt;
&lt;br /&gt;
{{DevFeature1.13|?}} All keys inside any ability that expects a numeric value will also accept formulas using &lt;br /&gt;
[[Wesnoth Formula Language]]. In order to use a formula in these keys, you must enclose it in parentheses. However, do '''not''' precede those parentheses with a dollar sign like &amp;lt;code&amp;gt;$(...)&amp;lt;/code&amp;gt;, since that will erase the &amp;lt;tt&amp;gt;self&amp;lt;/tt&amp;gt; variable.&lt;br /&gt;
&lt;br /&gt;
* '''name''': the (translatable) name of the ability. If omitted, the ability will be a hidden ability.&lt;br /&gt;
* '''female_name''': the (translatable) name of the ability when possessed by a female unit. Defaults to ''name'' if not specified.&lt;br /&gt;
* '''name_inactive''': the (translatable) name of the ability when inactive. Defaults to ''name'' if not specified; if the ability is supposed to be not displayed when inactive, you must explicitly set ''name_inactive'' to an empty string (nothing after the equals sign).&lt;br /&gt;
* '''female_name_inactive''': the (translatable) name of the ability when inactive and possessed by a female unit. Defaults to ''name_inactive'' if not specified. You should thus set ''female_name'' as well!&lt;br /&gt;
* '''description''': the (translatable) description of the ability.&lt;br /&gt;
* '''description_inactive''': the (translatable) description of the ability when inactive. Defaults to ''description'' if not specified.&lt;br /&gt;
* '''special_note''' {{DevFeature1.15|14}} Translatable string, which will be displayed in the unit’s help. See also [[UnitTypeWML#Special_Notes]].&lt;br /&gt;
* '''affect_self''': if equal to 'yes' (default), the ability will affect the unit that has it.&lt;br /&gt;
* '''affect_allies''': if equal to 'yes', the ability will affect units from the same and allied sides in the specified adjacent hexes. If set to 'no' it will not affect own or allied sides. If not set (default) it will affect units on the same side but not from allied sides.&lt;br /&gt;
* '''affect_enemies''': if equal to 'yes' (default is 'no'), the ability will affect enemies in the specified adjacent hexes.&lt;br /&gt;
* '''cumulative''': if set to 'yes', this ability will be cumulative with the base value for this ability. ''Beware of the bug with cumulative leadership in 1.16 https://github.com/wesnoth/wesnoth/issues/6466 , more info see below, in &amp;quot;Extra keys used by the ''leadership'' ability&amp;quot; section''. {{DevFeature1.17|5}}, bug fixed.&lt;br /&gt;
* '''id''': this ability will not be cumulative with other abilities using this id. Must be present if cumulative is anything other than 'yes'.&lt;br /&gt;
* '''halo_image''': {{DevFeature1.17|22}} if used, the halo specified showed on unit affected by ability.&lt;br /&gt;
* '''overlay_image''': {{DevFeature1.17|22}} if used, the overlay specified showed on unit affected by ability.&lt;br /&gt;
* '''halo_image_self''': {{DevFeature1.17|22}} if used, the halo specified showed on unit who has ability when active.&lt;br /&gt;
* '''overlay_image_self''': {{DevFeature1.17|22}} if used, the overlay specified showed on unit who has ability when active.&lt;br /&gt;
* '''[filter]''': [[StandardUnitFilter]] If the unit owning the ability does not match this filter, the ability will be inactive.&lt;br /&gt;
* {{anchor|affect_adjacent|'''[affect_adjacent]'''}}: an adjacent unit that does not match this filter will not receive its effects. There can be multiple [affect_adjacent] tags in a single ability; a unit needs to match any one of these to receive the effects. The side requirement of matching units is defined by the '''affect_allies''' and '''affect_enemies''' keys. If there are no [affect_adjacent] tags, then no adjacent units will receive the effects.&lt;br /&gt;
** '''adjacent''': a comma separated list of any combination of these directions: '''n''','''ne''','''se''','''s''','''sw''','''nw'''. (See [[StandardLocationFilter#Directions|notes]])&lt;br /&gt;
** '''[filter]''': a [[StandardUnitFilter]]. {{DevFeature1.13|2}} The variable $other_unit refers to the unit owning the ability.&lt;br /&gt;
* '''[filter_self]''': if the owner of the ability does not match this filter, it will not receive the effects of the ability. [filter_self] takes a [[StandardUnitFilter]] as argument.&lt;br /&gt;
* '''[filter_adjacent]''': if an adjacent unit does not match this filter, the ability will not be active and no-one will receive its affects. Takes extra keys ''adjacent'', ''count'', ''is_enemy'', just like in a [[StandardUnitFilter]], with the one difference that, in the absence of a specified ''count'', all listed directions must match (so, with two directiones eg ''adjacent=n,s'', the default is ''count=2''). In fact, it's really a shorthand for a [filter_adjacent] nested within [filter]. The variables $this_unit and {{DevFeature1.13|2}} $other_unit both work as you'd expect. Multiple [filter_adjacent] can be provided, all of which must pass for the ability to activate.&lt;br /&gt;
* '''[filter_adjacent_location]''': like [filter_adjacent], but filters on locations instead of units. This is a shorthand for [filter][filter_location][filter_adjacent_location].&lt;br /&gt;
* {{anchor|filter_base_value|'''[filter_base_value]'''}}: filters on the value before any modifications; uses the keys '''equals''', '''not_equals''', etc. If several keys are used all have to match.&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[heals]'' ability ===&lt;br /&gt;
&lt;br /&gt;
* '''value''': the amount healed.&lt;br /&gt;
* '''poison''': can be one of ''slowed'',''cured''. ''slowed'' means poison will not take effect for adjacent units (it's not related to the weapon special &amp;quot;slows&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[regenerate]'' ability ===&lt;br /&gt;
&lt;br /&gt;
* '''value''': the amount healed.&lt;br /&gt;
* '''poison''': can be one of ''slowed'',''cured''.&lt;br /&gt;
&lt;br /&gt;
=== Extra keys and tags used by the ''[resistance]'' ability ===&lt;br /&gt;
&lt;br /&gt;
* '''value''': set resistance to this value.&lt;br /&gt;
* '''max_value''': maximum resistance value. Default: 0%. {{DevFeature1.17|24}} Default: no limit.&lt;br /&gt;
* '''min_value''': {{DevFeature1.19|0}} minimum resistance value. Default: no limit.&lt;br /&gt;
* '''add''': adds to resistance. Note the interaction with '''sub''' in [[#Common_calculations]].&lt;br /&gt;
* '''sub''': subtracts from resistance.&lt;br /&gt;
* '''multiply''': multiplies resistance value. &lt;br /&gt;
* '''divide''': divides resistance value.&lt;br /&gt;
* '''apply_to''': a list of damage types; if left out, the ability applies to all types.&lt;br /&gt;
* '''active_on''': one of 'defense' or 'offense'; if left out, the ability is active on both.&lt;br /&gt;
These keys affect the actual resistance (e.g. -20%), not the damage modifier normally used in [resistance] (e.g. 120).&lt;br /&gt;
* '''[filter_weapon]''': {{DevFeature1.15|0}} If present, the resistance ability only takes effect when the owner of the ability uses a matching weapon.&lt;br /&gt;
* '''[filter_second_weapon]''': {{DevFeature1.15|0}} If present, the resistance ability only takes effect when the opponent uses a matching weapon.&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[leadership]'' ability ===&lt;br /&gt;
&lt;br /&gt;
* '''value''': the percentage bonus to damage.&lt;br /&gt;
* '''add''': the cumulative percentage bonus to damage. Note the interaction with '''sub''' in [[#Common_calculations]].&lt;br /&gt;
* '''sub''': the cumulative percentage bonus subtracted to damage.&lt;br /&gt;
* '''multiply''': multiplies resistance value. &lt;br /&gt;
* '''divide''': divides resistance value.&lt;br /&gt;
''Note:'' cumulative leadership with '''cumulative=yes''' and '''value=''' doesn't work in 1.16 (but fixed in 1.17.12 and later). To work around use '''add=''' or '''sub=''' key (it doesn't require cumulative) (https://github.com/wesnoth/wesnoth/issues/6466 ). If you want each instance of a ''[leadership]'' with the same id to be added you will be able to reuse '''cumulative=yes''' in 1.17.12 and later, otherwise, if you want to add the value of another ''[leadership]'' only once even with the same id in several copies, use '''add'''.&lt;br /&gt;
* '''[filter_weapon]''': {{DevFeature1.15|0}} If present, the leadership ability only takes effect when the owner of the ability uses a matching weapon.&lt;br /&gt;
* '''[filter_second_weapon]''': {{DevFeature1.15|0}} If present, the leadership ability only takes effect when the opponent uses a matching weapon.&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[illuminates]'' ability ===&lt;br /&gt;
&lt;br /&gt;
Because this ability changes the terrain instead of units on it, affect_self, affect_allies, affect_enemies and [filter_adjacent] have no effect.&lt;br /&gt;
* '''value''': the percentage bonus to lawful units. Units with '''alignment=lawful''' do +''value'' % damage when under the influence of a unit with this ability. Units with '''alignment=chaotic''' do -''value'' % damage. Units with '''alignment=neutral''' are unaffected by this ability. Units with '''alignment=liminal''' do -(abs(''value'')) % damage. ''value'' can be a negative number; this is useful if you want to give Chaotic units an advantage instead of Lawful ones. &lt;br /&gt;
* '''add''': the cumulative percentage bonus to damage. Note the interaction with '''sub''' in [[#Common_calculations]].&lt;br /&gt;
* '''sub''': the cumulative percentage bonus subtracted to damage.&lt;br /&gt;
* '''multiply''': multiplies resistance value. &lt;br /&gt;
* '''divide''': divides resistance value.&lt;br /&gt;
* '''max_value''': the maximum percentage bonus given. Cannot be less than 0. Defaults to 0 if not present.&lt;br /&gt;
* '''min_value''': the minimum percentage bonus given. Cannot be greater than 0. Defaults to 0 if not present.&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[hides]'' ability ===&lt;br /&gt;
&lt;br /&gt;
* '''alert''': the displayed text when the unit is discovered. Default &amp;quot;Ambushed!&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Extra tags used by the ''[teleport]'' ability ===&lt;br /&gt;
&lt;br /&gt;
* '''[tunnel]''' - a [[DirectActionsWML#.5Btunnel.5D|tunnel tag]] (without the remove key) defining the tunneling source and target hexes, and maybe other conditions. (It automatically applies only to the unit with the ability.)  You may use $teleport_unit inside the [tunnel][source] and [tunnel][target] tag for filtering purposes.&lt;br /&gt;
&lt;br /&gt;
=== Extra tags and keys used by weapon special abilities ===&lt;br /&gt;
&lt;br /&gt;
* {{anchor|filter_student|'''[filter_student]'''}}: {{DevFeature1.15|0}} If present, only the unit matching this filter, either the possessor of the ability if affect_self=yes, or an adjacent unit matching '''[filter_adjacent]''' will be affected. Work like '''[filter_self]'''  of specific weapon special.&lt;br /&gt;
* '''overwrite_specials''': {{DevFeature1.15|13}} If present, allows a special abilities weapon with a numerical value to impose its value and ignore values of abilities or specials of the same type. If '''overwrite_specials=one_side''', the specials and abilities used by the opponent of the unit affected by the ability with this key and applied to it will not be affected. If '''overwrite_specials=both_sides''', all non-key-carrying abilities and all specials of the same type affecting the recipient unit will be affected, even if used by the opponent (used in the macro FORCE_CHANCE_TO_HIT).&lt;br /&gt;
* {{anchor|overwrite|'''[overwrite]'''}}: {{DevFeature1.17|22}} Part of '''overwrite_specials'''. Allows more flexibility in determining which specials should take priority over other specials of the same type.&lt;br /&gt;
** '''priority''': A numeric value to use when determining which special should be used if multiple specials of the same type have the '''overwrite_specials''' attribute. Default is 0.&lt;br /&gt;
** {{anchor|filter_specials|'''[experimental_filter_specials]'''}}: [[StandardAbilityFilter]] Further attributes to filter specials by to determine if it should take priority over other specials. Accepts the same attributes as [experimental_filter_ability].&lt;br /&gt;
* Other keys and tags appropriate to the specific weapon special.&lt;br /&gt;
&lt;br /&gt;
=== Macros for common abilities ===&lt;br /&gt;
&lt;br /&gt;
[https://www.wesnoth.org/macro-reference.html#file:abilities.cfg macro reference]&lt;br /&gt;
* ABILITY_AMBUSH&lt;br /&gt;
* ABILITY_CURES&lt;br /&gt;
* ABILITY_HEALS&lt;br /&gt;
* ABILITY_ILLUMINATES&lt;br /&gt;
* ABILITY_LEADERSHIP_LEVEL_1 to ABILITY_LEADERSHIP_LEVEL_5&lt;br /&gt;
* {{DevFeature1.13|2}} ABILITY_LEADERSHIP (replaces the above leadership macros, which are now deprecated)&lt;br /&gt;
* ABILITY_NIGHTSTALK&lt;br /&gt;
* ABILITY_REGENERATES&lt;br /&gt;
* ABILITY_SKIRMISHER&lt;br /&gt;
* ABILITY_STEADFAST&lt;br /&gt;
* ABILITY_SUBMERGE&lt;br /&gt;
* ABILITY_TELEPORT&lt;br /&gt;
&lt;br /&gt;
== The ''[specials]'' tag ==&lt;br /&gt;
&lt;br /&gt;
The '''[specials]''' tag goes inside the '''[attack]''' tag. It can contain the following tags:&lt;br /&gt;
&lt;br /&gt;
* '''[attacks]''': modifies the number of attacks of a weapon, in using '''value''', '''add''', '''sub''', '''multiply''' or '''divide''' attributes&lt;br /&gt;
* '''[berserk]''': pushes the attack for more than one combat round, using '''value''' attribute, '''value''' is 1 by default&lt;br /&gt;
* '''[chance_to_hit]''': modifies the chance to hit of a weapon, using same standard numerical attributes as '''[attacks]'''&lt;br /&gt;
* '''[damage]''': modifies the damage of a weapon, using same attributes as '''[attacks]''' and '''[chance_to_hit]'''&lt;br /&gt;
* '''[damage_type]''' {{DevFeature1.17|23}}: changes the damage type of a weapon&lt;br /&gt;
* '''[disable]''': disables the weapon&lt;br /&gt;
* '''[drains]''': heals the attacker half of the damage dealt, using same attributes as '''[attacks]''' and '''[chance_to_hit]''', '''value''' is 50% by default&lt;br /&gt;
* '''[firststrike]''': forces the weapon to always strike first&lt;br /&gt;
* '''[heal_on_hit]''': heals the attacker when an attack connects, using same attributes as '''[attacks]''' and '''[chance_to_hit]''', '''value''' is 0 by default&lt;br /&gt;
* '''[petrifies]''': turns the target to stone&lt;br /&gt;
* '''[plague]''': when used to kill an enemy, a friendly unit takes its place&lt;br /&gt;
* '''[poison]''': poisons the target&lt;br /&gt;
* '''[slow]''': slows the target&lt;br /&gt;
* '''[swarm]''': number of strikes decreases as the unit loses hitpoints&lt;br /&gt;
Any other tag is valid, but will result in a special that does nothing but report it is there.&lt;br /&gt;
&lt;br /&gt;
=== Common keys and tags for every weapon special ===&lt;br /&gt;
&lt;br /&gt;
{{DevFeature1.13|?}} All keys inside any weapon special that expects a numeric value will also accept formulas using [[Wesnoth Formula Language]]. In order to use a formula in these keys, you must enclose it in parentheses.&lt;br /&gt;
&lt;br /&gt;
* '''name''': the (translatable) name of the special. If omitted, the special will be hidden from the player.&lt;br /&gt;
* '''name_inactive''': the (translatable) name of the special when inactive. Defaults to ''name'' if not specified; if the special is supposed to be not displayed when inactive, you must explicitly set ''name_inactive'' to an empty string (nothing after the equals sign).&lt;br /&gt;
* '''description''': the (translatable) description of the special.&lt;br /&gt;
* '''description_inactive''': the (translatable) description of the special when inactive. Defaults to ''description'' if not specified.&lt;br /&gt;
* '''special_note''' {{DevFeature1.15|14}} Translatable string, which will be displayed in the unit’s help. See also [[UnitTypeWML#Special_Notes]].&lt;br /&gt;
* '''id''': this ability will not be cumulative with other specials using this id.&lt;br /&gt;
* '''active_on''': one of '''defense''' or '''offense'''; if left out, the special is active on both.&lt;br /&gt;
* '''apply_to''': one of '''self''','''opponent''','''attacker''','''defender''','''both''' (default: ''self''). Determines who the effects of this special are applied to.&lt;br /&gt;
* '''[filter_adjacent]''': if an adjacent unit does not match this filter, the special will not be active and no-one will receive its effects. Takes extra keys ''adjacent'', ''count'', ''is_enemy'', just like in a [[StandardUnitFilter]]. In fact, it's really a shorthand for a [filter_adjacent] nested within [filter_self], with the one difference that, in the absence of a specified ''count'', all listed directions must match (so, with two directiones eg ''adjacent=n,s'', the default is ''count=2''). The variables $this_unit and {{DevFeature1.13|2}} $other_unit both work as you'd expect. Multiple [filter_adjacent] can be provided, all of which must pass for the ability to activate. &lt;br /&gt;
* '''[filter_adjacent_location]''': like [filter_adjacent], but filters on locations instead of units. This is a shorthand for [filter_self][filter_location][filter_adjacent_location].&lt;br /&gt;
* {{anchor|filter_self|'''[filter_self]'''}}: the special will only be active if the owner matches this [[StandardUnitFilter]] (SUF).&lt;br /&gt;
** '''[filter_weapon]''': a [[FilterWML#Filtering_Weapons|standard weapon filter]], including special=.&lt;br /&gt;
** '''$other_unit''': {{DevFeature1.13|2}} The special variable $other_unit refers to the opponent.&lt;br /&gt;
* {{anchor|filter_opponent|'''[filter_opponent]'''}}: the special will only be active if the opponent matches this SUF.&lt;br /&gt;
** '''[filter_weapon]''': a [[FilterWML#Filtering_Weapons|standard weapon filter]], including special=.&lt;br /&gt;
** '''$other_unit''': {{DevFeature1.13|2}} The special variable $other_unit refers to the unit that owns the weapon.&lt;br /&gt;
* {{anchor|filter_attacker|'''[filter_attacker]'''}}: the special will only be active if the attacker matches this SUF.&lt;br /&gt;
** '''[filter_weapon]''': a [[FilterWML#Filtering_Weapons|standard weapon filter]], including special=.&lt;br /&gt;
** '''$other_unit''': {{DevFeature1.13|2}} The special variable $other_unit refers to the defender.&lt;br /&gt;
* {{anchor|filter_defender|'''[filter_defender]'''}} the special will only be active if the defender matches this SUF.&lt;br /&gt;
** '''[filter_weapon]''': a [[FilterWML#Filtering_Weapons|standard weapon filter]], including special=.&lt;br /&gt;
** '''$other_unit''': {{DevFeature1.13|2}} The special variable $other_unit refers to the attacker.&lt;br /&gt;
* '''overwrite_specials''': if equal to 'one_side', then only this unit's specials are evaluated. If equal to 'both_sides', then both this unit's specials and any of the opponent's weapon specials that affect this unit are evaluated. If a special with this attribute is active, it will take precedence over any other specials of the same type that do not have this attribute. Don't applied to boolean weapon special like [poison] ,[slow], [firststrike] or [petrifies].&lt;br /&gt;
* '''[overwrite]''': {{DevFeature1.17|22}} Allows more flexibility in determining which specials should take priority over other specials of the same type.&lt;br /&gt;
** '''priority''': A numeric value to use when determining which special should be used if multiple specials of the same type have the '''overwrite_specials''' attribute. Default is 0.&lt;br /&gt;
** '''[experimental_filter_specials]''': [[StandardAbilityFilter]] Further attributes to filter specials by to determine if it should take priority over other specials. Accepts the same attributes as [experimental_filter_ability].&lt;br /&gt;
&lt;br /&gt;
=== Common keys and tags for specials with a value ===&lt;br /&gt;
&lt;br /&gt;
The '''[damage]''', '''[attacks]''', and '''[chance_to_hit]''' specials take values that specify how those specials modify their respective base values. The '''[drains]''' special takes a value specifying the percentage of damage drained (default 50) and '''[heal_on_hit]''' takes the amount to heal (default 0; negative values will harm the attacker, but not kill). &lt;br /&gt;
&lt;br /&gt;
* '''value''': the value to be used. &lt;br /&gt;
* '''add''': the number to add to the base value. Note the interaction with '''sub''' in [[#Common_calculations]].&lt;br /&gt;
* '''sub''': the number to subtract from the base value.&lt;br /&gt;
* '''multiply''': this multiplies the base value.&lt;br /&gt;
* '''divide''': this divides the base value.&lt;br /&gt;
* '''cumulative''': if set to 'yes', this special will be cumulative with the base value.&lt;br /&gt;
* '''backstab''': if set to 'yes', this special will only apply to the attacker, and only when there is an enemy on the target's opposite side (i.e. when the standard backstab special applies). {{DevFeature1.13|2}} This is now deprecated. The same functionality can be achieved with a [filter_adjacent] in [filter_opponent]; see the implementation of the default backstab special for details.&lt;br /&gt;
* '''[filter_base_value]''': filters on the value before any modifications; uses the keys '''equals''', '''not_equals''', '''less_than''', '''greater_than''', '''less_than_equal_to''', '''greater_than_equal_to'''.&lt;br /&gt;
&lt;br /&gt;
==== Common calculations ====&lt;br /&gt;
&lt;br /&gt;
Several abilities and weapon specials take the keys '''add''', '''sub''', '''multiply''' and '''divide'''.&lt;br /&gt;
&lt;br /&gt;
{{DevFeature1.19|4}} '''add''' and '''sub''' work independently.&lt;br /&gt;
&lt;br /&gt;
Prior to 1.19.4:&lt;br /&gt;
&lt;br /&gt;
* If '''add''' and '''sub''' are used in the same ability, the '''add''' is ignored&lt;br /&gt;
* If '''add''' and '''sub''' are used in separate abilities with the same id, or with the default id that's used when no id is specified, then the order in which the abilities are encountered controls the calculation, which may change depending on units' positions on the map.&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[damage_type]'' special {{DevFeature1.17|23}} ===&lt;br /&gt;
&lt;br /&gt;
* '''replacement_type''': replaces the attack type with the specified type when [damage_type] is active.&lt;br /&gt;
* '''alternative_type''': add a second type of attack to the existing type, it is always the one of the two which will do the most damage to the opponent which will be used.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' In 1.18, alternative_type may be stronger than expected, as the damage calculations sometimes ignore [resistance] abilities. This is a known bug, which occurs deterministically and will be left unfixed in 1.18.x to prevent Out Of Sync errors.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' If a [damage_type] special includes a [filter_weapon]type=, that filter is tested against the base type of the weapon, ignoring all [damage_type] specials.&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[berserk]'' special ===&lt;br /&gt;
&lt;br /&gt;
* '''value''': the maximum number of combat rounds (default 1).&lt;br /&gt;
* '''cumulative''': if set to 'yes', this special will be cumulative with other active berserk specials (on the current combatant, not with an opponent's berserk).&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[plague]'' special ===&lt;br /&gt;
&lt;br /&gt;
* '''type''': the unit type to be spawned on kill.&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[swarm]'' special ===&lt;br /&gt;
&lt;br /&gt;
* '''swarm_attacks_max''': the maximum number of attacks for the swarm. Defaults to the base number of attacks modified by any applicable [attacks] specials. If this is specified, then the base number of attacks is ignored.&lt;br /&gt;
* '''swarm_attacks_min''': the minimum number of attacks for the swarm. Defaults to zero. This can be set higher than swarm_attacks_max to cause a unit to gain attacks as health decreases.&lt;br /&gt;
The ratio of the unit's current to maximum hit points will be used to scale the number of attacks between these two values.&lt;br /&gt;
&lt;br /&gt;
Prior to version 1.11, a [swarm] special will cause [attacks] specials to be ignored. In 1.11 and later, [attacks] specials are applied before [swarm].&lt;br /&gt;
&lt;br /&gt;
=== Macros for common weapon specials ===&lt;br /&gt;
&lt;br /&gt;
* WEAPON_SPECIAL_BACKSTAB&lt;br /&gt;
* WEAPON_SPECIAL_BERSERK&lt;br /&gt;
* WEAPON_SPECIAL_CHARGE&lt;br /&gt;
* WEAPON_SPECIAL_DRAIN&lt;br /&gt;
* WEAPON_SPECIAL_FIRSTSTRIKE&lt;br /&gt;
* WEAPON_SPECIAL_MAGICAL&lt;br /&gt;
* WEAPON_SPECIAL_MARKSMAN&lt;br /&gt;
* WEAPON_SPECIAL_PLAGUE&lt;br /&gt;
* WEAPON_SPECIAL_PLAGUE_TYPE TYPE&lt;br /&gt;
* WEAPON_SPECIAL_POISON&lt;br /&gt;
* WEAPON_SPECIAL_SLOW&lt;br /&gt;
* WEAPON_SPECIAL_STONE&lt;br /&gt;
* WEAPON_SPECIAL_SWARM&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[UnitTypeWML]]&lt;br /&gt;
* [[SingleUnitWML]]&lt;br /&gt;
* [[ReferenceWML]]&lt;br /&gt;
&lt;br /&gt;
[[Category:WML Reference]]&lt;/div&gt;</summary>
		<author><name>Octalot</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=AbilitiesWML&amp;diff=73518</id>
		<title>AbilitiesWML</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=AbilitiesWML&amp;diff=73518"/>
		<updated>2024-08-12T16:54:52Z</updated>

		<summary type="html">&lt;p&gt;Octalot: /* Extra keys used by the [damage_type] special */ Note the special handling of [filter_weapon]type=&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WML Tags}}&lt;br /&gt;
==  Abilities and their effects ==&lt;br /&gt;
&lt;br /&gt;
There are two types of abilities: ones that apply to units (called ''abilities'') and ones that only apply when using a particular attack (called ''specials'' or ''weapon specials'').  A unit may have multiple abilities and an attack can have multiple specials.&lt;br /&gt;
&lt;br /&gt;
Each ability or special defines an effect based on one to three units. Most abilities apply to a single unit, and '''[filter_self]''' can be used to determine when the ability is active. Weapon specials apply to two units, which can be filtered either as &amp;quot;attacker&amp;quot; and &amp;quot;defender&amp;quot; (with the obvious meaning) or as &amp;quot;self&amp;quot; and &amp;quot;other&amp;quot; – the unit that possesses the special, and that unit's opponent. When filtering on the &amp;quot;other&amp;quot; unit, you use '''[filter_second]'''.&lt;br /&gt;
&lt;br /&gt;
Leadership-style abilities are a more complex case, as they involve three units. Like a weapon special, there is an attacker and defender, but there is also a third unit that could be referred to as the &amp;quot;teacher&amp;quot;. The &amp;quot;teacher&amp;quot; is the unit that possesses the ability, so it is referred to as &amp;quot;self&amp;quot; in the ability. A leadership ability works by temporarily granting a weapon special to either the attacker or the defender. The unit that benefits from this is referred to as the &amp;quot;student&amp;quot;, while the unit that does not benefit is simply the &amp;quot;other&amp;quot; unit. When filtering on the &amp;quot;other&amp;quot; unit, you use '''[filter_second]'''.&lt;br /&gt;
&lt;br /&gt;
== The ''[abilities]'' tag ==&lt;br /&gt;
&lt;br /&gt;
The following tags are used to describe an ability in WML:&lt;br /&gt;
&lt;br /&gt;
* '''[heals]''': modifies the hitpoints of a unit at the beginning of the healer's turn&lt;br /&gt;
* '''[regenerate]''': modifies the hitpoints of a unit at the beginning of the unit's turn&lt;br /&gt;
* '''[resistance]''': modifies the resistance of a unit to damage&lt;br /&gt;
* '''[leadership]''': modifies the damage of a unit&lt;br /&gt;
* '''[skirmisher]''': negates enemy zones of control&lt;br /&gt;
* '''[illuminates]''': modifies the time of day adjacent to the affected units&lt;br /&gt;
* '''[teleport]''': allows the unit to teleport&lt;br /&gt;
* '''[hides]''': renders the unit invisible to enemies&lt;br /&gt;
* {{DevFeature1.15|0}} All [[#The_.5Bspecials.5D_tag|weapon specials]] except for '''[plague]''', '''[heal_on_hit]''', and '''[swarm]''' can be placed in the '''[abilities]''' tag. These &amp;quot;weapon specials as abilities&amp;quot; will give that weapon special to all attacks the unit has if they match a unit filter like '''[filter_self|filter_opponent|filter_attacker|filter_defender|filter_student]''' and an attack filter inside of that unit filter (besides [has_attack]) called '''[filter_weapon]'''.&lt;br /&gt;
* Any other tag is valid (for example '''[dummy]'''), but will result in an ability that does nothing but report it's there. '''Note:''' a dummy ability must have an id for the name and description to display.&lt;br /&gt;
* {{DevFeature1.15|3}} All the engine [[#The_.5Bspecials.5D_tag|weapon specials]] can be placed in the [abilities] tag now.&lt;br /&gt;
&lt;br /&gt;
=== Available formula variables in Abilities and Weapon Specials  ===&lt;br /&gt;
&lt;br /&gt;
{{DevFeature1.15|?}} When using formulas in abilities and weapon specials, the following formula variables are available:&lt;br /&gt;
* '''self''': (unit) the unit that has the ability&lt;br /&gt;
* '''student''': (unit) for leadership-like abilities this is the unit that is adjacent to the unit that has the ability; if affect_self=yes, this is also unit who has ability.&lt;br /&gt;
* '''attacker''': (unit) for attack-related abilities and weapon specials, this is the attacking unit during the attack.&lt;br /&gt;
* '''defender''': (unit) for attack-related abilities and weapon specials, this is the defending unit during the attack.&lt;br /&gt;
* '''other''': (unit) the unit whose stats get modified from the ability. For abilities without 'apply_to=opponent' this is always the same as 'student'.&lt;br /&gt;
&lt;br /&gt;
=== Common keys and tags for every ability ===&lt;br /&gt;
&lt;br /&gt;
{{DevFeature1.13|?}} All keys inside any ability that expects a numeric value will also accept formulas using &lt;br /&gt;
[[Wesnoth Formula Language]]. In order to use a formula in these keys, you must enclose it in parentheses. However, do not precede those parentheses with a dollar sign like &amp;lt;code&amp;gt;$(...)&amp;lt;/code&amp;gt;, since that will erase the &amp;lt;tt&amp;gt;self&amp;lt;/tt&amp;gt; variable.&lt;br /&gt;
&lt;br /&gt;
* '''name''': the (translatable) name of the ability. If omitted, the ability will be a hidden ability.&lt;br /&gt;
* '''female_name''': the (translatable) name of the ability when possessed by a female unit. Defaults to ''name'' if not specified.&lt;br /&gt;
* '''name_inactive''': the (translatable) name of the ability when inactive. Defaults to ''name'' if not specified; if the ability is supposed to be not displayed when inactive, you must explicitly set ''name_inactive'' to an empty string (nothing after the equals sign).&lt;br /&gt;
* '''female_name_inactive''': the (translatable) name of the ability when inactive and possessed by a female unit. Defaults to ''name_inactive'' if not specified. You should thus set ''female_name'' as well!&lt;br /&gt;
* '''description''': the (translatable) description of the ability.&lt;br /&gt;
* '''description_inactive''': the (translatable) description of the ability when inactive. Defaults to ''description'' if not specified.&lt;br /&gt;
* '''special_note''' {{DevFeature1.15|14}} Translatable string, which will be displayed in the unit’s help. See also [[UnitTypeWML#Special_Notes]].&lt;br /&gt;
* '''affect_self''': if equal to 'yes' (default), the ability will affect the unit that has it.&lt;br /&gt;
* '''affect_allies''': if equal to 'yes', the ability will affect units from the same and allied sides in the specified adjacent hexes. If set to 'no' it will not affect own or allied sides. If not set (default) it will affect units on the same side but not from allied sides.&lt;br /&gt;
* '''affect_enemies''': if equal to 'yes' (default is 'no'), the ability will affect enemies in the specified adjacent hexes.&lt;br /&gt;
* '''cumulative''': if set to 'yes', this ability will be cumulative with the base value for this ability. ''Beware of the bug with cumulative leadership in 1.16 https://github.com/wesnoth/wesnoth/issues/6466 , more info see below, in &amp;quot;Extra keys used by the ''leadership'' ability&amp;quot; section''. {{DevFeature1.17|5}}, bug fixed.&lt;br /&gt;
* '''id''': this ability will not be cumulative with other abilities using this id. Must be present if cumulative is anything other than 'yes'.&lt;br /&gt;
* '''halo_image''': {{DevFeature1.17|22}} if used, the halo specified showed on unit affected by ability.&lt;br /&gt;
* '''overlay_image''': {{DevFeature1.17|22}} if used, the overlay specified showed on unit affected by ability.&lt;br /&gt;
* '''halo_image_self''': {{DevFeature1.17|22}} if used, the halo specified showed on unit who has ability when active.&lt;br /&gt;
* '''overlay_image_self''': {{DevFeature1.17|22}} if used, the overlay specified showed on unit who has ability when active.&lt;br /&gt;
* '''[filter]''': [[StandardUnitFilter]] If the unit owning the ability does not match this filter, the ability will be inactive.&lt;br /&gt;
* {{anchor|affect_adjacent|'''[affect_adjacent]'''}}: an adjacent unit that does not match this filter will not receive its effects. There can be multiple [affect_adjacent] tags in a single ability; a unit needs to match any one of these to receive the effects. The side requirement of matching units is defined by the '''affect_allies''' and '''affect_enemies''' keys. If there are no [affect_adjacent] tags, then no adjacent units will receive the effects.&lt;br /&gt;
** '''adjacent''': a comma separated list of any combination of these directions: '''n''','''ne''','''se''','''s''','''sw''','''nw'''. (See [[StandardLocationFilter#Directions|notes]])&lt;br /&gt;
** '''[filter]''': a [[StandardUnitFilter]]. {{DevFeature1.13|2}} The variable $other_unit refers to the unit owning the ability.&lt;br /&gt;
* '''[filter_self]''': if the owner of the ability does not match this filter, it will not receive the effects of the ability. [filter_self] takes a [[StandardUnitFilter]] as argument.&lt;br /&gt;
* '''[filter_adjacent]''': if an adjacent unit does not match this filter, the ability will not be active and no-one will receive its affects. Takes extra keys ''adjacent'', ''count'', ''is_enemy'', just like in a [[StandardUnitFilter]], with the one difference that, in the absence of a specified ''count'', all listed directions must match (so, with two directiones eg ''adjacent=n,s'', the default is ''count=2''). In fact, it's really a shorthand for a [filter_adjacent] nested within [filter]. The variables $this_unit and {{DevFeature1.13|2}} $other_unit both work as you'd expect. Multiple [filter_adjacent] can be provided, all of which must pass for the ability to activate.&lt;br /&gt;
* '''[filter_adjacent_location]''': like [filter_adjacent], but filters on locations instead of units. This is a shorthand for [filter][filter_location][filter_adjacent_location].&lt;br /&gt;
* {{anchor|filter_base_value|'''[filter_base_value]'''}}: filters on the value before any modifications; uses the keys '''equals''', '''not_equals''', etc. If several keys are used all have to match.&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[heals]'' ability ===&lt;br /&gt;
&lt;br /&gt;
* '''value''': the amount healed.&lt;br /&gt;
* '''poison''': can be one of ''slowed'',''cured''. ''slowed'' means poison will not take effect for adjacent units (it's not related to the weapon special &amp;quot;slows&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[regenerate]'' ability ===&lt;br /&gt;
&lt;br /&gt;
* '''value''': the amount healed.&lt;br /&gt;
* '''poison''': can be one of ''slowed'',''cured''.&lt;br /&gt;
&lt;br /&gt;
=== Extra keys and tags used by the ''[resistance]'' ability ===&lt;br /&gt;
&lt;br /&gt;
* '''value''': set resistance to this value.&lt;br /&gt;
* '''max_value''': maximum resistance value. Default: 0%. {{DevFeature1.17|24}} Default: no limit.&lt;br /&gt;
* '''min_value''': {{DevFeature1.19|0}} minimum resistance value. Default: no limit.&lt;br /&gt;
* '''add''': adds to resistance. Is ignored when '''sub''' is present.&lt;br /&gt;
* '''sub''': subtracts from resistance.&lt;br /&gt;
* '''multiply''': multiplies resistance value. &lt;br /&gt;
* '''divide''': divides resistance value.&lt;br /&gt;
* '''apply_to''': a list of damage types; if left out, the ability applies to all types.&lt;br /&gt;
* '''active_on''': one of 'defense' or 'offense'; if left out, the ability is active on both.&lt;br /&gt;
These keys affect the actual resistance (e.g. -20%), not the damage modifier normally used in [resistance] (e.g. 120).&lt;br /&gt;
* '''[filter_weapon]''': {{DevFeature1.15|0}} If present, the resistance ability only takes effect when the owner of the ability uses a matching weapon.&lt;br /&gt;
* '''[filter_second_weapon]''': {{DevFeature1.15|0}} If present, the resistance ability only takes effect when the opponent uses a matching weapon.&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[leadership]'' ability ===&lt;br /&gt;
&lt;br /&gt;
* '''value''': the percentage bonus to damage.&lt;br /&gt;
* '''add''': the cumulative percentage bonus to damage. Is ignored when '''sub''' is present.&lt;br /&gt;
* '''sub''': the cumulative percentage bonus subtracted to damage.&lt;br /&gt;
* '''multiply''': multiplies resistance value. &lt;br /&gt;
* '''divide''': divides resistance value.&lt;br /&gt;
''Note:'' cumulative leadership with '''cumulative=yes''' and '''value=''' doesn't work in 1.16 (but fixed in 1.17.12 and later). To work around use '''add=''' or '''sub=''' key (it doesn't require cumulative) (https://github.com/wesnoth/wesnoth/issues/6466 ). If you want each instance of a ''[leadership]'' with the same id to be added you will be able to reuse '''cumulative=yes''' in 1.17.12 and later, otherwise, if you want to add the value of another ''[leadership]'' only once even with the same id in several copies, use '''add'''.&lt;br /&gt;
* '''[filter_weapon]''': {{DevFeature1.15|0}} If present, the leadership ability only takes effect when the owner of the ability uses a matching weapon.&lt;br /&gt;
* '''[filter_second_weapon]''': {{DevFeature1.15|0}} If present, the leadership ability only takes effect when the opponent uses a matching weapon.&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[illuminates]'' ability ===&lt;br /&gt;
&lt;br /&gt;
Because this ability changes the terrain instead of units on it, affect_self, affect_allies, affect_enemies and [filter_adjacent] have no effect.&lt;br /&gt;
* '''value''': the percentage bonus to lawful units. Units with '''alignment=lawful''' do +''value'' % damage when under the influence of a unit with this ability. Units with '''alignment=chaotic''' do -''value'' % damage. Units with '''alignment=neutral''' are unaffected by this ability. Units with '''alignment=liminal''' do -(abs(''value'')) % damage. ''value'' can be a negative number; this is useful if you want to give Chaotic units an advantage instead of Lawful ones. &lt;br /&gt;
* '''add''': the cumulative percentage bonus to damage. Is ignored when '''sub''' is present.&lt;br /&gt;
* '''sub''': the cumulative percentage bonus subtracted to damage.&lt;br /&gt;
* '''multiply''': multiplies resistance value. &lt;br /&gt;
* '''divide''': divides resistance value.&lt;br /&gt;
* '''max_value''': the maximum percentage bonus given. Cannot be less than 0. Defaults to 0 if not present.&lt;br /&gt;
* '''min_value''': the minimum percentage bonus given. Cannot be greater than 0. Defaults to 0 if not present.&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[hides]'' ability ===&lt;br /&gt;
&lt;br /&gt;
* '''alert''': the displayed text when the unit is discovered. Default &amp;quot;Ambushed!&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Extra tags used by the ''[teleport]'' ability ===&lt;br /&gt;
&lt;br /&gt;
* '''[tunnel]''' - a [[DirectActionsWML#.5Btunnel.5D|tunnel tag]] (without the remove key) defining the tunneling source and target hexes, and maybe other conditions. (It automatically applies only to the unit with the ability.)  You may use $teleport_unit inside the [tunnel][source] and [tunnel][target] tag for filtering purposes.&lt;br /&gt;
&lt;br /&gt;
=== Extra tags and keys used by weapon special abilities ===&lt;br /&gt;
&lt;br /&gt;
* {{anchor|filter_student|'''[filter_student]'''}}: {{DevFeature1.15|0}} If present, only the unit matching this filter, either the possessor of the ability if affect_self=yes, or an adjacent unit matching '''[filter_adjacent]''' will be affected. Work like '''[filter_self]'''  of specific weapon special.&lt;br /&gt;
* '''overwrite_specials''': {{DevFeature1.15|13}} If present, allows a special abilities weapon with a numerical value to impose its value and ignore values of abilities or specials of the same type. If '''overwrite_specials=one_side''', the specials and abilities used by the opponent of the unit affected by the ability with this key and applied to it will not be affected. If '''overwrite_specials=both_sides''', all non-key-carrying abilities and all specials of the same type affecting the recipient unit will be affected, even if used by the opponent (used in the macro FORCE_CHANCE_TO_HIT).&lt;br /&gt;
* {{anchor|overwrite|'''[overwrite]'''}}: {{DevFeature1.17|22}} Part of '''overwrite_specials'''. Allows more flexibility in determining which specials should take priority over other specials of the same type.&lt;br /&gt;
** '''priority''': A numeric value to use when determining which special should be used if multiple specials of the same type have the '''overwrite_specials''' attribute. Default is 0.&lt;br /&gt;
** {{anchor|filter_specials|'''[experimental_filter_specials]'''}}: [[StandardAbilityFilter]] Further attributes to filter specials by to determine if it should take priority over other specials. Accepts the same attributes as [experimental_filter_ability].&lt;br /&gt;
* Other keys and tags appropriate to the specific weapon special.&lt;br /&gt;
&lt;br /&gt;
=== Macros for common abilities ===&lt;br /&gt;
&lt;br /&gt;
[https://www.wesnoth.org/macro-reference.html#file:abilities.cfg macro reference]&lt;br /&gt;
* ABILITY_AMBUSH&lt;br /&gt;
* ABILITY_CURES&lt;br /&gt;
* ABILITY_HEALS&lt;br /&gt;
* ABILITY_ILLUMINATES&lt;br /&gt;
* ABILITY_LEADERSHIP_LEVEL_1 to ABILITY_LEADERSHIP_LEVEL_5&lt;br /&gt;
* {{DevFeature1.13|2}} ABILITY_LEADERSHIP (replaces the above leadership macros, which are now deprecated)&lt;br /&gt;
* ABILITY_NIGHTSTALK&lt;br /&gt;
* ABILITY_REGENERATES&lt;br /&gt;
* ABILITY_SKIRMISHER&lt;br /&gt;
* ABILITY_STEADFAST&lt;br /&gt;
* ABILITY_SUBMERGE&lt;br /&gt;
* ABILITY_TELEPORT&lt;br /&gt;
&lt;br /&gt;
== The ''[specials]'' tag ==&lt;br /&gt;
&lt;br /&gt;
The '''[specials]''' tag goes inside the '''[attack]''' tag. It can contain the following tags:&lt;br /&gt;
&lt;br /&gt;
* '''[attacks]''': modifies the number of attacks of a weapon, in using '''value''', '''add''', '''sub''', '''multiply''' or '''divide''' attributes&lt;br /&gt;
* '''[berserk]''': pushes the attack for more than one combat round, using '''value''' attribute, '''value''' is 1 by default&lt;br /&gt;
* '''[chance_to_hit]''': modifies the chance to hit of a weapon, using same standard numerical attributes what '''[attacks]'''&lt;br /&gt;
* '''[damage]''': modifies the damage of a weapon, using same attributes what '''[attacks]''' and '''[chance_to_hit]'''&lt;br /&gt;
* '''[damage_type]''' {{DevFeature1.17|23}}: changes the damage type of a weapon&lt;br /&gt;
* '''[disable]''': disables the weapon&lt;br /&gt;
* '''[drains]''': heals the attacker half of the damage dealt, using same attributes what '''[attacks]''' and '''[chance_to_hit]''', '''value''' is 50 by default&lt;br /&gt;
* '''[firststrike]''': forces the weapon to always strike first&lt;br /&gt;
* '''[heal_on_hit]''': heals the attacker when an attack connects, using same attributes what '''[attacks]''' and '''[chance_to_hit]''', '''value''' is 0 by default&lt;br /&gt;
* '''[petrifies]''': turns the target to stone&lt;br /&gt;
* '''[plague]''': when used to kill an enemy, a friendly unit takes its place&lt;br /&gt;
* '''[poison]''': poisons the target&lt;br /&gt;
* '''[slow]''': slows the target&lt;br /&gt;
* '''[swarm]''': number of strikes decreases as the unit loses hitpoints&lt;br /&gt;
Any other tag is valid, but will result in a special that does nothing but report it is there.&lt;br /&gt;
&lt;br /&gt;
=== Common keys and tags for every weapon special ===&lt;br /&gt;
&lt;br /&gt;
{{DevFeature1.13|?}} All keys inside any weapon special that expects a numeric value will also accept formulas using [[Wesnoth Formula Language]]. In order to use a formula in these keys, you must enclose it in parentheses.&lt;br /&gt;
&lt;br /&gt;
* '''name''': the (translatable) name of the special. If omitted, the special will be hidden from the player.&lt;br /&gt;
* '''name_inactive''': the (translatable) name of the special when inactive. Defaults to ''name'' if not specified; if the special is supposed to be not displayed when inactive, you must explicitly set ''name_inactive'' to an empty string (nothing after the equals sign).&lt;br /&gt;
* '''description''': the (translatable) description of the special.&lt;br /&gt;
* '''description_inactive''': the (translatable) description of the special when inactive. Defaults to ''description'' if not specified.&lt;br /&gt;
* '''special_note''' {{DevFeature1.15|14}} Translatable string, which will be displayed in the unit’s help. See also [[UnitTypeWML#Special_Notes]].&lt;br /&gt;
* '''id''': this ability will not be cumulative with other specials using this id.&lt;br /&gt;
* '''active_on''': one of '''defense''' or '''offense'''; if left out, the special is active on both.&lt;br /&gt;
* '''apply_to''': one of '''self''','''opponent''','''attacker''','''defender''','''both''' (default: ''self''). Determines who the effects of this special are applied to.&lt;br /&gt;
* '''[filter_adjacent]''': if an adjacent unit does not match this filter, the special will not be active and no-one will receive its effects. Takes extra keys ''adjacent'', ''count'', ''is_enemy'', just like in a [[StandardUnitFilter]]. In fact, it's really a shorthand for a [filter_adjacent] nested within [filter_self], with the one difference that, in the absence of a specified ''count'', all listed directions must match (so, with two directiones eg ''adjacent=n,s'', the default is ''count=2''). The variables $this_unit and {{DevFeature1.13|2}} $other_unit both work as you'd expect. Multiple [filter_adjacent] can be provided, all of which must pass for the ability to activate. &lt;br /&gt;
* '''[filter_adjacent_location]''': like [filter_adjacent], but filters on locations instead of units. This is a shorthand for [filter_self][filter_location][filter_adjacent_location].&lt;br /&gt;
* {{anchor|filter_self|'''[filter_self]'''}}: the special will only be active if the owner matches this [[StandardUnitFilter]] (SUF).&lt;br /&gt;
** '''[filter_weapon]''': a [[FilterWML#Filtering_Weapons|standard weapon filter]], including special=.&lt;br /&gt;
** '''$other_unit''': {{DevFeature1.13|2}} The special variable $other_unit refers to the opponent.&lt;br /&gt;
* {{anchor|filter_opponent|'''[filter_opponent]'''}}: the special will only be active if the opponent matches this SUF.&lt;br /&gt;
** '''[filter_weapon]''': a [[FilterWML#Filtering_Weapons|standard weapon filter]], including special=.&lt;br /&gt;
** '''$other_unit''': {{DevFeature1.13|2}} The special variable $other_unit refers to the unit that owns the weapon.&lt;br /&gt;
* {{anchor|filter_attacker|'''[filter_attacker]'''}}: the special will only be active if the attacker matches this SUF.&lt;br /&gt;
** '''[filter_weapon]''': a [[FilterWML#Filtering_Weapons|standard weapon filter]], including special=.&lt;br /&gt;
** '''$other_unit''': {{DevFeature1.13|2}} The special variable $other_unit refers to the defender.&lt;br /&gt;
* {{anchor|filter_defender|'''[filter_defender]'''}} the special will only be active if the defender matches this SUF.&lt;br /&gt;
** '''[filter_weapon]''': a [[FilterWML#Filtering_Weapons|standard weapon filter]], including special=.&lt;br /&gt;
** '''$other_unit''': {{DevFeature1.13|2}} The special variable $other_unit refers to the attacker.&lt;br /&gt;
* '''overwrite_specials''': if equal to 'one_side', then only this unit's specials are evaluated. If equal to 'both_sides', then both this unit's specials and any of the opponent's weapon specials that affect this unit are evaluated. If a special with this attribute is active, it will take precedence over any other specials of the same type that do not have this attribute. Don't applied to boolean weapon special like [poison] ,[slow], [firststrike] or [petrifies].&lt;br /&gt;
* '''[overwrite]''': {{DevFeature1.17|22}} Allows more flexibility in determining which specials should take priority over other specials of the same type.&lt;br /&gt;
** '''priority''': A numeric value to use when determining which special should be used if multiple specials of the same type have the '''overwrite_specials''' attribute. Default is 0.&lt;br /&gt;
** '''[experimental_filter_specials]''': [[StandardAbilityFilter]] Further attributes to filter specials by to determine if it should take priority over other specials. Accepts the same attributes as [experimental_filter_ability].&lt;br /&gt;
&lt;br /&gt;
=== Common keys and tags for specials with a value ===&lt;br /&gt;
&lt;br /&gt;
The '''[damage]''', '''[attacks]''', and '''[chance_to_hit]''' specials take values that specify how those specials modify their respective base values. The '''[drains]''' special takes a value specifying the percentage of damage drained (default 50) and '''[heal_on_hit]''' takes the amount to heal (default 0; negative values will harm the attacker, but not kill). &lt;br /&gt;
&lt;br /&gt;
* '''value''': the value to be used. &lt;br /&gt;
* '''add''': the number to add to the base value. Is ignored when '''sub''' is present.&lt;br /&gt;
* '''sub''': the number to subtract from the base value.&lt;br /&gt;
* '''multiply''': this multiplies the base value.&lt;br /&gt;
* '''divide''': this divides the base value.&lt;br /&gt;
* '''cumulative''': if set to 'yes', this special will be cumulative with the base value.&lt;br /&gt;
* '''backstab''': if set to 'yes', this special will only apply to the attacker, and only when there is an enemy on the target's opposite side (i.e. when the standard backstab special applies). {{DevFeature1.13|2}} This is now deprecated. The same functionality can be achieved with a [filter_adjacent] in [filter_opponent]; see the implementation of the default backstab special for details.&lt;br /&gt;
* '''[filter_base_value]''': filters on the value before any modifications; uses the keys '''equals''', '''not_equals''', '''less_than''', '''greater_than''', '''less_than_equal_to''', '''greater_than_equal_to'''.&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[damage_type]'' special {{DevFeature1.17|23}} ===&lt;br /&gt;
&lt;br /&gt;
* '''replacement_type''': replaces the attack type with the specified type when [damage_type] is active.&lt;br /&gt;
* '''alternative_type''': add a second type of attack to the existing type, it is always the one of the two which will do the most damage to the opponent which will be used.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' In 1.18, alternative_type may be stronger than expected, as the damage calculations sometimes ignore [resistance] abilities. This is a known bug, which occurs deterministically and will be left unfixed in 1.18.x to prevent Out Of Sync errors.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' If a [damage_type] special includes a [filter_weapon]type=, that filter is tested against the base type of the weapon, ignoring all [damage_type] specials.&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[berserk]'' special ===&lt;br /&gt;
&lt;br /&gt;
* '''value''': the maximum number of combat rounds (default 1).&lt;br /&gt;
* '''cumulative''': if set to 'yes', this special will be cumulative with other active berserk specials (on the current combatant, not with an opponent's berserk).&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[plague]'' special ===&lt;br /&gt;
&lt;br /&gt;
* '''type''': the unit type to be spawned on kill.&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[swarm]'' special ===&lt;br /&gt;
&lt;br /&gt;
* '''swarm_attacks_max''': the maximum number of attacks for the swarm. Defaults to the base number of attacks modified by any applicable [attacks] specials. If this is specified, then the base number of attacks is ignored.&lt;br /&gt;
* '''swarm_attacks_min''': the minimum number of attacks for the swarm. Defaults to zero. This can be set higher than swarm_attacks_max to cause a unit to gain attacks as health decreases.&lt;br /&gt;
The ratio of the unit's current to maximum hit points will be used to scale the number of attacks between these two values.&lt;br /&gt;
&lt;br /&gt;
Prior to version 1.11, a [swarm] special will cause [attacks] specials to be ignored. In 1.11 and later, [attacks] specials are applied before [swarm].&lt;br /&gt;
&lt;br /&gt;
=== Macros for common weapon specials ===&lt;br /&gt;
&lt;br /&gt;
* WEAPON_SPECIAL_BACKSTAB&lt;br /&gt;
* WEAPON_SPECIAL_BERSERK&lt;br /&gt;
* WEAPON_SPECIAL_CHARGE&lt;br /&gt;
* WEAPON_SPECIAL_DRAIN&lt;br /&gt;
* WEAPON_SPECIAL_FIRSTSTRIKE&lt;br /&gt;
* WEAPON_SPECIAL_MAGICAL&lt;br /&gt;
* WEAPON_SPECIAL_MARKSMAN&lt;br /&gt;
* WEAPON_SPECIAL_PLAGUE&lt;br /&gt;
* WEAPON_SPECIAL_PLAGUE_TYPE TYPE&lt;br /&gt;
* WEAPON_SPECIAL_POISON&lt;br /&gt;
* WEAPON_SPECIAL_SLOW&lt;br /&gt;
* WEAPON_SPECIAL_STONE&lt;br /&gt;
* WEAPON_SPECIAL_SWARM&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[UnitTypeWML]]&lt;br /&gt;
* [[SingleUnitWML]]&lt;br /&gt;
* [[ReferenceWML]]&lt;br /&gt;
&lt;br /&gt;
[[Category:WML Reference]]&lt;/div&gt;</summary>
		<author><name>Octalot</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=1.19_Roadmap&amp;diff=73194</id>
		<title>1.19 Roadmap</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=1.19_Roadmap&amp;diff=73194"/>
		<updated>2024-06-30T09:49:43Z</updated>

		<summary type="html">&lt;p&gt;Octalot: /* 1.19.8 (01/19/2025) */ Check for unused translatables&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for consolidating and planning when new features and fixes are intended to land in the 1.19 development branch. The release schedule for Development releases can be found [https://forums.wesnoth.org/viewtopic.php?f=2&amp;amp;t=52785 here (link is to the 1.17 page, might change for 1.19)].&lt;br /&gt;
&lt;br /&gt;
== Instructions ==&lt;br /&gt;
Place the feature or fix you intend to implement within the section of the point release that you intend to have it implemented by, as well as your forum username in parenthesis after the feature description. The point release something is planned to be released with is not set in stone, and can be updated as needed depending on the circumstances.&lt;br /&gt;
&lt;br /&gt;
This is just an outline currently, with some point releases for the early, middle and late parts of the branch.&lt;br /&gt;
&lt;br /&gt;
== Note on Single-Player Campaign Reworks ==&lt;br /&gt;
&lt;br /&gt;
We have some campaign reworks planned and in-progress.&lt;br /&gt;
&lt;br /&gt;
In-progress: The South Guard, The Deceiver's Gambit (DM replacement), The Rise of Wesnoth&lt;br /&gt;
In-progress but slower development: Legend of Wesmere (reworked to SP entirely), Heir to the Throne (grand overhaul)&lt;br /&gt;
Planned but no progress yet: Angel of Ashes (AoA) (Ashievere-centric campaign)&lt;br /&gt;
&lt;br /&gt;
The first three (TSG, TDG and TRoW) might have higher chances of getting into 1.19.x cycle before any of the others.&lt;br /&gt;
The other three might be going into 1.21.x so have been mentioned here just to prepare for an unprecedented development allowances (more assistance in coding, accelerated development speed, etc).&lt;br /&gt;
&lt;br /&gt;
If you have inquiries on the reworks, contact SP rework team leaders (forums/discord): Nemaara/Yumi (TSG, TRoW, AoA), Dalas (TDG, HttT), Lord-Knightmare (LoW-rework).&lt;br /&gt;
&lt;br /&gt;
== 1.19.0 (05/26/2024) ==&lt;br /&gt;
* Move the Dunefolk into Default Era (Pentarctagon) - completed in #8688&lt;br /&gt;
&lt;br /&gt;
== 1.19.1 (06/16/2024) ==&lt;br /&gt;
* [https://github.com/wesnoth/wesnoth/pull/6826 #6826] Merge hardware accelerated unit submerge effect, if possible (Pentarctagon)&lt;br /&gt;
** Completed in [https://github.com/wesnoth/wesnoth/pull/8687 #8687].&lt;br /&gt;
&lt;br /&gt;
== 1.19.2 (07/21/2024) ==&lt;br /&gt;
* Finish adding ability/weapon special unit tests (Pentarctagon)&lt;br /&gt;
* Release tentative TSG re-revision add-on, building on Yumi's work (Dalas)&lt;br /&gt;
** Depending on reception, additional development may be needed, or the rework may be dropped altogether.&lt;br /&gt;
** If all goes well, some months from now I'll need to convert this from add-on to mainline so translators can begin work.&lt;br /&gt;
&lt;br /&gt;
== 1.19.3 (08/18/2024) ==&lt;br /&gt;
* Investigate replacing mariadbpp with Boost.MySql (Pentarctagon)&lt;br /&gt;
&lt;br /&gt;
== 1.19.4 (09/15/2024) ==&lt;br /&gt;
* Unified recruit/recall dialog (LumiousE)&lt;br /&gt;
* Release final (hopefully) TDG add-on. Collect feedback and fix bugs (Dalas)&lt;br /&gt;
** If all goes well, some months from now I'll need to convert this from add-on to mainline so translators can begin work.&lt;br /&gt;
&lt;br /&gt;
== 1.19.5 (10/20/2024) ==&lt;br /&gt;
* [https://github.com/wesnoth/wesnoth/pull/6512 #6512] New type of deprecation warning, when a deprecated attribute is used alongside its replacement (octalot)&lt;br /&gt;
* [https://github.com/wesnoth/wesnoth/pull/7082 #7082] Get wmllint running against mainline during CI with no errors (Pentarctagon)&lt;br /&gt;
&lt;br /&gt;
== 1.19.6 (11/17/2024) ==&lt;br /&gt;
&lt;br /&gt;
== 1.19.7 (12/15/2024) ==&lt;br /&gt;
&lt;br /&gt;
* GUI2 port of the Help Browser (tentative) (LumiousE)&lt;br /&gt;
&lt;br /&gt;
== 1.19.8 (01/19/2025) ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/wesnoth/wesnoth/issues/8585 #8585], [https://github.com/wesnoth/wesnoth/issues/9035 #9035] Solve all issues with [damage_type] (octalot)&lt;br /&gt;
* Go through all the added translatable strings, and check that they're used. For example, look for campaign-specific abilities which aren't used in the campaign. This is on the roadmap twice, I'm planning to do it annually. (octalot, but open to volunteers)&lt;br /&gt;
&lt;br /&gt;
== 1.19.9 (02/16/2025) ==&lt;br /&gt;
* Release first half of HttT revision and gather feedback, fix bugs, etc (Dalas)&lt;br /&gt;
** This is a VERY rough release date. Probably +/- 2 months.&lt;br /&gt;
&lt;br /&gt;
== 1.19.10 (03/16/2025) ==&lt;br /&gt;
* [https://github.com/wesnoth/wesnoth/issues/5041 #5041] Draw text on images in [[IntroWML]], useable for place-name labels on the journey-tracker maps (octalot)&lt;br /&gt;
* Add &amp;quot;pseudo-queues&amp;quot; as a built-in feature for the multiplayer lobby (pentarctagon)&lt;br /&gt;
&lt;br /&gt;
== 1.19.11 (04/20/2025) ==&lt;br /&gt;
&lt;br /&gt;
== 1.19.12 (05/18/2025) ==&lt;br /&gt;
* Improve UtBS. (Hejnewar) This includes:&lt;br /&gt;
** Removal and replacement of some abilities, mainly hero ones.&lt;br /&gt;
** Better accomodation of high level units to the new recall system. &lt;br /&gt;
** Difficulty of Nightmare+.&lt;br /&gt;
** Changes to some maps and scenarios, mainly in order to make them more fluid. &lt;br /&gt;
* Mercenaries SP/MP campaign (still didn't give up) (Hejnewar) This includes:&lt;br /&gt;
** New pixelart terrains and backgrounds (particularily tough for someone without pixelart skills).&lt;br /&gt;
* Balance (Hejnewar)&lt;br /&gt;
* New MP maps and scenarios. (Hejnewar) This includes:&lt;br /&gt;
** New short survival.&lt;br /&gt;
** Recovery of long lost mapmaking art.&lt;br /&gt;
** New PvP and PvPvE maps, including experimental scenarios with events.&lt;br /&gt;
&lt;br /&gt;
== 1.19.13 (06/15/2025) ==&lt;br /&gt;
&lt;br /&gt;
== 1.19.14 (07/20/2025) ==&lt;br /&gt;
&lt;br /&gt;
== 1.19.15 (08/17/2025) ==&lt;br /&gt;
* Play through any remaining mainline campaigns worth playing through (ie: not LoW) and add at least a minimum baseline of achievements to them (Pentarctagon)&lt;br /&gt;
&lt;br /&gt;
== 1.19.16 (09/21/2025) ==&lt;br /&gt;
&lt;br /&gt;
== 1.19.17 (10/19/2025) ==&lt;br /&gt;
* Release second half of HttT revision and gather feedback, fix bugs, etc (Dalas)&lt;br /&gt;
** This is a VERY rough release date. Probably +/- 3 months.&lt;br /&gt;
** If all goes well, some months from now I'll need to convert this from add-on to mainline so translators can begin work.&lt;br /&gt;
&lt;br /&gt;
== 1.19.18 (11/16/2025) ==&lt;br /&gt;
&lt;br /&gt;
== 1.19.19 (12/21/2025) ==&lt;br /&gt;
&lt;br /&gt;
== 1.19.20 (01/18/2026) ==&lt;br /&gt;
* Go through all the added translatable strings, and check that they're used. For example, look for campaign-specific abilities which aren't used in the campaign. (octalot, but open to volunteers)&lt;br /&gt;
* Take a serious look at supporting a competitive mode/ELO ranking natively (pentarctagon)&lt;br /&gt;
&lt;br /&gt;
== 1.19.21 (Beta 1) (02/15/2026) ==&lt;br /&gt;
'''This marks the beginning of the feature freeze and string freeze for 1.19;''' the only API changes made past this point must be to fix bugs.&lt;br /&gt;
&lt;br /&gt;
== 1.19.22 (Beta 2) (03/15/2026) ==&lt;br /&gt;
&lt;br /&gt;
== 1.19.23 (Beta 3) (04/19/2026) ==&lt;br /&gt;
&lt;br /&gt;
== 1.19.24 (RC1) (05/17/2026) ==&lt;br /&gt;
'''This marks the beginning of the API freeze;''' no API changes for for any reason can be made at this point. Additional RC releases will be done as needed.&lt;br /&gt;
&lt;br /&gt;
* Add new screenshots for 1.20&lt;br /&gt;
&lt;br /&gt;
== 1.20.0 (06/21/2026) ==&lt;br /&gt;
&lt;br /&gt;
[[Category:Roadmaps]]&lt;/div&gt;</summary>
		<author><name>Octalot</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=1.19_Roadmap&amp;diff=73193</id>
		<title>1.19 Roadmap</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=1.19_Roadmap&amp;diff=73193"/>
		<updated>2024-06-30T09:46:27Z</updated>

		<summary type="html">&lt;p&gt;Octalot: /* 1.19.8 (01/19/2025) */ [damage_type]&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for consolidating and planning when new features and fixes are intended to land in the 1.19 development branch. The release schedule for Development releases can be found [https://forums.wesnoth.org/viewtopic.php?f=2&amp;amp;t=52785 here (link is to the 1.17 page, might change for 1.19)].&lt;br /&gt;
&lt;br /&gt;
== Instructions ==&lt;br /&gt;
Place the feature or fix you intend to implement within the section of the point release that you intend to have it implemented by, as well as your forum username in parenthesis after the feature description. The point release something is planned to be released with is not set in stone, and can be updated as needed depending on the circumstances.&lt;br /&gt;
&lt;br /&gt;
This is just an outline currently, with some point releases for the early, middle and late parts of the branch.&lt;br /&gt;
&lt;br /&gt;
== Note on Single-Player Campaign Reworks ==&lt;br /&gt;
&lt;br /&gt;
We have some campaign reworks planned and in-progress.&lt;br /&gt;
&lt;br /&gt;
In-progress: The South Guard, The Deceiver's Gambit (DM replacement), The Rise of Wesnoth&lt;br /&gt;
In-progress but slower development: Legend of Wesmere (reworked to SP entirely), Heir to the Throne (grand overhaul)&lt;br /&gt;
Planned but no progress yet: Angel of Ashes (AoA) (Ashievere-centric campaign)&lt;br /&gt;
&lt;br /&gt;
The first three (TSG, TDG and TRoW) might have higher chances of getting into 1.19.x cycle before any of the others.&lt;br /&gt;
The other three might be going into 1.21.x so have been mentioned here just to prepare for an unprecedented development allowances (more assistance in coding, accelerated development speed, etc).&lt;br /&gt;
&lt;br /&gt;
If you have inquiries on the reworks, contact SP rework team leaders (forums/discord): Nemaara/Yumi (TSG, TRoW, AoA), Dalas (TDG, HttT), Lord-Knightmare (LoW-rework).&lt;br /&gt;
&lt;br /&gt;
== 1.19.0 (05/26/2024) ==&lt;br /&gt;
* Move the Dunefolk into Default Era (Pentarctagon) - completed in #8688&lt;br /&gt;
&lt;br /&gt;
== 1.19.1 (06/16/2024) ==&lt;br /&gt;
* [https://github.com/wesnoth/wesnoth/pull/6826 #6826] Merge hardware accelerated unit submerge effect, if possible (Pentarctagon)&lt;br /&gt;
** Completed in [https://github.com/wesnoth/wesnoth/pull/8687 #8687].&lt;br /&gt;
&lt;br /&gt;
== 1.19.2 (07/21/2024) ==&lt;br /&gt;
* Finish adding ability/weapon special unit tests (Pentarctagon)&lt;br /&gt;
* Release tentative TSG re-revision add-on, building on Yumi's work (Dalas)&lt;br /&gt;
** Depending on reception, additional development may be needed, or the rework may be dropped altogether.&lt;br /&gt;
** If all goes well, some months from now I'll need to convert this from add-on to mainline so translators can begin work.&lt;br /&gt;
&lt;br /&gt;
== 1.19.3 (08/18/2024) ==&lt;br /&gt;
* Investigate replacing mariadbpp with Boost.MySql (Pentarctagon)&lt;br /&gt;
&lt;br /&gt;
== 1.19.4 (09/15/2024) ==&lt;br /&gt;
* Unified recruit/recall dialog (LumiousE)&lt;br /&gt;
* Release final (hopefully) TDG add-on. Collect feedback and fix bugs (Dalas)&lt;br /&gt;
** If all goes well, some months from now I'll need to convert this from add-on to mainline so translators can begin work.&lt;br /&gt;
&lt;br /&gt;
== 1.19.5 (10/20/2024) ==&lt;br /&gt;
* [https://github.com/wesnoth/wesnoth/pull/6512 #6512] New type of deprecation warning, when a deprecated attribute is used alongside its replacement (octalot)&lt;br /&gt;
* [https://github.com/wesnoth/wesnoth/pull/7082 #7082] Get wmllint running against mainline during CI with no errors (Pentarctagon)&lt;br /&gt;
&lt;br /&gt;
== 1.19.6 (11/17/2024) ==&lt;br /&gt;
&lt;br /&gt;
== 1.19.7 (12/15/2024) ==&lt;br /&gt;
&lt;br /&gt;
* GUI2 port of the Help Browser (tentative) (LumiousE)&lt;br /&gt;
&lt;br /&gt;
== 1.19.8 (01/19/2025) ==&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/wesnoth/wesnoth/issues/8585 #8585], [https://github.com/wesnoth/wesnoth/issues/9035 #9035] Solve all issues with [damage_type] (octalot)&lt;br /&gt;
&lt;br /&gt;
== 1.19.9 (02/16/2025) ==&lt;br /&gt;
* Release first half of HttT revision and gather feedback, fix bugs, etc (Dalas)&lt;br /&gt;
** This is a VERY rough release date. Probably +/- 2 months.&lt;br /&gt;
&lt;br /&gt;
== 1.19.10 (03/16/2025) ==&lt;br /&gt;
* [https://github.com/wesnoth/wesnoth/issues/5041 #5041] Draw text on images in [[IntroWML]], useable for place-name labels on the journey-tracker maps (octalot)&lt;br /&gt;
* Add &amp;quot;pseudo-queues&amp;quot; as a built-in feature for the multiplayer lobby (pentarctagon)&lt;br /&gt;
&lt;br /&gt;
== 1.19.11 (04/20/2025) ==&lt;br /&gt;
&lt;br /&gt;
== 1.19.12 (05/18/2025) ==&lt;br /&gt;
* Improve UtBS. (Hejnewar) This includes:&lt;br /&gt;
** Removal and replacement of some abilities, mainly hero ones.&lt;br /&gt;
** Better accomodation of high level units to the new recall system. &lt;br /&gt;
** Difficulty of Nightmare+.&lt;br /&gt;
** Changes to some maps and scenarios, mainly in order to make them more fluid. &lt;br /&gt;
* Mercenaries SP/MP campaign (still didn't give up) (Hejnewar) This includes:&lt;br /&gt;
** New pixelart terrains and backgrounds (particularily tough for someone without pixelart skills).&lt;br /&gt;
* Balance (Hejnewar)&lt;br /&gt;
* New MP maps and scenarios. (Hejnewar) This includes:&lt;br /&gt;
** New short survival.&lt;br /&gt;
** Recovery of long lost mapmaking art.&lt;br /&gt;
** New PvP and PvPvE maps, including experimental scenarios with events.&lt;br /&gt;
&lt;br /&gt;
== 1.19.13 (06/15/2025) ==&lt;br /&gt;
&lt;br /&gt;
== 1.19.14 (07/20/2025) ==&lt;br /&gt;
&lt;br /&gt;
== 1.19.15 (08/17/2025) ==&lt;br /&gt;
* Play through any remaining mainline campaigns worth playing through (ie: not LoW) and add at least a minimum baseline of achievements to them (Pentarctagon)&lt;br /&gt;
&lt;br /&gt;
== 1.19.16 (09/21/2025) ==&lt;br /&gt;
&lt;br /&gt;
== 1.19.17 (10/19/2025) ==&lt;br /&gt;
* Release second half of HttT revision and gather feedback, fix bugs, etc (Dalas)&lt;br /&gt;
** This is a VERY rough release date. Probably +/- 3 months.&lt;br /&gt;
** If all goes well, some months from now I'll need to convert this from add-on to mainline so translators can begin work.&lt;br /&gt;
&lt;br /&gt;
== 1.19.18 (11/16/2025) ==&lt;br /&gt;
&lt;br /&gt;
== 1.19.19 (12/21/2025) ==&lt;br /&gt;
&lt;br /&gt;
== 1.19.20 (01/18/2026) ==&lt;br /&gt;
* Go through all the added translatable strings, and check that they're used. For example, look for campaign-specific abilities which aren't used in the campaign. (octalot, but open to volunteers)&lt;br /&gt;
* Take a serious look at supporting a competitive mode/ELO ranking natively (pentarctagon)&lt;br /&gt;
&lt;br /&gt;
== 1.19.21 (Beta 1) (02/15/2026) ==&lt;br /&gt;
'''This marks the beginning of the feature freeze and string freeze for 1.19;''' the only API changes made past this point must be to fix bugs.&lt;br /&gt;
&lt;br /&gt;
== 1.19.22 (Beta 2) (03/15/2026) ==&lt;br /&gt;
&lt;br /&gt;
== 1.19.23 (Beta 3) (04/19/2026) ==&lt;br /&gt;
&lt;br /&gt;
== 1.19.24 (RC1) (05/17/2026) ==&lt;br /&gt;
'''This marks the beginning of the API freeze;''' no API changes for for any reason can be made at this point. Additional RC releases will be done as needed.&lt;br /&gt;
&lt;br /&gt;
* Add new screenshots for 1.20&lt;br /&gt;
&lt;br /&gt;
== 1.20.0 (06/21/2026) ==&lt;br /&gt;
&lt;br /&gt;
[[Category:Roadmaps]]&lt;/div&gt;</summary>
		<author><name>Octalot</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=CampaignDialogue:TB1.9&amp;diff=73182</id>
		<title>CampaignDialogue:TB1.9</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=CampaignDialogue:TB1.9&amp;diff=73182"/>
		<updated>2024-06-29T16:16:32Z</updated>

		<summary type="html">&lt;p&gt;Octalot: Link to the campaign's .pot file on Github&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;float:right&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
__TOC__&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is a transcription of all dialogue from The Tale of Two Brothers (1.9.5). It is meant as a resource for Wesnoth writers. If you don't want spoilers, leave this page now.&lt;br /&gt;
&lt;br /&gt;
The translation tools automatically create a [https://github.com/wesnoth/wesnoth/blob/master/po/wesnoth-tb/wesnoth-tb.pot transcript of the current version], including all of the dialogue.&lt;br /&gt;
&lt;br /&gt;
=== Possible Timeframe ===&lt;br /&gt;
This campaign, as originally written, had no definite time or place.  There was a vague reference to &amp;quot;the eastern reaches of the kingdom of Wesnoth&amp;quot;.  In a later revision the epilog hint that Arvith may have traveled with the elf-lord Kalenz, but this is not much of a constraint as Kalenz was around in 1YW and at least until the beginning of HttT in 517 YW.&lt;br /&gt;
    &lt;br /&gt;
Maghre has to be within reach of the orcs, but in a time and place where there haven't been orc raids for generations. This limits us to *western* Wesnoth, orc raids having been a chronic problem in the northeast even during the Kingdom's strongest periods. The logical time would be shortly after the death of Haldric IV in 350, the beginning of the First Dark Age.  It's arbitrarily set at 353; Kalenz began his wanderings ten years later, so the timing for Arvith to meet him later in life isn't bad.&lt;br /&gt;
&lt;br /&gt;
Placing the campaign is a little trickier.  Our main textual clue is that there is a dense wood, said by legend to be haunted, a few days' ride north.  Later, the boss's keep is said to be still further north.  Neither of these directions has plot importance, but they do suggest a locale for Maghre - near the Gray Woods.  The battle maps exclude it from being in a featureless plain, though; there are hills to the south and west.&lt;br /&gt;
&lt;br /&gt;
== Death Dialogue ==&lt;br /&gt;
=== Mordak ===&lt;br /&gt;
'''Mordak:''' Argh&lt;br /&gt;
&lt;br /&gt;
=== Arvith ===&lt;br /&gt;
'''Arvith:''' All is lost now that I am dead... (S 1-2)&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' Everything is lost now that I am dead... (S 3-4)&lt;br /&gt;
&lt;br /&gt;
===Baran===&lt;br /&gt;
'''Baran:''' It is over, I am vanquished.&lt;br /&gt;
&lt;br /&gt;
== Scenario 1: Rooting Out A Mage ==&lt;br /&gt;
=== Story ===&lt;br /&gt;
The remote freehold of Maghre in the western reaches of the kingdom of Wesnoth was once a peaceful place, its inhabitants largely unaware of the comings and goings of the wider world. Wars and the rumor of wars touched them not, until the day a dark mage settled in the region and began seeking sacrifices for his evil summonings.&lt;br /&gt;
&lt;br /&gt;
Skeletons and zombies killed cattle and fired fields. &amp;lt;i&amp;gt;&amp;quot;Fear and obey Mordak the Mage!&amp;quot;&amp;lt;/i&amp;gt; they cried in fell voices as they did their foul deeds. People vanished from isolated farmsteads. Men and women began to fear the night, and their children even the bright day. But the nearest lord was more than a day's ride distant, and messengers sent to seek his help did not return.&lt;br /&gt;
&lt;br /&gt;
There was a man named Baran who had shown talent as a mage when he was young, gone to the great Academy on the Isle of Alduin, and returned to work his magic in the land where he was born. The people looked to him for help and leadership. He found weapons half-forgotten from the times of their sires and grandsires hanging in many houses, and bade the villagers to take them down and clean and oil them. He set the smiths of Maghre to making spearheads and ax-blades for the rest.&lt;br /&gt;
&lt;br /&gt;
Now Baran had a brother named Arvith who had also left Maghre to seek his fortune, and had become the leader of a small band of horsemen who hired out as guards to merchant caravans. Fortunate it was for all that when Baran was but an apprentice mage, he had made a pair of amulets for himself and his brother, with which they might call to each other when in dire need. Baran sent out that call.&lt;br /&gt;
&lt;br /&gt;
12 V, 363 YW&lt;br /&gt;
Excerpt from the journal of Baran of Maghre&lt;br /&gt;
&lt;br /&gt;
If I could but face this 'Mordak'! I think my magic might prove stronger than his. But he bides in the hills, well-guarded by his servants, and I muster frightened peasants to fight his minions with blades and sticks. I need my brother; he always had a better head for battle than I.&lt;br /&gt;
&lt;br /&gt;
Will he heed the call? I do not know if he has kept the amulet; we have not spoken since that evil day at Toen Caric. If he will not come for me, perhaps he will return to aid our village in its hour of desperate need.&lt;br /&gt;
&lt;br /&gt;
Heeding the call of his amulet, Arvith gathered such men as he could and hurried to Maghre to help Baran.&lt;br /&gt;
&lt;br /&gt;
=== Introductory Dialogue ===&lt;br /&gt;
'''Baran:''' Greetings, brother, and welcome home.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' Hail.&lt;br /&gt;
&lt;br /&gt;
'''Baran:''' Is that all, Arvith? I understand, but...&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' You called, and I came; be content with that. What ails Maghre?&lt;br /&gt;
&lt;br /&gt;
'''Baran:''' A dark mage has come upon us; his creatures call him Mordak. They have been terrorizing outlying farms, and we fear they may soon attack the village itself! The villagers of Maghre have taken up weapons but they are not trained fighters; but we need your men, and you to lead them.&lt;br /&gt;
&lt;br /&gt;
I can feel Mordak's foul touch on the hidden currents of the earth and air. He is somewhere due north of here, I would say not more than two days' ride.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' All right. I will do this for the village. Can you keep the mage off our backs?&lt;br /&gt;
&lt;br /&gt;
'''Baran:''' I will go stealthily with a handful of our best scouts and woodsmen. While you demonstrate against him and kill his creatures, I will try to defeat Mordak himself with magic at an unguarded moment. You shall be the right hand, I the left... aye, brother?&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' ... Aye. Just make sure you're there when we need you.&lt;br /&gt;
&lt;br /&gt;
=== Turn 6 ===&lt;br /&gt;
'''Arvith:''' Baran should be in position by now. Press them, distract the adept so Baran can spring his trap!&lt;br /&gt;
&lt;br /&gt;
=== Turn 10 ===&lt;br /&gt;
'''Arvith:''' Baran has not made his attack!&lt;br /&gt;
&lt;br /&gt;
'''Mercenary:''' Could he have abandoned us?&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' No... No. This is something else. I'm worried about him... but right now it means we have to deal with this Mordak ourselves.&lt;br /&gt;
&lt;br /&gt;
=== Undead Leader: Last Breath ===&lt;br /&gt;
'''Mordak:''' Argh.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' Good work, men! But what has become of my brother?&lt;br /&gt;
&lt;br /&gt;
'''Mordak:''' Worried about him, are you? E-he-he..hergh...gaargh... (dies)&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' There's nothing more to be had from this one; we will have to search for Baran ourselves!&lt;br /&gt;
&lt;br /&gt;
'''Reporter:''' Sir, our scouts report that Baran was seen captured and carried away further north!&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' That they should dare this! We will give chase at once.&lt;br /&gt;
&lt;br /&gt;
=== Time Over ===&lt;br /&gt;
'''Mordak:''' Your brother's plan to ambush me has failed.  He is our prisoner now.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' My brother, kidnapped? I have failed you, Baran! And even now Mordak's forces descend upon the village!&lt;br /&gt;
&lt;br /&gt;
=== First Attack ===&lt;br /&gt;
(attacks either Adept, Sorcerer, or Vampire Bat)&lt;br /&gt;
'''Arvith:''' I hear these creatures are nigh-immune to our weapons, let us see!&lt;br /&gt;
&lt;br /&gt;
=== Player Kills First Enemy ===&lt;br /&gt;
(kills same as above)&lt;br /&gt;
'''Unit:''' That was not so hard!&lt;br /&gt;
&lt;br /&gt;
== Scenario 2: The Chase ==&lt;br /&gt;
=== Story ===&lt;br /&gt;
16 V, 363 YW&lt;br /&gt;
Excerpt from the journal of Arvith of Maghre&lt;br /&gt;
&lt;br /&gt;
We've been searching three days for Baran, and turned up nothing. My best hunch was to head north into the borderlands, where the necromancer's minions could safely hide; everywhere else is more farmland. At first I thought the search might be useless, but late in the first day we found a set of tracks. Some of them had been made by skeletal feet.&lt;br /&gt;
&lt;br /&gt;
We're close enough to be certain now: those tracks are heading into the Grey Woods. No one from Maghre or any of the other villages has gone into that forest in living memory. Stories have been passed down for generations warning against it. Supposedly the place is haunted by lost souls who hunger for the living, and anyone who dies there is doomed to join them.&lt;br /&gt;
&lt;br /&gt;
16 V, 363 YW&lt;br /&gt;
Excerpt from the journal of Arvith of Maghre&lt;br /&gt;
&lt;br /&gt;
But I'm past superstitions now; I've seen enough of the world to guess at the truth behind these sorts of tales. The forest is home to elves — unfriendly ones, if the stories have any basis at all. I worry for my men; horses don't fight well in forests, and the elves will be more dangerous in their own territory. But there are things that need done and questions that need answered. Something bigger is happening. One necromancer terrorizing townsfolk is nothing new, but why didn't his servants scatter when he was killed? Where are they headed now? And most importantly, why did they take Baran with them?&lt;br /&gt;
&lt;br /&gt;
Besides... I want my brother back.&lt;br /&gt;
&lt;br /&gt;
=== Introductory Dialogue ===&lt;br /&gt;
'''Arvith:''' Come on, men. A stroll through such lovely green woods, what could be finer?&lt;br /&gt;
&lt;br /&gt;
'''Nil-Galion:''' You there! Halt and explain yourself.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' We're chasing after some men who kidnapped my brother!&lt;br /&gt;
&lt;br /&gt;
'''Nil-Galion:''' Those men told me their prisoner had attempted to murder their master, and wArvithd that evil men would follow him. Advance no further, or you will die.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' So much for those ghost stories. Mere elves will not stop me from freeing Baran!&lt;br /&gt;
&lt;br /&gt;
'''Horseman:''' I am glad at least that we will not have to face ghosts. But those elves will have us at a disadvantage; our horses will not maneuver well in the trees.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' Bah, just stay on the paths; our spearmen and bowmen can fight in the deeper woods. We have faced and won through greater perils than those amateurs can offer.&lt;br /&gt;
&lt;br /&gt;
=== Move to the North ===&lt;br /&gt;
'''Unit:''' I see them! There they are!&lt;br /&gt;
&lt;br /&gt;
'''Muff Toras:''' Curses! If they had been an hour slower our master's reinforcements would already be here to meet us.&lt;br /&gt;
&lt;br /&gt;
=== Turn 12 ===&lt;br /&gt;
'''Arvith:''' Come on, men, let's catch those kidnappers!&lt;br /&gt;
&lt;br /&gt;
=== Undead Last Breath ===&lt;br /&gt;
'''Muff Toras:''' Hah! You have captured me, but it will avail you nothing. I sent your precious brother the mage north with half my men a day since; he will be safely locked away in our master's dungeons by now.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' My blade is at your throat. Give us the way to my brother now, or I will spill your wretched blood on the ground.&lt;br /&gt;
&lt;br /&gt;
'''Muff Toras:''' Three days ride to the northeast, in a deserted castle. The passwords to the guards are --- and ---.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' Bind him and take him with us. If he has played us false, he will die.&lt;br /&gt;
&lt;br /&gt;
'''Horseman:''' Captain, what are we riding into? I thought you wanted nothing to do with Baran any more, not since Toen Caric.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' I'm no longer sure. What's between us remains, but knowing someone else has lain hands on him changes things. Mount up, and let's get moving.&lt;br /&gt;
&lt;br /&gt;
==== Easy (Iron Mauler appears) ====&lt;br /&gt;
'''Brena:''' Greetings. I am Brena, a knight errant. I saw you pursuing and fighting the foul undead. Are there more of them to be destroyed?&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' Aye. We think there's a nest of them north-east of here. They've captured my brother.&lt;br /&gt;
&lt;br /&gt;
'''Brena:''' I bear a great hatred towards their kind. I will follow and fight them with you, if you permit.&lt;br /&gt;
&lt;br /&gt;
'''A Horseman:''' He would only slow us down!&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' It is my place to decide this.&lt;br /&gt;
&lt;br /&gt;
=====Yes=====&lt;br /&gt;
'''Arvith:''' Oh, all right then. Come along with us.&lt;br /&gt;
&lt;br /&gt;
'''Brena:''' Thank you. My comrades and I will help you on your noble quest.&lt;br /&gt;
&lt;br /&gt;
=====No=====&lt;br /&gt;
'''Arvith:''' I am sorry. We have not the time to spare.&lt;br /&gt;
&lt;br /&gt;
'''Brena:''' Take this, then, for I see that you are on a quest. My comrades will help you whenever you call for them.&lt;br /&gt;
&lt;br /&gt;
'''Narrator:''' You receive 70 pieces of gold!&lt;br /&gt;
&lt;br /&gt;
=== Elf Last Breath ===&lt;br /&gt;
'''Nil-Galion:''' Foolish human, you have killed me but you will not catch the undead in time. I have fulfilled my contract, and will be reanimated soon to become a lord of their armies.&lt;br /&gt;
&lt;br /&gt;
(dies)&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' Follow their back trail!&lt;br /&gt;
&lt;br /&gt;
=== Time Over ===&lt;br /&gt;
'''Muff Toras:''' My reinforcements are here!&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' He escaped us...&lt;br /&gt;
&lt;br /&gt;
== Scenario 3: Guarded Castle ==&lt;br /&gt;
===Story===&lt;br /&gt;
19 IV, 363 YW&lt;br /&gt;
Excerpt from the journal of Rotharik the Clanless&lt;br /&gt;
&lt;br /&gt;
The last of Mordak's servants arrived this morning bearing the news of his death, as well as a bundle so well-bound it was barely recognizable as a man. Mordak was always reckless. This whole desperate scheme was his, and I suppose I could blame him for everything that we have suffered through if it still mattered. It was he who brought the wrath of the orcs down on us, too. But all the same, he managed to accomplish what he set out to do. I still cannot believe the finality of what has happened; until now we had always managed to make it through somehow.&lt;br /&gt;
&lt;br /&gt;
We had hoped to deliver the mage to Tairach in return for our lives. I do not know what the warlord wants with this man, but he matches the description. I suppose that Mordak's plan would have worked perfectly if not for the appearance of the horse warriors. Now they are coming here, led by a man rumored to be this mage‚Äôs brother. If that is true, he will stop at nothing, no more than would I if they held Mordak.&lt;br /&gt;
&lt;br /&gt;
19 IV, 363 YW&lt;br /&gt;
Excerpt from the journal of Rotharik the Clanless&lt;br /&gt;
&lt;br /&gt;
I have done what I can to fortify this dilapidated castle. The orcs who came with us stand guard at the gates, and I am gathering all of my servants to me in the inner sanctum. But ill fate awaits. Whether I defeat this horse-warrior or no, the orcs will still come for me; they have been scouring the borderlands and raiding the northern farm country in search of us.&lt;br /&gt;
&lt;br /&gt;
Yet for some reason I fear these brothers more. If Mordak were here it would be different, but we are broken... and these two men are whole. In each other, in the ties that bind them, they have strength.&lt;br /&gt;
&lt;br /&gt;
=== Introductory Dialogue ===&lt;br /&gt;
'''Narrator:''' Arvith and his men halt outside of the castle, gazing for a moment at the hulking mass of stone looming in the fog. There is movement in the mist.&lt;br /&gt;
&lt;br /&gt;
'''Guard Leader:''' Halt! Friend or foe? Give the password.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' The password is ----.&lt;br /&gt;
&lt;br /&gt;
====Password Correct====&lt;br /&gt;
'''Guard Leader:''' Pass friend.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' The adept didn't lead us astray after all. I'll keep my word, distasteful as it may be; cut him loose, and let's be rid of him.&lt;br /&gt;
&lt;br /&gt;
====Password Incorect====&lt;br /&gt;
'''Guard Leader:''' Wrong! Die!&lt;br /&gt;
&lt;br /&gt;
=== Orcs Sighted ===&lt;br /&gt;
'''Knago-Brek:''' Haha! We not kill people for long time. Weapon wants blood. We now kill humans!!&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' My sword-arm has a say in who will do the dying. Come on, men, let's kill some orcs.&lt;br /&gt;
&lt;br /&gt;
===Knago-Brek Dies===&lt;br /&gt;
'''Arvith:''' One less braggart orc in the world.&lt;br /&gt;
&lt;br /&gt;
'''Unit:''' Captain, what are &amp;lt;i&amp;gt;orcs&amp;lt;/i&amp;gt; doing this far south?&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' Good question. Perhaps my brother will have found out.&lt;br /&gt;
&lt;br /&gt;
=== Second Set of Guards (Turn 3/6) ===&lt;br /&gt;
'''Guard Leader II:''' Are you our relief arriving? Does this mean we get to leave here now?&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' Um, yes. Fine. You can go.&lt;br /&gt;
&lt;br /&gt;
'''Guard Leader II:''' Um, you're supposed to give the password.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' Oh, of course. I had nearly forgotten.&lt;br /&gt;
&lt;br /&gt;
====Password Correct====&lt;br /&gt;
'''Guard Leader:''' Thanks! Irritating little formality, isn't it?&lt;br /&gt;
&lt;br /&gt;
====Password Incorrect====&lt;br /&gt;
'''Guard Leader II:''' That's the wrong password! These aren't our relief! Get them!&lt;br /&gt;
&lt;br /&gt;
====Dialogue Continues====&lt;br /&gt;
'''Arvith:''' I think I should better support my men at the front to make sure we can free my brother.&lt;br /&gt;
&lt;br /&gt;
===Rotharik Dies===&lt;br /&gt;
'''Rotharik:''' Your hand or Tairach's, death is still death... (argh)&lt;br /&gt;
&lt;br /&gt;
(dies)&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' 'Tairach'? Who or what is Tairach?&lt;br /&gt;
&lt;br /&gt;
'''Unit:''' There's a key in his robes.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' That may well be the key to the cell they're holding Baran in! I will take it.&lt;br /&gt;
&lt;br /&gt;
===Treasure===&lt;br /&gt;
'''Unit:''' Look what I have found in here! I can count a hundred pieces of gold.&lt;br /&gt;
&lt;br /&gt;
(50 on easy, 100 on hard)&lt;br /&gt;
&lt;br /&gt;
=== Baran's Cell ===&lt;br /&gt;
'''Unit:''' I found Baran. He is in this cell.&lt;br /&gt;
&lt;br /&gt;
====If Arvith====&lt;br /&gt;
'''Baran:''' Good to see you, Arvith. &lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' And you too, brother.&lt;br /&gt;
&lt;br /&gt;
====If not Arvith====&lt;br /&gt;
'''Baran:''' You must be one of Arvith's men. Please help me get out of this dungeon.&lt;br /&gt;
&lt;br /&gt;
====Dialogue Continues====&lt;br /&gt;
'''Baran:''' The accursed dark sorcerer Rotharik has imprisoned me behind this magically enhanced iron gate. It can only be opened with the correct key. You must get it from him to free me.&lt;br /&gt;
&lt;br /&gt;
=====If You Have Key=====&lt;br /&gt;
'''Baran:''' Thank you for saving me. I… was not certain you would come.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' Have you no faith in your brother, Baran?&lt;br /&gt;
&lt;br /&gt;
'''Baran:''' It's not that. Perhaps I deserved to rot here. I failed you. I failed you again.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' That is as may be. But you are my brother still. And... I never doubted you would have come for me.&lt;br /&gt;
&lt;br /&gt;
It was no great trial, after all. A few elves, one or two dark sorcerers, a gang of orcs and some undead. Really just a day's work for the company.&lt;br /&gt;
&lt;br /&gt;
'''Baran:''' Thank you for coming to my aid. Let us return to the village.&lt;br /&gt;
&lt;br /&gt;
=== Time Over ===&lt;br /&gt;
'''Rotharik:''' You are too late! Your brother is already dead! Muahahaha...&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' Argh!!!&lt;br /&gt;
&lt;br /&gt;
== Scenario 4: Return to the Village ==&lt;br /&gt;
===Story===&lt;br /&gt;
27 V, 363 YW&lt;br /&gt;
Excerpt from the journal of Baran of Maghre&lt;br /&gt;
&lt;br /&gt;
Almost home now. The last week has been full of mixed feelings for me — blissful and difficult by turns. It was wonderful to be out of that dungeon cell and in the sunlight again without the threat of death or worse hanging over my head... but with that behind me, I turned to the almost equally daunting task of making amends with my brother.&lt;br /&gt;
&lt;br /&gt;
Arvith had largely forgiven me by the time he freed me from my cell. All the same, it has taken all of the past week for us to rebuild the sense of comfort in each other we once had. It is fortunate that we have been able to take our time getting back ‚Äî we gave the Grey Woods a wide berth, and on our way around it we traveled through some truly beautiful countryside. It has given us plenty of time to talk.&lt;br /&gt;
&lt;br /&gt;
27 V, 363 YW&lt;br /&gt;
Excerpt from the journal of Baran of Maghre&lt;br /&gt;
&lt;br /&gt;
Though I am more at ease now, my thoughts often turn back to Toen Caric. We should have been able to repel the orcs without great loss — the pincer attack Arvith devised would surely have carried the day but for me. It was reckless of me to leave my men behind — I wounded the warlord and forced him to flee the field, but the cost far outweighed the gain. Those under my command could have been saved if I had remained with them.&lt;br /&gt;
&lt;br /&gt;
I can hardly blame Arvith for having taken their deaths ill, and I can never undo the wrong that I have done, but I suppose that time heals some things. We return to the village as brothers once more.&lt;br /&gt;
&lt;br /&gt;
But I am still troubled. I wonder... is this sense of foreboding I feel merely a remnant of my time locked away in that dungeon, or is it a sign of something real?&lt;br /&gt;
&lt;br /&gt;
=== Introductory Dialogue ===&lt;br /&gt;
'''Arvith:''' There. Your village is just across those hills, and already I see men coming to greet us!&lt;br /&gt;
&lt;br /&gt;
'''Baran:''' No, they are fleeing from something. We must find out what is happening over there!&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' Men! Ready your arms!&lt;br /&gt;
&lt;br /&gt;
'''Baran:''' We find Reeve Hoban. Maybe he knows what is going on here.&lt;br /&gt;
&lt;br /&gt;
===Tairach Sighted===&lt;br /&gt;
'''Unit:''' We're almost there!&lt;br /&gt;
&lt;br /&gt;
'''Baran:''' That warlord! It's...&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' Yes, I'd know that face anywhere. Especially after what you did to it.&lt;br /&gt;
&lt;br /&gt;
'''Baran:''' The warlord from Toen Caric.&lt;br /&gt;
&lt;br /&gt;
'''Tairach:''' You! The mage who scarred me with fire! KILL THEM!&lt;br /&gt;
&lt;br /&gt;
'''Baran:''' Let's finish what we started, brother.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' Aye. I'll be the right arm, and you'll be the left. Let's go!&lt;br /&gt;
&lt;br /&gt;
=== Soldier of Reeve Hoban Seen ===&lt;br /&gt;
'''Reeve Hoban:''' I am glad to see you returned.&lt;br /&gt;
&lt;br /&gt;
'''Baran:''' No gladder than I am to be here. But what has happened to Maghre?&lt;br /&gt;
&lt;br /&gt;
'''Reeve Hoban:''' Soon after you departed we were beset by orcs. With half the men of Maghre gone, we could not stop them.&lt;br /&gt;
&lt;br /&gt;
The orcish warlord aims to enslave us. We will not be able to hold out for much longer.&lt;br /&gt;
&lt;br /&gt;
Have a care, his men are fell fighters and have killed many. Very few remain who can bear arms, but I will send them to aid you in battle.&lt;br /&gt;
&lt;br /&gt;
=== Enemies Defeated ===&lt;br /&gt;
'''Arvith:''' It is finished. We've defeated him at last. It was good to have you at my side, Baran.&lt;br /&gt;
&lt;br /&gt;
'''Baran:''' So much has been destroyed. It will be difficult to repair all that the orcs and undead have wrecked. And they could come again.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' I must go back to earning my living. But we have our amulets, little brother. If you are beset again, I will come.&lt;br /&gt;
&lt;br /&gt;
===Time Over===&lt;br /&gt;
'''Arvith:''' I don't think we can rescue anyone from these villages. It is too late.&lt;br /&gt;
&lt;br /&gt;
'''Baran:''' I was too weak to protect these people. Oh why did this happen to me?!?&lt;br /&gt;
&lt;br /&gt;
==Scenario 5: Epilogue==&lt;br /&gt;
===Story===&lt;br /&gt;
22 IX, 365 YW&lt;br /&gt;
Excerpt from the journal of Arvith of Maghre&lt;br /&gt;
&lt;br /&gt;
Maghre is looking much better than the last time I saw it. Baran has done wonders in two years. The village is rebuilt, and the surrounding farmlands are restored and reoccupied. Despite my brother's worries, our people have faced no new threats in that time.&lt;br /&gt;
&lt;br /&gt;
It has been more difficult to stay away in those two years, but I have my calling and Baran has his, and we have had little opportunity to meet again. But as the company and I are passing through this part of the kingdom with a new patron, I have asked leave of him to visit my brother and he gave it.&lt;br /&gt;
&lt;br /&gt;
22 IX, 365 YW&lt;br /&gt;
Excerpt from the journal of Arvith of Maghre&lt;br /&gt;
&lt;br /&gt;
This patron is, of all things, an elf. I never thought I'd befriend one, but he is less arrogant than the rest. Kalenz, he calls himself. He's seen too much; I can tell that just by meeting his eyes. I think we will have to work for our pay soon.&lt;br /&gt;
&lt;br /&gt;
In the meantime, though, it's good to relax and enjoy the peace.&lt;br /&gt;
&lt;br /&gt;
==TB's Specified Unit Names==&lt;br /&gt;
===Humans===&lt;br /&gt;
*[[CharactersStorys#Arvith | Arvith]]&lt;br /&gt;
*[[CharactersStorys#Baran | Baran]]&lt;br /&gt;
*Alwyn&lt;br /&gt;
*Brent&lt;br /&gt;
*[[CharactersStorys#Brena | Brena]]&lt;br /&gt;
*Cadell&lt;br /&gt;
*Dannen&lt;br /&gt;
*Efran&lt;br /&gt;
*Fargus&lt;br /&gt;
*Erik&lt;br /&gt;
*Heine&lt;br /&gt;
*Magnus&lt;br /&gt;
*Reeve Hoban&lt;br /&gt;
&lt;br /&gt;
=== Elves ===&lt;br /&gt;
*[[CharactersStorys#Nil-Galion | Nil-Galion]]&lt;br /&gt;
&lt;br /&gt;
===Undead===&lt;br /&gt;
=====Human=====&lt;br /&gt;
*[[CharactersStorys#Mordak | Mordak]]&lt;br /&gt;
*[[CharactersStorys#Muff_Toras | Muff Toras]]&lt;br /&gt;
*[[CharactersStorys#Rotharik | Rotharik (the Clanless)]]&lt;br /&gt;
&lt;br /&gt;
===Orcs===&lt;br /&gt;
*Knago-Brek&lt;br /&gt;
*[[CharactersStorys#Tairach | Tairach]]&lt;br /&gt;
[[Category:Create|*]]&lt;br /&gt;
[[Category:Writing|*]]&lt;/div&gt;</summary>
		<author><name>Octalot</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=CharactersStorys&amp;diff=73181</id>
		<title>CharactersStorys</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=CharactersStorys&amp;diff=73181"/>
		<updated>2024-06-29T16:10:47Z</updated>

		<summary type="html">&lt;p&gt;Octalot: /* Nil-Galion */ Rewritten in 1.16 to be against the undead&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;float:right&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
__TOC__&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Translator's Helpers'''&lt;br /&gt;
&lt;br /&gt;
This page is intended to help Translators figure out how characters should be translated. Sometimes, you need some information about a figure, a race or a plot, that might influence the translation. Campaign designers may define their intention for a character and each translator may include his/her implementation in his/her language (e.g. look for the &amp;quot;German&amp;quot; remarks in THoT). In case you are not the author of a campaign, please state where you got the background information from.&lt;br /&gt;
&lt;br /&gt;
Campaign designers: Please supply us mere translators with the flavor of your campaign to keep the high standard in all languages. Characters that do not appear repeatedly in the campaign are excluded from the character list. If they are important for translation purposes, feel free to add them.&lt;br /&gt;
&lt;br /&gt;
All of the campaigns have a wiki-presentation of their [[CampaignDialogue | dialogues]] - started in 2009, a few details might change in future reworks of the po-files, but the overall story and characters should not have changed. Therefore, those pages are a good start to get a &amp;quot;feeling&amp;quot; for the characters.[[MainlineCampaigns | Storyline, Walkthrough and more]] are accessible via this page as well.&lt;br /&gt;
&lt;br /&gt;
A page containing helpful shell scripts, e.g. to extract the speaker+text out of the po-file may be found [[TranslatorShellscript| here]].&lt;br /&gt;
&lt;br /&gt;
== The Rise of Wesnoth ==&lt;br /&gt;
{{TranslatorCampaignBox &lt;br /&gt;
  | story         = TrowStoryLine&lt;br /&gt;
  | walkthrough   = TheRiseOfWesnoth&lt;br /&gt;
  | dialogue      = CampaignDialogue:TROW&lt;br /&gt;
  | translatorlist= CampaignTROW&lt;br /&gt;
  | discuss       = http://www.wesnoth.org/forum/viewtopic.php?f=22&amp;amp;t=10613&lt;br /&gt;
  | forumresource = http://forums.wesnoth.org/viewtopic.php?f=9&amp;amp;t=30843&lt;br /&gt;
  | campnick      = trow&lt;br /&gt;
  | maintainer    = zookeeper&lt;br /&gt;
}}&lt;br /&gt;
=== [[Haldric I|Prince Haldric]] ===&lt;br /&gt;
Description: He is not the educated type of prince - not a stupid brute as such, but certainly not very knowledgeable and calm either. Haldric has always seemed more like this eager hack-and-slash-fellow-made-leader than a contemplating strategist. He bears a certain hot-headed, arrogant attitude.&lt;br /&gt;
&lt;br /&gt;
=== Lady Outlaw/[[Jessene]] ===&lt;br /&gt;
(had been changed from &amp;quot;Jessica&amp;quot; to &amp;quot;Jessene&amp;quot; during 1.6)&lt;br /&gt;
&lt;br /&gt;
Description: A pretty kick-ass/bad-ass lady, she appears rather calm and patient - she is very intelligent.&lt;br /&gt;
&lt;br /&gt;
=== [[Burin]] the Lost ===&lt;br /&gt;
Description: Burin is pretty nutty. He's been travelling and living alone for a long, long time. A hot-headed dwarf, half-crazed comic reliefed, although, he's also a bit of a whiner.&lt;br /&gt;
&lt;br /&gt;
=== Commander [[Aethyr]] ===&lt;br /&gt;
Description: A man who gets in the thick of melee.&lt;br /&gt;
&lt;br /&gt;
=== Minister [[Edren]] ===&lt;br /&gt;
(had been changed from &amp;quot;Edmond&amp;quot; to &amp;quot;Edren&amp;quot; during 1.6)&lt;br /&gt;
&lt;br /&gt;
Description: A white priest, battling the dark forces. So, he is not too passive. He's a minor character and basically all his dialogue is in the vein of, &amp;quot;No you won't, you soldier of darkness!&amp;quot;, so a little bit more restrained anger or some other kind of tension would be good for him. He has a psycho-rigid vibe which is a nice change from the usual wise-and-holy look of priests. After all, he's more country priest than archbishop.&lt;br /&gt;
&lt;br /&gt;
=== Sir [[Ruddry]] ===&lt;br /&gt;
A knight; sole survivor of the Clearwater Port expeditionary force. He's the one you get if you take the branching path thru the Swamp of Esten.&lt;br /&gt;
&lt;br /&gt;
=== Sir [[Ladoc]] ===&lt;br /&gt;
A knight; the equivalent of Sir Ruddry for players who take the branching path thru the Midlands instead. He is from Southbay, as opposed to Ruddry's Clearwater Port.&lt;br /&gt;
&lt;br /&gt;
=== Lich-Lord [[Jevyan]] ===&lt;br /&gt;
Description: In TRoW, Jevyan is basically this posturing super-aggressive overconfident lich brute over half of whose spoken lines end in an exclamation mark. Jevyan never really has a deviously cunning plan or does anything subtly. He is the most powerful lich in of his time, he would probably try to show that.&lt;br /&gt;
&lt;br /&gt;
=== King [[Addroran IX]] ===&lt;br /&gt;
The King of Southbay. He is like a captain who is willing to &amp;quot;go down with the ship&amp;quot; (so to speak), except that in this case the &amp;quot;ship&amp;quot; is Southbay.&lt;br /&gt;
&lt;br /&gt;
=== King [[Eldaric IV]] ===&lt;br /&gt;
Description: Eldaric is the king of a small backwater kingdom and introduced as a sovereign who'll rather be in the thick of melee than parading behind his soldiers. Therefore, my take is that regalia and embellishment should be toned down as much as possible in favor of a more practical gear. I might even get as far as denting it here and there.&lt;br /&gt;
&lt;br /&gt;
=== Lord [[Logalmier]] ===&lt;br /&gt;
Description: The local elvish warlord. He is mostly guided by prejudices and survivalist instincts, which don't take much more than a grouchy &amp;quot;the elves are for the elves&amp;quot; answer to all situations.&lt;br /&gt;
&lt;br /&gt;
=== Lady [[Dionli]] ===&lt;br /&gt;
Description: It seems like she's the highest ranking one of the elf lords, and seems pretty well rooted in reality instead of being one of those elves who just daydream of faerie stuff and talk like a poet all the time.  She is more like the underling that is trying to get things done in the absence of wise or strong leadership. She actively seeks cooperation and discussion between the different races, but can still be sat on by the rest of the lords, led by Logalmier, in breaking the pact.&lt;br /&gt;
&lt;br /&gt;
=== [[Elilmaldur-Rithrandil]] ===&lt;br /&gt;
An ancient wose of Oldwood. Guardian of his fellow trees; deeply in touch with nature.&lt;br /&gt;
&lt;br /&gt;
=== Lich-Lord [[Lenvan]] ===&lt;br /&gt;
Description: He's the one who's been sitting in a little cave under the Oldwood for a long time with the ruby, so the old and frail look would suit him - secretive and cunning.&lt;br /&gt;
&lt;br /&gt;
=== Lord [[Typhon]]  === &lt;br /&gt;
Description: A mighty sea king.&lt;br /&gt;
&lt;br /&gt;
=== [[Midnight Queen]] ===&lt;br /&gt;
An extremely beautiful vampire lady, who curses her island after being killed.&lt;br /&gt;
&lt;br /&gt;
== Winds of Fate ==&lt;br /&gt;
{{TranslatorCampaignBox &lt;br /&gt;
  | story         = WofStoryLine&lt;br /&gt;
  | walkthrough   = WindsofFate&lt;br /&gt;
  | dialogue      = CampaignDialogue:WoF&lt;br /&gt;
  | translatorlist= CampaignWoF&lt;br /&gt;
  | discuss       = &lt;br /&gt;
  | forumresource = &lt;br /&gt;
  | campnick      = wof&lt;br /&gt;
  | maintainer    = name &amp;amp; SigurdFireDragon&lt;br /&gt;
}}&lt;br /&gt;
=== Gorlack ===&lt;br /&gt;
&lt;br /&gt;
=== Reshan ===&lt;br /&gt;
&lt;br /&gt;
=== Karron ===&lt;br /&gt;
&lt;br /&gt;
== An Orcish Incursion ==&lt;br /&gt;
{{TranslatorCampaignBox &lt;br /&gt;
  | story         = An_Orcish_Incursion_story &lt;br /&gt;
  | walkthrough   = AnOrcishIncursion &lt;br /&gt;
  | dialogue      = CampaignDialogue:AOI&lt;br /&gt;
  | translatorlist= CampaignAnOrcishIncursion &lt;br /&gt;
  | discuss       = http://www.wesnoth.org/forum/viewtopic.php?f=22&amp;amp;t=20249&lt;br /&gt;
  | forumresource = http://forums.wesnoth.org/viewtopic.php?f=9&amp;amp;t=23420&amp;amp;start=192&lt;br /&gt;
  | campnick      = aoi&lt;br /&gt;
  | maintainer    = cycholka, esr&lt;br /&gt;
}}&lt;br /&gt;
=== Erlornas ===&lt;br /&gt;
Description: &amp;quot;he's a dandy, yet dangerous.&amp;quot; &lt;br /&gt;
&lt;br /&gt;
=== Linaera ===&lt;br /&gt;
Description: &amp;quot;Not real old, but grown-up and experienced, so she'll get a tad older in the process but not much.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Lomarfel ===&lt;br /&gt;
Description: Elvish Rider, &amp;quot;looks really surly.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Rualsha ===&lt;br /&gt;
An orcish sovereign.&lt;br /&gt;
&lt;br /&gt;
== Legend of Wesmere ==&lt;br /&gt;
{{TranslatorCampaignBox &lt;br /&gt;
  | story         = LegendofWesmereStory&lt;br /&gt;
  | walkthrough   = LegendofWesmere&lt;br /&gt;
  | dialogue      = CampaignDialogue:LOW &lt;br /&gt;
  | translatorlist= CampaignLegendOfWesmere&lt;br /&gt;
  | discuss       = http://www.wesnoth.org/forum/viewtopic.php?f=22&amp;amp;t=22465&lt;br /&gt;
  | forumresource = yet no used &lt;br /&gt;
  | campnick      = low&lt;br /&gt;
  | maintainer    = fabi&lt;br /&gt;
}}&lt;br /&gt;
=== Kalenz ===&lt;br /&gt;
The same Kalenz from HttT, except that he is much younger here.&lt;br /&gt;
&lt;br /&gt;
=== Olurf ===&lt;br /&gt;
=== Landar ===&lt;br /&gt;
=== Velon ===&lt;br /&gt;
=== Cleodil ===&lt;br /&gt;
=== Galtrid ===&lt;br /&gt;
=== Eonihar ===&lt;br /&gt;
=== Kior-Pur ===&lt;br /&gt;
=== Huraldur ===&lt;br /&gt;
=== Graur-Tan ===&lt;br /&gt;
=== Galenor ===&lt;br /&gt;
=== Aldar ===&lt;br /&gt;
=== Aquagar ===&lt;br /&gt;
The source of Kalenz's suffering and Landar's downfall.&lt;br /&gt;
&lt;br /&gt;
== Secrets of the Ancients ==&lt;br /&gt;
{{TranslatorCampaignBox &lt;br /&gt;
  | story         = SotA_story&lt;br /&gt;
  | walkthrough   = Secrets_of_the_Ancients_Walkthrough&lt;br /&gt;
  | dialogue      = CampaignDialogue:SOTA &lt;br /&gt;
  | translatorlist= Secrets_of_the_Ancients_Translators&lt;br /&gt;
  | discuss       = https://forums.wesnoth.org/viewtopic.php?f=8&amp;amp;t=40545&lt;br /&gt;
  | campnick      = sota&lt;br /&gt;
  | maintainer    = SigurdFireDragon&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Ardonna / Ardryn-Na ===&lt;br /&gt;
&lt;br /&gt;
Ardonna renames herself Ardryn-Na in scenario 13.&lt;br /&gt;
&lt;br /&gt;
Ardryn-Na's journal is the book of necromancy in the Descent Into Darkness campaign, so the text should match. However SotA has far more context for the text than DiD, so it might be better to translate SotA and then copy the text to DiD.&lt;br /&gt;
&lt;br /&gt;
=== Ras-Tabahn ===&lt;br /&gt;
&lt;br /&gt;
He's dying of tuberculosis, and &amp;quot;cough, cough&amp;quot; should be translated as such. &lt;br /&gt;
&lt;br /&gt;
=== Vendraxis ===&lt;br /&gt;
&lt;br /&gt;
He's the one who prompts Ardonna to change her name to Ardryn-Na.&lt;br /&gt;
&lt;br /&gt;
=== Carcyn ===&lt;br /&gt;
&lt;br /&gt;
An outlaw kept prisoner by his father until Ras-Tabahn's arrival.&lt;br /&gt;
&lt;br /&gt;
=== Shynal ===&lt;br /&gt;
&lt;br /&gt;
Carcyn's love interest, also kept prisoner until Ras-Tabahn's arrival. She's basically a recolored and feminized version of Harper.&lt;br /&gt;
&lt;br /&gt;
=== Rudic ===&lt;br /&gt;
&lt;br /&gt;
A sailor captain revived by Ardonna who uncovers her to his fellow in revenge.&lt;br /&gt;
&lt;br /&gt;
== Sceptre of Fire ==&lt;br /&gt;
{{TranslatorCampaignBox &lt;br /&gt;
  | story         = Sceptre_of_Fire_story&lt;br /&gt;
  | walkthrough   = Sceptre_of_Fire&lt;br /&gt;
  | dialogue      = CampaignDialogue:SOF&lt;br /&gt;
  | translatorlist= CampaignSeptreOfFire&lt;br /&gt;
  | discuss       = http://www.wesnoth.org/forum/viewtopic.php?f=22&amp;amp;t=20255&lt;br /&gt;
  | forumresource = http://forums.wesnoth.org/viewtopic.php?f=9&amp;amp;t=32775&lt;br /&gt;
  | campnick      = sof&lt;br /&gt;
  | maintainer    = zookeeper&lt;br /&gt;
}}&lt;br /&gt;
=== Rugnur ===&lt;br /&gt;
Description: Dwarf fighter. &amp;quot;Relatively young and not of especially high rank. Not particularly bright and talks in a pretty informal manner to everyone. Not greedy or very interested in gaining status, riches or fame; probably he just wants to do his job so he can go home and work on a miniature collection or something. That is, not a very exciting protagonist but more like the average joe who gets sucked into a big mess.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Thursagan ===&lt;br /&gt;
Description: Dwarf runemaster. Thursagan is THE runemaster. He's the best and he knows it. He's a hermit living in the wilderness so his outfit should reflect that (gryphon feathers, wolf fur or something like that would fit nicely), and while his equipment should include some smithing tools, he shouldn't look like he's just been hammering away in his forge like the core runemaster portrait. And, of course, he should have a big gorgeous hammer. Karrag's portrait in The Hammer of Thursagan should feature the same hammer, so you might take inspiration from that. Having faintly glowing runes on its side would be nice. Note worthy of interest: As a general note regarding the dwarves, it seems like their clan is a relatively small one and not very rich either, so I'd suggest being rather conservative with their bling.&lt;br /&gt;
&lt;br /&gt;
=== Durstorn ===&lt;br /&gt;
Description: Dwarf lord. He's the leader of the clan, so he should have the most bling on him. He's pretty greedy and hasty, maybe even crass. Generally not a very pleasant person, but apparently not a terribly incompetent leader either (at least until the ruby corrupts him).&lt;br /&gt;
&lt;br /&gt;
=== Alanin ===&lt;br /&gt;
Description: Human dragoon. He's the guy Haldric sends to go with the dwarves as his personal representative of sorts, so he could have some special regalia, although of course it'll have to be something other than the sceptre symbol used in later times. The whole campaign is said to have lasted 15 years, and in the epilogue Haldric tells him he's old enough to retire, so that's a hint towards his age.&lt;br /&gt;
&lt;br /&gt;
=== Baglur ===&lt;br /&gt;
Description: Dwarf stalwart. As he himself says, he's &amp;quot;a retired warrior&amp;quot; so a bit older than the other dwarves (except perhaps Thursagan).&lt;br /&gt;
&lt;br /&gt;
=== Haldric II ===&lt;br /&gt;
Description: Human King. &lt;br /&gt;
&lt;br /&gt;
=== Krawg ===&lt;br /&gt;
Description: Gryphon - intelligent, but hard to understand (Its sometimes even hard to get the meaning - check [[CampaignDialogue:SOF]] for an proper english version). For translating Krawg long for &amp;quot;speaking raven&amp;quot; rather than &amp;quot;Long John Silvers parrot&amp;quot;. He's the only one that survives the last battle.&lt;br /&gt;
&lt;br /&gt;
=== Glonoin ===&lt;br /&gt;
Description: Dwarvish Lord.&lt;br /&gt;
&lt;br /&gt;
=== Kuhnar ===&lt;br /&gt;
Description: Dwarvish Steelclad.&lt;br /&gt;
&lt;br /&gt;
== A Tale Of Two Brothers ==&lt;br /&gt;
{{TranslatorCampaignBox &lt;br /&gt;
  | story         = A_Tale_Of_Two_Brothers_Story&lt;br /&gt;
  | walkthrough   = ATaleOfTwoBrothers&lt;br /&gt;
  | dialogue      = CampaignDialogue:TB1.9&lt;br /&gt;
  | translatorlist= CampaignTwoBrothers&lt;br /&gt;
  | discuss       = http://www.wesnoth.org/forum/viewtopic.php?f=22&amp;amp;t=10339&lt;br /&gt;
  | forumresource = http://forums.wesnoth.org/viewtopic.php?f=9&amp;amp;t=23420&amp;amp;start=210&lt;br /&gt;
  | campnick      = tb&lt;br /&gt;
  | maintainer    = Ivanovic&lt;br /&gt;
}}&lt;br /&gt;
=== Arvith ===&lt;br /&gt;
(Arvith was formerly known as &amp;quot;Arne&amp;quot; until version 1.??; still referred to as &amp;quot;Arne&amp;quot; in some quotes about him)&lt;br /&gt;
&lt;br /&gt;
Description: &amp;quot;Arvith looks a little fat, but otherwise they all look cool to me... his weight and his expression fit his character perfectly...long hair... Even Arvith's horse looks a bit smirky.&amp;quot; Leader of a small band of horsemen who hired out as guards to merchant caravans.&lt;br /&gt;
&lt;br /&gt;
=== Baran ===&lt;br /&gt;
(Baran was formerly known as &amp;quot;Bjarn&amp;quot; until version 1.??)&lt;br /&gt;
&lt;br /&gt;
Description: Arvith's brother, a Red Mage. Feels guilty about having let his brother down in the past. Has an amulet that he uses to call Arvith for help. &lt;br /&gt;
&lt;br /&gt;
=== Rotharik ===&lt;br /&gt;
A dark sorcerer known as &amp;quot;Rotharik the Clanless&amp;quot;. Employs bandits, orcs, and undead. Seeks to deliver Baran to Tairach.&lt;br /&gt;
&lt;br /&gt;
=== Nil-Galion ===&lt;br /&gt;
An elf who guards the Grey Woods. Sides with the undead in 1.14 and before. Rewritten in 1.16 to be against necromancy, but in either version believes that Baran is in the opposing faction.&lt;br /&gt;
&lt;br /&gt;
=== Mordak ===&lt;br /&gt;
The initial mage antagonist. It turns out that he is actually acting on behalf of Rotharik.&lt;br /&gt;
&lt;br /&gt;
=== Brena ===&lt;br /&gt;
A knight errant who pursues the undead. Only available on the easiest difficulty.&lt;br /&gt;
&lt;br /&gt;
=== Tairach ===&lt;br /&gt;
The orcish warlord from Toen Caric that Baran had wounded previously. Wants revenge on Baran. &lt;br /&gt;
&lt;br /&gt;
=== Muff Toras ===&lt;br /&gt;
A dark adept who acts as a courier between Mordak and Rotharik.&lt;br /&gt;
&lt;br /&gt;
== Descent into Darkness ==&lt;br /&gt;
{{TranslatorCampaignBox &lt;br /&gt;
  | story         = Descent_Into_Darkness_story&lt;br /&gt;
  | walkthrough   = DescentIntoDarkness&lt;br /&gt;
  | dialogue      = CampaignDialogue:DID&lt;br /&gt;
  | translatorlist= CampaignDescentintoDarkness&lt;br /&gt;
  | discuss       = http://www.wesnoth.org/forum/viewtopic.php?f=22&amp;amp;t=20251&lt;br /&gt;
  | forumresource = yet no used &lt;br /&gt;
  | campnick      = did&lt;br /&gt;
  | maintainer    = zookeeper&lt;br /&gt;
}}&lt;br /&gt;
=== Darken Volk ===&lt;br /&gt;
A very cold person, Darken Volk is also an excellent actor, easily able to deceive others with false sincerity, hatred, or affection. However, he is a singularly self-centered individual and does not care what, or who, gets in the way. And whatever gets in his way must be destroyed. He is well learned, and as such his speech should be one very precise and two have a very extensive vocabulary.&lt;br /&gt;
&lt;br /&gt;
=== Drogan ===&lt;br /&gt;
Drogan is very, very loyal to that which he holds dear. Parthyn is one of these things, as well as Malin Keshar's father. He does not want anything to harm his loved ones, and so sees many an unpleasant duty as necessary for upholding the peace. His speech is plain and conventional, no long words or complicated sentences.&lt;br /&gt;
&lt;br /&gt;
=== [[Malin Keshar]]/Mal Keshar ===&lt;br /&gt;
Malin Keshar is a young man who had his childhood and his father ripped away from him by the orcs. He now has only one goal in life: to make the orcs suffer. There is nothing he wants more and it has become his constant obsession. If he can do anything to harm the orcs, he will do so gladly, even if it harms other people. Still, he is a basically honorable person and does not enjoy the death of any save the orcs. Malin Keshar is a mix of the illiterate world of his former village and the literate world of the mages' islands. As such, he speaks almost like a reasonably educated person of today might, with a broad vocabulary but not overly complex sentence structure. At the end of the campaign he becomes an ancient lich named Mal Keshar.&lt;br /&gt;
&lt;br /&gt;
=== The book of necromancy ===&lt;br /&gt;
The book is Ardryn-Na's journal from the Secrets of the Ancients campaign, and the text in the two campaigns should match. SotA has much more context for the book's text, so its translation is likely to be better than old translations of DiD.&lt;br /&gt;
&lt;br /&gt;
=== Foolish Hero ===&lt;br /&gt;
Either a Dwarvish Lord, an Assassin, a Royal Guard, an Orcish Warlord or an Elvish Marshal, he's the proverbial knight in shining armor, who has come to vanquish the darkness. He is very brave, but also somewhat brash and arrogant, thinking that this is just one more battle to face. This should show in his speech as flowery and yet somewhat haughty language. He has bested many foes before, won many battles, and is very experienced. This darkness however, may be a little more than he can handle . . .&lt;br /&gt;
&lt;br /&gt;
=== Dela Keshar ===&lt;br /&gt;
Malin Keshar's older sister, she tries to kill him after his troops killed Drogan.&lt;br /&gt;
&lt;br /&gt;
=== Lady Karae ===&lt;br /&gt;
&amp;lt;small&amp;gt;Lord Karres till 1.14&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A noblewoman mage who guards the book of necromancy.&lt;br /&gt;
&lt;br /&gt;
==  Delfador's Memoirs ==&lt;br /&gt;
{{TranslatorCampaignBox &lt;br /&gt;
  | story         = none yet&lt;br /&gt;
  | walkthrough   = DelfadorsMemoirs&lt;br /&gt;
  | dialogue      = CampaignDialogue:DM&lt;br /&gt;
  | translatorlist= CampaignDelfadorsMemoirs&lt;br /&gt;
  | discuss       = http://www.wesnoth.org/forum/viewtopic.php?f=22&amp;amp;t=25554&lt;br /&gt;
  | forumresource = yet no used &lt;br /&gt;
  | campnick      = dm&lt;br /&gt;
  | maintainer    = [[User:Tapik|tapik]]&lt;br /&gt;
}}&lt;br /&gt;
In German: My primary goal was to create some sort of medieval sounding German without truly using the language of the german middle ages (middle high german). I tried to use so called &amp;quot;Archaismen&amp;quot; (words not or almost not used anymore) and played with the syntax; e.g. the genitive had been used a lot more in the middle ages than it is used today.&lt;br /&gt;
&lt;br /&gt;
=== [[Delfador]] ===&lt;br /&gt;
&lt;br /&gt;
In German: As for Delfador, in the beginning he hast just finished his apprenticeship and still is unsure of his powers and abilities. In time and through the hardships he has to undergo, he gains in self-confidence which is reflected by the way he expresses himself. Furthermore his education and literacy shows up in his phrasing and diction.&lt;br /&gt;
&lt;br /&gt;
=== Methor ===&lt;br /&gt;
&lt;br /&gt;
In German: He is teacher and good friend to Delfador and you can see this in his conversation with him. Towards other people he shows is wisom gained by a lifetime as a magician.&lt;br /&gt;
&lt;br /&gt;
=== Lionel ===&lt;br /&gt;
&lt;br /&gt;
=== Iliah-Malal ===&lt;br /&gt;
&lt;br /&gt;
In German: He thinks of himself as being without any boundaries and limits and that there exists nobody who has the power to stop him on his way. In his conversations with other beings you can see his inhumane age and his arrogance. He is very well spoken but depreciatory towards people he thinks are unworthy of his attention.&lt;br /&gt;
&lt;br /&gt;
=== Leollyn ===&lt;br /&gt;
&lt;br /&gt;
Description: Leollyn is a good man - honest, intelligent, loyal to his king, and a friend of Delfador's mentor Methor. He takes Delfador under his wing at court. He doesn't watch his back, though, and will be murdered by a conniving rival. I imagine a man in healthy middle age with a benign, open expression, someone who would both inspire trust and deserve it. I see him wearing simpler clothing than would be normal for a man with the kind of court position he has, well-made but unostentatious. (http://forums.wesnoth.org/viewtopic.php?f=9&amp;amp;t=24805&amp;amp;start=0)&lt;br /&gt;
&lt;br /&gt;
=== Garard II ===&lt;br /&gt;
=== Tomb Guardian ===&lt;br /&gt;
=== Chantal ===&lt;br /&gt;
One of Kalenz's grandchildren, her fate is unknown after having been unable to escape Weldyn in HttT.&lt;br /&gt;
&lt;br /&gt;
=== Kalenz ===&lt;br /&gt;
&lt;br /&gt;
In German: He's one of the oldest of the Elves and bears the weight and wisdom of ages. He has very refined manners and knows how to deal with different kind of people. Both vocabulary and syntax are sophisticated.&lt;br /&gt;
&lt;br /&gt;
=== Sagus ===&lt;br /&gt;
Asheviere's father who wants to take the whole world after his mortal demise.&lt;br /&gt;
&lt;br /&gt;
== Liberty ==&lt;br /&gt;
{{TranslatorCampaignBox &lt;br /&gt;
  | story         = Liberty_story&lt;br /&gt;
  | walkthrough   = Liberty&lt;br /&gt;
  | dialogue      = CampaignDialogue:L&lt;br /&gt;
  | translatorlist= CampaignLiberty&lt;br /&gt;
  | discuss       = http://www.wesnoth.org/forum/viewtopic.php?f=22&amp;amp;t=20252&lt;br /&gt;
  | forumresource = yet no used &lt;br /&gt;
  | campnick      = l&lt;br /&gt;
  | maintainer    = esr &amp;amp; zookeeper&lt;br /&gt;
}}&lt;br /&gt;
=== Baldras ===&lt;br /&gt;
From the comments in S01: &amp;quot;Baldras is an old man from the country and both speaks and writes with many grammatical errors due to his relative lack of education. He is also a little bit rude and grumpy, so languages with ruder or more informal variants of words should use those where appropriate.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Harper ===&lt;br /&gt;
The nephew of Baldras, or more specifically the son of Baldras' younger sister Erwen. &amp;quot;Harper has a bit of an accent, but not as much as Baldras. He's a bit of a reckless kid as Baldras alludes to, but he's much more polite.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Relana ===&lt;br /&gt;
(Became a female character in 1.9, was named &amp;quot;Relnan&amp;quot; before)&lt;br /&gt;
&lt;br /&gt;
The magistrate of Delwyn. Has an accent like many of the other countryfolk. Baldras and Harper go to her for help.&lt;br /&gt;
&lt;br /&gt;
=== Helicrom ===&lt;br /&gt;
A Shadow Lord (advancement of a Shadow Mage) known as the &amp;quot;Crow of the Grey Woods&amp;quot; (since that's where he's found). Joins forces with Harper and Baldras.&lt;br /&gt;
&lt;br /&gt;
=== Lord Maddock ===&lt;br /&gt;
Lord of [[Elensefar]]. He is nobility, so his speech is somewhat fancier than normal. He doesn't really want to help Baldras and Harper that much, but he still has a little bit of a conscience, so he agrees to provide some assistance to them.&lt;br /&gt;
&lt;br /&gt;
=== Thhsthss ===&lt;br /&gt;
A saurian oracle who works for the orcs. Has the usual [https://tvtropes.org/pmwiki/pmwiki.php/Main/Sssssnaketalk snakelike speech patterns] that most saurians have.&lt;br /&gt;
&lt;br /&gt;
== Heir to the Throne ==&lt;br /&gt;
{{TranslatorCampaignBox &lt;br /&gt;
  | story         = HtttStoryLine &lt;br /&gt;
  | walkthrough   = HeirToTheThrone &lt;br /&gt;
  | dialogue      = CampaignDialogue:HttTh&lt;br /&gt;
  | translatorlist= CampaignHeirtotheThrone &lt;br /&gt;
  | discuss       = http://www.wesnoth.org/forum/viewtopic.php?f=22&amp;amp;t=10322&lt;br /&gt;
  | forumresource = http://forums.wesnoth.org/viewtopic.php?f=32&amp;amp;t=35289&lt;br /&gt;
  | campnick      = httt&lt;br /&gt;
  | maintainer    = zookeeper&lt;br /&gt;
}}&lt;br /&gt;
Character Descriptions by vodot [http://forums.wesnoth.org/memberlist.php?mode=viewprofile&amp;amp;u=128239 (Forum Userpage)] [[User:Vodot|(Wiki Userpage)]]&lt;br /&gt;
&lt;br /&gt;
=== [[Konrad]] ===&lt;br /&gt;
At the outset of ''Heir to the Throne'', Konrad is the twenty-two-year-old and last surviving nephew of King Garard II. After the king's betrayal and Asheviere's subsequent rise to power, Konrad alone was saved by Delfador from the queen's bloody purge of the royal household in Weldyn. The infant heir was taken to the Aethenwood, the great southern elvish forest, to be raised in secret and groomed by Delfador until the time was right for his accession to the throne.&lt;br /&gt;
&lt;br /&gt;
Konrad is intelligent and somewhat reserved (for a human), and being raised among the elves has given him a sensitivity to living things and a compassionate spirit. Delfador has proven a diligent tutor in history, rhetoric, and military theory, and under the mage's patient wisdom the boy has learned humility and discipline as well.&lt;br /&gt;
&lt;br /&gt;
As ''Heir to the Throne'' begins, Konrad is growing restless with waiting and hiding in secrecy, being eager to repay the queen and her servants for the blight they have brought to Wesnoth and the vile betrayal of his uncle. With the invasion and destruction of the Aethenwood by the queen, the time for the heir to step forward has come at last.&lt;br /&gt;
&lt;br /&gt;
=== [[Delfador]] ===&lt;br /&gt;
Delfador the Great is the legendary and ancient archmage of Wesnoth; befriended by elves and dwarves, wielder of the Staff of An-Usrukhar, advisor to kings and slayer of traitors; the latter of which has resulted in his exile by Asheviere these past twenty-two years. In the queen's hearing he is called the Kingsbane, for Asheviere has worked feverishly to spread false tales that it was he (and not herself) that was behind the deaths of Garard II and crown prince Eldred.&lt;br /&gt;
&lt;br /&gt;
After rescuing Konrad from death, Delfador has lain hidden in secret in the southern wood, instructing the growing prince and watching anxiously the movements and events of the greater kingdom. His whereabouts are still unknown to the queen, though that will not last long when his terrifying power is revealed and the heir that he has long concealed steps out of the shadows.&lt;br /&gt;
&lt;br /&gt;
=== [[Asheviere]] ===&lt;br /&gt;
Queen of Wesnoth these 22 years; often called the 'Dark Queen' by the free peoples of the coast and by the especially courageous (or foolish) of her subjects. Executing plans laid long before, the queen caused her son Eldred to betray her husband, king Garard II, and then assured her rise to the throne by goading the crown prince into foolishly challenging Delfador the Great to solo combat.  &lt;br /&gt;
&lt;br /&gt;
After cleansing the palace of rivals, the queen has laid hold of Wesnoth in an iron fist, making alliances with orcs and undead alike to secure her personal wealth and the security of her throne. She is a master deceiver and worker of lies, a sorceress in her own right, and is hated and feared by her people and by the wise; scattered and helpless to stop her and her allies from plunging the realm into darkness.&lt;br /&gt;
&lt;br /&gt;
=== [[Li'sar]] ===&lt;br /&gt;
Most of what little royal blood remains in Weldyn now flows in the veins of one of two people: Asheviere the queen and her daughter Li'sar, princess and heir-apparent. Li'sar has grown up in the palace, but her headstrong and indomitable spirit have assured her frequent escape from the cushioned pavilions and courts of royalty. &lt;br /&gt;
&lt;br /&gt;
She entered the military academy of Weldyn where she graduated swiftly with honors, and as ''Heir to the Throne'' begins she has begun leading a division of her mother's loyalist army in the field. Li'sar was born for the battlefield; leading troops with uncanny skill and poise. She is a budding master of misdirection and tactics.&lt;br /&gt;
&lt;br /&gt;
Like her mother, princess Li'sar is prideful and quick-witted, but to the queen's vexation she has also inherited much of her father's nobility and sense of honor. Now, her forays taking her further from the capital and into the larger countryside, the princess is slowly becoming aware of the true impact her mother's reign has had on the realm.&lt;br /&gt;
&lt;br /&gt;
=== Kalenz ===&lt;br /&gt;
The High Lord Kalenz is a storied warrior and leader of elves and men. He is ancient even for an elf, his younger days stretching back into the shadows when men first landed on the great continent.&lt;br /&gt;
&lt;br /&gt;
In ''Heir to the Throne'' Kalenz emerges from his second retirement to undertake his final adventure with his friend Delfador the Great, shepherding Garard II's last remaining heir in his journey to Find the Scepter of Fire and dethrone the wicked queen.&lt;br /&gt;
It's unknown if he dies between HttT ending and NR beginning.&lt;br /&gt;
&lt;br /&gt;
=== Relgorn ===&lt;br /&gt;
Relgorn son of Ulrek is lord of the Knalgan dwarves. After being sent there as a youngster at his father's command, he has diligently safeguarded his people and tried to make inroads against the orcs and other wicked creatures that inhabit the tunnels of Knalga near those ancient caverns where the Scepter of Fire is said to rest. He bears little love for elves, men, or any other race outside his small earthen realm, but in his youth he once befriended a young Delfador. Relgorn owes the mage a debt of gratitude for saving his father and his people.&lt;br /&gt;
&lt;br /&gt;
=== Moremirmu ===&lt;br /&gt;
A white mage and survivor of the free coast peoples that were exiled to the Three Sisters as a result of their rebellion against Asheviere's tyranny. As ''Heir to the Throne'' begins, Moremirmu and the other ''Liberty'' survivors are waging a crusade to reclaim the Isle of the Damned from the necromancer Muff-Malal.&lt;br /&gt;
&lt;br /&gt;
=== Sir Kaylan ===&lt;br /&gt;
A Grand Knight, horse-lord, and leader of the free peoples of Blackwater Port. Kaylan and his knights have long held the port against Asheviere, but have been coming under increasing pressure as she ramps up her campaign to destroy the elves of the Aethenwood.&lt;br /&gt;
&lt;br /&gt;
=== Reglok ===&lt;br /&gt;
Reglok is head of the Thieves Guild of Elensefar, a loyal (if dubious) band of highly skilled &amp;quot;traders&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Keh Ohn ===&lt;br /&gt;
A great Drake-lord of Thoria, leader of the northern race of those creatures that were previously unknown to inhabit Wesnoth.&lt;br /&gt;
&lt;br /&gt;
== Northern Rebirth ==&lt;br /&gt;
{{TranslatorCampaignBox &lt;br /&gt;
  | story         = Northern_Rebirth_story &lt;br /&gt;
  | walkthrough   = Northern_Rebirth &lt;br /&gt;
  | dialogue      = CampaignDialogue:NR &lt;br /&gt;
  | translatorlist= CampaignNorthernRebirth &lt;br /&gt;
  | discuss       = http://www.wesnoth.org/forum/viewtopic.php?f=22&amp;amp;t=20253 &lt;br /&gt;
  | forumresource = http://www.wesnoth.org/forum/viewtopic.php?p=120380#p120380&lt;br /&gt;
  | campnick      = nr&lt;br /&gt;
  | maintainer    = Taurus&lt;br /&gt;
}}&lt;br /&gt;
=== Tallin ===&lt;br /&gt;
&amp;quot;The typical hero stereotype, and also the main character of this campaign. He originally starts out as a peasant, but over the course of the campaign Hamel trains him up and he switches over to being a lieutenant. He is young - between 20 and 30, and has all that usual hero stuff around him - brave, intelligent, good looking, blah blah blah.&amp;quot; &lt;br /&gt;
&lt;br /&gt;
In German: An educated but not very &amp;quot;upperclass&amp;quot; language in the beginning, but starting to be much more &amp;quot;noble&amp;quot; when courting Eryssa.&lt;br /&gt;
&lt;br /&gt;
=== Hamel ===&lt;br /&gt;
A very wise, tough grizzled veteran Dwarvish Lord who, until recently, has been trapped in the caves of Knalga fighting an unending war with undead, trolls and orcs. He also appears in The Hammer of Thursagan, which takes place chronologically after this campaign.&lt;br /&gt;
&lt;br /&gt;
In English: He has a strong Scottish accent (&amp;quot;In English-language folklore, the Scottish share many characteristics with fantasy dwarves. Both are tough, dour, canny mountain folk who are good at engineering and hold grudges forever; the similarity even makes sense to a Scot. This is why a Scots accent “feels right” for a dwarf.&amp;quot;) (http://www.catb.org/~esr/wesnoth/campaign-design-howto.html#toc5)&lt;br /&gt;
&lt;br /&gt;
In French: While I am not the French translator and do not know how Hamel was translated in French, in &amp;quot;The Three Musketeers&amp;quot; Dumas says that in French, the Gascons are the equivalent of the Scottish, so maybe he could be given a Gascon accent?&lt;br /&gt;
&lt;br /&gt;
In German: Dwarves are speaking &amp;quot;medieval&amp;quot;, as no accent fits the &amp;quot;dwarf&amp;quot;-description above. It somehow fits in the German knight tradition, especially holding grudges forever :).&lt;br /&gt;
&lt;br /&gt;
In Greek: Choosing a particular dialect was difficult, since I don't know greek dialects that well. I used &amp;quot;village&amp;quot; greek for making it rougher, and added ancient greek and byzantine terms whenever I needed to sound medieval or pompous, and for many &amp;quot;army&amp;quot; and  &amp;quot;battle&amp;quot; terms.&lt;br /&gt;
&lt;br /&gt;
=== Camerin === &lt;br /&gt;
A very powerful but crazy Arch/Great mage who loves to blow things up.&lt;br /&gt;
&lt;br /&gt;
=== Father Morvin === &lt;br /&gt;
(Name was changed from &amp;quot;Marcus&amp;quot; during Version 1.6)&lt;br /&gt;
&lt;br /&gt;
A wise and experienced White Mage missionary who - until recently - has been a prisoner to Malifor. He has traveled a lot, knows many people, and has much experience in different lands. Husband to Sister Thera.&lt;br /&gt;
&lt;br /&gt;
=== Eryssa === &lt;br /&gt;
(Name was changed from &amp;quot;Anita&amp;quot; during Version 1.6)&lt;br /&gt;
&lt;br /&gt;
A beautiful, virtuous, brave, but at times snobbish and stuck up, elvish princess (Elvish Sorceress). Her father holds a high position with the north elves and she has been captured and held for ransom by the orcs. Sister of Elenia.&lt;br /&gt;
&lt;br /&gt;
=== Elenia === &lt;br /&gt;
Eryssa's wild older sister. Elenia is a beautiful elvish Druid who had a strong desire to see the world and set off on her own. She was eventually captured and held prisoner by Malifor, only because he found her pretty.&lt;br /&gt;
&lt;br /&gt;
=== Hidel === &lt;br /&gt;
A middle-aged elvish marshal who is Eryssa's longtime guardian and mentor. Although he's very wise, he's at times inflicted with the typical elvish snobbishness and superiority issues. He was sent by Eryssa and Elenia's father to rescue her from the orcs.&lt;br /&gt;
&lt;br /&gt;
=== Sisal === &lt;br /&gt;
A lady elvish avenger, Hidel's second in command. She's brave and ferocious and will fight to the death if necessary.&lt;br /&gt;
&lt;br /&gt;
=== Rakshas === &lt;br /&gt;
A powerful Orcish Sovereign that likes being called &amp;quot;The Master&amp;quot;. He has thrashed enough orcish Warlords into servitude that he poses as a serious threat to the entire northlands. He has a large imagination and delusions of grandeur and when combined with his power, makes him a foe to be reckoned with.&lt;br /&gt;
&lt;br /&gt;
=== Malifor === &lt;br /&gt;
A powerful ancient lich with more delusions of grandeur. He wields vast power over any creature that has died and has been resurrecting the long dead defenders of Knalga to carve out an underground undead empire for himself.&lt;br /&gt;
&lt;br /&gt;
=== Sister Thera === &lt;br /&gt;
The dedicated wife of Father Morvin (white mage of course). She doesn't quite fit the profile of a saintly subdued holy lady however, as she is very spirited and takes great pleasure in blowing evil creatures to pieces as well as occasional theatrical displays of drama.&lt;br /&gt;
&lt;br /&gt;
=== Stalrag === &lt;br /&gt;
A Dwarvish Lord who is the leader of the Shinsplitters - a tribe of Dwarvish Ulfserkers (same guy from HttT, in the scenario Hostile Mountains). He has a long standing feud with the liches Ro'Arthian and Ro'Sothian (see below).&lt;br /&gt;
&lt;br /&gt;
=== Ro'Arthian === &lt;br /&gt;
A mage that refused to die and reincarnated as an Ancient Lich instead. He and Ro'Sothian are powerful liches that have the ability to control gryphons, ogres and trolls. Although he and and his brother are good at heart they have no qualms about using dark and evil means to achieve their ends.&lt;br /&gt;
&lt;br /&gt;
=== Ro'Sothian === &lt;br /&gt;
The younger brother and side kick of Ro'Arthian. He was a mage until he was killed and reincarnated as a Lich. Pretty much the same profile as his brother.&lt;br /&gt;
&lt;br /&gt;
(name changed from Ro'Sarthian somewhen before 1.8)&lt;br /&gt;
&lt;br /&gt;
=== Abhai ===&lt;br /&gt;
Died as a mortal in 14318 AD, he's the former king of Garet-Desh's ghost, drawn into half-life by Malifor. At first, he believed that Tallin's army had been brought there by the High Kalian of Hiera'Shirsha.&lt;br /&gt;
&lt;br /&gt;
=== Krash ===&lt;br /&gt;
A drake that Tallin rescues from the dungeons of Malifor, to whom Camerin immediately takes a like. Rather feral; he doesn't communicate well with humans. He has other drake friends.&lt;br /&gt;
&lt;br /&gt;
== The Hammer of Thursagan ==&lt;br /&gt;
{{TranslatorCampaignBox &lt;br /&gt;
  | story         = TheHammerOfThursagan_story &lt;br /&gt;
  | walkthrough   = TheHammerOfThursagan &lt;br /&gt;
  | dialogue      = CampaignDialogue:THOT &lt;br /&gt;
  | translatorlist= CampaignTheHammerofThursagan&lt;br /&gt;
  | discuss       = http://www.wesnoth.org/forum/viewtopic.php?f=22&amp;amp;t=20253 &lt;br /&gt;
  | forumresource = http://www.catb.org/~esr/wesnoth/thot.html&lt;br /&gt;
  | campnick      = thot&lt;br /&gt;
  | maintainer    = esr&lt;br /&gt;
}}&lt;br /&gt;
Campaign specialties: About noble titles in the Northern Alliance [http://www.wesnoth.org/forum/viewtopic.php?f=7&amp;amp;t=20299]. Cave-related vocabulary in 13 languages may be found [http://efs.ffspeleo.fr/stages-reglementation/124-lexique/download here]&lt;br /&gt;
&lt;br /&gt;
=== Aiglondur ===&lt;br /&gt;
Description: A dwarf, the guard captain of the Eastern Gate. Young, intelligent, related to the clan chieftain. Dwarven society doesn't have a noble class as such, but Aiglondur is from one of its leading families and will have war-gear of the best quality. If weapons are in the portrait, his will be your standard Dwarvish double-bitted axe. Great-nephew of Lord Hamel and Captain of the east Gate. Unusual diplomatic type of dwarf.&lt;br /&gt;
&lt;br /&gt;
=== Angarthing ===&lt;br /&gt;
Description: A junior loremaster. Young but self-conscious about being an authority figure; will dress to look older than his actual age. Very intelligent and rigidly honorable. Should be sagelike or priestly in appearance with an especially long beard. If weapons are in the portrait, he uses a bolas and a morningstar — neither of them heavy as he is not a line fighter (he will wear only partial or light armor).&lt;br /&gt;
&lt;br /&gt;
In German: I let him cite &amp;quot;Stabreime&amp;quot; from time to time to introduce an old fashioned feeling. In the beginning (in Hamels court) he will stumble over the rimes but in the end he gained full authority. The biggest problem was to translate &amp;quot;I am a Witness&amp;quot; as there is no German equivalent having both flavors of jurisprudence and religion. I decided for introducing &amp;quot;Der Fels&amp;quot; -&amp;gt; &amp;quot;Ich bin Skalde - ich bin der Fels&amp;quot;, as the mountain/rock is something set in stone.&lt;br /&gt;
&lt;br /&gt;
In Greek: His translation was not as deliberate as the german one, since Middle-Age greek poetry sounds rather not-wesnoth. However his vocabulary is extended and more formal compared to the other characters. As for the &amp;quot;witness&amp;quot; part, it was a nightmare. I resorted to using an ancient greek term for witness (Προΐστωρ, Proistor) as a title (you know, like Steelclad, or Loremaster),which sounds really majestic, but translated the &amp;quot;I am a witness&amp;quot; part as it was, since the whole point was that, err, he was actually witnessing things.&lt;br /&gt;
&lt;br /&gt;
=== Ratheln ===&lt;br /&gt;
Description: Mage, sarcastic. A human mage and teacher of magic. A scholar but a very tough and experienced one — not someone to cross lightly. Good at heart but gruff and a bit irascible.&lt;br /&gt;
&lt;br /&gt;
=== Perrin ===&lt;br /&gt;
Description: The master of a school of magic. Wise and kindly. An Albus Dumbledore in Wesnoth, basically.&lt;br /&gt;
&lt;br /&gt;
=== Ollin ===&lt;br /&gt;
Description: Human peasant, refugee.&lt;br /&gt;
&lt;br /&gt;
In German: He may sound like a bondman/villain using a lot the term &amp;quot;Herr&amp;quot;, which sounds VERY servile and is not used any more nowadays but in posh haberdashers.&lt;br /&gt;
&lt;br /&gt;
=== Dulcatulos ===&lt;br /&gt;
Description: The dwarfish captain of Kal Kartha's guard at the West Gate, a good dwarf unknowingly working for an evil master. Aiglondur's counterpart, but a few years older and not as intelligent. Dwarvish soldier, battling through the ranks to become Captain, not born to be one.&lt;br /&gt;
&lt;br /&gt;
=== Karrag ===&lt;br /&gt;
Description: An evil dwarf-lord who uses a mask and spells of illusion to conceal the fact that he has in fact become a lich. The wrongness in this portrait should be much clearer.&lt;br /&gt;
&lt;br /&gt;
=== Pelias === &lt;br /&gt;
Description: A human lancer, who serves effectively as a royal courier, even if Tallin doesn't have the title of king.&lt;br /&gt;
&lt;br /&gt;
=== Elurin ===&lt;br /&gt;
Description: An Elvish Rider of high rank.&lt;br /&gt;
&lt;br /&gt;
=== Marth Tak ===&lt;br /&gt;
Description: An allied orcish chieftain, member of the Northern Alliance&lt;br /&gt;
&lt;br /&gt;
=== Hamel ===&lt;br /&gt;
Description: The same person as in Northern Rebirth, but a bit settled.&lt;br /&gt;
&lt;br /&gt;
=== Locations ===&lt;br /&gt;
A particularly difficult point in the greek translation was the name of the city &amp;quot;Dwarven Doors&amp;quot;. I finally went for Θυρόγαια (pronounced Thy-ró-ge-a), a word comprising of θυρα, ancient greek for door, and Gaia, greek for earth, soil. It should mean something like Doors of the earth, and it is the coolest-sounding word that still resembles an actual city name.&lt;br /&gt;
&lt;br /&gt;
== The South Guard ==&lt;br /&gt;
{{TranslatorCampaignBox &lt;br /&gt;
  | story         = South_Guard_story&lt;br /&gt;
  | walkthrough   = TheSouthGuard&lt;br /&gt;
  | dialogue      = CampaignDialogue:TSG&lt;br /&gt;
  | translatorlist= CampaignSouthGuard&lt;br /&gt;
  | discuss       = http://www.wesnoth.org/forum/viewtopic.php?f=22&amp;amp;t=10323&lt;br /&gt;
  | forumresource = Derived from story not the &lt;br /&gt;
  | campnick      = tsg&lt;br /&gt;
  | maintainer    = zookeeper&lt;br /&gt;
}}&lt;br /&gt;
=== Deoran ===&lt;br /&gt;
Description: Young, of noble birth - therefore he may appear a bit naiv in the beginning and may use a higher type of language - anyhow, he is a soldier at least by heart.&lt;br /&gt;
&lt;br /&gt;
=== Sir Gerrick ===&lt;br /&gt;
Description: Deorans mentor. An officer and hero - rather by deeds than birth; speaking blunt, if needed.&lt;br /&gt;
&lt;br /&gt;
=== Urza Afalas ===&lt;br /&gt;
Description: An outlaw-leader forced into the forests longing to return to civilization, even with lying. Somehow a normal person having a peasant's cunning.&lt;br /&gt;
&lt;br /&gt;
=== Ethiliel ===&lt;br /&gt;
Description: A big-headed female elf, disciple of Mebrin. Becoming more and more self-reliant and shakes off the elvish racist arrogance while living through its foul outcomes (Mal M'Brin, Itheldens War)&lt;br /&gt;
&lt;br /&gt;
=== Minister Hylas ===&lt;br /&gt;
Description: A white priest - high language.&lt;br /&gt;
&lt;br /&gt;
In German: There seems to be no good translation for the term &amp;quot;minister&amp;quot;. Neither &amp;quot;Vikar&amp;quot;, &amp;quot;Pfarrer&amp;quot;, &amp;quot;Pastor&amp;quot;, &amp;quot;Prediger&amp;quot; works properly imaging a fighting priest. I went for &amp;quot;Vater&amp;quot; / &amp;quot;Bruder&amp;quot; or &amp;quot;Pater&amp;quot; (as in &amp;quot;Bruder Tuck&amp;quot; or &amp;quot;Pater Brown&amp;quot;) and put it terminological close to moncs.&lt;br /&gt;
&lt;br /&gt;
=== Jarek ===&lt;br /&gt;
Description: A cavalry soldier. &lt;br /&gt;
&lt;br /&gt;
=== Urza Mathin ===&lt;br /&gt;
Description: An outlaw-leader without the brain of Urza Afalas. &lt;br /&gt;
&lt;br /&gt;
=== Queen Xeila ===&lt;br /&gt;
Description: Queen of a Naga-clan, hostile and speaking &amp;quot;snakish&amp;quot; with interfering &amp;quot;Hss&amp;quot;-sounds.&lt;br /&gt;
&lt;br /&gt;
In German: The &amp;quot;Hss&amp;quot;-sounds translate quite nice by lisping - but go for &amp;quot;Harry-Potter-Parselmouth&amp;quot; rather than &amp;quot;Terry-Pratchetts-Igor&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Mal M'Brin ===&lt;br /&gt;
Description: An elvish sage gone rogue and undead.&lt;br /&gt;
&lt;br /&gt;
=== Ithelden ===&lt;br /&gt;
Description: Elvish marshal, waging the &amp;quot;righteous war&amp;quot; against the humans.&lt;br /&gt;
&lt;br /&gt;
=== Eliomir ===&lt;br /&gt;
Description: Elvish ranger, helping Sir Gerrick.&lt;br /&gt;
&lt;br /&gt;
=== Eltenmir ===&lt;br /&gt;
&lt;br /&gt;
== Eastern Invasion ==&lt;br /&gt;
{{TranslatorCampaignBox &lt;br /&gt;
  | story         = EiStoryLine&lt;br /&gt;
  | walkthrough   = TheEasternInvasion&lt;br /&gt;
  | dialogue      = CampaignDialogue:EI&lt;br /&gt;
  | translatorlist= CampaignEasternInvasion&lt;br /&gt;
  | discuss       = http://www.wesnoth.org/forum/viewtopic.php?f=22&amp;amp;t=10325&lt;br /&gt;
  | forumresource = yet no used &lt;br /&gt;
  | campnick      = ei&lt;br /&gt;
  | maintainer    = zookeeper&lt;br /&gt;
}}&lt;br /&gt;
=== Dacyn ===&lt;br /&gt;
Description: Dacyn is a 92 years old white mage [http://forums.wesnoth.org/viewtopic.php?f=9&amp;amp;t=32728&amp;amp;p=473275&amp;amp;hilit=+Eastern+Invasion+#p473275].&lt;br /&gt;
&lt;br /&gt;
=== Gweddry ===&lt;br /&gt;
The main character of the campaign. A new commander who hasn't been trained much yet at the beginning of the campaign. Rather cowardly to start with, but experiences character growth.&lt;br /&gt;
&lt;br /&gt;
=== Owaec ===&lt;br /&gt;
Commander of the northern outpost. A noble of the horse clans.&lt;br /&gt;
&lt;br /&gt;
=== Mal-Ravanal ===&lt;br /&gt;
The ancient lich behind the titular Eastern Invasion and the main antagonist of the campaign. Had previously competed with Dacyn to be an advisor to the king, but then became evil and fled. In other words, the two of them have past history with one another. Mal-Ravanal is extremely powerful and can teleport. His forces also appear in Dead Water, although he himself does not.&lt;br /&gt;
&lt;br /&gt;
=== Konrad II ===&lt;br /&gt;
King of Wesnoth at the time; successor to Haldric VII (according to the timeline). Uses the [https://en.wikipedia.org/wiki/Royal_we royal &amp;quot;we&amp;quot;] in his speech.&lt;br /&gt;
&lt;br /&gt;
=== Grug ===&lt;br /&gt;
An ogre. Has rather stupid-sounding speech as many ogres do. In Grug's case, the stupidity comes from his mangling of syntax. Think like Yoda from Star Wars, except stupid instead of wise.&lt;br /&gt;
&lt;br /&gt;
=== Engineer ===&lt;br /&gt;
An unnamed Red Mage found in the Northlands. Speaks with a heavy accent. Offers to blow up a bridge in exchange for protection.&lt;br /&gt;
&lt;br /&gt;
=== Pelathsil ===&lt;br /&gt;
A xenophobic dwarf who fights against all who would encroach on what he considers dwarvish land. In English, he has the usual Scottish accent that most dwarves have.&lt;br /&gt;
&lt;br /&gt;
=== Mal-Skraat ===&lt;br /&gt;
One of Mal-Ravanal's underlings; seeks a promotion.&lt;br /&gt;
&lt;br /&gt;
=== Volas ===&lt;br /&gt;
Some random elf that Gweddry can possibly come across, depending on which branching story path he takes.&lt;br /&gt;
&lt;br /&gt;
=== Elandin ===&lt;br /&gt;
A xenophobic elf who fights against all who would encroach on what he considers elvish land.&lt;br /&gt;
&lt;br /&gt;
== Dead Water ==&lt;br /&gt;
{{TranslatorCampaignBox &lt;br /&gt;
  | story         = Dead_Water_Story&lt;br /&gt;
  | walkthrough   = Dead_Water&lt;br /&gt;
  | dialogue      = CampaignDialogue:DW&lt;br /&gt;
  | translatorlist= CampaignDeadWater&lt;br /&gt;
  | discuss       = http://forums.wesnoth.org/viewtopic.php?f=45&amp;amp;t=31304&lt;br /&gt;
  | forumresource = Derived from story not the &lt;br /&gt;
  | campnick      = dw&lt;br /&gt;
  | maintainer    = beetlenaut&lt;br /&gt;
}}&lt;br /&gt;
In German, I felt the need to introduce some more vocabulary related to the sea; mainly, I used Gwabbo for this purpose.&lt;br /&gt;
&lt;br /&gt;
=== Kai Krellis ===&lt;br /&gt;
Kai Krellis is the son of the King of the merfolk, who succeeds to the crown while being a child. &lt;br /&gt;
&lt;br /&gt;
In German, I changed the writing to &amp;quot;Cai&amp;quot;, as Kai is a common Christian name in German. But changing it to &amp;quot;Cai&amp;quot; looks old fashioned and it still sounds as an abbreviation to &amp;quot;Kaiser&amp;quot; (which is &amp;quot;Emperor&amp;quot; in German). So it fits quite nice.&lt;br /&gt;
&lt;br /&gt;
=== Cylanna ===&lt;br /&gt;
A mermaid priestess and a counselor to Kai Krellis. Should speak a high language.&lt;br /&gt;
&lt;br /&gt;
=== Gwabbo ===&lt;br /&gt;
A veteran of the merfolk fighters and a counselor to Kai Krellis. &lt;br /&gt;
&lt;br /&gt;
In German I added some &amp;quot;nautical wording&amp;quot; and went for a little north-german dialect as this one is related to the sea.&lt;br /&gt;
&lt;br /&gt;
=== Growloff ===&lt;br /&gt;
A weired person that tames sea monsters and argues resembling &amp;quot;Hagrid&amp;quot; from &amp;quot;Harry Potter&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Tyegëa ===&lt;br /&gt;
A mermaid high-priestess and the unknown grandmother to Kai Krellis. She is a bit unpredictable.&lt;br /&gt;
&lt;br /&gt;
In German I gave her a snobby attitude. Discussing with Cylanna, I tried to assume that they both still remember having a long lasting tiff (tendency &amp;quot;mother-in-law&amp;quot;, or &amp;quot;elder sister&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== Inky ===&lt;br /&gt;
Growloff's favourite &amp;quot;pet&amp;quot;, after the former's defeat, the latter is given to Kai Krellis' army and lives in the royal castle till his old age.&lt;br /&gt;
&lt;br /&gt;
=== Caladon ===&lt;br /&gt;
A middle aged Silver Mage who desires the Sword of Fire and to retrieve it he's willing to do anything.&lt;br /&gt;
&lt;br /&gt;
=== Keshan ===&lt;br /&gt;
A drake who has been prisoner of the Saurians and later disowned by his fellows for being merfolk's ally. He later comes back to Bilheld and becomes Drake's new leader.&lt;br /&gt;
&lt;br /&gt;
=== Siddry ===&lt;br /&gt;
A poacher, also kept prisoner by Saurians along with Keshan and Teelöa, who later helps merfolk to retrieve the Fire Sword.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Son of the Black Eye ==&lt;br /&gt;
{{TranslatorCampaignBox &lt;br /&gt;
  | story         = Black_Eye_story&lt;br /&gt;
  | walkthrough   = SonOfThe_BlackEye&lt;br /&gt;
  | dialogue      = CampaignDialogue:SOTBE&lt;br /&gt;
  | translatorlist= CampaignSonoftheBlackEye&lt;br /&gt;
  | discuss       = http://www.wesnoth.org/forum/viewtopic.php?f=22&amp;amp;t=10491&lt;br /&gt;
  | forumresource = http://forums.wesnoth.org/viewtopic.php?f=9&amp;amp;t=21569 &lt;br /&gt;
  | campnick      = sotbe&lt;br /&gt;
  | maintainer    = zookeeper&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
With Version 1.12, the city of &amp;quot;Dorset&amp;quot; is renamed to [http://forum.wesnoth.org/viewtopic.php?t=38187&amp;amp;p=548643#p549735 &amp;quot;Dorest&amp;quot;].&lt;br /&gt;
&lt;br /&gt;
=== Kapou'e ===&lt;br /&gt;
Description: He is an young orkish Chief, more intelligent than his fellow orks, but as ruthless as they are. A natural leader.&lt;br /&gt;
&lt;br /&gt;
In German: For Orks in general, I tried to stick to main clauses and tried to avoid subordinate clauses. Additionally, I aimed for ominous mystery-style-sentences (like &amp;quot;Wer Wind sät, wird Sturm ernten&amp;quot;). Of course, orcs are not &amp;quot;noble savages&amp;quot; (like Karl May's Winnetou), but the rest fits the &amp;quot;Böser Indianer&amp;quot;-stereotype (tribes, fighting each other, physical strength as important social attribute, brutality) from Karl May. Anyhow, this should not be overdone :).&lt;br /&gt;
&lt;br /&gt;
=== Grüü ===&lt;br /&gt;
Description: Grüü is a young troll who decides to join Kapoue's quest.&lt;br /&gt;
&lt;br /&gt;
In German, he uses a simplified and often wrong grammar that fits his simple approaches to reality, e.g. shown by Grüü in the scenario &amp;quot;Back home&amp;quot;: &amp;quot;Of course. Squash elves, squash undead, squash dwarves, squash humans. Squash them all, very good plan!&amp;quot;. He seems sometimes a little bit childish and simple, so the terms &amp;quot;tut/tun&amp;quot; and &amp;quot;kaputt&amp;quot; are used a lot.&lt;br /&gt;
&lt;br /&gt;
=== Howgarth III ===&lt;br /&gt;
Description: &amp;quot;Big, fairly pot-bellied, but powerful. Bearded, something of a wild man. [..] Wielding a big greatsword or claymore. Possibly leather armour, or leather-with-plates - fairly simple. He's Northern Alliance, which (depending on which version of the history you're working from) means he's from a relatively poor group descended from slaves, and fairly far from civilisation.&amp;quot; [http://www.wesnoth.org/forum/viewtopic.php?f=9&amp;amp;t=21569&amp;amp;st=0&amp;amp;sk=t&amp;amp;sd=a&amp;amp;start=81] &amp;quot;Howgarth. I was aiming for a slightly wild look, a bruiser rather than a thinker.&amp;quot; [http://www.wesnoth.org/forum/viewtopic.php?f=9&amp;amp;t=21569&amp;amp;st=0&amp;amp;sk=t&amp;amp;sd=a&amp;amp;start=97]&lt;br /&gt;
&lt;br /&gt;
=== Shan Taum ===&lt;br /&gt;
Description: &amp;quot;Arrogant, but smart orc with leadership qualities - opponent of Kapou'e and his late father; uses an offending and arrogant language.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Flar'Tar ===&lt;br /&gt;
Partner to Al'Brock. Prejudiced against trolls. Occasionally puts himself in more dangerous situations than Al'Brock does.&lt;br /&gt;
&lt;br /&gt;
=== Vrag ===&lt;br /&gt;
Description: A smart goblin rider, who favors evasive maneuvers over battles and is a counselor to Kapou'e.&lt;br /&gt;
&lt;br /&gt;
=== Earl Lanbec'h ===&lt;br /&gt;
The main antagonist of the campaign.&lt;br /&gt;
&lt;br /&gt;
=== Al'Brock ===&lt;br /&gt;
Description: &amp;quot;Flar'Tar came out tall and relatively skinny. I'd like Al'Brock to be short and dumpy, just for contrasting purposes =D&amp;quot; [http://www.wesnoth.org/forum/viewtopic.php?f=9&amp;amp;t=21569&amp;amp;st=0&amp;amp;sk=t&amp;amp;sd=a&amp;amp;start=81] &amp;quot;He looks like the 'GET OFF MOI LAAAAND' type =D&amp;quot; [http://www.wesnoth.org/forum/viewtopic.php?f=9&amp;amp;t=21569&amp;amp;st=0&amp;amp;sk=t&amp;amp;sd=a&amp;amp;start=87]&lt;br /&gt;
&lt;br /&gt;
=== Vraurk ===&lt;br /&gt;
Description: A young orcish shaman&lt;br /&gt;
&lt;br /&gt;
=== Pirk ===&lt;br /&gt;
Description: An orcish shaman&lt;br /&gt;
&lt;br /&gt;
=== Gork ===&lt;br /&gt;
Description: An old orcish shaman&lt;br /&gt;
&lt;br /&gt;
=== Jetto ===&lt;br /&gt;
Description: An assassin.&lt;br /&gt;
&lt;br /&gt;
== Under the Burning Sun ==&lt;br /&gt;
{{TranslatorCampaignBox &lt;br /&gt;
  | story         = UtBSStoryLine&lt;br /&gt;
  | walkthrough   = UnderTheBurningSuns&lt;br /&gt;
  | dialogue      = CampaignDialogue:UTBS&lt;br /&gt;
  | translatorlist= CampaignBurningSuns&lt;br /&gt;
  | discuss       = http://www.wesnoth.org/forum/viewtopic.php?f=22&amp;amp;t=10491&lt;br /&gt;
  | forumresource = yet no used &lt;br /&gt;
  | campnick      = utbs&lt;br /&gt;
  | maintainer    = cycholka&lt;br /&gt;
}}&lt;br /&gt;
=== Kaleh ===&lt;br /&gt;
=== Nym ===&lt;br /&gt;
=== Zhul ===&lt;br /&gt;
=== Garak ===&lt;br /&gt;
=== Elyssa ===&lt;br /&gt;
=== Eloh/Yechnagoth ===&lt;br /&gt;
=== Melusand ===&lt;br /&gt;
=== Esanoo ===&lt;br /&gt;
=== The Explorer ===&lt;br /&gt;
=== Grog ===&lt;br /&gt;
=== Rogrimir ===&lt;br /&gt;
=== Cloaked Figure/Keratur ===&lt;br /&gt;
=== Tanstafaal ===&lt;br /&gt;
=== Sergeant Durstrag ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[ProseStyle | Some introductory words on translation philosophy]]&lt;br /&gt;
* [[MainlineCampaigns | Mainline campaign hub for walkthrough, storyline and the developers discussion thread]]&lt;br /&gt;
* [[CampaignDialogue | Central campaign dialogue page]]&lt;br /&gt;
* [[RaceDescriptions-backstory | Background on Wesnoths races]] but see also [[Races]] and of course their [[SecretLore | Secret Lore]]&lt;br /&gt;
* [[History_of_Wesnoth]]&lt;br /&gt;
* Detailed campaign analysis by the stalled (?) Lore Collection Project [http://www.wesnoth.org/forum/viewtopic.php?f=32&amp;amp;t=26384 here] or [http://forums.wesnoth.org/viewtopic.php?f=32&amp;amp;t=26112&amp;amp;start=15 here] - preliminary analyses exist for [http://www.wesnoth.org/forum/download/file.php?id=34642 EI], [http://www.wesnoth.org/forum/download/file.php?id=33837 SoF], [http://www.wesnoth.org/forum/download/file.php?id=33835 DiD], [http://www.wesnoth.org/forum/download/file.php?id=32683 TRoW]. &lt;br /&gt;
* some technical help for translators might provide [[TranslatorShellscript]]&lt;br /&gt;
* [[TextdomainStatus]] will tell you, if it makes sense to translate a certain mainline campaign now, or to wait. &lt;br /&gt;
* Some entry points for forum discussions (from translators of different languages)  about &amp;quot;how to translate (Wose, Naga, Merfolk, etc.)&amp;quot; can be found in the [[TranslatorsGuide]] or use the [http://forums.wesnoth.org/search.php &amp;quot;search&amp;quot;] function of the forum board. &lt;br /&gt;
* An IC-Counterpart of this page is [[WesnothFigures]] (stub).&lt;br /&gt;
&lt;br /&gt;
[[Category:World of Wesnoth]]&lt;br /&gt;
[[Category:Translations]]&lt;br /&gt;
[[Category:Writing]]&lt;/div&gt;</summary>
		<author><name>Octalot</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=A_Tale_Of_Two_Brothers_Story&amp;diff=73180</id>
		<title>A Tale Of Two Brothers Story</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=A_Tale_Of_Two_Brothers_Story&amp;diff=73180"/>
		<updated>2024-06-29T16:03:46Z</updated>

		<summary type="html">&lt;p&gt;Octalot: Note story changes in 1.16 and 1.18&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the story of [[A Tale of Two Brothers]].&lt;br /&gt;
&lt;br /&gt;
Maghre was a sleepy, remote village in the western reaches of the Kingdom of Wesnoth. The wars and intrigue that plagued the Kingdom passed Maghre by with little impact. This sleepy existence was shattered when a dark mage moved into the area and began preying on the populace to satisfy the needs of his black magic.&lt;br /&gt;
&lt;br /&gt;
Baran was a local mage whom the people looked up to. He organized the villagers' defense but knew that old swords and pitchforks would not be enough. Baran contacted his brother Arvith for help; Arvith was the leader of a small troop of horsemen earning a living as caravan guards.&lt;br /&gt;
&lt;br /&gt;
Arvith heeded his brother's call and he and his company rushed to Baran's assistance.&lt;br /&gt;
&lt;br /&gt;
In 1.18, Baran contacts Arvith by the village's non-magical trade beacon. Older versions involved a magical amulet.&lt;br /&gt;
&lt;br /&gt;
== Rooting Out a Mage ==&lt;br /&gt;
Baran and Arvith set off to eliminate Mordak the Dark Mage. The plan is for Arvith's forces to distract Mordak's while Baran surprises the mage with a magical attack. All is going according to plan until Baran is captured and taken away to the north.&lt;br /&gt;
&lt;br /&gt;
== The Chase ==&lt;br /&gt;
&lt;br /&gt;
Arvith's chase of Baran's kidnappers leads him to an elf-occupied forest. The leader of the elves refuses passage and Arvith's company must defeat them before continuing after Baran's kidnappers. Arvith captures one of the kidnappers who reveals where Baran is being held.&lt;br /&gt;
&lt;br /&gt;
Since 1.16, the elves' motivation is that they suspect Baran of himself being a necromancer. In older versions, the leader of the elves had made a pact with the necromancers.&lt;br /&gt;
&lt;br /&gt;
== Guarded Castle ==&lt;br /&gt;
&lt;br /&gt;
With a mixture of force and cunning, Arvith's men break into the castle and rescue Baran.&lt;br /&gt;
&lt;br /&gt;
== Return to the Village ==&lt;br /&gt;
&lt;br /&gt;
Upon returning to Maghre, the brothers discover than an opportunistic Orcish Warlord has attacked. The village's defenders were depleted by the departure of Arvith's expedition and are barely holding. After subduing the Warlord, Baran is faced with leading his village through a time of rebuilding. It would be an arduous task, but Baran knew his brother would always respond to his call should the need arise once more.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Campaigns - Story Material]]&lt;br /&gt;
[[Category:Campaigns - A Tale of Two Brothers]]&lt;/div&gt;</summary>
		<author><name>Octalot</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=ATaleOfTwoBrothers&amp;diff=73179</id>
		<title>ATaleOfTwoBrothers</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=ATaleOfTwoBrothers&amp;diff=73179"/>
		<updated>2024-06-29T15:52:00Z</updated>

		<summary type="html">&lt;p&gt;Octalot: Cut and paste 1.19's note about the hard difficulty&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an easy campaign that is mainly intended to introduce new players to the mechanics of the game. This page is the walkthrough for it; for a recap of the story, see [[A Tale Of Two Brothers Story]]. For the campaign's dialogue, see [[CampaignDialogue:TB]].&lt;br /&gt;
&lt;br /&gt;
This campaign has only two difficulties, but with a large difference between them. The Grand Knight difficulty is intended for players who’ve already completed Liberty and Heir to the Throne.&lt;br /&gt;
&lt;br /&gt;
== Rooting Out a Mage ==&lt;br /&gt;
* '''Objectives:''' Defeat Mordak (L2 Dark Sorcerer)&lt;br /&gt;
* '''Lose if:''' Arvith dies or turns run out&lt;br /&gt;
* '''Turns:''' 18/18 (Easy/Hard)&lt;br /&gt;
* '''Starting Gold:''' 40/25 (Easy/Hard)&lt;br /&gt;
* '''Starting units:''' Arvith and lots of loyal units&lt;br /&gt;
&lt;br /&gt;
This is a plain vanilla scenario, with no surprise occurrences: Just you and the enemy leader and both your recruits. You start with a sizable advantage, though, in the form of a good number of loyal units: 4 Spearmen, 3 Horsemen, a Footpad and a Bowman (in addition to Arvith). If you level them up and recall them later, they will save you a lot of gold and enable recruiting more units throughout the game. &lt;br /&gt;
&lt;br /&gt;
A fundamental rule of any scenario is to pay attention to the time-of-day. All the enemy units are chaotic, and your spearmen, bowmen, and horsemen are lawful, while your footpads are chaotic. You will have the advantage during the day in general, and footpads can protect your other units at night. &lt;br /&gt;
&lt;br /&gt;
It pays to read each unit's description, especially their resistances. Some of them are obvious, like skeletons being resistant to piercing and weak to impact (it's hard to stab a bone!). But the resistances on other units are not so intuitive. In fact, impact damage is more effective than pierce against both ghouls and bats. In addition to being your only chaotic units, footpads are also your only source of impact damage, so they can actually be stronger attackers than spearmen or bowmen in this match up.  &lt;br /&gt;
&lt;br /&gt;
On Easy difficulty, you should be able to win this first scenario with just your initial loyal contingent and no recruiting. Hang back enough that the Undead can't reach you the first night, then attack at dawn:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Consider attacking the... !! Mostly with...   &lt;br /&gt;
|-&lt;br /&gt;
| Dark Adepts   || Spearmen         &lt;br /&gt;
|-&lt;br /&gt;
| Bats          || Bowmen, Footpads &lt;br /&gt;
|-&lt;br /&gt;
| Skeletons     || Footpads         &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
... and you can use your Horsemen on already-wounded units, when a single hit can finish them off.&lt;br /&gt;
&lt;br /&gt;
Alternatively, if you send 3 Horsemen North to lure the Undead, and the rest of your force Northwest along the river, you may be able to ambush Mordak in his castle. &lt;br /&gt;
&lt;br /&gt;
Also note that there is a keep with 3 castle tiles between your starting keep and the enemy keep. For a very aggressive strategy, you can move Arvith to that position early and recruit your reinforcements there instead of at your starting keep, so they can get into combat sooner. &lt;br /&gt;
&lt;br /&gt;
On Hard difficulty, you're probably going to need reinforcements: Footpads are especially useful, since the rest of your army depends on pierce attacks and struggles against skeletons. Horsemen can also be useful if you want to distract most of the enemy with your other units and send all your horse units to assassinate Mordak early. &lt;br /&gt;
&lt;br /&gt;
You might have an opportunity to send in your Horsemen and take out Mordak around halfway through the scenario - if the Undead focus on a certain path of attack. But it is probably wiser to spend the extra turns gather XP towards leveling-up units with blade attacks (Horsemen to Knights, Spearmen to Swordsmen). Leveling up Arvith to a Paladin gives you access to an Arcane attack which is even more effective than impact against skeletons and ghosts. A leveled-up Footpad or two by the [[#Guarded_Castle| third scenario]] would also prove useful.&lt;br /&gt;
&lt;br /&gt;
Mordak is very passive, unlike the leaders in some other scenarios. He will never attack or move. This makes it easy to give the kill to the exact unit that you want.&lt;br /&gt;
&lt;br /&gt;
== The Chase ==&lt;br /&gt;
* '''Objectives:''' Get through the woods to the kidnappers, then defeat the Dark Adept&lt;br /&gt;
* '''Lose if:''' Arvith dies or turns run out&lt;br /&gt;
* '''Turns:''' 28/24 (easy/hard)&lt;br /&gt;
* '''Starting units:''' Arvith and a horseman&lt;br /&gt;
* '''Other:''' Remember the passwords&lt;br /&gt;
&lt;br /&gt;
Time of day is less important in this scenario, since the elves are neutral and they will attack you so early that you won't really be able to choose when to engage with them. Here, managing terrain and maneuverability is more important. The elvish riders have much more movement than your units, and they are not slowed down by forests. They also get very high defense in forests, unlike your own horsemen. Use zone of control to block the riders' movement, and try to lure them onto open terrain so you can take them down quickly. &lt;br /&gt;
&lt;br /&gt;
Knowing each unit's resistances is again very important. You are only facing one wose, but it will give you a very hard time if you haven't yet leveled any spearmen or horsemen to get bladed weapons. The elvish riders are weak to piercing, just like your own horsemen, so spearmen and bowmen are useful against them. &lt;br /&gt;
&lt;br /&gt;
The elves are too aggressive for their own good.  Keep your units in line- or V-shaped formations with one or both ends anchored on a village; Elvish Scouts/Riders will charge in by ones or twos and you should be able to swarm them. &lt;br /&gt;
&lt;br /&gt;
Again, avoid fighting the undead at the north map edge at night, unless you have a lot of footpads.  Otherwise, let your main body catch up with your cavalry and surround them. When you prevail, make a note of the passwords.&lt;br /&gt;
&lt;br /&gt;
On hard, a good strategy is to recruit lots of Spearmen and Bowmen to wound the Elvish Riders, and finish them off with your leader or another Knight. Ideally, you'll have a Paladin by the time you hit the undead in the next scenario. Paladins are your only possible source of arcane damage, which is very useful against undead. &lt;br /&gt;
&lt;br /&gt;
It might be a good idea to sacrifice some units as a distraction, but make sure you move enough troops north to take out the undead leader, which will be guarded by two skeletons (''easy mode'') or two revenants (''hard mode'').&lt;br /&gt;
&lt;br /&gt;
At the start of the scenario, the top half of the map is covered by shroud. After you move a unit far enough north, it reveals a dark adept and his bodyguards, and then they will start advancing toward you. Killing the dark adept ends the scenario, but he hides behind the skeletons as much as possible so you will probably need to take them out too. &lt;br /&gt;
&lt;br /&gt;
Keep in mind that Arvith can recruit at the elf leader's keep, so if you've managed your income well, you can recruit some last minute footpads before you face the skeletons. Recalling loyal units at the start of this scenario helps save up enough gold to get those new recruits 10-20 turns later. &lt;br /&gt;
&lt;br /&gt;
Make sure to write down the passwords at the end of the scenario! They change every time you play through, and being able to remember them is significant for the next scenario. &lt;br /&gt;
&lt;br /&gt;
On ''easy'', an Iron Mauler named Brena will show up at the end of the scenario and ask to join your party. Iron Maulers are powerful level-3 units with a very strong melee attack and good physical defense, but they lack a ranged attack, and are slow (base movement of 4). Whether it's best to accept him or not depends on your playing style, but if you think you can live with his very limited speed, letting Brena join up is probably for the best. If you do accept him, he will be available in the next scenario as a loyal unit. If you refuse his offer, he will give you 70 pieces of gold. Regardless of the choice you make, you will be given the ability to recruit Heavy Infantryman units.&lt;br /&gt;
&lt;br /&gt;
== Guarded Castle ==&lt;br /&gt;
&lt;br /&gt;
* '''Objectives:''' Defeat the L2 Dark Sorcerer to get the key, then have Arvith unlock Baran's cell&lt;br /&gt;
* '''Lose if:''' Arvith dies or turns run out&lt;br /&gt;
* '''Turns:''' 30/24 (Easy/Hard)&lt;br /&gt;
* '''Starting Gold:''' 170/120 (Easy/Hard)&lt;br /&gt;
* '''Starting units:''' Arvith&lt;br /&gt;
&lt;br /&gt;
You start outside an enlarged castle - not 7 hexes, but half the map.&lt;br /&gt;
&lt;br /&gt;
'''Castle exterior'''&lt;br /&gt;
&lt;br /&gt;
The outside is just countryside with villages and nothing of interest... except for stealthy patrols. Those will accost you on two occasions, demanding a password. If you give the correct passwords, you will be left alone to prepare your troops undisturbed. However, if you're up to the challenge, and want to earn some extra experience for your units, you can deliberately give the wrong passwords, and then you'll fight the guards that asked you for them. On Hard, these are:&lt;br /&gt;
&lt;br /&gt;
* First patrol: Assassin (L3), 3 Bandits (L2).&lt;br /&gt;
* Second patrol: Rogue (L2), 2 Bandits, 1 Thug.&lt;br /&gt;
&lt;br /&gt;
If you decide to fight the first group of guards, you will be visited by the second group on turn 6, otherwise the second group will come at turn 3. Also, these fights will afford the enemy leader enough gold for a few additional recruits.&lt;br /&gt;
&lt;br /&gt;
'''Castle interior'''&lt;br /&gt;
&lt;br /&gt;
Inside the castle inside you have Orcish guard at the entrance: 2 Orc Warriors, 3 Orcish Grunts (on Hard), and Mordak's mournful brother, an L2 Dark Sorcerer, is deeper inside, with 100 gold to recruit Undead. Nothing you can't handle!&lt;br /&gt;
&lt;br /&gt;
The castle inside is Dark, meaning that units fight as if it were night at all times of day. Fortunately, though, the position of most of the guards is still lit, and so are the castle hexes just below from which you will be attacking.&lt;br /&gt;
&lt;br /&gt;
At the Northeastern edge you have a chamber with a treasure chest (50 gold); at the Northwestern edge is the cell holding Baran.&lt;br /&gt;
&lt;br /&gt;
Note that the undead units will come out and attack you normally, but each orc unit will stay still until you put a unit within its movement range. This lets you take your time and lure them out into the open during daytime to take them out more easily. &lt;br /&gt;
&lt;br /&gt;
'''Strategy'''&lt;br /&gt;
&lt;br /&gt;
On _Easy difficulty_, one castleful of recruits should be enough to complete the scenario. Experiment with Heavy Infantry - they do well against both Orcs and Undead. &lt;br /&gt;
&lt;br /&gt;
Inside the castle, you can get to Baran's cell without fighting the enemy leader, but you have to kill the leader for the key anyway. After killing the enemy leader, you're given a few extra turns, which should be enough time to move Arvith west to Baran's cell, and a fast unit east to get the treasure chest. &lt;br /&gt;
&lt;br /&gt;
On _Hard difficulty_, you don't have any Heavy Infantry to hide behind. Footpads / Outlaws, are somewhat of a replacement - dealing impact damage, positively effected by the dim castle atmosphere, and even with high defense. However - they have a knack for succumbing to a sequence of several hits, dying faster than you would expect. So - if you're recruiting mostly, you'll need some cannon fodder.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Whether you've recruited or recalled - better have a Footpad or Outlaw. You can send it as a feint to one side of the castle, keeping some Undead busy chasing it, while moving Knights up along the other side (the Sorcerer's chamber has two entrances); and if you manage to level your Footpad up, you will enjoy its defensive capabilities in the final scenario.&lt;br /&gt;
&lt;br /&gt;
There are several villages outside of the castle, so if you still have many loyal units you can actually accumulate some gold while you fight the orcs, and then Arvith can quickly return to his keep to recruit reinforcements for taking out the leader. One effective strategy is recruiting bowmen at first for the orcs, and then footpads later for the undead.&lt;br /&gt;
&lt;br /&gt;
== Return to the Village ==&lt;br /&gt;
* '''Objectives:''' Find out what is happening in the village then defeat the Orcish Warlord&lt;br /&gt;
* '''Lose if:''' Arvith or Baran die or turns run out&lt;br /&gt;
* '''Turns:''' 26/24 (easy/hard)&lt;br /&gt;
* '''Starting units:''' Arvith and Baran&lt;br /&gt;
&lt;br /&gt;
There is no need to conserve gold in the last scenario, so recall all of your veterans. Loyal units are also less relevant, since it is a fast scenario without too many villages. &lt;br /&gt;
&lt;br /&gt;
North of your starting keep is your ally, the beleaguered defenders of Maghre. East of you, across the mountains, is the enemy, a lvl 3 orc warlord who recruits lots of tough lvl 2 orcish warriors and crossbowmen. &lt;br /&gt;
&lt;br /&gt;
There are 2 basic approaches to this scenario. One is to take your army northward ASAP to save the defenders before they are overwhelmed by orcs, then turn east and finish off the orcish leader. The other is to abandon your ally, sneak your army around the southeast side of the map, and surprise attack the orc leader once his forces are all far away crushing your ally. If you have a lot of gold to spare, you can also try a combination of the two. There is no penalty for your ally dying in this scenario; only Baran and Arvith need to survive. Keep in mind that Horsemen and their advancements cannot travel through mountains. &lt;br /&gt;
&lt;br /&gt;
Baran is a lvl 2 Red Mage, and his attack is Magical, so he is very good for attacking enemies in villages or other high defense terrain, just be sure to protect him from counterattack! &lt;br /&gt;
&lt;br /&gt;
Time of day is again very important, especially for taking out the orc leader. He does ridiculous damage at night, so try using some sacrificial unit to lure him on to low-defense terrain at Dawn or Morning and then swarm him with Lawful units. &lt;br /&gt;
&lt;br /&gt;
[[Category:Campaigns - Walkthroughs]]&lt;br /&gt;
[[Category:Campaigns - A Tale of Two Brothers]]&lt;/div&gt;</summary>
		<author><name>Octalot</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=StandardLocationFilter&amp;diff=73047</id>
		<title>StandardLocationFilter</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=StandardLocationFilter&amp;diff=73047"/>
		<updated>2024-05-22T21:57:59Z</updated>

		<summary type="html">&lt;p&gt;Octalot: /* Attributes */ Clarify that find_in is looking for x,y= rather than location_id=&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WML Tags}}&lt;br /&gt;
From [[FilterWML]], this is the standard way of filtering on locations.&lt;br /&gt;
The term [[StandardLocationFilter]] means that the set of such keys and tags (see below) can appear at that point. Sometimes a [[StandardLocationFilter]] needs to be included in a [filter_location] tag. There are however many tags which accept the [[StandardLocationFilter]] directly as an argument such as [store_locations]. Generally, if the tag [filter_location] is not mentioned to be a possible subtag of the outer tag in question, then don't put it.&lt;br /&gt;
&lt;br /&gt;
== Attributes ==&lt;br /&gt;
The following attributes and sub-tags are permitted:&lt;br /&gt;
&lt;br /&gt;
* '''time_of_day''': filter matches only on a given time of day (one of lawful, chaotic, or neutral). Note: ''chaotic'', ''lawful'', and ''neutral''; these are not times of day, these are ''alignments''. To match against 'dawn', 'dusk', 'first watch' etc., use the '''time_of_day_id''' key described below.&lt;br /&gt;
* '''time_of_day_id''': this accepts a list of one or more actual times of day, separated by commas. These IDs are taken from '''data/core/macros/schedules.cfg'''. Permissible values are case-sensitive: dawn, morning, afternoon, dusk, first_watch, second_watch, indoors, underground and deep_underground.&lt;br /&gt;
* '''terrain''': comma separated list of terrains. (See also: [[#Filtering_Terrains|Filtering Terrains]]).&lt;br /&gt;
* '''x,y''': the same as in the unit filter; supports any range ([[StandardLocationFilter#Notes_about_Coordinate_Usage|notes]])&lt;br /&gt;
* '''location_id''': {{DevFeature1.13|?}} Matches a special location set in the map. This can also be a side number to match that side's starting location. Note: this does not accept a comma separated list, one has to use [or] tags. {{DevFeature1.15|0}} Accepts a comma separated list.  This key can be set in the map editor or with the [terrain] tag.&lt;br /&gt;
* '''area''': matches locations assigned to the [[DirectActionsWML#.5Btime_area.5D|[time_area]]] with the given id.&lt;br /&gt;
* '''include_borders''': {{DevFeature1.13|0}} whether the SLF will include border hexes or not. Will override the default behavior of the tag this appears in.&lt;br /&gt;
* '''[filter]''' with a [[StandardUnitFilter]] as argument; if present a unit must also be there&lt;br /&gt;
* '''owner_side''': If a valid side number, restricts stored locations to villages belonging to this side. If 0, restricts to all unowned locations (the whole map except villages which belong to some valid side). A hex is considered a village if and only if its [ [[TerrainWML|terrain_type]] ]gives_income= parameter was set to yes (which means a side can own that hex).&lt;br /&gt;
* '''gives_income''': {{DevFeature1.15|11}} Matches whether or not a hex gives income, based on its terrain_type settings.&lt;br /&gt;
* {{anchor|filter_vision|'''[filter_vision]'''}}: this tests whether or not the location is currently visible&lt;br /&gt;
** '''visible''': yes or no, default yes. &amp;quot;yes&amp;quot; filters for visible locations, &amp;quot;no&amp;quot; filters for invisible locations.&lt;br /&gt;
** '''respect_fog''': yes or no, default yes. &amp;quot;yes&amp;quot; filters for locations that are clear of both fog and shroud, &amp;quot;no&amp;quot; filters for locations that are clear of shroud.&lt;br /&gt;
** [[StandardSideFilter]] tags and keys as arguments. If there is '''at least one''' matching side which can see the location then the filter matches, and otherwise it fails to match.&lt;br /&gt;
* {{anchor|filter_owner|'''[filter_owner]'''}}: If present, inline owner_side= is ignored. Restricts stored locations to villages, each of which must belong to any of the matching sides. If no sides match, restricts to unowned villages (and only these).&lt;br /&gt;
**'''[[StandardSideFilter]]''' tags and keys as arguments&lt;br /&gt;
* '''find_in''': name of an array or container variable; if present, the location will not match unless it is also found stored in the variable. Expects containers to contain '''x''','''y''' pairs, not '''location_id''' names.&lt;br /&gt;
* '''radius''': matches if any location within the radius matches this filter ([[StandardLocationFilter#Notes_about_Radius_Usage|notes]])&lt;br /&gt;
* {{anchor|filter_radius|'''[filter_radius]'''}}: a standard location filter; normally the radius extends outwards from matching locations one step at a time without checking any additional information-- however, if this tag is present, the radius will be restricted so that it can only expand outwards in the directions where it passes the given location filter&lt;br /&gt;
* '''[and]''': an extra location filter. Unless a location matches the [and] filter, then it will be excluded. ''Note: [and],[or],and [not] extra location filters are considered after everything else in the containing filter (except radius, which is considered last in 1.3.8 and greater); they are then processed in the order encountered.''&lt;br /&gt;
* '''[or]''': an extra location filter. If a location matches the [or] filter, then it will count as a match regardless of conditions in previous filters or the containing filter.&lt;br /&gt;
* '''[not]''': an extra location filter. If a location matches the [not] filter, then that location will be excluded.&lt;br /&gt;
* {{anchor|filter_adjacent_location|'''[filter_adjacent_location]'''}}: a standard location filter; if present the correct number of adjacent locations must match this filter&lt;br /&gt;
** '''count''': a number, range, or comma separated range; default &amp;quot;1-6&amp;quot;&lt;br /&gt;
** '''adjacent''': a comma separated list of directions; default &amp;quot;n,ne,se,s,sw,nw&amp;quot; (see [[#Directions|notes]])&lt;br /&gt;
* '''formula''': {{DevFeature1.13|5}} a [[Wesnoth Formula Language]] formula. Some terrain-specific variables, for example &amp;quot;light&amp;quot; and &amp;quot;castle&amp;quot;, can be used in the filter [[#Wesnoth_Formula_Language|(see list below)]]. Do not surround the formula in &amp;lt;code&amp;gt;$(...)&amp;lt;/code&amp;gt;, since that will erase the &amp;lt;tt&amp;gt;self&amp;lt;/tt&amp;gt; variable.&lt;br /&gt;
* '''lua_function''': {{DevFeature1.13|5}} the name of a [[LuaWML|Lua]] function in the global environment that takes arguments &amp;lt;code&amp;gt;x, y&amp;lt;/code&amp;gt; and returns true if the given location matches the filter. Non-global functions can now be used here by building a dot-separated &amp;quot;path&amp;quot;. Note that this is not actually interpreted as Lua code even though it superficially resembles it, so using a Lua keyword in the path will work, for example &amp;quot;my_filter_functions.goto&amp;quot; will correctly use the function which in actual Lua code would need to be referenced as &amp;lt;code&amp;gt;my_filter_functions[&amp;quot;goto&amp;quot;]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Notes about Coordinate Usage==&lt;br /&gt;
&lt;br /&gt;
When specifying coordinates, the following keys are used:&lt;br /&gt;
* '''x''': the first coordinate&lt;br /&gt;
* '''y''': the second coordinate&lt;br /&gt;
&lt;br /&gt;
While some locations should only be one hex (like the starting position of a unit),&lt;br /&gt;
others filter over multiple hexes.&lt;br /&gt;
The following syntax is used to filter over multiple hexes:&lt;br /&gt;
&lt;br /&gt;
Dashes('''-''') are used to have the location be a range of hexes.&lt;br /&gt;
There must be values before and after the dash;&lt;br /&gt;
everything in between these numbers (inclusively) is part of the range.&lt;br /&gt;
&lt;br /&gt;
Commas(''',''') are used to separate coordinates into a list.&lt;br /&gt;
The '''x''' and '''y''' lists are then paired up, with each pair representing one hex or range. &lt;br /&gt;
E.g. in order to specify multiple locations 1,4 and 2,5, use:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang='wml'&amp;gt;&lt;br /&gt;
[tag]&lt;br /&gt;
    x=1,2&lt;br /&gt;
    y=4,5&lt;br /&gt;
[/tag]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should have the same number of commas in each list, and both '''x''' and '''y''' are always lists. For example, this does not mean the locations (1,4) and (2,4):&lt;br /&gt;
&amp;lt;syntaxhighlight lang='wml'&amp;gt;&lt;br /&gt;
[tag]&lt;br /&gt;
    x=1,2&lt;br /&gt;
    y=4    # bad example, implementation-defined behavior&lt;br /&gt;
[/tag]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A pair can have a single value for one coordinate and a range for the other. This matches (1,4) and the entire column from (2,1) downwards:&lt;br /&gt;
&amp;lt;syntaxhighlight lang='wml'&amp;gt;&lt;br /&gt;
[tag]&lt;br /&gt;
    x=1,    2&lt;br /&gt;
    y=4,1-999&lt;br /&gt;
[/tag]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Providing only '''x''' or only '''y''' is valid. This matches the entire columns from (1,1) and (2,1) downwards:&lt;br /&gt;
&amp;lt;syntaxhighlight lang='wml'&amp;gt;&lt;br /&gt;
[tag]&lt;br /&gt;
    x=1,2&lt;br /&gt;
[/tag]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: although the ordering of locations in a list generally does not matter,&lt;br /&gt;
the action '''[move_unit_fake]''' takes in a list of hexes,&lt;br /&gt;
and moves an image onto each of those hexes in order.&lt;br /&gt;
&lt;br /&gt;
==Notes about Radius Usage==&lt;br /&gt;
If you aren't storing any locations successfully, it may be because you put the radius or filters in the wrong place for them to combine correctly.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang='wml'&amp;gt;&lt;br /&gt;
[have_location]&lt;br /&gt;
    terrain=Gg^Vh&lt;br /&gt;
    [and]&lt;br /&gt;
        x=$x1&lt;br /&gt;
        y=$y1&lt;br /&gt;
       radius=1&lt;br /&gt;
    [/and]&lt;br /&gt;
[/have_location]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the use of [and] here causes the radius to have a very different meaning. Normally, all of the criteria besides radius are checked, producing a set of hexes to which the radius is applied. This means, for example, that if you're trying to find &amp;quot;a hex without a unit on it within 5 hexes of (15, 23)&amp;quot;, the code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang='wml'&amp;gt;&lt;br /&gt;
[have_location]&lt;br /&gt;
    x,y=15,23&lt;br /&gt;
    radius=5 # oops... this time it won't work as expected&lt;br /&gt;
    [not]&lt;br /&gt;
        [filter]&lt;br /&gt;
        [/filter]&lt;br /&gt;
    [/not]&lt;br /&gt;
[have_location]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
will not work! First, it looks for a hex with x=15, y=23 without a unit on it. Then, it returns that hex and all hexes within 5 of it. If (15, 23) happens to be occupied, then it will return no hexes, because &amp;quot;all hexes within 5 hexes of (no hexes)&amp;quot; is still &amp;quot;no hexes&amp;quot;. Instead, put an [and] around the x,y and radius requirements, and it will separately find &amp;quot;(15, 23) and all hexes within 5 of it&amp;quot; and &amp;quot;each of those hexes that doesn't have a unit on it&amp;quot;, producing the desired result.&lt;br /&gt;
&lt;br /&gt;
== Directions ==&lt;br /&gt;
&lt;br /&gt;
Some attributes expect a direction or list of directions. Valid base directions are n, ne, nw, s, se, sw, and there are three operators supported as well:&lt;br /&gt;
&lt;br /&gt;
* To take the opposite direction, use - (eg -n is the same as s)&lt;br /&gt;
* {{DevFeature1.13|2}} To rotate clockwise, use :cw (eg n:cw is the same as ne)&lt;br /&gt;
* {{DevFeature1.13|2}} To rotate counterclockwise, use :ccw (eg n:ccw is the same as nw)&lt;br /&gt;
&lt;br /&gt;
You can't apply multiple rotation operators - for example, &amp;quot;n:cw:ccw&amp;quot; is not a valid direction. If for some reason you really need multiple rotations, you can use parentheses (so, &amp;quot;(n:cw):ccw&amp;quot; is valid and is the same as n). Similarly, &amp;quot;--n&amp;quot; is not valid, but &amp;quot;-(-n)&amp;quot; is valid and is the same as n.&lt;br /&gt;
&lt;br /&gt;
This syntax is mainly useful when used in conjunction with variable substitution in the adjacent key in [filter_adjacent_location] and in [filter_adjacent] (in [[StandardUnitFilter]]), but will work anywhere a direction is expected. For example, using [modify_unit] to change a unit's direction:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang='wml'&amp;gt;&lt;br /&gt;
[modify_unit]&lt;br /&gt;
    [filter]&lt;br /&gt;
        # ... Whatever filter you need&lt;br /&gt;
    [/filter]&lt;br /&gt;
    facing=-$this_unit.facing&lt;br /&gt;
[/modify_unit]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That will cause the matched units to turn around.&lt;br /&gt;
&lt;br /&gt;
== Filtering Terrains ==&lt;br /&gt;
&lt;br /&gt;
The '''terrain=''' key allows you to filter based on the terrain of a space, for example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang='wml'&amp;gt;&lt;br /&gt;
[event]&lt;br /&gt;
    [filter]&lt;br /&gt;
        [filter_location]&lt;br /&gt;
            terrain=Ch &lt;br /&gt;
        [/filter_location]&lt;br /&gt;
    [/filter]&lt;br /&gt;
[/event]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At some places the terrains can be filtered with a match list. This list is a comma separated list of [[TerrainCodesWML|terrain strings]] and patterns which will be processed in order. As soon as a pattern matching the reference terrain is found, the result of the filter will be determined.&lt;br /&gt;
&lt;br /&gt;
Normally, if one of the patterns matches, the filter is considered successful. However, the special pattern &amp;lt;tt&amp;gt;!&amp;lt;/tt&amp;gt; inverts this every time it is encountered &amp;amp;ndash; when inverted, the filter is considered ''unsuccessful'' when one of the patterns matches. In other words, &amp;lt;tt&amp;gt;Gg&amp;lt;/tt&amp;gt; matches only basic grass, while &amp;lt;tt&amp;gt;!,Gg&amp;lt;/tt&amp;gt; matches ''anything but'' basic grass.&lt;br /&gt;
&lt;br /&gt;
When the end of the list is reached without any matches, normally the result is an unsuccessful match. However, if the match is currently inverted, ie there are an odd number of &amp;lt;tt&amp;gt;!&amp;lt;/tt&amp;gt;, then the result is a successful match.&lt;br /&gt;
&lt;br /&gt;
An individual terrain pattern consists of two parts, the base and the overlay, separated by the &amp;lt;tt&amp;gt;^&amp;lt;/tt&amp;gt; character. The overlay (including the preceding &amp;lt;tt&amp;gt;^&amp;lt;/tt&amp;gt;) is optional; if omitted, only terrains without overlays can be matched. The pattern may end with the wildcard character &amp;lt;tt&amp;gt;*&amp;lt;/tt&amp;gt; (or be composed solely of the wildcard character). The pattern to match any terrain is &amp;lt;tt&amp;gt;*^*&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Example 1:&amp;lt;/b&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
ww* matches ww, www, wwW but not WWW &amp;lt;br&amp;gt;&lt;br /&gt;
!, ww returns false if ww found and true if not &amp;lt;br&amp;gt;&lt;br /&gt;
!, ww, wa, !, aa returns false if ww or wa found and true if aa found and false if none found.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Example 2:&amp;lt;/b&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;^V* matches all village-terrain &amp;lt;br&amp;gt;&lt;br /&gt;
Notice how the * can be used separately for both layers (base and overlay layers are separated by the ^-character).&lt;br /&gt;
&lt;br /&gt;
For a list of terrain types and their string codes see [[TerrainCodesWML|TerrainCodesWML]].&lt;br /&gt;
&lt;br /&gt;
== Wesnoth Formula Language ==&lt;br /&gt;
&lt;br /&gt;
When using SLF's '''formula''' attribute, the context object is a '''terrain hex object''' with the following properties:&lt;br /&gt;
&lt;br /&gt;
* '''x''', '''y''', '''loc''': the latter is a '''location object''' such as what would be returned by [[Wesnoth_Formula_Language#loc|loc()]].&lt;br /&gt;
* '''id'''&lt;br /&gt;
* '''name'''&lt;br /&gt;
* '''editor_name'''&lt;br /&gt;
* '''description'''&lt;br /&gt;
* '''icon'''&lt;br /&gt;
* '''light'''&lt;br /&gt;
* '''village''': a boolean containing the value of [terrain_type]gives_income=&lt;br /&gt;
* '''castle'''&lt;br /&gt;
* '''keep'''&lt;br /&gt;
* '''healing''': an integer containing the value of [terrain_type]heals=&lt;br /&gt;
* '''owner_side'''&lt;br /&gt;
&lt;br /&gt;
For an up-to-date list, check the C++ function terrain_callable::get_value(const std::string&amp;amp; key) const.&lt;br /&gt;
&lt;br /&gt;
Some location formulas also have access to a '''teleport_unit''' variable, which is a '''[[StandardUnitFilter#Wesnoth_Formula_Language|unit object]]'''.&lt;br /&gt;
&lt;br /&gt;
== Tutorial ==&lt;br /&gt;
* [[FilterWML/Examples_-_How_to_use_Filter|How To Use Filter (with examples)]]&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[FilterWML]]&lt;br /&gt;
&lt;br /&gt;
[[Category: WML Reference]]&lt;/div&gt;</summary>
		<author><name>Octalot</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=1.19_Roadmap&amp;diff=73021</id>
		<title>1.19 Roadmap</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=1.19_Roadmap&amp;diff=73021"/>
		<updated>2024-05-11T10:10:11Z</updated>

		<summary type="html">&lt;p&gt;Octalot: /* 1.19.20 */ Search for unused translatable strings&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for consolidating and planning when new features and fixes are intended to land in the 1.19 development branch. The release schedule for Development releases can be found [https://forums.wesnoth.org/viewtopic.php?f=2&amp;amp;t=52785 here (link is to the 1.17 page, might change for 1.19)].&lt;br /&gt;
&lt;br /&gt;
== Instructions ==&lt;br /&gt;
Place the feature or fix you intend to implement within the section of the point release that you intend to have it implemented by, as well as your forum username in parenthesis after the feature description. The point release something is planned to be released with is not set in stone, and can be updated as needed depending on the circumstances.&lt;br /&gt;
&lt;br /&gt;
This is just an outline currently, with some point releases for the early, middle and late parts of the branch.&lt;br /&gt;
&lt;br /&gt;
== Note on Single-Player Campaign Reworks ==&lt;br /&gt;
&lt;br /&gt;
We have some campaign reworks planned and in-progress.&lt;br /&gt;
&lt;br /&gt;
In-progress: The South Guard, The Deceiver's Gambit (DM replacement), The Rise of Wesnoth&lt;br /&gt;
In-progress but slower development: Legend of Wesmere (reworked to SP entirely), Heir to the Throne (grand overhaul)&lt;br /&gt;
Planned but no progress yet: Angel of Ashes (AoA) (Ashievere-centric campaign)&lt;br /&gt;
&lt;br /&gt;
The first three (TSG, TDG and TRoW) might have higher chances of getting into 1.19.x cycle before any of the others.&lt;br /&gt;
The other three might be going into 1.21.x so have been mentioned here just to prepare for an unprecedented development allowances (more assistance in coding, accelerated development speed, etc).&lt;br /&gt;
&lt;br /&gt;
If you have inquiries on the reworks, contact SP rework team leaders (forums/discord): Nemaara/Yumi (TSG, TRoW, AoA), Dalas (TDG, HttT), Lord-Knightmare (LoW-rework).&lt;br /&gt;
&lt;br /&gt;
== 1.19.0 ==&lt;br /&gt;
* Move the Dunefolk into Default Era (Pentarctagon)&lt;br /&gt;
&lt;br /&gt;
== 1.19.1 ==&lt;br /&gt;
* [https://github.com/wesnoth/wesnoth/pull/6826 #6826] Merge hardware accelerated unit submerge effect, if possible (Pentarctagon)&lt;br /&gt;
** Completed in [https://github.com/wesnoth/wesnoth/pull/8687 #8687].&lt;br /&gt;
&lt;br /&gt;
== 1.19.2 ==&lt;br /&gt;
* Finish adding ability/weapon special unit tests (Pentarctagon)&lt;br /&gt;
&lt;br /&gt;
== 1.19.3 ==&lt;br /&gt;
* Investigate replacing mariadbpp with Boost.MySql (Pentarctagon)&lt;br /&gt;
&lt;br /&gt;
== 1.19.5 ==&lt;br /&gt;
* [https://github.com/wesnoth/wesnoth/pull/6512 #6512] New type of deprecation warning, when a deprecated attribute is used alongside its replacement (octalot)&lt;br /&gt;
* [https://github.com/wesnoth/wesnoth/pull/7082 #7082] Get wmllint running against mainline during CI with no errors (Pentarctagon)&lt;br /&gt;
&lt;br /&gt;
== 1.19.10 ==&lt;br /&gt;
* [https://github.com/wesnoth/wesnoth/issues/5041 #5041] Draw text on images in [[IntroWML]], useable for place-name labels on the journey-tracker maps (octalot)&lt;br /&gt;
&lt;br /&gt;
== 1.19.15 ==&lt;br /&gt;
* Play through any remaining mainline campaigns worth playing through (ie: not LoW) and add at least a minimum baseline of achievements to them (Pentarctagon)&lt;br /&gt;
&lt;br /&gt;
== 1.19.20 ==&lt;br /&gt;
* Go through all the added translatable strings, and check that they're used. For example, look for campaign-specific abilities which aren't used in the campaign. (octalot, but open to volunteers)&lt;br /&gt;
&lt;br /&gt;
== 1.19.?? (Beta 1) ==&lt;br /&gt;
'''This marks the beginning of the feature freeze and string freeze for 1.19;''' the only API changes made past this point must be to fix bugs.&lt;br /&gt;
&lt;br /&gt;
== 1.19.?? (RC1) ==&lt;br /&gt;
'''This marks the beginning of the API freeze;''' no API changes for for any reason can be made at this point. Additional RC releases will be done as needed.&lt;br /&gt;
&lt;br /&gt;
* Add new screenshots for 1.20&lt;br /&gt;
&lt;br /&gt;
== 1.20.0 ==&lt;br /&gt;
&lt;br /&gt;
[[Category:Roadmaps]]&lt;/div&gt;</summary>
		<author><name>Octalot</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=TerrainCodesWML&amp;diff=72895</id>
		<title>TerrainCodesWML</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=TerrainCodesWML&amp;diff=72895"/>
		<updated>2024-04-29T05:30:47Z</updated>

		<summary type="html">&lt;p&gt;Octalot: /* Decoding the Terrain Codes */ P is used for Portals&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WML Tags}}&lt;br /&gt;
&lt;br /&gt;
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]].&lt;br /&gt;
&lt;br /&gt;
== Terrain strings ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
* terrain strings are composed from one or two terrain codes of 2 to 4 characters (bytes) each, separated by ^.&lt;br /&gt;
* terrain codes start with a capital letter and the following letters are lower case&lt;br /&gt;
* terrain strings can only contain letters, the symbols /|\ which are meant for directional items like bridges and the symbol ^&lt;br /&gt;
* the underscore is used as a leader for internal terrain codes&lt;br /&gt;
* the star '*' can be used for wildcards in some places where a terrain code is required for matching&lt;br /&gt;
* the symbol ^ indicates that a terrain is created with layers, for example Gs^Fp means Semi-dry Grass(&amp;lt;b&amp;gt;Gs&amp;lt;/b&amp;gt;) with a Forest(&amp;lt;b&amp;gt;Fp&amp;lt;/b&amp;gt;) overlay.&lt;br /&gt;
&lt;br /&gt;
Starting positions are defined by a number followed by 1 space and then the terrain string.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
=== Terrain Table ===&lt;br /&gt;
&lt;br /&gt;
The list of terrains can be found at [[TerrainCodeTableWML]]. Since most overlays can be combined with most bases the list is not complete.&lt;br /&gt;
&lt;br /&gt;
== Adding terrains ==&lt;br /&gt;
When adding terrains make sure the following files are also checked:&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
data/core/macros/abilities.cfg contains the definition of ''submerge'' and ''ambush'' so depending on the change these need to be updated.&lt;br /&gt;
&lt;br /&gt;
== Decoding the Terrain Codes ==&lt;br /&gt;
The initial letters of each terrain code have a standard meaning, though some are not obvious.&lt;br /&gt;
* A = “Arctic”  i.e. frozen &lt;br /&gt;
* B = “Bridge”&lt;br /&gt;
* C = “Castle”&lt;br /&gt;
* D = “Desert” &lt;br /&gt;
* E = &amp;quot;Embellishment&amp;quot;&lt;br /&gt;
* F = “Forest”&lt;br /&gt;
* G = “Grass” i.e. flat&lt;br /&gt;
* H = “Hills”&lt;br /&gt;
* I = &amp;quot;Interior&amp;quot; (possible future use)&lt;br /&gt;
* J = ''testing''&lt;br /&gt;
* K = “Keep”&lt;br /&gt;
* L&lt;br /&gt;
* M = “Mountains”&lt;br /&gt;
* N&lt;br /&gt;
* O&lt;br /&gt;
* P = “Portal” i.e. doors, gates&lt;br /&gt;
* Q = &amp;quot;Un-walkable&amp;quot;, {{DevFeature1.17|7}} also used for elevation overlays&lt;br /&gt;
* R = “Road”, also used for “Rails”&lt;br /&gt;
* S = “Swamp”&lt;br /&gt;
* T = {{DevFeature1.15|2}} “Toadstool” i.e. fungus&lt;br /&gt;
* U = “Underground”&lt;br /&gt;
* V = “Village”&lt;br /&gt;
* W = “Water”&lt;br /&gt;
* X = &amp;quot;Impassable&amp;quot;&lt;br /&gt;
* Y = ''Reserved for UMC''&lt;br /&gt;
* Z = ''Reserved for UMC''&lt;br /&gt;
* _ = &amp;quot;special system stuff&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Additional letters do not always follow the same meaning, but are as consistent as possible.&lt;br /&gt;
&lt;br /&gt;
* \, |, / = for indicating the direction of bridges&lt;br /&gt;
* a =&lt;br /&gt;
* b =&lt;br /&gt;
* c = &amp;quot;city&amp;quot;&lt;br /&gt;
* d = &amp;quot;dry or desert, deciduous&amp;quot;&lt;br /&gt;
* e = &amp;quot;encampment&amp;quot;&lt;br /&gt;
* f = &amp;quot;flowers, fall&amp;quot;&lt;br /&gt;
* g&lt;br /&gt;
* h = &amp;quot;human&amp;quot;&lt;br /&gt;
* i = &amp;quot;ice&amp;quot;&lt;br /&gt;
* j&lt;br /&gt;
* k&lt;br /&gt;
* l = &amp;quot;lava&amp;quot;&lt;br /&gt;
* m = &amp;quot;mixed&amp;quot;&lt;br /&gt;
* n&lt;br /&gt;
* o = &amp;quot;orc&amp;quot;&lt;br /&gt;
* p = &amp;quot;pine&amp;quot;&lt;br /&gt;
* q&lt;br /&gt;
* r&lt;br /&gt;
* s = &amp;quot;simple&amp;quot;&lt;br /&gt;
* t = &amp;quot;archetype&amp;quot;, a hidden terrain used only as a base for other terrains&lt;br /&gt;
* u = &amp;quot;underground&amp;quot;&lt;br /&gt;
* v = &amp;quot;elvish&amp;quot;&lt;br /&gt;
* w&lt;br /&gt;
* x = &amp;quot;chasm&amp;quot;&lt;br /&gt;
* y = ''Reserved for UMC''&lt;br /&gt;
* z = ''Reserved for UMC''&lt;br /&gt;
&lt;br /&gt;
== Terrain codes in map data ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
The encoding for maps has a specific format in Wesnoth:&lt;br /&gt;
&lt;br /&gt;
* A map starts with a header with the following keys &lt;br /&gt;
** '''usage''', this should be 'map' for a map and 'mask' for an overlay mask&lt;br /&gt;
** '''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.&lt;br /&gt;
** {{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.&lt;br /&gt;
* Between the header and the data should be 1 empty line&lt;br /&gt;
* A map data file consists of any number of lines, each with the same number of terrain codes.&lt;br /&gt;
* 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.&lt;br /&gt;
* When the file is interpreted, each terrain code will be replaced by the terrain it refers to.&lt;br /&gt;
* Empty lines are allowed before, after and between lines of characters, between lines is not advised.&lt;br /&gt;
* Terrains may be prefixed with a number followed by one space, these indicate the starting position for side ''n''.&lt;br /&gt;
** For Wesnoth 1.12.6, ''n'' = 1, 2, 3, ... 9, and the multiplayer server will refuse maps with more than 9 sides.&lt;br /&gt;
** For Wesnoth 1.14, more than 9 sides can work, discussion https://r.wesnoth.org/t48129 and https://r.wesnoth.org/t48082&lt;br /&gt;
* {{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.&lt;br /&gt;
** This is broken according to https://r.wesnoth.org/p627595&lt;br /&gt;
&lt;br /&gt;
Since text file tiles are squares while game tiles are hexes, some tiles must be shifted.&lt;br /&gt;
Tiles in even-numbered columns are shifted down 1/2 of a tile.&lt;br /&gt;
For example, to have a road of connected dirt ('Re') tiles, the map data would look like this:&lt;br /&gt;
&lt;br /&gt;
 usage=map&lt;br /&gt;
 border_size=1&lt;br /&gt;
 &lt;br /&gt;
 Re, Re, Gg, Gg, Gg, Gg, Gg, Gg&lt;br /&gt;
 Gg, Gg, Re, Re, Gg, Gg, Gg, Gg&lt;br /&gt;
 Gg, Gg, Gg, Gg, Re, Re, Gg, Gg&lt;br /&gt;
 Gg, Gg, Gg, Gg, Gg, Gg, Re, Re&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[TerrainWML]]&lt;br /&gt;
* [[TerrainCodeTableWML]]&lt;br /&gt;
* [[ReferenceWML]]&lt;br /&gt;
&lt;br /&gt;
[[Category: WML Reference]]&lt;/div&gt;</summary>
		<author><name>Octalot</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=TerrainCodesWML&amp;diff=72894</id>
		<title>TerrainCodesWML</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=TerrainCodesWML&amp;diff=72894"/>
		<updated>2024-04-29T04:49:48Z</updated>

		<summary type="html">&lt;p&gt;Octalot: /* Decoding the Terrain Codes */ Q is used for elevation overlays&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WML Tags}}&lt;br /&gt;
&lt;br /&gt;
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]].&lt;br /&gt;
&lt;br /&gt;
== Terrain strings ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
* terrain strings are composed from one or two terrain codes of 2 to 4 characters (bytes) each, separated by ^.&lt;br /&gt;
* terrain codes start with a capital letter and the following letters are lower case&lt;br /&gt;
* terrain strings can only contain letters, the symbols /|\ which are meant for directional items like bridges and the symbol ^&lt;br /&gt;
* the underscore is used as a leader for internal terrain codes&lt;br /&gt;
* the star '*' can be used for wildcards in some places where a terrain code is required for matching&lt;br /&gt;
* the symbol ^ indicates that a terrain is created with layers, for example Gs^Fp means Semi-dry Grass(&amp;lt;b&amp;gt;Gs&amp;lt;/b&amp;gt;) with a Forest(&amp;lt;b&amp;gt;Fp&amp;lt;/b&amp;gt;) overlay.&lt;br /&gt;
&lt;br /&gt;
Starting positions are defined by a number followed by 1 space and then the terrain string.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
=== Terrain Table ===&lt;br /&gt;
&lt;br /&gt;
The list of terrains can be found at [[TerrainCodeTableWML]]. Since most overlays can be combined with most bases the list is not complete.&lt;br /&gt;
&lt;br /&gt;
== Adding terrains ==&lt;br /&gt;
When adding terrains make sure the following files are also checked:&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
data/core/macros/abilities.cfg contains the definition of ''submerge'' and ''ambush'' so depending on the change these need to be updated.&lt;br /&gt;
&lt;br /&gt;
== Decoding the Terrain Codes ==&lt;br /&gt;
The initial letters of each terrain code have a standard meaning, though some are not obvious.&lt;br /&gt;
* A = “Arctic”  i.e. frozen &lt;br /&gt;
* B = “Bridge”&lt;br /&gt;
* C = “Castle”&lt;br /&gt;
* D = “Desert” &lt;br /&gt;
* E = &amp;quot;Embellishment&amp;quot;&lt;br /&gt;
* F = “Forest”&lt;br /&gt;
* G = “Grass” i.e. flat&lt;br /&gt;
* H = “Hills”&lt;br /&gt;
* I = &amp;quot;Interior&amp;quot; (possible future use)&lt;br /&gt;
* J = ''testing''&lt;br /&gt;
* K = “Keep”&lt;br /&gt;
* L&lt;br /&gt;
* M = “Mountains”&lt;br /&gt;
* N&lt;br /&gt;
* O&lt;br /&gt;
* P&lt;br /&gt;
* Q = &amp;quot;Un-walkable&amp;quot;, {{DevFeature1.17|7}} also used for elevation overlays&lt;br /&gt;
* R = “Road”, also used for “Rails”&lt;br /&gt;
* S = “Swamp”&lt;br /&gt;
* T = {{DevFeature1.15|2}} “Toadstool” i.e. fungus&lt;br /&gt;
* U = “Underground”&lt;br /&gt;
* V = “Village”&lt;br /&gt;
* W = “Water”&lt;br /&gt;
* X = &amp;quot;Impassable&amp;quot;&lt;br /&gt;
* Y = ''Reserved for UMC''&lt;br /&gt;
* Z = ''Reserved for UMC''&lt;br /&gt;
* _ = &amp;quot;special system stuff&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Additional letters do not always follow the same meaning, but are as consistent as possible.&lt;br /&gt;
&lt;br /&gt;
* \, |, / = for indicating the direction of bridges&lt;br /&gt;
* a =&lt;br /&gt;
* b =&lt;br /&gt;
* c = &amp;quot;city&amp;quot;&lt;br /&gt;
* d = &amp;quot;dry or desert, deciduous&amp;quot;&lt;br /&gt;
* e = &amp;quot;encampment&amp;quot;&lt;br /&gt;
* f = &amp;quot;flowers, fall&amp;quot;&lt;br /&gt;
* g&lt;br /&gt;
* h = &amp;quot;human&amp;quot;&lt;br /&gt;
* i = &amp;quot;ice&amp;quot;&lt;br /&gt;
* j&lt;br /&gt;
* k&lt;br /&gt;
* l = &amp;quot;lava&amp;quot;&lt;br /&gt;
* m = &amp;quot;mixed&amp;quot;&lt;br /&gt;
* n&lt;br /&gt;
* o = &amp;quot;orc&amp;quot;&lt;br /&gt;
* p = &amp;quot;pine&amp;quot;&lt;br /&gt;
* q&lt;br /&gt;
* r&lt;br /&gt;
* s = &amp;quot;simple&amp;quot;&lt;br /&gt;
* t = &amp;quot;archetype&amp;quot;, a hidden terrain used only as a base for other terrains&lt;br /&gt;
* u = &amp;quot;underground&amp;quot;&lt;br /&gt;
* v = &amp;quot;elvish&amp;quot;&lt;br /&gt;
* w&lt;br /&gt;
* x = &amp;quot;chasm&amp;quot;&lt;br /&gt;
* y = ''Reserved for UMC''&lt;br /&gt;
* z = ''Reserved for UMC''&lt;br /&gt;
&lt;br /&gt;
== Terrain codes in map data ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
The encoding for maps has a specific format in Wesnoth:&lt;br /&gt;
&lt;br /&gt;
* A map starts with a header with the following keys &lt;br /&gt;
** '''usage''', this should be 'map' for a map and 'mask' for an overlay mask&lt;br /&gt;
** '''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.&lt;br /&gt;
** {{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.&lt;br /&gt;
* Between the header and the data should be 1 empty line&lt;br /&gt;
* A map data file consists of any number of lines, each with the same number of terrain codes.&lt;br /&gt;
* 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.&lt;br /&gt;
* When the file is interpreted, each terrain code will be replaced by the terrain it refers to.&lt;br /&gt;
* Empty lines are allowed before, after and between lines of characters, between lines is not advised.&lt;br /&gt;
* Terrains may be prefixed with a number followed by one space, these indicate the starting position for side ''n''.&lt;br /&gt;
** For Wesnoth 1.12.6, ''n'' = 1, 2, 3, ... 9, and the multiplayer server will refuse maps with more than 9 sides.&lt;br /&gt;
** For Wesnoth 1.14, more than 9 sides can work, discussion https://r.wesnoth.org/t48129 and https://r.wesnoth.org/t48082&lt;br /&gt;
* {{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.&lt;br /&gt;
** This is broken according to https://r.wesnoth.org/p627595&lt;br /&gt;
&lt;br /&gt;
Since text file tiles are squares while game tiles are hexes, some tiles must be shifted.&lt;br /&gt;
Tiles in even-numbered columns are shifted down 1/2 of a tile.&lt;br /&gt;
For example, to have a road of connected dirt ('Re') tiles, the map data would look like this:&lt;br /&gt;
&lt;br /&gt;
 usage=map&lt;br /&gt;
 border_size=1&lt;br /&gt;
 &lt;br /&gt;
 Re, Re, Gg, Gg, Gg, Gg, Gg, Gg&lt;br /&gt;
 Gg, Gg, Re, Re, Gg, Gg, Gg, Gg&lt;br /&gt;
 Gg, Gg, Gg, Gg, Re, Re, Gg, Gg&lt;br /&gt;
 Gg, Gg, Gg, Gg, Gg, Gg, Re, Re&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[TerrainWML]]&lt;br /&gt;
* [[TerrainCodeTableWML]]&lt;br /&gt;
* [[ReferenceWML]]&lt;br /&gt;
&lt;br /&gt;
[[Category: WML Reference]]&lt;/div&gt;</summary>
		<author><name>Octalot</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=GermanTranslation&amp;diff=72621</id>
		<title>GermanTranslation</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=GermanTranslation&amp;diff=72621"/>
		<updated>2024-04-04T11:38:56Z</updated>

		<summary type="html">&lt;p&gt;Octalot: /* Aktuelles Übersetzungsteam */ Add Aurelix to the current translator list&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Das Wort zum Geleit ==&lt;br /&gt;
Diese Seite dient dazu, die Anstrengungen des deutschen Übersetzungsteams besser zu koordinieren. Die Übersetzung ist deshalb in Unterpunkte aufgespalten worden, so dass für alle Teammitglieder und Besucher ersichtlich ist, ob momentan bereits jemand an der Übersetzung für eine Textdomain arbeitet, und ob es einen Ansprechpartner für einzelne Kampagnen gibt.&lt;br /&gt;
&lt;br /&gt;
Übersetzungen basieren üblicherweise auf der aktuellen ''stable'' Version, bitte benutzt nicht die Dateien der ''master'' Version.&lt;br /&gt;
&lt;br /&gt;
Es ist außerdem sinnvoll vor dem Übersetzen einmal einen Blick auf [[GermanTranslationUnitNames|diese Liste]] mit stilistischen Hinweisen, Standardbegriffen, Einheitennahmen, etc. zu werfen.&lt;br /&gt;
&lt;br /&gt;
== Aktuelles Übersetzungsteam ==&lt;br /&gt;
{|&lt;br /&gt;
!style=&amp;quot;text-align:left&amp;quot;| Name&lt;br /&gt;
!style=&amp;quot;text-align:left&amp;quot;| Nickname&lt;br /&gt;
!style=&amp;quot;text-align:left&amp;quot;| Emailadresse&lt;br /&gt;
!style=&amp;quot;text-align:left&amp;quot;| Anm.&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|aurelix&lt;br /&gt;
|im Discord erreichbar&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Aaron Winter&lt;br /&gt;
|bitron / byteron&lt;br /&gt;
|im Discord erreichbar&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|mcpgal&lt;br /&gt;
|im Discord erreichbar&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Steve Cotton&lt;br /&gt;
|octalot&lt;br /&gt;
|im Discord erreichbar&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|s1m0n&lt;br /&gt;
|im Discord erreichbar&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Iwan Gabovitch&lt;br /&gt;
|qubodup&lt;br /&gt;
|im Discord erreichbar&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Inaktive Übersetzer ==&lt;br /&gt;
{|&lt;br /&gt;
!style=&amp;quot;text-align:left&amp;quot;| Name&lt;br /&gt;
!style=&amp;quot;text-align:left&amp;quot;| Nickname&lt;br /&gt;
!style=&amp;quot;text-align:left&amp;quot;| Emailadresse&lt;br /&gt;
!style=&amp;quot;text-align:left&amp;quot;| Anm.&lt;br /&gt;
|-&lt;br /&gt;
|Severin Glöckner&lt;br /&gt;
|Sevu / Shiki&lt;br /&gt;
|im Forum &amp;amp; Discord erreichbar&lt;br /&gt;
|Vize-Maintainer&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|Christoph Berg&lt;br /&gt;
|chrber&lt;br /&gt;
|Christoph DOT Berg AT kpm-sport DOT de&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Nils Kneuper&lt;br /&gt;
|Ivanovic&lt;br /&gt;
|crazy-ivanovic AT gmx DOT net&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Oliver Lange&lt;br /&gt;
|Crommy&lt;br /&gt;
|oli-lange äd web Pünktchen de&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Tobias Schönau&lt;br /&gt;
|SonIcco&lt;br /&gt;
|tobias DOT schoenau AT eagerbyte DOT com&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| –&lt;br /&gt;
|Drakefriend&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|David Philippi&lt;br /&gt;
|Torangan&lt;br /&gt;
|david AT torangan DOT de&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Elias Pschernig&lt;br /&gt;
|Allefant&lt;br /&gt;
|allefant AT gmail DOT com&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|vonHalenbach&lt;br /&gt;
|vonHalenbach Ät users.sourceforge punkt net&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Sven Priess&lt;br /&gt;
|Gedankenschinder&lt;br /&gt;
|mail AT svenpriess DOT de&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Andre Schmidt&lt;br /&gt;
|schmidta&lt;br /&gt;
|andre AT schmidtandre DOT de&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Jan Greve&lt;br /&gt;
|Jan`ger&lt;br /&gt;
|Jan AT Phreeknet DOT org&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Andre&lt;br /&gt;
|Hochbass&lt;br /&gt;
|hochbass AT gmx DOT de&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Boris Stumm&lt;br /&gt;
|quijote_&lt;br /&gt;
|wesnoth AT bstumm DOT de&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Jan-Heiner Laberenz&lt;br /&gt;
|jan-heiner&lt;br /&gt;
|jan-heiner AT arcor DOT de&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Kai Ensenbach&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Onno Tasler&lt;br /&gt;
|belchion&lt;br /&gt;
|onno.tasler AT spamfence DOT net&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Ruben Philipp&lt;br /&gt;
|The Very Uhu&lt;br /&gt;
|the15thfeuergnu AT yahoo DOT de&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Stefan&lt;br /&gt;
|Termimad&lt;br /&gt;
|steve213 AT gmx DOT de&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Stephan Grochtmann&lt;br /&gt;
|Schattenstephan&lt;br /&gt;
|Schattenstephan AT gmx DOT com&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|ammoq&lt;br /&gt;
|erich DOT kitzmueller AT chello DOT at&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Arndt&lt;br /&gt;
| -&lt;br /&gt;
|muehlenf AT igi DOT tugraz DOT at&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| -&lt;br /&gt;
|ja-el&lt;br /&gt;
| -&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Jonas&lt;br /&gt;
| -&lt;br /&gt;
|celb AT gmx DOT at&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Michael Vondung&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Olaf M.&lt;br /&gt;
|milamber&lt;br /&gt;
| -&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Uz-Friedrich Valentin&lt;br /&gt;
|Uz&lt;br /&gt;
|uz_ AT users DOT sourceforge DOT net&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Rhonda D'Vine&lt;br /&gt;
|Rhonda&lt;br /&gt;
|rhonda AT deb DOT at&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Christoph Lange&lt;br /&gt;
|madelgijs&lt;br /&gt;
|christoph DOT t DOT lange AT googlemail DOT com&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Flatterdorsch&lt;br /&gt;
|im Discord erreichbar&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|Nevermore901&lt;br /&gt;
|im Discord erreichbar&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Status der Übersetzung ==&lt;br /&gt;
Wenn bei einer Kampagne für einen Betreuer ein '''-''' angegeben ist, bedeutet das nicht, dass sie gar nicht übersetzt wird. Dies wird von einem der aktiven Übersetzer übernommen, wenn dieser Zeit findet.&lt;br /&gt;
&lt;br /&gt;
Wünschenswert wäre es jedoch, wenn sich neue Übersetzer finden würden, die die Betreung einer dieser Kampagnen übernehmen würden damit die Qualität auch weiterhin auf dem hohen Niveau gesichert ist.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot;&lt;br /&gt;
!Name&lt;br /&gt;
![[GettextForTranslators#Textdomains_and_getting_the_files_to_translate | Textdomain]]&lt;br /&gt;
!Betreuer&lt;br /&gt;
!Nutzerversion&amp;lt;br&amp;gt;1.16&lt;br /&gt;
!Entwicklerversion&amp;lt;br&amp;gt;1.17&lt;br /&gt;
|-&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|Offizielle Kampagnen&lt;br /&gt;
|-&lt;br /&gt;
|Das Zepter des Feuers&lt;br /&gt;
|wesnoth-sof&lt;br /&gt;
| -&lt;br /&gt;
|Fertig&lt;br /&gt;
|-&lt;br /&gt;
|Die dunklen Künste&lt;br /&gt;
|wesnoth-did&lt;br /&gt;
| -&lt;br /&gt;
|Fertig&lt;br /&gt;
|-&lt;br /&gt;
|Die Geschichte zweier Brüder&lt;br /&gt;
|wesnoth-tb&lt;br /&gt;
| -&lt;br /&gt;
|Fertig&lt;br /&gt;
|-&lt;br /&gt;
|Die Südwacht&lt;br /&gt;
|wesnoth-tsg&lt;br /&gt;
| -&lt;br /&gt;
|Fertig&lt;br /&gt;
|-&lt;br /&gt;
|Der Thronerbe&lt;br /&gt;
|wesnoth-httt&lt;br /&gt;
| -&lt;br /&gt;
|Fertig&lt;br /&gt;
|-&lt;br /&gt;
|Der Aufstieg Wesnoths&lt;br /&gt;
|wesnoth-trow&lt;br /&gt;
| -&lt;br /&gt;
|Fertig&lt;br /&gt;
|-&lt;br /&gt;
|Freiheit&lt;br /&gt;
|wesnoth-l&lt;br /&gt;
| -&lt;br /&gt;
|Fertig&lt;br /&gt;
|-&lt;br /&gt;
|Invasion der Finsternis&lt;br /&gt;
|wesnoth-ei&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|Schwarzauges Sohn&lt;br /&gt;
|wesnoth-sotbe&lt;br /&gt;
| -&lt;br /&gt;
|Fertig&lt;br /&gt;
|-&lt;br /&gt;
|Unter brennenden Sonnen&lt;br /&gt;
|wesnoth-utbs&lt;br /&gt;
|octalot&lt;br /&gt;
|In Nachbearbeitung&lt;br /&gt;
|-&lt;br /&gt;
|Winds of Fate&lt;br /&gt;
|wesnoth-wof&lt;br /&gt;
|qubodup&lt;br /&gt;
|Korrektur&lt;br /&gt;
|-&lt;br /&gt;
|Wiedergeburt des Nordens&lt;br /&gt;
|wesnoth-nr&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|Der Hammer von Thursagan&lt;br /&gt;
|wesnoth-thot&lt;br /&gt;
| -&lt;br /&gt;
|Fertig&lt;br /&gt;
|-&lt;br /&gt;
|Die Legende von Wesmere&lt;br /&gt;
|wesnoth-low&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|Delfadors Memoiren&lt;br /&gt;
|wesnoth-dm&lt;br /&gt;
| -&lt;br /&gt;
|Unklar&lt;br /&gt;
|-&lt;br /&gt;
|Stille Wasser&lt;br /&gt;
|wesnoth-dw&lt;br /&gt;
| -&lt;br /&gt;
|Fertig&lt;br /&gt;
|-&lt;br /&gt;
|Geheimnisse der Ahnen&lt;br /&gt;
|wesnoth-sota&lt;br /&gt;
| -&lt;br /&gt;
|Fertig&lt;br /&gt;
|-&lt;br /&gt;
|World Conquest&lt;br /&gt;
|wesnoth-wc&lt;br /&gt;
| -&lt;br /&gt;
|Unklar&lt;br /&gt;
|große Korrektur des englische Text gebietet&lt;br /&gt;
|-&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|Einheiten&lt;br /&gt;
|-&lt;br /&gt;
|Alle Einheiten&lt;br /&gt;
|wesnoth-units&lt;br /&gt;
| -&lt;br /&gt;
|Fertig&lt;br /&gt;
|-&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|Sonstiges&lt;br /&gt;
|-&lt;br /&gt;
|Einführung&lt;br /&gt;
|wesnoth-tutorial&lt;br /&gt;
| -&lt;br /&gt;
|Fertig&lt;br /&gt;
|-&lt;br /&gt;
|Eine neue Heimat&lt;br /&gt;
|wesnoth-anl&lt;br /&gt;
| -&lt;br /&gt;
|Fertig&lt;br /&gt;
|-&lt;br /&gt;
|Steam Store Seite&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|Benutzeroberfläche&lt;br /&gt;
|-&lt;br /&gt;
|Allgemeines&lt;br /&gt;
|wesnoth&lt;br /&gt;
|Bitron&lt;br /&gt;
|Fertig&lt;br /&gt;
|-&lt;br /&gt;
|Allgemeines&lt;br /&gt;
|wesnoth-lib&lt;br /&gt;
|Bitron&lt;br /&gt;
|Fertig&lt;br /&gt;
|-&lt;br /&gt;
|Hilfe&lt;br /&gt;
|wesnoth-help&lt;br /&gt;
| -&lt;br /&gt;
|Fertig&lt;br /&gt;
|-&lt;br /&gt;
|Mehrspieler&lt;br /&gt;
|wesnoth-multiplayer&lt;br /&gt;
| -&lt;br /&gt;
|Fertig&lt;br /&gt;
|-&lt;br /&gt;
|Editor&lt;br /&gt;
|wesnoth-editor&lt;br /&gt;
|Bitron&lt;br /&gt;
|Fertig&lt;br /&gt;
|-&lt;br /&gt;
!colspan=&amp;quot;6&amp;quot;|Dokumentation&lt;br /&gt;
|-&lt;br /&gt;
|Handbuch&lt;br /&gt;
|wesnoth-manual&lt;br /&gt;
| -&lt;br /&gt;
|Fertig&lt;br /&gt;
|-&lt;br /&gt;
|Handbuchseiten&lt;br /&gt;
|wesnoth-manpages&lt;br /&gt;
| -&lt;br /&gt;
|Fertig&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Statusbeschreibungen ==&lt;br /&gt;
{| style=&amp;quot;margin-top: 1em; text-align: left&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| Unklar&lt;br /&gt;
| Die Zuweisung der Übersetzung ist unklar.&amp;lt;br&amp;gt;Sie kann also bereits vergeben sein oder an einen neuen Übersetzer vergeben werden.&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| Nicht Begonnen&lt;br /&gt;
| Es werden noch ÜbersetzerInnen gesucht. Bei Interesse einfach melden.&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| In Bearbeitung&lt;br /&gt;
| An der Übersetzung wird gearbeitet.&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| Korrektur&lt;br /&gt;
| Die Übersetzung ist beim Korrekturlesen.&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| Fertig&lt;br /&gt;
| Die Übersetzung ist abgeschlossen.&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;row&amp;quot;| In Nachbearbeitung&lt;br /&gt;
| Größtenteils fertig, nur einzelne Teile fehlen.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Gesucht ==&lt;br /&gt;
&lt;br /&gt;
Manche Kampagnen haben bessere Übersetzungen als andere. An manchen Stellen ist die Übersetzung zwischendurch unpassend, teils fehlt der Kontextbezug. Auch Rechtschreibfehler existieren, welche jedem zweiten Spieler auffallen, jedoch niemand meldet oder korrigiert. Und manchmal ist der Wortlaut der Übersetzung auch einfach zu sehr ans Englische angelehnt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es werden Leute gesucht, welche Interesse daran haben eine Kampagne zu übernehmen und auszugestalten. Dies kann z.B. heißen, die Kampagne selber zu spielen und dabei Screenshots von seltsamen Dialogen zu machen um diese später auszubessern, oder andere Dinge zu ändern. Ggf. findet man dabei auch Sachen welche man im Englischen ebenfalls ändern könnte, sei es der Text, die Story oder anderes.&lt;br /&gt;
Es ist verlockend, relativ wortgetreu zu Übersetzen, aber freiere Übersetzungen sind in der Regel deutlich besser.&lt;br /&gt;
&lt;br /&gt;
Aus technischer Sicht kann nur eine Person an einer Textdomain arbeiten, ohne dass man Gefahr läuft, Änderungen von jmd. anderem zu überschreiben(*). Am besten du sagst Bescheid wenn du daran arbeitest, und wirst in die Liste eingetragen.&lt;br /&gt;
&lt;br /&gt;
Es wäre schön wenn du eine Kampagne langfristig übernehmen würdest und als Ansprechpartner für Spieler zu Verfügung stehst.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
(*): Die Vorteile von Git, welches erlaubt, dass mehrere Personen gleichzeitig an etwas arbeiten, wobei jeder seine eigene Version der Datei ohne die Änderungen des Anderen hat, lassen sich hier nur umständlich anwenden. Es kann nur eine neuste Version der Datei geben. Poeditor [nicht zu Verwechseln mit Poedit] ist ein webbasiertes Tool, welches es erlaubt, dass mehrere Leute gleichzeitig dieselbe Datei bearbeiten.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Einzelne Fehler können, nach einer Registrierung im Wiki, auch hier eingetragen werden, am besten mit einer korrigierten Variante:&lt;br /&gt;
[[GermanTranslationErrors]]&lt;br /&gt;
&lt;br /&gt;
== Kontakt ==&lt;br /&gt;
&lt;br /&gt;
* Siehe &amp;quot;Aktuelles Übersetzungsteam&amp;quot;.&lt;br /&gt;
* Am besten in Wesnoths Discord Server im Channel #German -&amp;gt; https://discord.gg/battleforwesnoth&lt;br /&gt;
* irc.libera.chat #wesnoth-de (irgendwer wird schon da sein, einfach warten und hin und wieder was sagen, das sollte in dem leisen Kanal auffallen...)&lt;br /&gt;
* Der Discord und IRC Channel sind mit einem Bot verbunden.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[GermanTranslationErrors|Fehler]] - Eine Sammlung der bekannten und noch nicht behobenen Fehler.&lt;br /&gt;
* [[GermanTranslationUnitNames|Liste mit Standardbegriffen, Einheitennamen, usw]]&lt;br /&gt;
* [https://www.wesnoth.org/gettext/?view=langs&amp;amp;version=master&amp;amp;lang=de Statistiken der deutschen Übersetzung (Entwicklerversion)]&lt;br /&gt;
* [https://www.wesnoth.org/gettext/?view=langs&amp;amp;version=branch&amp;amp;lang=de Statistiken der deutschen Übersetzung (aktuelle Nutzerversion)]&lt;br /&gt;
* [[GettextForTranslators|Gettext für Übersetzer (nur auf Englisch)]] - Werkzeugen für .po Dateien (Poedit, Lokalize, uzw)&lt;br /&gt;
* [[WesnothTranslations]] - Liste der Wikiseiten aller Wesnoth-Übersetzungen&lt;br /&gt;
&lt;br /&gt;
== Sonstiges ==&lt;br /&gt;
* [[GermanTranslationMPCampaign|Die Chroniken von Elvenmar ~ Das zweite Zeitalter (Mehrspieler Kampagne)]] - nicht mehr betreut&lt;br /&gt;
* [[Zeit der Mythen]]: Übersetzung des Add-Ons Era of Myths&lt;br /&gt;
&lt;br /&gt;
[[Category:Translations]]&lt;/div&gt;</summary>
		<author><name>Octalot</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=AbilitiesWML&amp;diff=72582</id>
		<title>AbilitiesWML</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=AbilitiesWML&amp;diff=72582"/>
		<updated>2024-04-02T00:23:16Z</updated>

		<summary type="html">&lt;p&gt;Octalot: /* [damage_type] */ The known bug won't be fixed in 1.18, so won't cause OOS&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WML Tags}}&lt;br /&gt;
==  Abilities and their effects ==&lt;br /&gt;
&lt;br /&gt;
There are two types of abilities: ones that apply to units (called ''abilities'') and ones that only apply when using a particular attack (called ''specials'' or ''weapon specials'').  A unit may have multiple abilities and an attack can have multiple specials.&lt;br /&gt;
&lt;br /&gt;
Each ability or special defines an effect based on one to three units. Most abilities apply to a single unit, and '''[filter_self]''' can be used to determine when the ability is active. Weapon specials apply to two units, which can be filtered either as &amp;quot;attacker&amp;quot; and &amp;quot;defender&amp;quot; (with the obvious meaning) or as &amp;quot;self&amp;quot; and &amp;quot;other&amp;quot; – the unit that possesses the special, and that unit's opponent. When filtering on the &amp;quot;other&amp;quot; unit, you use '''[filter_second]'''.&lt;br /&gt;
&lt;br /&gt;
Leadership-style abilities are a more complex case, as they involve three units. Like a weapon special, there is an attacker and defender, but there is also a third unit that could be referred to as the &amp;quot;teacher&amp;quot;. The &amp;quot;teacher&amp;quot; is the unit that possesses the ability, so it is referred to as &amp;quot;self&amp;quot; in the ability. A leadership ability works by temporarily granting a weapon special to either the attacker or the defender. The unit that benefits from this is referred to as the &amp;quot;student&amp;quot;, while the unit that does not benefit is simply the &amp;quot;other&amp;quot; unit. When filtering on the &amp;quot;other&amp;quot; unit, you use '''[filter_second]'''.&lt;br /&gt;
&lt;br /&gt;
== The ''[abilities]'' tag ==&lt;br /&gt;
&lt;br /&gt;
The following tags are used to describe an ability in WML:&lt;br /&gt;
&lt;br /&gt;
* '''[heals]''': modifies the hitpoints of a unit at the beginning of the healer's turn&lt;br /&gt;
* '''[regenerate]''': modifies the hitpoints of a unit at the beginning of the unit's turn&lt;br /&gt;
* '''[resistance]''': modifies the resistance of a unit to damage&lt;br /&gt;
* '''[leadership]''': modifies the damage of a unit&lt;br /&gt;
* '''[skirmisher]''': negates enemy zones of control&lt;br /&gt;
* '''[illuminates]''': modifies the time of day adjacent to the affected units&lt;br /&gt;
* '''[teleport]''': allows the unit to teleport&lt;br /&gt;
* '''[hides]''': renders the unit invisible to enemies&lt;br /&gt;
* {{DevFeature1.15|0}} All [[#The_.5Bspecials.5D_tag|weapon specials]] except for [plague], [heal_on_hit], and [swarm] can be placed in the [abilities] tag. These &amp;quot;weapon specials as abilities&amp;quot; will give that weapon special to all attacks the unit has if matches with [filter_student/opponent/etc][filter_weapon].&lt;br /&gt;
* Any other tag is valid (for example '''[dummy]'''), but will result in an ability that does nothing but report it's there. '''Note:''' a dummy ability must have an id for the name and description to display.&lt;br /&gt;
* {{DevFeature1.15|3}} All the engine [[#The_.5Bspecials.5D_tag|weapon specials]] can be placed in the [abilities] tag now.&lt;br /&gt;
&lt;br /&gt;
=== Available formula variables in Abilities and Weapon Specials  ===&lt;br /&gt;
&lt;br /&gt;
{{DevFeature1.15|?}} When using formulas in abilities and weapon specials, the following formula variables are available:&lt;br /&gt;
* '''self''': (unit) the unit that has the ability&lt;br /&gt;
* '''student''': (unit) for leadership-like abilities this is the unit that is adjacent to the unit that has the ability; if affect_self=yes, this is also unit who has ability.&lt;br /&gt;
* '''attacker''': (unit) for attack-related abilities and weapon specials, this is the attacking unit during the attack.&lt;br /&gt;
* '''defender''': (unit) for attack-related abilities and weapon specials, this is the defending unit during the attack.&lt;br /&gt;
* '''other''': (unit) the unit whose stats get modified from the ability. For abilities without 'apply_to=opponent' this is always the same as 'student'.&lt;br /&gt;
&lt;br /&gt;
=== Common keys and tags for every ability ===&lt;br /&gt;
&lt;br /&gt;
{{DevFeature1.13|?}} All keys inside any ability that expects a numeric value will also accept formulas using &lt;br /&gt;
[[Wesnoth Formula Language]]. In order to use a formula in these keys, you must enclose it in parentheses. However, do not precede those parentheses with a dollar sign like &amp;lt;code&amp;gt;$(...)&amp;lt;/code&amp;gt;, since that will erase the &amp;lt;tt&amp;gt;self&amp;lt;/tt&amp;gt; variable.&lt;br /&gt;
&lt;br /&gt;
* '''name''': the (translatable) name of the ability. If omitted, the ability will be a hidden ability.&lt;br /&gt;
* '''female_name''': the (translatable) name of the ability when possessed by a female unit. Defaults to ''name'' if not specified.&lt;br /&gt;
* '''name_inactive''': the (translatable) name of the ability when inactive. Defaults to ''name'' if not specified; if the ability is supposed to be not displayed when inactive, you must explicitly set ''name_inactive'' to an empty string (nothing after the equals sign).&lt;br /&gt;
* '''female_name_inactive''': the (translatable) name of the ability when inactive and possessed by a female unit. Defaults to ''name_inactive'' if not specified. You should thus set ''female_name'' as well!&lt;br /&gt;
* '''description''': the (translatable) description of the ability.&lt;br /&gt;
* '''description_inactive''': the (translatable) description of the ability when inactive. Defaults to ''description'' if not specified.&lt;br /&gt;
* '''special_note''' {{DevFeature1.15|14}} Translatable string, which will be displayed in the unit’s help. See also [[UnitTypeWML#Special_Notes]].&lt;br /&gt;
* '''affect_self''': if equal to 'yes' (default), the ability will affect the unit that has it.&lt;br /&gt;
* '''affect_allies''': if equal to 'yes', the ability will affect units from the same and allied sides in the specified adjacent hexes. If set to 'no' it will not affect own or allied sides. If not set (default) it will affect units on the same side but not from allied sides.&lt;br /&gt;
* '''affect_enemies''': if equal to 'yes' (default is 'no'), the ability will affect enemies in the specified adjacent hexes.&lt;br /&gt;
* '''cumulative''': if set to 'yes', this ability will be cumulative with the base value for this ability. ''Beware of the bug with cumulative leadership in 1.16 https://github.com/wesnoth/wesnoth/issues/6466 , more info see below, in &amp;quot;Extra keys used by the ''leadership'' ability&amp;quot; section''. {{DevFeature1.17|5}}, bug fixed.&lt;br /&gt;
* '''id''': this ability will not be cumulative with other abilities using this id. Must be present if cumulative is anything other than 'yes'.&lt;br /&gt;
* '''halo_image''': {{DevFeature1.17|22}} if used, the halo specified showed on unit affected by ability.&lt;br /&gt;
* '''overlay_image''': {{DevFeature1.17|22}} if used, the overlay specified showed on unit affected by ability.&lt;br /&gt;
* '''halo_image_self''': {{DevFeature1.17|22}} if used, the halo specified showed on unit who has ability when active.&lt;br /&gt;
* '''overlay_image_self''': {{DevFeature1.17|22}} if used, the overlay specified showed on unit who has ability when active.&lt;br /&gt;
* '''[filter]''': [[StandardUnitFilter]] If the unit owning the ability does not match this filter, the ability will be inactive.&lt;br /&gt;
* {{anchor|affect_adjacent|'''[affect_adjacent]'''}}: an adjacent unit that does not match this filter will not receive its effects. There can be multiple [affect_adjacent] tags in a single ability; a unit needs to match any one of these to receive the effects. The side requirement of matching units is defined by the '''affect_allies''' and '''affect_enemies''' keys. If there are no [affect_adjacent] tags, then no adjacent units will receive the effects.&lt;br /&gt;
** '''adjacent''': a comma separated list of any combination of these directions: '''n''','''ne''','''se''','''s''','''sw''','''nw'''. (See [[StandardLocationFilter#Directions|notes]])&lt;br /&gt;
** '''[filter]''': a [[StandardUnitFilter]]. {{DevFeature1.13|2}} The variable $other_unit refers to the unit owning the ability.&lt;br /&gt;
* '''[filter_self]''': if the owner of the ability does not match this filter, it will not receive the effects of the ability. [filter_self] takes a [[StandardUnitFilter]] as argument.&lt;br /&gt;
* '''[filter_adjacent]''': if an adjacent unit does not match this filter, the ability will not be active and no-one will receive its affects. Takes extra keys ''adjacent'', ''count'', ''is_enemy'', just like in a [[StandardUnitFilter]], with the one difference that, in the absence of a specified ''count'', all listed directions must match (so, with two directiones eg ''adjacent=n,s'', the default is ''count=2''). In fact, it's really a shorthand for a [filter_adjacent] nested within [filter]. The variables $this_unit and {{DevFeature1.13|2}} $other_unit both work as you'd expect. Multiple [filter_adjacent] can be provided, all of which must pass for the ability to activate.&lt;br /&gt;
* '''[filter_adjacent_location]''': like [filter_adjacent], but filters on locations instead of units. This is a shorthand for [filter][filter_location][filter_adjacent_location].&lt;br /&gt;
* {{anchor|filter_base_value|'''[filter_base_value]'''}}: filters on the value before any modifications; uses the keys '''equals''', '''not_equals''', etc. If several keys are used all have to match.&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[heals]'' ability ===&lt;br /&gt;
&lt;br /&gt;
* '''value''': the amount healed.&lt;br /&gt;
* '''poison''': can be one of ''slowed'',''cured''. ''slowed'' means poison will not take effect for adjacent units (it's not related to the weapon special &amp;quot;slows&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[regenerate]'' ability ===&lt;br /&gt;
&lt;br /&gt;
* '''value''': the amount healed.&lt;br /&gt;
* '''poison''': can be one of ''slowed'',''cured''.&lt;br /&gt;
&lt;br /&gt;
=== Extra keys and tags used by the ''[resistance]'' ability ===&lt;br /&gt;
&lt;br /&gt;
* '''value''': set resistance to this value.&lt;br /&gt;
* '''max_value''': maximum resistance value. Default: 0%. {{DevFeature1.17|24}} Default: no limit.&lt;br /&gt;
* '''add''': adds to resistance. Is ignored when '''sub''' is present.&lt;br /&gt;
* '''sub''': subtracts from resistance.&lt;br /&gt;
* '''multiply''': multiplies resistance value. &lt;br /&gt;
* '''divide''': divides resistance value.&lt;br /&gt;
* '''apply_to''': a list of damage types; if left out, the ability applies to all types.&lt;br /&gt;
* '''active_on''': one of 'defense' or 'offense'; if left out, the ability is active on both.&lt;br /&gt;
These keys affect the actual resistance (e.g. -20%), not the damage modifier normally used in [resistance] (e.g. 120).&lt;br /&gt;
* '''[filter_weapon]''': {{DevFeature1.15|0}} If present, the resistance ability only takes effect when the owner of the ability uses a matching weapon.&lt;br /&gt;
* '''[filter_second_weapon]''': {{DevFeature1.15|0}} If present, the resistance ability only takes effect when the opponent uses a matching weapon.&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[leadership]'' ability ===&lt;br /&gt;
&lt;br /&gt;
* '''value''': the percentage bonus to damage.&lt;br /&gt;
* '''add''': the cumulative percentage bonus to damage. Is ignored when '''sub''' is present.&lt;br /&gt;
* '''sub''': the cumulative percentage bonus subtracted to damage.&lt;br /&gt;
* '''multiply''': multiplies resistance value. &lt;br /&gt;
* '''divide''': divides resistance value.&lt;br /&gt;
''Note:'' cumulative leadership with '''cumulative=yes''' and '''value=''' doesn't work in 1.16 (but fixed in 1.17.12 and later). To work around use '''add=''' or '''sub=''' key (it doesn't require cumulative) (https://github.com/wesnoth/wesnoth/issues/6466 ). If you want each instance of a ''[leadership]'' with the same id to be added you will be able to reuse '''cumulative=yes''' in 1.17.12 and later, otherwise, if you want to add the value of another ''[leadership]'' only once even with the same id in several copies, use '''add'''.&lt;br /&gt;
* '''[filter_weapon]''': {{DevFeature1.15|0}} If present, the leadership ability only takes effect when the owner of the ability uses a matching weapon.&lt;br /&gt;
* '''[filter_second_weapon]''': {{DevFeature1.15|0}} If present, the leadership ability only takes effect when the opponent uses a matching weapon.&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[illuminates]'' ability ===&lt;br /&gt;
&lt;br /&gt;
Because this ability changes the terrain instead of units on it, affect_self, affect_allies, affect_enemies and [filter_adjacent] have no effect.&lt;br /&gt;
* '''value''': the percentage bonus to lawful units. Units with '''alignment=lawful''' do +''value'' % damage when under the influence of a unit with this ability. Units with '''alignment=chaotic''' do -''value'' % damage. Units with '''alignment=neutral''' are unaffected by this ability. Units with '''alignment=liminal''' do -(abs(''value'')) % damage. ''value'' can be a negative number; this is useful if you want to give Chaotic units an advantage instead of Lawful ones. &lt;br /&gt;
* '''add''': the cumulative percentage bonus to damage. Is ignored when '''sub''' is present.&lt;br /&gt;
* '''sub''': the cumulative percentage bonus subtracted to damage.&lt;br /&gt;
* '''multiply''': multiplies resistance value. &lt;br /&gt;
* '''divide''': divides resistance value.&lt;br /&gt;
* '''max_value''': the maximum percentage bonus given. Cannot be less than 0. Defaults to 0 if not present.&lt;br /&gt;
* '''min_value''': the minimum percentage bonus given. Cannot be greater than 0. Defaults to 0 if not present.&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[hides]'' ability ===&lt;br /&gt;
&lt;br /&gt;
* '''alert''': the displayed text when the unit is discovered. Default &amp;quot;Ambushed!&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Extra tags used by the ''[teleport]'' ability ===&lt;br /&gt;
&lt;br /&gt;
* '''[tunnel]''' - a [[DirectActionsWML#.5Btunnel.5D|tunnel tag]] (without the remove key) defining the tunneling source and target hexes, and maybe other conditions. (It automatically applies only to the unit with the ability.)  You may use $teleport_unit inside the [tunnel][source] and [tunnel][target] tag for filtering purposes.&lt;br /&gt;
&lt;br /&gt;
=== Extra tags and keys used by weapon special abilities ===&lt;br /&gt;
&lt;br /&gt;
* {{anchor|filter_student|'''[filter_student]'''}}: {{DevFeature1.15|0}} If present, only the unit matching this filter, either the possessor of the ability if affect_self=yes, or an adjacent unit matching '''[filter_adjacent]''' will be affected. Work like '''[filter_self]'''  of specific weapon special.&lt;br /&gt;
* '''overwrite_specials''': {{DevFeature1.15|13}} If present, allows a special abilities weapon with a numerical value to impose its value and ignore values of abilities or specials of the same type. If '''overwrite_specials=one_side''', the specials and abilities used by the opponent of the unit affected by the ability with this key and applied to it will not be affected. If '''overwrite_specials=both_sides''', all non-key-carrying abilities and all specials of the same type affecting the recipient unit will be affected, even if used by the opponent (used in the macro FORCE_CHANCE_TO_HIT).&lt;br /&gt;
* {{anchor|overwrite|'''[overwrite]'''}}: {{DevFeature1.17|22}} Part of '''overwrite_specials'''. Allows more flexibility in determining which specials should take priority over other specials of the same type.&lt;br /&gt;
** '''priority''': A numeric value to use when determining which special should be used if multiple specials of the same type have the '''overwrite_specials''' attribute. Default is 0.&lt;br /&gt;
** {{anchor|filter_specials|'''[experimental_filter_specials]'''}}: [[StandardAbilityFilter]] Further attributes to filter specials by to determine if it should take priority over other specials. Accepts the same attributes as [experimental_filter_ability].&lt;br /&gt;
* Other keys and tags appropriate to the specific weapon special.&lt;br /&gt;
&lt;br /&gt;
=== Macros for common abilities ===&lt;br /&gt;
&lt;br /&gt;
[https://www.wesnoth.org/macro-reference.html#file:abilities.cfg macro reference]&lt;br /&gt;
* ABILITY_AMBUSH&lt;br /&gt;
* ABILITY_CURES&lt;br /&gt;
* ABILITY_HEALS&lt;br /&gt;
* ABILITY_ILLUMINATES&lt;br /&gt;
* ABILITY_LEADERSHIP_LEVEL_1 to ABILITY_LEADERSHIP_LEVEL_5&lt;br /&gt;
* {{DevFeature1.13|2}} ABILITY_LEADERSHIP (replaces the above leadership macros, which are now deprecated)&lt;br /&gt;
* ABILITY_NIGHTSTALK&lt;br /&gt;
* ABILITY_REGENERATES&lt;br /&gt;
* ABILITY_SKIRMISHER&lt;br /&gt;
* ABILITY_STEADFAST&lt;br /&gt;
* ABILITY_SUBMERGE&lt;br /&gt;
* ABILITY_TELEPORT&lt;br /&gt;
&lt;br /&gt;
== The ''[specials]'' tag ==&lt;br /&gt;
&lt;br /&gt;
The '''[specials]''' tag goes inside the '''[attack]''' tag. It can contain the following tags:&lt;br /&gt;
&lt;br /&gt;
* '''[attacks]''': modifies the number of attacks of a weapon, in using '''value''', '''add''', '''sub''', '''multiply''' or '''divide''' attributes&lt;br /&gt;
* '''[berserk]''': pushes the attack for more than one combat round, using '''value''' attribute, '''value''' is 1 by default&lt;br /&gt;
* '''[chance_to_hit]''': modifies the chance to hit of a weapon, using same standard numerical attributes what '''[attacks]'''&lt;br /&gt;
* '''[damage]''': modifies the damage of a weapon, using same attributes what '''[attacks]''' and '''[chance_to_hit]'''&lt;br /&gt;
* '''[disable]''': disables the weapon&lt;br /&gt;
* '''[drains]''': heals the attacker half of the damage dealt, using same attributes what '''[attacks]''' and '''[chance_to_hit]''', '''value''' is 50 by default&lt;br /&gt;
* '''[firststrike]''': forces the weapon to always strike first&lt;br /&gt;
* '''[heal_on_hit]''': heals the attacker when an attack connects, using same attributes what '''[attacks]''' and '''[chance_to_hit]''', '''value''' is 0 by default&lt;br /&gt;
* '''[petrifies]''': turns the target to stone&lt;br /&gt;
* '''[plague]''': when used to kill an enemy, a friendly unit takes its place&lt;br /&gt;
* '''[poison]''': poisons the target&lt;br /&gt;
* '''[slow]''': slows the target&lt;br /&gt;
* '''[swarm]''': number of strikes decreases as the unit loses hitpoints&lt;br /&gt;
* '''[damage_type]''' {{DevFeature1.17|23}}: type of damage changed by replacement or addition of another type&lt;br /&gt;
Any other tag is valid, but will result in a special that does nothing but report it is there.&lt;br /&gt;
&lt;br /&gt;
=== Common keys and tags for every weapon special ===&lt;br /&gt;
&lt;br /&gt;
{{DevFeature1.13|?}} All keys inside any weapon special that expects a numeric value will also accept formulas using [[Wesnoth Formula Language]]. In order to use a formula in these keys, you must enclose it in parentheses.&lt;br /&gt;
&lt;br /&gt;
* '''name''': the (translatable) name of the special. If omitted, the special will be hidden from the player.&lt;br /&gt;
* '''name_inactive''': the (translatable) name of the special when inactive. Defaults to ''name'' if not specified; if the special is supposed to be not displayed when inactive, you must explicitly set ''name_inactive'' to an empty string (nothing after the equals sign).&lt;br /&gt;
* '''description''': the (translatable) description of the special.&lt;br /&gt;
* '''description_inactive''': the (translatable) description of the special when inactive. Defaults to ''description'' if not specified.&lt;br /&gt;
* '''special_note''' {{DevFeature1.15|14}} Translatable string, which will be displayed in the unit’s help. See also [[UnitTypeWML#Special_Notes]].&lt;br /&gt;
* '''id''': this ability will not be cumulative with other specials using this id.&lt;br /&gt;
* '''active_on''': one of '''defense''' or '''offense'''; if left out, the special is active on both.&lt;br /&gt;
* '''apply_to''': one of '''self''','''opponent''','''attacker''','''defender''','''both''' (default: ''self''). Determines who the effects of this special are applied to.&lt;br /&gt;
* '''[filter_adjacent]''': if an adjacent unit does not match this filter, the special will not be active and no-one will receive its effects. Takes extra keys ''adjacent'', ''count'', ''is_enemy'', just like in a [[StandardUnitFilter]]. In fact, it's really a shorthand for a [filter_adjacent] nested within [filter_self], with the one difference that, in the absence of a specified ''count'', all listed directions must match (so, with two directiones eg ''adjacent=n,s'', the default is ''count=2''). The variables $this_unit and {{DevFeature1.13|2}} $other_unit both work as you'd expect. Multiple [filter_adjacent] can be provided, all of which must pass for the ability to activate. &lt;br /&gt;
* '''[filter_adjacent_location]''': like [filter_adjacent], but filters on locations instead of units. This is a shorthand for [filter_self][filter_location][filter_adjacent_location].&lt;br /&gt;
* {{anchor|filter_self|'''[filter_self]'''}}: the special will only be active if the owner matches this [[StandardUnitFilter]] (SUF).&lt;br /&gt;
** '''[filter_weapon]''': a [[FilterWML#Filtering_Weapons|standard weapon filter]], including special=.&lt;br /&gt;
** '''$other_unit''': {{DevFeature1.13|2}} The special variable $other_unit refers to the opponent.&lt;br /&gt;
* {{anchor|filter_opponent|'''[filter_opponent]'''}}: the special will only be active if the opponent matches this SUF.&lt;br /&gt;
** '''[filter_weapon]''': a [[FilterWML#Filtering_Weapons|standard weapon filter]], including special=.&lt;br /&gt;
** '''$other_unit''': {{DevFeature1.13|2}} The special variable $other_unit refers to the unit that owns the weapon.&lt;br /&gt;
* {{anchor|filter_attacker|'''[filter_attacker]'''}}: the special will only be active if the attacker matches this SUF.&lt;br /&gt;
** '''[filter_weapon]''': a [[FilterWML#Filtering_Weapons|standard weapon filter]], including special=.&lt;br /&gt;
** '''$other_unit''': {{DevFeature1.13|2}} The special variable $other_unit refers to the defender.&lt;br /&gt;
* {{anchor|filter_defender|'''[filter_defender]'''}} the special will only be active if the defender matches this SUF.&lt;br /&gt;
** '''[filter_weapon]''': a [[FilterWML#Filtering_Weapons|standard weapon filter]], including special=.&lt;br /&gt;
** '''$other_unit''': {{DevFeature1.13|2}} The special variable $other_unit refers to the attacker.&lt;br /&gt;
* '''overwrite_specials''': if equal to 'one_side', then only this unit's specials are evaluated. If equal to 'both_sides', then both this unit's specials and any of the opponent's weapon specials that affect this unit are evaluated. If a special with this attribute is active, it will take precedence over any other specials of the same type that do not have this attribute. Don't applied to boolean weapon special like [poison] ,[slow], [firststrike] or [petrifies].&lt;br /&gt;
* '''[overwrite]''': {{DevFeature1.17|22}} Allows more flexibility in determining which specials should take priority over other specials of the same type.&lt;br /&gt;
** '''priority''': A numeric value to use when determining which special should be used if multiple specials of the same type have the '''overwrite_specials''' attribute. Default is 0.&lt;br /&gt;
** '''[experimental_filter_specials]''': [[StandardAbilityFilter]] Further attributes to filter specials by to determine if it should take priority over other specials. Accepts the same attributes as [experimental_filter_ability].&lt;br /&gt;
&lt;br /&gt;
=== Common keys and tags for specials with a value ===&lt;br /&gt;
&lt;br /&gt;
The '''[damage]''', '''[attacks]''', and '''[chance_to_hit]''' specials take values that specify how those specials modify their respective base values. The '''[drains]''' special takes a value specifying the percentage of damage drained (default 50) and '''[heal_on_hit]''' takes the amount to heal (default 0; negative values will harm the attacker, but not kill). &lt;br /&gt;
&lt;br /&gt;
* '''value''': the value to be used. &lt;br /&gt;
* '''add''': the number to add to the base value. Is ignored when '''sub''' is present.&lt;br /&gt;
* '''sub''': the number to subtract from the base value.&lt;br /&gt;
* '''multiply''': this multiplies the base value.&lt;br /&gt;
* '''divide''': this divides the base value.&lt;br /&gt;
* '''cumulative''': if set to 'yes', this special will be cumulative with the base value.&lt;br /&gt;
* '''backstab''': if set to 'yes', this special will only apply to the attacker, and only when there is an enemy on the target's opposite side (i.e. when the standard backstab special applies). {{DevFeature1.13|2}} This is now deprecated. The same functionality can be achieved with a [filter_adjacent] in [filter_opponent]; see the implementation of the default backstab special for details.&lt;br /&gt;
* '''[filter_base_value]''': filters on the value before any modifications; uses the keys '''equals''', '''not_equals''', '''less_than''', '''greater_than''', '''less_than_equal_to''', '''greater_than_equal_to'''.&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[damage_type]'' special {{DevFeature1.17|23}} ===&lt;br /&gt;
&lt;br /&gt;
* '''replacement_type''': replaces the attack type with the specified type when [damage_type] is active.&lt;br /&gt;
* '''alternative_type''': add a second type of attack to the existing type, it is always the one of the two which will do the most damage to the opponent which will be used.&lt;br /&gt;
&lt;br /&gt;
{{note|In 1.18, alternative_type may be stronger than expected, as the damage calculations sometimes ignore [resistance] abilities. This is a known bug, which occurs deterministically and will be left unfixed in 1.18.x to prevent Out Of Sync errors.}}&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[berserk]'' special ===&lt;br /&gt;
&lt;br /&gt;
* '''value''': the maximum number of combat rounds (default 1).&lt;br /&gt;
* '''cumulative''': if set to 'yes', this special will be cumulative with other active berserk specials (on the current combatant, not with an opponent's berserk).&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[plague]'' special ===&lt;br /&gt;
&lt;br /&gt;
* '''type''': the unit type to be spawned on kill.&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[swarm]'' special ===&lt;br /&gt;
&lt;br /&gt;
* '''swarm_attacks_max''': the maximum number of attacks for the swarm. Defaults to the base number of attacks modified by any applicable [attacks] specials. If this is specified, then the base number of attacks is ignored.&lt;br /&gt;
* '''swarm_attacks_min''': the minimum number of attacks for the swarm. Defaults to zero. This can be set higher than swarm_attacks_max to cause a unit to gain attacks as health decreases.&lt;br /&gt;
The ratio of the unit's current to maximum hit points will be used to scale the number of attacks between these two values.&lt;br /&gt;
&lt;br /&gt;
Prior to version 1.11, a [swarm] special will cause [attacks] specials to be ignored. In 1.11 and later, [attacks] specials are applied before [swarm].&lt;br /&gt;
&lt;br /&gt;
=== Macros for common weapon specials ===&lt;br /&gt;
&lt;br /&gt;
* WEAPON_SPECIAL_BACKSTAB&lt;br /&gt;
* WEAPON_SPECIAL_BERSERK&lt;br /&gt;
* WEAPON_SPECIAL_CHARGE&lt;br /&gt;
* WEAPON_SPECIAL_DRAIN&lt;br /&gt;
* WEAPON_SPECIAL_FIRSTSTRIKE&lt;br /&gt;
* WEAPON_SPECIAL_MAGICAL&lt;br /&gt;
* WEAPON_SPECIAL_MARKSMAN&lt;br /&gt;
* WEAPON_SPECIAL_PLAGUE&lt;br /&gt;
* WEAPON_SPECIAL_PLAGUE_TYPE TYPE&lt;br /&gt;
* WEAPON_SPECIAL_POISON&lt;br /&gt;
* WEAPON_SPECIAL_SLOW&lt;br /&gt;
* WEAPON_SPECIAL_STONE&lt;br /&gt;
* WEAPON_SPECIAL_SWARM&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[UnitTypeWML]]&lt;br /&gt;
* [[SingleUnitWML]]&lt;br /&gt;
* [[ReferenceWML]]&lt;br /&gt;
&lt;br /&gt;
[[Category:WML Reference]]&lt;/div&gt;</summary>
		<author><name>Octalot</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=AbilitiesWML&amp;diff=72559</id>
		<title>AbilitiesWML</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=AbilitiesWML&amp;diff=72559"/>
		<updated>2024-03-31T09:42:35Z</updated>

		<summary type="html">&lt;p&gt;Octalot: /* [damage_type] special */ Don't use in multiplayer, as OOS is expected&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WML Tags}}&lt;br /&gt;
==  Abilities and their effects ==&lt;br /&gt;
&lt;br /&gt;
There are two types of abilities: ones that apply to units (called ''abilities'') and ones that only apply when using a particular attack (called ''specials'' or ''weapon specials'').  A unit may have multiple abilities and an attack can have multiple specials.&lt;br /&gt;
&lt;br /&gt;
Each ability or special defines an effect based on one to three units. Most abilities apply to a single unit, and '''[filter_self]''' can be used to determine when the ability is active. Weapon specials apply to two units, which can be filtered either as &amp;quot;attacker&amp;quot; and &amp;quot;defender&amp;quot; (with the obvious meaning) or as &amp;quot;self&amp;quot; and &amp;quot;other&amp;quot; – the unit that possesses the special, and that unit's opponent. When filtering on the &amp;quot;other&amp;quot; unit, you use '''[filter_second]'''.&lt;br /&gt;
&lt;br /&gt;
Leadership-style abilities are a more complex case, as they involve three units. Like a weapon special, there is an attacker and defender, but there is also a third unit that could be referred to as the &amp;quot;teacher&amp;quot;. The &amp;quot;teacher&amp;quot; is the unit that possesses the ability, so it is referred to as &amp;quot;self&amp;quot; in the ability. A leadership ability works by temporarily granting a weapon special to either the attacker or the defender. The unit that benefits from this is referred to as the &amp;quot;student&amp;quot;, while the unit that does not benefit is simply the &amp;quot;other&amp;quot; unit. When filtering on the &amp;quot;other&amp;quot; unit, you use '''[filter_second]'''.&lt;br /&gt;
&lt;br /&gt;
== The ''[abilities]'' tag ==&lt;br /&gt;
&lt;br /&gt;
The following tags are used to describe an ability in WML:&lt;br /&gt;
&lt;br /&gt;
* '''[heals]''': modifies the hitpoints of a unit at the beginning of the healer's turn&lt;br /&gt;
* '''[regenerate]''': modifies the hitpoints of a unit at the beginning of the unit's turn&lt;br /&gt;
* '''[resistance]''': modifies the resistance of a unit to damage&lt;br /&gt;
* '''[leadership]''': modifies the damage of a unit&lt;br /&gt;
* '''[skirmisher]''': negates enemy zones of control&lt;br /&gt;
* '''[illuminates]''': modifies the time of day adjacent to the affected units&lt;br /&gt;
* '''[teleport]''': allows the unit to teleport&lt;br /&gt;
* '''[hides]''': renders the unit invisible to enemies&lt;br /&gt;
* {{DevFeature1.15|0}} All [[#The_.5Bspecials.5D_tag|weapon specials]] except for [plague], [heal_on_hit], and [swarm] can be placed in the [abilities] tag. These &amp;quot;weapon specials as abilities&amp;quot; will give that weapon special to all attacks the unit has if matches with [filter_student/opponent/etc][filter_weapon].&lt;br /&gt;
* Any other tag is valid (for example '''[dummy]'''), but will result in an ability that does nothing but report it's there. '''Note:''' a dummy ability must have an id for the name and description to display.&lt;br /&gt;
* {{DevFeature1.15|3}} All the engine [[#The_.5Bspecials.5D_tag|weapon specials]] can be placed in the [abilities] tag now.&lt;br /&gt;
&lt;br /&gt;
=== Available formula variables in Abilities and Weapon Specials  ===&lt;br /&gt;
&lt;br /&gt;
{{DevFeature1.15|?}} When using formulas in abilities and weapon specials, the following formula variables are available:&lt;br /&gt;
* '''self''': (unit) the unit that has the ability&lt;br /&gt;
* '''student''': (unit) for leadership-like abilities this is the unit that is adjacent to the unit that has the ability; if affect_self=yes, this is also unit who has ability.&lt;br /&gt;
* '''attacker''': (unit) for attack-related abilities and weapon specials, this is the attacking unit during the attack.&lt;br /&gt;
* '''defender''': (unit) for attack-related abilities and weapon specials, this is the defending unit during the attack.&lt;br /&gt;
* '''other''': (unit) the unit whose stats get modified from the ability. For abilities without 'apply_to=opponent' this is always the same as 'student'.&lt;br /&gt;
&lt;br /&gt;
=== Common keys and tags for every ability ===&lt;br /&gt;
&lt;br /&gt;
{{DevFeature1.13|?}} All keys inside any ability that expects a numeric value will also accept formulas using &lt;br /&gt;
[[Wesnoth Formula Language]]. In order to use a formula in these keys, you must enclose it in parentheses. However, do not precede those parentheses with a dollar sign like &amp;lt;code&amp;gt;$(...)&amp;lt;/code&amp;gt;, since that will erase the &amp;lt;tt&amp;gt;self&amp;lt;/tt&amp;gt; variable.&lt;br /&gt;
&lt;br /&gt;
* '''name''': the (translatable) name of the ability. If omitted, the ability will be a hidden ability.&lt;br /&gt;
* '''female_name''': the (translatable) name of the ability when possessed by a female unit. Defaults to ''name'' if not specified.&lt;br /&gt;
* '''name_inactive''': the (translatable) name of the ability when inactive. Defaults to ''name'' if not specified; if the ability is supposed to be not displayed when inactive, you must explicitly set ''name_inactive'' to an empty string (nothing after the equals sign).&lt;br /&gt;
* '''female_name_inactive''': the (translatable) name of the ability when inactive and possessed by a female unit. Defaults to ''name_inactive'' if not specified. You should thus set ''female_name'' as well!&lt;br /&gt;
* '''description''': the (translatable) description of the ability.&lt;br /&gt;
* '''description_inactive''': the (translatable) description of the ability when inactive. Defaults to ''description'' if not specified.&lt;br /&gt;
* '''special_note''' {{DevFeature1.15|14}} Translatable string, which will be displayed in the unit’s help. See also [[UnitTypeWML#Special_Notes]].&lt;br /&gt;
* '''affect_self''': if equal to 'yes' (default), the ability will affect the unit that has it.&lt;br /&gt;
* '''affect_allies''': if equal to 'yes', the ability will affect units from the same and allied sides in the specified adjacent hexes. If set to 'no' it will not affect own or allied sides. If not set (default) it will affect units on the same side but not from allied sides.&lt;br /&gt;
* '''affect_enemies''': if equal to 'yes' (default is 'no'), the ability will affect enemies in the specified adjacent hexes.&lt;br /&gt;
* '''cumulative''': if set to 'yes', this ability will be cumulative with the base value for this ability. ''Beware of the bug with cumulative leadership in 1.16 https://github.com/wesnoth/wesnoth/issues/6466 , more info see below, in &amp;quot;Extra keys used by the ''leadership'' ability&amp;quot; section''. {{DevFeature1.17|5}}, bug fixed.&lt;br /&gt;
* '''id''': this ability will not be cumulative with other abilities using this id. Must be present if cumulative is anything other than 'yes'.&lt;br /&gt;
* '''halo_image''': {{DevFeature1.17|22}} if used, the halo specified showed on unit affected by ability.&lt;br /&gt;
* '''overlay_image''': {{DevFeature1.17|22}} if used, the overlay specified showed on unit affected by ability.&lt;br /&gt;
* '''halo_image_self''': {{DevFeature1.17|22}} if used, the halo specified showed on unit who has ability when active.&lt;br /&gt;
* '''overlay_image_self''': {{DevFeature1.17|22}} if used, the overlay specified showed on unit who has ability when active.&lt;br /&gt;
* '''[filter]''': [[StandardUnitFilter]] If the unit owning the ability does not match this filter, the ability will be inactive.&lt;br /&gt;
* {{anchor|affect_adjacent|'''[affect_adjacent]'''}}: an adjacent unit that does not match this filter will not receive its effects. There can be multiple [affect_adjacent] tags in a single ability; a unit needs to match any one of these to receive the effects. The side requirement of matching units is defined by the '''affect_allies''' and '''affect_enemies''' keys. If there are no [affect_adjacent] tags, then no adjacent units will receive the effects.&lt;br /&gt;
** '''adjacent''': a comma separated list of any combination of these directions: '''n''','''ne''','''se''','''s''','''sw''','''nw'''. (See [[StandardLocationFilter#Directions|notes]])&lt;br /&gt;
** '''[filter]''': a [[StandardUnitFilter]]. {{DevFeature1.13|2}} The variable $other_unit refers to the unit owning the ability.&lt;br /&gt;
* '''[filter_self]''': if the owner of the ability does not match this filter, it will not receive the effects of the ability. [filter_self] takes a [[StandardUnitFilter]] as argument.&lt;br /&gt;
* '''[filter_adjacent]''': if an adjacent unit does not match this filter, the ability will not be active and no-one will receive its affects. Takes extra keys ''adjacent'', ''count'', ''is_enemy'', just like in a [[StandardUnitFilter]], with the one difference that, in the absence of a specified ''count'', all listed directions must match (so, with two directiones eg ''adjacent=n,s'', the default is ''count=2''). In fact, it's really a shorthand for a [filter_adjacent] nested within [filter]. The variables $this_unit and {{DevFeature1.13|2}} $other_unit both work as you'd expect. Multiple [filter_adjacent] can be provided, all of which must pass for the ability to activate.&lt;br /&gt;
* '''[filter_adjacent_location]''': like [filter_adjacent], but filters on locations instead of units. This is a shorthand for [filter][filter_location][filter_adjacent_location].&lt;br /&gt;
* {{anchor|filter_base_value|'''[filter_base_value]'''}}: filters on the value before any modifications; uses the keys '''equals''', '''not_equals''', etc. If several keys are used all have to match.&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[heals]'' ability ===&lt;br /&gt;
&lt;br /&gt;
* '''value''': the amount healed.&lt;br /&gt;
* '''poison''': can be one of ''slowed'',''cured''. ''slowed'' means poison will not take effect for adjacent units (it's not related to the weapon special &amp;quot;slows&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[regenerate]'' ability ===&lt;br /&gt;
&lt;br /&gt;
* '''value''': the amount healed.&lt;br /&gt;
* '''poison''': can be one of ''slowed'',''cured''.&lt;br /&gt;
&lt;br /&gt;
=== Extra keys and tags used by the ''[resistance]'' ability ===&lt;br /&gt;
&lt;br /&gt;
* '''value''': set resistance to this value.&lt;br /&gt;
* '''max_value''': maximum resistance value. Default: 0%. {{DevFeature1.17|24}} Default: no limit.&lt;br /&gt;
* '''add''': adds to resistance. Is ignored when '''sub''' is present.&lt;br /&gt;
* '''sub''': subtracts from resistance.&lt;br /&gt;
* '''multiply''': multiplies resistance value. &lt;br /&gt;
* '''divide''': divides resistance value.&lt;br /&gt;
* '''apply_to''': a list of damage types; if left out, the ability applies to all types.&lt;br /&gt;
* '''active_on''': one of 'defense' or 'offense'; if left out, the ability is active on both.&lt;br /&gt;
These keys affect the actual resistance (e.g. -20%), not the damage modifier normally used in [resistance] (e.g. 120).&lt;br /&gt;
* '''[filter_weapon]''': {{DevFeature1.15|0}} If present, the resistance ability only takes effect when the owner of the ability uses a matching weapon.&lt;br /&gt;
* '''[filter_second_weapon]''': {{DevFeature1.15|0}} If present, the resistance ability only takes effect when the opponent uses a matching weapon.&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[leadership]'' ability ===&lt;br /&gt;
&lt;br /&gt;
* '''value''': the percentage bonus to damage.&lt;br /&gt;
* '''add''': the cumulative percentage bonus to damage. Is ignored when '''sub''' is present.&lt;br /&gt;
* '''sub''': the cumulative percentage bonus subtracted to damage.&lt;br /&gt;
* '''multiply''': multiplies resistance value. &lt;br /&gt;
* '''divide''': divides resistance value.&lt;br /&gt;
''Note:'' cumulative leadership with '''cumulative=yes''' and '''value=''' doesn't work in 1.16 (but fixed in 1.17.12 and later). To work around use '''add=''' or '''sub=''' key (it doesn't require cumulative) (https://github.com/wesnoth/wesnoth/issues/6466 ). If you want each instance of a ''[leadership]'' with the same id to be added you will be able to reuse '''cumulative=yes''' in 1.17.12 and later, otherwise, if you want to add the value of another ''[leadership]'' only once even with the same id in several copies, use '''add'''.&lt;br /&gt;
* '''[filter_weapon]''': {{DevFeature1.15|0}} If present, the leadership ability only takes effect when the owner of the ability uses a matching weapon.&lt;br /&gt;
* '''[filter_second_weapon]''': {{DevFeature1.15|0}} If present, the leadership ability only takes effect when the opponent uses a matching weapon.&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[illuminates]'' ability ===&lt;br /&gt;
&lt;br /&gt;
Because this ability changes the terrain instead of units on it, affect_self, affect_allies, affect_enemies and [filter_adjacent] have no effect.&lt;br /&gt;
* '''value''': the percentage bonus to lawful units. Units with '''alignment=lawful''' do +''value'' % damage when under the influence of a unit with this ability. Units with '''alignment=chaotic''' do -''value'' % damage. Units with '''alignment=neutral''' are unaffected by this ability. Units with '''alignment=liminal''' do -(abs(''value'')) % damage. ''value'' can be a negative number; this is useful if you want to give Chaotic units an advantage instead of Lawful ones. &lt;br /&gt;
* '''add''': the cumulative percentage bonus to damage. Is ignored when '''sub''' is present.&lt;br /&gt;
* '''sub''': the cumulative percentage bonus subtracted to damage.&lt;br /&gt;
* '''multiply''': multiplies resistance value. &lt;br /&gt;
* '''divide''': divides resistance value.&lt;br /&gt;
* '''max_value''': the maximum percentage bonus given. Cannot be less than 0. Defaults to 0 if not present.&lt;br /&gt;
* '''min_value''': the minimum percentage bonus given. Cannot be greater than 0. Defaults to 0 if not present.&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[hides]'' ability ===&lt;br /&gt;
&lt;br /&gt;
* '''alert''': the displayed text when the unit is discovered. Default &amp;quot;Ambushed!&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Extra tags used by the ''[teleport]'' ability ===&lt;br /&gt;
&lt;br /&gt;
* '''[tunnel]''' - a [[DirectActionsWML#.5Btunnel.5D|tunnel tag]] (without the remove key) defining the tunneling source and target hexes, and maybe other conditions. (It automatically applies only to the unit with the ability.)  You may use $teleport_unit inside the [tunnel][source] and [tunnel][target] tag for filtering purposes.&lt;br /&gt;
&lt;br /&gt;
=== Extra tags and keys used by weapon special abilities ===&lt;br /&gt;
&lt;br /&gt;
* {{anchor|filter_student|'''[filter_student]'''}}: {{DevFeature1.15|0}} If present, only the unit matching this filter, either the possessor of the ability if affect_self=yes, or an adjacent unit matching '''[filter_adjacent]''' will be affected. Work like '''[filter_self]'''  of specific weapon special.&lt;br /&gt;
* '''overwrite_specials''': {{DevFeature1.15|13}} If present, allows a special abilities weapon with a numerical value to impose its value and ignore values of abilities or specials of the same type. If '''overwrite_specials=one_side''', the specials and abilities used by the opponent of the unit affected by the ability with this key and applied to it will not be affected. If '''overwrite_specials=both_sides''', all non-key-carrying abilities and all specials of the same type affecting the recipient unit will be affected, even if used by the opponent (used in the macro FORCE_CHANCE_TO_HIT).&lt;br /&gt;
* {{anchor|overwrite|'''[overwrite]'''}}: {{DevFeature1.17|22}} Part of '''overwrite_specials'''. Allows more flexibility in determining which specials should take priority over other specials of the same type.&lt;br /&gt;
** '''priority''': A numeric value to use when determining which special should be used if multiple specials of the same type have the '''overwrite_specials''' attribute. Default is 0.&lt;br /&gt;
** {{anchor|filter_specials|'''[experimental_filter_specials]'''}}: [[StandardAbilityFilter]] Further attributes to filter specials by to determine if it should take priority over other specials. Accepts the same attributes as [experimental_filter_ability].&lt;br /&gt;
* Other keys and tags appropriate to the specific weapon special.&lt;br /&gt;
&lt;br /&gt;
=== Macros for common abilities ===&lt;br /&gt;
&lt;br /&gt;
[https://www.wesnoth.org/macro-reference.html#file:abilities.cfg macro reference]&lt;br /&gt;
* ABILITY_AMBUSH&lt;br /&gt;
* ABILITY_CURES&lt;br /&gt;
* ABILITY_HEALS&lt;br /&gt;
* ABILITY_ILLUMINATES&lt;br /&gt;
* ABILITY_LEADERSHIP_LEVEL_1 to ABILITY_LEADERSHIP_LEVEL_5&lt;br /&gt;
* {{DevFeature1.13|2}} ABILITY_LEADERSHIP (replaces the above leadership macros, which are now deprecated)&lt;br /&gt;
* ABILITY_NIGHTSTALK&lt;br /&gt;
* ABILITY_REGENERATES&lt;br /&gt;
* ABILITY_SKIRMISHER&lt;br /&gt;
* ABILITY_STEADFAST&lt;br /&gt;
* ABILITY_SUBMERGE&lt;br /&gt;
* ABILITY_TELEPORT&lt;br /&gt;
&lt;br /&gt;
== The ''[specials]'' tag ==&lt;br /&gt;
&lt;br /&gt;
The '''[specials]''' tag goes inside the '''[attack]''' tag. It can contain the following tags:&lt;br /&gt;
&lt;br /&gt;
* '''[attacks]''': modifies the number of attacks of a weapon, in using '''value''', '''add''', '''sub''', '''multiply''' or '''divide''' attributes&lt;br /&gt;
* '''[berserk]''': pushes the attack for more than one combat round, using '''value''' attribute, '''value''' is 1 by default&lt;br /&gt;
* '''[chance_to_hit]''': modifies the chance to hit of a weapon, using same standard numerical attributes what '''[attacks]'''&lt;br /&gt;
* '''[damage]''': modifies the damage of a weapon, using same attributes what '''[attacks]''' and '''[chance_to_hit]'''&lt;br /&gt;
* '''[disable]''': disables the weapon&lt;br /&gt;
* '''[drains]''': heals the attacker half of the damage dealt, using same attributes what '''[attacks]''' and '''[chance_to_hit]''', '''value''' is 50 by default&lt;br /&gt;
* '''[firststrike]''': forces the weapon to always strike first&lt;br /&gt;
* '''[heal_on_hit]''': heals the attacker when an attack connects, using same attributes what '''[attacks]''' and '''[chance_to_hit]''', '''value''' is 0 by default&lt;br /&gt;
* '''[petrifies]''': turns the target to stone&lt;br /&gt;
* '''[plague]''': when used to kill an enemy, a friendly unit takes its place&lt;br /&gt;
* '''[poison]''': poisons the target&lt;br /&gt;
* '''[slow]''': slows the target&lt;br /&gt;
* '''[swarm]''': number of strikes decreases as the unit loses hitpoints&lt;br /&gt;
* '''[damage_type]''' {{DevFeature1.17|23}}: type of damage changed by replacement or addition of another type&lt;br /&gt;
Any other tag is valid, but will result in a special that does nothing but report it is there.&lt;br /&gt;
&lt;br /&gt;
=== Common keys and tags for every weapon special ===&lt;br /&gt;
&lt;br /&gt;
{{DevFeature1.13|?}} All keys inside any weapon special that expects a numeric value will also accept formulas using [[Wesnoth Formula Language]]. In order to use a formula in these keys, you must enclose it in parentheses.&lt;br /&gt;
&lt;br /&gt;
* '''name''': the (translatable) name of the special. If omitted, the special will be hidden from the player.&lt;br /&gt;
* '''name_inactive''': the (translatable) name of the special when inactive. Defaults to ''name'' if not specified; if the special is supposed to be not displayed when inactive, you must explicitly set ''name_inactive'' to an empty string (nothing after the equals sign).&lt;br /&gt;
* '''description''': the (translatable) description of the special.&lt;br /&gt;
* '''description_inactive''': the (translatable) description of the special when inactive. Defaults to ''description'' if not specified.&lt;br /&gt;
* '''special_note''' {{DevFeature1.15|14}} Translatable string, which will be displayed in the unit’s help. See also [[UnitTypeWML#Special_Notes]].&lt;br /&gt;
* '''id''': this ability will not be cumulative with other specials using this id.&lt;br /&gt;
* '''active_on''': one of '''defense''' or '''offense'''; if left out, the special is active on both.&lt;br /&gt;
* '''apply_to''': one of '''self''','''opponent''','''attacker''','''defender''','''both''' (default: ''self''). Determines who the effects of this special are applied to.&lt;br /&gt;
* '''[filter_adjacent]''': if an adjacent unit does not match this filter, the special will not be active and no-one will receive its effects. Takes extra keys ''adjacent'', ''count'', ''is_enemy'', just like in a [[StandardUnitFilter]]. In fact, it's really a shorthand for a [filter_adjacent] nested within [filter_self], with the one difference that, in the absence of a specified ''count'', all listed directions must match (so, with two directiones eg ''adjacent=n,s'', the default is ''count=2''). The variables $this_unit and {{DevFeature1.13|2}} $other_unit both work as you'd expect. Multiple [filter_adjacent] can be provided, all of which must pass for the ability to activate. &lt;br /&gt;
* '''[filter_adjacent_location]''': like [filter_adjacent], but filters on locations instead of units. This is a shorthand for [filter_self][filter_location][filter_adjacent_location].&lt;br /&gt;
* {{anchor|filter_self|'''[filter_self]'''}}: the special will only be active if the owner matches this [[StandardUnitFilter]] (SUF).&lt;br /&gt;
** '''[filter_weapon]''': a [[FilterWML#Filtering_Weapons|standard weapon filter]], including special=.&lt;br /&gt;
** '''$other_unit''': {{DevFeature1.13|2}} The special variable $other_unit refers to the opponent.&lt;br /&gt;
* {{anchor|filter_opponent|'''[filter_opponent]'''}}: the special will only be active if the opponent matches this SUF.&lt;br /&gt;
** '''[filter_weapon]''': a [[FilterWML#Filtering_Weapons|standard weapon filter]], including special=.&lt;br /&gt;
** '''$other_unit''': {{DevFeature1.13|2}} The special variable $other_unit refers to the unit that owns the weapon.&lt;br /&gt;
* {{anchor|filter_attacker|'''[filter_attacker]'''}}: the special will only be active if the attacker matches this SUF.&lt;br /&gt;
** '''[filter_weapon]''': a [[FilterWML#Filtering_Weapons|standard weapon filter]], including special=.&lt;br /&gt;
** '''$other_unit''': {{DevFeature1.13|2}} The special variable $other_unit refers to the defender.&lt;br /&gt;
* {{anchor|filter_defender|'''[filter_defender]'''}} the special will only be active if the defender matches this SUF.&lt;br /&gt;
** '''[filter_weapon]''': a [[FilterWML#Filtering_Weapons|standard weapon filter]], including special=.&lt;br /&gt;
** '''$other_unit''': {{DevFeature1.13|2}} The special variable $other_unit refers to the attacker.&lt;br /&gt;
* '''overwrite_specials''': if equal to 'one_side', then only this unit's specials are evaluated. If equal to 'both_sides', then both this unit's specials and any of the opponent's weapon specials that affect this unit are evaluated. If a special with this attribute is active, it will take precedence over any other specials of the same type that do not have this attribute. Don't applied to boolean weapon special like [poison] ,[slow], [firststrike] or [petrifies].&lt;br /&gt;
* '''[overwrite]''': {{DevFeature1.17|22}} Allows more flexibility in determining which specials should take priority over other specials of the same type.&lt;br /&gt;
** '''priority''': A numeric value to use when determining which special should be used if multiple specials of the same type have the '''overwrite_specials''' attribute. Default is 0.&lt;br /&gt;
** '''[experimental_filter_specials]''': [[StandardAbilityFilter]] Further attributes to filter specials by to determine if it should take priority over other specials. Accepts the same attributes as [experimental_filter_ability].&lt;br /&gt;
&lt;br /&gt;
=== Common keys and tags for specials with a value ===&lt;br /&gt;
&lt;br /&gt;
The '''[damage]''', '''[attacks]''', and '''[chance_to_hit]''' specials take values that specify how those specials modify their respective base values. The '''[drains]''' special takes a value specifying the percentage of damage drained (default 50) and '''[heal_on_hit]''' takes the amount to heal (default 0; negative values will harm the attacker, but not kill). &lt;br /&gt;
&lt;br /&gt;
* '''value''': the value to be used. &lt;br /&gt;
* '''add''': the number to add to the base value. Is ignored when '''sub''' is present.&lt;br /&gt;
* '''sub''': the number to subtract from the base value.&lt;br /&gt;
* '''multiply''': this multiplies the base value.&lt;br /&gt;
* '''divide''': this divides the base value.&lt;br /&gt;
* '''cumulative''': if set to 'yes', this special will be cumulative with the base value.&lt;br /&gt;
* '''backstab''': if set to 'yes', this special will only apply to the attacker, and only when there is an enemy on the target's opposite side (i.e. when the standard backstab special applies). {{DevFeature1.13|2}} This is now deprecated. The same functionality can be achieved with a [filter_adjacent] in [filter_opponent]; see the implementation of the default backstab special for details.&lt;br /&gt;
* '''[filter_base_value]''': filters on the value before any modifications; uses the keys '''equals''', '''not_equals''', '''less_than''', '''greater_than''', '''less_than_equal_to''', '''greater_than_equal_to'''.&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[damage_type]'' special {{DevFeature1.17|23}} ===&lt;br /&gt;
&lt;br /&gt;
* '''replacement_type''': replaces the attack type with the specified type when [damage_type] is active.&lt;br /&gt;
* '''alternative_type''': add a second type of attack to the existing type, it is always the one of the two which will do the most damage to the opponent which will be used.&lt;br /&gt;
&lt;br /&gt;
{{note|Don't use [damage_type] in multiplayer for Wesnoth 1.18. It's getting bugfixes during the 1.18 stable branch, which will cause out of sync errors in multiplayer.}}&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[berserk]'' special ===&lt;br /&gt;
&lt;br /&gt;
* '''value''': the maximum number of combat rounds (default 1).&lt;br /&gt;
* '''cumulative''': if set to 'yes', this special will be cumulative with other active berserk specials (on the current combatant, not with an opponent's berserk).&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[plague]'' special ===&lt;br /&gt;
&lt;br /&gt;
* '''type''': the unit type to be spawned on kill.&lt;br /&gt;
&lt;br /&gt;
=== Extra keys used by the ''[swarm]'' special ===&lt;br /&gt;
&lt;br /&gt;
* '''swarm_attacks_max''': the maximum number of attacks for the swarm. Defaults to the base number of attacks modified by any applicable [attacks] specials. If this is specified, then the base number of attacks is ignored.&lt;br /&gt;
* '''swarm_attacks_min''': the minimum number of attacks for the swarm. Defaults to zero. This can be set higher than swarm_attacks_max to cause a unit to gain attacks as health decreases.&lt;br /&gt;
The ratio of the unit's current to maximum hit points will be used to scale the number of attacks between these two values.&lt;br /&gt;
&lt;br /&gt;
Prior to version 1.11, a [swarm] special will cause [attacks] specials to be ignored. In 1.11 and later, [attacks] specials are applied before [swarm].&lt;br /&gt;
&lt;br /&gt;
=== Macros for common weapon specials ===&lt;br /&gt;
&lt;br /&gt;
* WEAPON_SPECIAL_BACKSTAB&lt;br /&gt;
* WEAPON_SPECIAL_BERSERK&lt;br /&gt;
* WEAPON_SPECIAL_CHARGE&lt;br /&gt;
* WEAPON_SPECIAL_DRAIN&lt;br /&gt;
* WEAPON_SPECIAL_FIRSTSTRIKE&lt;br /&gt;
* WEAPON_SPECIAL_MAGICAL&lt;br /&gt;
* WEAPON_SPECIAL_MARKSMAN&lt;br /&gt;
* WEAPON_SPECIAL_PLAGUE&lt;br /&gt;
* WEAPON_SPECIAL_PLAGUE_TYPE TYPE&lt;br /&gt;
* WEAPON_SPECIAL_POISON&lt;br /&gt;
* WEAPON_SPECIAL_SLOW&lt;br /&gt;
* WEAPON_SPECIAL_STONE&lt;br /&gt;
* WEAPON_SPECIAL_SWARM&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[UnitTypeWML]]&lt;br /&gt;
* [[SingleUnitWML]]&lt;br /&gt;
* [[ReferenceWML]]&lt;br /&gt;
&lt;br /&gt;
[[Category:WML Reference]]&lt;/div&gt;</summary>
		<author><name>Octalot</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=CampaignDialogue&amp;diff=72463</id>
		<title>CampaignDialogue</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=CampaignDialogue&amp;diff=72463"/>
		<updated>2024-03-07T17:43:21Z</updated>

		<summary type="html">&lt;p&gt;Octalot: Mention the POT files&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;float:right&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
__TOC__&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This page is the hub for the transcription of campaign dialogue into the wiki as a resource for writers. As such, it consists entirely of spoilers.&lt;br /&gt;
&lt;br /&gt;
These Wiki pages aren't automatically updated when the text in the campaign changes. However, files with all the text in each campaign are automatically generated as part of the support for translations. [https://github.com/wesnoth/wesnoth/blob/master/po/wesnoth-tutorial/wesnoth-tutorial.pot Link to the one for the tutorial]. The others can be found by following that link and then replacing both ''tutorial''s in the URL with the campaign acronym (completely lowercase).&lt;br /&gt;
&lt;br /&gt;
The campaigns are ordered chronologically. Each has a relevant year (generally beginning) listed.&lt;br /&gt;
&lt;br /&gt;
==Tutorial==&lt;br /&gt;
''Main article: [[CampaignDialogue:Tutorial]]&lt;br /&gt;
&lt;br /&gt;
==The Rise Of Wesnoth==&lt;br /&gt;
''Main article: [[CampaignDialogue:TROW]]&lt;br /&gt;
&lt;br /&gt;
5 BW - 1 YW.&lt;br /&gt;
&lt;br /&gt;
==Winds of Fate==&lt;br /&gt;
''Main article: [[CampaignDialogue:WoF]]&lt;br /&gt;
&lt;br /&gt;
3-4 YW.&lt;br /&gt;
&lt;br /&gt;
==An Orcish Incursion==&lt;br /&gt;
''Main Article: [[CampaignDialogue:AOI]]&lt;br /&gt;
&lt;br /&gt;
8-9 YW.&lt;br /&gt;
&lt;br /&gt;
==Legend of Wesmere==&lt;br /&gt;
''Main Article: [[CampaignDialogue:LOW]]&lt;br /&gt;
&lt;br /&gt;
12-93 YW.&lt;br /&gt;
&lt;br /&gt;
==Secrets of the Ancients==&lt;br /&gt;
''Main article: [[CampaignDialogue:SOTA]]&lt;br /&gt;
&lt;br /&gt;
23 YW.&lt;br /&gt;
&lt;br /&gt;
==Sceptre of Fire==&lt;br /&gt;
''Main article: [[CampaignDialogue:SOF]]&lt;br /&gt;
&lt;br /&gt;
25-40 YW.&lt;br /&gt;
&lt;br /&gt;
==Two Brothers==&lt;br /&gt;
''Main article: [[CampaignDialogue:TB1.9]]&lt;br /&gt;
&lt;br /&gt;
363 YW.&lt;br /&gt;
&lt;br /&gt;
==Descent into Darkness==&lt;br /&gt;
''Main article: [[CampaignDialogue:DID]]&lt;br /&gt;
&lt;br /&gt;
389 YW.&lt;br /&gt;
&lt;br /&gt;
==Delfador's Memoirs==&lt;br /&gt;
''Main article: [[CampaignDialogue:DM]]&lt;br /&gt;
&lt;br /&gt;
468-470 YW.&lt;br /&gt;
&lt;br /&gt;
==Liberty==&lt;br /&gt;
''Main Article: [[CampaignDialogue:L]]&lt;br /&gt;
&lt;br /&gt;
501 YW.&lt;br /&gt;
&lt;br /&gt;
==Heir to the Throne==&lt;br /&gt;
''Main Article: [[CampaignDialogue:HttT]]&lt;br /&gt;
&lt;br /&gt;
517-518 YW.&lt;br /&gt;
&lt;br /&gt;
==Northern Rebirth==&lt;br /&gt;
''Main Article: [[CampaignDialogue:NR]]&lt;br /&gt;
&lt;br /&gt;
534-535 YW.&lt;br /&gt;
&lt;br /&gt;
==The Hammer of Thursagan==&lt;br /&gt;
''Main Article: [[CampaignDialogue:THOT]]&lt;br /&gt;
&lt;br /&gt;
550-551 YW.&lt;br /&gt;
&lt;br /&gt;
==The South Guard==&lt;br /&gt;
''Main Article: [[CampaignDialogue:TSG]]&lt;br /&gt;
&lt;br /&gt;
607-608 YW.&lt;br /&gt;
&lt;br /&gt;
==Eastern Invasion==&lt;br /&gt;
''Main Article: [[CampaignDialogue:EI]]&lt;br /&gt;
&lt;br /&gt;
625-627 YW.&lt;br /&gt;
&lt;br /&gt;
==Dead Water==&lt;br /&gt;
''Main Article: [[CampaignDialogue:DW]]&lt;br /&gt;
&lt;br /&gt;
626 YW.&lt;br /&gt;
&lt;br /&gt;
==Son of the Black Eye==&lt;br /&gt;
''Main Article: [[CampaignDialogue:SOTBE]]&lt;br /&gt;
&lt;br /&gt;
742-758 YW.&lt;br /&gt;
&lt;br /&gt;
==Under the Burning Suns==&lt;br /&gt;
''Main article: [[CampaignDialogue:UTBS]]&lt;br /&gt;
&lt;br /&gt;
??? AF.&lt;br /&gt;
&lt;br /&gt;
[[Category:Create|*]]&lt;br /&gt;
[[Category:Writing|*]]&lt;br /&gt;
[[Category:Campaigns|*]]&lt;/div&gt;</summary>
		<author><name>Octalot</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=WesnothTranslationsHowTo&amp;diff=72437</id>
		<title>WesnothTranslationsHowTo</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=WesnothTranslationsHowTo&amp;diff=72437"/>
		<updated>2024-03-02T15:54:14Z</updated>

		<summary type="html">&lt;p&gt;Octalot: /* Tools */ updating all the files needs &amp;quot;po4a-update&amp;quot; and &amp;quot;manual&amp;quot; too&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains information on how-to translate and submit translation updates.&lt;br /&gt;
&lt;br /&gt;
==  How to submit your translations  ==&lt;br /&gt;
&lt;br /&gt;
Important:  Please '''do not submit translations as pull requests''' on the Wesnoth github repository site.  While that seems like a good idea, it causes potential complications that we cannot always easily resolve.  As a result, we cannot accept translations submitted via pull request and will close such PRs immediately.&lt;br /&gt;
&lt;br /&gt;
'' ''' Translation Maintainers ''' ''&lt;br /&gt;
&lt;br /&gt;
The translation maintainers should send the updated/new translation&lt;br /&gt;
po-files to the language coordinator:&lt;br /&gt;
Ivanovic (crazy-ivanovic AT gmx DOT net).&lt;br /&gt;
Additionally they have to quickly check over other people's translations&lt;br /&gt;
(other people translating the same language) as the other translators&lt;br /&gt;
(if any) will have to send their translations to their language maintainer&lt;br /&gt;
before inclusion in the source-code repository. You should also subscribe to the [http://www.wesnoth.org/wiki/WesnothTranslations#Mailing_List wesnoth-i18n mailinglist].&lt;br /&gt;
&lt;br /&gt;
Send the files as an archive containing the complete .po files (no .mo or .gmo files) and ensure that they follow the directory structure used in version control. For example, the archive with the German (de) translations should therefore be structured as follows:&lt;br /&gt;
 wesnoth/de.po&lt;br /&gt;
 wesnoth-httt/de.po &lt;br /&gt;
 wesnoth-tutorial/de.po&lt;br /&gt;
etc.&lt;br /&gt;
&lt;br /&gt;
'' ''' Translators ''' ''&lt;br /&gt;
&lt;br /&gt;
The other translators (those who are not maintainers) should contact&lt;br /&gt;
the maintainer for their language to see if there is some work to do.&lt;br /&gt;
After you have done some work on the translation you should email it&lt;br /&gt;
to your language maintainer. They will then (if needed) check it over&lt;br /&gt;
before sending it on to the language coordinators. A list of all translators&lt;br /&gt;
currently working on a language is found on each language page.&lt;br /&gt;
&lt;br /&gt;
'' ''' NEW Translators ''' ''&lt;br /&gt;
&lt;br /&gt;
If you want to help out with the translation of an language already started on,&lt;br /&gt;
contact the translation maintainer for the language.&lt;br /&gt;
If you want to start translation of Wesnoth to a new language,&lt;br /&gt;
first contact Ivanovic.&lt;br /&gt;
And then just follow the instructions written in '' Translators '' .&lt;br /&gt;
&lt;br /&gt;
==  Translations How-To  ==&lt;br /&gt;
&lt;br /&gt;
If you are a translator, see [[GettextForTranslators]] for more information.&lt;br /&gt;
&lt;br /&gt;
If you are a developer or UMC author, gettext internals for Wesnoth are discussed here: [[GettextForWesnothDevelopers]]. For UMC authors, the tool for generating .po files is linked to from [[GettextForWesnothDevelopers#Generating the_.pot_and_.po_files_for_UMC]].&lt;br /&gt;
&lt;br /&gt;
=== Files ===&lt;br /&gt;
&lt;br /&gt;
We will use the Swedish (sv) language and the ''wesnoth-editor'' domain as an example. There are three important files for each text-domain:&lt;br /&gt;
* ''wesnoth-editor/wesnoth-editor.pot'' file, which is a template containing all the strings used in the domain, but with empty strings instead of a translation. You can see how a ''.pot'' file looks like in the repository : [https://github.com/wesnoth/wesnoth/blob/master/po/wesnoth-editor/wesnoth-editor.pot#L50 Current repository version].&lt;br /&gt;
* ''wesnoth-editor/sv.po'', the file containing the translation, you can see how a ''.po'' file looks like in the repository: [https://github.com/wesnoth/wesnoth/blob/master/po/wesnoth-editor/sv.po#L50 Current repository version].&lt;br /&gt;
* ''{translations_dir}/sv/LC_MESSAGES/wesnoth-editor.mo'', which is a binary version of &amp;lt;lang&amp;gt;.po that the game will use for efficiency reasons. This is not found in the repo, but is created during compilation of the game.&lt;br /&gt;
&lt;br /&gt;
The first of these files, we update every once in a while, when there is new or modified text,&lt;br /&gt;
for instance when a new campaign scenario hits the repository.&lt;br /&gt;
&lt;br /&gt;
=== Tools ===&lt;br /&gt;
&lt;br /&gt;
For the main Wesnoth repository, the build system can handle updating these files.&lt;br /&gt;
* Using SCons, '''scons pot-update po4a-update manual''' will do everything. This can be done without building the Wesnoth executables.&lt;br /&gt;
** '''scons -j8 pot-update po4a-update manual''' is quicker, because it does it in parallel.&lt;br /&gt;
** '''scons -j8 pot-update''' will do all in-game text, omitting the manpages and manual&lt;br /&gt;
* Using CMake, enable '''ENABLE_NLS''' and '''ENABLE_POT_UPDATE_TARGET''', then run '''make -C po pot-update''' to generate the files.&lt;br /&gt;
&lt;br /&gt;
Some notes on the individual steps that are used during the build:&lt;br /&gt;
&lt;br /&gt;
C++ and Python files are parsed with ''xgettext'', WML and Lua files are parsed with ''wmlxgettext''. The results are then combined to generate the ''.pot'' file.&lt;br /&gt;
&lt;br /&gt;
Then, ''msgmerge'' is used to merge this new &amp;quot;state of the game strings&amp;quot; with your current translations, and generate a new, up-to-date, ''sv.po''.&lt;br /&gt;
&lt;br /&gt;
Then, a tool called ''msgfmt'' is called, which generates a new ''wesnoth.mo'' file from your ''wesnoth.po'' file, which will be used by the game once installed.&lt;br /&gt;
&lt;br /&gt;
=== Summary ===&lt;br /&gt;
&lt;br /&gt;
That was for the &amp;quot;Big Picture&amp;quot;.&lt;br /&gt;
But you really just need to be concerned with the po file:&lt;br /&gt;
translating new strings, checking &amp;quot;fuzzy&amp;quot; entries.&lt;br /&gt;
We can handle the administrative tasks of updating etc.&lt;br /&gt;
You really don't need to bother with any of these commands, unless you want to compile .mo files to check in-game.&lt;br /&gt;
&lt;br /&gt;
Ivanovic is now responsible for integrating translations into Wesnoth, with the help of Torangan and ott.&lt;br /&gt;
You should contact Ivanovic (crazy-ivanovic AT gmx DOT net), and he'll put them in the game.&lt;br /&gt;
&lt;br /&gt;
==  Specifying typefaces and fonts for a translation  ==&lt;br /&gt;
&lt;br /&gt;
Translations in a language which use characters outside of the Latin, Greek and Cyrillic character sets may want to specify different typefaces. There are some translatable strings in data/hardwired/fonts.cfg which specify the fonts to use; these strings appear in the ''wesnoth'' text domain, and can be configured by putting the required fonts' names as the translations.&lt;br /&gt;
&lt;br /&gt;
Note the documentation in data/hardwired/fonts.cfg.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[GettextForTranslators]]&lt;br /&gt;
* [[WesnothTranslations]]&lt;br /&gt;
* [[TranslatorsGuide]]&lt;br /&gt;
* [http://gettext.wesnoth.org Translation statistics]&lt;br /&gt;
&lt;br /&gt;
[[Category:Translations]]&lt;/div&gt;</summary>
		<author><name>Octalot</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=EffectWML&amp;diff=72436</id>
		<title>EffectWML</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=EffectWML&amp;diff=72436"/>
		<updated>2024-03-02T14:50:06Z</updated>

		<summary type="html">&lt;p&gt;Octalot: /* [effect]apply_to=variation */ Remove mention of the type+variation bug, it was fixed in 1.14.10 and 1.15.3&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WML Tags}}&lt;br /&gt;
&lt;br /&gt;
== [effect] ==&lt;br /&gt;
&lt;br /&gt;
The tag [effect] is used to describe one modification to a unit. Any number of [effect] tags can be used to describe a complete modification.&lt;br /&gt;
&lt;br /&gt;
Modifications are permanent changes to a unit; however using an [[DirectActionsWML#.5Bobject.5D|[object]]] with a limited ''duration'' to apply an [effect] will cause the unit to be rebuilt without the effect's effects when the duration expires. &lt;br /&gt;
&lt;br /&gt;
The following keys and subtags are always recognized:&lt;br /&gt;
* '''[filter]''': only apply this effect if the affected unit matches. See [[StandardUnitFilter]] for details.&lt;br /&gt;
* '''times''': describes how many times the effect is applied. The default is to apply the effect once. Other possible value : &amp;quot;per level&amp;quot; which means that the effect is applied level times, where level is the unit level. {{DevFeature1.13|5}} Integers are now supported for ''times''.&lt;br /&gt;
* '''apply_to''': describes what the effect actually affects. New effect types can be added with [[LuaWML/Units#wesnoth.effects]].&lt;br /&gt;
[effect] uses different keys depending on the value of '''apply_to'''.  '''apply_to''' can take the following values:&lt;br /&gt;
* {{anchor|apply_to-new_attack|'''new_attack'''}}: will use all other keys and tags as the description of an attack that will be added to the unit. See [attack] in [[UnitTypeWML#Attacks|UnitTypeWML]].&lt;br /&gt;
* {{anchor|apply_to-remove_attacks|'''remove_attacks'''}}: remove the matching attacks. All tags from the attack filter construct will be used to match the attack; see [[FilterWML#Filtering Weapons|FilterWML]]. Do not use a [filter] tag otherwise it will not work properly.&lt;br /&gt;
* {{anchor|apply_to-attack|'''attack'''}}: find an attack and modify it.  All tags from the attack filter construct will be used to match the attack; see [[FilterWML#Filtering Weapons|FilterWML]].  After that, the following keys and tags can be used to modify the attack.  Note: do not use a [filter] tag.  Just put the keys you want to filter on inside the [effect] tag.&lt;br /&gt;
** '''set_name''': change the attack's name (ie identifier).&lt;br /&gt;
** '''set_description''': change the attack's description (ie displayed name). &lt;br /&gt;
** '''set_type''': change the attack type. The standard values are '''blade''', '''pierce''', '''impact''', '''fire''', '''cold''', and '''arcane'''.&lt;br /&gt;
** '''set_range''': change the attack range. The standard values are '''ranged''' and '''melee'''.&lt;br /&gt;
** '''set_icon''': change the attack's icon.&lt;br /&gt;
** {{anchor|set_specials|'''[set_specials]'''}}: change the attack's specials. The specials to add are given exactly as in the [[AbilitiesWML#The_.5Bspecials.5D_tag|[specials]]] tag.&lt;br /&gt;
*** '''mode''': if '''append''', adds the given specials to the attack. If '''replace''', replaces the existing specials with the given ones. Default '''replace'''.&lt;br /&gt;
**** {{DevFeature1.15|3}} A deprecation warning is triggered unless the '''mode''' attribute is set, although the effect will still be '''replace'''. This is to allow the default to change in the 1.17.x series.&lt;br /&gt;
** '''remove_specials''': remove the listed specials. The value of this key is the comma-separated list of the id of the specials to remove. This key is always evaluated before a [set_specials] tags in the same [effect]&lt;br /&gt;
** '''increase_damage''': increases the attack's damage.  This can be positive or negative, so you can use it to decrease damage as well.  If it ends in a percent(''''%''''), the change in damage will be a percentage ratio of the attack's original damage.&lt;br /&gt;
** '''increase_attacks''': increases the number of attack strikes. Like '''increase_damage''', it can be positive or negative, or a percentage.&lt;br /&gt;
** '''increase_accuracy''': increases the attack accuracy; can be positive or negative, or a percentage&lt;br /&gt;
** '''increase_parry''': increases the attack parry bonus; can be positive or negative, or a percentage&lt;br /&gt;
** '''increase_movement_used''': {{DevFeature1.13|2}} increases the movement points used by the attack; can be positive or negative, or a percentage&lt;br /&gt;
** '''increase_attacks_used''': {{DevFeature1.17|13}} increases the attack points used by the attack; can be positive or negative, or a percentage&lt;br /&gt;
** '''set_damage''' {{DevFeature1.13|2}} like increase_damage, but sets the damage to a specific value instead of setting it relative to its original value&lt;br /&gt;
** '''set_attacks''' {{DevFeature1.13|2}} like increase_attacks, but sets the attacks to a specific value instead of setting it relative to its original value&lt;br /&gt;
** '''set_accuracy''' {{DevFeature1.13|2}} like increase_accuracy, but sets the accuracy to a specific value instead of setting it relative to its original value&lt;br /&gt;
** '''set_parry''' {{DevFeature1.13|2}} like increase_parry, but sets the parry to a specific value instead of setting it relative to its original value&lt;br /&gt;
** '''set_movement_used''' {{DevFeature1.13|2}} like increase_movement_used, but sets the movement used to a specific value instead of setting it relative to its original value&lt;br /&gt;
** '''set_attacks_used''' {{DevFeature1.17|13}} like increase_attacks_used, but sets the attacks used to a specific value instead of setting it relative to its original value&lt;br /&gt;
** '''attack_weight''': change the attack's attack_weight. See [attack] in [[UnitTypeWML#Attacks|UnitTypeWML]] for explanations about attack_weight.&lt;br /&gt;
** '''defense_weight''': change the attack's defense_weight. See [attack] in [[UnitTypeWML#Attacks|UnitTypeWML]] for explanations about defense_weight.&lt;br /&gt;
* {{anchor|apply_to-max_attacks|'''max_attacks'''}}: {{DevFeature1.13|2}} change the unit's maximum attacks per turn&lt;br /&gt;
** '''increase''': how much to increase by; can be positive or negative, or a percentage&lt;br /&gt;
* {{anchor|apply_to-hitpoints|'''hitpoints'''}}: modifies the unit's HP and/or max HP.&lt;br /&gt;
** '''increase''': the amount to increase the unit's HP.&lt;br /&gt;
** '''heal_full''': if present  and not set to &amp;quot;no&amp;quot; the unit will be put back to full HP.&lt;br /&gt;
** '''increase_total''': will increase the total HP of the unit.  Can be specified either as a negative or a positive value.  It can also be specified as a percentage of the current total; i.e. &amp;quot;-50%&amp;quot; will cut max HP in half.&lt;br /&gt;
** '''violate_maximum''': it the unit ends up with more than its max HP after these modifications, and this key is present (set to any non-null value, ex. '''yes'''), the unit's HP won't be lowered to its max HP.&lt;br /&gt;
* {{anchor|apply_to-movement|'''movement'''}}: modifies the unit's movement points.&lt;br /&gt;
** '''increase''': maximum movement is increased by this amount. It can be positive, negative, or specified as a percentage.&lt;br /&gt;
** '''set''': maximum movement is set to a specific value.&lt;br /&gt;
** '''apply_to_vision''': {{DevFeature1.15|13}} if set to '''yes''' (which is the default), then the vision points will change by the same amount. See [[#Movement_and_Vision|Movement and Vision]].&lt;br /&gt;
* {{anchor|apply_to-vision|'''vision'''}}: {{DevFeature1.13|2}} modifies the unit's vision points. Note: this has side effects described in [[#Movement_and_Vision|Movement and Vision]].&lt;br /&gt;
** '''increase''': maximum vision is increased by this amount. It can be positive, negative, or specified as a percentage.&lt;br /&gt;
** '''set''': maximum vision is set to a specific value. &lt;br /&gt;
* {{anchor|apply_to-jamming|'''jamming'''}}: {{DevFeature1.13|2}} modifies the unit's jamming points.&lt;br /&gt;
** '''increase''': maximum jamming is increased by this amount. It can be positive, negative, or specified as a percentage.&lt;br /&gt;
** '''set''': maximum jamming is set to a specific value.&lt;br /&gt;
* {{anchor|apply_to-experience|'''experience'''}}: affects the unit's current XP.&lt;br /&gt;
** '''increase''': current XP is increased by this amount. It can be positive, negative, or specified as a percentage.&lt;br /&gt;
** '''set''': current XP is set to a specific value.&lt;br /&gt;
* {{anchor|apply_to-max_experience|'''max_experience'''}}: affects the amount of XP the unit needs for the next level.&lt;br /&gt;
** '''increase''': how to change the xp; again it can be negative, positive or a percentage.&lt;br /&gt;
** '''set''': current max XP is set to a specific value.&lt;br /&gt;
* {{anchor|apply_to-loyal|'''loyal'''}}: no keys associated. The affected unit will be loyal i.e have an upkeep of 0.&lt;br /&gt;
* {{anchor|apply_to-fearless|'''fearless'''}}: Add/Remove fearless attribute.&lt;br /&gt;
** '''set''': new value for fearless (boolean). Defaults to '''yes'''.&lt;br /&gt;
* {{anchor|apply_to-healthy|'''healthy'''}}: Add/Remove healthy attribute.&lt;br /&gt;
** '''set''': new value for healthy (boolean). Defaults to '''yes'''.&lt;br /&gt;
* {{anchor|apply_to_movement_costs|'''movement_costs'''}}: speed through specific terrain is modified&lt;br /&gt;
** '''replace''': If set to &amp;quot;yes&amp;quot;, any new values replace the old ones. Otherwise, new values are added to old values (negative values allowed). Defaults to '''no'''.&lt;br /&gt;
** '''[movement_costs]''': a subtag that describes the new movement costs just like under [[UnitsWML#.5Bmovetype.5D|[movetype]]] if replace is set to &amp;quot;yes&amp;quot;.&lt;br /&gt;
* {{anchor|apply_to-vision_costs|'''vision_costs'''}}: vision through specific terrain is modified&lt;br /&gt;
** '''replace''': If set to &amp;quot;yes&amp;quot;, any new values replace the old ones. Otherwise, new values are added to old values (negative values allowed). Defaults to '''no'''.&lt;br /&gt;
** '''[vision_costs]''': a subtag that describes the new vision costs just like under [[UnitsWML#.5Bmovetype.5D|[movetype]]] if replace is set to &amp;quot;yes&amp;quot;.&lt;br /&gt;
* {{anchor|apply_to-jamming_costs|'''jamming_costs'''}}: jamming through specific terrain is modified&lt;br /&gt;
** '''replace''': If set to &amp;quot;yes&amp;quot;, any new values replace the old ones. Otherwise, new values are added to old values (negative values allowed). Defaults to '''no'''.&lt;br /&gt;
** '''[jamming_costs]''': a subtag that describes the new jamming costs just like under [[UnitsWML#.5Bmovetype.5D|[movetype]]] if replace is set to &amp;quot;yes&amp;quot;.&lt;br /&gt;
* {{anchor|apply_to-defense|'''defense'''}}: Sets the unit's chance to be hit in specific terrain (100 - the unit's defense as shown in-game). &lt;br /&gt;
** '''replace''': If set to &amp;quot;yes&amp;quot;, any new values replace the old ones. Otherwise, new values are added to old values. In most cases, adding a positive number makes the unit easier to hit, while adding a negative number makes the unit harder to hit. The new value is added to the absolute value of the old, and the sign of the old value is preserved. Defaults to '''no'''.&lt;br /&gt;
** '''[defense]''': a subtag that describes the new defense just like under [[UnitsWML#.5Bmovetype.5D|[movetype]]] if replace is set to &amp;quot;yes&amp;quot;.&lt;br /&gt;
* {{anchor|apply_to-resistance|'''resistance'''}}: Sets percent damage taken from combat (100 - the unit's resistance as shown in-game)&lt;br /&gt;
** '''replace''': If set to &amp;quot;yes&amp;quot;, any new values replace the old ones. Otherwise, new values are added to old values. Adding a positive number makes the unit take more damage, while adding a negative number makes the unit take less damage. Defaults to '''no'''.&lt;br /&gt;
** '''[resistance]''': a subtag that describes the new resistance just like under [[UnitsWML#.5Bmovetype.5D|[movetype]]] if replace is set to &amp;quot;yes&amp;quot;.&lt;br /&gt;
* {{anchor|apply_to-variation|'''variation'''}}: switches the unit into one of its variations. Similar to the '''type''' effect below, this might not behave properly outside of [advancement].&lt;br /&gt;
** '''name''': the id of the variation to invoke. &lt;br /&gt;
* {{anchor|apply_to-type|'''type'''}}: transforms the unit into a new unit_type. This does not work in [trait]; in ActionWML it's recommended to use [transform_unit] instead of an [object] with this effect. This effect cannot be undone with [remove_object].&lt;br /&gt;
** '''name''': the id of the unit_type to invoke.&lt;br /&gt;
* {{anchor|apply_to-status|'''status'''}}: modifies the status affecting the unit.&lt;br /&gt;
** '''add''': a list of status modifications to add. Beware, these may be reapplied later, such as when the unit is recalled or levels up; if in an event, you can use [[InternalActionsWML|[store_unit]]] and [[DirectActionsWML|[unstore_unit]]], modifying unit.status.name directly, to avoid this, or if you are creating the unit, you can just add it to the unit's [status] tag in the [unit] tag.  These are listed in [status], [[SingleUnitWML]].&lt;br /&gt;
** '''remove''': a list of status modifications to remove.&lt;br /&gt;
* {{anchor|apply_to-zoc|'''zoc'''}}: toggle the zone of control.&lt;br /&gt;
** '''value''': new value for zoc (boolean).&lt;br /&gt;
* {{anchor|apply_to-profile|'''profile'''}}: customize the profile of the unit. See [[UnitTypeWML]].&lt;br /&gt;
** '''portrait''': new image to display when the unit speaks.&lt;br /&gt;
** '''small_portrait''': new image to display in unit reports.&lt;br /&gt;
** '''description''': sets the text to display when hovering over the unit's type in the righthand pane.&lt;br /&gt;
** '''[special_note]''': {{DevFeature1.15|2}} Adds or removes a special note in the unit's description.&lt;br /&gt;
*** '''remove''': A boolean value specifying whether to add or remove a note. Defaults to '''no'''.&lt;br /&gt;
*** '''note''' (translatable): The text of the note you want to add or remove. If removing a note, this must be an exact match, character-for-character, for the note you want to remove, and must also be in the same textdomain.&lt;br /&gt;
*** Since the tag name is the same, notes can also be added using the standard special note macros, eg '''{NOTE_HEALS}'''.&lt;br /&gt;
*** To remove a note, you can simply suffix '''{NOTE_REMOVE}''' to the regular note macro, eg '''{NOTE_HEALS}{NOTE_REMOVE}'''.&lt;br /&gt;
* {{anchor|apply_to-new_ability|'''new_ability'''}}: Adds one or more abilities to a unit.&lt;br /&gt;
** '''[abilities]''': A subtag that contains the ability definitions.&lt;br /&gt;
* '''remove_ability''': Removes one or more abilities from a unit. Abilities are not reference counted: added, added, removed = gone.&lt;br /&gt;
** '''[abilities]''': A subtag that contains the ability definitions. Strictly speaking, all that is needed is the id= inside some tag. {{DevFeature1.17|17}} This is now deprecated, use [filter_ability] instead.&lt;br /&gt;
** {{DevFeature1.17|17}} '''[filter_ability]''': A subtag that contains the ability definitions like type of abilities, id, or other attributes like affect_self or [affect_adjacent] but not generic filter.&lt;br /&gt;
* {{anchor|apply_to-new_animation|'''new_animation'''}}: contain animations that will be added to the unit, it can contain multiple animation blocks, and a single &amp;quot;id=&amp;quot; line. That Id should be unique for each effect block and is used by the engine to reuse WML parsing, making the loading faster. See [[AnimationWML]] for further reference.&lt;br /&gt;
* {{anchor|apply_to-image_mod|'''image_mod'''}}: modify the image path function ([[ImagePathFunctions]]) of all the unit's frames. Due to a bug, the effect is permanent even inside [object]duration=turn&lt;br /&gt;
** '''replace''': replaces the image path function(s) to be used, e.g. &amp;quot;RC(magenta&amp;gt;red)&amp;quot;&lt;br /&gt;
** '''add''': adds an image path function without removing any existing ones.&lt;br /&gt;
** If needed, you can also define new [[GameConfigWML#Color_Palettes|color palettes]] here.&lt;br /&gt;
* {{anchor|apply_to-ellipse|'''ellipse'''}}: Change the image used for the unit's ellipse.&lt;br /&gt;
** '''ellipse''' : the new image to use. Can be set to &amp;quot;none&amp;quot; to disable the ellipse.&lt;br /&gt;
* {{anchor|apply_to-halp|'''halo'''}}: Change the image used for the unit's halo.&lt;br /&gt;
** '''halo''': the new image to use.&lt;br /&gt;
* {{anchor|apply_to-overlay|'''overlay'''}}: Change the unit's overlays.&lt;br /&gt;
**'''add''': the specified overlay will be added to the unit's overlays. It can be a comma separated list with multiple overlays. ''Note: overlays added in this way cannot be removed by [remove_unit_overlay] until the effect's duration is over.''&lt;br /&gt;
**'''replace''': all the unit's overlays will be removed and replaced with the specified one. Again, it can be a comma separated list. ''Note: overlays replaced in this way cannot be modified by [unit_overlay] or [remove_unit_overlay] until the effect's duration is over.''&lt;br /&gt;
**'''remove''': {{DevFeature1.15|0}} the specified overlay will be removed from the unit's overlays. It can be a comma separated list with multiple overlays.&lt;br /&gt;
** {{DevFeature1.15|0}} [unit_overlay] and [remove_unit_overlay] are now equivalent to adding a permanent object with this effect, after checking if the unit already has / already doesn't have the overlay (effects with temporary durations will cause false positives / false negatives in this check).&lt;br /&gt;
* {{anchor|apply_to-recall_cost|'''recall_cost'''}}: {{DevFeature1.13|2}} change a unit's recall cost&lt;br /&gt;
** '''set''': set recall cost to a specific value, or a percentage of original value&lt;br /&gt;
** '''increase''': alter recall cost relative to original value; can be positive or negative, or a percentage&lt;br /&gt;
* {{anchor|apply_to-alignment|'''alignment'''}}: {{DevFeature1.13|2}} change a unit's alignment&lt;br /&gt;
** '''set''': the new alignment (one of chaotic, lawful, neutral, liminal)&lt;br /&gt;
* {{anchor|apply_to-new_advancement|'''new_advancement'''}}: {{DevFeature1.13|2}} add new advancement choices to the unit&lt;br /&gt;
** '''replace''': whether to replace existing advancement choices; if this key is set to yes, existing advancement choices are cleared only if you're adding a choice of the same type. (That is, unit type advancements are cleared only if you're adding a new unit advancement choice, and AMLA choices are cleared only if you're adding new AMLA choices.)&lt;br /&gt;
** '''types''': a comma-separated list of additional unit types the unit can advance to. ('''Note:''' If using this, you probably want to include a filter to prevent the unit from being able to advance to this type once it has already done so.)&lt;br /&gt;
** '''[advancement]''': an advancement choice to add, see [[UnitTypeWML#After_max_level_advancement_(AMLA)|AMLAs]]; you can have several of these tags to add multiple advancement choices at the same time.&lt;br /&gt;
* {{anchor|apply_to-remove_advancement|'''remove_advancement'''}}: {{DevFeature1.13|2}} remove existing advancement choices from the unit&lt;br /&gt;
** '''types''': a list of unit type advancements to remove as a possibility&lt;br /&gt;
** '''amlas''': a list of AMLA id attributes; any advancement possibility with the given id will be removed&lt;br /&gt;
* {{anchor|apply_to-level|'''level'''}}: {{DevFeature1.17|15}} change a unit's level. '''Note:''' this key is incompatible with ''times=per level''; if this combination is used, the engine reports a warning and uses ''times=1'' as fallback value&lt;br /&gt;
** '''set''': set level to a specific value; can be positive or negative, but not a percentage&lt;br /&gt;
** '''increase''': alter level relative to original value; can be positive or negative, but not a percentage&lt;br /&gt;
&lt;br /&gt;
== Movement and Vision ==&lt;br /&gt;
&lt;br /&gt;
Wesnoth 1.14 introduced vision points; by default units have the same number of vision points as their max movement points. However, combining effects that change vision with effects that change movement had edge cases which were reworked in 1.16:&lt;br /&gt;
&lt;br /&gt;
Consider a unit with 5 mp, and default vision:&lt;br /&gt;
* It has (effectively) 5 mp and 5 vp.&lt;br /&gt;
* After (mp + 1), it will have 6 mp and 6 vp.&lt;br /&gt;
* After (vp + 2), it will have 5 mp and 7 vp.&lt;br /&gt;
&lt;br /&gt;
In 1.14, using an effect with apply_to=vision breaks the link between vision and movement:&lt;br /&gt;
* After (mp + 1) (vp + 2), it will have 6 mp and 8 vp.&lt;br /&gt;
* After (vp + 2) (mp + 1), it will have 6 mp and 7 vp.&lt;br /&gt;
&lt;br /&gt;
{{DevFeature1.15|13}}, [effect]apply_to=movement has another attribute apply_to_vision, which defaults to true. With that change, the order that the effects are applied in doesn't matter:&lt;br /&gt;
* After (mp + 1) (vp + 2), it will have 6 mp and 8 vp.&lt;br /&gt;
* After (vp + 2) (mp + 1), it will have 6 mp and 8 vp.&lt;br /&gt;
&lt;br /&gt;
Increasing movement by 50% increases vision by (50% of movement) not by (50% of vision). For a unit that started with 6 mp and 8 vp, the following effect would give it 9 mp and 11 vp.&lt;br /&gt;
    [effect]&lt;br /&gt;
        apply_to=movement&lt;br /&gt;
        increase=50%&lt;br /&gt;
    [/effect]&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
== Effect: apply_to = new_animation  ==&lt;br /&gt;
This is the only way to change animations of units after they have been placed on the map.&lt;br /&gt;
In this example, I add very simple idle animation (taken from Goblin Spearman) to the unit, which moves to hex (x=1, y=5). If you want something more complex, you need to check [[AnimationWML]] page.&lt;br /&gt;
&lt;br /&gt;
  [event]&lt;br /&gt;
    name = moveto&lt;br /&gt;
    [filter]&lt;br /&gt;
      x,y = 1,5&lt;br /&gt;
    [/filter]&lt;br /&gt;
    [object]&lt;br /&gt;
      [filter]&lt;br /&gt;
        x,y = 1,5&lt;br /&gt;
      [/filter]&lt;br /&gt;
      [effect]&lt;br /&gt;
        apply_to = new_animation&lt;br /&gt;
        [idle_anim]&lt;br /&gt;
          {STANDARD_IDLE_FILTER}&lt;br /&gt;
          start_time=0&lt;br /&gt;
          [frame]&lt;br /&gt;
            image=&amp;quot;units/goblins/spearman-idle-[1~12].png:[150*3,300,150*8]&amp;quot;&lt;br /&gt;
          [/frame]&lt;br /&gt;
        [/idle_anim]&lt;br /&gt;
      [/effect]&lt;br /&gt;
    [/object]&lt;br /&gt;
  [/event]&lt;br /&gt;
&lt;br /&gt;
If you are going to use '''advanced WML''' and want to add animation to unit, stored in variable, then following example might help you. '''This way is not efficient if you have no additional logic like inventoriy, shops, advanced unit modifications in your add-on.''' Is is preferred to use first variant or define all needed animation in unit_type.&lt;br /&gt;
  [event]&lt;br /&gt;
    name = moveto&lt;br /&gt;
    [filter]&lt;br /&gt;
      x,y = 1,5&lt;br /&gt;
    [/filter]&lt;br /&gt;
    [store_unit]&lt;br /&gt;
      [filter]&lt;br /&gt;
        x,y=1,5&lt;br /&gt;
      [/filter]&lt;br /&gt;
      variable = stored_unit&lt;br /&gt;
    [/store_unit]&lt;br /&gt;
    [set_variables]&lt;br /&gt;
      name = stored_unit.modifications.object&lt;br /&gt;
      [value]&lt;br /&gt;
        [effect]&lt;br /&gt;
          apply_to = new_animation&lt;br /&gt;
          [idle_anim]&lt;br /&gt;
            {STANDARD_IDLE_FILTER}&lt;br /&gt;
            start_time=0&lt;br /&gt;
            [frame]&lt;br /&gt;
              image=&amp;quot;units/goblins/spearman-idle-[1~12].png:[150*3,300,150*8]&amp;quot;&lt;br /&gt;
            [/frame]&lt;br /&gt;
          [/idle_anim]&lt;br /&gt;
        [/effect]&lt;br /&gt;
      [/value]&lt;br /&gt;
    [/set_variables]&lt;br /&gt;
    [unstore_unit]&lt;br /&gt;
      variable = stored_unit&lt;br /&gt;
    [/unstore_unit]&lt;br /&gt;
  [/event]&lt;br /&gt;
&lt;br /&gt;
== Where to Use Effects ==&lt;br /&gt;
&lt;br /&gt;
A collection of effects together makes up a &amp;quot;unit modification&amp;quot;, which is encased in one of the three types of modification tags: '''[trait]''', '''[object]''', or '''[advancement]'''. Which tag to use depends on the goal of the modification.&lt;br /&gt;
&lt;br /&gt;
* [[UnitsWML#.5Btrait.5D|Traits]] are shown in the unit details on the sidebar. They can be placed in a race or unit type to include the trait in the pool of random traits for that race or unit type, or they can be placed in the global [units] tag to add them to the global pool of random traits. (Note that this can cause out-of-sync errors in multiplayer.)&lt;br /&gt;
* [[UnitTypeWML#After_max_level_advancement_.28AMLA.29|Advancements]] are offered when a unit levels up. If a unit type has both modification advancements and regular advancements, the player can choose either each time they level up.&lt;br /&gt;
* [[DirectActionsWML#.5Bobject.5D|Objects]] are usually placed on the map or added by special events. They also have a built-in facility to automatically remove under certain conditions.&lt;br /&gt;
&lt;br /&gt;
An effect can also be placed in '''[modify_unit]''' [[DirectActionsWML#.5Bmodify_unit.5D|ActionWML]] to apply it on-the-fly without keeping a record that it has been applied. This is mainly useful for effects that change transient properties such as current hitpoints or experience. An effect applied in this way is liable to be reverted when the unit is rebuilt in the future, for example when they level up or when an object is removed.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[UnitTypeWML]]&lt;br /&gt;
* [[ReferenceWML]]&lt;br /&gt;
* [[AnimationWML]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: WML Reference]]&lt;/div&gt;</summary>
		<author><name>Octalot</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=GettextForTranslators&amp;diff=72289</id>
		<title>GettextForTranslators</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=GettextForTranslators&amp;diff=72289"/>
		<updated>2024-02-21T11:52:16Z</updated>

		<summary type="html">&lt;p&gt;Octalot: /* Format strings */ Add a new section of basic rules&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==  Gettext for translators  ==&lt;br /&gt;
&lt;br /&gt;
=== For the engine and mainline campaigns ===&lt;br /&gt;
&lt;br /&gt;
The target audience of this page is anyone who wants to help with a language that's already in the list on [[WesnothTranslations]]. The files for these languages have already been set up, someone is already the maintainer, and the pages linked from that page say where to go and how to introduce yourself to the team. The effort is split with separate teams for each language, and each team can have its own working style.&lt;br /&gt;
&lt;br /&gt;
Because each team can work in different ways, please do not submit translations as pull requests on Github. While that seems like a good idea, it causes potential complications, so we ask that everyone talks to their language's maintainer and submits changes in the way that the maintainer decides to use.&lt;br /&gt;
&lt;br /&gt;
If you're starting a completely new translation, or taking over as the maintainer of a translation, then the next place to read would be the [[WesnothTranslationsHowTo]] page.&lt;br /&gt;
&lt;br /&gt;
=== For add-ons ===&lt;br /&gt;
&lt;br /&gt;
The target audience is anyone who wants to help translate an add-on, assuming the add-on's maintainer has already set it up for translation. Translations are shipped with the add-on, so it's up to the maintainer to choose how to receive the files and organise the workflow.&lt;br /&gt;
&lt;br /&gt;
To translate an add-on, skip to the [[#Files_for_add-ons|Files for add-ons]] section.&lt;br /&gt;
&lt;br /&gt;
If you are the maintainer of the add-on, the instructions for setting up the translation are on [[GettextForWesnothDevelopers]].&lt;br /&gt;
&lt;br /&gt;
== Textdomains and getting the files to translate ==&lt;br /&gt;
&lt;br /&gt;
The progress for each language is shown on https://www.wesnoth.org/gettext/ . Click on your language, and you'll see a breakdown into sections ''(textdomains)'', such as&lt;br /&gt;
* wesnoth&lt;br /&gt;
* wesnoth-editor&lt;br /&gt;
* wesnoth-help&lt;br /&gt;
* wesnoth-units&lt;br /&gt;
* wesnoth-lib (contains strings shared by game and editor)&lt;br /&gt;
* wesnoth-httt (the Heir to the Throne campaign)&lt;br /&gt;
* wesnoth-utbs (the Under the Burning Suns campaign)&lt;br /&gt;
* etc&lt;br /&gt;
&lt;br /&gt;
Each has a separate file with a .po extension. For example, the Swedish translation has abbreviation ''sv'', and its translation of the editor's strings is in ''wesnoth-editor/sv.po''. The page on https://www.wesnoth.org/gettext/?view=langs&amp;amp;version=branch&amp;amp;lang=sv links to the current version in the main Git repository.&lt;br /&gt;
&lt;br /&gt;
Although the .po files contain text, please send the complete files as email attachments (or whichever method your team uses), rather than cutting and pasting lines from the file into an email. The translated strings are&lt;br /&gt;
very sensitive to formatting and whitespace changes.&lt;br /&gt;
&lt;br /&gt;
=== Files when running the game ===&lt;br /&gt;
&lt;br /&gt;
When the game runs it will look for an .mo file, for example ''translations/sv/LC_MESSAGES/wesnoth-editor.mo''. If you want to test your text in-game and you're happy to modify your installation:&lt;br /&gt;
&lt;br /&gt;
* Some .po editors can automatically generate .mo files.&lt;br /&gt;
* Deleting the .mo file will make the game look for ''translations/wesnoth-editor/sv.po'' instead.&lt;br /&gt;
&lt;br /&gt;
However you can also send your untested .po file to the maintainer and they should check that it looks correct in-game.&lt;br /&gt;
&lt;br /&gt;
=== Files for add-ons ===&lt;br /&gt;
&lt;br /&gt;
This assumes the add-on has .po files rather than .mo files. The engine supports both, but only .po are editable. For example, an add-on called Son of Haldric that has a Swedish translation would likely store it in:&lt;br /&gt;
&lt;br /&gt;
* ''data/add-ons/Son_of_Haldric/translations/wesnoth-Son_of_Haldric/sv.po'' .&lt;br /&gt;
&lt;br /&gt;
That comes from:&lt;br /&gt;
&lt;br /&gt;
* ''data/add-ons/Son_of_Haldric'' is where all files from the add-on are stored&lt;br /&gt;
* ''translations/wesnoth-Son_of_Haldric'' is configured by the maintainer&lt;br /&gt;
* ''sv'' is the language code for Swedish. The codes for each language are given in the big table on [https://www.wesnoth.org/gettext/ https://www.wesnoth.org/gettext/] .&lt;br /&gt;
&lt;br /&gt;
If it's been set up for translation but hasn't yet been translated into Swedish, it may instead have a file called ''wesnoth-Son_of_Haldric.pot''. This is a template which you can copy to &amp;quot;sv.po&amp;quot;, however first try opening the .pot file directly in your [[#Tools|translation tool]], as the it will likely prompt you to create a translation from the template.&lt;br /&gt;
&lt;br /&gt;
After editing the file, either refresh the cache (press F5 on the title screen) or restart Wesnoth to see the changes.&lt;br /&gt;
&lt;br /&gt;
Warning: files in the add-on directory will be overwritten or deleted if it's updated using the in-game Add-on Manager, so keep backups of files in a separate directory.&lt;br /&gt;
&lt;br /&gt;
== How to translate ==&lt;br /&gt;
&lt;br /&gt;
Now that you have the .po file to edit, it can be worked on using any of the programs listed in the [[#Tools|Tools section]]. The general preference in Wesnoth seems to be towards Poedit, but they all work on the same .po file format.&lt;br /&gt;
&lt;br /&gt;
The general concept is that the GUI will show the strings in English, along with a text-box to add the translation.&lt;br /&gt;
&lt;br /&gt;
=== Hints ===&lt;br /&gt;
&lt;br /&gt;
In addition to the English text, most strings have some additional information which in Poedit will be shown in the bottom-right of the screen. For example, the tutorial's &amp;quot;... this quintain!&amp;quot; has &amp;quot;[message]: speaker=Delfador&amp;quot;, meaning that it's [[InterfaceActionsWML#.5Bmessage.5D|said]] by the unit with id &amp;quot;Delfador&amp;quot;. Sometimes the hint is less obvious, often lines will be &amp;quot;[message]: speaker=unit&amp;quot;, normally meaning the unit whose move, attack, or death has triggered an event.&lt;br /&gt;
&lt;br /&gt;
Some strings will have additional hints, such as &amp;quot;Addressing Konrad&amp;quot; or &amp;quot;Addressing Li'sar&amp;quot;. The level of detail varies a lot between campaigns, please don't be afraid to point out when something needs to be improved.&lt;br /&gt;
&lt;br /&gt;
The .po files also say which source file the string came from, in Poedit 3.4 this is found in a right-click menu (right-click on a string in the top-left pane of the GUI).&lt;br /&gt;
&lt;br /&gt;
=== Carets ===&lt;br /&gt;
&lt;br /&gt;
These lines in the tutorial both have the hint &amp;quot;[message]: speaker=student&amp;quot;; they're spoken by Konrad and Li'sar respectively:&lt;br /&gt;
* &amp;quot;A quintain? You want me to fight a dummy?&amp;quot;&lt;br /&gt;
* &amp;quot;female^A quintain? You want me to fight a dummy?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
When an English string has a caret (the ^ symbol) in it, then everything before the first caret is removed before showing it to the player. In the translated strings, leave out everything before the caret.&lt;br /&gt;
&lt;br /&gt;
These caret hints are very commonly used in Wesnoth for strings where the translation may depend on the gender of the speaker, or the person spoken to. They're also used for strings such as &amp;quot;Prefs section^General&amp;quot;, where the string is the label on the &amp;quot;general preferences&amp;quot; tab, not a military rank.&lt;br /&gt;
&lt;br /&gt;
=== Warnings ===&lt;br /&gt;
&lt;br /&gt;
Some editors can automatically detect inconsistencies between the English and the translated text, for example if the original ends with a full-stop and the translation ends with an exclamation mark. Poedit defaults to showing these above even the untranslated strings, but these can be false-positives - generally someone's already looked at these and decided that the translated text is better as-is.&lt;br /&gt;
&lt;br /&gt;
=== Fuzzy strings ===&lt;br /&gt;
&lt;br /&gt;
One of the downsides of Gettext is that spelling and grammar corrections in the English text break the link between the original and the translated text. The tools that generate .po files try to recover from this by using the old translation for the new English text, and marking the string as ''fuzzy''; in Poedit these are sorted below the completely untranslated strings, and shown with the &amp;quot;Needs Work&amp;quot; button lit along with a note about what the previous English text was.&lt;br /&gt;
&lt;br /&gt;
Be wary, this mechanism can also generate incorrect suggestions. For example it may decide that &amp;quot;Landar left $number troops to guard the council&amp;quot; is a spelling correction of &amp;quot;Kalenz left $number troops to guard the council&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Parts to leave untranslated ==&lt;br /&gt;
&lt;br /&gt;
Some translatable strings mix text to be translated with placeholders that are handled by the engine before displaying the text to the player. The text of the placeholder needs to be left untranslated.&lt;br /&gt;
&lt;br /&gt;
=== Dollar signs ===&lt;br /&gt;
&lt;br /&gt;
Most placeholders start with a dollar sign (&amp;lt;code&amp;gt;$&amp;lt;/code&amp;gt;), for example, &amp;lt;code&amp;gt;$number&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;$gold_amount&amp;lt;/code&amp;gt;. The details are in [[SyntaxWML]], but for translation the general rules are:&lt;br /&gt;
&lt;br /&gt;
Characters that appear in placeholders are letters, numbers, square brackets, underscores, full stops and question marks.&lt;br /&gt;
&lt;br /&gt;
* After a dollar sign, every character in the list above is part of the placeholder.&lt;br /&gt;
* A space ends the placeholder, and the space is also displayed to the player.&lt;br /&gt;
* A vertical bar (&amp;lt;code&amp;gt;|&amp;lt;/code&amp;gt;) ends the placeholder, and the vertical bar isn't displayed to the player.&lt;br /&gt;
* If you need to put a full stop or question mark immediately after a placeholder that doesn't end with a vertical bar, add a vertical bar to separate them.&lt;br /&gt;
* A dollar sign at the end of the string, or directly followed by a pipe (&amp;lt;code&amp;gt;$|&amp;lt;/code&amp;gt;), is displayed as a dollar sign.&lt;br /&gt;
* Obscure cases should have a hint about the string.&lt;br /&gt;
&lt;br /&gt;
==== More details about dollar signs ====&lt;br /&gt;
&lt;br /&gt;
Anything that isn't covered by the basic rules in the previous section should have a po hint.&lt;br /&gt;
&lt;br /&gt;
A format variable is introduced by a dollar sign (&amp;lt;code&amp;gt;$&amp;lt;/code&amp;gt;), which is followed by a unique name. The name can be any sequence of letters, numbers, and underscores. For example, &amp;lt;code&amp;gt;$number&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;$gold_amount&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;$1st_name&amp;lt;/code&amp;gt; are all valid examples of placeholders. This unique name '''''must not be translated''''' and should be rendered exactly as-is in the translated text, as the engine needs to be able to match it exactly to substitute in the correct replacement.&lt;br /&gt;
&lt;br /&gt;
In some rare cases, the name may also contain a period (&amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt;) or square brackets (&amp;lt;code&amp;gt;[]&amp;lt;/code&amp;gt;). For example, &amp;lt;code&amp;gt;$houses[3].title&amp;lt;/code&amp;gt; would be valid. Names can also be nested within each other, so &amp;lt;code&amp;gt;$house_$colour&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;$houses[$n]&amp;lt;/code&amp;gt; can also occasionally occur.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;|&amp;lt;/code&amp;gt; character is used if the end of the name needs to be disambiguated (because the following character could otherwise also be part of the name). For example, in &amp;lt;code&amp;gt;$some|where&amp;lt;/code&amp;gt;, the variable is only &amp;lt;code&amp;gt;$some|&amp;lt;/code&amp;gt;. This can also be used in nesting, so you could have something complicated like &amp;lt;code&amp;gt;$the_$colour|_town.houses[$n].owner&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;?&amp;lt;/code&amp;gt; character following a variable indicates a default value. The text between the &amp;lt;code&amp;gt;?&amp;lt;/code&amp;gt; and the following &amp;lt;code&amp;gt;|&amp;lt;/code&amp;gt; should be translated as normal, but the framing characters (&amp;lt;code&amp;gt;?|&amp;lt;/code&amp;gt;) and the preceding variable name '''''must''''' be left untouched.&lt;br /&gt;
&lt;br /&gt;
You may also see a dollar sign immediately followed by a parenthesized formula from time to time (for example, &amp;lt;code&amp;gt;$($n + $m)&amp;lt;/code&amp;gt;. In this case, the entire formula should be left untouched in the translated text. Formulas normally only evaluate to numerical values. They should not be used very often in translatable strings, however.&lt;br /&gt;
&lt;br /&gt;
A dollar sign at the end of the string, or directly followed by a pipe (&amp;lt;code&amp;gt;$|&amp;lt;/code&amp;gt;), is displayed as just a dollar sign and does not indicate any formatting placeholder.&lt;br /&gt;
&lt;br /&gt;
=== Markup ===&lt;br /&gt;
&lt;br /&gt;
Some strings contain formatting markup. This comes in two styles. The most common is [[Pango formatting|Pango markup]], which is an HTML-like formatting language. The other is the custom help page markup, which looks superficially similar but is rather different, and is documented here.&lt;br /&gt;
&lt;br /&gt;
Like HTML, help markup consists of tags enclosed in angle brackets (eg &amp;lt;code&amp;gt;&amp;lt;italic&amp;gt;&amp;lt;/code&amp;gt;), with a slash added to the closing tag. The difference lies in what comes between the tags, which takes a key=value format where the value is usually enclosed in single quotes. There can be multiple key=value pairs, separated by spaces. Generally, all of that should be left untouched, with the exception of the &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt; key. If you see something like &amp;lt;code&amp;gt;&amp;lt;italic&amp;gt;text='some text'&amp;lt;/italic&amp;gt;&amp;lt;/code&amp;gt;, the only part that should be translated is &amp;quot;some text&amp;quot;. Or if you see &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;ref&amp;gt;dst='movement' text='zones of control'&amp;lt;/ref&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, then only &amp;quot;zones of control&amp;quot; should be translated, and the rest should be left untouched.&lt;br /&gt;
&lt;br /&gt;
==  FAQ  ==&lt;br /&gt;
* '''What are &amp;quot;Plural-forms&amp;quot;?'''&lt;br /&gt;
** Some languages have different word forms for different numbers of things (for example in English we have &amp;quot;1 thing&amp;quot; but &amp;quot;2 thing'''s'''&amp;quot;). The rules are different for different languages. You can find them [http://translate.sourceforge.net/wiki/l10n/pluralforms here].&lt;br /&gt;
* '''How do I use ' within a single-quote delimited string when translating text= in help screen texts?'''&lt;br /&gt;
** Add a backslash before it, however the preferred method now is to use [[Typography_Style_Guide#Character_Usage_Summary|typographic punctuation]] instead.&lt;br /&gt;
* '''What should I do with strings like &amp;quot;Prefs section^General&amp;quot;?'''&lt;br /&gt;
** There are ambiguous strings which should be translated in a different way depending on where they appear. For example, we have &amp;quot;General&amp;quot; in the preferences as &amp;quot;General preferences&amp;quot; and we can also have &amp;quot;a General&amp;quot;. These strings can have different translations for a given language, so we use &amp;quot;context&amp;quot; to solve this. The prefix only tries to give a hint about the string, and should be not translated, for example:&lt;br /&gt;
   msgid &amp;quot;Prefs section^General&amp;quot;&lt;br /&gt;
   msgstr &amp;quot;General&amp;quot;&lt;br /&gt;
* '''My PO file already has that translated to &amp;quot;Prefs section^General&amp;quot;, should it work?'''&lt;br /&gt;
** It does, but probably shouldn't. For strings that have no translation, the part before the &amp;quot;^&amp;quot; will be removed. This is also done when the PO's msgstr is exactly the same as the msgid, which will later break if someone makes any change to the text. For example:&lt;br /&gt;
   # wrong but seems to work (shows as &amp;quot;Root&amp;quot;)&lt;br /&gt;
   msgid &amp;quot;filesystem_path_system^Root&amp;quot;&lt;br /&gt;
   msgstr &amp;quot;filesystem_path_system^Root&amp;quot;&lt;br /&gt;
   # wrong and shows as &amp;quot;filesystem_path_system^Wurzel&amp;quot;&lt;br /&gt;
   msgid &amp;quot;filesystem_path_system^Root&amp;quot;&lt;br /&gt;
   msgstr &amp;quot;filesystem_path_system^Wurzel&amp;quot;&lt;br /&gt;
* '''Who can I ask for further information?'''&lt;br /&gt;
** You can ask in [[Support|Discord or IRC]]. Ping Ivanovic in Discord's #development or IRC's #wesnoth-dev channel. If you don't like IRC, send a mail to crazy-ivanovic AT gmx DOT net, or pm him (ivanovic) at the forum.&lt;br /&gt;
* '''Why is the diff from the previous version so huge? I have only made a small change to the .po file with poedit.'''&lt;br /&gt;
** When saving .po file poedit unwraps all strings. Usually, all .po files are wrapped at 80 characters so if you want smaller diffs and less merge conflicts you can execute the following commands each time after editing with poedit:&lt;br /&gt;
&lt;br /&gt;
   msgattrib file.po &amp;gt; file.po1&lt;br /&gt;
   mv file.po1 file.po&lt;br /&gt;
&lt;br /&gt;
==  Tools  ==&lt;br /&gt;
&lt;br /&gt;
There are several tools to work with .po files:&lt;br /&gt;
* [https://pofile.net/free-po-editor Free PO editor] (Web based)&lt;br /&gt;
* [http://userbase.kde.org/Lokalize Lokalize] (Unix KDE) (Formerly known as [https://directory.fsf.org/wiki/KBabel KBabel])&lt;br /&gt;
* [https://kate-editor.org/ Kate] (Unix KDE)&lt;br /&gt;
* [http://wiki.gnome.org/Apps/Gtranslator GTranslator] (Unix Gnome)&lt;br /&gt;
* [http://virtaal.translatehouse.org Virtaal] (Multiplatform)&lt;br /&gt;
* [http://www.poedit.net/ poEdit] (Multiplatform)&lt;br /&gt;
* [http://www.gnu.org/software/emacs/emacs.html Emacs with po-mode] (Multiplatform)&lt;br /&gt;
* [http://www.vim.org/ Vim] with [http://www.vim.org/scripts/script.php?script_id=695 PO plug-in] (Multiplatform)&lt;br /&gt;
&lt;br /&gt;
Of course, you can edit po files with any UTF-8 capable text editor, but the tools listed above have great advantages over any text editor regarding .po translation, like going to next fuzzy/untranslated string, searching only in specific fields (msgid, msgstr, comment), ...&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[WesnothTranslations]]&lt;br /&gt;
* [[WesnothTranslationsHowTo]]&lt;br /&gt;
* [[GettextForWesnothDevelopers]]&lt;br /&gt;
* [[TranslatorShellscript]]&lt;br /&gt;
* [http://www.wesnoth.org/gettext/ Translation statistics]&lt;br /&gt;
&lt;br /&gt;
[[Category:Translations]]&lt;/div&gt;</summary>
		<author><name>Octalot</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=GettextForTranslators&amp;diff=72288</id>
		<title>GettextForTranslators</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=GettextForTranslators&amp;diff=72288"/>
		<updated>2024-02-21T11:01:32Z</updated>

		<summary type="html">&lt;p&gt;Octalot: /* How to translate */ Describe the po hints and caret hints&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==  Gettext for translators  ==&lt;br /&gt;
&lt;br /&gt;
=== For the engine and mainline campaigns ===&lt;br /&gt;
&lt;br /&gt;
The target audience of this page is anyone who wants to help with a language that's already in the list on [[WesnothTranslations]]. The files for these languages have already been set up, someone is already the maintainer, and the pages linked from that page say where to go and how to introduce yourself to the team. The effort is split with separate teams for each language, and each team can have its own working style.&lt;br /&gt;
&lt;br /&gt;
Because each team can work in different ways, please do not submit translations as pull requests on Github. While that seems like a good idea, it causes potential complications, so we ask that everyone talks to their language's maintainer and submits changes in the way that the maintainer decides to use.&lt;br /&gt;
&lt;br /&gt;
If you're starting a completely new translation, or taking over as the maintainer of a translation, then the next place to read would be the [[WesnothTranslationsHowTo]] page.&lt;br /&gt;
&lt;br /&gt;
=== For add-ons ===&lt;br /&gt;
&lt;br /&gt;
The target audience is anyone who wants to help translate an add-on, assuming the add-on's maintainer has already set it up for translation. Translations are shipped with the add-on, so it's up to the maintainer to choose how to receive the files and organise the workflow.&lt;br /&gt;
&lt;br /&gt;
To translate an add-on, skip to the [[#Files_for_add-ons|Files for add-ons]] section.&lt;br /&gt;
&lt;br /&gt;
If you are the maintainer of the add-on, the instructions for setting up the translation are on [[GettextForWesnothDevelopers]].&lt;br /&gt;
&lt;br /&gt;
== Textdomains and getting the files to translate ==&lt;br /&gt;
&lt;br /&gt;
The progress for each language is shown on https://www.wesnoth.org/gettext/ . Click on your language, and you'll see a breakdown into sections ''(textdomains)'', such as&lt;br /&gt;
* wesnoth&lt;br /&gt;
* wesnoth-editor&lt;br /&gt;
* wesnoth-help&lt;br /&gt;
* wesnoth-units&lt;br /&gt;
* wesnoth-lib (contains strings shared by game and editor)&lt;br /&gt;
* wesnoth-httt (the Heir to the Throne campaign)&lt;br /&gt;
* wesnoth-utbs (the Under the Burning Suns campaign)&lt;br /&gt;
* etc&lt;br /&gt;
&lt;br /&gt;
Each has a separate file with a .po extension. For example, the Swedish translation has abbreviation ''sv'', and its translation of the editor's strings is in ''wesnoth-editor/sv.po''. The page on https://www.wesnoth.org/gettext/?view=langs&amp;amp;version=branch&amp;amp;lang=sv links to the current version in the main Git repository.&lt;br /&gt;
&lt;br /&gt;
Although the .po files contain text, please send the complete files as email attachments (or whichever method your team uses), rather than cutting and pasting lines from the file into an email. The translated strings are&lt;br /&gt;
very sensitive to formatting and whitespace changes.&lt;br /&gt;
&lt;br /&gt;
=== Files when running the game ===&lt;br /&gt;
&lt;br /&gt;
When the game runs it will look for an .mo file, for example ''translations/sv/LC_MESSAGES/wesnoth-editor.mo''. If you want to test your text in-game and you're happy to modify your installation:&lt;br /&gt;
&lt;br /&gt;
* Some .po editors can automatically generate .mo files.&lt;br /&gt;
* Deleting the .mo file will make the game look for ''translations/wesnoth-editor/sv.po'' instead.&lt;br /&gt;
&lt;br /&gt;
However you can also send your untested .po file to the maintainer and they should check that it looks correct in-game.&lt;br /&gt;
&lt;br /&gt;
=== Files for add-ons ===&lt;br /&gt;
&lt;br /&gt;
This assumes the add-on has .po files rather than .mo files. The engine supports both, but only .po are editable. For example, an add-on called Son of Haldric that has a Swedish translation would likely store it in:&lt;br /&gt;
&lt;br /&gt;
* ''data/add-ons/Son_of_Haldric/translations/wesnoth-Son_of_Haldric/sv.po'' .&lt;br /&gt;
&lt;br /&gt;
That comes from:&lt;br /&gt;
&lt;br /&gt;
* ''data/add-ons/Son_of_Haldric'' is where all files from the add-on are stored&lt;br /&gt;
* ''translations/wesnoth-Son_of_Haldric'' is configured by the maintainer&lt;br /&gt;
* ''sv'' is the language code for Swedish. The codes for each language are given in the big table on [https://www.wesnoth.org/gettext/ https://www.wesnoth.org/gettext/] .&lt;br /&gt;
&lt;br /&gt;
If it's been set up for translation but hasn't yet been translated into Swedish, it may instead have a file called ''wesnoth-Son_of_Haldric.pot''. This is a template which you can copy to &amp;quot;sv.po&amp;quot;, however first try opening the .pot file directly in your [[#Tools|translation tool]], as the it will likely prompt you to create a translation from the template.&lt;br /&gt;
&lt;br /&gt;
After editing the file, either refresh the cache (press F5 on the title screen) or restart Wesnoth to see the changes.&lt;br /&gt;
&lt;br /&gt;
Warning: files in the add-on directory will be overwritten or deleted if it's updated using the in-game Add-on Manager, so keep backups of files in a separate directory.&lt;br /&gt;
&lt;br /&gt;
== How to translate ==&lt;br /&gt;
&lt;br /&gt;
Now that you have the .po file to edit, it can be worked on using any of the programs listed in the [[#Tools|Tools section]]. The general preference in Wesnoth seems to be towards Poedit, but they all work on the same .po file format.&lt;br /&gt;
&lt;br /&gt;
The general concept is that the GUI will show the strings in English, along with a text-box to add the translation.&lt;br /&gt;
&lt;br /&gt;
=== Hints ===&lt;br /&gt;
&lt;br /&gt;
In addition to the English text, most strings have some additional information which in Poedit will be shown in the bottom-right of the screen. For example, the tutorial's &amp;quot;... this quintain!&amp;quot; has &amp;quot;[message]: speaker=Delfador&amp;quot;, meaning that it's [[InterfaceActionsWML#.5Bmessage.5D|said]] by the unit with id &amp;quot;Delfador&amp;quot;. Sometimes the hint is less obvious, often lines will be &amp;quot;[message]: speaker=unit&amp;quot;, normally meaning the unit whose move, attack, or death has triggered an event.&lt;br /&gt;
&lt;br /&gt;
Some strings will have additional hints, such as &amp;quot;Addressing Konrad&amp;quot; or &amp;quot;Addressing Li'sar&amp;quot;. The level of detail varies a lot between campaigns, please don't be afraid to point out when something needs to be improved.&lt;br /&gt;
&lt;br /&gt;
The .po files also say which source file the string came from, in Poedit 3.4 this is found in a right-click menu (right-click on a string in the top-left pane of the GUI).&lt;br /&gt;
&lt;br /&gt;
=== Carets ===&lt;br /&gt;
&lt;br /&gt;
These lines in the tutorial both have the hint &amp;quot;[message]: speaker=student&amp;quot;; they're spoken by Konrad and Li'sar respectively:&lt;br /&gt;
* &amp;quot;A quintain? You want me to fight a dummy?&amp;quot;&lt;br /&gt;
* &amp;quot;female^A quintain? You want me to fight a dummy?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
When an English string has a caret (the ^ symbol) in it, then everything before the first caret is removed before showing it to the player. In the translated strings, leave out everything before the caret.&lt;br /&gt;
&lt;br /&gt;
These caret hints are very commonly used in Wesnoth for strings where the translation may depend on the gender of the speaker, or the person spoken to. They're also used for strings such as &amp;quot;Prefs section^General&amp;quot;, where the string is the label on the &amp;quot;general preferences&amp;quot; tab, not a military rank.&lt;br /&gt;
&lt;br /&gt;
=== Warnings ===&lt;br /&gt;
&lt;br /&gt;
Some editors can automatically detect inconsistencies between the English and the translated text, for example if the original ends with a full-stop and the translation ends with an exclamation mark. Poedit defaults to showing these above even the untranslated strings, but these can be false-positives - generally someone's already looked at these and decided that the translated text is better as-is.&lt;br /&gt;
&lt;br /&gt;
=== Fuzzy strings ===&lt;br /&gt;
&lt;br /&gt;
One of the downsides of Gettext is that spelling and grammar corrections in the English text break the link between the original and the translated text. The tools that generate .po files try to recover from this by using the old translation for the new English text, and marking the string as ''fuzzy''; in Poedit these are sorted below the completely untranslated strings, and shown with the &amp;quot;Needs Work&amp;quot; button lit along with a note about what the previous English text was.&lt;br /&gt;
&lt;br /&gt;
Be wary, this mechanism can also generate incorrect suggestions. For example it may decide that &amp;quot;Landar left $number troops to guard the council&amp;quot; is a spelling correction of &amp;quot;Kalenz left $number troops to guard the council&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Parts to leave untranslated ==&lt;br /&gt;
&lt;br /&gt;
=== Format strings ===&lt;br /&gt;
&lt;br /&gt;
Some strings contain formatting markup. A few strings use the C format style, documented [https://www.gnu.org/software/gettext/manual/html_node/c_002dformat.html here], or the Lua format style, documented [https://www.lua.org/manual/5.1/manual.html#pdf-string.format here]. However, most format strings in Wesnoth use a custom formatting language, which is described here.&lt;br /&gt;
&lt;br /&gt;
A format variable is introduced by a dollar sign (&amp;lt;code&amp;gt;$&amp;lt;/code&amp;gt;), which is followed by a unique name. The name can be any sequence of letters, numbers, and underscores. For example, &amp;lt;code&amp;gt;$number&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;$gold_amount&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;$1st_name&amp;lt;/code&amp;gt; are all valid examples of placeholders. This unique name '''''must not be translated''''' and should be rendered exactly as-is in the translated text, as the engine needs to be able to match it exactly to substitute in the correct replacement.&lt;br /&gt;
&lt;br /&gt;
In some rare cases, the name may also contain a period (&amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt;) or square brackets (&amp;lt;code&amp;gt;[]&amp;lt;/code&amp;gt;). For example, &amp;lt;code&amp;gt;$houses[3].title&amp;lt;/code&amp;gt; would be valid. Names can also be nested within each other, so &amp;lt;code&amp;gt;$house_$colour&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;$houses[$n]&amp;lt;/code&amp;gt; can also occasionally occur.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;|&amp;lt;/code&amp;gt; character is used if the end of the name needs to be disambiguated (because the following character could otherwise also be part of the name). For example, in &amp;lt;code&amp;gt;$some|where&amp;lt;/code&amp;gt;, the variable is only &amp;lt;code&amp;gt;$some|&amp;lt;/code&amp;gt;. This can also be used in nesting, so you could have something complicated like &amp;lt;code&amp;gt;$the_$colour|_town.houses[$n].owner&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;?&amp;lt;/code&amp;gt; character following a variable indicates a default value. The text between the &amp;lt;code&amp;gt;?&amp;lt;/code&amp;gt; and the following &amp;lt;code&amp;gt;|&amp;lt;/code&amp;gt; should be translated as normal, but the framing characters (&amp;lt;code&amp;gt;?|&amp;lt;/code&amp;gt;) and the preceding variable name '''''must''''' be left untouched.&lt;br /&gt;
&lt;br /&gt;
You may also see a dollar sign immediately followed by a parenthesized formula from time to time (for example, &amp;lt;code&amp;gt;$($n + $m)&amp;lt;/code&amp;gt;. In this case, the entire formula should be left untouched in the translated text. Formulas normally only evaluate to numerical values. They should not be used very often in translatable strings, however.&lt;br /&gt;
&lt;br /&gt;
A dollar sign at the end of the string, or directly followed by a pipe (&amp;lt;code&amp;gt;$|&amp;lt;/code&amp;gt;), is displayed as just a dollar sign and does not indicate any formatting placeholder.&lt;br /&gt;
&lt;br /&gt;
=== Markup ===&lt;br /&gt;
&lt;br /&gt;
Some strings contain formatting markup. This comes in two styles. The most common is [[Pango formatting|Pango markup]], which is an HTML-like formatting language. The other is the custom help page markup, which looks superficially similar but is rather different, and is documented here.&lt;br /&gt;
&lt;br /&gt;
Like HTML, help markup consists of tags enclosed in angle brackets (eg &amp;lt;code&amp;gt;&amp;lt;italic&amp;gt;&amp;lt;/code&amp;gt;), with a slash added to the closing tag. The difference lies in what comes between the tags, which takes a key=value format where the value is usually enclosed in single quotes. There can be multiple key=value pairs, separated by spaces. Generally, all of that should be left untouched, with the exception of the &amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt; key. If you see something like &amp;lt;code&amp;gt;&amp;lt;italic&amp;gt;text='some text'&amp;lt;/italic&amp;gt;&amp;lt;/code&amp;gt;, the only part that should be translated is &amp;quot;some text&amp;quot;. Or if you see &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;ref&amp;gt;dst='movement' text='zones of control'&amp;lt;/ref&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, then only &amp;quot;zones of control&amp;quot; should be translated, and the rest should be left untouched.&lt;br /&gt;
&lt;br /&gt;
==  FAQ  ==&lt;br /&gt;
* '''What are &amp;quot;Plural-forms&amp;quot;?'''&lt;br /&gt;
** Some languages have different word forms for different numbers of things (for example in English we have &amp;quot;1 thing&amp;quot; but &amp;quot;2 thing'''s'''&amp;quot;). The rules are different for different languages. You can find them [http://translate.sourceforge.net/wiki/l10n/pluralforms here].&lt;br /&gt;
* '''How do I use ' within a single-quote delimited string when translating text= in help screen texts?'''&lt;br /&gt;
** Add a backslash before it, however the preferred method now is to use [[Typography_Style_Guide#Character_Usage_Summary|typographic punctuation]] instead.&lt;br /&gt;
* '''What should I do with strings like &amp;quot;Prefs section^General&amp;quot;?'''&lt;br /&gt;
** There are ambiguous strings which should be translated in a different way depending on where they appear. For example, we have &amp;quot;General&amp;quot; in the preferences as &amp;quot;General preferences&amp;quot; and we can also have &amp;quot;a General&amp;quot;. These strings can have different translations for a given language, so we use &amp;quot;context&amp;quot; to solve this. The prefix only tries to give a hint about the string, and should be not translated, for example:&lt;br /&gt;
   msgid &amp;quot;Prefs section^General&amp;quot;&lt;br /&gt;
   msgstr &amp;quot;General&amp;quot;&lt;br /&gt;
* '''My PO file already has that translated to &amp;quot;Prefs section^General&amp;quot;, should it work?'''&lt;br /&gt;
** It does, but probably shouldn't. For strings that have no translation, the part before the &amp;quot;^&amp;quot; will be removed. This is also done when the PO's msgstr is exactly the same as the msgid, which will later break if someone makes any change to the text. For example:&lt;br /&gt;
   # wrong but seems to work (shows as &amp;quot;Root&amp;quot;)&lt;br /&gt;
   msgid &amp;quot;filesystem_path_system^Root&amp;quot;&lt;br /&gt;
   msgstr &amp;quot;filesystem_path_system^Root&amp;quot;&lt;br /&gt;
   # wrong and shows as &amp;quot;filesystem_path_system^Wurzel&amp;quot;&lt;br /&gt;
   msgid &amp;quot;filesystem_path_system^Root&amp;quot;&lt;br /&gt;
   msgstr &amp;quot;filesystem_path_system^Wurzel&amp;quot;&lt;br /&gt;
* '''Who can I ask for further information?'''&lt;br /&gt;
** You can ask in [[Support|Discord or IRC]]. Ping Ivanovic in Discord's #development or IRC's #wesnoth-dev channel. If you don't like IRC, send a mail to crazy-ivanovic AT gmx DOT net, or pm him (ivanovic) at the forum.&lt;br /&gt;
* '''Why is the diff from the previous version so huge? I have only made a small change to the .po file with poedit.'''&lt;br /&gt;
** When saving .po file poedit unwraps all strings. Usually, all .po files are wrapped at 80 characters so if you want smaller diffs and less merge conflicts you can execute the following commands each time after editing with poedit:&lt;br /&gt;
&lt;br /&gt;
   msgattrib file.po &amp;gt; file.po1&lt;br /&gt;
   mv file.po1 file.po&lt;br /&gt;
&lt;br /&gt;
==  Tools  ==&lt;br /&gt;
&lt;br /&gt;
There are several tools to work with .po files:&lt;br /&gt;
* [https://pofile.net/free-po-editor Free PO editor] (Web based)&lt;br /&gt;
* [http://userbase.kde.org/Lokalize Lokalize] (Unix KDE) (Formerly known as [https://directory.fsf.org/wiki/KBabel KBabel])&lt;br /&gt;
* [https://kate-editor.org/ Kate] (Unix KDE)&lt;br /&gt;
* [http://wiki.gnome.org/Apps/Gtranslator GTranslator] (Unix Gnome)&lt;br /&gt;
* [http://virtaal.translatehouse.org Virtaal] (Multiplatform)&lt;br /&gt;
* [http://www.poedit.net/ poEdit] (Multiplatform)&lt;br /&gt;
* [http://www.gnu.org/software/emacs/emacs.html Emacs with po-mode] (Multiplatform)&lt;br /&gt;
* [http://www.vim.org/ Vim] with [http://www.vim.org/scripts/script.php?script_id=695 PO plug-in] (Multiplatform)&lt;br /&gt;
&lt;br /&gt;
Of course, you can edit po files with any UTF-8 capable text editor, but the tools listed above have great advantages over any text editor regarding .po translation, like going to next fuzzy/untranslated string, searching only in specific fields (msgid, msgstr, comment), ...&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[WesnothTranslations]]&lt;br /&gt;
* [[WesnothTranslationsHowTo]]&lt;br /&gt;
* [[GettextForWesnothDevelopers]]&lt;br /&gt;
* [[TranslatorShellscript]]&lt;br /&gt;
* [http://www.wesnoth.org/gettext/ Translation statistics]&lt;br /&gt;
&lt;br /&gt;
[[Category:Translations]]&lt;/div&gt;</summary>
		<author><name>Octalot</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=AddonsWML&amp;diff=72169</id>
		<title>AddonsWML</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=AddonsWML&amp;diff=72169"/>
		<updated>2024-01-23T13:02:51Z</updated>

		<summary type="html">&lt;p&gt;Octalot: /* Which add-ons are active during gameplay */ Note that [units] isn't an add-on module&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WML Tags}}&lt;br /&gt;
== Creating add-ons in WML ==&lt;br /&gt;
&lt;br /&gt;
An add-on is defined by a directory structure, there is no tag called '''[addon]'''. The directory must contain a '''_main.cfg''', and the name of the directory is treated as its '''id'''. There are different rules for add-ons that define a custom core, which are described in [[CoreWML]] and ignored for the purposes of this page.&lt;br /&gt;
&lt;br /&gt;
The description of a downloaded add-on is found in '''_info.cfg''', the data for a locally authored add-on is in '''_server.pbl''' (see [[PblWML]]).&lt;br /&gt;
&lt;br /&gt;
An add-on typically contains other files, see for example [[AddonStructure]] or [[BuildingCampaignsTheCampaignFile]].&lt;br /&gt;
&lt;br /&gt;
== Which add-ons are active during gameplay ==&lt;br /&gt;
&lt;br /&gt;
To help prevent clashes between add-ons, when starting a scenario the engine only loads the active add-ons. An add-on is active if one or more &amp;quot;add-on modules&amp;quot; is used by the game. If a game does not use any add-on module from your add-on, then your add-on won't be parsed at all. On the other hand, if the game uses any add-on module from your add-on, then your entire add-on will be parsed, relying on preprocessor defines to exclude parts that aren't relevant to the add-on module that is to be loaded.&lt;br /&gt;
&lt;br /&gt;
Several toplevel tags are used to define an &amp;quot;add-on module&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
* [[EraWML|'''[era]''']] - A multiplayer era&lt;br /&gt;
* [[CampaignWML|'''[campaign]''']] - A campaign, either single-player or multiplayer&lt;br /&gt;
* [[ScenarioWML|'''[scenario]''']] - A campaign scenario&lt;br /&gt;
* [[ScenarioWML|'''[multiplayer]''']] - A multiplayer scenario&lt;br /&gt;
* [[ScenarioWML|'''[test]''']] - A test or demo scenario&lt;br /&gt;
* [[ModificationWML|'''[modification]''']] - A modification that can be selected in the campaign or multiplayer menu&lt;br /&gt;
* [[ModificationWML|'''[resource]''']] - A resource that can be requested by any other add-on module&lt;br /&gt;
&lt;br /&gt;
Notably, that list doesn't contain the [[UnitsWML|'''[units]''']] tag. For example, a multiplayer scenario which allows the player to choose any era but has scripted events that spawn Ageless Era units needs to activate those units' add-on by loading a resource from it.&lt;br /&gt;
&lt;br /&gt;
== Common Tags and Keys ==&lt;br /&gt;
&lt;br /&gt;
The following tags and keys are supported in most types of addon modules:&lt;br /&gt;
&lt;br /&gt;
* '''id''': The addon module's unique ID. It must be unique across all addon module types, so for example there cannot be a '''[scenario]''' and a '''[multiplayer]''' with the same ID.&lt;br /&gt;
* '''addon_min_version''': The minimum version of your add-on with which this content is backwards compatible. Compared with the version string given in [[PblWML]]. If ''addon_min_version'' is not explicitly specified, it means compatible only with the same version. Clients in multiplayer must have add-on versions agreeing with the ''addon_min_versions'' of each others' content in order to play, and will be prompted to update otherwise.&lt;br /&gt;
* '''name''': (translatable) The visible name for the addon module, shown in the campaign selection or multiplayer game creation menu. (Not supported for '''[resource]''' since it is never visible anywhere.)&lt;br /&gt;
* '''description''': (translatable) The detailed description for the addon module, shown in the campaign selection or multiplayer game creation menu. (Also not supported for '''[resource]''', nor for '''[scenario]''' or '''[test]'''.)&lt;br /&gt;
* '''define'''='''''SYMBOL''''' When this addon module is active, the preprocessor symbol '''''SYMBOL''''' will be defined. See [[PreprocessorRef#.23ifdef_and_.23ifndef|ifdef]] for how this can be used to isolate parts of the file from other addon modules. Besides the addon module tag, only the tags '''[textdomain]''' and '''[binary_path]''' (see [[BinaryPathWML]]) should go outside of '''#ifdef ''SYMBOL'''''. This symbol will be defined ''before'' any .cfg is preprocessed. Note: If for some reason you don't want to place your '''[binary_path]''' outside your '''#ifdef ''SYMBOL''''' (perhaps it's causing conflicts with other addon modules), you can use binary-path-independent paths for the textdomain and any assets that are used in the addon module tag. This looks like '''icon=data/add-ons/whatever/something.png''' – essentially, any path beginning with '''data/'''.&lt;br /&gt;
* '''[event]''' - An event handler that will be registered when the addon module is active. See [[EventWML]].&lt;br /&gt;
* '''[lua]''' - Lua code that will be run when the addon module is loaded, before the '''preload''' event is fired. See [[LuaWML]].&lt;br /&gt;
* '''[ai]''': Defines an AI algorithm that can be selected by players at the join game screen. See [[Wesnoth_AI_Framework#The_.5Bai.5D_Tag_.E2.80.94_Top-level_Elements|here]] for details. This is not used in single-player.&lt;br /&gt;
** Note: This is not the place to define faction-specific AI parameters in an era. For that, place the '''[ai]''' tag in '''[multiplayer_side]'''.&lt;br /&gt;
** Note: This tag may not be supported in '''[resource]''', '''[scenario]''', or '''[test]'''.&lt;br /&gt;
* '''[options]''': Custom options. See [[OptionWML]] for details. Note: This may not be supported in '''[resource]''', '''[scenario]''', or '''[test]'''.&lt;br /&gt;
* '''[load_resource]''': Indicates a resource to load when this addon module is loaded.&lt;br /&gt;
** '''id''': The ID of the resource.&lt;br /&gt;
* '''[modify_unit_type]''' {{DevFeature1.15|2}}: Changes a unit type while this modification is active. The supported attributes are:&lt;br /&gt;
** '''type''' : the id of the unit type to change.&lt;br /&gt;
** '''set_experience''' : changes the unit type's max experience.&lt;br /&gt;
** '''set_cost''' : changes the unit type's recruit cost.&lt;br /&gt;
** '''set_advances_to''' : changes the unit type's advancements.&lt;br /&gt;
** '''add_advancement''' : adds a (list of comma separated) unit type(s) to the possible advancements of this unit type.&lt;br /&gt;
** '''remove_advancement''' : removes a (list of comma separated) unit type(s) from the possible advancements of this unit type.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[BinaryPathWML]] - Toplevel tag to define search paths for assets.&lt;br /&gt;
* [[UnitsWML]] - Toplevel tag to define units and unit-related data.&lt;br /&gt;
* [[TerrainWML]] - Toplevel tag to define terrain types.&lt;br /&gt;
* [[TerrainGraphicsWML]] - Toplevel tag to define how terrain is drawn.&lt;/div&gt;</summary>
		<author><name>Octalot</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=AddonsWML&amp;diff=72168</id>
		<title>AddonsWML</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=AddonsWML&amp;diff=72168"/>
		<updated>2024-01-23T12:25:18Z</updated>

		<summary type="html">&lt;p&gt;Octalot: /* Creating add-ons in WML */ Correct file extension for .pbl files&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WML Tags}}&lt;br /&gt;
== Creating add-ons in WML ==&lt;br /&gt;
&lt;br /&gt;
An add-on is defined by a directory structure, there is no tag called '''[addon]'''. The directory must contain a '''_main.cfg''', and the name of the directory is treated as its '''id'''. There are different rules for add-ons that define a custom core, which are described in [[CoreWML]] and ignored for the purposes of this page.&lt;br /&gt;
&lt;br /&gt;
The description of a downloaded add-on is found in '''_info.cfg''', the data for a locally authored add-on is in '''_server.pbl''' (see [[PblWML]]).&lt;br /&gt;
&lt;br /&gt;
An add-on typically contains other files, see for example [[AddonStructure]] or [[BuildingCampaignsTheCampaignFile]].&lt;br /&gt;
&lt;br /&gt;
== Which add-ons are active during gameplay ==&lt;br /&gt;
&lt;br /&gt;
To help prevent clashes between add-ons, when starting a scenario the engine only loads the active add-ons. An add-on is active if one or more &amp;quot;add-on modules&amp;quot; is used by the game. If a game does not use any add-on module from your add-on, then your add-on won't be parsed at all. On the other hand, if the game uses any add-on module from your add-on, then your entire add-on will be parsed, relying on preprocessor defines to exclude parts that aren't relevant to the add-on module that is to be loaded.&lt;br /&gt;
&lt;br /&gt;
Several toplevel tags are used to define an &amp;quot;add-on module&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
* [[EraWML|'''[era]''']] - A multiplayer era&lt;br /&gt;
* [[CampaignWML|'''[campaign]''']] - A campaign, either single-player or multiplayer&lt;br /&gt;
* [[ScenarioWML|'''[scenario]''']] - A campaign scenario&lt;br /&gt;
* [[ScenarioWML|'''[multiplayer]''']] - A multiplayer scenario&lt;br /&gt;
* [[ScenarioWML|'''[test]''']] - A test or demo scenario&lt;br /&gt;
* [[ModificationWML|'''[modification]''']] - A modification that can be selected in the campaign or multiplayer menu&lt;br /&gt;
* [[ModificationWML|'''[resource]''']] - A resource that can be requested by any other addon module&lt;br /&gt;
&lt;br /&gt;
== Common Tags and Keys ==&lt;br /&gt;
&lt;br /&gt;
The following tags and keys are supported in most types of addon modules:&lt;br /&gt;
&lt;br /&gt;
* '''id''': The addon module's unique ID. It must be unique across all addon module types, so for example there cannot be a '''[scenario]''' and a '''[multiplayer]''' with the same ID.&lt;br /&gt;
* '''addon_min_version''': The minimum version of your add-on with which this content is backwards compatible. Compared with the version string given in [[PblWML]]. If ''addon_min_version'' is not explicitly specified, it means compatible only with the same version. Clients in multiplayer must have add-on versions agreeing with the ''addon_min_versions'' of each others' content in order to play, and will be prompted to update otherwise.&lt;br /&gt;
* '''name''': (translatable) The visible name for the addon module, shown in the campaign selection or multiplayer game creation menu. (Not supported for '''[resource]''' since it is never visible anywhere.)&lt;br /&gt;
* '''description''': (translatable) The detailed description for the addon module, shown in the campaign selection or multiplayer game creation menu. (Also not supported for '''[resource]''', nor for '''[scenario]''' or '''[test]'''.)&lt;br /&gt;
* '''define'''='''''SYMBOL''''' When this addon module is active, the preprocessor symbol '''''SYMBOL''''' will be defined. See [[PreprocessorRef#.23ifdef_and_.23ifndef|ifdef]] for how this can be used to isolate parts of the file from other addon modules. Besides the addon module tag, only the tags '''[textdomain]''' and '''[binary_path]''' (see [[BinaryPathWML]]) should go outside of '''#ifdef ''SYMBOL'''''. This symbol will be defined ''before'' any .cfg is preprocessed. Note: If for some reason you don't want to place your '''[binary_path]''' outside your '''#ifdef ''SYMBOL''''' (perhaps it's causing conflicts with other addon modules), you can use binary-path-independent paths for the textdomain and any assets that are used in the addon module tag. This looks like '''icon=data/add-ons/whatever/something.png''' – essentially, any path beginning with '''data/'''.&lt;br /&gt;
* '''[event]''' - An event handler that will be registered when the addon module is active. See [[EventWML]].&lt;br /&gt;
* '''[lua]''' - Lua code that will be run when the addon module is loaded, before the '''preload''' event is fired. See [[LuaWML]].&lt;br /&gt;
* '''[ai]''': Defines an AI algorithm that can be selected by players at the join game screen. See [[Wesnoth_AI_Framework#The_.5Bai.5D_Tag_.E2.80.94_Top-level_Elements|here]] for details. This is not used in single-player.&lt;br /&gt;
** Note: This is not the place to define faction-specific AI parameters in an era. For that, place the '''[ai]''' tag in '''[multiplayer_side]'''.&lt;br /&gt;
** Note: This tag may not be supported in '''[resource]''', '''[scenario]''', or '''[test]'''.&lt;br /&gt;
* '''[options]''': Custom options. See [[OptionWML]] for details. Note: This may not be supported in '''[resource]''', '''[scenario]''', or '''[test]'''.&lt;br /&gt;
* '''[load_resource]''': Indicates a resource to load when this addon module is loaded.&lt;br /&gt;
** '''id''': The ID of the resource.&lt;br /&gt;
* '''[modify_unit_type]''' {{DevFeature1.15|2}}: Changes a unit type while this modification is active. The supported attributes are:&lt;br /&gt;
** '''type''' : the id of the unit type to change.&lt;br /&gt;
** '''set_experience''' : changes the unit type's max experience.&lt;br /&gt;
** '''set_cost''' : changes the unit type's recruit cost.&lt;br /&gt;
** '''set_advances_to''' : changes the unit type's advancements.&lt;br /&gt;
** '''add_advancement''' : adds a (list of comma separated) unit type(s) to the possible advancements of this unit type.&lt;br /&gt;
** '''remove_advancement''' : removes a (list of comma separated) unit type(s) from the possible advancements of this unit type.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[BinaryPathWML]] - Toplevel tag to define search paths for assets.&lt;br /&gt;
* [[UnitsWML]] - Toplevel tag to define units and unit-related data.&lt;br /&gt;
* [[TerrainWML]] - Toplevel tag to define terrain types.&lt;br /&gt;
* [[TerrainGraphicsWML]] - Toplevel tag to define how terrain is drawn.&lt;/div&gt;</summary>
		<author><name>Octalot</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=AddonsWML&amp;diff=72167</id>
		<title>AddonsWML</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=AddonsWML&amp;diff=72167"/>
		<updated>2024-01-23T12:15:33Z</updated>

		<summary type="html">&lt;p&gt;Octalot: /* Creating add-ons in WML */ Fixed some links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WML Tags}}&lt;br /&gt;
== Creating add-ons in WML ==&lt;br /&gt;
&lt;br /&gt;
An add-on is defined by a directory structure, there is no tag called '''[addon]'''. The directory must contain a '''_main.cfg''', and the name of the directory is treated as its '''id'''. There are different rules for add-ons that define a custom core, which are described in [[CoreWML]] and ignored for the purposes of this page.&lt;br /&gt;
&lt;br /&gt;
An add-on typically contains other files, see for example [[AddonStructure]] or [[BuildingCampaignsTheCampaignFile]].&lt;br /&gt;
&lt;br /&gt;
The description of a downloaded add-on is found in '''_info.cfg''', the data for a locally authored add-on is in '''_server.cfg''' (see [[PblWML]]).&lt;br /&gt;
&lt;br /&gt;
== Which add-ons are active during gameplay ==&lt;br /&gt;
&lt;br /&gt;
To help prevent clashes between add-ons, when starting a scenario the engine only loads the active add-ons. An add-on is active if one or more &amp;quot;add-on modules&amp;quot; is used by the game. If a game does not use any add-on module from your add-on, then your add-on won't be parsed at all. On the other hand, if the game uses any add-on module from your add-on, then your entire add-on will be parsed, relying on preprocessor defines to exclude parts that aren't relevant to the add-on module that is to be loaded.&lt;br /&gt;
&lt;br /&gt;
Several toplevel tags are used to define an &amp;quot;add-on module&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
* [[EraWML|'''[era]''']] - A multiplayer era&lt;br /&gt;
* [[CampaignWML|'''[campaign]''']] - A campaign, either single-player or multiplayer&lt;br /&gt;
* [[ScenarioWML|'''[scenario]''']] - A campaign scenario&lt;br /&gt;
* [[ScenarioWML|'''[multiplayer]''']] - A multiplayer scenario&lt;br /&gt;
* [[ScenarioWML|'''[test]''']] - A test or demo scenario&lt;br /&gt;
* [[ModificationWML|'''[modification]''']] - A modification that can be selected in the campaign or multiplayer menu&lt;br /&gt;
* [[ModificationWML|'''[resource]''']] - A resource that can be requested by any other addon module&lt;br /&gt;
&lt;br /&gt;
== Common Tags and Keys ==&lt;br /&gt;
&lt;br /&gt;
The following tags and keys are supported in most types of addon modules:&lt;br /&gt;
&lt;br /&gt;
* '''id''': The addon module's unique ID. It must be unique across all addon module types, so for example there cannot be a '''[scenario]''' and a '''[multiplayer]''' with the same ID.&lt;br /&gt;
* '''addon_min_version''': The minimum version of your add-on with which this content is backwards compatible. Compared with the version string given in [[PblWML]]. If ''addon_min_version'' is not explicitly specified, it means compatible only with the same version. Clients in multiplayer must have add-on versions agreeing with the ''addon_min_versions'' of each others' content in order to play, and will be prompted to update otherwise.&lt;br /&gt;
* '''name''': (translatable) The visible name for the addon module, shown in the campaign selection or multiplayer game creation menu. (Not supported for '''[resource]''' since it is never visible anywhere.)&lt;br /&gt;
* '''description''': (translatable) The detailed description for the addon module, shown in the campaign selection or multiplayer game creation menu. (Also not supported for '''[resource]''', nor for '''[scenario]''' or '''[test]'''.)&lt;br /&gt;
* '''define'''='''''SYMBOL''''' When this addon module is active, the preprocessor symbol '''''SYMBOL''''' will be defined. See [[PreprocessorRef#.23ifdef_and_.23ifndef|ifdef]] for how this can be used to isolate parts of the file from other addon modules. Besides the addon module tag, only the tags '''[textdomain]''' and '''[binary_path]''' (see [[BinaryPathWML]]) should go outside of '''#ifdef ''SYMBOL'''''. This symbol will be defined ''before'' any .cfg is preprocessed. Note: If for some reason you don't want to place your '''[binary_path]''' outside your '''#ifdef ''SYMBOL''''' (perhaps it's causing conflicts with other addon modules), you can use binary-path-independent paths for the textdomain and any assets that are used in the addon module tag. This looks like '''icon=data/add-ons/whatever/something.png''' – essentially, any path beginning with '''data/'''.&lt;br /&gt;
* '''[event]''' - An event handler that will be registered when the addon module is active. See [[EventWML]].&lt;br /&gt;
* '''[lua]''' - Lua code that will be run when the addon module is loaded, before the '''preload''' event is fired. See [[LuaWML]].&lt;br /&gt;
* '''[ai]''': Defines an AI algorithm that can be selected by players at the join game screen. See [[Wesnoth_AI_Framework#The_.5Bai.5D_Tag_.E2.80.94_Top-level_Elements|here]] for details. This is not used in single-player.&lt;br /&gt;
** Note: This is not the place to define faction-specific AI parameters in an era. For that, place the '''[ai]''' tag in '''[multiplayer_side]'''.&lt;br /&gt;
** Note: This tag may not be supported in '''[resource]''', '''[scenario]''', or '''[test]'''.&lt;br /&gt;
* '''[options]''': Custom options. See [[OptionWML]] for details. Note: This may not be supported in '''[resource]''', '''[scenario]''', or '''[test]'''.&lt;br /&gt;
* '''[load_resource]''': Indicates a resource to load when this addon module is loaded.&lt;br /&gt;
** '''id''': The ID of the resource.&lt;br /&gt;
* '''[modify_unit_type]''' {{DevFeature1.15|2}}: Changes a unit type while this modification is active. The supported attributes are:&lt;br /&gt;
** '''type''' : the id of the unit type to change.&lt;br /&gt;
** '''set_experience''' : changes the unit type's max experience.&lt;br /&gt;
** '''set_cost''' : changes the unit type's recruit cost.&lt;br /&gt;
** '''set_advances_to''' : changes the unit type's advancements.&lt;br /&gt;
** '''add_advancement''' : adds a (list of comma separated) unit type(s) to the possible advancements of this unit type.&lt;br /&gt;
** '''remove_advancement''' : removes a (list of comma separated) unit type(s) from the possible advancements of this unit type.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[BinaryPathWML]] - Toplevel tag to define search paths for assets.&lt;br /&gt;
* [[UnitsWML]] - Toplevel tag to define units and unit-related data.&lt;br /&gt;
* [[TerrainWML]] - Toplevel tag to define terrain types.&lt;br /&gt;
* [[TerrainGraphicsWML]] - Toplevel tag to define how terrain is drawn.&lt;/div&gt;</summary>
		<author><name>Octalot</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=ReferenceWML&amp;diff=72166</id>
		<title>ReferenceWML</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=ReferenceWML&amp;diff=72166"/>
		<updated>2024-01-23T12:12:57Z</updated>

		<summary type="html">&lt;p&gt;Octalot: Move AddonsWML into the &amp;quot;How WML works&amp;quot; section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WML Tags}}&lt;br /&gt;
== The Wesnoth Markup Language ==&lt;br /&gt;
&lt;br /&gt;
The Wesnoth Markup Language (WML) is used to code almost everything in Wesnoth, including scenarios, units, savefiles, and the user interface layout. WML files are simple, human-readable text files, usually with the .cfg extension, with similarities to INI files and XML. A major feature in WML are macros, which are alike those found in the C language and similarily are handled by a preprocessor. Implementation-wise, WML files are handled mainly by the ''config'' class (and ''simple_wml'' in [[wesnothd]]).&lt;br /&gt;
&lt;br /&gt;
This page is a collection of pointers to different common WML structures.&lt;br /&gt;
&lt;br /&gt;
See [[BuildingScenarios]], [[BuildingCampaigns]] and [[BuildingUnits]]&lt;br /&gt;
for a tutorial style overview.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Note: this reference may contain slight inaccuracies, might not list all existing keys and tags or might contain some deprecated syntax. If you find that this reference doesn't give you the answer to how to implement some feature in WML, the most reliable way is to look at the WML code of existing units and campaigns that have done so.''&lt;br /&gt;
&lt;br /&gt;
== How WML works ==&lt;br /&gt;
&lt;br /&gt;
* [[SyntaxWML]] Description of WML syntax, and how to use variables&lt;br /&gt;
* [[PreprocessorRef]] the WML preprocessor syntax&lt;br /&gt;
* [[GrammarWML]] A more formal definition of the WML syntax. More useful for implementing a WML parser than for writing WML documents.&lt;br /&gt;
* [[AddonsWML]] Content that can be published and downloaded via the add-ons server&lt;br /&gt;
&lt;br /&gt;
== WML toplevel tags ==&lt;br /&gt;
&lt;br /&gt;
The following covers most of the possible toplevel tags in a typical main WML file. Some minor and dev-oriented tags (not intended for use by UMC) are omitted.&lt;br /&gt;
&lt;br /&gt;
* [[GameConfigWML]] the top level '''[game_config]''' tag&lt;br /&gt;
* [[UnitsWML]] the top level '''[units]''' tag&lt;br /&gt;
** [[AbilitiesWML]] a list of the different abilities a unit or weapon can have&lt;br /&gt;
** [[UnitTypeWML]] how to describe a unit type&lt;br /&gt;
** [[AnimationWML]] how to animate units&lt;br /&gt;
* [[CoreWML]] the top level '''[core]''' tag&lt;br /&gt;
* [[CampaignWML]] the top level '''[campaign]''' tag&lt;br /&gt;
** [[CreditsWML]] how to describe the credits (the '''[about]''' tag)&lt;br /&gt;
* [[ScenarioWML]] the top level tags '''[scenario]''', '''[multiplayer]''', and '''[test]'''&lt;br /&gt;
** [[EventWML]] how to describe an event (the '''[event]''' tag)&lt;br /&gt;
** [[SideWML]] how to describe a side (the '''[side]''' tag)&lt;br /&gt;
** [[MapGeneratorWML]] the random map generator&lt;br /&gt;
** [[TimeWML]] how to describe a day&lt;br /&gt;
** [[IntroWML]] how to describe the intro screen (the '''[story]''' and '''[part]''' tags)&lt;br /&gt;
* [[EraWML]] the top level '''[era]''' tag&lt;br /&gt;
* [[ModificationWML]] the top level '''[modification]''' and '''[resource]''' tags&lt;br /&gt;
* [[TerrainWML]] the top level '''[terrain_type]''' tag&lt;br /&gt;
* [[TerrainGraphicsWML]], the top level '''[terrain_graphics]''' tag&lt;br /&gt;
* [[ThemeWML]] the top level '''[theme]''' tag&lt;br /&gt;
* [[LanguageWML]] the top level '''[language]''' tag&lt;br /&gt;
* [[LocaleWML]] the top level '''[locale]''' tag&lt;br /&gt;
* [[HelpWML]] the top level '''[help]''' tag&lt;br /&gt;
* [[BinaryPathWML]] the top level '''[binary_path]''' tag&lt;br /&gt;
* [[FontsWML]] the top level '''[fonts]''' tag&lt;br /&gt;
* [[GettextForWesnothDevelopers#The_textdomain_tag|Textdomains]] the '''[textdomain]''' tag&lt;br /&gt;
&lt;br /&gt;
Some other files use the WML format, but with different tags.&lt;br /&gt;
&lt;br /&gt;
* [[AchievementsWML]] the [achievement_group] and [achievement] tags.&lt;br /&gt;
* [[SavefileWML]] a description of the format of savegames&lt;br /&gt;
** [[ReplayWML]] a description of the format of player actions such as moving a unit&lt;br /&gt;
** [[StatisticalScenarioWML]] used to generate statistics of a savegame&lt;br /&gt;
* [[PblWML]] a description of the format of server-uploadable campaigns&lt;br /&gt;
* [[SchemaWML]] a description of WML files that define the structure of other WML files&lt;br /&gt;
* [[DiffWML]] used to describe structural differences between preprocessed WML documents&lt;br /&gt;
* [[GUIToolkit]] creating dialogs&lt;br /&gt;
&lt;br /&gt;
== Other WML tags ==&lt;br /&gt;
&lt;br /&gt;
* [[EventWML]] how to describe an event&lt;br /&gt;
** [[FilterWML]] the construct to filter on [[StandardUnitFilter|units]], [[StandardLocationFilter|locations]], [[StandardSideFilter|sides]], weapons, vision, and WML data.&lt;br /&gt;
** [[ActionWML]] to describe the actions which occur when the event is fired&lt;br /&gt;
*** [[ConditionalActionsWML]] actions that encapsulate conditional filters and the actions to execute if the conditions are met&lt;br /&gt;
*** [[DirectActionsWML]] actions that directly affect gameplay: for example, creating a unit&lt;br /&gt;
**** [[SingleUnitWML]] how to describe a unit (for uses such as placing one on the map with the '''[unit]''' tag)&lt;br /&gt;
*** [[InternalActionsWML]] actions that WML uses internally: for example, storing a variable&lt;br /&gt;
*** [[InterfaceActionsWML]] actions that do not affect gameplay: for example, displaying a message&lt;br /&gt;
*** [[LuaWML]] how to code actions with the Lua language (BfW 1.14 and earlier)&lt;br /&gt;
*** [[LuaAPI]] how to code actions with the Lua language (BfW 1.16 and later)&lt;br /&gt;
* [[AiWML]] how to describe parameters for AI (the '''[ai]''' tag)&lt;br /&gt;
* [[EffectWML]] the construct to modify a unit (the '''[effect]''' tag)&lt;br /&gt;
* [[DescriptionWML]] the structure of WML coded menus like the difficulty chooser of campaigns&lt;br /&gt;
* [[EditorWML]] tags controlling the post-1.4 editor's behavior&lt;br /&gt;
* [[MusicListWML]] for playing music (see also [[Available Music]] for a list of what's available)&lt;br /&gt;
&lt;br /&gt;
== Predefined macros == &lt;br /&gt;
&lt;br /&gt;
Wesnoth ships with a library of predefined macros you should find useful in writing your own WML.&lt;br /&gt;
* [https://www.wesnoth.org/macro-reference.html WML Macros] - description of all such macros.&lt;br /&gt;
&lt;br /&gt;
== Other ==&lt;br /&gt;
&lt;br /&gt;
* [[ReferenceWMLSyntax]] how this wiki and the pages it links to should be formatted&lt;br /&gt;
* [[ConventionsWML]] how to make your WML more readable&lt;br /&gt;
* [[Wml_optimisation]] how to make your WML code more efficient&lt;br /&gt;
* [[UsefulWMLFragments]] Various pieces of WML for various purposes. If you have some WML you're proud of that you think others can use, add it here.&lt;br /&gt;
* [[Maintenance tools]] for wmlindent, wmllint, wmlscope&lt;br /&gt;
* [[CommandMode]] commands are not strictly speaking part of WML, but they are useful for debugging it, and could be a little hard to find, so linking to them here makes sense.&lt;br /&gt;
* [[MultiplayerServerWML]] is used when communicating with the multiplayer server.&lt;br /&gt;
* [[CampaignServerWML]] is used when managing contributed campaigns on the campaign server.&lt;br /&gt;
* [[ImagePathFunctions]] (IPFs) are used when applying the color function to images, such as marking units as belonging to a team or in TerrainGraphics.&lt;br /&gt;
* [[Pango formatting]] shows ways to enrich descriptions (pango markup, which can generate basic html tags like &amp;lt;nowiki&amp;gt;&amp;lt;b&amp;gt;, &amp;lt;i&amp;gt;, &amp;lt;span&amp;gt;&amp;lt;/nowiki&amp;gt; and others).&lt;br /&gt;
* [[Wesnoth_Formula_Language]] (WFL) often used with $() formulas.&lt;br /&gt;
* [[PreprocessorRef|Syntax of preprocessor mini-language]] : symbols, macros, file inclusions...&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[BuildingMaps]] the text-based format for Wesnoth maps&lt;br /&gt;
* [[TerrainCodeTableWML]] a list of all terrains, and [[TerrainCodesWML]], on how to use them&lt;br /&gt;
* [[MultiHexTutorial]] a description of the multi-hex tiling system&lt;br /&gt;
* [[IGNFileFormat]] a description of the ignore file format&lt;br /&gt;
* [[CompatibilityStandards#Deprecation_levels_-_When_to_remove_deprecated_features|DeprecationLevels]]&lt;br /&gt;
* Back to [[Create]]&lt;br /&gt;
&lt;br /&gt;
[[Category: WML Reference]]&lt;/div&gt;</summary>
		<author><name>Octalot</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=AddonsWML&amp;diff=72165</id>
		<title>AddonsWML</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=AddonsWML&amp;diff=72165"/>
		<updated>2024-01-23T12:07:41Z</updated>

		<summary type="html">&lt;p&gt;Octalot: How directory structure fills the role of an [addon] tag&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WML Tags}}&lt;br /&gt;
== Creating add-ons in WML ==&lt;br /&gt;
&lt;br /&gt;
An add-on is defined by a directory structure, there is no tag called '''[addon]'''. The directory must contain a '''_main.cfg''', and the name of the directory is treated as its '''id'''. There are different rules for add-ons that define a custom core, which are described in [[CoreWML]] and ignored for the purposes of this page.&lt;br /&gt;
&lt;br /&gt;
An add-on typically contains other files, see for example AddonStructure or BuildingCampaignsTheCampaignFile.&lt;br /&gt;
&lt;br /&gt;
The description of a downloaded add-on is found in '''_info.cfg''', the data for a locally authored add-on is in '''_server.cfg''' (see [[PblWML]]).&lt;br /&gt;
&lt;br /&gt;
== Which add-ons are active during gameplay ==&lt;br /&gt;
&lt;br /&gt;
To help prevent clashes between add-ons, when starting a scenario the engine only loads the active add-ons. An add-on is active if one or more &amp;quot;add-on modules&amp;quot; is used by the game. If a game does not use any add-on module from your add-on, then your add-on won't be parsed at all. On the other hand, if the game uses any add-on module from your add-on, then your entire add-on will be parsed, relying on preprocessor defines to exclude parts that aren't relevant to the add-on module that is to be loaded.&lt;br /&gt;
&lt;br /&gt;
Several toplevel tags are used to define an &amp;quot;add-on module&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
* [[EraWML|'''[era]''']] - A multiplayer era&lt;br /&gt;
* [[CampaignWML|'''[campaign]''']] - A campaign, either single-player or multiplayer&lt;br /&gt;
* [[ScenarioWML|'''[scenario]''']] - A campaign scenario&lt;br /&gt;
* [[ScenarioWML|'''[multiplayer]''']] - A multiplayer scenario&lt;br /&gt;
* [[ScenarioWML|'''[test]''']] - A test or demo scenario&lt;br /&gt;
* [[ModificationWML|'''[modification]''']] - A modification that can be selected in the campaign or multiplayer menu&lt;br /&gt;
* [[ModificationWML|'''[resource]''']] - A resource that can be requested by any other addon module&lt;br /&gt;
&lt;br /&gt;
== Common Tags and Keys ==&lt;br /&gt;
&lt;br /&gt;
The following tags and keys are supported in most types of addon modules:&lt;br /&gt;
&lt;br /&gt;
* '''id''': The addon module's unique ID. It must be unique across all addon module types, so for example there cannot be a '''[scenario]''' and a '''[multiplayer]''' with the same ID.&lt;br /&gt;
* '''addon_min_version''': The minimum version of your add-on with which this content is backwards compatible. Compared with the version string given in [[PblWML]]. If ''addon_min_version'' is not explicitly specified, it means compatible only with the same version. Clients in multiplayer must have add-on versions agreeing with the ''addon_min_versions'' of each others' content in order to play, and will be prompted to update otherwise.&lt;br /&gt;
* '''name''': (translatable) The visible name for the addon module, shown in the campaign selection or multiplayer game creation menu. (Not supported for '''[resource]''' since it is never visible anywhere.)&lt;br /&gt;
* '''description''': (translatable) The detailed description for the addon module, shown in the campaign selection or multiplayer game creation menu. (Also not supported for '''[resource]''', nor for '''[scenario]''' or '''[test]'''.)&lt;br /&gt;
* '''define'''='''''SYMBOL''''' When this addon module is active, the preprocessor symbol '''''SYMBOL''''' will be defined. See [[PreprocessorRef#.23ifdef_and_.23ifndef|ifdef]] for how this can be used to isolate parts of the file from other addon modules. Besides the addon module tag, only the tags '''[textdomain]''' and '''[binary_path]''' (see [[BinaryPathWML]]) should go outside of '''#ifdef ''SYMBOL'''''. This symbol will be defined ''before'' any .cfg is preprocessed. Note: If for some reason you don't want to place your '''[binary_path]''' outside your '''#ifdef ''SYMBOL''''' (perhaps it's causing conflicts with other addon modules), you can use binary-path-independent paths for the textdomain and any assets that are used in the addon module tag. This looks like '''icon=data/add-ons/whatever/something.png''' – essentially, any path beginning with '''data/'''.&lt;br /&gt;
* '''[event]''' - An event handler that will be registered when the addon module is active. See [[EventWML]].&lt;br /&gt;
* '''[lua]''' - Lua code that will be run when the addon module is loaded, before the '''preload''' event is fired. See [[LuaWML]].&lt;br /&gt;
* '''[ai]''': Defines an AI algorithm that can be selected by players at the join game screen. See [[Wesnoth_AI_Framework#The_.5Bai.5D_Tag_.E2.80.94_Top-level_Elements|here]] for details. This is not used in single-player.&lt;br /&gt;
** Note: This is not the place to define faction-specific AI parameters in an era. For that, place the '''[ai]''' tag in '''[multiplayer_side]'''.&lt;br /&gt;
** Note: This tag may not be supported in '''[resource]''', '''[scenario]''', or '''[test]'''.&lt;br /&gt;
* '''[options]''': Custom options. See [[OptionWML]] for details. Note: This may not be supported in '''[resource]''', '''[scenario]''', or '''[test]'''.&lt;br /&gt;
* '''[load_resource]''': Indicates a resource to load when this addon module is loaded.&lt;br /&gt;
** '''id''': The ID of the resource.&lt;br /&gt;
* '''[modify_unit_type]''' {{DevFeature1.15|2}}: Changes a unit type while this modification is active. The supported attributes are:&lt;br /&gt;
** '''type''' : the id of the unit type to change.&lt;br /&gt;
** '''set_experience''' : changes the unit type's max experience.&lt;br /&gt;
** '''set_cost''' : changes the unit type's recruit cost.&lt;br /&gt;
** '''set_advances_to''' : changes the unit type's advancements.&lt;br /&gt;
** '''add_advancement''' : adds a (list of comma separated) unit type(s) to the possible advancements of this unit type.&lt;br /&gt;
** '''remove_advancement''' : removes a (list of comma separated) unit type(s) from the possible advancements of this unit type.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[BinaryPathWML]] - Toplevel tag to define search paths for assets.&lt;br /&gt;
* [[UnitsWML]] - Toplevel tag to define units and unit-related data.&lt;br /&gt;
* [[TerrainWML]] - Toplevel tag to define terrain types.&lt;br /&gt;
* [[TerrainGraphicsWML]] - Toplevel tag to define how terrain is drawn.&lt;/div&gt;</summary>
		<author><name>Octalot</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=GettextForWesnothDevelopers&amp;diff=72164</id>
		<title>GettextForWesnothDevelopers</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=GettextForWesnothDevelopers&amp;diff=72164"/>
		<updated>2024-01-23T10:46:52Z</updated>

		<summary type="html">&lt;p&gt;Octalot: /* The translatable strings */ Explain a bit about where the textdomain is used&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is used to help Wesnoth developers and UMC authors to work with the internationalization (i18n) system, based on GNU gettext.&lt;br /&gt;
&lt;br /&gt;
==  General design of gettext use  ==&lt;br /&gt;
&lt;br /&gt;
Programs using Gettext include the strings in one language (usually English) within the source code. For each target language, a separate file provides a look-up table from English to that language. If the file is missing or doesn't have a translation for that string, the system falls back to using the English text.&lt;br /&gt;
&lt;br /&gt;
The translation mechanism usually involves a function or macro called ''_'' (a single underscore sign). Examples are in the programming-language specific sections below.&lt;br /&gt;
&lt;br /&gt;
=== Textdomains ===&lt;br /&gt;
&lt;br /&gt;
Gettext splits translations into domains. For Wesnoth, the general idea is to use distinct textdomains for each campaign or add-on, so that UMC authors can easily ship translations together with their campaigns. These domains are covered in more depth in [[GettextForTranslators]].&lt;br /&gt;
&lt;br /&gt;
The convention is to name each domain using the name of the add-on, or just its initials. For example, ''wesnoth-utbs'' or ''wesnoth-Son_of_Haldric''. For UMC, it probably makes sense to use the full name to ensure that it doesn't clash with another add-on.&lt;br /&gt;
&lt;br /&gt;
=== Caret hints ===&lt;br /&gt;
&lt;br /&gt;
Some strings look the same in English but should not necessarily look identical in translations. To handle this, those strings can be prefixed with any descriptive string and a '''^''' character. For users viewing in '''en_US''', these hints will be automatically removed from the string before showing it to the user.&lt;br /&gt;
&lt;br /&gt;
{{DevFeature1.15|2}} if the string contains more than one '''^''', the descriptive string ends at the first '''^''', everything following the first '''^''' will be shown to the user.&lt;br /&gt;
&lt;br /&gt;
{{DevFeature1.15|18}} When using gettext's Plural Forms, these prefixes can and should be used in both the singular and the plural.&lt;br /&gt;
&lt;br /&gt;
=== UTF-8 ===&lt;br /&gt;
&lt;br /&gt;
For translation, all C++, WML and Lua files should be in UTF-8. As noted in the [[Typography_Style_Guide]], some punctuation should be used that's outside of the ASCII subset.&lt;br /&gt;
&lt;br /&gt;
==  Marking up strings in C++  ==&lt;br /&gt;
&lt;br /&gt;
In C++, you can mark up strings for translations using the &amp;lt;syntaxhighlight lang=c++ inline&amp;gt;_(&amp;quot;A translation&amp;quot;)&amp;lt;/syntaxhighlight&amp;gt; and &amp;lt;syntaxhighlight lang=c++ inline&amp;gt;_n(&amp;quot;Translation&amp;quot;, &amp;quot;Translations&amp;quot;, int)&amp;lt;/syntaxhighlight&amp;gt; macros. The &amp;lt;code&amp;gt;_n&amp;lt;/code&amp;gt; macro is to be used if the string has a singular and plural form.&lt;br /&gt;
&lt;br /&gt;
You can also add comments for translators. Single-line comments must start with &amp;lt;code&amp;gt;TRANSLATORS:&amp;lt;/code&amp;gt; and be on the line ''immediately'' above the translatable string. For multi-line comments, the &amp;lt;code&amp;gt;TRANSLATORS:&amp;lt;/code&amp;gt; only needs to be on the first line to include the whole comment, and the last line must be immediately above the translatable string.&lt;br /&gt;
&lt;br /&gt;
If the string contains any placeholders, '''don't''' use &amp;lt;code&amp;gt;snprintf&amp;lt;/code&amp;gt;. Instead use WML style variables, put their values in a &amp;lt;syntaxhighlight lang=c++ inline&amp;gt;utils::string_map&amp;lt;/syntaxhighlight&amp;gt; and use the &amp;lt;code&amp;gt;VGETTEXT&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;VNGETTEXT&amp;lt;/code&amp;gt; macros instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=c++&amp;gt;&lt;br /&gt;
utils::string_map symbols;&lt;br /&gt;
symbols[&amp;quot;enemies&amp;quot;] = std::to_string(enemy_count_);&lt;br /&gt;
symbols[&amp;quot;friends&amp;quot;] = std::to_string(friend_count_);&lt;br /&gt;
std::string message;&lt;br /&gt;
if ( friend_count_ != 0  &amp;amp;&amp;amp;  enemy_count_ != 0 ) {&lt;br /&gt;
	// Omitted from the example - see the code in src/action/move.cpp for how to handle strings with two independent ints.&lt;br /&gt;
} else if ( enemy_count_ != 0 ) {&lt;br /&gt;
	// TRANSLATORS: Only enemies sighted -- bad message.&lt;br /&gt;
	// This is shown when a move is interrupted because units were revealed from the fog of war.&lt;br /&gt;
	message = VNGETTEXT(&amp;quot;Enemy unit sighted!&amp;quot;, &amp;quot;$enemies enemy units sighted!&amp;quot;, enemy_count_, symbols);&lt;br /&gt;
} else if ( friend_count_ != 0 ) {&lt;br /&gt;
	// TRANSLATORS: Only friends sighted -- good message.&lt;br /&gt;
	// This is shown when a move is interrupted because units were revealed from the fog of war.&lt;br /&gt;
	message = VNGETTEXT(&amp;quot;Friendly unit sighted&amp;quot;, &amp;quot;$friends friendly units sighted&amp;quot;, friend_count_, symbols);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;syntaxhighlight lang=c++ inline&amp;gt;string_map&amp;lt;/syntaxhighlight&amp;gt; can contain additional values that aren't used in the translated string. In the example above, it has both ''friends'' and ''enemies''.&lt;br /&gt;
&lt;br /&gt;
By default, all strings in C++ belong to the &amp;quot;wesnoth&amp;quot; textdomain. If a different textdomain is required, you can add a textdomain binding at the top of the source file, before any include statements. A textdomain binding looks like this: &amp;lt;syntaxhighlight lang=c++&amp;gt;#define GETTEXT_DOMAIN &amp;quot;wesnoth-lib&amp;quot;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should avoid placing translatable strings in C++ headers if at all possible. Though there are a few places where it may be unavoidable, such as if templates are in use, it creates the risk of the strings sometimes being looked up in the wrong textdomain if the header is included in multiple files with different textdomains. If possible, always factor the translatable strings out into a source file.&lt;br /&gt;
&lt;br /&gt;
== Marking up strings in WML ==&lt;br /&gt;
&lt;br /&gt;
=== The textdomain bindings ===&lt;br /&gt;
&lt;br /&gt;
All files with translatable strings must declare which textdomain they use, which is normally done by putting ''#textdomain'' on the first line of each .wml file. See the example below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=wml&amp;gt;&lt;br /&gt;
#textdomain wesnoth-Son_of_Haldric&lt;br /&gt;
&lt;br /&gt;
[unit_type]&lt;br /&gt;
    id=Mu&lt;br /&gt;
    name= _ &amp;quot;Mu&amp;quot;&lt;br /&gt;
    # ...&lt;br /&gt;
[/unit_type]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that it is highly recommended that the first textdomain binding be on the first line of the file. Otherwise, odd stuff may happen.&lt;br /&gt;
&lt;br /&gt;
=== The translatable strings ===&lt;br /&gt;
&lt;br /&gt;
To mark a string as translatable, just put an underscore ( _ ) in front of the string you wish to be marked as translatable, like the example below. When parsing this, the engine will record both the visible text and the active textdomain, which can later be used to get the translation when displaying the text to the player.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=wml&amp;gt;&lt;br /&gt;
name= _ &amp;quot;Mu&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Notes to the translators ====&lt;br /&gt;
&lt;br /&gt;
If you think a translatable string needs additional guidance to be translated properly, you can provide a special comment that will be seen by the translators. Some hints are generated automatically, but in general if you have to wonder whether a hint is needed then it probably is. The context of the scenario isn't obvious in the translation tools, and you can't assume that the strings are shown to the translator in the same order that they appear in the WML file.&lt;br /&gt;
&lt;br /&gt;
Just begin the comment with '#po:' or '# po:' above the string in question. This must be on the line (or lines) immediately before the string that the hint applies to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=wml&amp;gt;&lt;br /&gt;
#po: &amp;quot;northern marches&amp;quot; is *not* a typo for &amp;quot;northern marshes&amp;quot; here.&lt;br /&gt;
#po: In archaic English, &amp;quot;march&amp;quot; means &amp;quot;border country&amp;quot;.&lt;br /&gt;
story=_ &amp;quot;The orcs were first sighted from the north marches of the great forest of Wesmere.&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The wmlxgettext tool will automatically generate hints for some tags, in addition to hints from '# po:' comments:&lt;br /&gt;
&lt;br /&gt;
* For ''[message]'': the ''id'', ''speaker'', ''role'' or ''type'' used to choose the speaker&lt;br /&gt;
* For ''[object]'': the ''id''&lt;br /&gt;
* For ''[unit]'': the ''id'' and ''unit_type''&lt;br /&gt;
* For ''[unit_type]'': the ''id'' and ''race''&lt;br /&gt;
* For ''[objective]'': whether it's ''condition=win'' or ''condition=lose''&lt;br /&gt;
&lt;br /&gt;
==== Things to avoid ====&lt;br /&gt;
&lt;br /&gt;
Note that there are certain things you should never do. For example, '''never''' mark an empty string as translatable, for wmlxgettext (the tool that extracts strings from WML) will abort upon detecting one. Therefore, what is seen below should never be done:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=wml&amp;gt;&lt;br /&gt;
name= _ &amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also, never put macro arguments in a translatable string, for it will not work. The reason for this is that the preprocessor does its job before gettext, thus gettext will try to replace a string that does not exist. Therefore, what is shown below should not be done:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=wml&amp;gt;&lt;br /&gt;
name= _ &amp;quot;{TYPE} Mu&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To show why it will not work:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=wml&amp;gt;&lt;br /&gt;
#define UNIT_NAME TYPE&lt;br /&gt;
    name= _ &amp;quot;{TYPE} Mu&amp;quot;&lt;br /&gt;
#enddef&lt;br /&gt;
&lt;br /&gt;
{UNIT_NAME ( _ &amp;quot;Sword&amp;quot;)}&lt;br /&gt;
{UNIT_NAME ( _ &amp;quot;Bow&amp;quot;)}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
Translation catalogues would have this: &amp;quot;{TYPE} Mu&amp;quot;, therefore gettext will look for it even though it will not exist because we, in fact, have these after the preprocessor is done:&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;syntaxhighlight lang=wml&amp;gt;&lt;br /&gt;
name= _ &amp;quot;Sword Mu&amp;quot;&lt;br /&gt;
name= _ &amp;quot;Bow Mu&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
Since those are not in the catalogues, they will not get translated.&lt;br /&gt;
&lt;br /&gt;
=== Gender-specific strings ===&lt;br /&gt;
&lt;br /&gt;
Several tags, including ''[message]'', ''[abilities]'' and ''[trait]'', can choose different strings based on the gender of the unit. In English the two versions are likely to be the same, but other languages may have gender-specific words for 'I' or 'me'.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=wml&amp;gt;&lt;br /&gt;
[message]&lt;br /&gt;
    speaker=student&lt;br /&gt;
    message= _ &amp;quot;Have you found an orc for me to fight, huh? A troll?&amp;quot;&lt;br /&gt;
    female_message= _ &amp;quot;female^Have you found an orc for me to fight, huh? A troll?&amp;quot;&lt;br /&gt;
[/message]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The convention in WML is, as above, to use ''message='' and ''female_message='', with the latter string including the prefix ''female^''. The mechanism also supports ''male_message='', but all units will fall back to using the plain ''message='' value if there isn't gender-specific version that matches their gender.&lt;br /&gt;
&lt;br /&gt;
The message is chosen based on the gender of the speaking unit. To change the message based on the gender of another unit requires separate ''[message]'' tags:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=wml&amp;gt;&lt;br /&gt;
[if]&lt;br /&gt;
    [have_unit]&lt;br /&gt;
        id=student&lt;br /&gt;
        gender=male&lt;br /&gt;
    [/have_unit]&lt;br /&gt;
    [then]&lt;br /&gt;
        [message]&lt;br /&gt;
            speaker=Delfador&lt;br /&gt;
            message= _ &amp;quot;Young man, you have $student_hp hitpoints and a sword. I’m fairly sure you’ll win.&amp;quot;&lt;br /&gt;
        [/message]&lt;br /&gt;
    [/then]&lt;br /&gt;
    [else]&lt;br /&gt;
        [message]&lt;br /&gt;
            speaker=Delfador&lt;br /&gt;
            message= _ &amp;quot;female^Young lady, you have $student_hp hitpoints and a sword. I’m fairly sure you’ll win.&amp;quot;&lt;br /&gt;
        [/message]&lt;br /&gt;
    [/else]&lt;br /&gt;
[/if]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Using a macro to encapsulate most of that can be useful. The example above is from the tutorial, after expanding the ''GENDER'' macro which is defined in data/campaigns/tutorial/utils/utils.cfg.&lt;br /&gt;
&lt;br /&gt;
=== Proper nouns in strings ===&lt;br /&gt;
&lt;br /&gt;
Some languages require declensions of proper nouns - a person's name may change slightly depending on their role in a sentence. See for example [https://github.com/hrubymar10/wesnoth-cs/pull/209#issuecomment-1066163433 the Czech translators' PR 209].&lt;br /&gt;
&lt;br /&gt;
Where there are a small number of units that might be addressed, for example the two in the tutorial or the four possible allies in UtBS, it's better to have a separate translatable string for each possible character instead of interpolating '''$unit.name''' into a string.&lt;br /&gt;
&lt;br /&gt;
=== Reusing mainline translations ===&lt;br /&gt;
&lt;br /&gt;
You can reuse translations for strings in mainline domains by using multiple textdomain bindings:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=wml&amp;gt;&lt;br /&gt;
# textdomain wesnoth-Son_of_Haldric&lt;br /&gt;
&lt;br /&gt;
[unit_type]&lt;br /&gt;
    id=Mu&lt;br /&gt;
    name= _ &amp;quot;Mu&amp;quot;&lt;br /&gt;
    # ...&lt;br /&gt;
&lt;br /&gt;
    [attack]&lt;br /&gt;
        id=sword&lt;br /&gt;
        #textdomain wesnoth-units&lt;br /&gt;
        description= _ &amp;quot;sword&amp;quot;&lt;br /&gt;
        # ...&lt;br /&gt;
    [/attack]&lt;br /&gt;
   &lt;br /&gt;
    #textdomain wesnoth-Son_of_Haldric&lt;br /&gt;
    # ...&lt;br /&gt;
[/unit_type]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Of course, if you use bindings for multiple textdomains, make sure the right parts of the file are bound to the right domains. Also, never try to use the mainline campaigns’ domains, for there is no guarantee that the mainline campaigns will be available on all setups. So, only use the core domains: wesnoth, wesnoth-editor, wesnoth-lib, wesnoth-help, and wesnoth-units.&lt;br /&gt;
&lt;br /&gt;
==== The gettext helper file ====&lt;br /&gt;
&lt;br /&gt;
A gettext helper file is a lovely file that makes reusing mainline translations nice and easy, by having all strings that should use a specific textdomain in a single file. It is also more wmllint-friendly.&lt;br /&gt;
&lt;br /&gt;
Here is an example of a gettext helper file. The macro names start with 'SOH_' to ensure that they don't clash with another add-on's macros (assuming that this add-on is Son_of_Haldric).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=wml&amp;gt;&lt;br /&gt;
#textdomain wesnoth-lib&lt;br /&gt;
&lt;br /&gt;
#define SOH_STR_ICE&lt;br /&gt;
_&amp;quot;Ice&amp;quot; #enddef&lt;br /&gt;
&lt;br /&gt;
#textdomain wesnoth-units&lt;br /&gt;
&lt;br /&gt;
#define SOH_STR_SWORD&lt;br /&gt;
_&amp;quot;sword&amp;quot; #enddef&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A typical name for gettext helper files is ''mainline-strings.cfg''.&lt;br /&gt;
&lt;br /&gt;
To use it, just wire it into your add-on and use the macros:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=wml&amp;gt;&lt;br /&gt;
[attack]&lt;br /&gt;
    id=sword&lt;br /&gt;
    name={SOH_STR_SWORD}&lt;br /&gt;
    # ...&lt;br /&gt;
[/attack]&lt;br /&gt;
&lt;br /&gt;
[terrain_type]&lt;br /&gt;
    id=ice2&lt;br /&gt;
    name={SOH_STR_ICE}&lt;br /&gt;
    # ...&lt;br /&gt;
[/terrain_type]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Unbalanced WML macros ===&lt;br /&gt;
&lt;br /&gt;
WML macros can be ''unbalanced'', meaning that they either include a [tag] without the corresponding [/tag] or a [/tag] before the corresponding [+tag]. These macros are expected to be used in a place where the [tag] is already open. Writing new macros using this isn't recommended; instead please ask in the WML Workshop forum about better ways to do it.&lt;br /&gt;
&lt;br /&gt;
When generating the .pot files for translation, wmlxgettext may stop with one of the errors&lt;br /&gt;
* error: Son_Of_Haldric/utils/abilities.cfg:29: unexpected closing tag '[/abilities]' outside any scope.&lt;br /&gt;
* error: Son_Of_Haldric/utils/abilities.cfg:300: End of WML file reached, but some tags were not properly closed. (nearest unclosed tag is: [abilities])&lt;br /&gt;
&lt;br /&gt;
Suppose abilities.cfg line 29 is in the definition of SOH_ABILITY_BLITZ. To get the .pot file generated, the simplest change is to use ''# wmlxgettext'' comments to add the missing opening or closing tags:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=wml&amp;gt;&lt;br /&gt;
# wmllint: unbalanced-on&lt;br /&gt;
# wmlxgettext: [abilities]&lt;br /&gt;
#define SOH_ABILITY_BLITZ&lt;br /&gt;
    [dummy]&lt;br /&gt;
        id=soh_blitz&lt;br /&gt;
        # ... ability definition stuff ...&lt;br /&gt;
    [/dummy]&lt;br /&gt;
[/abilities]&lt;br /&gt;
# ... several lines of code, none of which are an ''#enddef'' ...&lt;br /&gt;
[+abilities] # wmlxgettext: [/abilities]&lt;br /&gt;
#enddef&lt;br /&gt;
# wmllint: unbalanced-off&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Marking up strings in Lua ==&lt;br /&gt;
&lt;br /&gt;
In Lua code, textdomains are a callable object that looks up a string. This has support for both singular and plural strings. By convention, the name &amp;lt;code&amp;gt;_&amp;lt;/code&amp;gt; is usually used for the textdomain object.&lt;br /&gt;
&lt;br /&gt;
The following sample code demonstrates how to fetch translatable strings in Lua:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=lua&amp;gt;&lt;br /&gt;
local _ = wesnoth.textdomain &amp;quot;wesnoth&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- Look up a normal string:&lt;br /&gt;
local win_condition = _ &amp;quot;Defeat enemy leader(s)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- Hints for the translators start with &amp;quot;po:&amp;quot;, as in WML:&lt;br /&gt;
-- po: Floating text shown when a unit with the &amp;quot;feeding&amp;quot; ability gets a kill&lt;br /&gt;
local text = stringx.vformat(_&amp;quot;+$value max HP&amp;quot;, { value = feeding.value})&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Plural strings are supported since Wesnoth 1.14:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=lua&amp;gt;&lt;br /&gt;
local turn_count = 5&lt;br /&gt;
turn_counter = _(&amp;quot;this turn left&amp;quot;, &amp;quot;%d turns left&amp;quot;, turn_count)&lt;br /&gt;
turn_counter = tostring(turn_counter):format(turn_count)&lt;br /&gt;
&lt;br /&gt;
-- For readability, the example's strings are slightly different to the real code.&lt;br /&gt;
-- The real strings have brackets in the text shown to the player.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Wesnoth 1.15, variables can be interpolated using names:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=lua&amp;gt;&lt;br /&gt;
-- Look up a plural string, using the preferred style (as of Wesnoth 1.15.3):&lt;br /&gt;
local turn_count = 5&lt;br /&gt;
turn_counter = _(&amp;quot;this turn left&amp;quot;, &amp;quot;$remaining_turns turns left&amp;quot;, turn_count)&lt;br /&gt;
turn_counter = turn_counter:vformat{remaining_turns = turn_count}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== The textdomain tag ==&lt;br /&gt;
&lt;br /&gt;
To tell the engine where to search for the .po and .mo files, each textdomain needs a ''[textdomain]'' tag. For add-ons and mainline campaigns, the tag is usually placed inside of the _main.cfg. This is a top-level tag, so should be outside the ''[campaign]'' or ''[modification]'' tag.&lt;br /&gt;
&lt;br /&gt;
Translatable strings from C++ and Lua use the same textdomains as WML; this WML tag tells the engine where to search for these strings irrespective of which programming language the string appeared in.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=wml&amp;gt;&lt;br /&gt;
[textdomain]&lt;br /&gt;
    name=&amp;quot;wesnoth-Son_of_Haldric&amp;quot;&lt;br /&gt;
    path=&amp;quot;data/add-ons/Son_of_Haldric/translations&amp;quot;&lt;br /&gt;
[/textdomain]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The .po (or .mo) files will be loaded from a subdirectory of the ''translations'' directory.&lt;br /&gt;
&lt;br /&gt;
== Generating the .pot and .po files for UMC ==&lt;br /&gt;
&lt;br /&gt;
For each language, Wesnoth will search for a .po file containing the translations. How to create that file will be explained below, but first the overview of where it should go. Continuing with the Son of Haldric example, the Swedish translation would be in the file:&lt;br /&gt;
&lt;br /&gt;
* ''data/add-ons/Son_of_Haldric/translations/wesnoth-Son_of_Haldric/sv.po'' .&lt;br /&gt;
&lt;br /&gt;
That comes from:&lt;br /&gt;
&lt;br /&gt;
* ''data/add-ons/Son_of_Haldric/translations'' comes from the ''[textdomain]'' tag's ''path''&lt;br /&gt;
* ''wesnoth-Son_of_Haldric'' is the textdomain's name&lt;br /&gt;
* ''sv'' is the language code for Swedish. The codes for each language are given in the big table on [https://www.wesnoth.org/gettext/ https://www.wesnoth.org/gettext/] .&lt;br /&gt;
&lt;br /&gt;
Wesnoth 1.14 (but not 1.12) supports reading .po files directly, so when you add the .po file and the new translation should appear as soon as you refresh the cache.&lt;br /&gt;
&lt;br /&gt;
=== Generating the .pot file ===&lt;br /&gt;
&lt;br /&gt;
The template (.pot) file contains all of the strings that need to be translated in the .po files, but without the translations.&lt;br /&gt;
&lt;br /&gt;
The .pot is generated from WML and Lua files using a tool called wmlxgettext. With Wesnoth 1.14.5 and later, this is shipped with Wesnoth itself as part of the [[Maintenance_tools]] and can be used from the Maintenance Tools' GUI. At the moment it's not documented on that page, but if you follow the instructions to get GUI.pyw running then you'll see there's a wmlxgettext tab.&lt;br /&gt;
&lt;br /&gt;
Pre-1.13 instructions on how to get and use it are in Nobun's [https://r.wesnoth.org/p617733 forum posting].&lt;br /&gt;
&lt;br /&gt;
==== Error messages from wmlxgettext ====&lt;br /&gt;
&lt;br /&gt;
If you get the error from ''wmlxgettext'' of &amp;quot;UTF-8 Format error. Can't decode byte 0x91 (invalid start byte).&amp;quot;, and the line in question has a curly quotation mark, that likely means that your text editor is using the Windows-1252 character set, and you need to replace the Windows quotes with their Unicode equivalents, see [[Typography_Style_Guide]] and your editor's documentation for more info. The same applies if the error message says 0x92, 0x93 or 0x94.&lt;br /&gt;
&lt;br /&gt;
If you get either &amp;quot;unexpected closing tag '[/''something'']' outside any scope&amp;quot; or &amp;quot;End of WML file reached, but some tags were not properly closed. (nearest unclosed tag is: [''something''])&amp;quot; then see [[#Unbalanced_WML_macros]] above.&lt;br /&gt;
&lt;br /&gt;
=== Generating the .po files for each language ===&lt;br /&gt;
&lt;br /&gt;
Each .po file can start as a simple copy of the .pot file. Either the author or the translator copies the template to the language-specific filename, and then the work of [[GettextForTranslators]] happens on those copies.&lt;br /&gt;
&lt;br /&gt;
Some .po editors, for example poedit, will recognise that the .pot is a template, and automatically suggest saving to a different filename. The poedit editor can also update a .po file based on changes to the .pot file.&lt;br /&gt;
&lt;br /&gt;
=== Generating the .mo files for UMC ===&lt;br /&gt;
&lt;br /&gt;
For Wesnoth 1.14, it's generally not necessary to compile the .po files to .mo files. The mainline translations still use .mo files for better performance, but UMC authors can skip the .mo compilation stage.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[WesnothTranslations]]&lt;br /&gt;
* http://www.gnu.org/software/gettext/&lt;br /&gt;
* [https://www.gnu.org/software/gettext/manual/html_node/Preparing-Strings.html#Preparing-Strings GNU gettext manual on preparing translatable strings]&lt;br /&gt;
* [[GetText]]&lt;br /&gt;
* [https://wmlxgettext-unoff.readthedocs.io/en/latest/ wmlxgettext documentation]&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Octalot</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=1.19_Roadmap&amp;diff=72065</id>
		<title>1.19 Roadmap</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=1.19_Roadmap&amp;diff=72065"/>
		<updated>2024-01-05T13:39:43Z</updated>

		<summary type="html">&lt;p&gt;Octalot: Rough outline of the roadmap, milestone headings are only 1.19.5, .10, .20, Beta 1 and release&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is for consolidating and planning when new features and fixes are intended to land in the 1.19 development branch. The release schedule for Development releases can be found [https://forums.wesnoth.org/viewtopic.php?f=2&amp;amp;t=52785 here (link is to the 1.17 page, might change for 1.19)].&lt;br /&gt;
&lt;br /&gt;
== Instructions ==&lt;br /&gt;
Place the feature or fix you intend to implement within the section of the point release that you intend to have it implemented by, as well as your forum username in parenthesis after the feature description. The point release something is planned to be released with is not set in stone, and can be updated as needed depending on the circumstances.&lt;br /&gt;
&lt;br /&gt;
This is just an outline currently, with some point releases for the early, middle and late parts of the branch.&lt;br /&gt;
&lt;br /&gt;
== 1.19.5 ==&lt;br /&gt;
* [https://github.com/wesnoth/wesnoth/pull/6512 #6512] New type of deprecation warning, when a deprecated attribute is used alongside its replacement (octalot)&lt;br /&gt;
&lt;br /&gt;
== 1.19.10 ==&lt;br /&gt;
* [https://github.com/wesnoth/wesnoth/issues/5041 #5041] Draw text on images in [[IntroWML]], useable for place-name labels on the journey-tracker maps (octalot)&lt;br /&gt;
&lt;br /&gt;
== 1.19.20 ==&lt;br /&gt;
&lt;br /&gt;
== 1.19.?? (Beta 1) ==&lt;br /&gt;
'''This marks the beginning of the feature freeze and string freeze for 1.19;''' the only API changes made past this point must be to fix bugs.&lt;br /&gt;
&lt;br /&gt;
== 1.19.?? (RC1) ==&lt;br /&gt;
'''This marks the beginning of the API freeze;''' no API changes for for any reason can be made at this point. Additional RC releases will be done as needed.&lt;br /&gt;
&lt;br /&gt;
* Add new screenshots for 1.20&lt;br /&gt;
&lt;br /&gt;
== 1.20.0 ==&lt;br /&gt;
&lt;br /&gt;
[[Category:Roadmaps]]&lt;/div&gt;</summary>
		<author><name>Octalot</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=WesnothTranslationsHowTo&amp;diff=71703</id>
		<title>WesnothTranslationsHowTo</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=WesnothTranslationsHowTo&amp;diff=71703"/>
		<updated>2023-10-20T11:11:02Z</updated>

		<summary type="html">&lt;p&gt;Octalot: /* Files */ Split the section into Files, Tools and Summary. Mention SCons and CMake before individual tools.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains information on how-to translate and submit translation updates.&lt;br /&gt;
&lt;br /&gt;
==  How to submit your translations  ==&lt;br /&gt;
&lt;br /&gt;
Important:  Please '''do not submit translations as pull requests''' on the Wesnoth github repository site.  While that seems like a good idea, it causes potential complications that we cannot always easily resolve.  As a result, we cannot accept translations submitted via pull request and will close such PRs immediately.&lt;br /&gt;
&lt;br /&gt;
'' ''' Translation Maintainers ''' ''&lt;br /&gt;
&lt;br /&gt;
The translation maintainers should send the updated/new translation&lt;br /&gt;
po-files to the language coordinator:&lt;br /&gt;
Ivanovic (crazy-ivanovic AT gmx DOT net).&lt;br /&gt;
Additionally they have to quickly check over other people's translations&lt;br /&gt;
(other people translating the same language) as the other translators&lt;br /&gt;
(if any) will have to send their translations to their language maintainer&lt;br /&gt;
before inclusion in the source-code repository. You should also subscribe to the [http://www.wesnoth.org/wiki/WesnothTranslations#Mailing_List wesnoth-i18n mailinglist].&lt;br /&gt;
&lt;br /&gt;
Send the files as an archive containing the complete .po files (no .mo or .gmo files) and ensure that they follow the directory structure used in version control. For example, the archive with the German (de) translations should therefore be structured as follows:&lt;br /&gt;
 wesnoth/de.po&lt;br /&gt;
 wesnoth-httt/de.po &lt;br /&gt;
 wesnoth-tutorial/de.po&lt;br /&gt;
etc.&lt;br /&gt;
&lt;br /&gt;
'' ''' Translators ''' ''&lt;br /&gt;
&lt;br /&gt;
The other translators (those who are not maintainers) should contact&lt;br /&gt;
the maintainer for their language to see if there is some work to do.&lt;br /&gt;
After you have done some work on the translation you should email it&lt;br /&gt;
to your language maintainer. They will then (if needed) check it over&lt;br /&gt;
before sending it on to the language coordinators. A list of all translators&lt;br /&gt;
currently working on a language is found on each language page.&lt;br /&gt;
&lt;br /&gt;
'' ''' NEW Translators ''' ''&lt;br /&gt;
&lt;br /&gt;
If you want to help out with the translation of an language already started on,&lt;br /&gt;
contact the translation maintainer for the language.&lt;br /&gt;
If you want to start translation of Wesnoth to a new language,&lt;br /&gt;
first contact Ivanovic.&lt;br /&gt;
And then just follow the instructions written in '' Translators '' .&lt;br /&gt;
&lt;br /&gt;
==  Translations How-To  ==&lt;br /&gt;
&lt;br /&gt;
If you are a translator, see [[GettextForTranslators]] for more information.&lt;br /&gt;
&lt;br /&gt;
If you are a developer or UMC author, gettext internals for Wesnoth are discussed here: [[GettextForWesnothDevelopers]]. For UMC authors, the tool for generating .po files is linked to from [[GettextForWesnothDevelopers#Generating the_.pot_and_.po_files_for_UMC]].&lt;br /&gt;
&lt;br /&gt;
=== Files ===&lt;br /&gt;
&lt;br /&gt;
We will use the Swedish (sv) language and the ''wesnoth-editor'' domain as an example. There are three important files for each text-domain:&lt;br /&gt;
* ''wesnoth-editor/wesnoth-editor.pot'' file, which is a template containing all the strings used in the domain, but with empty strings instead of a translation. You can see how a ''.pot'' file looks like in the repository : [https://github.com/wesnoth/wesnoth/blob/master/po/wesnoth-editor/wesnoth-editor.pot#L50 Current repository version].&lt;br /&gt;
* ''wesnoth-editor/sv.po'', the file containing the translation, you can see how a ''.po'' file looks like in the repository: [https://github.com/wesnoth/wesnoth/blob/master/po/wesnoth-editor/sv.po#L50 Current repository version].&lt;br /&gt;
* ''{translations_dir}/sv/LC_MESSAGES/wesnoth-editor.mo'', which is a binary version of &amp;lt;lang&amp;gt;.po that the game will use for efficiency reasons. This is not found in the repo, but is created during compilation of the game.&lt;br /&gt;
&lt;br /&gt;
The first of these files, we update every once in a while, when there is new or modified text,&lt;br /&gt;
for instance when a new campaign scenario hits the repository.&lt;br /&gt;
&lt;br /&gt;
=== Tools ===&lt;br /&gt;
&lt;br /&gt;
For the main Wesnoth repository, the build system can handle updating these files.&lt;br /&gt;
* Using SCons, '''scons pot-update''' will do everything. '''scons -j8 pot-update''' is quicker, because it does it in parallel. This can be done without building the Wesnoth executables.&lt;br /&gt;
* Using CMake, enable '''ENABLE_NLS''' and '''ENABLE_POT_UPDATE_TARGET''', then run '''make -C po pot-update''' to generate the files.&lt;br /&gt;
&lt;br /&gt;
Some notes on the individual steps that are used during the build:&lt;br /&gt;
&lt;br /&gt;
C++ and Python files are parsed with ''xgettext'', WML and Lua files are parsed with ''wmlxgettext''. The results are then combined to generate the ''.pot'' file.&lt;br /&gt;
&lt;br /&gt;
Then, ''msgmerge'' is used to merge this new &amp;quot;state of the game strings&amp;quot; with your current translations, and generate a new, up-to-date, ''sv.po''.&lt;br /&gt;
&lt;br /&gt;
Then, a tool called ''msgfmt'' is called, which generates a new ''wesnoth.mo'' file from your ''wesnoth.po'' file, which will be used by the game once installed.&lt;br /&gt;
&lt;br /&gt;
=== Summary ===&lt;br /&gt;
&lt;br /&gt;
That was for the &amp;quot;Big Picture&amp;quot;.&lt;br /&gt;
But you really just need to be concerned with the po file:&lt;br /&gt;
translating new strings, checking &amp;quot;fuzzy&amp;quot; entries.&lt;br /&gt;
We can handle the administrative tasks of updating etc.&lt;br /&gt;
You really don't need to bother with any of these commands, unless you want to compile .mo files to check in-game.&lt;br /&gt;
&lt;br /&gt;
Ivanovic is now responsible for integrating translations into Wesnoth, with the help of Torangan and ott.&lt;br /&gt;
You should contact Ivanovic (crazy-ivanovic AT gmx DOT net), and he'll put them in the game.&lt;br /&gt;
&lt;br /&gt;
==  Specifying typefaces and fonts for a translation  ==&lt;br /&gt;
&lt;br /&gt;
Translations in a language which use characters outside of the Latin, Greek and Cyrillic character sets may want to specify different typefaces. There are some translatable strings in data/hardwired/fonts.cfg which specify the fonts to use; these strings appear in the ''wesnoth'' text domain, and can be configured by putting the required fonts' names as the translations.&lt;br /&gt;
&lt;br /&gt;
Note the documentation in data/hardwired/fonts.cfg.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[GettextForTranslators]]&lt;br /&gt;
* [[WesnothTranslations]]&lt;br /&gt;
* [[TranslatorsGuide]]&lt;br /&gt;
* [http://gettext.wesnoth.org Translation statistics]&lt;br /&gt;
&lt;br /&gt;
[[Category:Translations]]&lt;/div&gt;</summary>
		<author><name>Octalot</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=CampaignDialogue:TB&amp;diff=71587</id>
		<title>CampaignDialogue:TB</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=CampaignDialogue:TB&amp;diff=71587"/>
		<updated>2023-08-24T11:45:59Z</updated>

		<summary type="html">&lt;p&gt;Octalot: Add a note that this page is outdated&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;float:right&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
__TOC__&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is a transcription of all dialogue from [[A Tale of Two Brothers]]. It is meant as a resource for Wesnoth writers. If you don't want spoilers, leave this page now.&lt;br /&gt;
&lt;br /&gt;
{{Note|This page needs updating, most of the text is from the 1.8 version of Wesnoth}}&lt;br /&gt;
&lt;br /&gt;
=== Possible Timeframe ===&lt;br /&gt;
This campaign, as originally written, had no definite time or place. There was a vague reference to &amp;quot;the eastern reaches of the kingdom of Wesnoth&amp;quot;.  In a later revision the epilog hint that Arvith may have traveled with the elf-lord Kalenz, but this is not much of a constraint as Kalenz was around in 1YW and at least until the beginning of HttT in 517 YW.&lt;br /&gt;
    &lt;br /&gt;
Maghre has to be within reach of the orcs, but in a time and place where there haven't been orc raids for generations. This limits us to *western* Wesnoth, orc raids having been a chronic problem in the northeast even during the Kingdom's strongest periods. The logical time would be shortly after the death of Haldric IV in 350, the beginning of the First Dark Age.  It's arbitrarily set at 353; Kalenz began his wanderings ten years later, so the timing for Arvith to meet him later in life isn't bad.&lt;br /&gt;
&lt;br /&gt;
Placing the campaign is a little trickier.  Our main textual clue is that there is a dense wood, said by legend to be haunted, a few days' ride north.  Later, the boss's keep is said to be still further north.  Neither of these directions has plot importance, but they do suggest a locale for Maghre - near the Gray Woods.  The battle maps exclude it from being in a featureless plain, though; there are hills to the south and west.&lt;br /&gt;
&lt;br /&gt;
== Death Dialogue ==&lt;br /&gt;
=== Mordak ===&lt;br /&gt;
'''Mordak:''' Argh&lt;br /&gt;
&lt;br /&gt;
=== Arvith ===&lt;br /&gt;
'''Arvith:''' All is lost now that I am dead...&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' Everything is lost now that I am dead...&lt;br /&gt;
&lt;br /&gt;
== Scenario 1: Rooting Out A Mage ==&lt;br /&gt;
=== Story ===&lt;br /&gt;
Translation hints: The first paragraph is shown with the journey map as a background, showing the village in the foothills along the route between Aldril and Dan’Tonk. I'm assuming the beacons either use smoke signals or basic fire signals, with a few agreed ones to request goods or indicate that surplus is for sale.&lt;br /&gt;
&lt;br /&gt;
The remote freehold of Maghre in the western reaches of the Kingdom of Wesnoth was once a peaceful place, its inhabitants largely unaware of the comings and goings of the wider world. Wars and the rumor of wars touched them not. Even merchants were rarely seen, although caravans between Aldril and Dan’Tonk might send a wagon when called by the beacon tower.&lt;br /&gt;
&lt;br /&gt;
Then came the day that a dark mage settled in the region and began seeking sacrifices for his summonings.&lt;br /&gt;
&lt;br /&gt;
Skeletons and zombies killed cattle and fired fields. 'Fear and obey Mordak the Mage!' they cried in fell voices as they did their foul deeds. People vanished from isolated farmsteads. Men and women began to fear the night, and their children even the bright day. But the nearest lord was more than a day’s ride distant, and messengers sent to seek his help did not return.&lt;br /&gt;
&lt;br /&gt;
There was a man named Baran who had shown talent as a mage when he was young, gone to the great Academy on the Isle of Alduin, and returned to work his magic in the land where he was born. The people looked to him for help and leadership. He found weapons half-forgotten from the times of their sires and grandsires hanging in many houses, and bade the villagers to take them down and clean and oil them. He set the smiths of Maghre to making spearheads and ax-blades for the rest.&lt;br /&gt;
&lt;br /&gt;
Now Baran had a brother named Arvith who had also left Maghre to seek his fortune, and had become the leader of a small band of horsemen who hired out as guards to merchant caravans. Fortunate it was for all that, in better times, the brothers had talked of using trade beacons for other signals when in dire need. Baran sent out that call.&lt;br /&gt;
&lt;br /&gt;
12 V, 363 YW&lt;br /&gt;
Excerpt from the journal of Baran of Maghre&lt;br /&gt;
&lt;br /&gt;
If I could but face this ‘Mordak’! I think my magic might prove stronger than his. But he bides in the hills, well-guarded by his servants, and I muster frightened peasants to fight his minions with blades and sticks.&lt;br /&gt;
&lt;br /&gt;
I need my brother; he always had a better head for battle than I. Yet we have not spoken since that evil day at Toen Caric. If he will not come for me, perhaps he will return to aid our village in its hour of desperate need.&lt;br /&gt;
&lt;br /&gt;
Heeding the call, Arvith gathered such men as he could and hurried to Maghre to help Baran.&lt;br /&gt;
&lt;br /&gt;
=== Introductory Dialogue ===&lt;br /&gt;
'''Arvith:''' Greetings, my brother! How may my men and I be of aid?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
'''Baran:''' A dark mage has come upon us; his creatures call him Mordak. They have been terrorizing outlying farms, and we fear they may soon attack the village itself! The villagers of Maghre have taken up weapons but they are not trained fighters; but we need your men, and you to lead them.&lt;br /&gt;
&lt;br /&gt;
'''Baran:''' I can feel Mordak's foul touch on the hidden currents of the earth and air. He is somewhere due north of here, I would say not more than two days' ride.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' I will lead my men, and such villagers as can keep up with us, north to slay this Mordak! What will you do?&lt;br /&gt;
&lt;br /&gt;
'''Baran:''' You shall be the right hand, I the left. I will go stealthily with a handful of our best scouts and woodsmen. While you demonstrate against him and kill his creatures, I will try to defeat Mordak himself with magic at an unguarded moment. Together we may accomplish what either alone may not.&lt;br /&gt;
&lt;br /&gt;
=== Turn 6 ===&lt;br /&gt;
'''Arvith:''' Baran should be in position by now. Press them, distract the adept so Baran can spring his trap!&lt;br /&gt;
&lt;br /&gt;
=== Turn 10 ===&lt;br /&gt;
'''Arvith:''' Baran has not made his attack! I begin to fear for him... and it means we must deal with this Mordak ourselves!&lt;br /&gt;
&lt;br /&gt;
=== Undead Leader: Last Breath ===&lt;br /&gt;
'''Mordak:''' Argh.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' Good work, men! But what has become of my brother?&lt;br /&gt;
&lt;br /&gt;
'''Mordak:''' Worried about him, are you? E-he-he..hergh...gaargh...&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' There's nothing more to be had from this one; we will have to search for Baran ourselves!&lt;br /&gt;
&lt;br /&gt;
'''Unit:''' Sir, our scouts report that Baran was seen captured and carried away further north!&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' That they should dare this! We will give chase at once.&lt;br /&gt;
&lt;br /&gt;
=== Time Over ===&lt;br /&gt;
'''Mordak:''' Your brother's plan to ambush me has failed.  He is our prisoner now.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' My brother, kidnapped? I have failed you, Baran! And even now Mordak's forces descend upon the village!&lt;br /&gt;
&lt;br /&gt;
=== First Attack ===&lt;br /&gt;
'''Arvith:''' I hear these creatures are nigh-immune to our weapons, let us see!&lt;br /&gt;
&lt;br /&gt;
=== Player Kills First Enemy ===&lt;br /&gt;
'''Unit:''' That was not so hard!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Scenario 2: The Chase ==&lt;br /&gt;
=== Story ===&lt;br /&gt;
The pursuit had already run for several days when the pursuers came to the bounds of the huge forest known as the Gray Woods. Ancient tales wArvithd of lost souls haunting the wood, hunting and killing anyone brave enough to enter it.&lt;br /&gt;
&lt;br /&gt;
Heedless of those rumors, Arvith followed them. His only worry was that his horsemen would be at disadvantage if attacked in the forest.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introductory Dialogue ===&lt;br /&gt;
'''Narrator:''' Sounds of a scuffle were heard from the forest.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' Come on, men. A stroll through such lovely green woods, what could be finer?&lt;br /&gt;
&lt;br /&gt;
'''Unit:''' It is whispered that hungry ghosts rule this forest, and kill everyone who dares to enter.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' I will lead my men, and such villagers as can keep up with us, north to slay this Mordak! What will you do?&lt;br /&gt;
&lt;br /&gt;
'''Nil-Galion:''' You there! Halt and explain yourself.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' We're chasing after some men who kidnapped my brother!&lt;br /&gt;
&lt;br /&gt;
'''Nil-Galion:''' Those men told me their prisoner had attempted to murder their master, and wArvithd that evil men would follow him. Advance no further, or you will die.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' So much for those ghost stories. Mere elves will not stop me from freeing my brother!&lt;br /&gt;
&lt;br /&gt;
'''Unit:''' I am glad at least that we will not have to face ghosts. But those elves will have us at a disadvantage; our horses will not maneuver well in the trees.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' Bah, just stay on the paths; our spearmen and bowmen can fight in the deeper woods. We have faced and won through greater perils than those amateurs can offer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Move to the North ===&lt;br /&gt;
'''Unit:''' I see them! There they are!&lt;br /&gt;
&lt;br /&gt;
'''Muff Toras:''' Curses! If they had been an hour slower our master's reinforcements would already be here to meet us.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Turn 12 ===&lt;br /&gt;
'''Arvith:''' Come on, men, let's catch those kidnappers!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Elf Last Breath ===&lt;br /&gt;
'''Nil-Galion:''' Foolish human, you have killed me but you will not catch the undead in time. I have fulfilled my contract, and will be reanimated soon to become a lord of their armies.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' Follow their back trail!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Undead Last Breath ===&lt;br /&gt;
'''Muff Toras:''' Hah! You have captured me, but it will avail you nothing. I sent your precious brother the mage north with half my men a day since; he will be safely locked away in our master's dungeons by now.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' My blade is at your throat. Give us the way to my brother now, or I will spill your wretched blood on the ground.&lt;br /&gt;
&lt;br /&gt;
'''Muff Toras:''' Three days ride to the northeast, in a deserted castle. The passwords to the guards are --- and ---.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' Bind him and take him with us. If he has played us false, he will die.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Time Over ===&lt;br /&gt;
'''Muff Toras:''' My reinforcements are here!&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' He escaped us...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Victory: Easy ===&lt;br /&gt;
'''Brena:''' Greetings. I am Brena, a knight errant. I saw you pursuing and fighting the foul undead. Are there more of them to be destroyed?&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' Aye. We think there's a nest of them north-east of here. They've captured my brother.&lt;br /&gt;
&lt;br /&gt;
'''Brena:''' I bear a great hatred towards their kind. I will follow and fight them with you, if you permit.&lt;br /&gt;
&lt;br /&gt;
'''Unit:''' He would only slow us down!&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' It is my place to decide this.&lt;br /&gt;
&lt;br /&gt;
''Option 1''&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' All right, come along with us.&lt;br /&gt;
&lt;br /&gt;
'''Brena:''' Thank you.  My comrades and I will help you on your noble quest.&lt;br /&gt;
&lt;br /&gt;
''Option 2''&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' I am sorry.  We have not the time to spare.&lt;br /&gt;
&lt;br /&gt;
'''Brena:''' Take this, then, for I see that you are on a quest. My comrades will help you whenever you call for them.&lt;br /&gt;
&lt;br /&gt;
== Scenario 3: Guarded Castle ==&lt;br /&gt;
&lt;br /&gt;
=== Introductory Dialogue ===&lt;br /&gt;
'''Narrator:''' Arvith's men arrived at the castle and were immediately challenged by some guards.&lt;br /&gt;
&lt;br /&gt;
'''Guard Leader:''' Halt! Friend or foe? Give the password.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' The password is ----.&lt;br /&gt;
&lt;br /&gt;
'''Guard Leader:''' Pass friend.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Orcs Sighted ===&lt;br /&gt;
&lt;br /&gt;
'''Knago-Brek:''' Haha! We not kill people for long time. Weapon wants blood. We now kill humans!!&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' My sword-arm has a say in who will do the dying. Come on, men, let's kill some orcs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Second Set of Guards (Turn 6) ===&lt;br /&gt;
&lt;br /&gt;
'''Guard Leader:''' Are you our relief arriving? Does this mean we get to leave here now?&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' Um, yes. Fine. You can go.&lt;br /&gt;
&lt;br /&gt;
'''Guard Leader:''' Um, you're supposed to give the password.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' Oh, of course. I had nearly forgotten.&lt;br /&gt;
&lt;br /&gt;
'''Guard Leader:''' Thanks! Irritating little formality, isn't it?&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' I think I should better support my men at the front to make sure we can free my brother.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Undead Last Breath ===&lt;br /&gt;
'''Rotharik:''' Nooo! This is the end...&lt;br /&gt;
&lt;br /&gt;
'''Unit:''' There's a key in his robes.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' That may well be the key to the cell they're holding Baran in! I will take it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Baran's Cell ===&lt;br /&gt;
'''Unit:''' I found Baran. He is in this cell.&lt;br /&gt;
&lt;br /&gt;
IF Arvith&lt;br /&gt;
&lt;br /&gt;
'''Baran:''' Good to see you, Arvith. Now can you get me out of this dungeon, please?&lt;br /&gt;
&lt;br /&gt;
IF ANOTHER UNIT&lt;br /&gt;
&lt;br /&gt;
'''Baran:''' You must be one of Arvith's men. Please help me get out of this dungeon.&lt;br /&gt;
&lt;br /&gt;
THEN&lt;br /&gt;
&lt;br /&gt;
IF PLAYER DOES NOT HAVE KEY&lt;br /&gt;
&lt;br /&gt;
'''Baran:''' The accursed dark sorcerer Rotharik has imprisoned me behind this magically enhanced iron gate. It can only be opened with the correct key. You must get it from him to free me.&lt;br /&gt;
&lt;br /&gt;
IF PLAYER HAS KEY&lt;br /&gt;
&lt;br /&gt;
'''Baran:''' Thank you for saving me. I had almost given up hope you would free me.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' Oh it was nothing, a few elves, one or two dark sorcerers, a bunch of orcs and some undead. Really just a day's work for us mercenaries.&lt;br /&gt;
&lt;br /&gt;
'''Baran:''' Thank you for coming to my aid. Let us return to the village.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Time Over ===&lt;br /&gt;
'''Rotharik:''' You are too late! Your brother is already dead! Muhahahaha...&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' Argh!!!&lt;br /&gt;
&lt;br /&gt;
== Scenario 4: Return to the Village ==&lt;br /&gt;
&lt;br /&gt;
=== Introductory Dialogue ===&lt;br /&gt;
'''Arvith:''' There. Your village is just across those hills, and already I see men coming to greet us!&lt;br /&gt;
&lt;br /&gt;
'''Baran:''' No, they are fleeing from something. We must find out what is happening over there!&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' Men! Ready your weapons!&lt;br /&gt;
&lt;br /&gt;
'''Baran:''' We should go there and talk to Counselor Hoban. Maybe he knows what is going on here.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sighted by Councillor Hoban ===&lt;br /&gt;
'''Councillor Hoban:''' I am glad to see you returned.&lt;br /&gt;
&lt;br /&gt;
'''Baran:''' No gladder than I am to be here. But what has happened to Maghre?&lt;br /&gt;
&lt;br /&gt;
'''Councillor Hoban:''' Soon after you departed we were beset by orcs. With half the men of Maghre gone, we could not stop them.&lt;br /&gt;
&lt;br /&gt;
'''Councillor Hoban:''' The orcish warlord aims to enslave us. We will not be able to hold out for much longer.&lt;br /&gt;
&lt;br /&gt;
'''Councillor Hoban:''' Have a care, his men are fell fighters and have killed many. Very few remain who can bear arms, but I will send them to aid you in battle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Enemies Defeated ===&lt;br /&gt;
'''Arvith:''' Finally the warlord is killed. Now you can go back to Maghre.&lt;br /&gt;
&lt;br /&gt;
'''Baran:''' So much has been destroyed. It will be difficult to repair all that the orcs and undead have wrecked. And they could come again.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' I must go back to earning my living. But you have my word, little brother; if you are beset again, I will come.&lt;br /&gt;
&lt;br /&gt;
=== Baran's Last Breath ===&lt;br /&gt;
'''Baran:''' It is over, I am vanquished.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Time Over===&lt;br /&gt;
'''Arvith:''' I don't think we can rescue anyone from these villages. It is too late.&lt;br /&gt;
&lt;br /&gt;
'''Baran:''' I was too weak to protect these people. Oh why did this happen to me?!?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Scenario 5: Epilogue==&lt;br /&gt;
===Story===&lt;br /&gt;
It took years to rebuild the village and restore the surrounding farms. The people of Maghre had to work very hard, but felt better knowing Arvith's men would be their firm allies in troubled times.&lt;br /&gt;
&lt;br /&gt;
Arvith and his men left the village assured that it would be well guided by Baran. On their journeys they faced many challenges and battles. Some tales even mention Arvith's name together with that of the famous elvish lord Kalenz, but this is a different story...&lt;br /&gt;
&lt;br /&gt;
==TB's Specified Unit Names==&lt;br /&gt;
&lt;br /&gt;
===Humans===&lt;br /&gt;
*[[CharactersStorys#Arvith | Arvith]]&lt;br /&gt;
*[[CharactersStorys#Baran | Baran]]&lt;br /&gt;
*Alwyn&lt;br /&gt;
*Brent&lt;br /&gt;
*[[CharactersStorys#Brena | Brena]]&lt;br /&gt;
*Cadell&lt;br /&gt;
*Dannen&lt;br /&gt;
*Efran&lt;br /&gt;
*Fargus&lt;br /&gt;
*Erik&lt;br /&gt;
*Heine&lt;br /&gt;
*Magnus&lt;br /&gt;
*Councillor Hoban&lt;br /&gt;
&lt;br /&gt;
=== Elves ===&lt;br /&gt;
*[[CharactersStorys#Nil-Galion | Nil-Galion]]&lt;br /&gt;
&lt;br /&gt;
===Undead===&lt;br /&gt;
=====Human=====&lt;br /&gt;
*[[CharactersStorys#Mordak | Mordak]]&lt;br /&gt;
*[[CharactersStorys#Muff_Toras | Muff Toras]]&lt;br /&gt;
*[[CharactersStorys#Rotharik | Rotharik]]&lt;br /&gt;
&lt;br /&gt;
===Orcs===&lt;br /&gt;
*Knago-Brek&lt;br /&gt;
*[[CharactersStorys#Tairach | Tairach]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Create|*]]&lt;br /&gt;
[[Category:Writing|*]]&lt;/div&gt;</summary>
		<author><name>Octalot</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=CampaignDialogue:TB&amp;diff=71586</id>
		<title>CampaignDialogue:TB</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=CampaignDialogue:TB&amp;diff=71586"/>
		<updated>2023-08-24T11:41:39Z</updated>

		<summary type="html">&lt;p&gt;Octalot: /* Enemies Defeated */ More amulet removal&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;float:right&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
__TOC__&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is a transcription of all dialogue from [[A Tale of Two Brothers]]. It is meant as a resource for Wesnoth writers. If you don't want spoilers, leave this page now.&lt;br /&gt;
&lt;br /&gt;
=== Possible Timeframe ===&lt;br /&gt;
This campaign, as originally written, had no definite time or place. There was a vague reference to &amp;quot;the eastern reaches of the kingdom of Wesnoth&amp;quot;.  In a later revision the epilog hint that Arvith may have traveled with the elf-lord Kalenz, but this is not much of a constraint as Kalenz was around in 1YW and at least until the beginning of HttT in 517 YW.&lt;br /&gt;
    &lt;br /&gt;
Maghre has to be within reach of the orcs, but in a time and place where there haven't been orc raids for generations. This limits us to *western* Wesnoth, orc raids having been a chronic problem in the northeast even during the Kingdom's strongest periods. The logical time would be shortly after the death of Haldric IV in 350, the beginning of the First Dark Age.  It's arbitrarily set at 353; Kalenz began his wanderings ten years later, so the timing for Arvith to meet him later in life isn't bad.&lt;br /&gt;
&lt;br /&gt;
Placing the campaign is a little trickier.  Our main textual clue is that there is a dense wood, said by legend to be haunted, a few days' ride north.  Later, the boss's keep is said to be still further north.  Neither of these directions has plot importance, but they do suggest a locale for Maghre - near the Gray Woods.  The battle maps exclude it from being in a featureless plain, though; there are hills to the south and west.&lt;br /&gt;
&lt;br /&gt;
== Death Dialogue ==&lt;br /&gt;
=== Mordak ===&lt;br /&gt;
'''Mordak:''' Argh&lt;br /&gt;
&lt;br /&gt;
=== Arvith ===&lt;br /&gt;
'''Arvith:''' All is lost now that I am dead...&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' Everything is lost now that I am dead...&lt;br /&gt;
&lt;br /&gt;
== Scenario 1: Rooting Out A Mage ==&lt;br /&gt;
=== Story ===&lt;br /&gt;
Translation hints: The first paragraph is shown with the journey map as a background, showing the village in the foothills along the route between Aldril and Dan’Tonk. I'm assuming the beacons either use smoke signals or basic fire signals, with a few agreed ones to request goods or indicate that surplus is for sale.&lt;br /&gt;
&lt;br /&gt;
The remote freehold of Maghre in the western reaches of the Kingdom of Wesnoth was once a peaceful place, its inhabitants largely unaware of the comings and goings of the wider world. Wars and the rumor of wars touched them not. Even merchants were rarely seen, although caravans between Aldril and Dan’Tonk might send a wagon when called by the beacon tower.&lt;br /&gt;
&lt;br /&gt;
Then came the day that a dark mage settled in the region and began seeking sacrifices for his summonings.&lt;br /&gt;
&lt;br /&gt;
Skeletons and zombies killed cattle and fired fields. 'Fear and obey Mordak the Mage!' they cried in fell voices as they did their foul deeds. People vanished from isolated farmsteads. Men and women began to fear the night, and their children even the bright day. But the nearest lord was more than a day’s ride distant, and messengers sent to seek his help did not return.&lt;br /&gt;
&lt;br /&gt;
There was a man named Baran who had shown talent as a mage when he was young, gone to the great Academy on the Isle of Alduin, and returned to work his magic in the land where he was born. The people looked to him for help and leadership. He found weapons half-forgotten from the times of their sires and grandsires hanging in many houses, and bade the villagers to take them down and clean and oil them. He set the smiths of Maghre to making spearheads and ax-blades for the rest.&lt;br /&gt;
&lt;br /&gt;
Now Baran had a brother named Arvith who had also left Maghre to seek his fortune, and had become the leader of a small band of horsemen who hired out as guards to merchant caravans. Fortunate it was for all that, in better times, the brothers had talked of using trade beacons for other signals when in dire need. Baran sent out that call.&lt;br /&gt;
&lt;br /&gt;
12 V, 363 YW&lt;br /&gt;
Excerpt from the journal of Baran of Maghre&lt;br /&gt;
&lt;br /&gt;
If I could but face this ‘Mordak’! I think my magic might prove stronger than his. But he bides in the hills, well-guarded by his servants, and I muster frightened peasants to fight his minions with blades and sticks.&lt;br /&gt;
&lt;br /&gt;
I need my brother; he always had a better head for battle than I. Yet we have not spoken since that evil day at Toen Caric. If he will not come for me, perhaps he will return to aid our village in its hour of desperate need.&lt;br /&gt;
&lt;br /&gt;
Heeding the call, Arvith gathered such men as he could and hurried to Maghre to help Baran.&lt;br /&gt;
&lt;br /&gt;
=== Introductory Dialogue ===&lt;br /&gt;
'''Arvith:''' Greetings, my brother! How may my men and I be of aid?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
'''Baran:''' A dark mage has come upon us; his creatures call him Mordak. They have been terrorizing outlying farms, and we fear they may soon attack the village itself! The villagers of Maghre have taken up weapons but they are not trained fighters; but we need your men, and you to lead them.&lt;br /&gt;
&lt;br /&gt;
'''Baran:''' I can feel Mordak's foul touch on the hidden currents of the earth and air. He is somewhere due north of here, I would say not more than two days' ride.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' I will lead my men, and such villagers as can keep up with us, north to slay this Mordak! What will you do?&lt;br /&gt;
&lt;br /&gt;
'''Baran:''' You shall be the right hand, I the left. I will go stealthily with a handful of our best scouts and woodsmen. While you demonstrate against him and kill his creatures, I will try to defeat Mordak himself with magic at an unguarded moment. Together we may accomplish what either alone may not.&lt;br /&gt;
&lt;br /&gt;
=== Turn 6 ===&lt;br /&gt;
'''Arvith:''' Baran should be in position by now. Press them, distract the adept so Baran can spring his trap!&lt;br /&gt;
&lt;br /&gt;
=== Turn 10 ===&lt;br /&gt;
'''Arvith:''' Baran has not made his attack! I begin to fear for him... and it means we must deal with this Mordak ourselves!&lt;br /&gt;
&lt;br /&gt;
=== Undead Leader: Last Breath ===&lt;br /&gt;
'''Mordak:''' Argh.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' Good work, men! But what has become of my brother?&lt;br /&gt;
&lt;br /&gt;
'''Mordak:''' Worried about him, are you? E-he-he..hergh...gaargh...&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' There's nothing more to be had from this one; we will have to search for Baran ourselves!&lt;br /&gt;
&lt;br /&gt;
'''Unit:''' Sir, our scouts report that Baran was seen captured and carried away further north!&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' That they should dare this! We will give chase at once.&lt;br /&gt;
&lt;br /&gt;
=== Time Over ===&lt;br /&gt;
'''Mordak:''' Your brother's plan to ambush me has failed.  He is our prisoner now.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' My brother, kidnapped? I have failed you, Baran! And even now Mordak's forces descend upon the village!&lt;br /&gt;
&lt;br /&gt;
=== First Attack ===&lt;br /&gt;
'''Arvith:''' I hear these creatures are nigh-immune to our weapons, let us see!&lt;br /&gt;
&lt;br /&gt;
=== Player Kills First Enemy ===&lt;br /&gt;
'''Unit:''' That was not so hard!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Scenario 2: The Chase ==&lt;br /&gt;
=== Story ===&lt;br /&gt;
The pursuit had already run for several days when the pursuers came to the bounds of the huge forest known as the Gray Woods. Ancient tales wArvithd of lost souls haunting the wood, hunting and killing anyone brave enough to enter it.&lt;br /&gt;
&lt;br /&gt;
Heedless of those rumors, Arvith followed them. His only worry was that his horsemen would be at disadvantage if attacked in the forest.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introductory Dialogue ===&lt;br /&gt;
'''Narrator:''' Sounds of a scuffle were heard from the forest.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' Come on, men. A stroll through such lovely green woods, what could be finer?&lt;br /&gt;
&lt;br /&gt;
'''Unit:''' It is whispered that hungry ghosts rule this forest, and kill everyone who dares to enter.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' I will lead my men, and such villagers as can keep up with us, north to slay this Mordak! What will you do?&lt;br /&gt;
&lt;br /&gt;
'''Nil-Galion:''' You there! Halt and explain yourself.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' We're chasing after some men who kidnapped my brother!&lt;br /&gt;
&lt;br /&gt;
'''Nil-Galion:''' Those men told me their prisoner had attempted to murder their master, and wArvithd that evil men would follow him. Advance no further, or you will die.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' So much for those ghost stories. Mere elves will not stop me from freeing my brother!&lt;br /&gt;
&lt;br /&gt;
'''Unit:''' I am glad at least that we will not have to face ghosts. But those elves will have us at a disadvantage; our horses will not maneuver well in the trees.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' Bah, just stay on the paths; our spearmen and bowmen can fight in the deeper woods. We have faced and won through greater perils than those amateurs can offer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Move to the North ===&lt;br /&gt;
'''Unit:''' I see them! There they are!&lt;br /&gt;
&lt;br /&gt;
'''Muff Toras:''' Curses! If they had been an hour slower our master's reinforcements would already be here to meet us.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Turn 12 ===&lt;br /&gt;
'''Arvith:''' Come on, men, let's catch those kidnappers!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Elf Last Breath ===&lt;br /&gt;
'''Nil-Galion:''' Foolish human, you have killed me but you will not catch the undead in time. I have fulfilled my contract, and will be reanimated soon to become a lord of their armies.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' Follow their back trail!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Undead Last Breath ===&lt;br /&gt;
'''Muff Toras:''' Hah! You have captured me, but it will avail you nothing. I sent your precious brother the mage north with half my men a day since; he will be safely locked away in our master's dungeons by now.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' My blade is at your throat. Give us the way to my brother now, or I will spill your wretched blood on the ground.&lt;br /&gt;
&lt;br /&gt;
'''Muff Toras:''' Three days ride to the northeast, in a deserted castle. The passwords to the guards are --- and ---.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' Bind him and take him with us. If he has played us false, he will die.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Time Over ===&lt;br /&gt;
'''Muff Toras:''' My reinforcements are here!&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' He escaped us...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Victory: Easy ===&lt;br /&gt;
'''Brena:''' Greetings. I am Brena, a knight errant. I saw you pursuing and fighting the foul undead. Are there more of them to be destroyed?&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' Aye. We think there's a nest of them north-east of here. They've captured my brother.&lt;br /&gt;
&lt;br /&gt;
'''Brena:''' I bear a great hatred towards their kind. I will follow and fight them with you, if you permit.&lt;br /&gt;
&lt;br /&gt;
'''Unit:''' He would only slow us down!&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' It is my place to decide this.&lt;br /&gt;
&lt;br /&gt;
''Option 1''&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' All right, come along with us.&lt;br /&gt;
&lt;br /&gt;
'''Brena:''' Thank you.  My comrades and I will help you on your noble quest.&lt;br /&gt;
&lt;br /&gt;
''Option 2''&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' I am sorry.  We have not the time to spare.&lt;br /&gt;
&lt;br /&gt;
'''Brena:''' Take this, then, for I see that you are on a quest. My comrades will help you whenever you call for them.&lt;br /&gt;
&lt;br /&gt;
== Scenario 3: Guarded Castle ==&lt;br /&gt;
&lt;br /&gt;
=== Introductory Dialogue ===&lt;br /&gt;
'''Narrator:''' Arvith's men arrived at the castle and were immediately challenged by some guards.&lt;br /&gt;
&lt;br /&gt;
'''Guard Leader:''' Halt! Friend or foe? Give the password.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' The password is ----.&lt;br /&gt;
&lt;br /&gt;
'''Guard Leader:''' Pass friend.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Orcs Sighted ===&lt;br /&gt;
&lt;br /&gt;
'''Knago-Brek:''' Haha! We not kill people for long time. Weapon wants blood. We now kill humans!!&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' My sword-arm has a say in who will do the dying. Come on, men, let's kill some orcs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Second Set of Guards (Turn 6) ===&lt;br /&gt;
&lt;br /&gt;
'''Guard Leader:''' Are you our relief arriving? Does this mean we get to leave here now?&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' Um, yes. Fine. You can go.&lt;br /&gt;
&lt;br /&gt;
'''Guard Leader:''' Um, you're supposed to give the password.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' Oh, of course. I had nearly forgotten.&lt;br /&gt;
&lt;br /&gt;
'''Guard Leader:''' Thanks! Irritating little formality, isn't it?&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' I think I should better support my men at the front to make sure we can free my brother.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Undead Last Breath ===&lt;br /&gt;
'''Rotharik:''' Nooo! This is the end...&lt;br /&gt;
&lt;br /&gt;
'''Unit:''' There's a key in his robes.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' That may well be the key to the cell they're holding Baran in! I will take it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Baran's Cell ===&lt;br /&gt;
'''Unit:''' I found Baran. He is in this cell.&lt;br /&gt;
&lt;br /&gt;
IF Arvith&lt;br /&gt;
&lt;br /&gt;
'''Baran:''' Good to see you, Arvith. Now can you get me out of this dungeon, please?&lt;br /&gt;
&lt;br /&gt;
IF ANOTHER UNIT&lt;br /&gt;
&lt;br /&gt;
'''Baran:''' You must be one of Arvith's men. Please help me get out of this dungeon.&lt;br /&gt;
&lt;br /&gt;
THEN&lt;br /&gt;
&lt;br /&gt;
IF PLAYER DOES NOT HAVE KEY&lt;br /&gt;
&lt;br /&gt;
'''Baran:''' The accursed dark sorcerer Rotharik has imprisoned me behind this magically enhanced iron gate. It can only be opened with the correct key. You must get it from him to free me.&lt;br /&gt;
&lt;br /&gt;
IF PLAYER HAS KEY&lt;br /&gt;
&lt;br /&gt;
'''Baran:''' Thank you for saving me. I had almost given up hope you would free me.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' Oh it was nothing, a few elves, one or two dark sorcerers, a bunch of orcs and some undead. Really just a day's work for us mercenaries.&lt;br /&gt;
&lt;br /&gt;
'''Baran:''' Thank you for coming to my aid. Let us return to the village.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Time Over ===&lt;br /&gt;
'''Rotharik:''' You are too late! Your brother is already dead! Muhahahaha...&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' Argh!!!&lt;br /&gt;
&lt;br /&gt;
== Scenario 4: Return to the Village ==&lt;br /&gt;
&lt;br /&gt;
=== Introductory Dialogue ===&lt;br /&gt;
'''Arvith:''' There. Your village is just across those hills, and already I see men coming to greet us!&lt;br /&gt;
&lt;br /&gt;
'''Baran:''' No, they are fleeing from something. We must find out what is happening over there!&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' Men! Ready your weapons!&lt;br /&gt;
&lt;br /&gt;
'''Baran:''' We should go there and talk to Counselor Hoban. Maybe he knows what is going on here.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sighted by Councillor Hoban ===&lt;br /&gt;
'''Councillor Hoban:''' I am glad to see you returned.&lt;br /&gt;
&lt;br /&gt;
'''Baran:''' No gladder than I am to be here. But what has happened to Maghre?&lt;br /&gt;
&lt;br /&gt;
'''Councillor Hoban:''' Soon after you departed we were beset by orcs. With half the men of Maghre gone, we could not stop them.&lt;br /&gt;
&lt;br /&gt;
'''Councillor Hoban:''' The orcish warlord aims to enslave us. We will not be able to hold out for much longer.&lt;br /&gt;
&lt;br /&gt;
'''Councillor Hoban:''' Have a care, his men are fell fighters and have killed many. Very few remain who can bear arms, but I will send them to aid you in battle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Enemies Defeated ===&lt;br /&gt;
'''Arvith:''' Finally the warlord is killed. Now you can go back to Maghre.&lt;br /&gt;
&lt;br /&gt;
'''Baran:''' So much has been destroyed. It will be difficult to repair all that the orcs and undead have wrecked. And they could come again.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' I must go back to earning my living. But you have my word, little brother; if you are beset again, I will come.&lt;br /&gt;
&lt;br /&gt;
=== Baran's Last Breath ===&lt;br /&gt;
'''Baran:''' It is over, I am vanquished.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Time Over===&lt;br /&gt;
'''Arvith:''' I don't think we can rescue anyone from these villages. It is too late.&lt;br /&gt;
&lt;br /&gt;
'''Baran:''' I was too weak to protect these people. Oh why did this happen to me?!?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Scenario 5: Epilogue==&lt;br /&gt;
===Story===&lt;br /&gt;
It took years to rebuild the village and restore the surrounding farms. The people of Maghre had to work very hard, but felt better knowing Arvith's men would be their firm allies in troubled times.&lt;br /&gt;
&lt;br /&gt;
Arvith and his men left the village assured that it would be well guided by Baran. On their journeys they faced many challenges and battles. Some tales even mention Arvith's name together with that of the famous elvish lord Kalenz, but this is a different story...&lt;br /&gt;
&lt;br /&gt;
==TB's Specified Unit Names==&lt;br /&gt;
&lt;br /&gt;
===Humans===&lt;br /&gt;
*[[CharactersStorys#Arvith | Arvith]]&lt;br /&gt;
*[[CharactersStorys#Baran | Baran]]&lt;br /&gt;
*Alwyn&lt;br /&gt;
*Brent&lt;br /&gt;
*[[CharactersStorys#Brena | Brena]]&lt;br /&gt;
*Cadell&lt;br /&gt;
*Dannen&lt;br /&gt;
*Efran&lt;br /&gt;
*Fargus&lt;br /&gt;
*Erik&lt;br /&gt;
*Heine&lt;br /&gt;
*Magnus&lt;br /&gt;
*Councillor Hoban&lt;br /&gt;
&lt;br /&gt;
=== Elves ===&lt;br /&gt;
*[[CharactersStorys#Nil-Galion | Nil-Galion]]&lt;br /&gt;
&lt;br /&gt;
===Undead===&lt;br /&gt;
=====Human=====&lt;br /&gt;
*[[CharactersStorys#Mordak | Mordak]]&lt;br /&gt;
*[[CharactersStorys#Muff_Toras | Muff Toras]]&lt;br /&gt;
*[[CharactersStorys#Rotharik | Rotharik]]&lt;br /&gt;
&lt;br /&gt;
===Orcs===&lt;br /&gt;
*Knago-Brek&lt;br /&gt;
*[[CharactersStorys#Tairach | Tairach]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Create|*]]&lt;br /&gt;
[[Category:Writing|*]]&lt;/div&gt;</summary>
		<author><name>Octalot</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=CampaignDialogue:TB&amp;diff=71585</id>
		<title>CampaignDialogue:TB</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=CampaignDialogue:TB&amp;diff=71585"/>
		<updated>2023-08-24T11:39:53Z</updated>

		<summary type="html">&lt;p&gt;Octalot: /* Story */ Revised text from 1.17.20, removing the amulets.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;float:right&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
__TOC__&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is a transcription of all dialogue from [[A Tale of Two Brothers]]. It is meant as a resource for Wesnoth writers. If you don't want spoilers, leave this page now.&lt;br /&gt;
&lt;br /&gt;
=== Possible Timeframe ===&lt;br /&gt;
This campaign, as originally written, had no definite time or place. There was a vague reference to &amp;quot;the eastern reaches of the kingdom of Wesnoth&amp;quot;.  In a later revision the epilog hint that Arvith may have traveled with the elf-lord Kalenz, but this is not much of a constraint as Kalenz was around in 1YW and at least until the beginning of HttT in 517 YW.&lt;br /&gt;
    &lt;br /&gt;
Maghre has to be within reach of the orcs, but in a time and place where there haven't been orc raids for generations. This limits us to *western* Wesnoth, orc raids having been a chronic problem in the northeast even during the Kingdom's strongest periods. The logical time would be shortly after the death of Haldric IV in 350, the beginning of the First Dark Age.  It's arbitrarily set at 353; Kalenz began his wanderings ten years later, so the timing for Arvith to meet him later in life isn't bad.&lt;br /&gt;
&lt;br /&gt;
Placing the campaign is a little trickier.  Our main textual clue is that there is a dense wood, said by legend to be haunted, a few days' ride north.  Later, the boss's keep is said to be still further north.  Neither of these directions has plot importance, but they do suggest a locale for Maghre - near the Gray Woods.  The battle maps exclude it from being in a featureless plain, though; there are hills to the south and west.&lt;br /&gt;
&lt;br /&gt;
== Death Dialogue ==&lt;br /&gt;
=== Mordak ===&lt;br /&gt;
'''Mordak:''' Argh&lt;br /&gt;
&lt;br /&gt;
=== Arvith ===&lt;br /&gt;
'''Arvith:''' All is lost now that I am dead...&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' Everything is lost now that I am dead...&lt;br /&gt;
&lt;br /&gt;
== Scenario 1: Rooting Out A Mage ==&lt;br /&gt;
=== Story ===&lt;br /&gt;
Translation hints: The first paragraph is shown with the journey map as a background, showing the village in the foothills along the route between Aldril and Dan’Tonk. I'm assuming the beacons either use smoke signals or basic fire signals, with a few agreed ones to request goods or indicate that surplus is for sale.&lt;br /&gt;
&lt;br /&gt;
The remote freehold of Maghre in the western reaches of the Kingdom of Wesnoth was once a peaceful place, its inhabitants largely unaware of the comings and goings of the wider world. Wars and the rumor of wars touched them not. Even merchants were rarely seen, although caravans between Aldril and Dan’Tonk might send a wagon when called by the beacon tower.&lt;br /&gt;
&lt;br /&gt;
Then came the day that a dark mage settled in the region and began seeking sacrifices for his summonings.&lt;br /&gt;
&lt;br /&gt;
Skeletons and zombies killed cattle and fired fields. 'Fear and obey Mordak the Mage!' they cried in fell voices as they did their foul deeds. People vanished from isolated farmsteads. Men and women began to fear the night, and their children even the bright day. But the nearest lord was more than a day’s ride distant, and messengers sent to seek his help did not return.&lt;br /&gt;
&lt;br /&gt;
There was a man named Baran who had shown talent as a mage when he was young, gone to the great Academy on the Isle of Alduin, and returned to work his magic in the land where he was born. The people looked to him for help and leadership. He found weapons half-forgotten from the times of their sires and grandsires hanging in many houses, and bade the villagers to take them down and clean and oil them. He set the smiths of Maghre to making spearheads and ax-blades for the rest.&lt;br /&gt;
&lt;br /&gt;
Now Baran had a brother named Arvith who had also left Maghre to seek his fortune, and had become the leader of a small band of horsemen who hired out as guards to merchant caravans. Fortunate it was for all that, in better times, the brothers had talked of using trade beacons for other signals when in dire need. Baran sent out that call.&lt;br /&gt;
&lt;br /&gt;
12 V, 363 YW&lt;br /&gt;
Excerpt from the journal of Baran of Maghre&lt;br /&gt;
&lt;br /&gt;
If I could but face this ‘Mordak’! I think my magic might prove stronger than his. But he bides in the hills, well-guarded by his servants, and I muster frightened peasants to fight his minions with blades and sticks.&lt;br /&gt;
&lt;br /&gt;
I need my brother; he always had a better head for battle than I. Yet we have not spoken since that evil day at Toen Caric. If he will not come for me, perhaps he will return to aid our village in its hour of desperate need.&lt;br /&gt;
&lt;br /&gt;
Heeding the call, Arvith gathered such men as he could and hurried to Maghre to help Baran.&lt;br /&gt;
&lt;br /&gt;
=== Introductory Dialogue ===&lt;br /&gt;
'''Arvith:''' Greetings, my brother! How may my men and I be of aid?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
'''Baran:''' A dark mage has come upon us; his creatures call him Mordak. They have been terrorizing outlying farms, and we fear they may soon attack the village itself! The villagers of Maghre have taken up weapons but they are not trained fighters; but we need your men, and you to lead them.&lt;br /&gt;
&lt;br /&gt;
'''Baran:''' I can feel Mordak's foul touch on the hidden currents of the earth and air. He is somewhere due north of here, I would say not more than two days' ride.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' I will lead my men, and such villagers as can keep up with us, north to slay this Mordak! What will you do?&lt;br /&gt;
&lt;br /&gt;
'''Baran:''' You shall be the right hand, I the left. I will go stealthily with a handful of our best scouts and woodsmen. While you demonstrate against him and kill his creatures, I will try to defeat Mordak himself with magic at an unguarded moment. Together we may accomplish what either alone may not.&lt;br /&gt;
&lt;br /&gt;
=== Turn 6 ===&lt;br /&gt;
'''Arvith:''' Baran should be in position by now. Press them, distract the adept so Baran can spring his trap!&lt;br /&gt;
&lt;br /&gt;
=== Turn 10 ===&lt;br /&gt;
'''Arvith:''' Baran has not made his attack! I begin to fear for him... and it means we must deal with this Mordak ourselves!&lt;br /&gt;
&lt;br /&gt;
=== Undead Leader: Last Breath ===&lt;br /&gt;
'''Mordak:''' Argh.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' Good work, men! But what has become of my brother?&lt;br /&gt;
&lt;br /&gt;
'''Mordak:''' Worried about him, are you? E-he-he..hergh...gaargh...&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' There's nothing more to be had from this one; we will have to search for Baran ourselves!&lt;br /&gt;
&lt;br /&gt;
'''Unit:''' Sir, our scouts report that Baran was seen captured and carried away further north!&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' That they should dare this! We will give chase at once.&lt;br /&gt;
&lt;br /&gt;
=== Time Over ===&lt;br /&gt;
'''Mordak:''' Your brother's plan to ambush me has failed.  He is our prisoner now.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' My brother, kidnapped? I have failed you, Baran! And even now Mordak's forces descend upon the village!&lt;br /&gt;
&lt;br /&gt;
=== First Attack ===&lt;br /&gt;
'''Arvith:''' I hear these creatures are nigh-immune to our weapons, let us see!&lt;br /&gt;
&lt;br /&gt;
=== Player Kills First Enemy ===&lt;br /&gt;
'''Unit:''' That was not so hard!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Scenario 2: The Chase ==&lt;br /&gt;
=== Story ===&lt;br /&gt;
The pursuit had already run for several days when the pursuers came to the bounds of the huge forest known as the Gray Woods. Ancient tales wArvithd of lost souls haunting the wood, hunting and killing anyone brave enough to enter it.&lt;br /&gt;
&lt;br /&gt;
Heedless of those rumors, Arvith followed them. His only worry was that his horsemen would be at disadvantage if attacked in the forest.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Introductory Dialogue ===&lt;br /&gt;
'''Narrator:''' Sounds of a scuffle were heard from the forest.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' Come on, men. A stroll through such lovely green woods, what could be finer?&lt;br /&gt;
&lt;br /&gt;
'''Unit:''' It is whispered that hungry ghosts rule this forest, and kill everyone who dares to enter.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' I will lead my men, and such villagers as can keep up with us, north to slay this Mordak! What will you do?&lt;br /&gt;
&lt;br /&gt;
'''Nil-Galion:''' You there! Halt and explain yourself.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' We're chasing after some men who kidnapped my brother!&lt;br /&gt;
&lt;br /&gt;
'''Nil-Galion:''' Those men told me their prisoner had attempted to murder their master, and wArvithd that evil men would follow him. Advance no further, or you will die.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' So much for those ghost stories. Mere elves will not stop me from freeing my brother!&lt;br /&gt;
&lt;br /&gt;
'''Unit:''' I am glad at least that we will not have to face ghosts. But those elves will have us at a disadvantage; our horses will not maneuver well in the trees.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' Bah, just stay on the paths; our spearmen and bowmen can fight in the deeper woods. We have faced and won through greater perils than those amateurs can offer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Move to the North ===&lt;br /&gt;
'''Unit:''' I see them! There they are!&lt;br /&gt;
&lt;br /&gt;
'''Muff Toras:''' Curses! If they had been an hour slower our master's reinforcements would already be here to meet us.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Turn 12 ===&lt;br /&gt;
'''Arvith:''' Come on, men, let's catch those kidnappers!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Elf Last Breath ===&lt;br /&gt;
'''Nil-Galion:''' Foolish human, you have killed me but you will not catch the undead in time. I have fulfilled my contract, and will be reanimated soon to become a lord of their armies.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' Follow their back trail!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Undead Last Breath ===&lt;br /&gt;
'''Muff Toras:''' Hah! You have captured me, but it will avail you nothing. I sent your precious brother the mage north with half my men a day since; he will be safely locked away in our master's dungeons by now.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' My blade is at your throat. Give us the way to my brother now, or I will spill your wretched blood on the ground.&lt;br /&gt;
&lt;br /&gt;
'''Muff Toras:''' Three days ride to the northeast, in a deserted castle. The passwords to the guards are --- and ---.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' Bind him and take him with us. If he has played us false, he will die.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Time Over ===&lt;br /&gt;
'''Muff Toras:''' My reinforcements are here!&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' He escaped us...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Victory: Easy ===&lt;br /&gt;
'''Brena:''' Greetings. I am Brena, a knight errant. I saw you pursuing and fighting the foul undead. Are there more of them to be destroyed?&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' Aye. We think there's a nest of them north-east of here. They've captured my brother.&lt;br /&gt;
&lt;br /&gt;
'''Brena:''' I bear a great hatred towards their kind. I will follow and fight them with you, if you permit.&lt;br /&gt;
&lt;br /&gt;
'''Unit:''' He would only slow us down!&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' It is my place to decide this.&lt;br /&gt;
&lt;br /&gt;
''Option 1''&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' All right, come along with us.&lt;br /&gt;
&lt;br /&gt;
'''Brena:''' Thank you.  My comrades and I will help you on your noble quest.&lt;br /&gt;
&lt;br /&gt;
''Option 2''&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' I am sorry.  We have not the time to spare.&lt;br /&gt;
&lt;br /&gt;
'''Brena:''' Take this, then, for I see that you are on a quest. My comrades will help you whenever you call for them.&lt;br /&gt;
&lt;br /&gt;
== Scenario 3: Guarded Castle ==&lt;br /&gt;
&lt;br /&gt;
=== Introductory Dialogue ===&lt;br /&gt;
'''Narrator:''' Arvith's men arrived at the castle and were immediately challenged by some guards.&lt;br /&gt;
&lt;br /&gt;
'''Guard Leader:''' Halt! Friend or foe? Give the password.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' The password is ----.&lt;br /&gt;
&lt;br /&gt;
'''Guard Leader:''' Pass friend.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Orcs Sighted ===&lt;br /&gt;
&lt;br /&gt;
'''Knago-Brek:''' Haha! We not kill people for long time. Weapon wants blood. We now kill humans!!&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' My sword-arm has a say in who will do the dying. Come on, men, let's kill some orcs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Second Set of Guards (Turn 6) ===&lt;br /&gt;
&lt;br /&gt;
'''Guard Leader:''' Are you our relief arriving? Does this mean we get to leave here now?&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' Um, yes. Fine. You can go.&lt;br /&gt;
&lt;br /&gt;
'''Guard Leader:''' Um, you're supposed to give the password.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' Oh, of course. I had nearly forgotten.&lt;br /&gt;
&lt;br /&gt;
'''Guard Leader:''' Thanks! Irritating little formality, isn't it?&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' I think I should better support my men at the front to make sure we can free my brother.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Undead Last Breath ===&lt;br /&gt;
'''Rotharik:''' Nooo! This is the end...&lt;br /&gt;
&lt;br /&gt;
'''Unit:''' There's a key in his robes.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' That may well be the key to the cell they're holding Baran in! I will take it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Baran's Cell ===&lt;br /&gt;
'''Unit:''' I found Baran. He is in this cell.&lt;br /&gt;
&lt;br /&gt;
IF Arvith&lt;br /&gt;
&lt;br /&gt;
'''Baran:''' Good to see you, Arvith. Now can you get me out of this dungeon, please?&lt;br /&gt;
&lt;br /&gt;
IF ANOTHER UNIT&lt;br /&gt;
&lt;br /&gt;
'''Baran:''' You must be one of Arvith's men. Please help me get out of this dungeon.&lt;br /&gt;
&lt;br /&gt;
THEN&lt;br /&gt;
&lt;br /&gt;
IF PLAYER DOES NOT HAVE KEY&lt;br /&gt;
&lt;br /&gt;
'''Baran:''' The accursed dark sorcerer Rotharik has imprisoned me behind this magically enhanced iron gate. It can only be opened with the correct key. You must get it from him to free me.&lt;br /&gt;
&lt;br /&gt;
IF PLAYER HAS KEY&lt;br /&gt;
&lt;br /&gt;
'''Baran:''' Thank you for saving me. I had almost given up hope you would free me.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' Oh it was nothing, a few elves, one or two dark sorcerers, a bunch of orcs and some undead. Really just a day's work for us mercenaries.&lt;br /&gt;
&lt;br /&gt;
'''Baran:''' Thank you for coming to my aid. Let us return to the village.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Time Over ===&lt;br /&gt;
'''Rotharik:''' You are too late! Your brother is already dead! Muhahahaha...&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' Argh!!!&lt;br /&gt;
&lt;br /&gt;
== Scenario 4: Return to the Village ==&lt;br /&gt;
&lt;br /&gt;
=== Introductory Dialogue ===&lt;br /&gt;
'''Arvith:''' There. Your village is just across those hills, and already I see men coming to greet us!&lt;br /&gt;
&lt;br /&gt;
'''Baran:''' No, they are fleeing from something. We must find out what is happening over there!&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' Men! Ready your weapons!&lt;br /&gt;
&lt;br /&gt;
'''Baran:''' We should go there and talk to Counselor Hoban. Maybe he knows what is going on here.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Sighted by Councillor Hoban ===&lt;br /&gt;
'''Councillor Hoban:''' I am glad to see you returned.&lt;br /&gt;
&lt;br /&gt;
'''Baran:''' No gladder than I am to be here. But what has happened to Maghre?&lt;br /&gt;
&lt;br /&gt;
'''Councillor Hoban:''' Soon after you departed we were beset by orcs. With half the men of Maghre gone, we could not stop them.&lt;br /&gt;
&lt;br /&gt;
'''Councillor Hoban:''' The orcish warlord aims to enslave us. We will not be able to hold out for much longer.&lt;br /&gt;
&lt;br /&gt;
'''Councillor Hoban:''' Have a care, his men are fell fighters and have killed many. Very few remain who can bear arms, but I will send them to aid you in battle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Enemies Defeated ===&lt;br /&gt;
'''Arvith:''' Finally the warlord is killed. Now you can go back to Maghre.&lt;br /&gt;
&lt;br /&gt;
'''Baran:''' So much has been destroyed. It will be difficult to repair all that the orcs and undead have wrecked. And they could come again.&lt;br /&gt;
&lt;br /&gt;
'''Arvith:''' I must go back to earning my living. But we have our amulets, little brother. If you are beset again, I will come.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Baran's Last Breath ===&lt;br /&gt;
'''Baran:''' It is over, I am vanquished.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Time Over===&lt;br /&gt;
'''Arvith:''' I don't think we can rescue anyone from these villages. It is too late.&lt;br /&gt;
&lt;br /&gt;
'''Baran:''' I was too weak to protect these people. Oh why did this happen to me?!?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Scenario 5: Epilogue==&lt;br /&gt;
===Story===&lt;br /&gt;
It took years to rebuild the village and restore the surrounding farms. The people of Maghre had to work very hard, but felt better knowing Arvith's men would be their firm allies in troubled times.&lt;br /&gt;
&lt;br /&gt;
Arvith and his men left the village assured that it would be well guided by Baran. On their journeys they faced many challenges and battles. Some tales even mention Arvith's name together with that of the famous elvish lord Kalenz, but this is a different story...&lt;br /&gt;
&lt;br /&gt;
==TB's Specified Unit Names==&lt;br /&gt;
&lt;br /&gt;
===Humans===&lt;br /&gt;
*[[CharactersStorys#Arvith | Arvith]]&lt;br /&gt;
*[[CharactersStorys#Baran | Baran]]&lt;br /&gt;
*Alwyn&lt;br /&gt;
*Brent&lt;br /&gt;
*[[CharactersStorys#Brena | Brena]]&lt;br /&gt;
*Cadell&lt;br /&gt;
*Dannen&lt;br /&gt;
*Efran&lt;br /&gt;
*Fargus&lt;br /&gt;
*Erik&lt;br /&gt;
*Heine&lt;br /&gt;
*Magnus&lt;br /&gt;
*Councillor Hoban&lt;br /&gt;
&lt;br /&gt;
=== Elves ===&lt;br /&gt;
*[[CharactersStorys#Nil-Galion | Nil-Galion]]&lt;br /&gt;
&lt;br /&gt;
===Undead===&lt;br /&gt;
=====Human=====&lt;br /&gt;
*[[CharactersStorys#Mordak | Mordak]]&lt;br /&gt;
*[[CharactersStorys#Muff_Toras | Muff Toras]]&lt;br /&gt;
*[[CharactersStorys#Rotharik | Rotharik]]&lt;br /&gt;
&lt;br /&gt;
===Orcs===&lt;br /&gt;
*Knago-Brek&lt;br /&gt;
*[[CharactersStorys#Tairach | Tairach]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Create|*]]&lt;br /&gt;
[[Category:Writing|*]]&lt;/div&gt;</summary>
		<author><name>Octalot</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=EventWML&amp;diff=71572</id>
		<title>EventWML</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=EventWML&amp;diff=71572"/>
		<updated>2023-08-11T06:58:29Z</updated>

		<summary type="html">&lt;p&gt;Octalot: /* Optional Keys and Tags */ Add the priority attribute&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WML Tags}}&lt;br /&gt;
== The [event] Tag ==&lt;br /&gt;
&lt;br /&gt;
This tag is a subtag of the [scenario], [unit_type] and [era] tags which is used to describe a set of [[ActionWML|actions]] which trigger at a certain point in a scenario. When used in a [scenario] tag (also includes [multiplayer] and [test]), the event only occurs in that scenario. When used in a [unit_type] tag, the event will occur in all scenarios in which a unit of that type appears in (only after such a unit appears during the scenario, however). When used in an [era], the event will occur in any scenario which is played using that era.&lt;br /&gt;
&lt;br /&gt;
This tag has keys and child tags that control when and if the event actions will be triggered. Most important of these is the '''name''' key. Without it, no error will be raised but the event will never fire. Therefore, from a practical standpoint, it can be considered mandatory. All of the others can be used or not and the event actions will fire either way.&lt;br /&gt;
&lt;br /&gt;
'''Lexicon side note:''' ''The word &amp;quot;event&amp;quot; in the [event] tag itself may be considered an abbreviation of the term &amp;quot;event handler&amp;quot; because it is technically not a game &amp;quot;event&amp;quot; but an event '''handler''' for the game events fired with the given 'name'. However, this distinction is usually unimportant in most discussions and the event handlers are therefore simply referred to as &amp;quot;events&amp;quot; in this documentation.''&lt;br /&gt;
&lt;br /&gt;
=== The 'name' Key (Mandatory) ===&lt;br /&gt;
&lt;br /&gt;
Usage:&lt;br /&gt;
&amp;lt;syntaxhighlight lang='wml'&amp;gt;&lt;br /&gt;
name=&amp;lt;value&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This key defines which game event or trigger your [event] tag will be handling. This 'name' key should not be confused with a descriptive comment; it is rather a precise value which must match the predefined game event's name to be valid.&lt;br /&gt;
&lt;br /&gt;
The '''name''' key can accept a list of comma separated values describing when the event will be triggered.*  These values may be either predefined event types or  custom event names not matching any predefined type.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang='wml'&amp;gt;&lt;br /&gt;
name=attacker misses,defender misses&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''* Note that unless you use [[#first_time_only|first_time_only=no]], the event will fire only once, '''not''' once for each listed type.''&lt;br /&gt;
&lt;br /&gt;
All predefined event types are listed below, along with a description of when this value will cause the event to be triggered, in the [[#Predefined_Events_Without_Filters|Predefined Events Without Filters]] and [[#Predefined_Events_With_Filters|Predefined Events With Filters]] sections. Any value ''not'' listed there is a custom event name which can be triggered only by a '''[fire_event]''' tag somewhere else. &lt;br /&gt;
&lt;br /&gt;
Spaces in event names can be interchanged with ''underscores'' (for example, '''name=new turn''' and '''name=new_turn''' are equivalent).&lt;br /&gt;
&lt;br /&gt;
==== Variables in the name ====&lt;br /&gt;
&lt;br /&gt;
If the name contains variables, they will be substituted each time the event is triggered. For example, '''name=turn $disaster_turn''' will only trigger if the turn number is currently equal to whatever number is stored in the variable '''$disaster_turn'''; updating the variable will adjust the turn that the event triggers on. However, if the variable contents contains a comma, it won't be parsed after substitution. Since an event name can't contain a comma, this means the event will never trigger.&lt;br /&gt;
&lt;br /&gt;
{{DevFeature1.17|6}}&lt;br /&gt;
&lt;br /&gt;
Commas resulting from variable substitution are now parsed. If you write '''name=$important_event''' and the variable '''$important_event''' contains the text &amp;quot;capture,die&amp;quot;, the event will trigger on either a death or a village capture.&lt;br /&gt;
&lt;br /&gt;
==== Custom events ====&lt;br /&gt;
&lt;br /&gt;
An event with a custom name may be invoked using the [[InternalActionsWML#.5Bfire_event.5D|[fire_event]]] tag.  Normally you'll use such custom events as named subroutines to be called by events with predefined types.  One common case of this, for example, is that more than one '''sighted''' events might fire the same custom event that changes the scenario objectives. Also, custom events come very handy in [[Wml_optimisation]].&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang='wml'&amp;gt;&lt;br /&gt;
# The following is the definition of a custom event &amp;quot;unit recruited&amp;quot;&lt;br /&gt;
[event]&lt;br /&gt;
    name=unit_recruited&lt;br /&gt;
    first_time_only=no&lt;br /&gt;
    [message]&lt;br /&gt;
        speaker=unit&lt;br /&gt;
        message=_ &amp;quot;Reporting for duty!&amp;quot;&lt;br /&gt;
    [/message]&lt;br /&gt;
[/event]&lt;br /&gt;
&lt;br /&gt;
# This is a standard recruit event that triggers whenever a unit is recruited by side 1&lt;br /&gt;
[event]&lt;br /&gt;
    name=recruit&lt;br /&gt;
    first_time_only=no&lt;br /&gt;
    [filter]&lt;br /&gt;
    [/filter]&lt;br /&gt;
    [filter_second]&lt;br /&gt;
        side=1&lt;br /&gt;
    [/filter_second]&lt;br /&gt;
&lt;br /&gt;
    # And now a fire_event tag is used to trigger the previously defined event. To use&lt;br /&gt;
    # &amp;quot;speaker=unit&amp;quot; in the fired event, it's also necessary to specify the [primary_unit].&lt;br /&gt;
    [fire_event]&lt;br /&gt;
        name=unit_recruited&lt;br /&gt;
        [primary_unit]&lt;br /&gt;
            id=$unit.id&lt;br /&gt;
        [/primary_unit]&lt;br /&gt;
    [/fire_event]&lt;br /&gt;
 &lt;br /&gt;
    # As a result, every time side 1 recruits a unit, this unit says &amp;quot;Reporting for duty!&amp;quot;&lt;br /&gt;
[/event]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can have more code after the '''[fire_event]''', which will run after the fired event has happened.&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang='wml'&amp;gt;&lt;br /&gt;
# This is a standard recall event that triggers whenever a unit is recalled by side 1&lt;br /&gt;
[event]&lt;br /&gt;
    name=recall&lt;br /&gt;
    first_time_only=no&lt;br /&gt;
    [filter]&lt;br /&gt;
    [/filter]&lt;br /&gt;
    [filter_second]&lt;br /&gt;
        side=1&lt;br /&gt;
    [/filter_second]&lt;br /&gt;
&lt;br /&gt;
    # Fire the custom event, exactly as the in recruit event&lt;br /&gt;
    [fire_event]&lt;br /&gt;
        name=unit_recruited&lt;br /&gt;
        [primary_unit]&lt;br /&gt;
            id=$unit.id&lt;br /&gt;
        [/primary_unit]&lt;br /&gt;
    [/fire_event]&lt;br /&gt;
 &lt;br /&gt;
    # After that event has happened, the remaining code in this event is run&lt;br /&gt;
    [message]&lt;br /&gt;
        speaker=second_unit&lt;br /&gt;
        message=_ &amp;quot;Glad to have you back&amp;quot;&lt;br /&gt;
    [/message]&lt;br /&gt;
    # As a result, every time side 1 recalls a unit, the recalled unit says&lt;br /&gt;
    # &amp;quot;Reporting for duty!&amp;quot;, and the leader replies &amp;quot;Glad to have you back&amp;quot;&lt;br /&gt;
[/event]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Optional Keys and Tags ===&lt;br /&gt;
&lt;br /&gt;
These keys and tags are more complex ways to filter when an event should trigger:&lt;br /&gt;
&lt;br /&gt;
==== first_time_only ====&lt;br /&gt;
: Whether the event should be removed from the scenario after it is triggered. This key takes a [[ConditionalActionsWML#Boolean_Values|boolean]]; for example:&lt;br /&gt;
: ''first_time_only=yes''&lt;br /&gt;
:: Default behavior if key is omitted. The event will trigger the first time it can and never again.&lt;br /&gt;
: ''first_time_only=no''&lt;br /&gt;
:: The event will trigger every time the criteria are met instead of only the first time.&lt;br /&gt;
&lt;br /&gt;
==== id ====&lt;br /&gt;
: If an id is specified, then the event will not be added if another event with the same id already exists. An id will also allow the event to be removed, see below. Supplying a non-empty id= is mandatory in case of a [unit_type][event].&lt;br /&gt;
&lt;br /&gt;
==== remove ====&lt;br /&gt;
: Removes an event instead of adding a new one. This key takes a [[ConditionalActionsWML#Boolean_Values|boolean]]; if yes, does the same as a [[InternalActionsWML#.5Bremove_event.5D|[remove_event]]] with the same id= value, and the other attributes of this event tag are ignored.&lt;br /&gt;
&lt;br /&gt;
{{DevFeature1.13|0}} May be a comma separated list.&lt;br /&gt;
&lt;br /&gt;
{{DevFeature1.15|7}} Prints a deprecation warning recommending to use [remove_event] instead.&lt;br /&gt;
&lt;br /&gt;
==== priority ====&lt;br /&gt;
: {{DevFeature1.17|20}} If several '[event]' tags have the same name, then any with a high priority value will be triggered before events with a lower priority value. Negative numbers are also supported, to run after events without a priority (as the attribute defaults to zero). For events with equal priority, the order is determined by the order in which the events were added.&lt;br /&gt;
&lt;br /&gt;
==== [filter] ====&lt;br /&gt;
: The event will only trigger if the primary unit matches this filter.&lt;br /&gt;
:* [[StandardUnitFilter]]: selection criteria&lt;br /&gt;
&lt;br /&gt;
==== [filter_second] ====&lt;br /&gt;
: Like [filter], but for the secondary unit.&lt;br /&gt;
:* [[StandardUnitFilter]]: selection criteria&lt;br /&gt;
&lt;br /&gt;
==== [filter_attack] ====&lt;br /&gt;
: Can be used to set additional filtering criteria based on the weapon used by the primary unit. This is usable in the events ''attack'', ''attacker hits'', ''attacker misses'', ''defender hits'', ''defender misses'', ''attack end'', ''last breath'', and ''die''. For more information and filter keys, see [[FilterWML#Filtering Weapons|Filtering Weapons]]. The most commonly used keys are the following.&lt;br /&gt;
:* '''name''': the name of the weapon used.&lt;br /&gt;
:* '''range''': the range of the weapon used.&lt;br /&gt;
:* '''special_id''': filter on the attack's weapon special id.&lt;br /&gt;
:* '''special_type''': filter on the attack's weapon special type.&lt;br /&gt;
:* {{DevFeature1.17|15}} '''special_id_active''': filter on the attack's weapon special id active(encoded in [specials] or [abilities] tags).&lt;br /&gt;
:* {{DevFeature1.17|15}} '''special_type_active''': filter on the attack's weapon special type active(encoded in [specials] or [abilities] tags).&lt;br /&gt;
&lt;br /&gt;
==== [filter_second_attack] ====&lt;br /&gt;
: Like [filter_attack], but for the weapon used by the secondary unit.&lt;br /&gt;
&lt;br /&gt;
==== [filter_condition] ====&lt;br /&gt;
: This tag makes sense inside any sort of event - even those that don't have units, or custom events,... The event will only trigger if this condition evaluates to true.&lt;br /&gt;
:* [[ConditionalActionsWML#Condition_Tags|Condition Tags]]&lt;br /&gt;
: note: This tag is meant to be used when the firing of an event shall be based on variables/conditions which cannot be retrieved from the filtered units.&lt;br /&gt;
&lt;br /&gt;
==== [filter_side] ====&lt;br /&gt;
: The current side (usually the side $side_number) must match the passed [[StandardSideFilter]] for the event to fire.&lt;br /&gt;
:* SSF tags and keys as arguments as described in [[StandardSideFilter]].&lt;br /&gt;
: note: This tag makes most sense in side turn and turn refresh events. However, all wml events have a current side so one could also prevent e.g. a moveto event from firing if you put a [filter_side] tag there and the moving unit's side doesn't match.&lt;br /&gt;
&lt;br /&gt;
==== [insert_tag] ====&lt;br /&gt;
: An '''[insert_tag]''' that expands to any of the above filter tags will result in the filter being loaded from the variable each time the game checks if the event should fire. This can result in the event's filter varying from turn to turn.&lt;br /&gt;
&lt;br /&gt;
==== filter_formula ====&lt;br /&gt;
:{{DevFeature1.17|6}}&lt;br /&gt;
: Similar to [filter_condition], but the condition is expressed in [[Wesnoth Formula Language]]. The formula has access to the following keys:&lt;br /&gt;
:*Event information:&lt;br /&gt;
:**'''event''' - the event name&lt;br /&gt;
:**'''event_id''' - the event's unique ID&lt;br /&gt;
:**'''event_data''' - additional information specific to the event, such as owner_side or damage_inflicted, or anything passed in '''[fire_event][data]'''.&lt;br /&gt;
:**'''loc''', '''unit''' - primary event location and unit&lt;br /&gt;
:**'''second_loc''', '''second_unit''' - secondary event location and unit&lt;br /&gt;
:**'''weapon''', '''second_weapon''' - primary and secondary weapon&lt;br /&gt;
:*Gamestate information:&lt;br /&gt;
:**'''turn_number'''&lt;br /&gt;
:**'''time_of_day''' - the time of day ID&lt;br /&gt;
:**'''side_number''' - currently active side&lt;br /&gt;
:**'''sides''' - a list of all sides&lt;br /&gt;
:**'''units''' - a list of all units on the map&lt;br /&gt;
:**'''map''' - the entire game map as a two-dimensional array&lt;br /&gt;
&lt;br /&gt;
==== delayed_variable_substitution ====&lt;br /&gt;
: This key is only relevant inside of a [[#Delayed Variable Substitution_2|nested event]] and controls when variable substitution will occur in those special case actions.&lt;br /&gt;
&lt;br /&gt;
=== Actions triggered by [event] ===&lt;br /&gt;
&lt;br /&gt;
After the trigger conditions have been met, all [[ActionWML|action tags]] within the [event] tag are executed in the order they are written in.&lt;br /&gt;
&lt;br /&gt;
There are 3 main types of actions:&lt;br /&gt;
* direct actions ([[DirectActionsWML]]) which have a direct effect on gameplay&lt;br /&gt;
* display actions ([[InterfaceActionsWML]]) which show something to the user&lt;br /&gt;
* internal actions ([[InternalActionsWML]]) which are used by WML internally&lt;br /&gt;
&lt;br /&gt;
More details in [[ActionWML]]. Actions can also be dynamically inserted via '''[insert_tag]'''.&lt;br /&gt;
&lt;br /&gt;
Several actions use standard filters to find out which units&lt;br /&gt;
to execute the command on.  These are denoted by the phrases&lt;br /&gt;
&amp;quot;standard unit filter&amp;quot; and &amp;quot;standard location filter&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Nested Events ===&lt;br /&gt;
&lt;br /&gt;
There is one special type of action: event creation.  By placing an '''[event]''' tag inside another '''[event]''' tag, the nested event is spawned (created) when the parent (outer) event is encountered (when executing the contents of the parent event).&lt;br /&gt;
&lt;br /&gt;
([[#Nested Event Example|See Examples]])&lt;br /&gt;
&lt;br /&gt;
==== Delayed Variable Substitution ====&lt;br /&gt;
&lt;br /&gt;
Variable substitution for a nested event can happen either when it is spawned by the parent event or when it is triggered itself. This is controlled with the key '''delayed_variable_substitution''' which is used in the nested event.&lt;br /&gt;
&lt;br /&gt;
If this key is set to ''yes'', the variables in the nested event will contain values from the turn in which the ''nested'' event was triggered. ''This is the default behavior if the key is omitted.'' If set to ''no'', the variables in the nested event are set at the time the ''parent'' event is triggered.&lt;br /&gt;
&lt;br /&gt;
This behavior can be fine tuned with a special syntax when referencing variables. Instead of the normal '''$variable''' syntax, use '''$|variable''' to cause a variable to contain values relevant to the turn in which the nested event was triggered even when '''delayed_variable_substitution''' is set to ''no''. In this way you can have a mix of variables relevant to the parent and nested event trigger times.&lt;br /&gt;
&lt;br /&gt;
([[#Delayed Variable Substitution Example|See Examples]])&lt;br /&gt;
&lt;br /&gt;
== Multiplayer safety ==&lt;br /&gt;
&lt;br /&gt;
In multiplayer it is only safe to use WML that might require synchronization with other players because of input or random numbers (like [message] with input or options or [unstore_unit] where a unit might advance) in the following events. This is because in these cases WML needs data from other players to work right and/or do the same thing for all players. This data is only available after a network synchronization.&lt;br /&gt;
&lt;br /&gt;
List of synchronized events:&lt;br /&gt;
* moveto&lt;br /&gt;
* enter hex&lt;br /&gt;
* exit hex&lt;br /&gt;
* sighted&lt;br /&gt;
* last breath &lt;br /&gt;
* menu item X&lt;br /&gt;
* die&lt;br /&gt;
* capture &lt;br /&gt;
* recruit&lt;br /&gt;
* prerecruit &lt;br /&gt;
* recall &lt;br /&gt;
* prerecall &lt;br /&gt;
* advance&lt;br /&gt;
* pre advance&lt;br /&gt;
* post advance &lt;br /&gt;
* attack&lt;br /&gt;
* attack end &lt;br /&gt;
* attacker hits &lt;br /&gt;
* attacker misses &lt;br /&gt;
* defender hits&lt;br /&gt;
* defender misses &lt;br /&gt;
* start&lt;br /&gt;
* prestart (prestart are synced but [message][option] &amp;amp; [unstore_unit] advancement choices will do a random decision because UI things don't work during prestart events.)&lt;br /&gt;
* new turn &lt;br /&gt;
* side turn &lt;br /&gt;
* turn X &lt;br /&gt;
* side X turn &lt;br /&gt;
* side X turn Y &lt;br /&gt;
* turn refresh&lt;br /&gt;
* side turn end&lt;br /&gt;
* side X turn end&lt;br /&gt;
* side turn X end&lt;br /&gt;
* side X turn Y end&lt;br /&gt;
* turn end&lt;br /&gt;
* turn X end&lt;br /&gt;
* {{DevFeature1.13|0}} enemies defeated&lt;br /&gt;
* {{DevFeature1.13|0}} time over&lt;br /&gt;
* {{DevFeature1.13|10}} victory&lt;br /&gt;
* {{DevFeature1.13|10}} defeat&lt;br /&gt;
* {{DevFeature1.13|0}} scenario_end&lt;br /&gt;
The following are &amp;lt;b&amp;gt;not&amp;lt;/b&amp;gt; synced:&lt;br /&gt;
* select&lt;br /&gt;
* preload&lt;br /&gt;
* victory {{DevFeature1.13|10}} local_victory&lt;br /&gt;
* defeat {{DevFeature1.13|10}} local_defeat&lt;br /&gt;
* ai turn&lt;br /&gt;
&lt;br /&gt;
If an event is not listed here, ask someone to be sure.&lt;br /&gt;
&lt;br /&gt;
There is also the possibility of events that are normally synchronized when fired by the engine but can be non-synchronized when fired by WML tags from non-synchronized event. So when you are using them you must be extra careful. For example [unstore_unit] may trigger a unit advancement that will fire ''advance'' and ''post advance'' events.&lt;br /&gt;
&lt;br /&gt;
== A Trap for the Unwary ==&lt;br /&gt;
&lt;br /&gt;
You need to beware of using macros to generate events. If you include a macro expanding to an event definition twice, the event will be executed twice (not once) each time the trigger condition fires. Consider this code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang='wml'&amp;gt;&lt;br /&gt;
#define DOUBLE&lt;br /&gt;
    [event]&lt;br /&gt;
        name=multiply_by_2&lt;br /&gt;
        {VARIABLE_OP 2_becomes_4 multiply 2}&lt;br /&gt;
    [/event]&lt;br /&gt;
#enddef&lt;br /&gt;
&lt;br /&gt;
{DOUBLE}&lt;br /&gt;
{DOUBLE}&lt;br /&gt;
&lt;br /&gt;
{VARIABLE 2_becomes_4 2}&lt;br /&gt;
		&lt;br /&gt;
[fire_event]&lt;br /&gt;
    name=multiply_by_2&lt;br /&gt;
[/fire_event]&lt;br /&gt;
 &lt;br /&gt;
{DEBUG_MSG &amp;quot;$2_becomes_4 should be 4&amp;quot;}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After it executes, the debug message will reveal that the variable has been set to 8, not 4.&lt;br /&gt;
&lt;br /&gt;
=== Event IDs ===&lt;br /&gt;
&lt;br /&gt;
This problem can be avoided by setting an '''id''' on the event, i.e.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang='wml'&amp;gt;&lt;br /&gt;
#define DOUBLE&lt;br /&gt;
    [event]&lt;br /&gt;
        name=multiply_by_2&lt;br /&gt;
        id=doubler_event&lt;br /&gt;
        {VARIABLE_OP 2_becomes_4 multiply 2}&lt;br /&gt;
    [/event]&lt;br /&gt;
#enddef&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Events with the same ID will only be accepted once by the engine no matter how many times they are included, and will only be saved once to the scenario's savefile.  Events with an ID can also be removed by using the '''remove''' key, i.e.:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang='wml'&amp;gt;&lt;br /&gt;
[event]&lt;br /&gt;
    id=doubler_event&lt;br /&gt;
    remove=yes&lt;br /&gt;
[/event]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After that WML is encountered (at toplevel or after created from another event), the event with this ID is removed from the scenario wml, thus firing it has no effect.  After an event is removed, it can still be re-added later.&lt;br /&gt;
&lt;br /&gt;
== Predefined Events Without Filters ==&lt;br /&gt;
&lt;br /&gt;
These events do not take filter parameters (except [filter_condition] which works for all events).&lt;br /&gt;
&lt;br /&gt;
=== preload ===&lt;br /&gt;
&lt;br /&gt;
Triggers before a scenario 'prestarts' and when loading a savegame -- before anything is shown on the screen at all. Can be used to set up the [[LuaWML|Lua]] environment: loading libraries, defining helper functions, etc.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' If a game is started, saved, and then reloaded, the preload event will fire two times while playing.  However, it will only fire once when viewing the replay. If the preload event alters the gamestate the second time it fired while playing (when loading the saved game) then it can result in Out Of Sync errors.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Unlike prestart and start, the preload event '''must be able to fire more than once!''' This is because it is triggered each time a savegame is loaded in addition to the initial time when it loads before the scenario 'prestart'. This means that it is effectively ''mandatory'' to have the [[#first_time_only|first_time_only=no]] key value in a preload event.&lt;br /&gt;
&lt;br /&gt;
=== prestart ===&lt;br /&gt;
&lt;br /&gt;
Triggers before a scenario 'starts' -- before anything is shown on the screen at all. Can be used to set up things like village ownership. For things displayed on-screen such as character dialog, use '''start''' instead.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' ''This value makes the [[#first_time_only|first_time_only]] key irrelevant since, by definition, it can only fire once.''&lt;br /&gt;
&lt;br /&gt;
=== start ===&lt;br /&gt;
&lt;br /&gt;
Triggers after the map is shown but before the scenario begins -- before players can 'do' anything.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' ''This value makes the [[#first_time_only|first_time_only]] key irrelevant since, by definition, it can only fire once.''&lt;br /&gt;
&lt;br /&gt;
=== new turn ===&lt;br /&gt;
&lt;br /&gt;
Triggers at the start of every turn (not side turn). See also [[#first_time_only|first_time_only=no]]. Before any events of this type trigger, the value of the WML variable '''turn_number''' is set to the number of the turn that is beginning.&lt;br /&gt;
&lt;br /&gt;
=== turn end ===&lt;br /&gt;
&lt;br /&gt;
Triggers at the end of every turn (not side turn). See also [[#first_time_only|first_time_only=no]]. The WML variable '''side_number''' will contain the side that ended their turn.&lt;br /&gt;
&lt;br /&gt;
=== turn ''X'' end ===&lt;br /&gt;
&lt;br /&gt;
Triggers at the end of turn ''X''.&lt;br /&gt;
&lt;br /&gt;
=== side turn ===&lt;br /&gt;
&lt;br /&gt;
Triggers when a side is about to start its turn. Before events of this type trigger, the value of the WML variable '''side_number''' is set to the number of the side of the player about to take their turn. This is before any healing takes place for that side, before calculating income, and before restoring unit movement and status.&lt;br /&gt;
&lt;br /&gt;
=== ai turn ===&lt;br /&gt;
&lt;br /&gt;
Triggered just before the AI is invoked for a side. This is called after ''side turn'', and thus the WML variable '''side_number''' still holds the number of this side. Note that this event might be called several times per turn in case that fallbacks to human or droiding is involved. I.e. it happens at the middle of turn of human side 1 if the human player droids his side. It happens after the selection of ai to play the turn but before AI is told that new turn has come.&lt;br /&gt;
&lt;br /&gt;
'''Note:'''  ''This event can break replays if it is used improperly. The ai turn event does not fire during replays. The intention is only to guide the AI to make choices (movements, attacks) which are then saved to the replay.''&lt;br /&gt;
&lt;br /&gt;
=== turn refresh ===&lt;br /&gt;
&lt;br /&gt;
Like '''side turn''', triggers just before a side is taking control but '''after''' healing, calculating income, and restoring unit movement and status. WML variable '''side_number''' holds the number of this side.&lt;br /&gt;
&lt;br /&gt;
Note that the turn refresh event does occur on turn 1, even though healing, income and unit refreshing do not.&lt;br /&gt;
&lt;br /&gt;
=== turn ''X'' ===&lt;br /&gt;
&lt;br /&gt;
Triggers at the start of turn ''X''. It's the first side initialization event. &lt;br /&gt;
&lt;br /&gt;
Side initialization events go in the order of: &lt;br /&gt;
&lt;br /&gt;
# '''turn ''X''''' &lt;br /&gt;
# '''new turn''' &lt;br /&gt;
# '''side turn''' &lt;br /&gt;
# '''side ''X'' turn''' &lt;br /&gt;
# '''side turn ''X''''' &lt;br /&gt;
# '''side ''X'' turn ''Y''''' &lt;br /&gt;
# '''turn refresh''' &lt;br /&gt;
# '''side ''X'' turn refresh''' &lt;br /&gt;
# '''turn ''X'' refresh''' &lt;br /&gt;
# '''side ''X'' turn ''Y'' refresh'''&lt;br /&gt;
&lt;br /&gt;
=== side ''X'' turn ''Y'' ===&lt;br /&gt;
&lt;br /&gt;
This event triggers at the start of turn ''Y'' of side X &lt;br /&gt;
&lt;br /&gt;
=== side ''X'' turn ===&lt;br /&gt;
&lt;br /&gt;
This event triggers at the start of any turn of side X&lt;br /&gt;
&lt;br /&gt;
'''Note:''' ''Of course, [[#first_time_only|first_time_only=no]] is needed for this event to be triggered more than once.''&lt;br /&gt;
&lt;br /&gt;
=== side turn ''X'' ===&lt;br /&gt;
&lt;br /&gt;
This event triggers at the start of any side on turn X&lt;br /&gt;
&lt;br /&gt;
'''Note:''' ''Of course, [[#first_time_only|first_time_only=no]] is needed for this event to be triggered more than once.''&lt;br /&gt;
&lt;br /&gt;
=== side X turn Y refresh ===&lt;br /&gt;
&lt;br /&gt;
This event triggers at the turn refresh for side X on turn Y&lt;br /&gt;
&lt;br /&gt;
=== side ''X'' turn refresh ===&lt;br /&gt;
&lt;br /&gt;
This event triggers at the turn refresh for side X&lt;br /&gt;
&lt;br /&gt;
'''Note:''' ''Of course, [[#first_time_only|first_time_only=no]] is needed for this event to be triggered more than once.''&lt;br /&gt;
&lt;br /&gt;
=== turn ''X'' refresh ===&lt;br /&gt;
&lt;br /&gt;
This event triggers for any side at the refresh of turn X.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' ''Of course, [[#first_time_only|first_time_only=no]] is needed for this event to be triggered more than once.''&lt;br /&gt;
&lt;br /&gt;
=== side turn end ===&lt;br /&gt;
&lt;br /&gt;
Triggers after a side ends its turn. Like side turn, there are also some variations for specific combinations of side number and turn number. Here is the order in which the turn end events trigger:&lt;br /&gt;
&lt;br /&gt;
# '''side turn end''' &lt;br /&gt;
# '''side ''X'' turn end''' &lt;br /&gt;
# '''side turn ''X'' end''' &lt;br /&gt;
# '''side ''X'' turn ''Y'' end''' &lt;br /&gt;
# '''turn end''' &lt;br /&gt;
# '''turn ''X'' end''' &lt;br /&gt;
&lt;br /&gt;
=== time over ===&lt;br /&gt;
&lt;br /&gt;
Triggers on turn ''turns''. (''turns'' is specified in [scenario])&lt;br /&gt;
&lt;br /&gt;
=== enemies defeated ===&lt;br /&gt;
&lt;br /&gt;
Triggers when all sides that are not defeated are allied and if there is at least one human (or human networked) side among them. Especially this event triggers in a situaltion that would normaly cause a victory due to enemies defeated. (regardless of whether this was disabled with victory_when_enemies_defeated=no). &lt;br /&gt;
&lt;br /&gt;
=== local_victory ===&lt;br /&gt;
&lt;br /&gt;
In Wesnoth 1.12 and earlier, the event described here is '''victory''', {{DevFeature1.13|10}} in 1.14 the event described here is '''local_victory'''.&lt;br /&gt;
&lt;br /&gt;
This event will be fired at the end of a scenario, if the player's side won. If it fires as a result of an '''[endlevel]''' tag, the event is processed before the line after the '''[endlevel]]''' tag. The event is not synchronized, as in networked mp it is possible to have different results for different players.&lt;br /&gt;
&lt;br /&gt;
=== local_defeat ===&lt;br /&gt;
&lt;br /&gt;
In Wesnoth 1.12 are earlier, the event described here is '''defeat''', {{DevFeature1.13|10}} in 1.14 the event described here is '''local_defeat'''.&lt;br /&gt;
&lt;br /&gt;
Functions identically to '''local_victory''', except that the player's side lost.&lt;br /&gt;
&lt;br /&gt;
=== victory ===&lt;br /&gt;
&lt;br /&gt;
This section describes a new event Wesnoth 1.14. In 1.12 and earlier, the '''victory''' event is equivalent to 1.14's '''local_victory'''.&lt;br /&gt;
&lt;br /&gt;
This event will be fired at the end of a scenario, if the game will proceed to the next scenario. In multiplayer, this means that it will fire on all players' clients, even for players who received a '''local_defeat''', as long as the game continues to the next scenario. This event is synchronized.&lt;br /&gt;
&lt;br /&gt;
It helps debugging if the victory event allows you to safely advance to any of the possible next maps after using the &amp;quot;:next_level&amp;quot; command. Scenarios where key units are picked up before the victory, or where some action chosen earlier determines which map to advance to, make it hard to quickly test scenarios in a campaign.&lt;br /&gt;
&lt;br /&gt;
Bug [https://github.com/wesnoth/wesnoth/issues/4667 #4667]: this event is treated as unsynchronized in replays, causing OOS reports when watching the replay.&lt;br /&gt;
&lt;br /&gt;
=== defeat ===&lt;br /&gt;
&lt;br /&gt;
This section describes a new event Wesnoth 1.14. In 1.12 and earlier, the '''defeat''' event is equivalent to 1.14's '''local_defeat'''.&lt;br /&gt;
&lt;br /&gt;
This event will be fired at the end of a scenario, if the game resulted in a game-over other than victoriously reaching the end of a campaign (including single-scenario campaigns). Synchronization (including bug #4667) is the same as '''victory'''.&lt;br /&gt;
&lt;br /&gt;
=== scenario_end ===&lt;br /&gt;
&lt;br /&gt;
{{DevFeature1.13|10}} This event fires immediately after '''victory''' or '''defeat'''; it is synchronized, but is also affected by bug #4667.&lt;br /&gt;
&lt;br /&gt;
Note: in 1.13.0 - 1.13.9 this event was added as a synchronized alternative to the events that are, since 1.13.10, called local_victory or local_defeat.&lt;br /&gt;
&lt;br /&gt;
== Predefined Events With Filters ==&lt;br /&gt;
&lt;br /&gt;
Filters (except [filter_condition] which is for all sorts of events) can be applied to the following event triggers (see [[FilterWML]]; see also below). The actions specified in the event tag will be executed only if the filter returns true. &lt;br /&gt;
These event triggers are all actions by units ('''moveto''', '''attack''') or things that happen to units ('''recruit''', '''advance'''). When one of these events is triggered, the position of the active unit (referred to as the '''primary unit''') is stored in the variables '''x1''' and '''y1''' and the position of any unit that primary unit does something to is stored in the variables '''x2''' and '''y2''' (this unit is referred to as the '''secondary unit''' below). '' These units are also automatically stored in the variables '''unit''' and '''second_unit''' as if they had been stored using the '''[store_unit]''' tag. see [[SingleUnitWML]]. weapon and second_weapon variables are available inside attack, attacker_hits, defender_hits, die and last_breath events. See [[VariablesWML#Automatically_Stored_Variables|automatically stored variables]] for more information.&lt;br /&gt;
&lt;br /&gt;
=== moveto ===&lt;br /&gt;
&lt;br /&gt;
Triggers after the primary unit moves. Typically this is used when the primary unit gets to a particular location and a filter for the location of the primary unit is included; remember that this is the location that the primary unit lands on, not the location it started on or any location it travels on. If the unit moves to a village, the capture event will be fired before this event. &amp;lt;br /&amp;gt;''An '''[allow_undo]''' tag anywhere within a moveto event will cancel any lack of undo functionality the event would have caused. Note that undo functionality will only move the unit back to its former location; it will not undo other changes to the game caused by the event. Thus it is up to the scenario designer to use this tag correctly.'' $x2 and $y2 refer to the hex the unit came from.&lt;br /&gt;
&lt;br /&gt;
=== sighted ===&lt;br /&gt;
&lt;br /&gt;
A '''sighted''' event is triggered by a unit becoming visible to a side (other than the unit's own side). This is mostly useful when the side seeing the unit uses [[fog of war]] or [[shroud]], but they still fire even when fog/shroud is not in use, and they do take into account the {{tag2|AbilitiesWML#The_.5Babilities.5D_tag|hides}} ability (for a moving unit and for ambushers). The ''primary unit'' is the unit that became visible, and the ''secondary unit'' belongs to the side that now sees the primary unit. In some cases, sighted events can be delayed from when they &amp;quot;should&amp;quot; occur. If that happens, the secondary unit will be filtered as if it was at the location where the event &amp;quot;should&amp;quot; have occurred, and ''x2,y2'' will store that location (not the current position of the secondary unit). To understand when sighted events fire, it is helpful to distinguish the times the acting unit sights other units from the times when the acting unit is sighted.&lt;br /&gt;
&lt;br /&gt;
An acting unit can sight other units when it is recruited, recalled, leveled, or moved, and when fog or shroud is cleared from occupied hexes as a result. In these cases, the acting unit is always the ''secondary unit''. For the first three actions, there are two events associated with the action; clearing occurs between these events, but any sighted events are fired after the second event. (For example, when a unit is recruited, the ''prerecruit'' event fires, then fog is cleared, then the ''recruit'' event fires, then ''sighted'' events fire.) For movement, the sighted events fire between ''enter_hex'' and ''exit_hex'' events, but sometimes sighted events are postponed until the moving unit reaches a good place to stop (e.g. not in an occupied hex). As a major exception to the above, players have the option to delay shroud (and fog) updates. If the player delays shroud updates, sighted events are also delayed until the shroud is updated.&lt;br /&gt;
&lt;br /&gt;
An acting unit can be sighted by other sides when it is recruited, recalled, leveled (in rare cases), or moved. In these cases, the acting unit is always the ''primary unit''. These events fire after sightings by the acting unit (unless the player delayed shroud updates). For the first two, the sighted event fires for all sides that can see the unit, other than the unit's own side (even if those sides use neither fog nor shroud). For leveling units, sides that could see the unit before it leveled are excluded. (This is why these events are rare &amp;amp;ndash; the leveling unit must have lost a [hides] ability as a result of leveling in order to be seen after, but not before, leveling.) For movement, a sighted event is fired for each side that could see the unit after movement, but not before. In particular, only the starting and ending hexes are considered; a unit that moves through seen hexes but ends movement in a fogged hex does not trigger a sighted event for itself. In all cases where the acting unit is sighted, a (single) ''secondary unit'' is chosen from the sighting team. This choice should be considered arbitrary, but units within their sight range of the acting unit are chosen in preference to units further away. You may want to use [filter_second] in order to restrict a sighted event in a single player scenario to only being triggered by the player and not by other non-allied sides.&lt;br /&gt;
&lt;br /&gt;
Sighted events are not triggered by a ''hides'' ability becoming inactive, unless it becomes inactive due to that unit's movement or to that unit ambushing another. (To detect a ''nightstalk'' ability becoming inactive due to time of day, use a ''new_turn'' event. Custom ''hides'' abilities might need similar handling.)&lt;br /&gt;
&lt;br /&gt;
Sighted events have some special caveats for WML authors. First and foremost, {{tag|DirectActionsWML|allow_undo}} should generally be avoided in sighted events. It can be used if current unit positions have no bearing on the event, but otherwise it could cause a replay to go out of sync if a player delays shroud updates and undoes a move. This should not be an onerous restriction, though, as clearing fog will block the ability to undo, regardless of what happens within an event. Secondly, it is currently possible for WML to kill a unit involved in a sighted event before that event fires. If that happens, filters on the killed unit will not match anything and the event may seem to have not fired.&lt;br /&gt;
&lt;br /&gt;
=== enter_hex ===&lt;br /&gt;
&lt;br /&gt;
Triggers for each hex entered during movement, with $x1,$y1 identifying the hex entered and $x2,$y2 identifying the previous hex (just exited). In Wesnoth 1.12, the movement will be interrupted, stopping the unit where it is; this behavior can be avoided by using the {{tag|DirectActionsWML|allow_undo}} tag or `NO_INTERRUPT_NO_UNDO` macro. {{DevFeature1.13|11}} movement is not interrupted unless the {{tag|DirectActionsWML|cancel_action}} tag is used.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' This event behaves a bit unusually if the hex is occupied (and the moving unit is simply passing through). When this happens, $x1,$y1 is still the hex where the event was triggered, but the moving unit (stored in $unit) will be located somewhere earlier in the route (the most recent unoccupied hex). That is, $x1,$y1 will not equal $unit.x,$unit.y (a condition that can be used to detect when the entered hex is occupied). The moving unit will have already spent its movement points to enter the event's hex even though it is has not actually moved from the most recent unoccupied hex.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' At the time of writing (7ca5a0df, just before 1.13.11), if the hex is occupied then $unit contains the occupying unit, not the moving unit.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' At the time of writing (1.16.2), if the hex is occupied then $unit does contain the moving unit.&lt;br /&gt;
&lt;br /&gt;
=== exit_hex ===&lt;br /&gt;
&lt;br /&gt;
Triggers for each hex exited during movement, with $x1,$y1 identifying the hex exited and $x2,$y2 identifying the next hex (to be entered). If this event is handled without using {{tag|DirectActionsWML|allow_undo}}, then movement is interrupted, stopping the unit where it is. {{DevFeature1.13|11}} movement is not interrupted unless the {{tag|DirectActionsWML|cancel_action}} tag is used.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' This event behaves a bit unusually if the hex is occupied (and the moving unit is simply passing through). When this happens, $x1,$y1 is still the hex where the event was triggered, but the moving unit (stored in $unit) will be located somewhere earlier in the route (the most recent unoccupied hex). That is, $x1,$y1 will not equal $unit.x,$unit.y (a condition that can be used to detect when the exited hex is occupied). The moving unit will have already spent its movement points to enter the event's hex even though it is has not actually moved from the most recent unoccupied hex.&lt;br /&gt;
&lt;br /&gt;
=== pre attack {{DevFeature1.17|7}}===&lt;br /&gt;
&lt;br /&gt;
Similar to '''attack''', but is triggered before calculating the number of attacks and the movement of the unit. Can be used for modifications, which affect these values.&lt;br /&gt;
&lt;br /&gt;
=== attack ===&lt;br /&gt;
&lt;br /&gt;
Triggers when the primary unit attacks the secondary unit. Variables $weapon and $second_weapon contain weapons used for this attack by primary and secondary units respectively for all attack-related events (attack_end, attacker_hits, attacker_misses, defender_hits, defender_misses, die and last_breath).&lt;br /&gt;
&lt;br /&gt;
=== attack end ===&lt;br /&gt;
&lt;br /&gt;
Similar to '''attack''', but is triggered ''after'' the fight instead of before. Note that if either unit is killed during the fight, this event triggers before any '''die''' events.&lt;br /&gt;
&lt;br /&gt;
=== attacker hits ===&lt;br /&gt;
&lt;br /&gt;
Triggers when the the primary unit (the attacker) hits the secondary unit (the defender). The value of the WML variable '''damage_inflicted''' is set to the number of hitpoints inflicted by the attacker.&lt;br /&gt;
&lt;br /&gt;
=== attacker misses ===&lt;br /&gt;
&lt;br /&gt;
Same as ''attacker hits'', but is triggered when the attacker misses.&lt;br /&gt;
&lt;br /&gt;
=== defender hits ===&lt;br /&gt;
&lt;br /&gt;
Triggers when the primary unit (the attacker) is hit in retaliation by the secondary unit (the defender). The value of the WML variable '''damage_inflicted''' is set to the number of hitpoints inflicted by the defender.&lt;br /&gt;
&lt;br /&gt;
=== defender misses ===&lt;br /&gt;
&lt;br /&gt;
Same as ''defender hits'', but is triggered when the defender misses.&lt;br /&gt;
&lt;br /&gt;
=== petrified ===&lt;br /&gt;
Triggers when the primary unit is hit by an attack with the 'petrifies' ability (See ''petrifies'', [[AbilitiesWML]]) by the secondary unit (the unit with the 'petrifies' ability).&lt;br /&gt;
&lt;br /&gt;
=== last breath ===&lt;br /&gt;
&lt;br /&gt;
Triggers when the primary unit is killed by the secondary unit, but before the death animation is triggered. Use this instead of name=die when you want the primary unit to make a final [message]. &lt;br /&gt;
&lt;br /&gt;
=== die ===&lt;br /&gt;
&lt;br /&gt;
Triggers when the primary unit is killed by the secondary unit. ''Note: The primary unit is not removed from the game until the end of this event. The primary unit can still be manipulated, will block other units from taking its hex, and will still be found by standard unit filters (except [have_unit]). To prevent this behavior, you can use [kill] to remove the unit immediately. However, this will stop any (still unfired) other events that also match the unit from firing afterwards, so use with caution.'' If you want to the primary unit to make a final [message], use name=last_breath, see above.&lt;br /&gt;
&lt;br /&gt;
=== capture ===&lt;br /&gt;
&lt;br /&gt;
Triggers when the primary unit captures a village. The village may have been previously neutral, or previously owned by another side; merely moving into your own villages does not constitute a capture. This event will be fired before the moveto event. Villages becoming neutral (via [capture_village]) do not fire capture events. The variable $owner_side contains the previous owner side of the village. 0 means neutral.&lt;br /&gt;
&lt;br /&gt;
=== recruit ===&lt;br /&gt;
&lt;br /&gt;
Triggers when the primary unit is recruited (by the secondary unit). (That is, when a unit is recruited it will trigger this event and this event's filter will filter that unit.).&lt;br /&gt;
&lt;br /&gt;
=== prerecruit ===&lt;br /&gt;
&lt;br /&gt;
Triggers when the primary unit is recruited (by the secondary unit) but before it is displayed.&lt;br /&gt;
&lt;br /&gt;
=== recall ===&lt;br /&gt;
&lt;br /&gt;
Triggers after the primary unit is recalled (by the secondary unit).&lt;br /&gt;
&lt;br /&gt;
=== prerecall ===&lt;br /&gt;
&lt;br /&gt;
Triggers when the primary unit is recalled (by the secondary unit) but before it is displayed.&lt;br /&gt;
&lt;br /&gt;
=== advance ===&lt;br /&gt;
&lt;br /&gt;
Triggers just before the primary unit is going to advance to another unit, or advance by AMLA. (This is after the player selects which advancement, if there is a choice). If this event removes the unit, changes the unit's type, or reduces the unit's experience below what it needs to advance, then the advancement is aborted. This also applies to advancement by AMLA.&lt;br /&gt;
&lt;br /&gt;
=== pre advance ===&lt;br /&gt;
&lt;br /&gt;
{{DevFeature1.13|0}} Triggers before the unit advancement dialog is shown. If this event removes the unit or reduces the unit's experience below what it needs to advance, then the advancement is aborted.&lt;br /&gt;
&lt;br /&gt;
=== post advance ===&lt;br /&gt;
&lt;br /&gt;
Triggers just after the primary unit has advanced to another unit, or advance by AMLA.&lt;br /&gt;
&lt;br /&gt;
=== select ===&lt;br /&gt;
&lt;br /&gt;
Triggers when the primary unit is selected. Prior to version 1.11, this also triggered when a move was interrupted, as the game keeps the moving unit selected by selecting it again at the end of movement. ''Note: in networked multiplayer, these events are only executed by the client on which the event is triggered, leading to out of sync errors if you modify the game state in the event.''&lt;br /&gt;
&lt;br /&gt;
=== menu item ''X'' ===&lt;br /&gt;
&lt;br /&gt;
Triggers when a WML menu item with id=''X'' is selected. ''Note: if the menu item has a [command], this event may be executed before or after the command; there is no guarantee.''&lt;br /&gt;
&lt;br /&gt;
=== unit placed {{DevFeature1.13|3}}===&lt;br /&gt;
&lt;br /&gt;
Triggers when the primary unit is placed on the map, regardless of method. This includes but might not be limited to:&lt;br /&gt;
* Leaders and units placed in side definitions (fired once for every unit right before prestart events)&lt;br /&gt;
* Recruited and recalled units&lt;br /&gt;
* Units placed on the map with the [unit] tag ('''not''' units created directly onto a recall list or variable)&lt;br /&gt;
* Units placed by the wesnoth.put_unit() Lua function&lt;br /&gt;
* Units placed by :to_map in Lua (which is a shortcut for the above)&lt;br /&gt;
* Units created via debug mode&lt;br /&gt;
* Units created by plague &lt;br /&gt;
* Every use of [unstore_unit], when ''fire_event'' is set to ''yes'' (default is ''no'')&lt;br /&gt;
* Units moved on map with [move_unit] before {{DevFeature1.15|8}}&lt;br /&gt;
* Units matching the filter of [petrify], [unpetrify] or [harm_unit] before {{DevFeature1.15|8}}&lt;br /&gt;
* Units who receive a bonus from the feeding ability every time except the first, before {{DevFeature1.15|8}}&lt;br /&gt;
This event is solely intended for special cases where no other event types suffice, for example if you must immediately apply a modification to every unit that ever appears. The event does '''not''' keep track of which units it has previously fired for, but can fire an unlimited number of times for the same unit as long the unit is &amp;quot;placed&amp;quot; several times and the event filter doesn't prevent it.&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous Notes and Examples ==&lt;br /&gt;
&lt;br /&gt;
=== Primary/Secondary Unit Speaker Example ===&lt;br /&gt;
&lt;br /&gt;
In events, the primary unit can be referred to as '''unit''' and the secondary unit can be referred to as '''second_unit''' in [message] tags using the '''speaker''' key. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang='wml'&amp;gt;&lt;br /&gt;
[event]&lt;br /&gt;
    name=last breath&lt;br /&gt;
    [message]&lt;br /&gt;
        speaker=second_unit&lt;br /&gt;
        message= _ &amp;quot;Hahaha! I finally killed you!&amp;quot;&lt;br /&gt;
    [/message]&lt;br /&gt;
&lt;br /&gt;
    [message]&lt;br /&gt;
        speaker=unit&lt;br /&gt;
        message= _ &amp;quot;It's not over yet! I'll come back to haunt you!&amp;quot;&lt;br /&gt;
    [/message]&lt;br /&gt;
[/event]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Nested Event Example ===&lt;br /&gt;
&lt;br /&gt;
An event is created for a portal that opens on turn 10. The parent (or 'outer') event executes on turn 10 at which point the nested moveto event is created. This nested event executes when a player steps on a certain spot.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang='wml'&amp;gt;&lt;br /&gt;
[event]&lt;br /&gt;
    name=turn 10&lt;br /&gt;
 &lt;br /&gt;
    [event]&lt;br /&gt;
        name=moveto&lt;br /&gt;
        [filter]&lt;br /&gt;
            x,y=5,8&lt;br /&gt;
        [/filter]&lt;br /&gt;
 &lt;br /&gt;
        # moving to 5,8 will trigger this event only on turn 10 and after&lt;br /&gt;
    [/event]&lt;br /&gt;
[/event]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An equivalent way of doing this would be to create a single moveto event with a '''[filter_condition]''' statement to check for turn number but using nested '''[event]''' tags is a convenient shortcut to accomplish this task without resorting to '''[filter_condition]''' statements. Using '''[if]''' tags is also an option especially if your event has '''first_time_only=yes'''.&lt;br /&gt;
&lt;br /&gt;
=== Delayed Variable Substitution Example ===&lt;br /&gt;
&lt;br /&gt;
This code will display a message showing the turn number on which the nested ''moveto'' event happens.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang='wml'&amp;gt;&lt;br /&gt;
[event]&lt;br /&gt;
    name=turn 10&lt;br /&gt;
&lt;br /&gt;
    [event]&lt;br /&gt;
        name=moveto&lt;br /&gt;
        delayed_variable_substitution=yes&lt;br /&gt;
        [filter]&lt;br /&gt;
            x,y=5,8&lt;br /&gt;
        [/filter]&lt;br /&gt;
&lt;br /&gt;
        {DEBUG_MSG &amp;quot;Turn $turn_number&amp;quot;} &lt;br /&gt;
    [/event]&lt;br /&gt;
[/event]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since this is the default behavior for the '''delayed_variable_substitution''' key, the following example is identical.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang='wml'&amp;gt;&lt;br /&gt;
[event]&lt;br /&gt;
    name=turn 10&lt;br /&gt;
&lt;br /&gt;
    [event]&lt;br /&gt;
        name=moveto&lt;br /&gt;
        [filter]&lt;br /&gt;
            x,y=5,8&lt;br /&gt;
        [/filter]&lt;br /&gt;
&lt;br /&gt;
        {DEBUG_MSG &amp;quot;Turn $turn_number&amp;quot;} &lt;br /&gt;
    [/event]&lt;br /&gt;
[/event]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following code will always display &amp;quot;Turn 10&amp;quot; when the nested ''moveto'' event happens. This is because the variable substitution is done when the parent event is triggered and spawns the nested event, ''not'' when the nested event is triggered.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang='wml'&amp;gt;&lt;br /&gt;
[event]&lt;br /&gt;
    name=turn 10&lt;br /&gt;
&lt;br /&gt;
    [event]&lt;br /&gt;
        name=moveto&lt;br /&gt;
        delayed_variable_substitution=no&lt;br /&gt;
        [filter]&lt;br /&gt;
            x,y=5,8&lt;br /&gt;
        [/filter]&lt;br /&gt;
&lt;br /&gt;
        {DEBUG_MSG &amp;quot;Turn $turn_number&amp;quot;} &lt;br /&gt;
    [/event]&lt;br /&gt;
[/event]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally, the following example is identical to the first two in that it will display a message showing the turn number on which the nested ''moveto'' event happens, despite the fact that the '''delayed_variable_substitution''' key is set to ''no''. This is because the special '''$|variable''' syntax is used.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang='wml'&amp;gt;&lt;br /&gt;
[event]&lt;br /&gt;
    name=turn 10&lt;br /&gt;
&lt;br /&gt;
    [event]&lt;br /&gt;
        name=moveto&lt;br /&gt;
        delayed_variable_substitution=no&lt;br /&gt;
        [filter]&lt;br /&gt;
            x,y=5,8&lt;br /&gt;
        [/filter]&lt;br /&gt;
&lt;br /&gt;
        {DEBUG_MSG &amp;quot;Turn $|turn_number&amp;quot;} &lt;br /&gt;
    [/event]&lt;br /&gt;
[/event]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Multiple Nested Events ===&lt;br /&gt;
&lt;br /&gt;
Every delayed_variable_substitution=no causes a variable substitution run on the subevent where it occurs at the spawn time of this event and on all following subevents. For any specific event, variable substitution happens at least one time when the event is executed. For each delayed=no key appearing in itself or in an event of an &amp;quot;older&amp;quot; generation, which is not the toplevel event, an additional variable substitution run is made.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang='wml'&amp;gt;&lt;br /&gt;
[event] # parent&lt;br /&gt;
    name=turn 2&lt;br /&gt;
    # delayed_variable_substitution=no # In the parent event, delayed= has no effect.&lt;br /&gt;
 &lt;br /&gt;
    [event] # child&lt;br /&gt;
        name=turn 3&lt;br /&gt;
        delayed_variable_substitution=no # Causes variable substitution in the child, grandchild and great-grandchild event&lt;br /&gt;
        # at execution time of the parent event = spawn time of the child event.&lt;br /&gt;
&lt;br /&gt;
        [event]# grandchild&lt;br /&gt;
            name=turn 4&lt;br /&gt;
            delayed_variable_substitution=yes # no variable substitution in the grandchild and great-grandchild event&lt;br /&gt;
            # at execution time of the child event = spawn time of the grandchild event&lt;br /&gt;
&lt;br /&gt;
            [event] # great-grandchild&lt;br /&gt;
                name=turn 5&lt;br /&gt;
                {DEBUG_MSG $turn_number} # output: 2 - value from the variable substitution at execution time of the parent event,&lt;br /&gt;
                # caused by delayed=no in the child event&lt;br /&gt;
&lt;br /&gt;
                {DEBUG_MSG $||turn_number}# output: &amp;quot;$turn_number&amp;quot;&lt;br /&gt;
                # Each variable substitution transforms a &amp;quot;$|&amp;quot; to a &amp;quot;$&amp;quot; (except when no | left).&lt;br /&gt;
&lt;br /&gt;
                {DEBUG_MSG $|turn_number}# output: 5 - from the variable substitution at execution time&lt;br /&gt;
                # of the great-grandchild event&lt;br /&gt;
            [/event]&lt;br /&gt;
        [/event]&lt;br /&gt;
    [/event]&lt;br /&gt;
[/event]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[DirectActionsWML]]&lt;br /&gt;
* [[InternalActionsWML]]&lt;br /&gt;
* [[InterfaceActionsWML]]&lt;br /&gt;
* [[FilterWML]]&lt;br /&gt;
* [[ReferenceWML]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: WML Reference]]&lt;/div&gt;</summary>
		<author><name>Octalot</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=ScenarioWML&amp;diff=71493</id>
		<title>ScenarioWML</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=ScenarioWML&amp;diff=71493"/>
		<updated>2023-07-05T10:26:06Z</updated>

		<summary type="html">&lt;p&gt;Octalot: /* The [test] tag */ Remove mention of macros, as their availability is based on the file inclusion order&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WML Tags}}&lt;br /&gt;
&lt;br /&gt;
The top level tags '''[multiplayer]''', '''[test]''', and '''[scenario]''' are [[AddonsWML|addon module]] tags that are all formatted the same way.&lt;br /&gt;
The difference between these tags is the way that the scenarios they describe are accessed.&lt;br /&gt;
&lt;br /&gt;
The keys '''id''' and '''next_scenario''' affect how scenarios can be accessed.&lt;br /&gt;
Whenever a scenario is won, the scenario with id=''next_scenario'' of the same tag type will be played.&lt;br /&gt;
Units from the first scenario will be available for recall in the second.&lt;br /&gt;
&lt;br /&gt;
Some scenarios can be played without playing other scenarios first&lt;br /&gt;
(in this case there is nothing on the recall list).&lt;br /&gt;
These scenarios are called ''initial scenario''s.&lt;br /&gt;
&lt;br /&gt;
A list of initial scenarios, and how to access them:&lt;br /&gt;
&lt;br /&gt;
* All '''[multiplayer]''' scenarios (without ''allow_new_game=no'') are initial scenarios listed in the multiplayer scenario selector screen (accessed by the &amp;quot;multiplayer&amp;quot; button).&lt;br /&gt;
* Any '''[test]''' scenario is an initial scenario. A test scenario can be accessed by running the game in test mode. (note: this is NOT the same as debug mode. It can be accessed using -t or --test followed by an optional scenario ID which defaults to 'test'.) {{DevFeature1.13|8}} It can also be accessed by assigning a hotkey to the &amp;quot;Test Scenario&amp;quot; command in hotkey preferences, then pressing that hotkey at the title screen. This will bring up a list of interactive test scenarios to choose from. (Automated test scenarios used for unit testing are excluded from this list but can still be run from the command-line.)&lt;br /&gt;
* Any '''[scenario]''' scenario with an id listed in the value of ''first_scenario'' in a campaign tag (see [[CampaignWML]]) is an initial scenario accessed by selecting that campaign after clicking on the &amp;quot;campaign&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
== The [scenario] tag ==&lt;br /&gt;
&lt;br /&gt;
The following keys and tags are recognized in '''[scenario]''' tags, in addition to all the common [[AddonsWML|addon module keys and tags]]:&lt;br /&gt;
&lt;br /&gt;
* '''next_scenario''': The id of the scenario to load when the current one is won. This can be changed dynamically, to build non-linear campaigns.&lt;br /&gt;
* '''map_data''': inputs valid Wesnoth map data. See [[BuildingMaps]] for a description of the Wesnoth map syntax.&lt;br /&gt;
* '''map_file''': {{DevFeature1.14|3}} path to a file containing Wesnoth map data. This is the recommended way to reference a map in a scenario. The version number 1.14.3 is not a typo; it was included but buggy in earlier 1.14.x releases.&lt;br /&gt;
** {{DevFeature1.15|3}} the file can be found via [binary_path], as documented for [[DirectActionsWML#.5Breplace_map.5D|[replace_map]]].&lt;br /&gt;
** {{DevFeature1.15|4}} the file can be a WML file with the contents of a '''[scenario]''' tag, which will be merged in to the current scenario. For example, the map file can include named '''[time_area]'''s. There's more detail in PR #4999.&lt;br /&gt;
* '''turns''': sets an event on turn ''turns'' causing the player to lose. Use ''-1'' to have no turn limit. Default value is ''-1'' on wesnoth-1.13 and ''100'' on wesnoth-1.12. See also [[EventWML]]&lt;br /&gt;
* '''turn_at''': the turn to start on (default=1)&lt;br /&gt;
*: Note that none of the regular start-of-turn behavior, including poison damage, healing, income and refreshing unit movement and status, will occur before the start of turn 2.  All start-of-turn [[EventWML|WML events]] will still be fired, however.&lt;br /&gt;
* '''random_start_time''': controls random starting time of day. Possible values are yes and no or list of possible start times; starting from 1 to number of times. for example ''random_start_time=2,3,5,6'' (default depends on version and mp/sp, better include this key)&lt;br /&gt;
* '''music''': the music file relative to ''./music/'' to play during the scenario&lt;br /&gt;
* '''[music]''': specifies the music tracks to play during this scenario, see [[MusicListWML]].&lt;br /&gt;
* '''defeat_music''': specifies a comma-separated list of music tracks which may be chosen to play on defeat. If not provided, the default in [[GameConfigWML]] is used instead. May be overridden by [[DirectActionsWML|endlevel]] clauses.&lt;br /&gt;
* '''victory_music''': specifies a comma-separated list of music tracks which may be chosen to play on victory. If not provided, the default in [[GameConfigWML]] is used instead. May be overridden by [[DirectActionsWML|endlevel]] clauses.&lt;br /&gt;
* '''theme''': the name of the UI theme that should be used when playing this scenario. Valid ids to use can be found in the files in data/themes. Cutscene and Cutscene_Minimal can be useful for dialog only scenarios.&lt;br /&gt;
* '''victory_when_enemies_defeated''': when this is set to '''yes''' (default), the player wins once all non-allied units with '''canrecruit=yes''' (aka leaders) are killed. (Currently this only controls the win condition for when all enemies are defeated; it does not prevent the player from losing if he has no leader.) See Also [[SideWML]]. When this value is true the following keys can be used:&lt;br /&gt;
** '''carryover_percentage''': by default 80% of the gold is carried over to the next scenario, with this key the amount can be changed.&lt;br /&gt;
** '''carryover_add''': if true the gold will be added to the starting gold the next scenario, if false the next scenario will start with the amount of the current scenario (after taxes) or the minimum in the next scenario. Default is false.&lt;br /&gt;
* '''remove_from_carryover_on_defeat''': when this is set to '''yes''' (default), for sides who got defeated (according to the side.defeat_condition), carryover will be removed.&lt;br /&gt;
* '''disallow_recall''': when this is set to 'no'(default), the player is allowed to recall units from previous scenarios.&lt;br /&gt;
* '''experience_modifier''': the percentage that required XP to level up (for all units in the scenario) is multiplied by. Default 100. Note that when used in a campaign, weird things (like units being above the required XP to level up) can happen if this value is different for different scenarios.&lt;br /&gt;
* '''do_healing''': {{DevFeature1.15|0}} when set to yes, the engine will not skip healing at the first sides turn and will do the healing just like every other turn. &lt;br /&gt;
* '''[story]''': describes the intro screen. See [[IntroWML]]&lt;br /&gt;
* '''[label]''': sets a label&lt;br /&gt;
** '''x''', '''y''': location to set label&lt;br /&gt;
** '''text''': the label&lt;br /&gt;
* '''[item]''': places an item on map. See [[InterfaceActionsWML#.5Bitem.5D|InterfaceActionsWML]].&lt;br /&gt;
* '''[time]''': how a day should progress. See [[TimeWML]]&lt;br /&gt;
* '''current_time''': The time of day slot number (starting from zero) active at scenario start.&lt;br /&gt;
* '''[time_area]''': how a day should progress in a given area. Everywhere not specified in a [time_area] tag is affected by the [time] tags in the [scenario] tag&lt;br /&gt;
** takes x and y coordinates.&lt;br /&gt;
** '''[time]''': how a day should progress in those locations. See [[TimeWML]]&lt;br /&gt;
** '''current_time''': The time slot number (starting with zero) active at the creation of the area.&lt;br /&gt;
** time areas can be used in events, assigned identifiers, and removed at discretion. They also accept complete Standard Location Filters. See [[DirectActionsWML]].&lt;br /&gt;
* '''[side]''': describes one player. See [[SideWML]]&lt;br /&gt;
* '''map_generation''': another way to generate a map. The map will be generated randomly&lt;br /&gt;
** '''default''': the default random map generator&lt;br /&gt;
* '''[generator]''' if this is present, the map and scenario will be generated randomly. See [[MapGeneratorWML]]&lt;br /&gt;
* [[TerrainGraphicsWML]]: Scenarios can define custom terrain rules for the rendering of the map.&lt;br /&gt;
* [[GameConfigWML#Color_Palettes|Color palettes]]&lt;br /&gt;
&lt;br /&gt;
== The [multiplayer] tag ==&lt;br /&gt;
&lt;br /&gt;
The following keys and subtags are additionally recognized in '''[multiplayer]''' scenarios:&lt;br /&gt;
&lt;br /&gt;
* '''force_lock_settings''': provides a default value for [[SideWML]] ''lock'' attributes and forces the &amp;quot;Use map settings&amp;quot; to be checked and disabled. This is useful if author wants to limit game customization in order to keep the scenario/campaign balanced. Individual options can still be enabled if this key is set to '''yes'''. E.g. color selection can be enabled by explicitly setting ''color_lock=yes'' in [[SideWML]].&lt;br /&gt;
* '''new_game_title''': if provided will be used instead of '''name''' for campaign entry points.&lt;br /&gt;
* '''allow_new_game''': (default=yes) allow/prevent the scenario to be listed in the game configuration screen. This is intended for multiplayer campaigns with multiple entry points.&lt;br /&gt;
* '''allow_era''': a list of era ids. Only the eras with matching ids will be allowed to be played with this scenario.&lt;br /&gt;
* '''disallow_era''': a list of era ids. Eras with matching ids will not be allowed to be played with this scenario. Cannot be used in parallel with allow_era.&lt;br /&gt;
* '''ignore_incompatible_era''': a list of era ids. The eras with matching ids will be considered compatible with this scenario regardless their dependencies.&lt;br /&gt;
* '''allow_modification''': same as allow_era, but for modifications.&lt;br /&gt;
* '''disallow_modification''': same as disallow_era, but for modifications. Cannot be used in parallel with allow_modification.&lt;br /&gt;
* '''ignore_incompatible_modification''': same as ignore_incompatible_era, but for modifications.&lt;br /&gt;
* '''force_modification''': a list of modification ids (id key in [modification]). The specified modifications must be enabled to play this scenario.&lt;br /&gt;
* '''require_scenario''': {{DevFeature1.13|0}} In a multiplayer scenario, this indicates that the scenario file is not enough (you have custom assets like terrain or additional unit art) and other player must download the full add-on not just the scenario WML to join a game. This will also mean that the '''addon_min_version''' attribute will control the minimum version number of your add-on which is compatible with this version.&lt;br /&gt;
* '''mp_village_gold''': {{DevFeature1.13|9}} default value for the corresponding attribute in '''[side]'''&lt;br /&gt;
* '''mp_village_support''': {{DevFeature1.13|9}} default value for the corresponding attribute in '''[side]'''&lt;br /&gt;
* '''mp_shroud''': {{DevFeature1.13|9}} default value for the corresponding attribute in '''[side]'''&lt;br /&gt;
* '''mp_fog''': {{DevFeature1.13|9}} default value for the corresponding attribute in '''[side]'''&lt;br /&gt;
&lt;br /&gt;
== The [test] tag ==&lt;br /&gt;
&lt;br /&gt;
The following keys and subtags are additionally recognized in '''[test]''' scenarios:&lt;br /&gt;
&lt;br /&gt;
* '''is_unit_test''': {{DevFeature1.13|8}} If set to 'yes', this scenario will not appear in the list of test scenarios.  The list of test scenarios can be reached from the titlescreen via the Start Test Scenario hotkey.  This hotkey is not set by default.&lt;br /&gt;
&lt;br /&gt;
The tags documented in [[TestWML]] are enabled by an #ifdef TEST conditional, and it's a reasonable assumption that any [test] tag will itself be inside an #ifdef TEST conditional.&lt;br /&gt;
&lt;br /&gt;
== Defining the Map ==&lt;br /&gt;
&lt;br /&gt;
There are several possible ways to define the map for a scenario. First of all, the game supports two different types of map: a &amp;quot;plain map&amp;quot;, which typically has a .map extension (or occasionally .mask when used as a terrain mask), and a &amp;quot;scenario map&amp;quot;, which has a .cfg extension.&lt;br /&gt;
&lt;br /&gt;
A common practice is to include the map data directly into the scenario. If you're using a plain map, that looks like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=wml&amp;gt;&lt;br /&gt;
[scenario]&lt;br /&gt;
    map_data=&amp;quot;{~add-ons/Your_Addon/maps/the-file.map}&amp;quot;&lt;br /&gt;
[/scenario]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This uses the WML preprocessor to directly include the contents of the map file. If you're using a scenario map, it instead looks like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=wml&amp;gt;&lt;br /&gt;
[scenario]&lt;br /&gt;
    {~add-ons/Your_Addon/maps/the-file.cfg}&lt;br /&gt;
[/scenario]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another way to specify the map is to use '''map_file''', which resolves the map against the [[BinaryPathWML|binary path]] to locate the file. This looks the same for either a plain map or a scenario map:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=wml&amp;gt;&lt;br /&gt;
[scenario]&lt;br /&gt;
    map_file=&amp;quot;the-file.map&amp;quot;&lt;br /&gt;
[/scenario]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The last way to specify a map is to use a [[MapGeneratorWML|generator]].&lt;br /&gt;
&lt;br /&gt;
== Scenario End Conditions ==&lt;br /&gt;
&lt;br /&gt;
In this section we will give a more precise explanation of things that can cause a scenario to end.&lt;br /&gt;
&lt;br /&gt;
* At the '''end of every turn''', the turn number will be compared with the turn limit. &lt;br /&gt;
** If we pass the limit, the ''time over'' event will fire. If turns are not added by WML in response to this event, then the scenario will immediately end in defeat. [[EventWML#The_.27name.27_Key_.28Mandatory.29]]&lt;br /&gt;
* At the '''beginning of any turn''', and at '''the end of any user or ai action''', the victory conditions will be checked. This will result either in the scenario ending or continuing. The procedure for this is as follows:&lt;br /&gt;
** Every side will have its ''defeat_condition'' evaluated based on the units it currently has on the board. [[SideWML]]&lt;br /&gt;
*** At this time, villages of defeated sides will be unflagged, and if ''remove_from_carryover_on_defeat = yes'' then their carryover will be cleared as well.&lt;br /&gt;
** If any two not-defeated sides are enemies, the scenario will continue.&lt;br /&gt;
*** At this time, the ''enemies defeated'' event will fire.&lt;br /&gt;
** Furthermore, if ''victory_when_enemies_defeated=no'' and there exists a human controlled side, then the scenario will continue.&lt;br /&gt;
*** The human controlled side may be local or remote, for networked mp play.&lt;br /&gt;
** If neither of these conditions is met then the scenario will end. &lt;br /&gt;
***In victory or defeat according to whether a local human-controlled side is not defeated.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[EventWML]]&lt;br /&gt;
* [[ReferenceWML]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: WML Reference]]&lt;/div&gt;</summary>
		<author><name>Octalot</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=ScenarioWML&amp;diff=71492</id>
		<title>ScenarioWML</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=ScenarioWML&amp;diff=71492"/>
		<updated>2023-07-05T10:19:03Z</updated>

		<summary type="html">&lt;p&gt;Octalot: /* The [test] tag */ Link to TestWML&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WML Tags}}&lt;br /&gt;
&lt;br /&gt;
The top level tags '''[multiplayer]''', '''[test]''', and '''[scenario]''' are [[AddonsWML|addon module]] tags that are all formatted the same way.&lt;br /&gt;
The difference between these tags is the way that the scenarios they describe are accessed.&lt;br /&gt;
&lt;br /&gt;
The keys '''id''' and '''next_scenario''' affect how scenarios can be accessed.&lt;br /&gt;
Whenever a scenario is won, the scenario with id=''next_scenario'' of the same tag type will be played.&lt;br /&gt;
Units from the first scenario will be available for recall in the second.&lt;br /&gt;
&lt;br /&gt;
Some scenarios can be played without playing other scenarios first&lt;br /&gt;
(in this case there is nothing on the recall list).&lt;br /&gt;
These scenarios are called ''initial scenario''s.&lt;br /&gt;
&lt;br /&gt;
A list of initial scenarios, and how to access them:&lt;br /&gt;
&lt;br /&gt;
* All '''[multiplayer]''' scenarios (without ''allow_new_game=no'') are initial scenarios listed in the multiplayer scenario selector screen (accessed by the &amp;quot;multiplayer&amp;quot; button).&lt;br /&gt;
* Any '''[test]''' scenario is an initial scenario. A test scenario can be accessed by running the game in test mode. (note: this is NOT the same as debug mode. It can be accessed using -t or --test followed by an optional scenario ID which defaults to 'test'.) {{DevFeature1.13|8}} It can also be accessed by assigning a hotkey to the &amp;quot;Test Scenario&amp;quot; command in hotkey preferences, then pressing that hotkey at the title screen. This will bring up a list of interactive test scenarios to choose from. (Automated test scenarios used for unit testing are excluded from this list but can still be run from the command-line.)&lt;br /&gt;
* Any '''[scenario]''' scenario with an id listed in the value of ''first_scenario'' in a campaign tag (see [[CampaignWML]]) is an initial scenario accessed by selecting that campaign after clicking on the &amp;quot;campaign&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
== The [scenario] tag ==&lt;br /&gt;
&lt;br /&gt;
The following keys and tags are recognized in '''[scenario]''' tags, in addition to all the common [[AddonsWML|addon module keys and tags]]:&lt;br /&gt;
&lt;br /&gt;
* '''next_scenario''': The id of the scenario to load when the current one is won. This can be changed dynamically, to build non-linear campaigns.&lt;br /&gt;
* '''map_data''': inputs valid Wesnoth map data. See [[BuildingMaps]] for a description of the Wesnoth map syntax.&lt;br /&gt;
* '''map_file''': {{DevFeature1.14|3}} path to a file containing Wesnoth map data. This is the recommended way to reference a map in a scenario. The version number 1.14.3 is not a typo; it was included but buggy in earlier 1.14.x releases.&lt;br /&gt;
** {{DevFeature1.15|3}} the file can be found via [binary_path], as documented for [[DirectActionsWML#.5Breplace_map.5D|[replace_map]]].&lt;br /&gt;
** {{DevFeature1.15|4}} the file can be a WML file with the contents of a '''[scenario]''' tag, which will be merged in to the current scenario. For example, the map file can include named '''[time_area]'''s. There's more detail in PR #4999.&lt;br /&gt;
* '''turns''': sets an event on turn ''turns'' causing the player to lose. Use ''-1'' to have no turn limit. Default value is ''-1'' on wesnoth-1.13 and ''100'' on wesnoth-1.12. See also [[EventWML]]&lt;br /&gt;
* '''turn_at''': the turn to start on (default=1)&lt;br /&gt;
*: Note that none of the regular start-of-turn behavior, including poison damage, healing, income and refreshing unit movement and status, will occur before the start of turn 2.  All start-of-turn [[EventWML|WML events]] will still be fired, however.&lt;br /&gt;
* '''random_start_time''': controls random starting time of day. Possible values are yes and no or list of possible start times; starting from 1 to number of times. for example ''random_start_time=2,3,5,6'' (default depends on version and mp/sp, better include this key)&lt;br /&gt;
* '''music''': the music file relative to ''./music/'' to play during the scenario&lt;br /&gt;
* '''[music]''': specifies the music tracks to play during this scenario, see [[MusicListWML]].&lt;br /&gt;
* '''defeat_music''': specifies a comma-separated list of music tracks which may be chosen to play on defeat. If not provided, the default in [[GameConfigWML]] is used instead. May be overridden by [[DirectActionsWML|endlevel]] clauses.&lt;br /&gt;
* '''victory_music''': specifies a comma-separated list of music tracks which may be chosen to play on victory. If not provided, the default in [[GameConfigWML]] is used instead. May be overridden by [[DirectActionsWML|endlevel]] clauses.&lt;br /&gt;
* '''theme''': the name of the UI theme that should be used when playing this scenario. Valid ids to use can be found in the files in data/themes. Cutscene and Cutscene_Minimal can be useful for dialog only scenarios.&lt;br /&gt;
* '''victory_when_enemies_defeated''': when this is set to '''yes''' (default), the player wins once all non-allied units with '''canrecruit=yes''' (aka leaders) are killed. (Currently this only controls the win condition for when all enemies are defeated; it does not prevent the player from losing if he has no leader.) See Also [[SideWML]]. When this value is true the following keys can be used:&lt;br /&gt;
** '''carryover_percentage''': by default 80% of the gold is carried over to the next scenario, with this key the amount can be changed.&lt;br /&gt;
** '''carryover_add''': if true the gold will be added to the starting gold the next scenario, if false the next scenario will start with the amount of the current scenario (after taxes) or the minimum in the next scenario. Default is false.&lt;br /&gt;
* '''remove_from_carryover_on_defeat''': when this is set to '''yes''' (default), for sides who got defeated (according to the side.defeat_condition), carryover will be removed.&lt;br /&gt;
* '''disallow_recall''': when this is set to 'no'(default), the player is allowed to recall units from previous scenarios.&lt;br /&gt;
* '''experience_modifier''': the percentage that required XP to level up (for all units in the scenario) is multiplied by. Default 100. Note that when used in a campaign, weird things (like units being above the required XP to level up) can happen if this value is different for different scenarios.&lt;br /&gt;
* '''do_healing''': {{DevFeature1.15|0}} when set to yes, the engine will not skip healing at the first sides turn and will do the healing just like every other turn. &lt;br /&gt;
* '''[story]''': describes the intro screen. See [[IntroWML]]&lt;br /&gt;
* '''[label]''': sets a label&lt;br /&gt;
** '''x''', '''y''': location to set label&lt;br /&gt;
** '''text''': the label&lt;br /&gt;
* '''[item]''': places an item on map. See [[InterfaceActionsWML#.5Bitem.5D|InterfaceActionsWML]].&lt;br /&gt;
* '''[time]''': how a day should progress. See [[TimeWML]]&lt;br /&gt;
* '''current_time''': The time of day slot number (starting from zero) active at scenario start.&lt;br /&gt;
* '''[time_area]''': how a day should progress in a given area. Everywhere not specified in a [time_area] tag is affected by the [time] tags in the [scenario] tag&lt;br /&gt;
** takes x and y coordinates.&lt;br /&gt;
** '''[time]''': how a day should progress in those locations. See [[TimeWML]]&lt;br /&gt;
** '''current_time''': The time slot number (starting with zero) active at the creation of the area.&lt;br /&gt;
** time areas can be used in events, assigned identifiers, and removed at discretion. They also accept complete Standard Location Filters. See [[DirectActionsWML]].&lt;br /&gt;
* '''[side]''': describes one player. See [[SideWML]]&lt;br /&gt;
* '''map_generation''': another way to generate a map. The map will be generated randomly&lt;br /&gt;
** '''default''': the default random map generator&lt;br /&gt;
* '''[generator]''' if this is present, the map and scenario will be generated randomly. See [[MapGeneratorWML]]&lt;br /&gt;
* [[TerrainGraphicsWML]]: Scenarios can define custom terrain rules for the rendering of the map.&lt;br /&gt;
* [[GameConfigWML#Color_Palettes|Color palettes]]&lt;br /&gt;
&lt;br /&gt;
== The [multiplayer] tag ==&lt;br /&gt;
&lt;br /&gt;
The following keys and subtags are additionally recognized in '''[multiplayer]''' scenarios:&lt;br /&gt;
&lt;br /&gt;
* '''force_lock_settings''': provides a default value for [[SideWML]] ''lock'' attributes and forces the &amp;quot;Use map settings&amp;quot; to be checked and disabled. This is useful if author wants to limit game customization in order to keep the scenario/campaign balanced. Individual options can still be enabled if this key is set to '''yes'''. E.g. color selection can be enabled by explicitly setting ''color_lock=yes'' in [[SideWML]].&lt;br /&gt;
* '''new_game_title''': if provided will be used instead of '''name''' for campaign entry points.&lt;br /&gt;
* '''allow_new_game''': (default=yes) allow/prevent the scenario to be listed in the game configuration screen. This is intended for multiplayer campaigns with multiple entry points.&lt;br /&gt;
* '''allow_era''': a list of era ids. Only the eras with matching ids will be allowed to be played with this scenario.&lt;br /&gt;
* '''disallow_era''': a list of era ids. Eras with matching ids will not be allowed to be played with this scenario. Cannot be used in parallel with allow_era.&lt;br /&gt;
* '''ignore_incompatible_era''': a list of era ids. The eras with matching ids will be considered compatible with this scenario regardless their dependencies.&lt;br /&gt;
* '''allow_modification''': same as allow_era, but for modifications.&lt;br /&gt;
* '''disallow_modification''': same as disallow_era, but for modifications. Cannot be used in parallel with allow_modification.&lt;br /&gt;
* '''ignore_incompatible_modification''': same as ignore_incompatible_era, but for modifications.&lt;br /&gt;
* '''force_modification''': a list of modification ids (id key in [modification]). The specified modifications must be enabled to play this scenario.&lt;br /&gt;
* '''require_scenario''': {{DevFeature1.13|0}} In a multiplayer scenario, this indicates that the scenario file is not enough (you have custom assets like terrain or additional unit art) and other player must download the full add-on not just the scenario WML to join a game. This will also mean that the '''addon_min_version''' attribute will control the minimum version number of your add-on which is compatible with this version.&lt;br /&gt;
* '''mp_village_gold''': {{DevFeature1.13|9}} default value for the corresponding attribute in '''[side]'''&lt;br /&gt;
* '''mp_village_support''': {{DevFeature1.13|9}} default value for the corresponding attribute in '''[side]'''&lt;br /&gt;
* '''mp_shroud''': {{DevFeature1.13|9}} default value for the corresponding attribute in '''[side]'''&lt;br /&gt;
* '''mp_fog''': {{DevFeature1.13|9}} default value for the corresponding attribute in '''[side]'''&lt;br /&gt;
&lt;br /&gt;
== The [test] tag ==&lt;br /&gt;
&lt;br /&gt;
The following keys and subtags are additionally recognized in '''[test]''' scenarios:&lt;br /&gt;
&lt;br /&gt;
* '''is_unit_test''': {{DevFeature1.13|8}} If set to 'yes', this scenario will not appear in the list of test scenarios.  The list of test scenarios can be reached from the titlescreen via the Start Test Scenario hotkey.  This hotkey is not set by default.&lt;br /&gt;
&lt;br /&gt;
The tags and macros documented in [[TestWML]] are recognized when '''#ifdef TEST''' is true. It's a reasonable assumption that any '''[test]''' tag will itself be inside an '''#ifdef TEST''' conditional.&lt;br /&gt;
&lt;br /&gt;
== Defining the Map ==&lt;br /&gt;
&lt;br /&gt;
There are several possible ways to define the map for a scenario. First of all, the game supports two different types of map: a &amp;quot;plain map&amp;quot;, which typically has a .map extension (or occasionally .mask when used as a terrain mask), and a &amp;quot;scenario map&amp;quot;, which has a .cfg extension.&lt;br /&gt;
&lt;br /&gt;
A common practice is to include the map data directly into the scenario. If you're using a plain map, that looks like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=wml&amp;gt;&lt;br /&gt;
[scenario]&lt;br /&gt;
    map_data=&amp;quot;{~add-ons/Your_Addon/maps/the-file.map}&amp;quot;&lt;br /&gt;
[/scenario]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This uses the WML preprocessor to directly include the contents of the map file. If you're using a scenario map, it instead looks like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=wml&amp;gt;&lt;br /&gt;
[scenario]&lt;br /&gt;
    {~add-ons/Your_Addon/maps/the-file.cfg}&lt;br /&gt;
[/scenario]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another way to specify the map is to use '''map_file''', which resolves the map against the [[BinaryPathWML|binary path]] to locate the file. This looks the same for either a plain map or a scenario map:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=wml&amp;gt;&lt;br /&gt;
[scenario]&lt;br /&gt;
    map_file=&amp;quot;the-file.map&amp;quot;&lt;br /&gt;
[/scenario]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The last way to specify a map is to use a [[MapGeneratorWML|generator]].&lt;br /&gt;
&lt;br /&gt;
== Scenario End Conditions ==&lt;br /&gt;
&lt;br /&gt;
In this section we will give a more precise explanation of things that can cause a scenario to end.&lt;br /&gt;
&lt;br /&gt;
* At the '''end of every turn''', the turn number will be compared with the turn limit. &lt;br /&gt;
** If we pass the limit, the ''time over'' event will fire. If turns are not added by WML in response to this event, then the scenario will immediately end in defeat. [[EventWML#The_.27name.27_Key_.28Mandatory.29]]&lt;br /&gt;
* At the '''beginning of any turn''', and at '''the end of any user or ai action''', the victory conditions will be checked. This will result either in the scenario ending or continuing. The procedure for this is as follows:&lt;br /&gt;
** Every side will have its ''defeat_condition'' evaluated based on the units it currently has on the board. [[SideWML]]&lt;br /&gt;
*** At this time, villages of defeated sides will be unflagged, and if ''remove_from_carryover_on_defeat = yes'' then their carryover will be cleared as well.&lt;br /&gt;
** If any two not-defeated sides are enemies, the scenario will continue.&lt;br /&gt;
*** At this time, the ''enemies defeated'' event will fire.&lt;br /&gt;
** Furthermore, if ''victory_when_enemies_defeated=no'' and there exists a human controlled side, then the scenario will continue.&lt;br /&gt;
*** The human controlled side may be local or remote, for networked mp play.&lt;br /&gt;
** If neither of these conditions is met then the scenario will end. &lt;br /&gt;
***In victory or defeat according to whether a local human-controlled side is not defeated.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[EventWML]]&lt;br /&gt;
* [[ReferenceWML]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category: WML Reference]]&lt;/div&gt;</summary>
		<author><name>Octalot</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=Template:WML_Tags&amp;diff=71490</id>
		<title>Template:WML Tags</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=Template:WML_Tags&amp;diff=71490"/>
		<updated>2023-07-02T17:36:42Z</updated>

		<summary type="html">&lt;p&gt;Octalot: Link to test_do_attack_by_id&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;reference-sidebar&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;span class=&amp;quot;editlink&amp;quot;&amp;gt;&amp;amp;#91;[{{SERVER}}{{localurl:Template:WML Tags|action=edit}} edit]&amp;amp;#93;&amp;lt;/span&amp;gt;'''WML Tags'''&lt;br /&gt;
|-&lt;br /&gt;
|''A:'' &lt;br /&gt;
[[AbilitiesWML|abilities]],&lt;br /&gt;
[[CreditsWML#.5Babout.5D|about]],&lt;br /&gt;
[[AchievementsWML|achievement]],&lt;br /&gt;
[[AchievementsWML|achievement_group]],&lt;br /&gt;
[[Creating_Custom_AIs#Behavior_Candidate_Actions|add_ai_behavior]],&lt;br /&gt;
[[SingleUnitWML|advance]],&lt;br /&gt;
[[AdvancedPreferenceWML|advanced_preference]],&lt;br /&gt;
[[UnitTypeWML|advancefrom]],&lt;br /&gt;
[[UnitTypeWML#After_max_level_advancement_.28AMLA.29|advancement]],&lt;br /&gt;
[[StatisticalScenarioWML#The_.5Bteam.5D_tag|advances]],&lt;br /&gt;
[[AbilitiesWML#Common_keys_and_tags_for_every_ability|affect_adjacent]],&lt;br /&gt;
[[Wesnoth_AI_Framework#The_.5Bai.5D_Tag_.E2.80.94_Top-level_Elements|ai]],&lt;br /&gt;
[[StandardSideFilter|allied_with]], &lt;br /&gt;
[[DirectActionsWML#.5Ballow_end_turn.5D|allow_end_turn]],&lt;br /&gt;
[[DirectActionsWML#.5Ballow_extra_recruit.5D|allow_extra_recruit]],&lt;br /&gt;
[[DirectActionsWML#.5Ballow_recruit.5D|allow_recruit]],&lt;br /&gt;
[[DirectActionsWML#.5Ballow_undo.5D|allow_undo]],&lt;br /&gt;
[[ConditionalActionsWML#Meta-Condition_Tags|and]],&lt;br /&gt;
[[InterfaceActionsWML#.5Banimate_unit.5D|animate]],&lt;br /&gt;
[[InterfaceActionsWML#.5Banimate_unit.5D|animate_unit]],&lt;br /&gt;
[[AnimationWML|animation]],&lt;br /&gt;
[[Wesnoth_AI_Framework#The_.5Bai.5D_Tag_.E2.80.94_Aspects|aspect]],&lt;br /&gt;
attack ([[ReplayWML|replay]], [[UnitTypeWML#Attacks|weapon]]),&lt;br /&gt;
[[AnimationWML|attack_anim]],&lt;br /&gt;
attacks ([[AbilitiesWML#The_.5Bspecials.5D_tag|special]], [[StatisticalScenarioWML#The_.5Bteam.5D_tag|stats]]),&lt;br /&gt;
[[AiWML#List_of_AI_Aspects|avoid]];&lt;br /&gt;
|-&lt;br /&gt;
|''B:'' &lt;br /&gt;
[[UnitTypeWML#Other_tags|base_unit]], &lt;br /&gt;
[[IntroWML#.5Bbackground_layer.5D|background_layer]],&lt;br /&gt;
[[AbilitiesWML#The_.5Bspecials.5D_tag|berserk]], &lt;br /&gt;
[[BinaryPathWML|binary_path]],&lt;br /&gt;
[[InternalActionsWML#Flow_control_actions|break]],&lt;br /&gt;
[[EditorWML#The_.5Bbrush.5D_tag|brush]];&lt;br /&gt;
|-&lt;br /&gt;
|''C:'' &lt;br /&gt;
[[CampaignWML#The_.5Bcampaign.5D_tag|campaign]],&lt;br /&gt;
[[DirectActionsWML#.5Bcancel_action.5D|cancel_action]],&lt;br /&gt;
[[Wesnoth_AI_Framework#The_.5Bcandidate_action.5D_Tag|candidate_action]], &lt;br /&gt;
[[DirectActionsWML#.5Bcapture_village.5D|capture_village]],&lt;br /&gt;
[[ConditionalActionsWML#.5Bswitch.5D|case]],&lt;br /&gt;
[[AbilitiesWML#The_.5Bspecials.5D_tag|chance_to_hit]], &lt;br /&gt;
[[InterfaceActionsWML#.5Bchange_theme.5D|change_theme]], &lt;br /&gt;
[[InterfaceActionsWML#.5Bchat.5D|chat]],&lt;br /&gt;
[[OptionWML|checkbox]],&lt;br /&gt;
[[OptionWML|choice]],&lt;br /&gt;
[[ReplayWML|choose]],&lt;br /&gt;
[[PersistenceWML|clear_global_variable]],&lt;br /&gt;
[[InterfaceActionsWML#.5Bclear_menu_item.5D|clear_menu_item]],&lt;br /&gt;
[[InternalActionsWML#.5Bclear_variable.5D|clear_variable]],&lt;br /&gt;
[[InterfaceActionsWML#.5Bcolor_adjust.5D|color_adjust]],&lt;br /&gt;
[[GameConfigWML#Color_Palettes|color_palette]],&lt;br /&gt;
[[GameConfigWML#Color_Palettes|color_range]],&lt;br /&gt;
command&amp;amp;nbsp;([[ConditionalActionsWML#.5Bcommand.5D|action]], [[ReplayWML|replay]]),&lt;br /&gt;
[[InternalActionsWML#Flow_control_actions|continue]],&lt;br /&gt;
[[CreditsWML#.5Bcredits_group.5D|credits_group]],&lt;br /&gt;
[[AiWML#The_.5Bgoal.5D_Tag|criteria]];&lt;br /&gt;
|-&lt;br /&gt;
|''D:'' &lt;br /&gt;
[[AbilitiesWML#The_.5Bspecials.5D_tag|damage]],&lt;br /&gt;
[[AnimationWML#death|death]], &lt;br /&gt;
[[StatisticalScenarioWML#The_.5Bteam.5D_tag|deaths]],&lt;br /&gt;
[[AnimationWML#default|default]], &lt;br /&gt;
[[AnimationWML#defend|defend]],&lt;br /&gt;
[[StatisticalScenarioWML#The_.5Bteam.5D_tag|defends]],&lt;br /&gt;
[[UnitsWML#.5Bmovetype.5D|defense]],&lt;br /&gt;
[[InterfaceActionsWML#.5Bdelay.5D|delay]],&lt;br /&gt;
[[InterfaceActionsWML#.5Bdeprecated_message.5D|deprecated_message]],&lt;br /&gt;
[[ReplayWML|destination]],&lt;br /&gt;
[[CampaignWML|difficulty]],&lt;br /&gt;
[[AbilitiesWML#The_.5Bspecials.5D_tag|disable]],&lt;br /&gt;
[[DirectActionsWML#.5Bdisallow_end_turn.5D|disallow_end_turn]],&lt;br /&gt;
[[DirectActionsWML#.5Bdisallow_extra_recruit.5D|disallow_extra_recruit]],&lt;br /&gt;
[[DirectActionsWML#.5Bdisallow_recruit.5D|disallow_recruit]],&lt;br /&gt;
[[ConditionalActionsWML#.5Bwhile.5D|do]], &lt;br /&gt;
[[DirectActionsWML#.5Bdo_command.5D|do_command]],&lt;br /&gt;
[[AbilitiesWML#The_.5Bspecials.5D_tag|drains]], &lt;br /&gt;
[[AnimationWML#draw_weapon_anim|draw_weapon_anim]];&lt;br /&gt;
|-&lt;br /&gt;
|''E:'' &lt;br /&gt;
[[EditorWML#The_.5Beditor_group.5D_tag|editor_group]],&lt;br /&gt;
[[EditorWML#The_.5Beditor_music.5D_tag|editor_music]],&lt;br /&gt;
[[EditorWML#The_.5Beditor_times.5D_tag|editor_times]],&lt;br /&gt;
[[EffectWML|effect]],&lt;br /&gt;
else&amp;amp;nbsp;([[ConditionalActionsWML#.5Bif.5D|action]], [[AnimationWML#.5Bif.5D_and_.5Belse.5D|animation]]), [[ConditionalActionsWML#.5Bif.5D|elseif]],&lt;br /&gt;
[[DirectActionsWML#.5Bendlevel.5D|endlevel]],&lt;br /&gt;
end_turn&amp;amp;nbsp;([[DirectActionsWML#.5Bend_turn.5D|action]], [[ReplayWML|replay]]),&lt;br /&gt;
[[StandardSideFilter|enemy_of]], &lt;br /&gt;
[[Wesnoth_AI_Framework#Available_Engines|engine]], &lt;br /&gt;
entry&amp;amp;nbsp;([[CreditsWML#.5Bentry.5D|credits]], [[OptionWML|options]]),&lt;br /&gt;
[[EraWML|era]],&lt;br /&gt;
[[EventWML|event]],&lt;br /&gt;
[[AnimationWML#Simplified_animation_blocks|extra_anim]];&lt;br /&gt;
|-&lt;br /&gt;
|''F:''&lt;br /&gt;
[[Wesnoth_AI_Framework#The_.5Bai.5D_Tag_.E2.80.94_Aspects|facet]],&lt;br /&gt;
[[InterfaceActionsWML#.5Banimate_unit.5D|facing]], &lt;br /&gt;
[[InterfaceActionsWML#.5Bmove_units_fake.5D|fake_unit]], &lt;br /&gt;
[[ConditionalActionsWML#.5Bfalse.5D|false]],&lt;br /&gt;
[[PblWML#.5Bfeedback.5D|feedback]],&lt;br /&gt;
[[UnitTypeWML#Other_tags|female]], &lt;br /&gt;
filter ([[FilterWML|concept]], [[EventWML#.5Bfilter.5D|event]]),&lt;br /&gt;
[[StandardUnitFilter|filter_adjacent]], &lt;br /&gt;
[[StandardLocationFilter|filter_adjacent_location]], &lt;br /&gt;
[[FilterWML#Filtering_Weapons|filter_attack]],&lt;br /&gt;
[[AbilitiesWML#Common_keys_and_tags_for_every_weapon_special|filter_attacker]], &lt;br /&gt;
[[AbilitiesWML#Common_keys_and_tags_for_every_ability|filter_base_value]], &lt;br /&gt;
[[EventWML#.5Bfilter_condition.5D|filter_condition]],&lt;br /&gt;
[[AbilitiesWML#Common_keys_and_tags_for_every_weapon_special|filter_defender]], &lt;br /&gt;
[[AiWML#Filtering_Combat_with_the_.27attacks.27_Aspect|filter_enemy]],&lt;br /&gt;
[[StandardLocationFilter|filter_location]],&lt;br /&gt;
[[AbilitiesWML#Common_keys_and_tags_for_every_weapon_special|filter_opponent]], &lt;br /&gt;
[[AiWML#Filtering_Combat_with_the_.27attacks.27_Aspect|filter_own]],&lt;br /&gt;
[[StandardLocationFilter|filter_owner]], &lt;br /&gt;
[[StandardLocationFilter|filter_radius]], &lt;br /&gt;
[[SingleUnitWML|filter_recall]], &lt;br /&gt;
[[StandardUnitFilter|filter_second]],&lt;br /&gt;
[[FilterWML#Filtering_Weapons|filter_second_attack]],&lt;br /&gt;
[[AbilitiesWML|filter_self]], &lt;br /&gt;
[[StandardSideFilter|filter_side]],&lt;br /&gt;
[[AbilitiesWML|filter_student]], &lt;br /&gt;
[[FilterWML#Filtering_Vision|filter_vision]],&lt;br /&gt;
[[AbilitiesWML#Common_keys_and_tags_for_every_weapon_special|filter_weapon]], &lt;br /&gt;
[[FilterWML#Filtering_on_WML_data|filter_wml]],&lt;br /&gt;
[[InternalActionsWML#.5Bfind_path.5D|find_path]],&lt;br /&gt;
[[InternalActionsWML#.5Bfire_event.5D|fire_event]],&lt;br /&gt;
[[AbilitiesWML#The_.5Bspecials.5D_tag|firststrike]], &lt;br /&gt;
[[InterfaceActionsWML#.5Bfloating_text.5D|floating_text]],&lt;br /&gt;
[[ConditionalActionsWML#.5Bfound_item.5D|found_item]],&lt;br /&gt;
[[ConditionalActionsWML#.5Bfor.5D|for]],&lt;br /&gt;
[[ConditionalActionsWML#.5Bforeach.5D|foreach]],&lt;br /&gt;
[[AnimationWML#Frames|frame]];&lt;br /&gt;
|-&lt;br /&gt;
|''G:'' &lt;br /&gt;
[[GameConfigWML|game_config]],&lt;br /&gt;
[[PersistenceWML|get_global_variable]],&lt;br /&gt;
[[AiWML#The_.5Bgoal.5D_Tag|goal]],&lt;br /&gt;
[[DirectActionsWML#.5Bgold.5D|gold]],&lt;br /&gt;
[[InterfaceActionsWML#.5Bobjectives.5D|gold_carryover]];&lt;br /&gt;
|-&lt;br /&gt;
|''H:'' &lt;br /&gt;
[[DirectActionsWML#.5Bharm_unit.5D|harm_unit]],&lt;br /&gt;
[[StandardSideFilter|has_ally]], &lt;br /&gt;
[[StandardUnitFilter|has_attack]],&lt;br /&gt;
[[StandardSideFilter|has_unit]], &lt;br /&gt;
[[ConditionalActionsWML#.5Bhas_achievement.5D|has_achievement]],&lt;br /&gt;
[[ConditionalActionsWML#.5Bhave_location.5D|have_location]],&lt;br /&gt;
[[ConditionalActionsWML#.5Bhave_unit.5D|have_unit]],&lt;br /&gt;
[[AbilitiesWML#The_.5Bspecials.5D_tag|heal_on_hit]], &lt;br /&gt;
[[DirectActionsWML#.5Bheal_unit.5D|heal_unit]],&lt;br /&gt;
[[AnimationWML#healed|healed_anim]], &lt;br /&gt;
[[AnimationWML#healing|healing_anim]], &lt;br /&gt;
[[AbilitiesWML|heals]], &lt;br /&gt;
[[UnitsWML#.5Bhide_help.5D|hide_help]],&lt;br /&gt;
[[InterfaceActionsWML#.5Bhide_unit.5D|hide_unit]],&lt;br /&gt;
[[AbilitiesWML|hides]];&lt;br /&gt;
|-&lt;br /&gt;
|''I:'' &lt;br /&gt;
[[AnimationWML#idling|idle_anim]], &lt;br /&gt;
if&amp;amp;nbsp;([[ConditionalActionsWML#.5Bif.5D|action]], [[AnimationWML#.5Bif.5D_and_.5Belse.5D|animation]], [[IntroWML|intro]]),&lt;br /&gt;
[[AbilitiesWML|illuminates]], &lt;br /&gt;
image&amp;amp;nbsp;([[IntroWML#.5Bimage.5D|intro]], [[TerrainGraphicsWML|terrain]]),&lt;br /&gt;
[[ReplayWML|init_side]],&lt;br /&gt;
[[InternalActionsWML#.5Binsert_tag.5D|insert_tag]],&lt;br /&gt;
[[InterfaceActionsWML#.5Binspect.5D|inspect]],&lt;br /&gt;
[[InterfaceActionsWML#.5Bitem.5D|item]],&lt;br /&gt;
[[EditorWML#The_.5Bitem_group.5D_tag|item_group]];&lt;br /&gt;
|-&lt;br /&gt;
|''J:''&lt;br /&gt;
[[UnitsWML#.5Bmovetype.5D|jamming_costs]],&lt;br /&gt;
[[InternalActionsWML#.5Bset_variable.5D|join]];&lt;br /&gt;
|-&lt;br /&gt;
|''K:'' &lt;br /&gt;
[[DirectActionsWML#.5Bkill.5D|kill]],&lt;br /&gt;
[[StatisticalScenarioWML|killed]];&lt;br /&gt;
|-&lt;br /&gt;
|''L:'' &lt;br /&gt;
[[InterfaceActionsWML#.5Blabel.5D|label]],&lt;br /&gt;
[[LanguageWML|language]],&lt;br /&gt;
[[SideWML|leader]],&lt;br /&gt;
[[AiWML#List_of_AI_Aspects|leader_goal]],&lt;br /&gt;
[[AbilitiesWML|leadership]], &lt;br /&gt;
[[AnimationWML#leading|leading_anim]], &lt;br /&gt;
[[AnimationWML#levelin|levelin_anim]],&lt;br /&gt;
[[AnimationWML#levelout|levelout_anim]], &lt;br /&gt;
[[DirectActionsWML#.5Blift_fog.5D|lift_fog]],&lt;br /&gt;
[[AI_Recruitment#Aspect_recruitment_instructions|limit]],&lt;br /&gt;
[[InternalActionsWML#.5Bset_variables.5D|literal]],&lt;br /&gt;
[[AddonsWML|load_resource]],&lt;br /&gt;
[[LocaleWML|locale]],&lt;br /&gt;
[[InterfaceActionsWML#.5Block_view.5D|lock_view]],&lt;br /&gt;
[[LuaWML|lua]];&lt;br /&gt;
|-&lt;br /&gt;
|''M:'' &lt;br /&gt;
[[UnitTypeWML#Other_tags|male]], &lt;br /&gt;
[[SavefileWML|menu_item]], &lt;br /&gt;
[[InterfaceActionsWML#.5Bmessage.5D|message]],&lt;br /&gt;
[[Micro AIs|micro_ai]],&lt;br /&gt;
[[AnimationWML#The_content_of_a_frame|missile_frame]],&lt;br /&gt;
[[ModificationWML|modification]],&lt;br /&gt;
[[SingleUnitWML|modifications]],&lt;br /&gt;
[[DirectActionsWML#.5Bmodify_ai.5D|modify_ai]],&lt;br /&gt;
[[DirectActionsWML#.5Bmodify_side.5D|modify_side]],&lt;br /&gt;
[[DirectActionsWML#.5Bmodify_turns.5D|modify_turns]],&lt;br /&gt;
[[DirectActionsWML#.5Bmodify_unit.5D|modify_unit]],&lt;br /&gt;
[[AddonsWML|modify_unit_type]],&lt;br /&gt;
[[ReplayWML|move]],&lt;br /&gt;
[[DirectActionsWML#.5Bmove_unit.5D|move_unit]],&lt;br /&gt;
[[InterfaceActionsWML#.5Bmove_unit_fake.5D|move_unit_fake]],&lt;br /&gt;
[[InterfaceActionsWML#.5Bmove_units_fake.5D|move_units_fake]],&lt;br /&gt;
[[AnimationWML#movement|movement_anim]], &lt;br /&gt;
[[UnitsWML#.5Bmovetype.5D|movement costs]],&lt;br /&gt;
[[UnitsWML#.5Bmovetype.5D|movetype]],&lt;br /&gt;
[[ScenarioWML|multiplayer]],&lt;br /&gt;
[[EraWML#Defining_Factions|multiplayer_side]],&lt;br /&gt;
[[MusicListWML#.5Bmusic.5D|music]];&lt;br /&gt;
|-&lt;br /&gt;
|''N:'' &lt;br /&gt;
[[ConditionalActionsWML#Meta-Condition_Tags|not]], &lt;br /&gt;
[[InterfaceActionsWML#.5Bobjectives.5D|note]];&lt;br /&gt;
|-&lt;br /&gt;
|''O:'' &lt;br /&gt;
[[DirectActionsWML#.5Bobject.5D|object]],&lt;br /&gt;
[[InterfaceActionsWML#.5Bobjectives.5D|objective]],&lt;br /&gt;
[[InterfaceActionsWML#.5Bobjectives.5D|objectives]],&lt;br /&gt;
[[DirectActionsWML#.5Bon_undo.5D|on_undo]],&lt;br /&gt;
[[InterfaceActionsWML#.5Bopen_help.5D|open_help]],&lt;br /&gt;
[[InterfaceActionsWML#.5Bmessage.5D|option]],&lt;br /&gt;
[[OptionWML|options]],&lt;br /&gt;
[[ConditionalActionsWML#Meta-Condition_Tags|or]];&lt;br /&gt;
|-&lt;br /&gt;
|''P:'' &lt;br /&gt;
[[IntroWML|part]], &lt;br /&gt;
[[AbilitiesWML#The_.5Bspecials.5D_tag|petrifies]], &lt;br /&gt;
[[DirectActionsWML#.5Bpetrify.5D|petrify]], &lt;br /&gt;
[[DirectActionsWML#.5Bplace_shroud.5D|place_shroud]], &lt;br /&gt;
[[AbilitiesWML#The_.5Bspecials.5D_tag|plague]], &lt;br /&gt;
[[AbilitiesWML#The_.5Bspecials.5D_tag|poison]], &lt;br /&gt;
[[UnitTypeWML#Other_tags|portrait]], &lt;br /&gt;
[[AnimationWML#post_movement|post_movement_anim]], &lt;br /&gt;
[[AnimationWML#pre_movement|pre_movement_anim]], &lt;br /&gt;
[[InternalActionsWML#.5Bfire_event.5D|primary_attack]], &lt;br /&gt;
[[InternalActionsWML#.5Bfire_event.5D|primary_unit]], &lt;br /&gt;
[[InterfaceActionsWML#.5Bprint.5D|print]], &lt;br /&gt;
[[DirectActionsWML#.5Bprogress_achievement.5D|progress_achievement]], &lt;br /&gt;
[[DirectActionsWML#.5Bput_to_recall_list.5D|put_to_recall_list]];&lt;br /&gt;
|-&lt;br /&gt;
|''R:'' &lt;br /&gt;
[[UnitsWML#.5Brace.5D|race]], &lt;br /&gt;
[[InternalActionsWML#.5Brandom_placement.5D|random_placement]], &lt;br /&gt;
recall&amp;amp;nbsp;([[DirectActionsWML#.5Brecall.5D|action]], [[ReplayWML|replay]]), &lt;br /&gt;
[[StatisticalScenarioWML|recalls]],&lt;br /&gt;
[[ReplayWML|recruit]], &lt;br /&gt;
[[AnimationWML#recruited|recruit_anim]], &lt;br /&gt;
[[AnimationWML#recruiting|recruiting_anim]], &lt;br /&gt;
[[StatisticalScenarioWML|recruits]], &lt;br /&gt;
[[InterfaceActionsWML#.5Bredraw.5D|redraw]],&lt;br /&gt;
[[AbilitiesWML|regenerate]],&lt;br /&gt;
[[InternalActionsWML#.5Bremove_event.5D|remove_event]],&lt;br /&gt;
[[InterfaceActionsWML#.5Bremove_item.5D|remove_item]], &lt;br /&gt;
[[DirectActionsWML#.5Bremove_object.5D|remove_object]], &lt;br /&gt;
[[DirectActionsWML#.5Bremove_shroud.5D|remove_shroud]], &lt;br /&gt;
[[InterfaceActionsWML#.5Bremove_sound_source.5D|remove_sound_source]], &lt;br /&gt;
[[DirectActionsWML#.5Bremove_time_area.5D|remove_time_area]], &lt;br /&gt;
[[DirectActionsWML#.5Bremove_trait.5D|remove_trait]],&lt;br /&gt;
[[InterfaceActionsWML#.5Bremove_unit_overlay.5D|remove_unit_overlay]],&lt;br /&gt;
[[ConditionalActionsWML#.5Brepeat.5D|repeat]],&lt;br /&gt;
[[DirectActionsWML#.5Breplace_map.5D|replace_map]], &lt;br /&gt;
[[DirectActionsWML#.5Breplace_schedule.5D|replace_schedule]], &lt;br /&gt;
[[ReplayWML|replay]], &lt;br /&gt;
[[SavefileWML|replay_start]],&lt;br /&gt;
[[DirectActionsWML#.5Breset_fog.5D|reset_fog]], &lt;br /&gt;
resistance&amp;amp;nbsp;([[AbilitiesWML|ability]], [[UnitsWML#.5Bmovetype.5D|unit]]),&lt;br /&gt;
[[UnitsWML#.5Bresistance_defaults.5D|resistance_defaults]],&lt;br /&gt;
[[ModificationWML#The_.5Bresource.5D_toplevel_tag|resource]],&lt;br /&gt;
[[InternalActionsWML#Flow_control_actions|return]],&lt;br /&gt;
[[InternalActionsWML#.5Brole.5D|role]], &lt;br /&gt;
[[TerrainMaskWML|rule]];&lt;br /&gt;
|-&lt;br /&gt;
|''S:'' &lt;br /&gt;
[[SavefileWML|save]], &lt;br /&gt;
[[ScenarioWML|scenario]],&lt;br /&gt;
[[InterfaceActionsWML#.5Bscreen_fade.5D|screen_fade]], &lt;br /&gt;
[[InterfaceActionsWML#.5Bscroll.5D|scroll]], &lt;br /&gt;
[[InterfaceActionsWML#.5Bscroll_to.5D|scroll_to]],&lt;br /&gt;
[[InterfaceActionsWML#.5Bscroll_to_unit.5D|scroll_to_unit]], &lt;br /&gt;
[[InternalActionsWML#.5Bfire_event.5D|secondary_attack]], &lt;br /&gt;
[[InternalActionsWML#.5Bfire_event.5D|secondary_unit]], &lt;br /&gt;
[[HelpWML|section]], &lt;br /&gt;
[[InterfaceActionsWML#.5Bselect_unit.5D|select_unit]], &lt;br /&gt;
[[ReplayWML|sequence]], &lt;br /&gt;
[[DirectActionsWML#.5Bset_achievement.5D|set_achievement]],&lt;br /&gt;
[[DirectActionsWML#.5Bset_extra_recruit.5D|set_extra_recruit]],&lt;br /&gt;
[[PersistenceWML|set_global_variable]],&lt;br /&gt;
[[InterfaceActionsWML#.5Bset_menu_item.5D|set_menu_item]], &lt;br /&gt;
[[DirectActionsWML#.5Bset_recruit.5D|set_recruit]],&lt;br /&gt;
[[EffectWML|set_specials]], &lt;br /&gt;
[[InternalActionsWML#.5Bset_variable.5D|set_variable]], &lt;br /&gt;
[[InternalActionsWML#.5Bset_variables.5D|set_variables]], &lt;br /&gt;
[[AnimationWML#sheath_weapon|sheath_weapon_anim]], &lt;br /&gt;
show_if&amp;amp;nbsp;([[InterfaceActionsWML#.5Bmessage.5D|message]], &lt;br /&gt;
[[InterfaceActionsWML#.5Bobjectives.5D|objective]], &lt;br /&gt;
[[InterfaceActionsWML#.5Bset_menu_item.5D|set_menu_item]]),&lt;br /&gt;
[[InterfaceActionsWML#.5Bshow_objectives.5D|show_objectives]],&lt;br /&gt;
[[SideWML|side]], &lt;br /&gt;
[[AbilitiesWML|skirmisher]], &lt;br /&gt;
[[OptionWML|slider]],&lt;br /&gt;
[[AbilitiesWML#The_.5Bspecials.5D_tag|slow]], &lt;br /&gt;
[[SavefileWML|snapshot]],&lt;br /&gt;
[[InterfaceActionsWML#.5Bsound.5D|sound]], &lt;br /&gt;
[[InterfaceActionsWML#.5Bsound_source.5D|sound_source]], &lt;br /&gt;
source&amp;amp;nbsp;([[ReplayWML|replay]], [[DirectActionsWML#.5Btunnel.5D|teleport]]),&lt;br /&gt;
[[UnitTypeWML#Other_tags|special_note]],&lt;br /&gt;
[[AbilitiesWML#The_.5Bspecials.5D_tag|specials]], &lt;br /&gt;
[[InternalActionsWML#.5Bset_variables.5D|split]],&lt;br /&gt;
[[Wesnoth_AI_Framework#Available_Stages|stage]], &lt;br /&gt;
[[AnimationWML#standing|standing_anim]], &lt;br /&gt;
[[StatisticalScenarioWML#The_.5Bstatistics.5D_tag|statistics]],&lt;br /&gt;
[[SingleUnitWML|status]], &lt;br /&gt;
[[InternalActionsWML#.5Bstore_gold.5D|store_gold]], &lt;br /&gt;
[[InternalActionsWML#.5Bstore_items.5D|store_items]], &lt;br /&gt;
[[InternalActionsWML#.5Bstore_locations.5D|store_locations]],&lt;br /&gt;
[[InternalActionsWML#.5Bstore_map_dimensions.5D|store_map_dimensions]],&lt;br /&gt;
[[InternalActionsWML#.5Bstore_reachable_locations.5D|store_reachable_locations]],&lt;br /&gt;
[[InternalActionsWML#.5Bstore_relative_direction.5D|store_relative_direction]],&lt;br /&gt;
[[InternalActionsWML#.5Bstore_side.5D|store_side]], &lt;br /&gt;
[[InternalActionsWML#.5Bstore_starting_location.5D|store_starting_location]], &lt;br /&gt;
[[InternalActionsWML#.5Bstore_time_of_day.5D|store_time_of_day]], &lt;br /&gt;
[[InternalActionsWML#.5Bstore_turns.5D|store_turns]], &lt;br /&gt;
[[InternalActionsWML#.5Bstore_unit.5D|store_unit]], &lt;br /&gt;
[[InternalActionsWML#.5Bstore_unit_defense.5D|store_unit_defense]], &lt;br /&gt;
[[InternalActionsWML#.5Bstore_unit_defense_on.5D|store_unit_defense_on]], &lt;br /&gt;
[[InternalActionsWML#.5Bstore_unit_type.5D|store_unit_type]], &lt;br /&gt;
[[InternalActionsWML#.5Bstore_unit_type_ids.5D|store_unit_type_ids]], &lt;br /&gt;
[[InternalActionsWML#.5Bstore_villages.5D|store_villages]], &lt;br /&gt;
[[IntroWML|story]], &lt;br /&gt;
[[AbilitiesWML#The_.5Bspecials.5D_tag|swarm]], &lt;br /&gt;
[[AchievementsWML|sub_achievement]],&lt;br /&gt;
[[ConditionalActionsWML#.5Bswitch.5D|switch]],&lt;br /&gt;
[[InternalActionsWML#.5Bsync_variable.5D|sync_variable]];&lt;br /&gt;
|-&lt;br /&gt;
|''T:'' &lt;br /&gt;
[[DirectActionsWML#.5Btunnel.5D|target]], &lt;br /&gt;
[[StatisticalScenarioWML#The_.5Bteam.5D_tag|team]],&lt;br /&gt;
teleport&amp;amp;nbsp;([[AbilitiesWML|ability]], [[DirectActionsWML#.5Bteleport.5D|action]]),&lt;br /&gt;
[[AnimationWML#pre_teleport|teleport_anim]],&lt;br /&gt;
[[DirectActionsWML#.5Bterrain.5D|terrain]], &lt;br /&gt;
[[UnitsWML#.5Bterrain_defaults.5D|terrain_defaults]],&lt;br /&gt;
[[TerrainGraphicsWML|terrain_graphics]], &lt;br /&gt;
[[TerrainMaskWML|terrain_mask]], &lt;br /&gt;
[[TerrainWML|terrain_type]], &lt;br /&gt;
[[ScenarioWML#The_.5Btest.5D_tag|test]],&lt;br /&gt;
[[InterfaceActionsWML#.5Btest_condition.5D|test_condition]],&lt;br /&gt;
[[TestWML#The_.5Btest_do_attack_by_id.5D_tag|test_do_attack_by_id]],&lt;br /&gt;
[[InterfaceActionsWML#.5Bmessage.5D|text_input]], &lt;br /&gt;
[[GettextForWesnothDevelopers#The_textdomain_tag|textdomain]],&lt;br /&gt;
[[ThemeWML|theme]],&lt;br /&gt;
[[ConditionalActionsWML#.5Bif.5D|then]],&lt;br /&gt;
[[TerrainGraphicsWML|tile]], &lt;br /&gt;
[[TimeWML|time]], &lt;br /&gt;
[[DirectActionsWML#.5Btime_area.5D|time_area]], &lt;br /&gt;
[[HelpWML|topic]], &lt;br /&gt;
[[HelpWML|toplevel]], &lt;br /&gt;
[[UnitsWML#.5Btrait.5D|trait]], &lt;br /&gt;
[[DirectActionsWML#.5Btransform_unit.5D|transform_unit]], &lt;br /&gt;
[[InternalActionsWML#.5Bfind_path.5D|traveler]], &lt;br /&gt;
[[ConditionalActionsWML#.5Btrue.5D|true]],&lt;br /&gt;
[[DirectActionsWML#.5Btunnel.5D|tunnel]];&lt;br /&gt;
|-&lt;br /&gt;
|''U:'' &lt;br /&gt;
[[InterfaceActionsWML#.5Bunhide_unit.5D|unhide_unit]], &lt;br /&gt;
[[SingleUnitWML|unit]],&lt;br /&gt;
[[InterfaceActionsWML#.5Bunit_overlay.5D|unit_overlay]], &lt;br /&gt;
[[UnitTypeWML|unit_type]], &lt;br /&gt;
[[InternalActionsWML#.5Bunit_worth.5D|unit_worth]], &lt;br /&gt;
[[UnitsWML|units]],&lt;br /&gt;
[[InterfaceActionsWML#.5Bunlock_view.5D|unlock_view]],&lt;br /&gt;
[[DirectActionsWML#.5Bunpetrify.5D|unpetrify]], &lt;br /&gt;
[[DirectActionsWML#.5Bunstore_unit.5D|unstore_unit]],&lt;br /&gt;
[[InternalActionsWML#.5Bunsynced.5D|unsynced]];&lt;br /&gt;
|-&lt;br /&gt;
| ''V:'' &lt;br /&gt;
[[InternalActionsWML#.5Bset_variables.5D|value]], &lt;br /&gt;
[[ConditionalActionsWML#.5Bvariable.5D|variable]],&lt;br /&gt;
[[VariablesWML#The_.5Bvariables.5D_tag|variables]],&lt;br /&gt;
[[TerrainGraphicsWML|variant]],&lt;br /&gt;
[[UnitTypeWML#Other_tags|variation]], &lt;br /&gt;
[[AnimationWML#victory|victory_anim]], &lt;br /&gt;
[[SideWML|village]],&lt;br /&gt;
[[UnitsWML#.5Bmovetype.5D|vision_costs]],&lt;br /&gt;
[[InterfaceActionsWML#.5Bvolume.5D|volume]];&lt;br /&gt;
|-&lt;br /&gt;
| ''W:'' &lt;br /&gt;
[[ConditionalActionsWML#.5Bwhile.5D|while]],&lt;br /&gt;
[[InterfaceActionsWML#.5Bwml_message.5D|wml_message]],&lt;br /&gt;
[[SchemaWML|wml_schema]];&lt;br /&gt;
|-&lt;br /&gt;
| ''Z:''&lt;br /&gt;
[[InterfaceActionsWML#.5Bzoom.5D|zoom]];&lt;br /&gt;
|}&amp;lt;includeonly&amp;gt;[[Category:WML Reference]]&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;A box with all the WML tags, each one linking to the page and section they are described in. This box should be included in each of the WML reference pages.&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Octalot</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=TestWML&amp;diff=71489</id>
		<title>TestWML</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=TestWML&amp;diff=71489"/>
		<updated>2023-07-02T17:35:10Z</updated>

		<summary type="html">&lt;p&gt;Octalot: Document [test_do_attack_by_id]&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{WML Tags}}&lt;br /&gt;
&lt;br /&gt;
The tags and macros on this page are for use in unit tests, they're defined in data/test and enabled when '''#ifdef TEST''' is true.&lt;br /&gt;
&lt;br /&gt;
The main '''[test]''' tag is documented on the [[ScenarioWML#The_.5Btest.5D_tag|ScenarioWML]] page.&lt;br /&gt;
&lt;br /&gt;
== The [test_do_attack_by_id] tag ==&lt;br /&gt;
&lt;br /&gt;
The '''[test_do_attack_by_id]''' tag is a wrapper for [[ReplayWML|[do_command][attack]]], taking unit ids instead of map coordinates. It has the following attributes:&lt;br /&gt;
&lt;br /&gt;
* '''attacker''' the unit that initiates the attack&lt;br /&gt;
* '''defender''' the unit being attacked&lt;br /&gt;
* '''weapon''' (unset by default) if set, is used as the value for [do_command][attack]weapon=&lt;br /&gt;
* '''defender_weapon''' (unset by default) if set, is used as the value for [do_command][attack]defender_weapon=&lt;br /&gt;
* '''resupply_attacks_left''' (unset by default) if set to an integer higher than attacker.attacks_left, then attacker.attacks_left will be set to this value before calling [do_command][attack]&lt;br /&gt;
&lt;br /&gt;
The reason for making this a test-only tag is that it can handle errors by failing the test, or by doing nothing and having the test fail later. Using unit IDs helps avoid hardcoding map coordinates in tests, and in tests the author is expected to know exactly which units should be involved. Even if this was a generic tag, it's likely that its only use outside tests would only be in events that already auto-store '''$unit''', and either auto-store '''$second_unit''' or already include a hardcoded '''x,y=''' filter.&lt;br /&gt;
&lt;br /&gt;
An alternative would be a generic tag taking SUFs for attacker and defender, but outside unit tests, there's a possibility of there being no unit matching the SUF, many units matching the SUF, or that the two units aren't adjacent to each other.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[LuaAPI/unit_test|LuaAPI for unit tests]]&lt;br /&gt;
&lt;br /&gt;
[[Category: WML Reference]]&lt;/div&gt;</summary>
		<author><name>Octalot</name></author>
		
	</entry>
</feed>