#textdomain wesnoth
# This file contains unit utility macros for WML authors.
#
# These don't rely on any other macros.   Please don't change this.

#define GENERIC_UNIT SIDE TYPE X Y
    # Creates a generic unit of TYPE belonging to SIDE at X,Y, which has a
    # random name, gender and traits (just like a recruited unit).
    [unit]
        side={SIDE}
        type={TYPE}
        x={X}
        y={Y}
        generate_description=yes
        random_traits=yes
        random_gender=yes
        upkeep=full
    [/unit]
#enddef

#define NOTRAIT_UNIT SIDE TYPE X Y
    # Creates a unit with no traits, random gender and name.
    #
    # Example:
    #! {NOTRAIT_UNIT (Elvish Fighter) 1 19 16}
    #
    [unit]
        side={SIDE}
        type={TYPE}
        x={X}
        y={Y}
        generate_description=yes
        random_traits=no
        random_gender=yes
    [/unit]
#enddef

#define LOYAL_UNIT SIDE TYPE X Y DESCRIPTION USER_DESCRIPTION
    # Creates a unit with the Loyal trait.
    #
    # Example:
    #! {LOYAL_UNIT 1 (Elvish Fighter) 19 16 DESCRIPTION USER_DESCRIPTION (Myname) ( _ "Myname")}
    #
    [unit]
        type={TYPE}
        description={DESCRIPTION}
        user_description={USER_DESCRIPTION}
        side={SIDE}
        x={X}
        y={Y}
        [modifications]
            {TRAIT_LOYAL}
        [/modifications]
    [/unit]
#enddef

#define LOYAL_UNDEAD_UNIT SIDE TYPE X Y
    # Create a unit with the Undead and Loyal traits.
    [unit]
        type={TYPE}
        side={SIDE}
        x={X}
        y={Y}
        [modifications]
            {TRAIT_UNDEAD}
            {TRAIT_LOYAL}
        [/modifications]
    [/unit]
#enddef

#define RECALL_OR_CREATE TYPE DESCRIPTION
    # A substitute for [recall] that works even when there's no-one to recall
    # useful for testing scenarios out of order.
    [recall]
        description={DESCRIPTION}
    [/recall]
    [if]
        [have_unit]
            description={DESCRIPTION}
        [/have_unit]
        [else]
            [store_starting_location]
                side=1
                variable=tmp
            [/store_starting_location]
            [unit]
                type={TYPE}
                description={DESCRIPTION}
                side=1
                x=$tmp.x
                y=$tmp.y
            [/unit]
            [clear_variable]
                name=tmp
            [/clear_variable]
        [/else]
    [/if]
#enddef

#define STORE_UNIT_VAR FILTER VAR TO_VAR
    # Stores an attribute of a unit to the given variable.
    #
    # Example where this is used to flip all orcs to whatever side James is on:
    #! {STORE_UNIT_VAR description=James side side_of_James}
    #! {MODIFY_UNIT race=orc side $side_of_James}
    [store_unit]
        [filter]
            {FILTER}
        [/filter]

        kill=no
        variable=STORE_UNIT_VAR_store
    [/store_unit]

    [set_variable]
        name={TO_VAR}
        format=$STORE_UNIT_VAR_store.{VAR}
    [/set_variable]

    [clear_variable]
        name=STORE_UNIT_VAR_store
    [/clear_variable]
#enddef

