<?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=Darth+Fool</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=Darth+Fool"/>
	<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/Special:Contributions/Darth_Fool"/>
	<updated>2026-05-06T08:09:31Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.16</generator>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=Credits&amp;diff=15948</id>
		<title>Credits</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=Credits&amp;diff=15948"/>
		<updated>2007-06-18T17:56:10Z</updated>

		<summary type="html">&lt;p&gt;Darth Fool: /* Coders, (minor and major) */&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;
In July 2003, '''David White''' released the first version of Wesnoth. Since then, many people have joined the project, contributing in very different ways.&lt;br /&gt;
&lt;br /&gt;
== Developers ==&lt;br /&gt;
====Coders, (minor and major)====&lt;br /&gt;
* Alfredo Beaumont (ziberpunk) - autotools&lt;br /&gt;
* András Salamon ([[User:Ott|ott]]) - QA, bug fixing, subediting, game mechanics&lt;br /&gt;
* Benoît Timbert (Noyga) - coder&lt;br /&gt;
* Bram Ridder (Morloth) - editor improvements&lt;br /&gt;
* [[User:bruno|Bruno Wolff III]] - Campaign web interface, [[MainlineScenarios#The_Dark_Hordes|The Dark Hordes]] maintainer, bug fixing, minor coder&lt;br /&gt;
* Cédric Duval - coder, internationalization manager&lt;br /&gt;
* David Philippi (Torangan) - internationalization manager, wescamp&lt;br /&gt;
* [mailto:davidnwhite_AT_verizon.net David White] (Sirp) - founder, lead developer, scenario designer&lt;br /&gt;
* Dominic Bolin (Xan) - programmer&lt;br /&gt;
* Guillaume Melquiond (silene) - coding, bug fixes&lt;br /&gt;
* Jérémy Rosen (Boucman) - coder&lt;br /&gt;
* Jörg Hinrichs (Yogi Bear/YogiHH) - coder&lt;br /&gt;
* Jon Daniel (forcemstr) - coder, bug fixes&lt;br /&gt;
*  J. W. C. McNabb (Darth Fool) - coder, graphics&lt;br /&gt;
* [mailto:justin.zaun_AT_gmail.com Justin Zaun] (jzaun) - coder, scenario designer&lt;br /&gt;
* [mailto:erl_AT_erl.se Kristoffer Erlandsson] (erl) - help system, editor&lt;br /&gt;
* Nicolas Weeger (ryo) - Python API&lt;br /&gt;
* [mailto:patrick_x99(AT).hotmail.com Patrick Parker] ([[User:Sapient|Sapient]]) - improvements to user interface, WML engine, various features&lt;br /&gt;
* [mailto:philippe.plantier_AT_naema.org Philippe Plantier] ([[User:Ayin|Ayin]]) - several parts of the code, notably terrain graphics code&lt;br /&gt;
* [mailto:ydirson_AT_altern.org Yann Dirson] - gettext support, tinygui&lt;br /&gt;
* [mailto:esr&amp;amp;x40;thyrsus.com Eric S. Raymond] - macro and tools cleanup&lt;br /&gt;
&lt;br /&gt;
====Miscellaneous====&lt;br /&gt;
* Benjamin Drieu (benj) - campaign writer (wrote &amp;quot;Son of the Black Eye&amp;quot;)&lt;br /&gt;
* [mailto:dragonking_AT_o2.pl Bartek Waresiak] (Dragonking) - multiplayer balancing&lt;br /&gt;
* Crossbow/Miyo - administrator, release manager&lt;br /&gt;
* Francisco Muñoz (fmunoz) - artwork manager, many images, scenario designer (also listed below)&lt;br /&gt;
* Hogne Håskjold (frame) - terrain designer (also listed below)&lt;br /&gt;
* [mailto:isaac_AT_sindominio.net Isaac Clerencia] - administrator, release manager, debian packager&lt;br /&gt;
* James Spencer (Shade) - campaign writer (wrote &amp;quot;The Rise of Wesnoth&amp;quot;)&lt;br /&gt;
* [mailto:jorda_AT_ettin.org Jordà Polo] (ettin) - website, i18n&lt;br /&gt;
* Joseph Simmons (Turin) - campaign writer, some graphics (wrote &amp;quot;The Eastern Invasion,&amp;quot; and others)&lt;br /&gt;
* Mark Michelsen (skovbaer) - internationalization manager&lt;br /&gt;
* Mike Quiñones (Doc Paterson) - multiplayer balancing, multiplayer maps&lt;br /&gt;
* [mailto:Crazy-Ivanovic_AT_gmx.net Nils Kneuper] (Ivanovic) - administrator, campaign maintainer (Two Brothers), internationalization manager, release manager&lt;br /&gt;
* Richard Kettering (Jetryl) - artwork manager, many images (also listed below)&lt;br /&gt;
* Richard S. (Noy) - multiplayer balancing&lt;br /&gt;
* Soliton - multiplayer balancing&lt;br /&gt;
* Susanna Björverud (sanna) - internationalization manager&lt;br /&gt;
* [mailto:kleinfel_AT_wpi.edu Zack Kleinfeld] - multiplayer maps, unit balancing&lt;br /&gt;
&lt;br /&gt;
====Unclassified====&lt;br /&gt;
* Jan Zvánovec (jaz)&lt;br /&gt;
* John B. Messerly (jbm)&lt;br /&gt;
* J.R. Blain (Cowboy)&lt;br /&gt;
* Maksim Orlovich (SadEagle)&lt;br /&gt;
* Zas&lt;br /&gt;
&lt;br /&gt;
== Artists ==&lt;br /&gt;
==== Major Contributors ====&lt;br /&gt;
* Francisco Muñoz (fmunoz) - Founding Artist and former lead artist, worked consistently on all aspects till around v0.7-0.9.&lt;br /&gt;
* Richard Kettering [http://www.wesnoth.org/wiki/User:Jetryl (Jetryl)] - Current art director/slave, major focus on sprites, portraits, buildings, and icons&lt;br /&gt;
* Hogne Håskjold (frame/freim) - Former director of terrain art, made much of the current terrains (esp. mountains)&lt;br /&gt;
* J. W. Bjerk [http://www.wesnoth.org/wiki/User:Eleazar (Eleazar)] - Terrain-art lead. Made chasm, cave, water, etc, sprite animations, various visual tweaks and clean-ups&lt;br /&gt;
* Pekka Aikio (pekka) - tiles, esp. castles, and attack icons&lt;br /&gt;
* Lari Nieminen (zookeeper) - Current sprite animation director and WML wizard&lt;br /&gt;
* James Woo (Pickslide) - portraits (major focus on orcs and campaigns, especially UtBS, TEI, TSoF)&lt;br /&gt;
* Jason Lutes - portraits (major focus on humans, some campaign portraits)&lt;br /&gt;
* ?? (Neoriceisgood) - sprite creator and animator (major focus on drakes, dwarves, saurians)&lt;br /&gt;
* Peter Geinitz (Shadow/Wayfarer) - sprite creator and animator&lt;br /&gt;
&lt;br /&gt;
==== Moderate Contributors ====&lt;br /&gt;
* Alex Jarocha-Ernst (Jormungandr) - portraits&lt;br /&gt;
* Moritz Göbelbecker (mog) - tiles, esp. swamp, encampment, ice, and work with lava/chasm&lt;br /&gt;
* Erkki Lonkainen (Eternal) - created and animated many replacement sprites (esp. ogre, orc assassin &amp;amp; spear units, and cockatrice)&lt;br /&gt;
* Maximiliano Buis (Redeth) - Made nearly all of the idle animations, and some death animations (as of 1.3.1)&lt;br /&gt;
* Leonhard ? (Leonhard) - made several of the new attack icons&lt;br /&gt;
* Michael Gil de Muro (grp21) - portraits (for the campaign &amp;quot;The Rise of Wesnoth&amp;quot;)&lt;br /&gt;
* Robert Bolin (Zebulon) - tiles, sprite editing and animations&lt;br /&gt;
* Christophe Anjard (Christophe33) - made many of the old (c. v0.6) terrains, and some sprites for the dwarves&lt;br /&gt;
* Johann de Venecia (Johann) - drew the new campaign story art for HttT&lt;br /&gt;
* Mark Goodenough (Ranger M) - Sprite animator&lt;br /&gt;
&lt;br /&gt;
==== Minor Contributors ====&lt;br /&gt;
&lt;br /&gt;
* Eli Dupree (Elvish Pillager) - sprites and animations&lt;br /&gt;
* Murray Cook (Zhukov) - Sprite animator&lt;br /&gt;
* Gerald Clears (Smok'em Jags) - sprite animator&lt;br /&gt;
* Jesse Holland (Kestenvarn) - map illustrator, designed the current map for HttT&lt;br /&gt;
* Mikko Kraft (Deserter) - Sprite animator&lt;br /&gt;
* Michael Mielewczik (Mille) - Sprite animator&lt;br /&gt;
* Stephen Stone (Disto) - Sprite animator&lt;br /&gt;
* Andrew James Patterson (Kamahawk) - sprites&lt;br /&gt;
* Diego Brea (Cobretti) - sprite creator/animator&lt;br /&gt;
* ?? (antwerpz) - sprite creator/animator for old saurian units&lt;br /&gt;
* Gareth Miller (Gafgarion) - made some early sprites/tiles&lt;br /&gt;
* James Barton (Sangel) - sprites&lt;br /&gt;
* John Muccigrosso (Eponymous Archon) - made some early sprites, such as the human bowmen&lt;br /&gt;
* ?? (Slainte) - made sprites for c. v0.6 mages, also made many of the old attack icons&lt;br /&gt;
* ?? (Svetac) - made many of the old attack icons&lt;br /&gt;
* Johanna Manninen (lohari) - edited tiles, ported freeciv tiles used in very early versions of wesnoth&lt;br /&gt;
* Tristan Millner (tatmf) - made portrait of dwarven fighter&lt;br /&gt;
* EEL (EELuminatus) - Made death animations for the wose line.&lt;br /&gt;
* Mattias Westlund (West) - new colored cursors, TB portrait&lt;br /&gt;
* Eric Holdos (Rev. V!) - Made a few extra frames for the elvish captain/hero.&lt;br /&gt;
* Musketaquid - animated windmill&lt;br /&gt;
&lt;br /&gt;
==== Very Minor Contributors ====&lt;br /&gt;
* Gideon Chia (Deonjo) - new &amp;quot;units&amp;quot; icon for general status bar&lt;br /&gt;
* John-Robert Funck (XJaPaN) - sprite animator&lt;br /&gt;
* Anton Ecker (Kaldred) - burnt villages&lt;br /&gt;
* Joe (battlestar) - some scenery graphics including burnt tent.&lt;br /&gt;
* Jonatan Alamà (tin) - made red logo used until before v1.0&lt;br /&gt;
* Jimmy Olsson (Azlan) - made old icons for windows version&lt;br /&gt;
* Randall Walls (slightcrazed) - sprite animator&lt;br /&gt;
* Jason Frailey (Valdroni) - made scorpion portrait&lt;br /&gt;
* Nicholas Kerpan (Thrawn) - made human theif portrait&lt;br /&gt;
* ?? (Highhole) - revised storm trident&lt;br /&gt;
* Irwin Ismail (Swordy) - original projectile/attack icon for chakram&lt;br /&gt;
* Evan Crook (Flametrooper) - Sprite animator (TC conversion)&lt;br /&gt;
* Daniel Borgmann (dborg) - semi-transparent map grid&lt;br /&gt;
* Garrett Wessner (Stilgar) - gold coin-pile&lt;br /&gt;
* Javier Hoyos (Vendanna) - naga hunter attack frames&lt;br /&gt;
&lt;br /&gt;
== Musicians ==&lt;br /&gt;
* Aleksi Aubry-Carlson (Aleksi) - music coordinator/composer&lt;br /&gt;
* Joseph Toscano (zhaymusic.com) - music&lt;br /&gt;
* Pau Congost - music&lt;br /&gt;
* Fredrik Lindroth - music&lt;br /&gt;
* Timothy Pinkham (TimothyP) - music coordinator/composer&lt;br /&gt;
&lt;br /&gt;
== Translators ==&lt;br /&gt;
* adson - hungarian translation&lt;br /&gt;
* İhsan Akın - turkish translation&lt;br /&gt;
* Agata Chmiel - polish translation&lt;br /&gt;
* Aleksej Korgenkov (Grimpanto) - esperanto translation&lt;br /&gt;
* Alessio D'Ascanio (otaku) - italian translation&lt;br /&gt;
* Alexander Alexiou (Santi) - greek translation&lt;br /&gt;
* Alexander Kjäll (capitol) - swedish translation&lt;br /&gt;
* Alexandr Menovchicov - russian translation&lt;br /&gt;
* Alexey Remizov - russian translation&lt;br /&gt;
* Alexey Zakharchenko - russian translation&lt;br /&gt;
* Alfredo Beaumont (ziberpunk) - basque translation&lt;br /&gt;
* Ambra Viviani Loos - brazilian portuguese translation&lt;br /&gt;
* Americo Iacovizzi (DarkAmex) - italian translation&lt;br /&gt;
* Anders K. Madsen (madsen) - danish translation&lt;br /&gt;
* András Salamon ([[User:Ott|ott]]) - afrikaans, english and hungarian translation&lt;br /&gt;
* Andre Schmidt (schmidta) - german translation&lt;br /&gt;
* Anežka Bubeníčková (Bubu) - czech translation&lt;br /&gt;
* Ankka - finnish translation&lt;br /&gt;
* Anton Tsigularov (Atilla) - bulgarian translation&lt;br /&gt;
* Arkadiusz Danilecki (szopen) - polish translation&lt;br /&gt;
* Arnaud Garoux (La vie en wose) - french translation&lt;br /&gt;
* Arne Deprez - dutch translation&lt;br /&gt;
* Artur R. Czechowski - polish translation&lt;br /&gt;
* Åse Petersson (tintin) - swedish translation&lt;br /&gt;
* Aurélien Brevers (Breversa) - french translation&lt;br /&gt;
* Azamat Hackimov ([[User:Winterheart|winterheart]]) - russian translation&lt;br /&gt;
* Bartek Waresiak (Dragonking) - polish translation&lt;br /&gt;
* Beer (Eddi) - hungarian translation&lt;br /&gt;
* Benoit Astruc - french translation&lt;br /&gt;
* Benoît Timbert (Noyga) - french translation&lt;br /&gt;
* Bjarke Sørensen (basher) - danish translation&lt;br /&gt;
* BlueStar - japanese translation&lt;br /&gt;
* Boris Stumm (quijote_) - german translation&lt;br /&gt;
* BOrsuk - polish translation&lt;br /&gt;
* Branko Kokanovic (kokan) - serbian translation&lt;br /&gt;
* Bruno Fève (PP) - french translation&lt;br /&gt;
* [mailto:caslav_DOT_ilic_AT_gmx_DOT_net Časlav Ilić] - serbian translation&lt;br /&gt;
* Cédric Duval - french translation&lt;br /&gt;
* Carles Company (brrr) - catalan translation&lt;br /&gt;
* Celso Goya - brazilian portuguese translation&lt;br /&gt;
* Christoph Berg (chrber) - german translation&lt;br /&gt;
* [mailto:cbterra_AT_gmail.com Claudio Terra] - brazilian portuguese translation&lt;br /&gt;
* Claus Aranha - brazilian portuguese translation&lt;br /&gt;
* crys0000 - italian translation&lt;br /&gt;
* Dan Rosàs Garcia (focks) - catalan translation&lt;br /&gt;
* Damien Jacquot - french translation&lt;br /&gt;
* Daniel López (Azazelo) - catalan translation&lt;br /&gt;
* DaringTremayne - french translation&lt;br /&gt;
* David Nečas (Yeti) - czech translation&lt;br /&gt;
* dentro - hungarian translation&lt;br /&gt;
* Denica Mincheva - bulgarian translation&lt;br /&gt;
* Enes Akın (yekialem) - turkish translation&lt;br /&gt;
* Erik J. Mesoy (Circon) - norwegian translation&lt;br /&gt;
* Eugenio Favalli (ElvenProgrammer) - italian translation&lt;br /&gt;
* Federico Tomassetti - italian translation&lt;br /&gt;
* Flamma - spanish translation&lt;br /&gt;
* Florence Guettaa (inflow) - french translation&lt;br /&gt;
* Foppe Benedictus - dutch translation&lt;br /&gt;
* Francesco Lorenzon (Likso) - esperanto translation&lt;br /&gt;
* Franciso Muñoz (fmunoz) - spanish translation&lt;br /&gt;
* François Mariage (Paquito) - french translation&lt;br /&gt;
* François Orieux - french translation&lt;br /&gt;
* Gabriel Rodríguez (Chewie) - spanish translation&lt;br /&gt;
* Gaute Jao (Bombadil) - norwegian translation&lt;br /&gt;
* Geoffroy Douillié ([[User:Gdou|Gdou]]) - french translation&lt;br /&gt;
* Georgi Dimitrov (oblak)- bulgarian translation&lt;br /&gt;
* Gérard Bodin - french translation&lt;br /&gt;
* Gerfried Fuchs ([[User:Rhonda|Rhonda]]) - german translation&lt;br /&gt;
* Gilluin - hungarian translation&lt;br /&gt;
* Guillaume Duwelz-Rebert - french translation&lt;br /&gt;
* [mailto:massart.guillaume_AT_wanadoo.fr Guillaume Massart (Piou2fois)] - french translation&lt;br /&gt;
* Guillaume Melquiond (silene) - french translation&lt;br /&gt;
* Hallvard Norheim Bø (Lysander) - norwegian translation&lt;br /&gt;
* Harry Kaimenas - greek translation&lt;br /&gt;
* Håvard Korsvoll - norwegian translation&lt;br /&gt;
* Huang huan (unicon) - chinese translation&lt;br /&gt;
* Hugo Gerlach (Entrimo) - swedish translation&lt;br /&gt;
* Ilya Kaznacheev - russian translation&lt;br /&gt;
* Ilya Kotov - russian translation&lt;br /&gt;
* Ivan Kovacs - slovak translation&lt;br /&gt;
* isazi - italian translation&lt;br /&gt;
* Iván Herrero (navitux) - spanish translation&lt;br /&gt;
* Jaka Kranjc (lynx) - slovenian translation&lt;br /&gt;
* Jan Greve (Jan) - german translation&lt;br /&gt;
* Jan-Heiner Laberenz (jan-heiner) - german translation&lt;br /&gt;
* Jean Privat (Tout) - french translation&lt;br /&gt;
* Jean-Luc Menut - french translation&lt;br /&gt;
* Jean-Luc Richard (Le Gnome) - french translation&lt;br /&gt;
* Jehan Hysseo (Jey) - french translation&lt;br /&gt;
* Jérémy Rosen (Boucman) - french translation&lt;br /&gt;
* Jesper Fuglsang Wolff (ulven) - danish translation&lt;br /&gt;
* Joan Queralt - catalan translation&lt;br /&gt;
* Joe Hansen - danish translation&lt;br /&gt;
* Joeri Melis - dutch translation&lt;br /&gt;
* Jonatan Alamà (tin) - catalan translation&lt;br /&gt;
* [mailto:jorda_AT_ettin.org Jordà Polo] (ettin) - catalan translation coordinator&lt;br /&gt;
* Jose Gordillo (kilder) - spanish and catalan translation&lt;br /&gt;
* Jose Manuel Gomez (joseg) - spanish translation&lt;br /&gt;
* Joset Anthony Zamora (sophie^) - filipino translation&lt;br /&gt;
* Julien Moncel - french translation&lt;br /&gt;
* Julien Tailleur - french translation&lt;br /&gt;
* Julen Landa (genars) - basque translation&lt;br /&gt;
* Jussi Rautio (jgrr) - finnish translation&lt;br /&gt;
* Kai Ensenbach (Pingu) - german translation&lt;br /&gt;
* Kékkői László (BlackEvil) - hungarian translation&lt;br /&gt;
* Karol Nowak (grzywacz) - polish translation&lt;br /&gt;
* Katerina Sykioti - greek translation&lt;br /&gt;
* Kertész Csaba - hungarian translation&lt;br /&gt;
* Khiraly - hungarian translation&lt;br /&gt;
* Kim Woong (Kazya) - korean translation&lt;br /&gt;
* kko - finnish translation&lt;br /&gt;
* Konstantinos Karasavvas - greek translation&lt;br /&gt;
* Konstantinos Egarhos - greek translation&lt;br /&gt;
* Kosif -  turkish translation&lt;br /&gt;
* Kovács Dániel - hungarian translation&lt;br /&gt;
* krix - hungarian translation&lt;br /&gt;
* Lala - dutch translation&lt;br /&gt;
* Leo Danielson (Lugo Moll) - swedish translation&lt;br /&gt;
* Luciano Montanaro (Luciano) - italian translation&lt;br /&gt;
* Lukáš Faltýnek - czech translation&lt;br /&gt;
* Ľubo Fajth - esperanto translation&lt;br /&gt;
* Maarten Albrecht - dutch and esperanto translation&lt;br /&gt;
* Mark Michelsen (skovbaer) - danish translation&lt;br /&gt;
* Mark Polo (mpolo) - latin translation&lt;br /&gt;
* Mark Recasens - catalan translation&lt;br /&gt;
* Mart Tõnso - estonian translation&lt;br /&gt;
* Martin Dzbor - slovak translation&lt;br /&gt;
* Martin Šín - czech translation&lt;br /&gt;
* Matej Repinc - slovenian translation&lt;br /&gt;
* Mathias Bundgaard Svensson (freaken) - danish translation&lt;br /&gt;
* Matias Parmala - finnish translation&lt;br /&gt;
* methinks - polish translation&lt;br /&gt;
* Michał Jedynak (Artanis) - polish translation&lt;br /&gt;
* Michał Ligowski (misiorysio) - polish translation&lt;br /&gt;
* Michel Loos - brazilian portuguese translation&lt;br /&gt;
* Michel Poléni (Thanatloc) - french translation&lt;br /&gt;
* Mik2303 - greek translation&lt;br /&gt;
* Mikel Olasagasti (Hey_neken) - basque translation&lt;br /&gt;
* Mikko Kraft (deserter) - finnish translation&lt;br /&gt;
* Mintaka - czech translation&lt;br /&gt;
* Naoki Iimura (amatubu) いいむらなおき - japanese translation&lt;br /&gt;
* Nico Oliver - afrikaans translation&lt;br /&gt;
* Nicolas Boudin (Blurgk) - french translation&lt;br /&gt;
* Nikolay Vladimirov (Turki) - bulgarian translation&lt;br /&gt;
* [mailto:Crazy-Ivanovic_AT_gmx.net Nils Kneuper] (Ivanovic) - german translation&lt;br /&gt;
* [mailto:okyada_AT_gmail.com Nobuhito Okada] 岡田信人 - japanese translation&lt;br /&gt;
* [mailto:tapik_AT_buchtovi.cz Oto Buchta] ([[User:Tapik|tapik]]) - czech translation&lt;br /&gt;
* Pau Rul·lan Ferragut - catalan translation&lt;br /&gt;
* Paweł Stradomski - polish translation&lt;br /&gt;
* Paweł Tomak - polish translation&lt;br /&gt;
* paxed - finnish translation&lt;br /&gt;
* Petr Kopač (Ferda) - czech translation&lt;br /&gt;
* Petr Kovár (Juans) - czech translation&lt;br /&gt;
* [mailto:philippe.plantier_AT_naema.org Philippe Plantier] ([[User:Ayin|Ayin]]) - french translation&lt;br /&gt;
* Pieter Vermeylen (Onne) - dutch translation&lt;br /&gt;
* P&amp;amp;#305;nar Yanarda&amp;amp;#287; (moonquelle) - turkish translation&lt;br /&gt;
* Q - japanese translation&lt;br /&gt;
* Rastislav Šarišský (Asto) - esperanto translation&lt;br /&gt;
* Renato Cunha - brazilian portuguese translation&lt;br /&gt;
* Ricardo Sodré Andrade - brazilian portuguese translation&lt;br /&gt;
* Roberto Garcia (Motxales) - catalan translation&lt;br /&gt;
* Roberto Romero (sildur) - spanish translation&lt;br /&gt;
* Roel Thijs (Roel) - dutch translation&lt;br /&gt;
* Roger Koot - dutch translation&lt;br /&gt;
* RokStar - italian translation&lt;br /&gt;
* Roman Tuchin (Sankt) - russian translation&lt;br /&gt;
* Rudolf Orság - czech translation&lt;br /&gt;
* Ruben Philipp Wickenhäuser (The Very Uhu) - german translation&lt;br /&gt;
* Sébastien Raynaud (Galactic turkey) - french translation&lt;br /&gt;
* Sérgio de Miranda Costa -  brazilian portuguese translation&lt;br /&gt;
* Selim Farsakoğlu -  turkish translation&lt;br /&gt;
* Sofronius - czech translation&lt;br /&gt;
* Spiros, Giorgis - greek translation&lt;br /&gt;
* [mailto:sreckotoroman_AT_gmail_DOT_com Srećko Toroman] (FreeCraft) - serbian translation&lt;br /&gt;
* Stefan Bergström (tephlon) - swedish translation&lt;br /&gt;
* Stephan Grochtmann (Schattenstephan) - german translation&lt;br /&gt;
* [mailto:susanna.bjorverud_AT_telia.com Susanna Björverud] (sanna) - swedish translation&lt;br /&gt;
* Susanne Mesoy (Rarlgland) - norwegian translation&lt;br /&gt;
* Széll Tamás (TomJoad) - hungarian translation&lt;br /&gt;
* Takanobu Hirai - japanese translation&lt;br /&gt;
* Tiago Souza (Salvador) - brazilian portuguese translation&lt;br /&gt;
* Tobe Deprez - dutch translation&lt;br /&gt;
* Uz-Valentin Friedrich - german translation&lt;br /&gt;
* Vít Komárek - czech translation&lt;br /&gt;
* Vít Krčál - czech translation&lt;br /&gt;
* [http://www.viliam.bur.sk/ Viliam Búr] - slovak translation&lt;br /&gt;
* Vladimír Slávik - czech translation&lt;br /&gt;
* Vlad Glagolev (Stelz) - russian translation&lt;br /&gt;
* vonHalenbach - german translation&lt;br /&gt;
* William Dupré - french translation&lt;br /&gt;
* wint3r - swedish translation&lt;br /&gt;
* [mailto:ydirson_AT_altern.org Yann Dirson] - french translation&lt;br /&gt;
* Yuji Matsumoto - japanese translation&lt;br /&gt;
* Zas - french translation&lt;br /&gt;
&lt;br /&gt;
== Other Contributions ==&lt;br /&gt;
* Ben Anderman (crimson_penguin) - unit list&lt;br /&gt;
* Cyril Bouthors (CyrilB) - debian packager, patron&lt;br /&gt;
* Dacyn - scenario designer&lt;br /&gt;
* Darryl Dixon - packager&lt;br /&gt;
* edge - packager&lt;br /&gt;
* Francesco Gigli (Jaramir) - wiki, wesnoth.slack.it&lt;br /&gt;
* Frédéric Wagner&lt;br /&gt;
* Jay Hopping - packager&lt;br /&gt;
* Jeff Breidenbach (Jab) - Bilinear interpolation&lt;br /&gt;
* Joshua Northey (Becephalus) - multiplayer maps&lt;br /&gt;
* Laurent Wacrenier (lwa) - Mac OS X packager&lt;br /&gt;
* Marcin Konicki (ahwayakchih) - BeOS packager&lt;br /&gt;
* Marcus Phillips (Sithrandel) - Mac OS X packager (for v1.0 and before)&lt;br /&gt;
* Mark Michelsen (skovbaer) - slackware packager&lt;br /&gt;
* Miguel Zapico (elricz) - unit list translations&lt;br /&gt;
* Peter Groen (pg) - multiplayer maps&lt;br /&gt;
* Ruben Philipp Wickenhäuser (The Very Uhu) - multiplayer maps&lt;br /&gt;
* Sam Phillips (dark172) - creation of campains and multiplayer maps&lt;br /&gt;
* Tom Chance (telex4) - multiplayer maps, scenario balancing&lt;br /&gt;
* Vlad Glagolev (Stelz) - OpenBSD packager&lt;br /&gt;
&lt;br /&gt;
{{Home}}&lt;/div&gt;</summary>
		<author><name>Darth Fool</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Darth_Fool&amp;diff=15877</id>
		<title>User:Darth Fool</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Darth_Fool&amp;diff=15877"/>
		<updated>2007-06-15T20:37:56Z</updated>

		<summary type="html">&lt;p&gt;Darth Fool: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is intended as a development page for the documentation of the new AI that I am working on.  When the AI is officially released, the information will be migrated to the official wml reference pages.  Some of this is partially implemented, some of it has not yet been implemented, and some of these are planned changes to something that is already implemented, and all of it is subject to change in the code without notification.  So, in short, don't start using this in your scenarios and expect it to work just yet, or even to still be the same by the time of the official release.  This is primarily meant as a way to organize my thoughts and reduce the time from when the code is complete to when the new AI is fully documented.  You have been warned.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''The Grand Idea'''&lt;br /&gt;
&lt;br /&gt;
Ok, so what is this AI supposed to accomplish anyways.  Well, it has many goals, but most of them can be wrapped up in the following statement: The AI should be sufficiently flexible to be able to specify parameters so that it can win Heir To The Throne on easy without cheating.  That means, no knowing where things are before they are discovered (scepter of fire), no knowing where hidden or fogged units are, etc... Along the way, we should end up with an AI that makes it quite possible to create much more interesting AI behaviour in campaigns.  so, how to accomplish this?&lt;br /&gt;
&lt;br /&gt;
'''Orders'''&lt;br /&gt;
&lt;br /&gt;
The basic scheme begins with a simple concept.  The AI WML will be able to specify the order in which various objectives are accomplished, and by what units those orders are filled.  Consider that currently, the AI pursues its goals in a very specific order (combat, village capture, healing, retreat, recruit...) &lt;br /&gt;
 &lt;br /&gt;
So, the first order of business is to enable the abilty to specify the order in which commands are executed.  As a further refinement, we allow the order to restrict what type of units the order applies to.  Inside the order are a series of commands that are executed.  Units that fill that order remember which order they are following (via the ai_special tag in the unit) until they are reassigned.  Units that have no ai_special are part of the &amp;quot;default&amp;quot; orders.  Initially, any [fill] commands are executed within the order.  After this, units are sorted according to any [sort] commands.  Then, for each unit the remaining commands are executed in order by each unit before the next unit begins executing the commands.&lt;br /&gt;
&lt;br /&gt;
 [order]#This tag specifies the beginning of an order description.  &lt;br /&gt;
   name = #the name of the order.  Acts to id units that are part of this order&lt;br /&gt;
   id = #uniq ID of this order tag.  Used when executing summon commands.&lt;br /&gt;
   execute = # yes(default) or no.  If yes will execute when encountered.  &lt;br /&gt;
             # If no, only executed if explicitly called by an execute command.&lt;br /&gt;
   memory = #In the various calculations, use the last seen locations of units that &lt;br /&gt;
            # are now invisible if they were last seen within memory turns.&lt;br /&gt;
   priority = # determines if order can steal units from other orders during fill. &lt;br /&gt;
              # can only steal units from orders with strictly lower priority.&lt;br /&gt;
              # units of equal or greater priority will ignore the request to fill &lt;br /&gt;
              # the order.  default value = 0&lt;br /&gt;
   [fill]#command to attempt to fill the order with units that match the appropriate unit filter&lt;br /&gt;
     number = #command of how many units to fill that match the filter&lt;br /&gt;
     [filter]#standard unit filter.[/filter]&lt;br /&gt;
     sort = #evaluation of how to choose which unit to accept first.  Higher value chosen first.&lt;br /&gt;
   [/fill]&lt;br /&gt;
   [sort] &lt;br /&gt;
     [filter]#standard unit filter.&lt;br /&gt;
     [/filter]&lt;br /&gt;
     sort = #evaluation of how to choose which unit to accept first.  Higher value chosen first.&lt;br /&gt;
   [/sort]   &lt;br /&gt;
   [command]#generic tags for all commands&lt;br /&gt;
     [filter]#standard unit filter.  limits which units will execute this command.&lt;br /&gt;
     [/filter]&lt;br /&gt;
     type = #type of command to execute.  command specific WML tags below&lt;br /&gt;
   [/command]#move command&lt;br /&gt;
     type = moveto # move to target.&lt;br /&gt;
   [command]&lt;br /&gt;
     type = set_order # change the unit to be a part of a different order&lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = break # stop executing this order for this unit.  &lt;br /&gt;
     #Should really have a filter otherwise makes all following commands never be executed.&lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = attack # execute an attack.  Does not move the unit! &lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = recruit # recruit units.  Does not move the unit!&lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = execute # execute the following order before continuing.&lt;br /&gt;
     id = #id of order to execute&lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = summon # summon units to give current unit a boost before combat.  &lt;br /&gt;
     #possibly will be eliminated in favor of the execute command.&lt;br /&gt;
   [/command]&lt;br /&gt;
  [/order]&lt;br /&gt;
&lt;br /&gt;
Note that orders with the same name can be used multiple times and will keep the same units between calls, but they should each have a unique id.&lt;br /&gt;
&lt;br /&gt;
'''Evaluators'''&lt;br /&gt;
&lt;br /&gt;
Within the many options, there will be various parameters that need to be calculated, especially numeric ones.  A large number of them will be possible to be specified as an expression that will be evaluated at the time the order is being executed.  Most of these will be numeric.  To make this more flexible, these values will allow the use of simple arithmetic expressions, wml variables, and some specialized function calls.  A typical example might look like:&lt;br /&gt;
&lt;br /&gt;
  sort_value = &amp;quot;$villages + (2*$enemies) / @distance(@unit(),@target(fool))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
note that the quotes are necessary to prevent certain preprocessor actions.&lt;br /&gt;
&lt;br /&gt;
In this case the first thing that are evaluated are the WML variables.  Then functions that are designated by beginning with an @ followed by the function name and a parenthetical expression that encloses a parameter string.  Typically these functions will evaluate the parameter string in a similar manner before returning a value.  Note that the string inside the parenthesis of a function will be passed as a whole into the function before being evaluated.  Typically the first thing that each function will do is re-evaluate the string, but this is not a requirement.   &lt;br /&gt;
&lt;br /&gt;
The next thing that is evaluated are things within paranthesis and finally the arithmetic expression evaluated with the standard precedence.&lt;br /&gt;
&lt;br /&gt;
Items within an individual command will be evaluated before the command is executed.&lt;br /&gt;
Items within an individual order will be evaluated at the begining of the order for each unit in the order.&lt;br /&gt;
Items within the AI tag but not in either of the above will be evaluated only at the beginning of the turn.&lt;br /&gt;
&lt;br /&gt;
The use of evaluators will make it possible to control many of the AI parameters indirectly via WML variables that are set/changed within events.&lt;br /&gt;
&lt;br /&gt;
'''@ Functions'''&lt;br /&gt;
The following functions are planned for use within the evaluators.  Parameters are generally a comma seperated list.  Required parameters must be in the proper order at the beginning of the list.  If optional parameters are allowed, they go at the end of the list and are generally of the form &amp;quot;A=b&amp;quot; where A is the optional parameter and B is the value to assign it.&lt;br /&gt;
&lt;br /&gt;
@distance(x1,y1,x2,y2 [,type=[hex,turns]]) : evaluate distance between two hexes using different metrics&lt;br /&gt;
&lt;br /&gt;
@adjacent(x1,y1 [,direction=[1-6]]) : return adjacent hex [x,y] values in different directions (0=N, 1=NE ...)&lt;br /&gt;
&lt;br /&gt;
@unit([variable=[location,wml_variable...],id=]) : return variable from the current unit (or unit with matching id.&lt;br /&gt;
&lt;br /&gt;
@hex(x1,y1,variable) : return variable associated with particular hex&lt;br /&gt;
&lt;br /&gt;
@eval(string) : evaluate an arithmetic expression&lt;/div&gt;</summary>
		<author><name>Darth Fool</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Darth_Fool&amp;diff=15876</id>
		<title>User:Darth Fool</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Darth_Fool&amp;diff=15876"/>
		<updated>2007-06-15T20:36:42Z</updated>

		<summary type="html">&lt;p&gt;Darth Fool: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is intended as a development page for the documentation of the new AI that I am working on.  When the AI is officially released, the information will be migrated to the official wml reference pages.  Some of this is partially implemented, some of it has not yet been implemented, and some of these are planned changes to something that is already implemented, and all of it is subject to change in the code without notification.  So, in short, don't start using this in your scenarios and expect it to work just yet, or even to still be the same by the time of the official release.  This is primarily meant as a way to organize my thoughts and reduce the time from when the code is complete to when the new AI is fully documented.  You have been warned.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''The Grand Idea'''&lt;br /&gt;
&lt;br /&gt;
Ok, so what is this AI supposed to accomplish anyways.  Well, it has many goals, but most of them can be wrapped up in the following statement: The AI should be sufficiently flexible to be able to specify parameters so that it can win Heir To The Throne on easy without cheating.  That means, no knowing where things are before they are discovered (scepter of fire), no knowing where hidden or fogged units are, etc... Along the way, we should end up with an AI that makes it quite possible to create much more interesting AI behaviour in campaigns.  so, how to accomplish this?&lt;br /&gt;
&lt;br /&gt;
'''Orders'''&lt;br /&gt;
&lt;br /&gt;
The basic scheme begins with a simple concept.  The AI WML will be able to specify the order in which various objectives are accomplished, and by what units those orders are filled.  Consider that currently, the AI pursues its goals in a very specific order (combat, village capture, healing, retreat, recruit...) &lt;br /&gt;
 &lt;br /&gt;
So, the first order of business is to enable the abilty to specify the order in which commands are executed.  As a further refinement, we allow the order to restrict what type of units the order applies to.  Inside the order are a series of commands that are executed.  Units that fill that order remember which order they are following (via the ai_special tag in the unit) until they are reassigned.  Units that have no ai_special are part of the &amp;quot;default&amp;quot; orders.  Initially, any [fill] commands are executed within the order.  After this, units are sorted according to any [sort] commands.  Then, for each unit the remaining commands are executed in order by each unit before the next unit begins executing the commands.&lt;br /&gt;
&lt;br /&gt;
 [order]#This tag specifies the beginning of an order description.  &lt;br /&gt;
   name = #the name of the order.  Acts to id units that are part of this order&lt;br /&gt;
   id = #uniq ID of this order tag.  Used when executing summon commands.&lt;br /&gt;
   execute = # yes(default) or no.  If yes will execute when encountered.  &lt;br /&gt;
             # If no, only executed if explicitly called by an execute command.&lt;br /&gt;
   memory = #In the various calculations, use the last seen locations of units that &lt;br /&gt;
            # are now invisible if they were last seen within memory turns.&lt;br /&gt;
   priority = # determines if order can steal units from other orders during fill. &lt;br /&gt;
              # can only steal units from orders with strictly lower priority.&lt;br /&gt;
              # units of equal or greater priority will ignore the request to fill &lt;br /&gt;
              # the order.  default value = 0&lt;br /&gt;
   [fill]#command to attempt to fill the order with units that match the appropriate unit filter&lt;br /&gt;
     number = #command of how many units to fill that match the filter&lt;br /&gt;
     [filter]#standard unit filter.[/filter]&lt;br /&gt;
     sort = #evaluation of how to choose which unit to accept first.  Higher value chosen first.&lt;br /&gt;
   [/fill]&lt;br /&gt;
   [sort] &lt;br /&gt;
     [filter]#standard unit filter.&lt;br /&gt;
     [/filter]&lt;br /&gt;
     sort = #evaluation of how to choose which unit to accept first.  Higher value chosen first.&lt;br /&gt;
   [/sort]   &lt;br /&gt;
   [command]#generic tags for all commands&lt;br /&gt;
     [filter]#standard unit filter.  limits which units will execute this command.&lt;br /&gt;
     [/filter]&lt;br /&gt;
     type = #type of command to execute.  command specific WML tags below&lt;br /&gt;
   [/command]#move command&lt;br /&gt;
     type = moveto # move to target.&lt;br /&gt;
   [command]&lt;br /&gt;
     type = set_order # change the unit to be a part of a different order&lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = break # stop executing this order for this unit.  &lt;br /&gt;
     #Should really have a filter otherwise makes all following commands never be executed.&lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = attack # execute an attack.  Does not move the unit! &lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = recruit # recruit units.  Does not move the unit!&lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = execute # execute the following order before continuing.&lt;br /&gt;
     id = #id of order to execute&lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = summon # summon units to give current unit a boost before combat.  &lt;br /&gt;
     #possibly will be eliminated in favor of the execute command.&lt;br /&gt;
   [/command]&lt;br /&gt;
  [/order]&lt;br /&gt;
&lt;br /&gt;
Note that orders with the same name can be used multiple times and will keep the same units between calls, but they should each have a unique id.&lt;br /&gt;
&lt;br /&gt;
'''Evaluators'''&lt;br /&gt;
&lt;br /&gt;
Within the many options, there will be various parameters that need to be calculated, especially numeric ones.  A large number of them will be possible to be specified as an expression that will be evaluated at the time the order is being executed.  Most of these will be numeric.  To make this more flexible, these values will allow the use of simple arithmetic expressions, wml variables, and some specialized function calls.  A typical example might look like:&lt;br /&gt;
&lt;br /&gt;
  sort_value = &amp;quot;$villages + (2*$enemies) / @distance(@unit(),@target(fool))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
note that the quotes are necessary to prevent certain preprocessor actions.&lt;br /&gt;
&lt;br /&gt;
In this case the first thing that are evaluated are the WML variables.  Then functions that are designated by beginning with an @ followed by the function name and a parenthetical expression that encloses a parameter string.  Typically these functions will evaluate the parameter string in a similar manner before returning a value.  Note that the string inside the parenthesis of a function will be passed as a whole into the function before being evaluated.  Typically the first thing that each function will do is re-evaluate the string, but this is not a requirement.   &lt;br /&gt;
&lt;br /&gt;
The next thing that is evaluated are things within paranthesis and finally the arithmetic expression evaluated with the standard precedence.&lt;br /&gt;
&lt;br /&gt;
Items within an individual command will be evaluated before the command is executed.&lt;br /&gt;
Items within an individual order will be evaluated at the begining of the order for each unit in the order.&lt;br /&gt;
Items within the AI tag but not in either of the above will be evaluated only at the beginning of the turn.&lt;br /&gt;
&lt;br /&gt;
The use of evaluators will make it possible to control many of the AI parameters indirectly via WML variables that are set/changed within events.&lt;br /&gt;
&lt;br /&gt;
'''@ Functions'''&lt;br /&gt;
The following functions are planned for use within the evaluators.  Parameters are generally a comma seperated list.  Required parameters must be in the proper order at the beginning of the list.  If optional parameters are allowed, they go at the end of the list and are generally of the form &amp;quot;A=b&amp;quot; where A is the optional parameter and B is the value to assign it.&lt;br /&gt;
&lt;br /&gt;
@distance(x1,y1,x2,y2 [,type=[hex,turns]]) : evaluate distance between two hexes using different metrics&lt;br /&gt;
&lt;br /&gt;
@adjacent(x1,y1 [,direction=[1-6]]) : return adjacent hex [x,y] values in different directions (0=N, 1=NE ...)&lt;br /&gt;
&lt;br /&gt;
@unit([variable=[location,wml_variable...],id=]) : return variable from the current unit (or unit with matching id.&lt;br /&gt;
&lt;br /&gt;
@hex(x1,y1,variable) : return variable associated with particular hex&lt;br /&gt;
&lt;br /&gt;
@eval(string) : evaluate an aritmetic expression&lt;/div&gt;</summary>
		<author><name>Darth Fool</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Darth_Fool&amp;diff=15618</id>
		<title>User:Darth Fool</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Darth_Fool&amp;diff=15618"/>
		<updated>2007-05-30T21:25:34Z</updated>

		<summary type="html">&lt;p&gt;Darth Fool: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is intended as a development page for the documentation of the new AI that I am working on.  When the AI is officially released, the information will be migrated to the official wml reference pages.  Some of this is partially implemented, some of it has not yet been implemented, and some of these are planned changes to something that is already implemented, and all of it is subject to change in the code without notification.  So, in short, don't start using this in your scenarios and expect it to work just yet, or even to still be the same by the time of the official release.  This is primarily meant as a way to organize my thoughts and reduce the time from when the code is complete to when the new AI is fully documented.  You have been warned.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''The Grand Idea'''&lt;br /&gt;
&lt;br /&gt;
Ok, so what is this AI supposed to accomplish anyways.  Well, it has many goals, but most of them can be wrapped up in the following statement: The AI should be sufficiently flexible to be able to specify parameters so that it can win Heir To The Throne on easy without cheating.  That means, no knowing where things are before they are discovered (scepter of fire), no knowing where hidden or fogged units are, etc... Along the way, we should end up with an AI that makes it quite possible to create much more interesting AI behaviour in campaigns.  so, how to accomplish this?&lt;br /&gt;
&lt;br /&gt;
'''Orders'''&lt;br /&gt;
&lt;br /&gt;
The basic scheme begins with a simple concept.  The AI WML will be able to specify the order in which various objectives are accomplished, and by what units those orders are filled.  Consider that currently, the AI pursues its goals in a very specific order (combat, village capture, healing, retreat, recruit...) &lt;br /&gt;
 &lt;br /&gt;
So, the first order of business is to enable the abilty to specify the order in which commands are executed.  As a further refinement, we allow the order to restrict what type of units the order applies to.  Inside the order are a series of commands that are executed.  Units that fill that order remember which order they are following (via the ai_special tag in the unit) until they are reassigned.  Units that have no ai_special are part of the &amp;quot;default&amp;quot; orders.  Initially, any [fill] commands are executed within the order.  After this, units are sorted according to any [sort] commands.  Then, for each unit the remaining commands are executed in order by each unit before the next unit begins executing the commands.&lt;br /&gt;
&lt;br /&gt;
 [order]#This tag specifies the beginning of an order description.  &lt;br /&gt;
   name = #the name of the order.  Acts to id units that are part of this order&lt;br /&gt;
   id = #uniq ID of this order tag.  Used when executing summon commands.&lt;br /&gt;
   execute = # yes(default) or no.  If yes will execute when encountered.  &lt;br /&gt;
             # If no, only executed if explicitly called by an execute command.&lt;br /&gt;
   memory = #In the various calculations, use the last seen locations of units that &lt;br /&gt;
            # are now invisible if they were last seen within memory turns.&lt;br /&gt;
   priority = # determines if order can steal units from other orders during fill. &lt;br /&gt;
              # can only steal units from orders with strictly lower priority.&lt;br /&gt;
              # units of equal or greater priority will ignore the request to fill &lt;br /&gt;
              # the order.  default value = 0&lt;br /&gt;
   [fill]#command to attempt to fill the order with units that match the appropriate unit filter&lt;br /&gt;
     number = #command of how many units to fill that match the filter&lt;br /&gt;
     [filter]#standard unit filter.[/filter]&lt;br /&gt;
     sort = #evaluation of how to choose which unit to accept first.  Higher value chosen first.&lt;br /&gt;
   [/fill]&lt;br /&gt;
   [sort] &lt;br /&gt;
     [filter]#standard unit filter.&lt;br /&gt;
     [/filter]&lt;br /&gt;
     sort = #evaluation of how to choose which unit to accept first.  Higher value chosen first.&lt;br /&gt;
   [/sort]   &lt;br /&gt;
   [command]#generic tags for all commands&lt;br /&gt;
     [filter]#standard unit filter.  limits which units will execute this command.&lt;br /&gt;
     [/filter]&lt;br /&gt;
     type = #type of command to execute.  command specific WML tags below&lt;br /&gt;
   [/command]#move command&lt;br /&gt;
     type = moveto # move to target.&lt;br /&gt;
   [command]&lt;br /&gt;
     type = set_order # change the unit to be a part of a different order&lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = break # stop executing this order for this unit.  &lt;br /&gt;
     #Should really have a filter otherwise makes all following commands never be executed.&lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = attack # execute an attack.  Does not move the unit! &lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = recruit # recruit units.  Does not move the unit!&lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = execute # execute the following order before continuing.&lt;br /&gt;
     id = #id of order to execute&lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = summon # summon units to give current unit a boost before combat.  &lt;br /&gt;
     #possibly will be eliminated in favor of the execute command.&lt;br /&gt;
   [/command]&lt;br /&gt;
  [/order]&lt;br /&gt;
&lt;br /&gt;
Note that orders with the same name can be used multiple times and will keep the same units between calls, but they should each have a unique id.&lt;br /&gt;
&lt;br /&gt;
'''Evaluators'''&lt;br /&gt;
&lt;br /&gt;
Within the many options, there will be various parameters that need to be calculated, especially numeric ones.  A large number of them will be possible to be specified as an expression that will be evaluated at the time the order is being executed.  Most of these will be numeric.  To make this more flexible, these values will allow the use of simple arithmetic expressions, wml variables, and some specialized function calls.  A typical example might look like:&lt;br /&gt;
&lt;br /&gt;
  sort_value = &amp;quot;$villages + (2*$enemies) / @distance(@unit(),@target(fool))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
note that the quotes are necessary to prevent certain preprocessor actions.&lt;br /&gt;
&lt;br /&gt;
In this case the first thing that are evaluated are the WML variables.  Then functions that are designated by beginning with an @ followed by the function name and a parenthetical expression that encloses a parameter string.  Typically these functions will evaluate the parameter string in a similar manner before returning a value.  Note that the string inside the parenthesis of a function will be passed as a whole into the function before being evaluated.  Typically the first thing that each function will do is re-evaluate the string, but this is not a requirement.   &lt;br /&gt;
&lt;br /&gt;
The next thing that is evaluated are things within paranthesis and finally the arithmetic expression evaluated with the standard precedence.&lt;br /&gt;
&lt;br /&gt;
Items within an individual command will be evaluated before the command is executed.&lt;br /&gt;
Items within an individual order will be evaluated at the begining of the order for each unit in the order.&lt;br /&gt;
Items within the AI tag but not in either of the above will be evaluated only at the beginning of the turn.&lt;br /&gt;
&lt;br /&gt;
The use of evaluators will make it possible to control many of the AI parameters indirectly via WML variables that are set/changed within events.&lt;br /&gt;
&lt;br /&gt;
'''@ Functions'''&lt;br /&gt;
The following functions are planned for use within the evaluators.  Parameters are generally a comma seperated list.  Required parameters must be in the proper order at the beginning of the list.  If optional parameters are allowed, they go at the end of the list and are generally of the form &amp;quot;A=b&amp;quot; where A is the optional parameter and B is the value to assign it.&lt;br /&gt;
&lt;br /&gt;
@distance(x1,y1,x2,y2 [,type=[hex,turns]]) : evaluate distance between two hexes using different metrics&lt;br /&gt;
@adjacent(x1,y1 [,direction=[1-6]]) : return adjacent hex [x,y] values in different directions (0=N, 1=NE ...)&lt;br /&gt;
@unit([variable=[location,wml_variable...],id=]) : return variable from the current unit (or unit with matching id.&lt;br /&gt;
@hex(x1,y1,variable) : return variable associated with particular hex&lt;br /&gt;
@eval(string) : evaluate an aritmetic expression&lt;/div&gt;</summary>
		<author><name>Darth Fool</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Darth_Fool&amp;diff=15531</id>
		<title>User:Darth Fool</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Darth_Fool&amp;diff=15531"/>
		<updated>2007-05-25T01:59:37Z</updated>

		<summary type="html">&lt;p&gt;Darth Fool: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is intended as a development page for the documentation of the new AI that I am working on.  When the AI is officially released, the information will be migrated to the official wml reference pages.  Some of this is partially implemented, some of it has not yet been implemented, and some of these are planned changes to something that is already implemented, and all of it is subject to change in the code without notification.  So, in short, don't start using this in your scenarios and expect it to work just yet, or even to still be the same by the time of the official release.  This is primarily meant as a way to organize my thoughts and reduce the time from when the code is complete to when the new AI is fully documented.  You have been warned.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''The Grand Idea'''&lt;br /&gt;
&lt;br /&gt;
Ok, so what is this AI supposed to accomplish anyways.  Well, it has many goals, but most of them can be wrapped up in the following statement: The AI should be sufficiently flexible to be able to specify parameters so that it can win Heir To The Throne on easy without cheating.  That means, no knowing where things are before they are discovered (scepter of fire), no knowing where hidden or fogged units are, etc... Along the way, we should end up with an AI that makes it quite possible to create much more interesting AI behaviour in campaigns.  so, how to accomplish this?&lt;br /&gt;
&lt;br /&gt;
'''Orders'''&lt;br /&gt;
&lt;br /&gt;
The basic scheme begins with a simple concept.  The AI WML will be able to specify the order in which various objectives are accomplished, and by what units those orders are filled.  Consider that currently, the AI pursues its goals in a very specific order (combat, village capture, healing, retreat, recruit...) &lt;br /&gt;
 &lt;br /&gt;
So, the first order of business is to enable the abilty to specify the order in which commands are executed.  As a further refinement, we allow the order to restrict what type of units the order applies to.  Inside the order are a series of commands that are executed.  Units that fill that order remember which order they are following (via the ai_special tag in the unit) until they are reassigned.  Units that have no ai_special are part of the &amp;quot;default&amp;quot; orders.  Initially, any [fill] commands are executed within the order.  After this, units are sorted according to any [sort] commands.  Then, for each unit the remaining commands are executed in order by each unit before the next unit begins executing the commands.&lt;br /&gt;
&lt;br /&gt;
 [order]#This tag specifies the beginning of an order description.  &lt;br /&gt;
   name = #the name of the order.  Acts to id units that are part of this order&lt;br /&gt;
   id = #uniq ID of this order tag.  Used when executing summon commands.&lt;br /&gt;
   execute = # yes(default) or no.  If yes will execute when encountered.  &lt;br /&gt;
             # If no, only executed if explicitly called by an execute command.&lt;br /&gt;
   memory = #In the various calculations, use the last seen locations of units that &lt;br /&gt;
            # are now invisible if they were last seen within memory turns.&lt;br /&gt;
   priority = # determines if order can steal units from other orders during fill. &lt;br /&gt;
              # can only steal units from orders with strictly lower priority.&lt;br /&gt;
              # units of equal or greater priority will ignore the request to fill &lt;br /&gt;
              # the order.  default value = 0&lt;br /&gt;
   [fill]#command to attempt to fill the order with units that match the appropriate unit filter&lt;br /&gt;
     number = #command of how many units to fill that match the filter&lt;br /&gt;
     [filter]#standard unit filter.[/filter]&lt;br /&gt;
     sort = #evaluation of how to choose which unit to accept first.  Higher value chosen first.&lt;br /&gt;
   [/fill]&lt;br /&gt;
   [sort] &lt;br /&gt;
     [filter]#standard unit filter.&lt;br /&gt;
     [/filter]&lt;br /&gt;
     sort = #evaluation of how to choose which unit to accept first.  Higher value chosen first.&lt;br /&gt;
   [/sort]   &lt;br /&gt;
   [command]#generic tags for all commands&lt;br /&gt;
     [filter]#standard unit filter.  limits which units will execute this command.&lt;br /&gt;
     [/filter]&lt;br /&gt;
     type = #type of command to execute.  command specific WML tags below&lt;br /&gt;
   [/command]#move command&lt;br /&gt;
     type = moveto # move to target.&lt;br /&gt;
   [command]&lt;br /&gt;
     type = set_order # change the unit to be a part of a different order&lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = break # stop executing this order for this unit.  &lt;br /&gt;
     #Should really have a filter otherwise makes all following commands never be executed.&lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = attack # execute an attack.  Does not move the unit! &lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = recruit # recruit units.  Does not move the unit!&lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = execute # execute the following order before continuing.&lt;br /&gt;
     id = #id of order to execute&lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = summon # summon units to give current unit a boost before combat.  &lt;br /&gt;
     #possibly will be eliminated in favor of the execute command.&lt;br /&gt;
   [/command]&lt;br /&gt;
  [/order]&lt;br /&gt;
&lt;br /&gt;
Note that orders with the same name can be used multiple times and will keep the same units between calls, but they should each have a unique id.&lt;br /&gt;
&lt;br /&gt;
'''Evaluators'''&lt;br /&gt;
&lt;br /&gt;
Within the many options, there will be various parameters that need to be calculated, especially numeric ones.  A large number of them will be possible to be specified as an expression that will be evaluated at the time the order is being executed.  Most of these will be numeric.  To make this more flexible, these values will allow the use of simple arithmetic expressions, wml variables, and some specialized function calls.  A typical example might look like:&lt;br /&gt;
&lt;br /&gt;
  sort_value = &amp;quot;$villages + (2*$enemies) / @distance(@unit(),@target(fool))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
note that the quotes are necessary to prevent certain preprocessor actions.&lt;br /&gt;
&lt;br /&gt;
In this case the first thing that are evaluated are the WML variables.  Then functions that are designated by beginning with an @ followed by the function name and a parenthetical expression that encloses a parameter string.  Typically these functions will evaluate the parameter string in a similar manner before returning a value.  Note that the string inside the parenthesis of a function will be passed as a whole into the function before being evaluated.  Typically the first thing that each function will do is re-evaluate the string, but this is not a requirement.   &lt;br /&gt;
&lt;br /&gt;
The next thing that is evaluated are things within paranthesis and finally the arithmetic expression evaluated with the standard precedence.&lt;br /&gt;
&lt;br /&gt;
Items within an individual command will be evaluated before the command is executed.&lt;br /&gt;
Items within an individual order will be evaluated at the begining of the order for each unit in the order.&lt;br /&gt;
Items within the AI tag but not in either of the above will be evaluated only at the beginning of the turn.&lt;br /&gt;
&lt;br /&gt;
The use of evaluators will make it possible to control many of the AI parameters indirectly via WML variables that are set/changed within events.&lt;/div&gt;</summary>
		<author><name>Darth Fool</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Darth_Fool&amp;diff=15530</id>
		<title>User:Darth Fool</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Darth_Fool&amp;diff=15530"/>
		<updated>2007-05-25T01:24:33Z</updated>

		<summary type="html">&lt;p&gt;Darth Fool: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is intended as a development page for the documentation of the new AI that I am working on.  When the AI is officially released, the information will be migrated to the official wml reference pages.  Some of this is partially implemented, some of it has not yet been implemented, and some of these are planned changes to something that is already implemented, and all of it is subject to change in the code without notification.  So, in short, don't start using this in your scenarios and expect it to work just yet, or even to still be the same by the time of the official release.  This is primarily meant as a way to organize my thoughts and reduce the time from when the code is complete to when the new AI is fully documented.  You have been warned.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''The Grand Idea'''&lt;br /&gt;
&lt;br /&gt;
Ok, so what is this AI supposed to accomplish anyways.  Well, it has many goals, but most of them can be wrapped up in the following statement: The AI should be sufficiently flexible to be able to specify parameters so that it can win Heir To The Throne on easy without cheating.  That means, no knowing where things are before they are discovered (scepter of fire), no knowing where hidden or fogged units are, etc... Along the way, we should end up with an AI that makes it quite possible to create much more interesting AI behaviour in campaigns.  so, how to accomplish this?&lt;br /&gt;
&lt;br /&gt;
'''Orders'''&lt;br /&gt;
&lt;br /&gt;
The basic scheme begins with a simple concept.  The AI WML will be able to specify the order in which various objectives are accomplished, and by what units those orders are filled.  Consider that currently, the AI pursues its goals in a very specific order (combat, village capture, healing, retreat, recruit...) &lt;br /&gt;
 &lt;br /&gt;
So, the first order of business is to enable the abilty to specify the order in which commands are executed.  As a further refinement, we allow the order to restrict what type of units the order applies to.  Inside the order are a series of commands that are executed.  Units that fill that order remember which order they are following (via the ai_special tag in the unit) until they are reassigned.  Units that have no ai_special are part of the &amp;quot;default&amp;quot; orders.  Initially, any [fill] commands are executed within the order.  After this, units are sorted according to any [sort] commands.  Then, for each unit the remaining commands are executed in order by each unit before the next unit begins executing the commands.&lt;br /&gt;
&lt;br /&gt;
 [order]#This tag specifies the beginning of an order description.  &lt;br /&gt;
   name = #the name of the order.  Acts to id units that are part of this order&lt;br /&gt;
   id = #uniq ID of this order tag.  Used when executing summon commands.&lt;br /&gt;
   execute = # yes(default) or no.  If yes will execute when encountered.  &lt;br /&gt;
             # If no, only executed if explicitly called by an execute command.&lt;br /&gt;
   memory = #In the various calculations, use the last seen locations of units that &lt;br /&gt;
            # are now invisible if they were last seen within memory turns.&lt;br /&gt;
   priority = # determines if order can steal units from other orders during fill. &lt;br /&gt;
              # can only steal units from orders with strictly lower priority.&lt;br /&gt;
              # units of equal or greater priority will ignore the request to fill &lt;br /&gt;
              # the order.  default value = 0&lt;br /&gt;
   [fill]#command to attempt to fill the order with units that match the appropriate unit filter&lt;br /&gt;
     number = #command of how many units to fill that match the filter&lt;br /&gt;
     [filter]#standard unit filter.[/filter]&lt;br /&gt;
     sort = #evaluation of how to choose which unit to accept first.  Higher value chosen first.&lt;br /&gt;
   [/fill]&lt;br /&gt;
   [sort] &lt;br /&gt;
     [filter]#standard unit filter.&lt;br /&gt;
     [/filter]&lt;br /&gt;
     sort = #evaluation of how to choose which unit to accept first.  Higher value chosen first.&lt;br /&gt;
   [/sort]   &lt;br /&gt;
   [command]#generic tags for all commands&lt;br /&gt;
     [filter]#standard unit filter.  limits which units will execute this command.&lt;br /&gt;
     [/filter]&lt;br /&gt;
     type = #type of command to execute.  command specific WML tags below&lt;br /&gt;
   [/command]#move command&lt;br /&gt;
     type = moveto # move to target.&lt;br /&gt;
   [command]&lt;br /&gt;
     type = set_order # change the unit to be a part of a different order&lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = break # stop executing this order for this unit.  &lt;br /&gt;
     #Should really have a filter otherwise makes all following commands never be executed.&lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = attack # execute an attack.  Does not move the unit! &lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = recruit # recruit units.  Does not move the unit!&lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = execute # execute the following order before continuing.&lt;br /&gt;
     id = #id of order to execute&lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = summon # summon units to give current unit a boost before combat.  &lt;br /&gt;
     #possibly will be eliminated in favor of the execute command.&lt;br /&gt;
   [/command]&lt;br /&gt;
  [/order]&lt;br /&gt;
&lt;br /&gt;
Note that orders with the same name can be used multiple times and will keep the same units between calls, but they should each have a unique id.&lt;br /&gt;
&lt;br /&gt;
'''Evaluators'''&lt;br /&gt;
&lt;br /&gt;
Within the many options, there will be various parameters that need to be calculated, especially numeric ones.  A large number of them will be possible to be specified as an expression that will be evaluated at the time the order is being executed.  Most of these will be numeric.  To make this more flexible, these values will allow the use of simple arithmetic expressions, wml variables, and some specialized function calls.  A typical example might look like:&lt;br /&gt;
&lt;br /&gt;
  sort_value = &amp;quot;$villages + (2*$enemies) / @distance(@unit(),@target(fool))&amp;quot;&lt;br /&gt;
&lt;br /&gt;
note that the quotes are necessary to prevent certain preprocessor actions.&lt;br /&gt;
&lt;br /&gt;
In this case the first thing that is evaluated are the functions that are designated by beginning with an @ followed by the function name and a parenthetical expression that encloses a parameter string.  Typically these functions will evaluate the parameter string in a similar manner before returning a value.  Note that the string inside the parenthesis of a function will be passed as a whole into the function before being evaluated.  Typically the first thing that each function will do is re-evaluate the string, but this is not a requirement.   &lt;br /&gt;
&lt;br /&gt;
The next thing that is evaluated are things within paranthesis followed by WML variables designated with a $ at the beginning, and finally the arithmetic expression evaluated with the standard precedence.&lt;br /&gt;
&lt;br /&gt;
Items within an individual command will be evaluated before the command is executed.&lt;br /&gt;
Items within an individual order will be evaluated at the begining of the order for each unit in the order.&lt;br /&gt;
Items within the AI tag but not in either of the above will be evaluated only at the beginning of the turn.&lt;br /&gt;
&lt;br /&gt;
The use of evaluators will make it possible to control many of the AI parameters indirectly via WML variables that are set/changed within events.&lt;/div&gt;</summary>
		<author><name>Darth Fool</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Darth_Fool&amp;diff=15497</id>
		<title>User:Darth Fool</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Darth_Fool&amp;diff=15497"/>
		<updated>2007-05-22T21:40:53Z</updated>

		<summary type="html">&lt;p&gt;Darth Fool: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is intended as a development page for the documentation of the new AI that I am working on.  When the AI is officially released, the information will be migrated to the official wml reference pages.  Some of this is partially implemented, some of it has not yet been implemented, and some of these are planned changes to something that is already implemented, and all of it is subject to change in the code without notification.  So, in short, don't start using this in your scenarios and expect it to work just yet, or even to still be the same by the time of the official release.  This is primarily meant as a way to organize my thoughts and reduce the time from when the code is complete to when the new AI is fully documented.  You have been warned.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''The Grand Idea'''&lt;br /&gt;
&lt;br /&gt;
Ok, so what is this AI supposed to accomplish anyways.  Well, it has many goals, but most of them can be wrapped up in the following statement: The AI should be sufficiently flexible to be able to specify parameters so that it can win Heir To The Throne on easy without cheating.  That means, no knowing where things are before they are discovered (scepter of fire), no knowing where hidden or fogged units are, etc... Along the way, we should end up with an AI that makes it quite possible to create much more interesting AI behaviour in campaigns.  so, how to accomplish this?&lt;br /&gt;
&lt;br /&gt;
'''Orders'''&lt;br /&gt;
&lt;br /&gt;
The basic scheme begins with a simple concept.  The AI WML will be able to specify the order in which various objectives are accomplished, and by what units those orders are filled.  Consider that currently, the AI pursues its goals in a very specific order (combat, village capture, healing, retreat, recruit...) &lt;br /&gt;
 &lt;br /&gt;
So, the first order of business is to enable the abilty to specify the order in which commands are executed.  As a further refinement, we allow the order to restrict what type of units the order applies to.  Inside the order are a series of commands that are executed.  Units that fill that order remember which order they are following (via the ai_special tag in the unit) until they are reassigned.  Units that have no ai_special are part of the &amp;quot;default&amp;quot; orders.  Initially, any [fill] commands are executed within the order.  After this, units are sorted according to any [sort] commands.  Then, for each unit the remaining commands are executed in order by each unit before the next unit begins executing the commands.&lt;br /&gt;
&lt;br /&gt;
 [order]#This tag specifies the beginning of an order description.  &lt;br /&gt;
   name = #the name of the order.  Acts to id units that are part of this order&lt;br /&gt;
   id = #uniq ID of this order tag.  Used when executing summon commands.&lt;br /&gt;
   execute = # yes(default) or no.  If yes will execute when encountered.  &lt;br /&gt;
             # If no, only executed if explicitly called by an execute command.&lt;br /&gt;
   memory = #In the various calculations, use the last seen locations of units that &lt;br /&gt;
            # are now invisible if they were last seen within memory turns.&lt;br /&gt;
   priority = # determines if order can steal units from other orders during fill. &lt;br /&gt;
              # can only steal units from orders with strictly lower priority.&lt;br /&gt;
              # units of equal or greater priority will ignore the request to fill &lt;br /&gt;
              # the order.  default value = 0&lt;br /&gt;
   [fill]#command to attempt to fill the order with units that match the appropriate unit filter&lt;br /&gt;
     number = #command of how many units to fill that match the filter&lt;br /&gt;
     [filter]#standard unit filter.[/filter]&lt;br /&gt;
     sort = #evaluation of how to choose which unit to accept first.  Higher value chosen first.&lt;br /&gt;
   [/fill]&lt;br /&gt;
   [sort] &lt;br /&gt;
     [filter]#standard unit filter.&lt;br /&gt;
     [/filter]&lt;br /&gt;
     sort = #evaluation of how to choose which unit to accept first.  Higher value chosen first.&lt;br /&gt;
   [/sort]   &lt;br /&gt;
   [command]#generic tags for all commands&lt;br /&gt;
     [filter]#standard unit filter.  limits which units will execute this command.&lt;br /&gt;
     [/filter]&lt;br /&gt;
     type = #type of command to execute.  command specific WML tags below&lt;br /&gt;
   [/command]#move command&lt;br /&gt;
     type = moveto # move to target.&lt;br /&gt;
   [command]&lt;br /&gt;
     type = set_order # change the unit to be a part of a different order&lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = break # stop executing this order for this unit.  &lt;br /&gt;
     #Should really have a filter otherwise makes all following commands never be executed.&lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = attack # execute an attack.  Does not move the unit! &lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = recruit # recruit units.  Does not move the unit!&lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = execute # execute the following order before continuing.&lt;br /&gt;
     id = #id of order to execute&lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = summon # summon units to give current unit a boost before combat.  &lt;br /&gt;
     #possibly will be eliminated in favor of the execute command.&lt;br /&gt;
   [/command]&lt;br /&gt;
  [/order]&lt;br /&gt;
&lt;br /&gt;
Note that orders with the same name can be used multiple times and will keep the same units between calls, but they should each have a unique id.&lt;br /&gt;
&lt;br /&gt;
'''Evaluators'''&lt;br /&gt;
&lt;br /&gt;
Within the many options, there will be various parameters that need to be calculated, especially numeric ones.  A large number of them will be possible to be specified as an expression that will be evaluated at the time the order is being executed.  Most of these will be numeric.  To make this more flexible, these values will allow the use of simple arithmetic expressions, wml variables, and some specialized function calls.  A typical example might look like:&lt;br /&gt;
&lt;br /&gt;
  sort_value = $villages + (2*$enemies) / @distance(@unit(),@target(fool))&lt;br /&gt;
&lt;br /&gt;
In this case the first thing that is evaluated are the functions that are designated by beginning with an @ followed by the function name and a parenthetical expression that encloses a parameter string.  Typically these functions will evaluate the parameter string in a similar manner before returning a value.  Note that the string inside the parenthesis of a function will be passed as a whole into the function before being evaluated.  Typically the first thing that each function will do is re-evaluate the string, but this is not a requirement.   &lt;br /&gt;
&lt;br /&gt;
The next thing that is evaluated are things within paranthesis followed by WML variables designated with a $ at the beginning, and finally the arithmetic expression evaluated with the standard precedence.&lt;br /&gt;
&lt;br /&gt;
Items within an individual command will be evaluated before the command is executed.&lt;br /&gt;
Items within an individual order will be evaluated at the begining of the order for each unit in the order.&lt;br /&gt;
Items within the AI tag but not in either of the above will be evaluated only at the beginning of the turn.&lt;br /&gt;
&lt;br /&gt;
The use of evaluators will make it possible to control many of the AI parameters indirectly via WML variables that are set/changed within events.&lt;/div&gt;</summary>
		<author><name>Darth Fool</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Darth_Fool&amp;diff=15428</id>
		<title>User:Darth Fool</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Darth_Fool&amp;diff=15428"/>
		<updated>2007-05-18T04:39:03Z</updated>

		<summary type="html">&lt;p&gt;Darth Fool: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is intended as a development page for the documentation of the new AI that I am working on.  When the AI is officially released, the information will be migrated to the official wml reference pages.  Some of this is partially implemented, some of it has not yet been implemented, and some of these are planned changes to something that is already implemented, and all of it is subject to change in the code without notification.  So, in short, don't start using this in your scenarios and expect it to work just yet, or even to still be the same by the time of the official release.  This is primarily meant as a way to organize my thoughts and reduce the time from when the code is complete to when the new AI is fully documented.  You have been warned.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''The Grand Idea'''&lt;br /&gt;
&lt;br /&gt;
Ok, so what is this AI supposed to accomplish anyways.  Well, it has many goals, but most of them can be wrapped up in the following statement: The AI should be sufficiently flexible to be able to specify parameters so that it can win Heir To The Throne on easy without cheating.  That means, no knowing where things are before they are discovered (scepter of fire), no knowing where hidden or fogged units are, etc... Along the way, we should end up with an AI that makes it quite possible to create much more interesting AI behaviour in campaigns.  so, how to accomplish this?&lt;br /&gt;
&lt;br /&gt;
'''Orders'''&lt;br /&gt;
&lt;br /&gt;
The basic scheme begins with a simple concept.  The AI WML will be able to specify the order in which various objectives are accomplished, and by what units those orders are filled.  Consider that currently, the AI pursues its goals in a very specific order (combat, village capture, healing, retreat, recruit...) &lt;br /&gt;
 &lt;br /&gt;
So, the first order of business is to enable the abilty to specify the order in which commands are executed.  As a further refinement, we allow the order to restrict what type of units the order applies to.  Inside the order are a series of commands that are executed.  Units that fill that order remember which order they are following (via the ai_special tag in the unit) until they are reassigned.  Units that have no ai_special are part of the &amp;quot;default&amp;quot; orders.  Initially, any [fill] commands are executed within the order.  After this, units are sorted according to any [sort] commands&lt;br /&gt;
Then, for each unit in order the remaining commands are executed by that unit before the next unit executes the commands.&lt;br /&gt;
&lt;br /&gt;
 [order]#This tag specifies the beginning of an order description.  &lt;br /&gt;
   name = #the name of the order.  Acts to id units that are part of this order&lt;br /&gt;
   id = #uniq ID of this order tag.  Used when executing summon commands.&lt;br /&gt;
   execute = # yes(default) or no.  If yes will execute when encountered.  &lt;br /&gt;
             # If no, only executed if explicitly called by an execute command.&lt;br /&gt;
   memory = #In the various calculations, use the last seen locations of units that &lt;br /&gt;
            # are now invisible if they were last seen within memory turns.&lt;br /&gt;
   priority = # determines if order can steal units from other orders during fill. &lt;br /&gt;
              # can only steal units from orders with strictly lower priority.&lt;br /&gt;
              # units of equal or greater priority will ignore the request to fill &lt;br /&gt;
              # the order.  default value = 0&lt;br /&gt;
   [fill]#command to attempt to fill the order with units that match the appropriate unit filter&lt;br /&gt;
     number = #command of how many units to fill that match the filter&lt;br /&gt;
     [filter]#standard unit filter.[/filter]&lt;br /&gt;
     sort = #evaluation of how to choose which unit to accept first.  Higher value chosen first.&lt;br /&gt;
   [/fill]&lt;br /&gt;
   [sort] &lt;br /&gt;
     [filter]#standard unit filter.&lt;br /&gt;
     [/filter]&lt;br /&gt;
     sort = #evaluation of how to choose which unit to accept first.  Higher value chosen first.&lt;br /&gt;
   [/sort]   &lt;br /&gt;
   [command]#generic tags for all commands&lt;br /&gt;
     [filter]#standard unit filter.  limits which units will execute this command.&lt;br /&gt;
     [/filter]&lt;br /&gt;
     type = #type of command to execute.  command specific WML tags below&lt;br /&gt;
   [/command]#move command&lt;br /&gt;
     type = moveto # move to target.&lt;br /&gt;
   [command]&lt;br /&gt;
     type = set_order # change the unit to be a part of a different order&lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = break # stop executing this order for this unit.  &lt;br /&gt;
     #Should really have a filter otherwise makes all following commands never be executed.&lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = attack # execute an attack.  Does not move the unit! &lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = recruit # recruit units.  Does not move the unit!&lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = execute # execute the following order before continuing.&lt;br /&gt;
     id = #id of order to execute&lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = summon # summon units to give current unit a boost before combat.  &lt;br /&gt;
     #possibly will be eliminated in favor of the execute command.&lt;br /&gt;
   [/command]&lt;br /&gt;
  [/order]&lt;br /&gt;
&lt;br /&gt;
Note that orders with the same name can be used multiple times and will keep the same units between calls, but they should each have a unique id.&lt;br /&gt;
&lt;br /&gt;
'''Evaluators'''&lt;br /&gt;
&lt;br /&gt;
Within the many options, there will be various parameters that need to be calculated, especially numeric ones.  A large number of them will be possible to be specified as an expression that will be evaluated at the time the order is being executed.  Most of these will be numeric.  To make this more flexible, these values will allow the use of simple arithmetic expressions, wml variables, and some specialized function calls.  A typical example might look like:&lt;br /&gt;
&lt;br /&gt;
  sort_value = $villages + (2*$enemies) / @distance(@unit(),@target(fool))&lt;br /&gt;
&lt;br /&gt;
In this case the first thing that is evaluated are the functions that are designated by beginning with an @ followed by the function name and a parenthetical expression that encloses a parameter string.  Typically these functions will evaluate the parameter string in a similar manner before returning a value.  The next thing that is evaluated are things within paranthesis followed by WML variables designated with a $ at the beginning, and finally the arithmetic expression evaluated with the standard precedence.&lt;br /&gt;
&lt;br /&gt;
Items within an individual command will be evaluated before the command is executed.&lt;br /&gt;
Items within an individual order will be evaluated at the begining of the order.&lt;br /&gt;
Items within the AI tag will be evaluated only at the beginning of the turn.&lt;br /&gt;
&lt;br /&gt;
The use of evaluators will make it possible to control many of the AI parameters indirectly via WML variables that are set/changed within events.&lt;/div&gt;</summary>
		<author><name>Darth Fool</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Darth_Fool&amp;diff=15427</id>
		<title>User:Darth Fool</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Darth_Fool&amp;diff=15427"/>
		<updated>2007-05-18T04:07:21Z</updated>

		<summary type="html">&lt;p&gt;Darth Fool: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is intended as a development page for the documentation of the new AI that I am working on.  When the AI is officially released, the information will be migrated to the official wml reference pages.  Some of this is partially implemented, some of it has not yet been implemented, and some of these are planned changes to something that is already implemented, and all of it is subject to change in the code without notification.  So, in short, don't start using this in your scenarios and expect it to work just yet, or even to still be the same by the time of the official release.  This is primarily meant as a way to organize my thoughts and reduce the time from when the code is complete to when the new AI is fully documented.  You have been warned.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''The Grand Idea'''&lt;br /&gt;
&lt;br /&gt;
Ok, so what is this AI supposed to accomplish anyways.  Well, it has many goals, but most of them can be wrapped up in the following statement: The AI should be sufficiently flexible to be able to specify parameters so that it can win Heir To The Throne on easy without cheating.  That means, no knowing where things are before they are discovered (scepter of fire), no knowing where hidden or fogged units are, etc... Along the way, we should end up with an AI that makes it quite possible to create much more interesting AI behaviour in campaigns.  so, how to accomplish this?&lt;br /&gt;
&lt;br /&gt;
'''Orders'''&lt;br /&gt;
&lt;br /&gt;
The basic scheme begins with a simple concept.  The AI WML will be able to specify the order in which various objectives are accomplished, and by what units those orders are filled.  Consider that currently, the AI pursues its goals in a very specific order (combat, village capture, healing, retreat, recruit...) &lt;br /&gt;
 &lt;br /&gt;
So, the first order of business is to enable the abilty to specify the order in which commands are executed.  As a further refinement, we allow the order to restrict what type of units the order applies to.  Inside the order are a series of commands that are executed.  Units that fill that order remember which order they are following (via the ai_special tag in the unit) until they are reassigned.  Units that have no ai_special are part of the &amp;quot;default&amp;quot; orders.  Initially, any [fill] commands are executed within the order.  After this, units are sorted according to any [sort] commands&lt;br /&gt;
Then, for each unit in order the remaining commands are executed by that unit before the next unit executes the commands.&lt;br /&gt;
&lt;br /&gt;
 [order]#This tag specifies the beginning of an order description.  &lt;br /&gt;
   name = #the name of the order.  Acts to id units that are part of this order&lt;br /&gt;
   id = #uniq ID of this order tag.  Used when executing summon commands.&lt;br /&gt;
   execute = # yes(default) or no.  If yes will execute when encountered.  &lt;br /&gt;
             # If no, only executed if explicitly called by an execute command.&lt;br /&gt;
   memory = #In the various calculations, use the last seen locations of units that &lt;br /&gt;
            # are now invisible if they were last seen within memory turns.    &lt;br /&gt;
   [fill]#command to attempt to fill the order with units that match the appropriate unit filter&lt;br /&gt;
     number = #command of how many units to fill that match the filter&lt;br /&gt;
     [filter]#standard unit filter.[/filter]&lt;br /&gt;
     sort = #evaluation of how to choose which unit to accept first.  Higher value chosen first.&lt;br /&gt;
   [/fill]&lt;br /&gt;
   [sort] &lt;br /&gt;
     [filter]#standard unit filter.&lt;br /&gt;
     [/filter]&lt;br /&gt;
     sort = #evaluation of how to choose which unit to accept first.  Higher value chosen first.&lt;br /&gt;
   [/sort]   &lt;br /&gt;
   [command]#generic tags for all commands&lt;br /&gt;
     [filter]#standard unit filter.  limits which units will execute this command.&lt;br /&gt;
     [/filter]&lt;br /&gt;
     type = #type of command to execute.  command specific WML tags below&lt;br /&gt;
   [/command]#move command&lt;br /&gt;
     type = moveto # move to target.&lt;br /&gt;
   [command]&lt;br /&gt;
     type = set_order # change the unit to be a part of a different order&lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = break # stop executing this order for this unit.  &lt;br /&gt;
     #Should really have a filter otherwise makes all following commands never be executed.&lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = attack # execute an attack.  Does not move the unit! &lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = recruit # recruit units.  Does not move the unit!&lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = execute # execute the following order before continuing.&lt;br /&gt;
     id = #id of order to execute&lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = summon # summon units to give current unit a boost before combat.  &lt;br /&gt;
     #possibly will be eliminated in favor of the execute command.&lt;br /&gt;
   [/command]&lt;br /&gt;
  [/order]&lt;br /&gt;
&lt;br /&gt;
Note that orders with the same name can be used multiple times and will keep the same units between calls, but they should each have a unique id.&lt;br /&gt;
&lt;br /&gt;
'''Evaluators'''&lt;br /&gt;
&lt;br /&gt;
Within the many options, there will be various parameters that need to be calculated, especially numeric ones.  A large number of them will be possible to be specified as an expression that will be evaluated at the time the order is being executed.  Most of these will be numeric.  To make this more flexible, these values will allow the use of simple arithmetic expressions, wml variables, and some specialized function calls.  A typical example might look like:&lt;br /&gt;
&lt;br /&gt;
  sort_value = $villages + (2*$enemies) / @distance(@unit(),@target(fool))&lt;br /&gt;
&lt;br /&gt;
In this case the first thing that is evaluated are the functions that are designated by beginning with an @ followed by the function name and a parenthetical expression that encloses a parameter string.  Typically these functions will evaluate the parameter string in a similar manner before returning a value.  The next thing that is evaluated are things within paranthesis followed by WML variables designated with a $ at the beginning, and finally the arithmetic expression evaluated with the standard precedence.&lt;br /&gt;
&lt;br /&gt;
Items within an individual command will be evaluated before the command is executed.&lt;br /&gt;
Items within an individual order will be evaluated at the begining of the order.&lt;br /&gt;
Items within the AI tag will be evaluated only at the beginning of the turn.&lt;br /&gt;
&lt;br /&gt;
The use of evaluators will make it possible to control many of the AI parameters indirectly via WML variables that are set/changed within events.&lt;/div&gt;</summary>
		<author><name>Darth Fool</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Darth_Fool&amp;diff=15426</id>
		<title>User:Darth Fool</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Darth_Fool&amp;diff=15426"/>
		<updated>2007-05-18T04:02:58Z</updated>

		<summary type="html">&lt;p&gt;Darth Fool: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is intended as a development page for the documentation of the new AI that I am working on.  When the AI is officially released, the information will be migrated to the official wml reference pages.  Some of this is partially implemented, some of it has not yet been implemented, and some of these are planned changes to something that is already implemented, and all of it is subject to change in the code without notification.  So, in short, don't start using this in your scenarios and expect it to work just yet, or even to still be the same by the time of the official release.  This is primarily meant as a way to organize my thoughts and reduce the time from when the code is complete to when the new AI is fully documented.  You have been warned.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''The Grand Idea'''&lt;br /&gt;
&lt;br /&gt;
Ok, so what is this AI supposed to accomplish anyways.  Well, it has many goals, but most of them can be wrapped up in the following statement: The AI should be sufficiently flexible to be able to specify parameters so that it can win Heir To The Throne on easy without cheating.  That means, no knowing where things are before they are discovered (scepter of fire), no knowing where hidden or fogged units are, etc... Along the way, we should end up with an AI that makes it quite possible to create much more interesting AI behaviour in campaigns.  so, how to accomplish this?&lt;br /&gt;
&lt;br /&gt;
'''Orders'''&lt;br /&gt;
&lt;br /&gt;
The basic scheme begins with a simple concept.  The AI WML will be able to specify the order in which various objectives are accomplished, and by what units those orders are filled.  Consider that currently, the AI pursues its goals in a very specific order (combat, village capture, healing, retreat, recruit...) &lt;br /&gt;
 &lt;br /&gt;
So, the first order of business is to enable the abilty to specify the order in which commands are executed.  As a further refinement, we allow the order to restrict what type of units the order applies to.  Inside the order are a series of commands that are executed.  Units that fill that order remember which order they are following (via the ai_special tag in the unit) until they are reassigned.  Units that have no ai_special are part of the &amp;quot;default&amp;quot; orders.  Initially, any [fill] commands are executed within the order.  After this, units are sorted according to any [sort] commands&lt;br /&gt;
Then, for each unit in order the remaining commands are executed by that unit before the next unit executes the commands.&lt;br /&gt;
&lt;br /&gt;
 [order]#This tag specifies the beginning of an order description.  &lt;br /&gt;
   name = #the name of the order.  Acts to id units that are part of this order&lt;br /&gt;
   id = #uniq ID of this order tag.  Used when executing summon commands.&lt;br /&gt;
   execute = # yes(default) or no.  If yes will execute when encountered.  &lt;br /&gt;
             # If no, only executed if explicitly called by an execute command.&lt;br /&gt;
   memory = #In the various calculations, use the last seen locations of units that &lt;br /&gt;
            # are now invisible if they were last seen within memory turns.    &lt;br /&gt;
   [fill]#command to attempt to fill the order with units that match the appropriate unit filter&lt;br /&gt;
     number = #command of how many units to fill that match the filter&lt;br /&gt;
     [filter]#standard unit filter.[/filter]&lt;br /&gt;
     sort = #evaluation of how to choose which unit to accept first.  Higher value chosen first.&lt;br /&gt;
   [/fill]&lt;br /&gt;
   [sort] &lt;br /&gt;
     [filter]#standard unit filter.&lt;br /&gt;
     [/filter]&lt;br /&gt;
     sort = #evaluation of how to choose which unit to accept first.  Higher value chosen first.&lt;br /&gt;
   [/sort]   &lt;br /&gt;
   [command]#generic tags for all commands&lt;br /&gt;
     [filter]#standard unit filter.  limits which units will execute this command.&lt;br /&gt;
     [/filter]&lt;br /&gt;
     type = #type of command to execute.  command specific WML tags below&lt;br /&gt;
   [/command]#move command&lt;br /&gt;
     type = moveto # move to target.&lt;br /&gt;
   [command]&lt;br /&gt;
     type = set_order # change the unit to be a part of a different order&lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = break # stop executing this order for this unit.  &lt;br /&gt;
     #Should really have a filter otherwise makes all following commands never be executed.&lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = attack # execute an attack.  Does not move the unit! &lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = recruit # recruit units.  Does not move the unit!&lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = execute # execute the following order before continuing.&lt;br /&gt;
     id = #id of order to execute&lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = summon # summon units to give current unit a boost before combat.  &lt;br /&gt;
     #possibly will be eliminated in favor of the execute command.&lt;br /&gt;
   [/command]&lt;br /&gt;
  [/order]&lt;br /&gt;
&lt;br /&gt;
Note that orders with the same name can be used multiple times and will keep the same units between calls, but they should each have a unique id.&lt;br /&gt;
&lt;br /&gt;
'''Evaluators'''&lt;br /&gt;
&lt;br /&gt;
Within the many options, there will be various parameters that need to be calculated, especially numeric ones.  A large number of them will be possible to be specified as an expression that will be evaluated at the time the order is being executed.  Most of these will be numeric.  To make this more flexible, these values will allow the use of simple arithmetic expressions, wml variables, and some specialized function calls.  A typical example might look like:&lt;br /&gt;
&lt;br /&gt;
  sort_value = $villages + (2*$enemies) / @distance(@unit(),@target(fool))&lt;br /&gt;
&lt;br /&gt;
In this case the first thing that is evaluated are the functions that are designated by beginning with an @ followed by the function name and a parenthetical expression that encloses a parameter string.  Typically these functions will evaluate the parameter string in a similar manner before returning a value.  The next thing that is evaluated are things within paranthesis followed by WML variables designated with a $ at the beginning, and finally the arithmetic expression evaluated with the standard precedence.&lt;br /&gt;
&lt;br /&gt;
Items within an individual command will be evaluated before the command is executed.&lt;br /&gt;
Items within an individual order will be evaluated at the begining of the order.&lt;br /&gt;
Items within the AI tag will be evaluated only at the beginning of the turn.&lt;/div&gt;</summary>
		<author><name>Darth Fool</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Darth_Fool&amp;diff=15424</id>
		<title>User:Darth Fool</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Darth_Fool&amp;diff=15424"/>
		<updated>2007-05-18T03:39:50Z</updated>

		<summary type="html">&lt;p&gt;Darth Fool: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is intended as a development page for the documentation of the new AI that I am working on.  When the AI is officially released, the information will be migrated to the official wml reference pages.  Some of this is partially implemented, some of it has not yet been implemented, and some of these are planned changes to something that is already implemented, and all of it is subject to change in the code without notification.  So, in short, don't start using this in your scenarios and expect it to work just yet, or even to still be the same by the time of the official release.  This is primarily meant as a way to organize my thoughts and reduce the time from when the code is complete to when the new AI is fully documented.  You have been warned.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
'''The Grand Idea'''&lt;br /&gt;
Ok, so what is this AI supposed to accomplish anyways.  Well, it has many goals, but most of them can be wrapped up in the following statement: The AI should be sufficiently flexible to be able to specify parameters so that it can win Heir To The Throne on easy without cheating.  That means, no knowing where things are before they are discovered (scepter of fire), no knowing where hidden or fogged units are, etc... Along the way, we should end up with an AI that makes it quite possible to create much more interesting AI behaviour in campaigns.  so, how to accomplish this?&lt;br /&gt;
&lt;br /&gt;
'''Orders'''&lt;br /&gt;
&lt;br /&gt;
The basic scheme begins with a simple concept.  The AI WML will be able to specify the order in which various objectives are accomplished, and by what units those orders are filled.  Consider that currently, the AI pursues its goals in a very specific order (combat, village capture, healing, retreat, recruit...) &lt;br /&gt;
 &lt;br /&gt;
So, the first order of business is to enable the abilty to specify the order in which commands are executed.  As a further refinement, we allow the order to restrict what type of units the order applies to.  Inside the order are a series of commands that are executed.  Units that fill that order remember which order they are following (via the ai_special tag in the unit) until they are reassigned.  Units that have no ai_special are part of the &amp;quot;default&amp;quot; orders.  Initially, any [fill] commands are executed within the order.  After this, units are sorted according to any [sort] commands&lt;br /&gt;
Then, for each unit in order the remaining commands are executed by that unit before the next unit executes the commands.&lt;br /&gt;
&lt;br /&gt;
 [order]#This tag specifies the beginning of an order description.  &lt;br /&gt;
   name = #the name of the order.  Acts to id units that are part of this order&lt;br /&gt;
   id = #uniq ID of this order tag.  Used when executing summon commands.&lt;br /&gt;
   execute = # yes(default) or no.  If yes will execute when encountered.  &lt;br /&gt;
             # If no, only executed if explicitly called by an execute command.&lt;br /&gt;
   memory = #In the various calculations, use the last seen locations of units that &lt;br /&gt;
            # are now invisible if they were last seen within memory turns.    &lt;br /&gt;
   [fill]#command to attempt to fill the order with units that match the appropriate unit filter&lt;br /&gt;
     number = #command of how many units to fill that match the filter&lt;br /&gt;
     [filter]#standard unit filter.[/filter]&lt;br /&gt;
     sort = #evaluation of how to choose which unit to accept first.  Higher value chosen first.&lt;br /&gt;
   [/fill]&lt;br /&gt;
   [sort] &lt;br /&gt;
     [filter]#standard unit filter.&lt;br /&gt;
     [/filter]&lt;br /&gt;
     sort = #evaluation of how to choose which unit to accept first.  Higher value chosen first.&lt;br /&gt;
   [/sort]   &lt;br /&gt;
   [command]#generic tags for all commands&lt;br /&gt;
     [filter]#standard unit filter.  limits which units will execute this command.&lt;br /&gt;
     [/filter]&lt;br /&gt;
     type = #type of command to execute.  command specific WML tags below&lt;br /&gt;
   [/command]#move command&lt;br /&gt;
     type = moveto # move to target.&lt;br /&gt;
   [command]&lt;br /&gt;
     type = set_order # change the unit to be a part of a different order&lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = break # stop executing this order for this unit.  &lt;br /&gt;
     #Should really have a filter otherwise makes all following commands never be executed.&lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = attack # execute an attack.  Does not move the unit! &lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = recruit # recruit units.  Does not move the unit!&lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = execute # execute the following order before continuing.&lt;br /&gt;
     id = #id of order to execute&lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = summon # summon units to give current unit a boost before combat.  &lt;br /&gt;
     #possibly will be eliminated in favor of the execute command.&lt;br /&gt;
   [/command]&lt;br /&gt;
  [/order]&lt;br /&gt;
&lt;br /&gt;
Note that orders with the same name can be used multiple times and will keep the same units between calls, but they should each have a unique id.&lt;/div&gt;</summary>
		<author><name>Darth Fool</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Darth_Fool&amp;diff=15423</id>
		<title>User:Darth Fool</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Darth_Fool&amp;diff=15423"/>
		<updated>2007-05-18T03:28:49Z</updated>

		<summary type="html">&lt;p&gt;Darth Fool: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is intended as a development page for the documentation of the new AI that I am working on.  When the AI is officially released, the information will be migrated to the official wml reference pages.  Some of this is partially implemented, some of it has not yet been implemented, and some of these are planned changes to something that is already implemented, and all of it is subject to change in the code without notification.  So, in short, don't start using this in your scenarios and expect it to work just yet, or even to still be the same by the time of the official&lt;br /&gt;
release.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
'''The Grand Idea'''&lt;br /&gt;
Ok, so what is this AI supposed to accomplish anyways.  Well, it has many goals, but most of them can be wrapped up in the following statement: The AI should be sufficiently flexible to be able to specify parameters so that it can win Heir To The Throne on easy without cheating.  That means, no knowing where things are before they are discovered (scepter of fire), no knowing where hidden or fogged units are, etc... Along the way, we should end up with an AI that makes it quite possible to create much more interesting AI behaviour in campaigns.  so, how to accomplish this?&lt;br /&gt;
&lt;br /&gt;
'''Orders'''&lt;br /&gt;
&lt;br /&gt;
The basic scheme begins with a simple concept.  The AI WML will be able to specify the order in which various objectives are accomplished, and by what units those orders are filled.  Consider that currently, the AI pursues its goals in a very specific order (combat, village capture, healing, retreat, recruit...) &lt;br /&gt;
 &lt;br /&gt;
So, the first order of business is to enable the abilty to specify the order in which commands are executed.  As a further refinement, we allow the order to restrict what type of units the order applies to.  Inside the order are a series of commands that are executed.  Units that fill that order remember which order they are following (via the ai_special tag in the unit) until they are reassigned.  Units that have no ai_special are part of the &amp;quot;default&amp;quot; orders.  Initially, any [fill] commands are executed within the order.  After this, units are sorted according to any [sort] commands&lt;br /&gt;
Then, for each unit in order the remaining commands are executed by that unit before the next unit executes the commands.&lt;br /&gt;
&lt;br /&gt;
 [order]#This tag specifies the beginning of an order description.  &lt;br /&gt;
   id = #uniq ID of this order.  Used when executing summon commands&lt;br /&gt;
   name = #the name of the order.  Acts to id units that are part of this order&lt;br /&gt;
   [fill]#command to attempt to fill the order with units that match the appropriate unit filter&lt;br /&gt;
     number = #command of how many units to fill that match the filter&lt;br /&gt;
     [filter]#standard unit filter.[/filter]&lt;br /&gt;
     sort = #evaluation of how to choose which unit to accept first.  Higher value chosen first.&lt;br /&gt;
   [/fill]&lt;br /&gt;
   [sort] &lt;br /&gt;
     [filter]#standard unit filter.&lt;br /&gt;
     [/filter]&lt;br /&gt;
     sort = #evaluation of how to choose which unit to accept first.  Higher value chosen first.&lt;br /&gt;
   [/sort]   &lt;br /&gt;
   [command]#generic tags for all commands&lt;br /&gt;
     [filter]#standard unit filter.  limits which units will execute this command.&lt;br /&gt;
     [/filter]&lt;br /&gt;
     type = #type of command to execute.  command specific WML tags below&lt;br /&gt;
   [/command]#move command&lt;br /&gt;
     type = moveto # move to target.&lt;br /&gt;
   [command]&lt;br /&gt;
     type = set_order # change the unit to be a part of a different order&lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = break # stop executing this order.&lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = attack # execute an attack.  Does not move the unit! &lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = recruit # recruit units.  Does not move the unit!&lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = execute # execute the following order before continuing.&lt;br /&gt;
     id = #id of order to execute&lt;br /&gt;
   [/command]&lt;br /&gt;
   [command]&lt;br /&gt;
     type = summon # summon units to give current unit a boost before combat.  &lt;br /&gt;
     #possibly will be eliminated in favor of the execute command.&lt;br /&gt;
   [/command]&lt;br /&gt;
  [/order]&lt;/div&gt;</summary>
		<author><name>Darth Fool</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Darth_Fool&amp;diff=15422</id>
		<title>User:Darth Fool</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Darth_Fool&amp;diff=15422"/>
		<updated>2007-05-18T03:27:50Z</updated>

		<summary type="html">&lt;p&gt;Darth Fool: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is intended as a development page for the documentation of the new AI that I am working on.  When the AI is officially released, the information will be migrated to the official wml reference pages.  Some of this is partially implemented, some of it has not yet been implemented, and some of these are planned changes to something that is already implemented, and all of it is subject to change in the code without notification.  So, in short, don't start using this in your scenarios and expect it to work just yet, or even to still be the same by the time of the official&lt;br /&gt;
release.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
'''The Grand Idea'''&lt;br /&gt;
Ok, so what is this AI supposed to accomplish anyways.  Well, it has many goals, but most of them can be wrapped up in the following statement: The AI should be sufficiently flexible to be able to specify parameters so that it can win Heir To The Throne on easy without cheating.  That means, no knowing where things are before they are discovered (scepter of fire), no knowing where hidden or fogged units are, etc... Along the way, we should end up with an AI that makes it quite possible to create much more interesting AI behaviour in campaigns.  so, how to accomplish this?&lt;br /&gt;
&lt;br /&gt;
'''Orders'''&lt;br /&gt;
&lt;br /&gt;
The basic scheme begins with a simple concept.  The AI WML will be able to specify the order in which various objectives are accomplished, and by what units those orders are filled.  Consider that currently, the AI pursues its goals in a very specific order (combat, village capture, healing, retreat, recruit...) &lt;br /&gt;
 &lt;br /&gt;
So, the first order of business is to enable the abilty to specify the order in which commands are executed.  As a further refinement, we allow the order to restrict what type of units the order applies to.  Inside the order are a series of commands that are executed.  Units that fill that order remember which order they are following (via the ai_special tag in the unit) until they are reassigned.  Units that have no ai_special are part of the &amp;quot;default&amp;quot; orders.  Initially, any [fill] commands are executed within the order.  After this, units are sorted according to any [sort] commands&lt;br /&gt;
Then, for each unit in order the remaining commands are executed by that unit before the next unit executes the commands.&lt;br /&gt;
&lt;br /&gt;
 [order]#This tag specifies the beginning of an order description.  &lt;br /&gt;
  id = #uniq ID of this order.  Used when executing summon commands&lt;br /&gt;
  name = #the name of the order.  Acts to id units that are part of this order&lt;br /&gt;
  [fill]#command to attempt to fill the order with units that match the appropriate unit filter&lt;br /&gt;
    number = #command of how many units to fill that match the filter&lt;br /&gt;
    [filter]#standard unit filter.[/filter]&lt;br /&gt;
    sort = #evaluation of how to choose which unit to accept first.  Higher value chosen first.&lt;br /&gt;
  [/fill]&lt;br /&gt;
  [sort] &lt;br /&gt;
    [filter]#standard unit filter.&lt;br /&gt;
    [/filter]&lt;br /&gt;
    sort = #evaluation of how to choose which unit to accept first.  Higher value chosen first.&lt;br /&gt;
  [/sort]   &lt;br /&gt;
  [command]#generic tags for all commands&lt;br /&gt;
    [filter]#standard unit filter.  limits which units will execute this command.&lt;br /&gt;
    [/filter]&lt;br /&gt;
    type = #type of command to execute.  command specific WML tags below&lt;br /&gt;
  [/command]#move command&lt;br /&gt;
    type = moveto # move to target.&lt;br /&gt;
  [command]&lt;br /&gt;
    type = set_order # change the unit to be a part of a different order&lt;br /&gt;
  [/command]&lt;br /&gt;
  [command]&lt;br /&gt;
    type = break # stop executing this order.&lt;br /&gt;
  [/command]&lt;br /&gt;
  [command]&lt;br /&gt;
    type = attack # execute an attack.  Does not move the unit! &lt;br /&gt;
  [/command]&lt;br /&gt;
  [command]&lt;br /&gt;
    type = recruit # recruit units.  Does not move the unit!&lt;br /&gt;
  [/command]&lt;br /&gt;
  [command]&lt;br /&gt;
    type = execute # execute the following order before continuing.&lt;br /&gt;
    id = #id of order to execute&lt;br /&gt;
  [/command]&lt;br /&gt;
  [command]&lt;br /&gt;
    type = summon # summon units to give current unit a boost before combat.  &lt;br /&gt;
    #possibly will be eliminated in favor of the execute command.&lt;br /&gt;
  [/command]&lt;br /&gt;
 [/order]&lt;/div&gt;</summary>
		<author><name>Darth Fool</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Darth_Fool&amp;diff=15421</id>
		<title>User:Darth Fool</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Darth_Fool&amp;diff=15421"/>
		<updated>2007-05-18T03:26:41Z</updated>

		<summary type="html">&lt;p&gt;Darth Fool: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is intended as a development page for the documentation of the new AI that I am working on.  When the AI is officially released, the information will be migrated to the official wml reference pages.  Some of this is partially implemented, some of it has not yet been implemented, and some of these are planned changes to something that is already implemented, and all of it is subject to change in the code without notification.  So, in short, don't start using this in your scenarios and expect it to work just yet, or even to still be the same by the time of the official&lt;br /&gt;
release.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
'''The Grand Idea'''&lt;br /&gt;
Ok, so what is this AI supposed to accomplish anyways.  Well, it has many goals, but most of them can be wrapped up in the following statement: The AI should be sufficiently flexible to be able to specify parameters so that it can win Heir To The Throne on easy without cheating.  That means, no knowing where things are before they are discovered (scepter of fire), no knowing where hidden or fogged units are, etc... Along the way, we should end up with an AI that makes it quite possible to create much more interesting AI behaviour in campaigns.  so, how to accomplish this?&lt;br /&gt;
&lt;br /&gt;
'''Orders'''&lt;br /&gt;
&lt;br /&gt;
The basic scheme begins with a simple concept.  The AI WML will be able to specify the order in which various objectives are accomplished, and by what units those orders are filled.  Consider that currently, the AI pursues its goals in a very specific order (combat, village capture, healing, retreat, recruit...) &lt;br /&gt;
 &lt;br /&gt;
So, the first order of business is to enable the abilty to specify the order in which commands are executed.  As a further refinement, we allow the order to restrict what type of units the order applies to.  Inside the order are a series of commands that are executed.  Units that fill that order remember which order they are following (via the ai_special tag in the unit) until they are reassigned.  Units that have no ai_special are part of the &amp;quot;default&amp;quot; orders.  Initially, any [fill] commands are executed within the order.  After this, units are sorted according to any [sort] commands&lt;br /&gt;
Then, for each unit in order the remaining commands are executed by that unit before the next unit executes the commands.&lt;br /&gt;
&lt;br /&gt;
[order]#This tag specifies the beginning of an order description.  &lt;br /&gt;
  id = #uniq ID of this order.  Used when executing summon commands&lt;br /&gt;
  name = #the name of the order.  Acts to id units that are part of this order&lt;br /&gt;
  [fill]#command to attempt to fill the order with units that match the appropriate unit filter&lt;br /&gt;
    number = #command of how many units to fill that match the filter&lt;br /&gt;
    [filter]#standard unit filter.[/filter]&lt;br /&gt;
    sort = #evaluation of how to choose which unit to accept first.  Higher value chosen first.&lt;br /&gt;
  [/fill]&lt;br /&gt;
  [sort] &lt;br /&gt;
    [filter]#standard unit filter.&lt;br /&gt;
    [/filter]&lt;br /&gt;
    sort = #evaluation of how to choose which unit to accept first.  Higher value chosen first.&lt;br /&gt;
  [/sort]   &lt;br /&gt;
  [command]#generic tags for all commands&lt;br /&gt;
    [filter]#standard unit filter.  limits which units will execute this command.&lt;br /&gt;
    [/filter]&lt;br /&gt;
    type = #type of command to execute.  command specific WML tags below&lt;br /&gt;
  [/command]#move command&lt;br /&gt;
    type = moveto # move to target.&lt;br /&gt;
  [command]&lt;br /&gt;
    type = set_order # change the unit to be a part of a different order&lt;br /&gt;
  [/command]&lt;br /&gt;
  [command]&lt;br /&gt;
    type = break # stop executing this order.&lt;br /&gt;
  [/command]&lt;br /&gt;
  [command]&lt;br /&gt;
    type = attack # execute an attack.  Does not move the unit! &lt;br /&gt;
  [/command]&lt;br /&gt;
  [command]&lt;br /&gt;
    type = recruit # recruit units.  Does not move the unit!&lt;br /&gt;
  [/command]&lt;br /&gt;
  [command]&lt;br /&gt;
    type = execute # execute the following order before continuing.&lt;br /&gt;
    id = #id of order to execute&lt;br /&gt;
  [/command]&lt;br /&gt;
  [command]&lt;br /&gt;
    type = summon # summon units to give current unit a boost before combat.  &lt;br /&gt;
    #possibly will be eliminated in favor of the execute command.&lt;br /&gt;
  [/command]&lt;br /&gt;
[/order]&lt;/div&gt;</summary>
		<author><name>Darth Fool</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Darth_Fool&amp;diff=15420</id>
		<title>User:Darth Fool</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Darth_Fool&amp;diff=15420"/>
		<updated>2007-05-18T03:25:58Z</updated>

		<summary type="html">&lt;p&gt;Darth Fool: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is intended as a development page for the documentation of the new AI that I am working on.  When the AI is officially released, the information will be migrated to the official wml reference pages.  Some of this is partially implemented, some of it has not yet been implemented, and some of these are planned changes to something that is already implemented, and all of it is subject to change in the code without notification.  So, in short, don't start using this in your scenarios and expect it to work just yet, or even to still be the same by the time of the official&lt;br /&gt;
release.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
'''The Grand Idea'''&lt;br /&gt;
Ok, so what is this AI supposed to accomplish anyways.  Well, it has many goals, but most of them can be wrapped up in the following statement: The AI should be sufficiently flexible to be able to specify parameters so that it can win Heir To The Throne on easy without cheating.  That means, no knowing where things are before they are discovered (scepter of fire), no knowing where hidden or fogged units are, etc... Along the way, we should end up with an AI that makes it quite possible to create much more interesting AI behaviour in campaigns.  so, how to accomplish this?&lt;br /&gt;
&lt;br /&gt;
'''Orders'''&lt;br /&gt;
      type = set_order # change the unit to be a part of a different orderThe basic scheme begins with a simple concept.  The AI WML will be able to specify the order in which various objectives are accomplished, and by what units those orders are filled.  Consider that currently, the AI pursues its goals in a very specific order (combat, village capture, healing, retreat, recruit...) &lt;br /&gt;
 &lt;br /&gt;
So, the first order of business is to enable the abilty to specify the order in which commands are executed.  As a further refinement, we allow the order to restrict what type of units the order applies to.  Inside the order are a series of commands that are executed.  Units that fill that order remember which order they are following (via the ai_special tag in the unit) until they are reassigned.  Units that have no ai_special are part of the &amp;quot;default&amp;quot; orders.  Initially, any [fill] commands are executed within the order.  After this, units are sorted according to any [sort] commands&lt;br /&gt;
Then, for each unit in order the remaining commands are executed by that unit before the next unit executes the commands.&lt;br /&gt;
&lt;br /&gt;
[order]#This tag specifies the beginning of an order description.  &lt;br /&gt;
  id = #uniq ID of this order.  Used when executing summon commands&lt;br /&gt;
  name = #the name of the order.  Acts to id units that are part of this order&lt;br /&gt;
  [fill]#command to attempt to fill the order with units that match the appropriate unit filter&lt;br /&gt;
    number = #command of how many units to fill that match the filter&lt;br /&gt;
    [filter]#standard unit filter.[/filter]&lt;br /&gt;
    sort = #evaluation of how to choose which unit to accept first.  Higher value chosen first.&lt;br /&gt;
  [/fill]&lt;br /&gt;
  [sort] &lt;br /&gt;
    [filter]#standard unit filter.&lt;br /&gt;
    [/filter]&lt;br /&gt;
    sort = #evaluation of how to choose which unit to accept first.  Higher value chosen first.&lt;br /&gt;
  [/sort]   &lt;br /&gt;
  [command]#generic tags for all commands&lt;br /&gt;
    [filter]#standard unit filter.  limits which units will execute this command.&lt;br /&gt;
    [/filter]&lt;br /&gt;
    type = #type of command to execute.  command specific WML tags below&lt;br /&gt;
  [/command]#move command&lt;br /&gt;
    type = moveto # move to target.&lt;br /&gt;
  [command]&lt;br /&gt;
    type = set_order # change the unit to be a part of a different order&lt;br /&gt;
  [/command]&lt;br /&gt;
  [command]&lt;br /&gt;
    type = break # stop executing this order.&lt;br /&gt;
  [/command]&lt;br /&gt;
  [command]&lt;br /&gt;
    type = attack # execute an attack.  Does not move the unit! &lt;br /&gt;
  [/command]&lt;br /&gt;
  [command]&lt;br /&gt;
    type = recruit # recruit units.  Does not move the unit!&lt;br /&gt;
  [/command]&lt;br /&gt;
  [command]&lt;br /&gt;
    type = execute # execute the following order before continuing.&lt;br /&gt;
    id = #id of order to execute&lt;br /&gt;
  [/command]&lt;br /&gt;
  [command]&lt;br /&gt;
    type = summon # summon units to give current unit a boost before combat.  &lt;br /&gt;
    #possibly will be eliminated in favor of the execute command.&lt;br /&gt;
  [/command]&lt;br /&gt;
[/order]&lt;/div&gt;</summary>
		<author><name>Darth Fool</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Darth_Fool&amp;diff=15419</id>
		<title>User:Darth Fool</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Darth_Fool&amp;diff=15419"/>
		<updated>2007-05-18T03:25:33Z</updated>

		<summary type="html">&lt;p&gt;Darth Fool: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is intended as a development page for the documentation of the new AI that I am working on.  When the AI is officially released, the information will be migrated to the official wml reference pages.  Some of this is partially implemented, some of it has not yet been implemented, and some of these are planned changes to something that is already implemented, and all of it is subject to change in the code without notification.  So, in short, don't start using this in your scenarios and expect it to work just yet, or even to still be the same by the time of the official&lt;br /&gt;
release.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
'''The Grand Idea'''&lt;br /&gt;
Ok, so what is this AI supposed to accomplish anyways.  Well, it has many goals, but most of them can be wrapped up in the following statement: The AI should be sufficiently flexible to be able to specify parameters so that it can win Heir To The Throne on easy without cheating.  That means, no knowing where things are before they are discovered (scepter of fire), no knowing where hidden or fogged units are, etc... Along the way, we should end up with an AI that makes it quite possible to create much more interesting AI behaviour in campaigns.  so, how to accomplish this?&lt;br /&gt;
'''Orders'''&lt;br /&gt;
      type = set_order # change the unit to be a part of a different orderThe basic scheme begins with a simple concept.  The AI WML will be able to specify the order in which various objectives are accomplished, and by what units those orders are filled.  Consider that currently, the AI pursues its goals in a very specific order (combat, village capture, healing, retreat, recruit...) &lt;br /&gt;
 &lt;br /&gt;
So, the first order of business is to enable the abilty to specify the order in which commands are executed.  As a further refinement, we allow the order to restrict what type of units the order applies to.  Inside the order are a series of commands that are executed.  Units that fill that order remember which order they are following (via the ai_special tag in the unit) until they are reassigned.  Units that have no ai_special are part of the &amp;quot;default&amp;quot; orders.  Initially, any [fill] commands are executed within the order.  After this, units are sorted according to any [sort] commands&lt;br /&gt;
Then, for each unit in order the remaining commands are executed by that unit before the next unit executes the commands.&lt;br /&gt;
&lt;br /&gt;
[order]#This tag specifies the beginning of an order description.  &lt;br /&gt;
  id = #uniq ID of this order.  Used when executing summon commands&lt;br /&gt;
  name = #the name of the order.  Acts to id units that are part of this order&lt;br /&gt;
  [fill]#command to attempt to fill the order with units that match the appropriate unit filter&lt;br /&gt;
    number = #command of how many units to fill that match the filter&lt;br /&gt;
    [filter]#standard unit filter.[/filter]&lt;br /&gt;
    sort = #evaluation of how to choose which unit to accept first.  Higher value chosen first.&lt;br /&gt;
  [/fill]&lt;br /&gt;
  [sort] &lt;br /&gt;
    [filter]#standard unit filter.&lt;br /&gt;
    [/filter]&lt;br /&gt;
    sort = #evaluation of how to choose which unit to accept first.  Higher value chosen first.&lt;br /&gt;
  [/sort]   &lt;br /&gt;
  [command]#generic tags for all commands&lt;br /&gt;
    [filter]#standard unit filter.  limits which units will execute this command.&lt;br /&gt;
    [/filter]&lt;br /&gt;
    type = #type of command to execute.  command specific WML tags below&lt;br /&gt;
  [/command]#move command&lt;br /&gt;
    type = moveto # move to target.&lt;br /&gt;
  [command]&lt;br /&gt;
    type = set_order # change the unit to be a part of a different order&lt;br /&gt;
  [/command]&lt;br /&gt;
  [command]&lt;br /&gt;
    type = break # stop executing this order.&lt;br /&gt;
  [/command]&lt;br /&gt;
  [command]&lt;br /&gt;
    type = attack # execute an attack.  Does not move the unit! &lt;br /&gt;
  [/command]&lt;br /&gt;
  [command]&lt;br /&gt;
    type = recruit # recruit units.  Does not move the unit!&lt;br /&gt;
  [/command]&lt;br /&gt;
  [command]&lt;br /&gt;
    type = execute # execute the following order before continuing.&lt;br /&gt;
    id = #id of order to execute&lt;br /&gt;
  [/command]&lt;br /&gt;
  [command]&lt;br /&gt;
    type = summon # summon units to give current unit a boost before combat.  &lt;br /&gt;
    #possibly will be eliminated in favor of the execute command.&lt;br /&gt;
  [/command]&lt;br /&gt;
[/order]&lt;/div&gt;</summary>
		<author><name>Darth Fool</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=EventWML&amp;diff=12525</id>
		<title>EventWML</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=EventWML&amp;diff=12525"/>
		<updated>2006-11-18T23:23:53Z</updated>

		<summary type="html">&lt;p&gt;Darth Fool: /* the [event] tag */&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 [scenario] (or [unit] - see '''event''', [[UnitWML]]) which is used to describe a set of actions&lt;br /&gt;
which trigger at a certain point in the scenario.&lt;br /&gt;
&lt;br /&gt;
keys and tags that describe when the event should trigger:&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt; ''name'' this is not like a normal 'name' key. It is a basic description of when the event will trigger.&lt;br /&gt;
* ''prestart'' the event is triggered before a scenario 'starts' -- before anything is shown on the screen at all. You can use this event to set up things like village ownership. For things displayed on-screen such as character dialog, use 'start'.&lt;br /&gt;
* ''start'' this event triggers after the map is shown but before the scenario begins&lt;br /&gt;
* ''new turn'' this event triggers whenever the last player ends their turn. See also '''first_time_only=no'''. When the last player ends their turn, 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;
* ''side turn'' this event triggers when a side starts it's 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.&lt;br /&gt;
* ''turn ''X'''' this event triggers at the start of turn ''X''. ''X'' cannot be 1.&lt;br /&gt;
* ''time over'' this event triggers on turn ''turns''. (''turns'' is specified in [scenario])&lt;br /&gt;
* ''enemies defeated'' this event triggers when all units with '''canrecruit=1''' (i.e. all leaders) not allied with side 1 are killed.&lt;br /&gt;
* ''victory'' in this scenario, any tag of the form '''[endlevel] result=victory [/endlevel]''' will be automatically preceded by all actions in this tag. It helps debugging if the victory event allows you to safely advance to any of the possible next maps after using the &amp;quot;:n&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. (See also [endlevel], [[DirectActionsWML]])&lt;br /&gt;
* ''defeat'' in this scenario, any tag of the form '''[endlevel] result=defeat [/endlevel]''' will be automatically preceded by all actions in this tag. (See also [endlevel], [[DirectActionsWML]])&lt;br /&gt;
* ''ai turn'' is triggered just before the AI is invoked for a player.  This is called after ''side turn'', so if you move a unit here, its movement will not be reset .&lt;br /&gt;
&lt;br /&gt;
Events with the following trigger types can be filtered on (see [[FilterWML]]).&lt;br /&gt;
Whenever one of these events is triggered,&lt;br /&gt;
the position of ''primary_unit'' is stored in the variables 'x1' and 'y1',&lt;br /&gt;
and the position of ''secondary_unit'' is stored in 'x2' and 'y2'.&lt;br /&gt;
&lt;br /&gt;
* ''moveto'' triggers after ''primary_unit'' moves. Usually the location of ''primary_unit'' is also filtered on; remember that this is the location that ''primary_unit'' lands on, not the location it started on or any location it travels on.&lt;br /&gt;
* ''sighted'' this event triggers when ''primary_unit'' moves to a location where ''secondary_unit'' is in ''primary_unit'''s sight range. Works only in shroud or fog.&lt;br /&gt;
* ''attack'' this event triggers when ''primary_unit'' attacks ''secondary_unit''.&lt;br /&gt;
* ''attacker_hits'' this event triggers when the attacker (''primary_unit'') hits the defender (''secondary_unit'').&lt;br /&gt;
* ''attacker_misses''} same as ''attacker_hits'', but is triggered when the attacker misses.&lt;br /&gt;
* ''defender_hits'' this event triggers when the attacker (''primary_unit'') is hit in retaliation by the defender (''secondary_unit'').&lt;br /&gt;
* ''defender_misses'' same as ''defender_hits'', but is triggered when the defender misses.&lt;br /&gt;
* ''attack_end'' is similar to ''attack'', but is instead triggered after the fight, not before. Note that if either unit is killed during the fight, this event triggers before any ''die'' events.&lt;br /&gt;
* ''stone'' this event triggers when ''primary_unit'' is hit by an attack with the 'stones' ability (See ''stones'', [[AbilitiesWML]]) by ''secondary_unit'' (''secondary_unit'' is the unit with the 'stones' ability.)&lt;br /&gt;
* ''die'' this event triggers when ''primary_unit'' is killed by ''secondary_unit''.&lt;br /&gt;
* ''capture'' this event triggers when ''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.&lt;br /&gt;
* ''recruit'' this event triggers when ''primary_unit'' is recruited or recalled. (That is, when a unit is recruited or recalled, it will trigger this event and this event's filter will filter that unit.)&lt;br /&gt;
* ''prerecruit'' this event triggers when ''primary_unit'' is recruited, but before it is displayed. &lt;br /&gt;
* ''advance'' this event triggers just before ''primary_unit'' is going to advance to another unit.&lt;br /&gt;
* ''post_advance'' this event triggers just after ''primary_unit'' has advanced to another unit.&lt;br /&gt;
* ''select'' triggers when a unit is selected.  Mainly useful for the tutorial.&lt;br /&gt;
&lt;br /&gt;
An '''[allow_undo]''' tag anywhere within a moveto event will cancel any lack of undo functionality the event would have&lt;br /&gt;
caused. It is up to the scenario designer to avoid abusing this command by allowing undo on events that shouldn't be&lt;br /&gt;
undoable. The results of doing this may be strange. This actually does have functionality beyond aesthetics like&lt;br /&gt;
signs: suppose you have an event that performs some action depending on the condition of an 'if' statement. This event&lt;br /&gt;
might be executed on every single move, but the body of the 'if' statement entered only in a few cases. Previously&lt;br /&gt;
this would completely disable undo for the entire scenario, while now it can be made to only disable undo in the cases&lt;br /&gt;
where the event mutates the scenario.&lt;br /&gt;
&amp;lt;/li&amp;gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Primary_unit'' can be referred to as '''unit''' and ''Secondary_unit'' can be referred to as '''second_unit''' in [message] tags. For example:&lt;br /&gt;
 [event]&lt;br /&gt;
 name=die&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;
&lt;br /&gt;
These keys and tags are more complex ways to filter when an event should trigger:&lt;br /&gt;
* ''first_time_only'' whether the event should be removed from the scenario after it is triggered.  Default is 'yes'.&lt;br /&gt;
* '''[filter]''' the event will only trigger if ''primary_unit'' matches this filter.&lt;br /&gt;
** standard unit filter - attributes for [filter] are described in [[FilterWML]]&lt;br /&gt;
* '''[filter_second]''' is like [filter], but for ''secondary_unit''.&lt;br /&gt;
** standard unit filter&lt;br /&gt;
* '''[special_filter]''' and '''[special_filter_second]''' can be used to set some additional filtering criteria for ''primary_unit'' and ''secondary_unit'' that are not generally available in a standard unit filter. Can be used in events ''attack'', ''attacker_hits'', ''attacker_misses'', ''defender_hits'', ''defender_misses'' and ''attack_end''.&lt;br /&gt;
** ''weapon'' the name of the weapon used.&lt;br /&gt;
** ''terrain'' the letter of the terrain the unit is on.&lt;br /&gt;
&lt;br /&gt;
=== Actions triggered by [event] ===&lt;br /&gt;
&lt;br /&gt;
After the trigger conditions have been met, all 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;
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 1 special type of action: event creation.  By placing an '''[event]''' tag inside another '''[event]''' tag, the nested event is created when the outer event executes.  For example, you could create a portal that opens on turn 10.  The outer event executes on turn 10, creating the nested moveto event, which executes when a player steps on a certain spot.  An equivalent way of doing this would be to a single moveto event with an if statement to check for turn number, but using nested '''[event]''' tags is a simple and elegant way to accomplish more complex tasks without resorting to excessive if statements.&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>Darth Fool</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=User:Ayin/New_terrain_graphics_system_proposal&amp;diff=4111</id>
		<title>User:Ayin/New terrain graphics system proposal</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=User:Ayin/New_terrain_graphics_system_proposal&amp;diff=4111"/>
		<updated>2005-10-15T19:05:19Z</updated>

		<summary type="html">&lt;p&gt;Darth Fool: /* Hard to understand */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is a working document for a proposal for a complete rewrite of the terrain graphics system. It may be considered as a counter-proposal to the [[User:Ayin/Extended terrains proposal|extended terrains proposal]].&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
==Motivations for the proposal==&lt;br /&gt;
&lt;br /&gt;
The current terrain-graphics system is a powerful, albeit complex, system whose purpose is to transform maps (which are, basically, 2-dimensional arrays containing 1-character terrains) into a list of graphics for each location in the map.&lt;br /&gt;
&lt;br /&gt;
The base for the system, and the root of a &amp;lt;tt&amp;gt;terrain_graphics&amp;lt;/tt&amp;gt; rule, is: &amp;quot;'''pattern of terrains''' =&amp;gt; '''associated images'''&amp;quot;. In my ([[User:Ayin|Ayin]] &amp;lt;sup&amp;gt;[[User_talk:Ayin|(talk)]]&amp;lt;/sup&amp;gt;) opinion, pattern-based rules are the way to go: those are simple to understand, and allow nearly anything.&lt;br /&gt;
&lt;br /&gt;
However, the current system (see documentation here [[TerrainGraphicsWML]], or, better, [http://www.anathas.org/ayin/wesnoth/doc/terrain_graphics_wml here]) has several drawbacks, which I will try to detail below:&lt;br /&gt;
&lt;br /&gt;
=== Very WML-intensive ===&lt;br /&gt;
&lt;br /&gt;
The basic, pattern =&amp;gt; images system, is quite hard to type effectively in WML.&lt;br /&gt;
&lt;br /&gt;
One simple, standard rule takes about 20 to 50 lines of WML. Considering that completely defining a &amp;quot;castle&amp;quot; with a keep takes about 7 rules (using rotation symetries), and a basic transition takes 4 rules (again, using rotation symetries), this means about 200 lines of WML to completely define a transition.&lt;br /&gt;
&lt;br /&gt;
To solve this problem, the WML macro system is used quite intensively. Considering that the &amp;lt;tt&amp;gt;terrain-graphics.cfg&amp;lt;/tt&amp;gt; file only contains macros and comments, and is about 800 lines long, and considering each macro rule generates, more or less, 40 lines of WML, this amounts to many lines of WML for the engine. Some testing shown this amounts to about 13000 lines in Wesnoth 1.1-svn. This is about 1/4 of the WML cache.&lt;br /&gt;
&lt;br /&gt;
The problem with this use of macros is that directly coding &amp;lt;tt&amp;gt;terrain_graphics&amp;lt;/tt&amp;gt; rules is pretty much deprecated: it is recommended to use macros which re-use already-created rulesets instead of directly using new ones. We are more or less falling in the situation of Sendmail, where what was originally a &amp;quot;config file&amp;quot; became &amp;quot;program logic&amp;quot;, and where the &amp;quot;config file&amp;quot; uses some macro system to transform higher-level macros into the actual low-level file which is then parsed by the compiled program.&lt;br /&gt;
&lt;br /&gt;
This is a bad thing.&lt;br /&gt;
&lt;br /&gt;
=== Relatively slow ===&lt;br /&gt;
&lt;br /&gt;
Although there have been many optimizations in this way, rebuilding the list of terrain graphics (when, for example, a terrain has changed) still is pretty slow on older computers.&lt;br /&gt;
&lt;br /&gt;
=== Quite a complex system ===&lt;br /&gt;
&lt;br /&gt;
The pattern =&amp;gt; images system is something very simple, conceptually. However, to be able to properly generate terrain graphics, the following subtelties must be taken into account:&lt;br /&gt;
&lt;br /&gt;
;Rule overlapping&lt;br /&gt;
:The main problem with this approach is to specify precedence, and mutual-exclusiveness, of rules. For example, rules can be mutually-exclusive:&lt;br /&gt;
:*on an hex (only one rule of this &amp;quot;kind&amp;quot; can apply on a given hex)&lt;br /&gt;
:*on a hex border (only one rule of this &amp;quot;kind&amp;quot; can apply on a given hex border)&lt;br /&gt;
:*or on a hex corner (only one rule of this &amp;quot;kind&amp;quot; can apply on a given hex corner)&lt;br /&gt;
:Furthermore, some rules have to be independant one from the other (for example, rules defining the base terrains and transitions, and rules defining the overlay graphics, are totally independant), and some rules are mutually exclusive (for example, all rules defining base terrain transitions are mutually exclusives on hex borders, all rules defining base terrains are mutually exclusive on hexes, all rules defining some kind of castle-like fence are mutually exclusive on hex corners).&lt;br /&gt;
:To solve this problem, a rule may apply &amp;quot;flags&amp;quot; on some hexes, and check for the presence, or absence, of flags before being applyied.&lt;br /&gt;
;Image ordering and adjustment&lt;br /&gt;
:Images will necessarily have to overlap. The overlapping order of images is the source of many potential graphical glitches. A simple, layer-based mode to specify the overlapping order of images is not enough, nor is the &amp;quot;drawing in the order the rules are defined&amp;quot; solution.&lt;br /&gt;
:The current system uses an ordering model based on 2 different shapes for images:&lt;br /&gt;
:*Images representing terrains layered over the floor. Those use a simple layer-based model&lt;br /&gt;
:*Images representing terrains standing vertically on the floor. Those have x,y coordinates, and are layered in the logical order. Specifying those coordinates seems quite hard to many terrain developers.&lt;br /&gt;
;Using symetry properties&lt;br /&gt;
:Most rules (hopefully) have 6-way rotational symetry properties. If they had not, the already huge amount of WML used would actually have to be multiplicated by 6. However, defining template-like rules which spawn 6 actual, rotated rules is not trivial:&lt;br /&gt;
:*The rule itself can be rotated, but not the images themselves. Said images must have different filenames. The rule rotation must then have a way to specify the name of those files.&lt;br /&gt;
:*Same for flags and rule overlapping&lt;br /&gt;
:*Same (worse?) for layering of &amp;quot;vertical&amp;quot; images.&lt;br /&gt;
&lt;br /&gt;
===Hard to understand===&lt;br /&gt;
&lt;br /&gt;
Overall, the system has many possibilities, which have successfully been used to expand the graphics possiblities on Wesnoth. However, it looks like that few (no?) people understand it enough to use it effectively, and that the only solution, for graphics designers, to implement new ideas or to fix glitches is to ask me, on IRC, how to do it. As said above, the system is split in two parts:&lt;br /&gt;
&lt;br /&gt;
* A WML part which can be considered program logic, which is quite complex. For a long time I ([[User:Ayin|Ayin]] &amp;lt;sup&amp;gt;[[User_talk:Ayin|(talk)]]&amp;lt;/sup&amp;gt;) was the only one to actually commit changes in this part.  There has only been one other commit, made by Darth Fool for use with the ruins graphics.  He has promptly forget everything he knew about terrain WML and continues to point people at Ayin when questions are asked of him.&lt;br /&gt;
* A WML-macro parts which is more-or-less accessible to artists, but which still retains a large part of black magic. (For example: &amp;quot;&amp;lt;tt&amp;gt;{TERRAIN_ADJACENT_CORNER_PROB  K      q      !NQqCK    56,76 sunken-ruinkeep3-wall-1 25}&amp;lt;/tt&amp;gt;&amp;quot;: who know what those &amp;quot;56,76&amp;quot; numbers mean? And what would happen if those were changed?)&lt;br /&gt;
&lt;br /&gt;
I've been starting to thing the problem is that the system is too powerful, and that going all-WML may not necessarily be a good idea. Being generic is good, being too generic may prove harmful.&lt;br /&gt;
&lt;br /&gt;
==Proposals==&lt;br /&gt;
&lt;br /&gt;
===Part 1: Make terrain_graphics WML driven by terrain WML===&lt;br /&gt;
&lt;br /&gt;
Part 1 of the proposal is to make &amp;lt;tt&amp;gt;terrain&amp;lt;/tt&amp;gt; WML define which rules are to be associated to a given terrain. For example:&lt;br /&gt;
&lt;br /&gt;
  [terrain]&lt;br /&gt;
     id=grassland&lt;br /&gt;
     name= _ &amp;quot;Grassland&amp;quot;&lt;br /&gt;
     char=g&lt;br /&gt;
     '''graphics=grassland'''&lt;br /&gt;
  [/terrain]&lt;br /&gt;
&lt;br /&gt;
  [terrain]&lt;br /&gt;
    symbol_image=village-elven-tile&lt;br /&gt;
    id=village&lt;br /&gt;
    name= _ &amp;quot;Village&amp;quot;&lt;br /&gt;
    char=t&lt;br /&gt;
    heals=true&lt;br /&gt;
    gives_income=true&lt;br /&gt;
    '''graphics=grassland,elven-village'''&lt;br /&gt;
  [/terrain]&lt;br /&gt;
&lt;br /&gt;
  [terrain]&lt;br /&gt;
    symbol_image=forest-tile&lt;br /&gt;
    id=forest&lt;br /&gt;
    name= _ &amp;quot;Forest&amp;quot;&lt;br /&gt;
    char=f&lt;br /&gt;
    '''graphics=grassland,forest'''&lt;br /&gt;
  [/terrain]&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;terrain_graphics&amp;lt;/tt&amp;gt; rules would not apply on terrain characters anymore, but would, instead, apply on symbols like &amp;quot;grassland&amp;quot;, &amp;quot;forest&amp;quot;, &amp;quot;village&amp;quot;, etc.&lt;br /&gt;
&lt;br /&gt;
===Part 2: Use modular terrain graphics code===&lt;br /&gt;
====Basics====&lt;br /&gt;
&lt;br /&gt;
If only coders can modify the rulesets which build terrains, that's OK, but then, there's no point anymore to define rulesets using WML then.&lt;br /&gt;
&lt;br /&gt;
The proposal is to have a common C++ API which would be used to define terrain graphics modules. Terrain graphics WML would then be used to instantiate such modules with parameters.&lt;br /&gt;
&lt;br /&gt;
The following WML elements would be present:&lt;br /&gt;
&lt;br /&gt;
;module&lt;br /&gt;
:The name of the module, as defined in the game code.&lt;br /&gt;
;terrain_type_X&lt;br /&gt;
:A &amp;quot;terrain type&amp;quot; parameter. Modules may require 1, 2, or more terrain types. Those are module-specific. Those actually correspond to the &amp;lt;tt&amp;gt;graphics&amp;lt;/tt&amp;gt; WML element of the &amp;lt;tt&amp;gt;terrain&amp;lt;/tt&amp;gt; WML (see part 1 of the proposition)&lt;br /&gt;
;image_basename&lt;br /&gt;
:A parameter from which the module will derive the actual name of the images used (for example, if this is &amp;quot;grassland&amp;quot;, the module &amp;quot;base-terrain&amp;quot; will determine that the names of the actual files to use are &amp;quot;grassland.png&amp;quot;, &amp;quot;grassland-nw.png&amp;quot;, etc.&lt;br /&gt;
&lt;br /&gt;
====Other====&lt;br /&gt;
&lt;br /&gt;
* Specify several image probabilities&lt;br /&gt;
* Specify animations&lt;br /&gt;
* Other types of per-module parameters?&lt;br /&gt;
&lt;br /&gt;
====Examples====&lt;br /&gt;
  [terrain_graphics]&lt;br /&gt;
    module=&amp;quot;base-terrain&amp;quot;&lt;br /&gt;
    terrain_type_1=&amp;quot;grassland&amp;quot;&lt;br /&gt;
    terrain_type_2=&amp;quot;! grassland&amp;quot;&lt;br /&gt;
    image_basename=&amp;quot;grassland:80,grassland-v2:10,grassland-v3:10&amp;quot;&lt;br /&gt;
  [/terrain_graphics]&lt;br /&gt;
&lt;br /&gt;
  [terrain_graphics]&lt;br /&gt;
    module=&amp;quot;overlay-image&amp;quot;&lt;br /&gt;
    terrain-type_1=&amp;quot;village&amp;quot;&lt;br /&gt;
    image_basename=&amp;quot;human-village&amp;quot;&lt;br /&gt;
  [/terrain_graphics]&lt;br /&gt;
&lt;br /&gt;
The castles would still have a bit of complexity in them, as there are many kinds of 3-way transitions possibles.&lt;br /&gt;
&lt;br /&gt;
  [terrain_graphics]&lt;br /&gt;
    module=wall&lt;br /&gt;
    terrain_type_1=&amp;quot;castle&amp;quot;&lt;br /&gt;
    terrain_type_2=&amp;quot;!castle,!keep,!encampment&amp;quot;&lt;br /&gt;
    terrain_type_3=&amp;quot;!castle,!keep,!encampment&amp;quot;&lt;br /&gt;
    image_basename=&amp;quot;castle-convex&amp;quot;&lt;br /&gt;
  [/terrain_graphics]&lt;br /&gt;
&lt;br /&gt;
  [terrain_graphics]&lt;br /&gt;
    module=wall&lt;br /&gt;
    terrain_type_1=&amp;quot;!castle,!keep,!encampment&amp;quot;&lt;br /&gt;
    terrain_type_2=&amp;quot;castle&amp;quot;&lt;br /&gt;
    terrain_type_3=&amp;quot;castle&amp;quot;&lt;br /&gt;
    image_basename=&amp;quot;castle-concave&amp;quot;&lt;br /&gt;
  [/terrain_graphics]&lt;br /&gt;
&lt;br /&gt;
====Modules to create====&lt;br /&gt;
&lt;br /&gt;
According to what is currently done in the code, the following modules would need to be developed:&lt;br /&gt;
&lt;br /&gt;
* base-terrain. Basic terrain with standard transitions. to remplace TERRAIN_BASE, TERRAIN_BASE_PROB, and TERRAIN_ADJACENT.&lt;br /&gt;
* wall. To replace terrain-adjacent-corner.&lt;br /&gt;
* overlay-image. To replace SHEX and BUILDING.&lt;br /&gt;
* canyon.&lt;br /&gt;
* bridge.&lt;br /&gt;
&lt;br /&gt;
====Module API====&lt;br /&gt;
&lt;br /&gt;
This is a proposal for a terrain_graphics module API. Modules should, ideally, be very short, independant fragments of C++ code.&lt;br /&gt;
&lt;br /&gt;
  ''// Represents an image set as defined in the [terrain_graphics] WML, and handling probs''&lt;br /&gt;
  ''// and animations transparently''.&lt;br /&gt;
  ''// operator+(const std::string&amp;amp;) is defined, to add a suffix to animated or probabilized images.''&lt;br /&gt;
  class imageset;&lt;br /&gt;
  &lt;br /&gt;
  class terrain_pattern;&lt;br /&gt;
  &lt;br /&gt;
  class module &lt;br /&gt;
  {&lt;br /&gt;
  public:&lt;br /&gt;
      module(gamemap&amp;amp; map, imageset&amp;amp; set);&lt;br /&gt;
      &lt;br /&gt;
      virtual void fill_terrains_for(const gamemap::location&amp;amp;)&lt;br /&gt;
  protected:&lt;br /&gt;
      const gamemap&amp;amp; map() const;&lt;br /&gt;
      void insert_image_flat(int layer, imageset&amp;amp;) const;&lt;br /&gt;
      void insert_image_vertical(pos, imageset&amp;amp;) const;&lt;br /&gt;
      &lt;br /&gt;
      bool tile_matches(const gamemap::location&amp;amp; loc, const terrain_pattern&amp;amp; pattern);&lt;br /&gt;
      const gamemap::location adjacent_tile(const gamemap::location&amp;amp; loc, int position);&lt;br /&gt;
  &lt;br /&gt;
      imageset&amp;amp; image_basename() const; ''// Corresponds to image_basename in the WML''&lt;br /&gt;
      std::vector&amp;lt;terrain_pattern&amp;gt; terrain_types; ''// Corresponds to terrain_types in the WML''&lt;br /&gt;
  &lt;br /&gt;
      std::string corner_name(int corner);&lt;br /&gt;
      std::string edge_name(int edge);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
  ''// Sample code for the &amp;quot;wall&amp;quot; module''&lt;br /&gt;
  module_wall : public module&lt;br /&gt;
  {&lt;br /&gt;
  public:&lt;br /&gt;
      virtual void fill_terrains_for(const gamemap::location&amp;amp; loc)&lt;br /&gt;
      {&lt;br /&gt;
         for (int i = 0; i &amp;lt; 6; ++i) {&lt;br /&gt;
           if (tile_matches(loc, tile_terrain_types[0]) &amp;amp;&amp;amp;&lt;br /&gt;
               tile_matches(ajacent_tile(loc, i),  terrain_types[1]) &amp;amp;&amp;amp;&lt;br /&gt;
               tile_matches(adjacent_tile(loc, i+1), terrain_types[2])) {&lt;br /&gt;
  &lt;br /&gt;
              insert_image_vertical(i, image_basename() + corner_name(i));&lt;br /&gt;
           }&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
===Part 3: Sanitize the vertical layering code===&lt;br /&gt;
&lt;br /&gt;
The vertical layering system, using x,y coordinates for the &amp;quot;base point&amp;quot; of a vertical item, is more complicated than necessary. The following points must be taked into account:&lt;br /&gt;
&lt;br /&gt;
* Only y-layering is important. x-layering was only used when rotating rules, which, according to part 2, will be directly managed by modules.&lt;br /&gt;
* The &amp;quot;pixel size&amp;quot; of a tile, and x-layering of images, are totally unrelated concepts. There is no need for 72 layers per hexes. 3, 5, or 7 layers should be enough.&lt;br /&gt;
* Calculating the rectangular coordinates of a point in a hex-system is a pain. Coordinates should be expressed relatively to hexes, not in cartesian coordinates.&lt;br /&gt;
* The &amp;quot;backside&amp;quot; layer of an hex should '''always''' be '''in front''' of the &amp;quot;frontside&amp;quot; layer of hexes behind it. This rule should save us many headaches about graphic glitches.&lt;/div&gt;</summary>
		<author><name>Darth Fool</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=CommandMode&amp;diff=1701</id>
		<title>CommandMode</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=CommandMode&amp;diff=1701"/>
		<updated>2005-08-14T04:46:58Z</updated>

		<summary type="html">&lt;p&gt;Darth Fool: /* Command Mode */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Command Mode ==&lt;br /&gt;
&lt;br /&gt;
You can access command mode by typing ':' in a single or multi player scenario.&lt;br /&gt;
More accurately, you need to type shift - semicolon( ''';''' ).&lt;br /&gt;
However this isn't possible on all keyboards;&lt;br /&gt;
if your keyboard doesn't have ':' above ';' you can change&lt;br /&gt;
the hotkey in the Preferences, or you could edit '''game.cfg''' by hand.'&lt;br /&gt;
&lt;br /&gt;
Several vi-like commands are available in command mode.&lt;br /&gt;
They are defined in ''playturn.cpp'' in the ''turn_info::do_command()'' function:&lt;br /&gt;
* ''':q|| or ||:q!''' quit the scenario (without prompting)&lt;br /&gt;
* ''':w''' save the game (without prompting)&lt;br /&gt;
* ''':wq''' save the game and quit the scenario (without prompting)&lt;br /&gt;
* ''':refresh''' redraw the screen&lt;br /&gt;
* ''':droid side''' toggle player on side between human and AI players&lt;br /&gt;
* ''':kick''' kick a user in multiplayer. They will be able to rejoin the game.&lt;br /&gt;
Generally a friendly way to remove someone who is having connection or other difficulties.&lt;br /&gt;
* ''':ban''' kick and ban a user in multiplayer, and the IP address used by that username&lt;br /&gt;
* ''':control ''side'' ''player//''' change the controller for ''side'' to ''player''&lt;br /&gt;
* ''':clear''' clear chat messages&lt;br /&gt;
* ''':debug''' switch debug mode on&lt;br /&gt;
* ''':debug off''' switch debug mode off&lt;br /&gt;
* ''':theme''' bring up theme selection menu&lt;br /&gt;
&lt;br /&gt;
[[DebugMode]] enables additional commands in command mode:&lt;br /&gt;
* ''':n''' skip to next scenario by triggering a win event&lt;br /&gt;
* ''':gold ''amount//''' add ''amount'' gold to the current player's side&lt;br /&gt;
* ''':create ''unit_type''''' create a unit of type specified at last selected hex&lt;br /&gt;
* ''':unit ''attribute//=//value''''' when a unit is selected, this will set&lt;br /&gt;
the unit's ''attribute'' to ''value''.&lt;br /&gt;
See [[SingleUnitWML]] for possible values.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[DebugMode]]&lt;br /&gt;
* [[DeveloperResources]]&lt;/div&gt;</summary>
		<author><name>Darth Fool</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=CommandMode&amp;diff=1700</id>
		<title>CommandMode</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=CommandMode&amp;diff=1700"/>
		<updated>2005-08-14T04:46:24Z</updated>

		<summary type="html">&lt;p&gt;Darth Fool: /* Command Mode */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Command Mode ==&lt;br /&gt;
&lt;br /&gt;
You can access command mode by typing ':' in a single or multi player scenario.&lt;br /&gt;
More accurately, you need to type shift - semicolon( ''';''' ).&lt;br /&gt;
However this isn't possible on all keyboards;&lt;br /&gt;
if your keyboard doesn't have ':' above ';' you can change&lt;br /&gt;
the hotkey in the Preferences, or you could edit '''game.cfg''' by hand.'&lt;br /&gt;
&lt;br /&gt;
Several vi-like commands are available in command mode.&lt;br /&gt;
They are defined in ''playturn.cpp'' in the ''turn_info::do_command()'' function:&lt;br /&gt;
* ''':q|| or ||:q!''' quit the scenario (without prompting)&lt;br /&gt;
* ''':w''' save the game (without prompting)&lt;br /&gt;
* ''':wq''' save the game and quit the scenario (without prompting)&lt;br /&gt;
* ''':refresh''' redraw the screen&lt;br /&gt;
* ''':droid X''' toggle player X between human and AI players&lt;br /&gt;
* ''':kick''' kick a user in multiplayer. They will be able to rejoin the game.&lt;br /&gt;
Generally a friendly way to remove someone who is having connection or other difficulties.&lt;br /&gt;
* ''':ban''' kick and ban a user in multiplayer, and the IP address used by that username&lt;br /&gt;
* ''':control ''side'' ''player//''' change the controller for ''side'' to ''player''&lt;br /&gt;
* ''':clear''' clear chat messages&lt;br /&gt;
* ''':debug''' switch debug mode on&lt;br /&gt;
* ''':debug off''' switch debug mode off&lt;br /&gt;
* ''':theme''' bring up theme selection menu&lt;br /&gt;
&lt;br /&gt;
[[DebugMode]] enables additional commands in command mode:&lt;br /&gt;
* ''':n''' skip to next scenario by triggering a win event&lt;br /&gt;
* ''':gold ''amount//''' add ''amount'' gold to the current player's side&lt;br /&gt;
* ''':create ''unit_type''''' create a unit of type specified at last selected hex&lt;br /&gt;
* ''':unit ''attribute//=//value''''' when a unit is selected, this will set&lt;br /&gt;
the unit's ''attribute'' to ''value''.&lt;br /&gt;
See [[SingleUnitWML]] for possible values.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[DebugMode]]&lt;br /&gt;
* [[DeveloperResources]]&lt;/div&gt;</summary>
		<author><name>Darth Fool</name></author>
		
	</entry>
</feed>