<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.wesnoth.org/index.php?action=history&amp;feed=atom&amp;title=Campaign%2FForgotten_Legacy%2FGeneral_Utils</id>
	<title>Campaign/Forgotten Legacy/General Utils - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.wesnoth.org/index.php?action=history&amp;feed=atom&amp;title=Campaign%2FForgotten_Legacy%2FGeneral_Utils"/>
	<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=Campaign/Forgotten_Legacy/General_Utils&amp;action=history"/>
	<updated>2026-07-12T01:16:21Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.31.16</generator>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=Campaign/Forgotten_Legacy/General_Utils&amp;diff=24372&amp;oldid=prev</id>
		<title>Aethaeryn: recategorizing</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=Campaign/Forgotten_Legacy/General_Utils&amp;diff=24372&amp;oldid=prev"/>
		<updated>2008-03-23T12:36:07Z</updated>

		<summary type="html">&lt;p&gt;recategorizing&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revision as of 12:36, 23 March 2008&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l637&quot; &gt;Line 637:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 637:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Campaigns&lt;/del&gt;]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Category:&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Forgotten Legacy&lt;/ins&gt;]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Aethaeryn</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=Campaign/Forgotten_Legacy/General_Utils&amp;diff=22062&amp;oldid=prev</id>
		<title>Esr: Categorize</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=Campaign/Forgotten_Legacy/General_Utils&amp;diff=22062&amp;oldid=prev"/>
		<updated>2008-02-21T22:48:26Z</updated>

		<summary type="html">&lt;p&gt;Categorize&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revision as of 22:48, 21 February 2008&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l636&quot; &gt;Line 636:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 636:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;#enddef&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;#enddef&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Category:Campaigns]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Esr</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.wesnoth.org/index.php?title=Campaign/Forgotten_Legacy/General_Utils&amp;diff=7744&amp;oldid=prev</id>
		<title>Db0 at 17:53, 28 February 2006</title>
		<link rel="alternate" type="text/html" href="https://wiki.wesnoth.org/index.php?title=Campaign/Forgotten_Legacy/General_Utils&amp;diff=7744&amp;oldid=prev"/>
		<updated>2006-02-28T17:53:00Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
# Thank to zookeeper for this file within his RotL campaign&lt;br /&gt;
&lt;br /&gt;
#define PUT_IMG IMG X Y&lt;br /&gt;
	[item]&lt;br /&gt;
		x={X}&lt;br /&gt;
		y={Y}&lt;br /&gt;
		image={IMG}&lt;br /&gt;
	[/item]&lt;br /&gt;
#enddef&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Shortcut for IF statements testing the value of a variable. Need to write&lt;br /&gt;
# [then] and [else] tags manually, though.&lt;br /&gt;
#&lt;br /&gt;
# I usually use it like this:&lt;br /&gt;
#&lt;br /&gt;
# {IF some_variable equals yes (&lt;br /&gt;
#     [then]&lt;br /&gt;
#         ...&lt;br /&gt;
#     [/then]&lt;br /&gt;
# )}&lt;br /&gt;
&lt;br /&gt;
#define IF VAR OP VAL CONTENTS&lt;br /&gt;
    [if]&lt;br /&gt;
        [variable]&lt;br /&gt;
            name={VAR}&lt;br /&gt;
            {OP}={VAL}&lt;br /&gt;
        [/variable]&lt;br /&gt;
&lt;br /&gt;
        {CONTENTS}&lt;br /&gt;
    [/if]&lt;br /&gt;
#enddef&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# A variation of the above, testing [have_unit] instead of [variable].&lt;br /&gt;
&lt;br /&gt;
#define IF_HAVEUNIT FILTER CONTENTS&lt;br /&gt;
    [if]&lt;br /&gt;
        [have_unit]&lt;br /&gt;
            {FILTER}&lt;br /&gt;
        [/have_unit]&lt;br /&gt;
&lt;br /&gt;
        {CONTENTS}&lt;br /&gt;
    [/if]&lt;br /&gt;
#enddef&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# A shortcut for [while] testing the value of a variable. Use just like the IF&lt;br /&gt;
# above.&lt;br /&gt;
&lt;br /&gt;
#define WHILE VAR OP VAL CONTENTS&lt;br /&gt;
    [while]&lt;br /&gt;
        [variable]&lt;br /&gt;
            name={VAR}&lt;br /&gt;
            {OP}={VAL}&lt;br /&gt;
        [/variable]&lt;br /&gt;
