home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2010 July / maximum-cd-2010-07.iso / DiscContents / wesnoth-1.8-win32.exe / data / core / macros / unit-utils.cfg < prev    next >
Encoding:
Text File  |  2010-03-08  |  9.1 KB  |  346 lines

  1. #textdomain wesnoth
  2. # This file contains unit utility macros for WML authors.
  3. #
  4. # These don't rely on any other macros.   Please don't change this.
  5.  
  6. # This needs to match the magic UNREACHABLE constant in unit_movement_type
  7. #define UNREACHABLE
  8. 99 #enddef
  9.  
  10. # Use this to restrict a filter to on-map units, not the recall list.
  11. #define NOT_ON_RECALL_LIST
  12.     [not]
  13.         x,y=recall,recall
  14.     [/not]
  15. #enddef
  16.  
  17. # Rationale for the naming scheme of these generators:
  18. # All generators take SIDE X Y for consistency.
  19. # Those that begin with NAMED_ additionally take ID_STRING NAME_STRING
  20. # The LOYAL_ macros set the loyalty trait.
  21.  
  22. #define UNIT SIDE TYPE X Y WML
  23.     # Place a unit with embedded WML specified.
  24.     #
  25.     [unit]
  26.         side={SIDE}
  27.         type={TYPE}
  28.         x={X}
  29.         y={Y}
  30.         {WML}
  31.     [/unit]
  32. #enddef
  33.  
  34. #define GENERIC_UNIT SIDE TYPE X Y
  35.     # Creates a generic unit of TYPE belonging to SIDE at X,Y, which has a
  36.     # random name, gender and traits (just like a recruited unit).
  37.     [unit]
  38.         side={SIDE}
  39.         type={TYPE}
  40.         x={X}
  41.         y={Y}
  42.         generate_name=yes
  43.         random_traits=yes
  44.         random_gender=yes
  45.         upkeep=full
  46.     [/unit]
  47. #enddef
  48.  
  49. #define NOTRAIT_UNIT SIDE TYPE X Y
  50.     # Creates a unit with no traits, random gender and generated name.
  51.     #
  52.     # Example:
  53.     #! {NOTRAIT_UNIT 1 (Elvish Fighter) 19 16}
  54.     #
  55.     [unit]
  56.         side={SIDE}
  57.         type={TYPE}
  58.         x={X}
  59.         y={Y}
  60.         generate_name=yes
  61.         random_traits=no
  62.         random_gender=yes
  63.     [/unit]
  64. #enddef
  65.  
  66. #define LOYAL_UNIT SIDE TYPE X Y
  67.     # Creates a unit with the Loyal trait.
  68.     #
  69.     # Example:
  70.     #! {LOYAL_UNIT 1 (Elvish Fighter) 19 16}
  71.     #
  72.     [unit]
  73.         type={TYPE}
  74.         side={SIDE}
  75.         x={X}
  76.         y={Y}
  77.         generate_name=yes
  78.         [modifications]
  79.             {TRAIT_LOYAL}
  80.         [/modifications]
  81.         overlays="misc/loyal-icon.png"
  82.     [/unit]
  83. #enddef
  84.  
  85. #define LOYAL_UNDEAD_UNIT SIDE TYPE X Y
  86.     # Create a unit with the Undead and Loyal traits.
  87.     [unit]
  88.         type={TYPE}
  89.         side={SIDE}
  90.         x={X}
  91.         y={Y}
  92.         [modifications]
  93.             {TRAIT_UNDEAD}
  94.             {TRAIT_LOYAL}
  95.         [/modifications]
  96.         overlays="misc/loyal-icon.png"
  97.     [/unit]
  98. #enddef
  99.  
  100. #define NAMED_UNIT SIDE TYPE X Y ID_STRING NAME_STRING WML
  101.     # Place a named unit with embedded WML specified.
  102.     #
  103.     [unit]
  104.         side={SIDE}
  105.         type={TYPE}
  106.         x={X}
  107.         y={Y}
  108.         id={ID_STRING}
  109.         name={NAME_STRING}
  110.         {WML}
  111.     [/unit]
  112. #enddef
  113.  
  114. #define NAMED_LOYAL_UNIT SIDE TYPE X Y ID_STRING NAME_STRING
  115.     # Creates a unit with the Loyal trait.
  116.     #
  117.     # Example:
  118.     #! {LOYAL_UNIT 1 (Elvish Fighter) 19 16 (Myname) ( _ "Myname")}
  119.     #
  120.     [unit]
  121.         side={SIDE}
  122.         type={TYPE}
  123.         id={ID_STRING}
  124.         name={NAME_STRING}
  125.         x={X}
  126.         y={Y}
  127.         [modifications]
  128.             {TRAIT_LOYAL}
  129.         [/modifications]
  130.         overlays="misc/loyal-icon.png"
  131.     [/unit]
  132. #enddef
  133.  
  134. #define NAMED_GENERIC_UNIT SIDE TYPE X Y ID_STRING NAME_STRING
  135.     # Creates a generic unit of TYPE belonging to SIDE at X,Y, which has a
  136.     # generated gender and traits (just like a recruited unit).
  137.     [unit]
  138.         side={SIDE}
  139.         type={TYPE}
  140.         id={ID_STRING}
  141.         name={NAME_STRING}
  142.         x={X}
  143.         y={Y}
  144.         random_traits=yes
  145.         random_gender=yes
  146.         upkeep=full
  147.     [/unit]
  148. #enddef
  149.  
  150. #define NAMED_NOTRAIT_UNIT SIDE TYPE X Y ID_STRING NAME_STRING
  151.     # Creates a unit with no traits, random gender and specified name.
  152.     #
  153.     # Example:
  154.     #! {NAMED_NOTRAIT_UNIT 1 (Elvish Fighter) 20 22 (Mochi) (_"Mochi") }
  155.     #
  156.     [unit]
  157.         side={SIDE}
  158.         type={TYPE}
  159.         id={ID_STRING}
  160.         name={NAME_STRING}
  161.         x={X}
  162.         y={Y}
  163.         random_traits=no
  164.         random_gender=yes
  165.     [/unit]
  166. #enddef
  167.  
  168. #define GUARDIAN
  169.     # Meant to be used as a suffix to a unit-generating macro call.
  170.     [+unit]
  171.         ai_special=guardian
  172.         animate=no
  173.     [/unit]
  174. #enddef
  175.  
  176. #define NO_UPKEEP
  177.     # Meant to be used as a suffix to a unit-generating macro call.
  178.     # Use this when you don't want to use up a traits slot.
  179.     [+unit]
  180.         upkeep=loyal
  181.         # It's questionable whether we should do this here...
  182.         overlays="misc/loyal-icon.png"
  183.     [/unit]
  184. #enddef
  185.  
  186. #define RECALL_OR_CREATE_UNIT WML ID_STRING
  187.     # A substitute for [recall] that works even when there's no-one to recall
  188.     # useful for testing scenarios out of order.
  189.     [recall]
  190.         id={ID_STRING}
  191.     [/recall]
  192.     [if]
  193.         [have_unit]
  194.             id={ID_STRING}
  195.         [/have_unit]
  196.         [else]
  197.             [store_starting_location]
  198.                 side=1
  199.                 variable=tmp
  200.             [/store_starting_location]
  201.             [unit]
  202.                 {WML}
  203.                 side=1
  204.                 x=$tmp.x
  205.                 y=$tmp.y
  206.             [/unit]
  207.             [clear_variable]
  208.                 name=tmp
  209.             [/clear_variable]
  210.         [/else]
  211.     [/if]
  212. #enddef
  213.  
  214. #define RECALL_OR_CREATE TYPE ID_STRING
  215.     # A substitute for [recall] that works even when there's no-one to recall
  216.     # useful for testing scenarios out of order.
  217.     {RECALL_OR_CREATE_UNIT (type={TYPE}
  218.     id={ID_STRING}) {ID_STRING}}
  219. #enddef
  220.  
  221. #define STORE_UNIT_VAR FILTER VAR TO_VAR_NAME
  222.     # Stores an attribute of a unit to the given variable.
  223.     #
  224.     # Example where this is used to flip all orcs to whatever side James is on:
  225.     #! {STORE_UNIT_VAR (id=James) side side_of_James}
  226.     #! {MODIFY_UNIT (race=orc) side $side_of_James}
  227.     [store_unit]
  228.         [filter]
  229.             {FILTER}
  230.         [/filter]
  231.  
  232.         kill=no
  233.         variable=STORE_UNIT_VAR_store
  234.     [/store_unit]
  235.  
  236.     [set_variable]
  237.         name={TO_VAR_NAME}
  238.         format=$STORE_UNIT_VAR_store.{VAR}
  239.     [/set_variable]
  240.  
  241.     [clear_variable]
  242.         name=STORE_UNIT_VAR_store
  243.     [/clear_variable]
  244. #enddef
  245.  
  246. #define ADVANCE_UNIT FILTER ID_STRING
  247.     # Advances all units matching the filter to ID_STRING or if missing, their normal advancement
  248.     #
  249.     # Example to advance all spearmen to a cavalrymen:
  250.     #! {ADVANCE_UNIT type=Spearman Cavalryman}
  251.     # Example to advance your leader normally:
  252.     #! {ADVANCE_UNIT canrecruit,side=yes,1 ""}
  253.     [store_unit]
  254.         [filter]
  255.             {FILTER}
  256.         [/filter]
  257.         variable=ADVANCE_UNIT_store
  258.         kill=no
  259.     [/store_unit]
  260.     [set_variable]
  261.         name=advanceto_len
  262.         string_length={ID_STRING}
  263.     [/set_variable]
  264.  
  265.     {FOREACH ADVANCE_UNIT_store i}
  266.         [if]
  267.             [variable]
  268.                 name=advanceto_len
  269.                 greater_than=0
  270.             [/variable]
  271.             [then]
  272.                 [set_variable]
  273.                     name=ADVANCE_UNIT_store[$i].advances_to
  274.                     value={ID_STRING}
  275.                 [/set_variable]
  276.             [/then]
  277.         [/if]
  278.         [set_variable]
  279.             name=ADVANCE_UNIT_store[$i].experience
  280.             value=$ADVANCE_UNIT_store[$i].max_experience
  281.         [/set_variable]
  282.         [unstore_unit]
  283.             variable=ADVANCE_UNIT_store[$i]
  284.             find_vacant=no
  285.             advance=true
  286.         [/unstore_unit]
  287.     {NEXT i}
  288.     {CLEAR_VARIABLE ADVANCE_UNIT_store}
  289.     {CLEAR_VARIABLE advanceto_len}
  290. #enddef
  291.  
  292. #define TRANSFORM_UNIT FILTER TYPE
  293.     # Transforms all units matching the filter into TYPE or if missing, their normal advancement
  294.     # Keeps the unit's hitpoints, experience and status intact.
  295.     #
  296.     # Example to turn all spearmen into cavalrymen:
  297.     #! {TRANSFORM_UNIT type=Spearman Cavalryman}
  298.     [store_unit]
  299.         [filter]
  300.             {FILTER}
  301.         [/filter]
  302.         variable=TU_store
  303.         kill=no
  304.     [/store_unit]
  305.     {ADVANCE_UNIT ({FILTER}) ({TYPE}) }
  306.     {FOREACH TU_store i}
  307.         [store_unit]
  308.             [filter]
  309.                 x,y=$TU_store[$i].x,$TU_store[$i].y
  310.             [/filter]
  311.             variable=TUrestore_store
  312.             kill=yes
  313.         [/store_unit]
  314.         [set_variables]
  315.             name=TUrestore_store
  316.             mode=merge
  317.             [value]
  318.                 hitpoints=$TU_store[$i].hitpoints
  319.                 experience=$TU_store[$i].experience
  320.                 [insert_tag]
  321.                     name=status
  322.                     variable=TU_store[$i].status
  323.                 [/insert_tag]
  324.             [/value]
  325.         [/set_variables]
  326.         [if]
  327.             [variable]
  328.                 name=TUrestore_store.status.not_living
  329.                 boolean_equals=true
  330.             [/variable]
  331.             [then]
  332.                 [clear_variable]
  333.                     name=TUrestore_store.status.poisoned
  334.                 [/clear_variable]
  335.             [/then]
  336.         [/if]
  337.         [unstore_unit]
  338.             variable=TUrestore_store
  339.             find_vacant=no
  340.             advance=false
  341.         [/unstore_unit]
  342.         {CLEAR_VARIABLE TUrestore_store}
  343.     {NEXT i}
  344.     {CLEAR_VARIABLE TU_store}
  345. #enddef
  346.