&lt;br /&gt;
        [do]&lt;br /&gt;
            {CONTENTS}&lt;br /&gt;
        [/do]&lt;br /&gt;
    [/while]&lt;br /&gt;
#enddef&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# A variation of the above, testing for [have_unit] instead of [variable].&lt;br /&gt;
&lt;br /&gt;
#define WHILE_HAVEUNIT FILTER CONTENTS&lt;br /&gt;
    [while]&lt;br /&gt;
        [have_unit]&lt;br /&gt;
            {FILTER}&lt;br /&gt;
        [/have_unit]&lt;br /&gt;
&lt;br /&gt;
        [do]&lt;br /&gt;
            {CONTENTS}&lt;br /&gt;
        [/do]&lt;br /&gt;
    [/while]&lt;br /&gt;
#enddef&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Sets VAR to FROM, and repeats CONTENTS until VAR equals TO, adding 1 to VAR&lt;br /&gt;
# every cycle. Quite similar to REPEAT below, this just makes it simpler to&lt;br /&gt;
# iterate through a dynamic range. If you just need to repeat the same set of&lt;br /&gt;
# commands, use REPEAT below.&lt;br /&gt;
#&lt;br /&gt;
# Example that spawns a row of four skeletons: ((4,5), (5,5), (6,5), (7,5))&lt;br /&gt;
#&lt;br /&gt;
# {ITERATE 4 8 i (&lt;br /&gt;
#     [unit]&lt;br /&gt;
#         type=Skeleton&lt;br /&gt;
#         x=$i&lt;br /&gt;
#         y=5&lt;br /&gt;
#     [/unit]&lt;br /&gt;
# )}&lt;br /&gt;
&lt;br /&gt;
#define ITERATE FROM TO VAR CONTENTS&lt;br /&gt;
    {VARIABLE {VAR} {FROM}}&lt;br /&gt;
&lt;br /&gt;
    {WHILE {VAR} not_equals {TO} (&lt;br /&gt;
        {CONTENTS}&lt;br /&gt;
&lt;br /&gt;
        {VARIABLE_OP {VAR} add 1}&lt;br /&gt;
    )}&lt;br /&gt;
#enddef&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Used in conjunction with TIMES (below) to repeat something. You cannot nest&lt;br /&gt;
# multiple {REPEAT}'s, because every {REPEAT} uses the same variable for&lt;br /&gt;
# iterating. I might fix this sometime, though. Use this to repeat the same set&lt;br /&gt;
# of commands, and ITERATE above to iterate through a range of values.&lt;br /&gt;
#&lt;br /&gt;
# Example that recalls 4 spearmen for side 1:&lt;br /&gt;
#&lt;br /&gt;
# {REPEAT}&lt;br /&gt;
#     [recall]&lt;br /&gt;
#         type=Spearman&lt;br /&gt;
#         side=1&lt;br /&gt;
#     [/recall]&lt;br /&gt;
# {TIMES 4}&lt;br /&gt;
&lt;br /&gt;
#define REPEAT&lt;br /&gt;
    {VARIABLE REPEAT_i 0}&lt;br /&gt;
    {VARIABLE REPEAT_repeats 1}&lt;br /&gt;
&lt;br /&gt;
    [while]&lt;br /&gt;
        [variable]&lt;br /&gt;
            name=REPEAT_i&lt;br /&gt;
            less_than=$REPEAT_repeats&lt;br /&gt;
        [/variable]&lt;br /&gt;
&lt;br /&gt;
        [do]&lt;br /&gt;
#enddef&lt;br /&gt;
&lt;br /&gt;
#define TIMES REPEATS&lt;br /&gt;
            {VARIABLE REPEAT_repeats {REPEATS}}&lt;br /&gt;
            {VARIABLE_OP REPEAT_i add 1}&lt;br /&gt;
        [/do]&lt;br /&gt;
    [/while]&lt;br /&gt;
&lt;br /&gt;
    {CLEAR_VARIABLE REPEAT_i}&lt;br /&gt;
    {CLEAR_VARIABLE REPEAT_repeats}&lt;br /&gt;
#enddef&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Shorter way of writing a [teleport].&lt;br /&gt;
&lt;br /&gt;
#define TELEPORT FILTER X Y&lt;br /&gt;
    [teleport]&lt;br /&gt;
        [filter]&lt;br /&gt;
            {FILTER}&lt;br /&gt;
        [/filter]&lt;br /&gt;
&lt;br /&gt;
        x,y={X},{Y}&lt;br /&gt;
    [/teleport]&lt;br /&gt;
#enddef&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Tests if a given unit stands on a given type of terrain.&lt;br /&gt;
&lt;br /&gt;
#define IF_UNIT_ON_TERRAIN FILTER LETTER&lt;br /&gt;
#enddef&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Alters a unit variable (such as unit.x, unit.type, unit.side)&lt;br /&gt;
#&lt;br /&gt;
# Example that flips all spearmen to side 2:&lt;br /&gt;
# {MODIFY_UNIT type=Spearman side 2}&lt;br /&gt;
&lt;br /&gt;
#define MODIFY_UNIT FILTER VAR VALUE&lt;br /&gt;
    [store_unit]&lt;br /&gt;
        [filter]&lt;br /&gt;
            {FILTER}&lt;br /&gt;
        [/filter]&lt;br /&gt;
&lt;br /&gt;
        variable=MODIFY_UNIT_store&lt;br /&gt;
        kill=yes&lt;br /&gt;
    [/store_unit]&lt;br /&gt;
&lt;br /&gt;
    {FOREACH MODIFY_UNIT_store MODIFY_UNIT_i}&lt;br /&gt;
        [set_variable]&lt;br /&gt;
            name=MODIFY_UNIT_store[$MODIFY_UNIT_i].{VAR}&lt;br /&gt;
            value={VALUE}&lt;br /&gt;
        [/set_variable]&lt;br /&gt;
&lt;br /&gt;
        [unstore_unit]&lt;br /&gt;
            variable=MODIFY_UNIT_store[$MODIFY_UNIT_i]&lt;br /&gt;
            find_vacant=no&lt;br /&gt;
        [/unstore_unit]&lt;br /&gt;
    {NEXT MODIFY_UNIT_i}&lt;br /&gt;
&lt;br /&gt;
    {CLEAR_VARIABLE MODIFY_UNIT_store}&lt;br /&gt;
#enddef&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Modifies a side. What [modify_side] can do, this can.&lt;br /&gt;
&lt;br /&gt;
#define MODIFY_SIDE SIDE VAR VALUE&lt;br /&gt;
    [modify_side]&lt;br /&gt;
        side={SIDE}&lt;br /&gt;
        {VAR}={VALUE}&lt;br /&gt;
    [/modify_side]&lt;br /&gt;
#enddef&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Shortcut for [store_unit]. Does not remove the unit from play.&lt;br /&gt;
&lt;br /&gt;
#define SAVE_UNIT FILTER VAR&lt;br /&gt;
    [store_unit]&lt;br /&gt;
        [filter]&lt;br /&gt;
            {FILTER}&lt;br /&gt;
        [/filter]&lt;br /&gt;
&lt;br /&gt;
        kill=no&lt;br /&gt;
        variable={VAR}&lt;br /&gt;
    [/store_unit]&lt;br /&gt;
#enddef&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Shortcut for [store_unit]. Removes the unit from play.&lt;br /&gt;
&lt;br /&gt;
#define STORE_UNIT FILTER VAR&lt;br /&gt;
    [store_unit]&lt;br /&gt;
        [filter]&lt;br /&gt;
            {FILTER}&lt;br /&gt;
        [/filter]&lt;br /&gt;
&lt;br /&gt;
        kill=yes&lt;br /&gt;
        variable={VAR}&lt;br /&gt;
    [/store_unit]&lt;br /&gt;
#enddef&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Shortcut for [unstore_unit].&lt;br /&gt;
&lt;br /&gt;
#define UNSTORE_UNIT VAR&lt;br /&gt;
    [unstore_unit]&lt;br /&gt;
        variable={VAR}&lt;br /&gt;
        find_vacant=yes&lt;br /&gt;
    [/unstore_unit]&lt;br /&gt;
#enddef&lt;br /&gt;
&lt;br /&gt;
# Stores a variable attribute of a unit to the given variable.&lt;br /&gt;
#&lt;br /&gt;
# Example that flips all orcs to whatever side James is on:&lt;br /&gt;
#&lt;br /&gt;
# {STORE_UNIT_VAR description=James side side_of_James}&lt;br /&gt;
# {MODIFY_UNIT race=orc side $side_of_James}&lt;br /&gt;
&lt;br /&gt;
#define STORE_UNIT_VAR FILTER VAR TO_VAR&lt;br /&gt;
    [store_unit]&lt;br /&gt;
        [filter]&lt;br /&gt;
            {FILTER}&lt;br /&gt;
        [/filter]&lt;br /&gt;
&lt;br /&gt;
        kill=no&lt;br /&gt;
        variable=STORE_UNIT_VAR_store&lt;br /&gt;
    [/store_unit]&lt;br /&gt;
&lt;br /&gt;
    {VARIABLE_OP {TO_VAR} format $STORE_UNIT_VAR_store.{VAR}}&lt;br /&gt;
&lt;br /&gt;
    {CLEAR_VARIABLE STORE_UNIT_VAR_store}&lt;br /&gt;
#enddef&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#define UNIT_OVERLAY FILTER IMAGE&lt;br /&gt;
    {SAVE_UNIT FILTER UNIT_OVERLAY_unit}&lt;br /&gt;
&lt;br /&gt;
    [unit_overlay]&lt;br /&gt;
        x=$UNIT_OVERLAY_unit.x&lt;br /&gt;
        y=$UNIT_OVERLAY_unit.y&lt;br /&gt;
        image={IMAGE}&lt;br /&gt;
    [/unit_overlay]&lt;br /&gt;
&lt;br /&gt;
    {CLEAR_VARIABLE UNIT_OVERLAY_unit}&lt;br /&gt;
#enddef&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#define REMOVE_UNIT_OVERLAY FILTER IMAGE&lt;br /&gt;
    {SAVE_UNIT FILTER REMOVE_UNIT_OVERLAY_unit}&lt;br /&gt;
&lt;br /&gt;
    [remove_unit_overlay]&lt;br /&gt;
        x=$REMOVE_UNIT_OVERLAY_unit.x&lt;br /&gt;
        y=$REMOVE_UNIT_OVERLAY_unit.y&lt;br /&gt;
        image={IMAGE}&lt;br /&gt;
    [/remove_unit_overlay]&lt;br /&gt;
&lt;br /&gt;
    {CLEAR_VARIABLE REMOVE_UNIT_OVERLAY_unit}&lt;br /&gt;
#enddef&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#define REDRAW&lt;br /&gt;
    [redraw][/redraw]&lt;br /&gt;
#enddef&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#define DELAY TIME&lt;br /&gt;
    [delay]&lt;br /&gt;
        time={TIME}&lt;br /&gt;
    [/delay]&lt;br /&gt;
#enddef&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Shakes the screen a little bit.&lt;br /&gt;
&lt;br /&gt;
#define SHORT_RUMBLE&lt;br /&gt;
    [scroll]&lt;br /&gt;
        x,y=32,32&lt;br /&gt;
    [/scroll]&lt;br /&gt;
&lt;br /&gt;
    [scroll]&lt;br /&gt;
        x,y=-48,-48&lt;br /&gt;
    [/scroll]&lt;br /&gt;
&lt;br /&gt;
    [scroll]&lt;br /&gt;
        x,y=24,24&lt;br /&gt;
    [/scroll]&lt;br /&gt;
&lt;br /&gt;
    [scroll]&lt;br /&gt;
        x,y=-12,-12&lt;br /&gt;
    [/scroll]&lt;br /&gt;
&lt;br /&gt;
    [scroll]&lt;br /&gt;
        x,y=6,6&lt;br /&gt;
    [/scroll]&lt;br /&gt;
&lt;br /&gt;
    [scroll]&lt;br /&gt;
        x,y=-2,-2&lt;br /&gt;
    [/scroll]&lt;br /&gt;
#enddef&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Shakes the screen a bit more.&lt;br /&gt;
&lt;br /&gt;
#define LONG_RUMBLE&lt;br /&gt;
    [scroll]&lt;br /&gt;
        x,y=32,32&lt;br /&gt;
    [/scroll]&lt;br /&gt;
&lt;br /&gt;
    [scroll]&lt;br /&gt;
        x,y=-64,-64&lt;br /&gt;
    [/scroll]&lt;br /&gt;
&lt;br /&gt;
    [scroll]&lt;br /&gt;
        x,y=48,48&lt;br /&gt;
    [/scroll]&lt;br /&gt;
&lt;br /&gt;
    [scroll]&lt;br /&gt;
        x,y=-32,-32&lt;br /&gt;
    [/scroll]&lt;br /&gt;
&lt;br /&gt;
    [scroll]&lt;br /&gt;
        x,y=32,32&lt;br /&gt;
    [/scroll]&lt;br /&gt;
&lt;br /&gt;
    [scroll]&lt;br /&gt;
        x,y=-16,-16&lt;br /&gt;
    [/scroll]&lt;br /&gt;
&lt;br /&gt;
    [scroll]&lt;br /&gt;
        x,y=16,16&lt;br /&gt;
    [/scroll]&lt;br /&gt;
&lt;br /&gt;
    [scroll]&lt;br /&gt;
        x,y=-8,-8&lt;br /&gt;
    [/scroll]&lt;br /&gt;
&lt;br /&gt;
    [scroll]&lt;br /&gt;
        x,y=4,4&lt;br /&gt;
    [/scroll]&lt;br /&gt;
#enddef&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Flashes the screen a bit. RGB sets the colour: (255,255,255) makes the flash&lt;br /&gt;
# white, (255,0,0) red, etc.&lt;br /&gt;
&lt;br /&gt;
#define FLASH RGB&lt;br /&gt;
    {VARIABLE FLASH_delay 5}&lt;br /&gt;
&lt;br /&gt;
    {REPEAT}&lt;br /&gt;
        [colour_adjust]&lt;br /&gt;
            red,green,blue={RGB}&lt;br /&gt;
        [/colour_adjust]&lt;br /&gt;
&lt;br /&gt;
        [redraw][/redraw]&lt;br /&gt;
&lt;br /&gt;
        [colour_adjust]&lt;br /&gt;
            red,green,blue=0,0,0&lt;br /&gt;
        [/colour_adjust]&lt;br /&gt;
&lt;br /&gt;
        [redraw][/redraw]&lt;br /&gt;
&lt;br /&gt;
        [delay]&lt;br /&gt;
            time=$FLASH_delay&lt;br /&gt;
        [/delay]&lt;br /&gt;
    {TIMES 2}&lt;br /&gt;
#enddef&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Macro for the event that changes a sleeping gryphon into a normal gryphon when&lt;br /&gt;
# attacked.&lt;br /&gt;
&lt;br /&gt;
#define GRYPHON_WAKEUP_EVENT&lt;br /&gt;
    [event]&lt;br /&gt;
        name=attack&lt;br /&gt;
        first_time_only=no&lt;br /&gt;
&lt;br /&gt;
        [filter_second]&lt;br /&gt;
            type=Sleeping Gryphon&lt;br /&gt;
        [/filter_second]&lt;br /&gt;
&lt;br /&gt;
        {MODIFY_UNIT (x,y=$x2,$y2) type Gryphon}&lt;br /&gt;
    [/event]&lt;br /&gt;
#enddef&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Used by FADE_TO_BLACK (below).&lt;br /&gt;
&lt;br /&gt;
#define FADE_STEP LIGHTNESS DELAY&lt;br /&gt;
    [colour_adjust]&lt;br /&gt;
        red,green,blue={LIGHTNESS},{LIGHTNESS},{LIGHTNESS}&lt;br /&gt;
    [/colour_adjust]&lt;br /&gt;
&lt;br /&gt;
    [redraw][/redraw]&lt;br /&gt;
#enddef&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Fades the screen to black using [colour_adjust].&lt;br /&gt;
&lt;br /&gt;
#define FADE_TO_BLACK&lt;br /&gt;
    # {FADE_STEP -16 5}&lt;br /&gt;
    {FADE_STEP -32 5}&lt;br /&gt;
    # {FADE_STEP -48 5}&lt;br /&gt;
    {FADE_STEP -64 5}&lt;br /&gt;
    # {FADE_STEP -80 5}&lt;br /&gt;
    {FADE_STEP -96 5}&lt;br /&gt;
    # {FADE_STEP -112 5}&lt;br /&gt;
    {FADE_STEP -128 5}&lt;br /&gt;
    # {FADE_STEP -144 5}&lt;br /&gt;
    {FADE_STEP -160 5}&lt;br /&gt;
    # {FADE_STEP -176 5}&lt;br /&gt;
    {FADE_STEP -192 5}&lt;br /&gt;
    # {FADE_STEP -208 5}&lt;br /&gt;
    {FADE_STEP -224 5}&lt;br /&gt;
    # {FADE_STEP -240 5}&lt;br /&gt;
    {FADE_STEP -55 5}&lt;br /&gt;
#enddef&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# A dummy side is needed for highlights and dummy units. This macro defines a&lt;br /&gt;
# dummy side to which all dummies belong to. So, any scenario where the macro&lt;br /&gt;
# HIGHLIGHT_HEX or a regular dummy unit (id=dummy) is used requires this macro&lt;br /&gt;
# to be used. SIDENUM defines the side number of the dummy side (can be&lt;br /&gt;
# any valid side number).&lt;br /&gt;
#&lt;br /&gt;
# colour=8 (white) is because when highlighting with a dummy unit, a unit halo&lt;br /&gt;
# of any other colour would be visible.&lt;br /&gt;
&lt;br /&gt;
#define DUMMY_SIDE SIDENUM&lt;br /&gt;
    [side]&lt;br /&gt;
        side={SIDENUM}&lt;br /&gt;
        team_name=DUMMY_SIDE_dummies&lt;br /&gt;
        colour=8&lt;br /&gt;
        no_leader=yes&lt;br /&gt;
    [/side]&lt;br /&gt;
&lt;br /&gt;
    [event]&lt;br /&gt;
        name=prestart&lt;br /&gt;
&lt;br /&gt;
        {VARIABLE DUMMY_SIDE_NUM {SIDENUM}}&lt;br /&gt;
    [/event]&lt;br /&gt;
#enddef&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Highlights a hex for a moment by flashing it. Uses [hide_unit], so no units&lt;br /&gt;
# should be hidden when this macro is used.&lt;br /&gt;
#&lt;br /&gt;
# It would be easy to make it work without [hide_unit], though.&lt;br /&gt;
&lt;br /&gt;
#define HIGHLIGHT_HEX X Y&lt;br /&gt;
    [scroll_to]&lt;br /&gt;
        x,y={X},{Y}&lt;br /&gt;
    [/scroll_to]&lt;br /&gt;
&lt;br /&gt;
    [if]&lt;br /&gt;
        [have_unit]&lt;br /&gt;
            x,y={X},{Y}&lt;br /&gt;
        [/have_unit]&lt;br /&gt;
&lt;br /&gt;
        [then]&lt;br /&gt;
            {REPEAT}&lt;br /&gt;
                [unit_overlay]&lt;br /&gt;
                    x,y={X},{Y}&lt;br /&gt;
                    image=terrain/highlight.png&lt;br /&gt;
                [/unit_overlay]&lt;br /&gt;
&lt;br /&gt;
                [redraw][/redraw]&lt;br /&gt;
&lt;br /&gt;
                [delay]&lt;br /&gt;
                    time=50&lt;br /&gt;
                [/delay]&lt;br /&gt;
&lt;br /&gt;
                [remove_unit_overlay]&lt;br /&gt;
                    x,y={X},{Y}&lt;br /&gt;
                    image=terrain/highlight.png&lt;br /&gt;
                [/remove_unit_overlay]&lt;br /&gt;
&lt;br /&gt;
                [redraw][/redraw]&lt;br /&gt;
&lt;br /&gt;
                [delay]&lt;br /&gt;
                    time=50&lt;br /&gt;
                [/delay]&lt;br /&gt;
            {TIMES 3}&lt;br /&gt;
        [/then]&lt;br /&gt;
&lt;br /&gt;
        [else]&lt;br /&gt;
            [unit]&lt;br /&gt;
                side=$DUMMY_SIDE_NUM&lt;br /&gt;
                type=highlight_dummy&lt;br /&gt;
                x,y={X},{Y}&lt;br /&gt;
            [/unit]&lt;br /&gt;
&lt;br /&gt;
            {REPEAT}&lt;br /&gt;
                [hide_unit]&lt;br /&gt;
                    x,y={X},{Y}&lt;br /&gt;
                [/hide_unit]&lt;br /&gt;
&lt;br /&gt;
                [redraw][/redraw]&lt;br /&gt;
&lt;br /&gt;
                [delay]&lt;br /&gt;
                    time=50&lt;br /&gt;
                [/delay]&lt;br /&gt;
&lt;br /&gt;
                [unhide_unit][/unhide_unit]&lt;br /&gt;
&lt;br /&gt;
                [redraw][/redraw]&lt;br /&gt;
&lt;br /&gt;
                [delay]&lt;br /&gt;
                    time=50&lt;br /&gt;
                [/delay]&lt;br /&gt;
            {TIMES 3}&lt;br /&gt;
&lt;br /&gt;
            [kill]&lt;br /&gt;
                x,y={X},{Y}&lt;br /&gt;
                animate=no&lt;br /&gt;
            [/kill]&lt;br /&gt;
        [/else]&lt;br /&gt;
    [/if]&lt;br /&gt;
#enddef&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Includes STUFF only on easy difficulty&lt;br /&gt;
&lt;br /&gt;
#define ON_EASY STUFF&lt;br /&gt;
#ifdef EASY&lt;br /&gt;
{STUFF}&lt;br /&gt;
#endif&lt;br /&gt;
#enddef&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Includes STUFF only on normal difficulty&lt;br /&gt;
&lt;br /&gt;
#define ON_NORMAL STUFF&lt;br /&gt;
#ifdef NORMAL&lt;br /&gt;
{STUFF}&lt;br /&gt;
#endif&lt;br /&gt;
#enddef&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Includes STUFF only on hard difficulty&lt;br /&gt;
&lt;br /&gt;
#define ON_HARD STUFF&lt;br /&gt;
#ifdef HARD&lt;br /&gt;
{STUFF}&lt;br /&gt;
#endif&lt;br /&gt;
#enddef&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Moves a unit from its current location to the given location along a&lt;br /&gt;
# relatively straight line displaying the movement just like [move_unit_fake]&lt;br /&gt;
# does.&lt;br /&gt;
#&lt;br /&gt;
# Note that setting the destination on an existing unit does not kill either&lt;br /&gt;
# one, but causes the unit to move to the nearest vacant hex instead.&lt;br /&gt;
&lt;br /&gt;
#define MOVE_UNIT FILTER TO_X TO_Y&lt;br /&gt;
    [store_unit]&lt;br /&gt;
        [filter]&lt;br /&gt;
            {FILTER}&lt;br /&gt;
        [/filter]&lt;br /&gt;
&lt;br /&gt;
        variable=FL_temp&lt;br /&gt;
        kill=no&lt;br /&gt;
    [/store_unit]&lt;br /&gt;
&lt;br /&gt;
    [scroll_to]&lt;br /&gt;
        x=$FL_temp.x&lt;br /&gt;
        y=$FL_temp.y&lt;br /&gt;
    [/scroll_to]&lt;br /&gt;
&lt;br /&gt;
    [hide_unit]&lt;br /&gt;
        x=$FL_temp.x&lt;br /&gt;
        y=$FL_temp.y&lt;br /&gt;
    [/hide_unit]&lt;br /&gt;
&lt;br /&gt;
    {VARIABLE_OP x_coords format (&amp;quot;$FL_temp.x|,{TO_X}&amp;quot;)}&lt;br /&gt;
    {VARIABLE_OP y_coords format (&amp;quot;$FL_temp.y|,{TO_Y}&amp;quot;)}&lt;br /&gt;
&lt;br /&gt;
    [move_unit_fake]&lt;br /&gt;
        type=$FL_temp.type&lt;br /&gt;
        x=$x_coords&lt;br /&gt;
        y=$y_coords&lt;br /&gt;
    [/move_unit_fake]&lt;br /&gt;
&lt;br /&gt;
    [teleport]&lt;br /&gt;
        [filter]&lt;br /&gt;
            {FILTER}&lt;br /&gt;
        [/filter]&lt;br /&gt;
&lt;br /&gt;
        x,y={TO_X},{TO_Y}&lt;br /&gt;
    [/teleport]&lt;br /&gt;
&lt;br /&gt;
    [unhide_unit][/unhide_unit]&lt;br /&gt;
&lt;br /&gt;
    [redraw][/redraw]&lt;br /&gt;
#enddef&lt;br /&gt;
&lt;br /&gt;
#define VICTORY_SMALL_BONUS&lt;br /&gt;
	[endlevel]&lt;br /&gt;
		[gold]&lt;br /&gt;
			amount=($turns-$turn)*25&lt;br /&gt;
		[/gold]&lt;br /&gt;
		result=victory&lt;br /&gt;
		bonus=no&lt;br /&gt;
	[/endlevel]		&lt;br /&gt;
#enddef&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Db0</name></author>
		
	</entry>
</feed>