Difference between revisions of "SingleUnitWML"

From The Battle for Wesnoth Wiki
(How to describe a single unit: added info about how random_traits can be used in MP)
(Remove DevFeature, highlight tags)
Line 6: Line 6:
  
 
The following keys are recognized:
 
The following keys are recognized:
* ''type'' the ID of the unit's unit type. See [[UnitWML]].
+
* '''type''': the ID of the unit's unit type. See [[UnitWML]].
  
* ''side'' the side that the unit is on.
+
* '''side''': the side that the unit is on.
  
* ''gender'' can be set to male or female to designate the gender of the unit. Default is male.
+
* '''gender''': can be set to male or female to designate the gender of the unit. Default is male.
  
* ''x'', ''y'' the location of the unit. If a location isn't provided and the side the unit will belong to has a recall list, the unit will be created on the recall list.
+
* '''x''', '''y''': the location of the unit. If a location isn't provided and the side the unit will belong to has a recall list, the unit will be created on the recall list.
  
* ''description'' a unique identifier for the unit. This is not displayed to the player, but is to be used only for identifying and filtering for units. {{DevFeature}} If not specified or when a unit is normally recruited, a random one will be generated for the unit to ensure that each unit has a unique ''description''.
+
* '''description''': a unique identifier for the unit. This is not displayed to the player, but is to be used only for identifying and filtering for units. If not specified or when a unit is normally recruited, a random one will be generated for the unit to ensure that each unit has a unique ''description''.
  
* ''user_description'' the name of the unit that is shown to the player. Note that the player may use the "rename unit" action to change this.
+
* '''user_description''': the name of the unit that is shown to the player. Note that the player may use the "rename unit" action to change this.
  
* ''generate_description'' if set to "yes", will generate a new name (''user_description'' only, not ''description'') for the unit, as if the unit was a freshly-recruited one.
+
* '''generate_description''': if set to "yes", will generate a new name (''user_description'' only, not ''description'') for the unit, as if the unit was a freshly-recruited one.
  
* ''unrenamable'' if 'yes', the ''user_description'' cannot be changed by the player (which is only possible when the unit is on the player's side anyway).
+
* '''unrenamable''': if 'yes', the ''user_description'' cannot be changed by the player (which is only possible when the unit is on the player's side anyway).
  
* ''traits_description'' the description of the unit's traits which is displayed. However if it is not specified explicitly, the unit's actual traits' names will be used instead, so it is normally not necessary to set this.
+
* '''traits_description''': the description of the unit's traits which is displayed. However if it is not specified explicitly, the unit's actual traits' names will be used instead, so it is normally not necessary to set this.
  
* ''random_traits'' {{DevFeature}}"no" will prevent random trait generation for units. You should only need to set this for placed nonleaders in multiplayer games or if you want to give a unit less traits than it would normally get for its unit type. When generating traits for a unit, first traits the unit has already been given are excluded. Then "musthave" traits (undead, mechanical) for the unit type are given. Then for leaders ('''canrecruit=1''') traits that are not available to "any" (currently that's all of them to avoid a multiplayer OOS issue, but later will be restricted based on multiplayer play balance issues) are removed from consideration. Then traits are added randomly until the maximum allowed for the unit type is reached or there are no more available traits. Random traits can now be used in MP games but only when spawned in an event, so not for leaders and other units in the [side] definition.
+
* '''random_traits''': "no" will prevent random trait generation for units. You should only need to set this for placed nonleaders in multiplayer games or if you want to give a unit less traits than it would normally get for its unit type. When generating traits for a unit, first traits the unit has already been given are excluded. Then "musthave" traits (undead, mechanical) for the unit type are given. Then for leaders ('''canrecruit=1''') traits that are not available to "any" (currently that's all of them to avoid a multiplayer OOS issue, but later will be restricted based on multiplayer play balance issues) are removed from consideration. Then traits are added randomly until the maximum allowed for the unit type is reached or there are no more available traits. Random traits can now be used in MP games but only when spawned in an event, so not for leaders and other units in the [side] definition.
  
* ''canrecruit'' a special key for leaders.
+
* '''canrecruit''': a special key for leaders.
** '0' default. Unit cannot recruit.
+
** '''0''': default. Unit cannot recruit.
** '1' unit can recruit.
+
** '''1''': unit can recruit.
: Normally when a team controls no units with '''canrecruit=1''', that team loses. However, even if your team has lost you continue to play with whatever units you still have until the scenario is over. Usually scenarios end when only one team is left with a leader that can recruit, but special victory conditions can be set up in campaigns. Normally you want to set the leader of a side with '''canrecruit=1'''. If you don't want the leader to recruit, it is usually better to just not give him any unit types to recruit, than to make a special victory condition. {{DevFeature}} Units with '''canrecruit=1''' are exempt from upkeep costs. So that leaders do not need to be given the ''loyal'' trait.
+
: Normally when a team controls no units with '''canrecruit=1''', that team loses. However, even if your team has lost you continue to play with whatever units you still have until the scenario is over. Usually scenarios end when only one team is left with a leader that can recruit, but special victory conditions can be set up in campaigns. Normally you want to set the leader of a side with '''canrecruit=1'''. If you don't want the leader to recruit, it is usually better to just not give him any unit types to recruit, than to make a special victory condition. Units with '''canrecruit=1''' are exempt from upkeep costs. So that leaders do not need to be given the ''loyal'' trait.
  
* ''variation'' the variation of itself the unit should be created as.
+
* '''variation''': the variation of itself the unit should be created as.
  
* ''upkeep'' the amount of upkeep the unit costs.
+
* '''upkeep''': the amount of upkeep the unit costs.
** "loyal" no upkeep cost. Can be changed by the effect 'loyal' (see [[EffectWML]])
+
** '''loyal''' no upkeep cost. Can be changed by the effect 'loyal' (see [[EffectWML]])
** "full" unit costs ''level'' upkeep (see [[UnitWML]]).
+
** '''full''': unit costs ''level'' upkeep (see [[UnitWML]]).
 
** An integer can be used to set the upkeep cost to that number.
 
** An integer can be used to set the upkeep cost to that number.
 
** The default is "full".
 
** The default is "full".
Line 41: Line 41:
 
** Normally you don't want to muck with this value. If you want to give a side units without upkeep costs, give those units the 'loyal' trait.
 
** Normally you don't want to muck with this value. If you want to give a side units without upkeep costs, give those units the 'loyal' trait.
  
* ''overlays'' a list of images that are overlayed on the unit.
+
* '''overlays''': a list of images that are overlayed on the unit.
  
* ''goto_x'', ''goto_y'' UI settings that control courses. Default is 0,0 i.e. the unit is not on a course.
+
* '''goto_x''':, '''goto_y''': UI settings that control courses. Default is 0,0 i.e. the unit is not on a course.
  
* ''hitpoints'' the HP of the unit. Default is the max HP for ''type''.
+
* '''hitpoints''': the HP of the unit. Default is the max HP for ''type''.
  
* ''experience'' the XP of the unit. Default is 0.
+
* '''experience''': the XP of the unit. Default is 0.
  
* ''moves'' number of move points the unit has left. Default is the movement for ''type''.
+
* '''moves''': number of movement points the unit has left. Default is the movement for its unit type.
  
* ''resting'' whether the unit has not moved yet this turn. Used to decide whether to give a unit rest healing.
+
* '''resting''': whether the unit has not moved yet this turn. Used to decide whether to give a unit rest healing.
  
* ''role'' used in standard unit filter ([[FilterWML]]). Can be set using [role] (see [[InternalActionsWML]]).
+
* '''role''': used in standard unit filter ([[FilterWML]]). Can be set using [role] (see [[InternalActionsWML]]).
  
* ''ai_special'' causes the unit to act differently.
+
* '''ai_special''': causes the unit to act differently.
 
** "guardian" the unit will not move, except to attack something in the turn it moves (so, it only can move if an enemy unit gets within range of it).
 
** "guardian" the unit will not move, except to attack something in the turn it moves (so, it only can move if an enemy unit gets within range of it).
  
* ''facing'' which way the unit is facing (this only affects how the unit is displayed).
+
* '''facing''': which way the unit is facing (this only affects how the unit is displayed).
** Possible values are ''se'', ''s'', ''sw'', ''nw'', ''n'', ''ne''. Using ''sw'' is preferred for a "reversed" facing (looking to the left) and ''se'' for a normal (looking to the right) facing.
+
** Possible values are '''se''', '''s''', '''sw''', '''nw''', '''n''', '''ne'''. Using '''sw''' is preferred for a "reversed" facing (looking to the left) and '''se''' for a normal (looking to the right) facing.
  
* ''profile'' sets a default portrait image for this unit. If the unit type already has a portrait set, this is used instead for this unit. When the unit advances, if the value of profile is different from the unit-type portrait, that value is preserved. If the profile field is empty or the same as the unit-type portrait, the level-advance changes the unit portrait to the default for the new level and type.
+
* '''profile''': sets a default portrait image for this unit. If the unit type already has a portrait set, this is used instead for this unit. When the unit advances, if the value of profile is different from the unit-type portrait, that value is preserved. If the profile field is empty or the same as the unit-type portrait, the level-advance changes the unit portrait to the default for the new level and type.
  
 
** "unit_image" if given instead of a filename, uses the unit's base image as the portrait (in the same manner that unit types without portraits do by default).
 
** "unit_image" if given instead of a filename, uses the unit's base image as the portrait (in the same manner that unit types without portraits do by default).
  
* ''animate'' if ''yes'', fades the unit in like when it's recruited/recalled.
+
* '''animate''': if ''yes'', fades the unit in like when it's recruited/recalled.
  
 
* '''[status]''' the status of the unit. This affects different features of the unit, for example whether the unit loses health each turn. Default for all keys is 'off', but this can be changed by the scenario or by special abilities (see [[AbilitiesWML]]). The status of a unit is displayed on the Status Table; each status modification ''statusmod'' is represented by the image '''misc/statusmod.png'''.
 
* '''[status]''' the status of the unit. This affects different features of the unit, for example whether the unit loses health each turn. Default for all keys is 'off', but this can be changed by the scenario or by special abilities (see [[AbilitiesWML]]). The status of a unit is displayed on the Status Table; each status modification ''statusmod'' is represented by the image '''misc/statusmod.png'''.
** ''poisoned'' if 'on', the unit loses 8 HP each turn. See also ''heals'', ''cures'', [[AbilitiesWML]].
+
** '''poisoned''': if 'on', the unit loses 8 HP each turn. See also ''heals'', ''cures'', [[AbilitiesWML]].
** ''slowed'' if 'on', the unit has 50% of its normal movement and does half damage. When the controller of the unit's turn is over, ''slowed'' is set to 'off'   
+
** '''slowed''': if 'on', the unit has 50% of its normal movement and does half damage. When the controller of the unit's turn is over, ''slowed'' is set to 'off'   
** ''stone'' if 'on', the unit cannot move, attack, or be attacked.
+
** '''stone''': if 'on', the unit cannot move, attack, or be attacked.
** ''hides'' if 'yes', the unit cannot be seen by opponents.
+
** '''hides''': if 'yes', the unit cannot be seen by opponents.
  
* '''[variables]''' a set of variables that will be stored when this unit is stored (See [store_unit], [[InternalActionsWML]]). The attribute '''variable'''='''value''' means that when the unit is stored in the array ''unit'', the variable ''unit''.variables.''variable'' will have the value ''value'' (See [[VariablesWML]]).
+
* '''[variables]''' a set of variables that will be stored when this unit is stored (See [store_unit], [[InternalActionsWML]]). The attribute '''variable'''='''value''' means that when the unit is stored in the array ''unit'', the variable '''unit'''.variables.''variable'' will have the value ''value'' (See [[VariablesWML]]).
  
 
* '''[modifications]''' changes that have been made to the unit.
 
* '''[modifications]''' changes that have been made to the unit.
Line 79: Line 79:
 
** '''[object]''' an object the unit has. Same format as [object], [[DirectActionsWML]].
 
** '''[object]''' an object the unit has. Same format as [object], [[DirectActionsWML]].
  
* ''unit_description'' overrides the unit type description for this unit. You will probably want to set up a ''post_advance'' [[EventWML|event]] to override the default description after promotions. Or better, use an object with a profile [[EffectWML|effect(s)]] to filter on unit type and change the unit description and/or portrait {{DevFeature}}.
+
* '''unit_description''': overrides the unit type description for this unit. You will probably want to set up a ''post_advance'' [[EventWML|event]] to override the default description after promotions. Or better, use an object with a profile [[EffectWML|effect(s)]] to filter on unit type and change the unit description and/or portrait.
  
 
== See Also ==
 
== See Also ==

Revision as of 06:51, 15 February 2008

[edit]WML Tags

A:

abilities, about, achievement, achievement_group, add_ai_behavior, advanced_preference, advancefrom, advancement, advances, affect_adjacent, ai, allied_with, allow_end_turn, allow_extra_recruit, allow_recruit, allow_undo, and, animate, animate_unit, animation, aspect, attack (replay, weapon), attack_anim, attacks (special, stats), avoid;

B:

base_unit, background_layer, berserk, binary_path, break, brush;

C:

campaign, cancel_action, candidate_action, capture_village, case, chance_to_hit, change_theme, chat, checkbox, choice, choose, clear_global_variable, clear_menu_item, clear_variable, color_adjust, color_palette, color_range, command (action, replay), continue, core, credits_group, criteria;

D:

damage, damage_type, death, deaths, default, defend, defends, defense, delay, deprecated_message, destination, difficulty, disable, disallow_end_turn, disallow_extra_recruit, disallow_recruit, do, do_command, drains, draw_weapon_anim;

E:

editor_group, editor_music, editor_times, effect, else (action, animation), elseif, endlevel, end_turn (action, replay), enemy_of, engine, entry (credits, options), era, event, experimental_filter_ability, experimental_filter_ability_active, experimental_filter_specials, extra_anim;

F:

facet, facing, fake_unit, false, feedback, female, filter (concept, event), filter_adjacent, filter_adjacent_location, filter_attack, filter_attacker, filter_base_value, filter_condition, filter_defender, filter_enemy, filter_location, filter_opponent, filter_own, filter_owner, filter_radius, filter_recall, filter_second, filter_second_attack, filter_self, filter_side, filter_student, filter_vision, filter_weapon, filter_wml, find_path, fire_event, firststrike, floating_text, fonts, for, foreach, found_item, frame;

G:

game_config, get_global_variable, goal, gold, gold_carryover;

H:

harm_unit, has_ally, has_attack, has_unit, has_achievement, have_location, have_unit, heal_on_hit, heal_unit, healed_anim, healing_anim, heals, hide_help, hide_unit, hides;

I:

idle_anim, if (action, animation, intro), illuminates, image (intro, terrain), init_side, insert_tag, inspect, item, item_group;

J:

jamming_costs, join;

K:

kill, killed;

L:

label, language, leader, leader_goal, leadership, leading_anim, levelin_anim, levelout_anim, lift_fog, limit, literal, load_resource, locale, lock_view, lua;

M:

male, menu_item, message, micro_ai, missile_frame, modification, modifications, modify_ai, modify_side, modify_turns, modify_unit, modify_unit_type, move, move_unit, move_unit_fake, move_units_fake, movement_anim, movement costs, movetype, multiplayer, multiplayer_side, music;

N:

not, note;

O:

object, objective, objectives, on_undo, open_help, option, options, or;

P:

part, petrifies, petrify, place_shroud, plague, poison, post_movement_anim, pre_movement_anim, primary_attack, primary_unit, print, progress_achievement, put_to_recall_list;

R:

race, random_placement, recall (action, replay), recalls, recruit, recruit_anim, recruiting_anim, recruits, redraw, regenerate, remove_event, remove_item, remove_object, remove_shroud, remove_sound_source, remove_time_area, remove_trait, remove_unit_overlay, repeat, replace_map, replace_schedule, replay, replay_start, reset_fog, resistance (ability, unit), resistance_defaults, resolution, resource, return, role, rule;

S:

save, scenario, screen_fade, scroll, scroll_to, scroll_to_unit, secondary_attack, secondary_unit, section, select_unit, sequence, set_achievement, set_extra_recruit, set_global_variable, set_menu_item, set_recruit, set_specials, set_variable, set_variables, sheath_weapon_anim, show_if (message, objective, set_menu_item), show_objectives, side, skirmisher, slider, slow, snapshot, sound, sound_source, source (replay, teleport), special_note, specials, split, stage, standing_anim, statistics, status, store_gold, store_items, store_locations, store_map_dimensions, store_reachable_locations, store_relative_direction, store_side, store_starting_location, store_time_of_day, store_turns, store_unit, store_unit_defense, store_unit_defense_on, store_unit_type, store_unit_type_ids, store_villages, story, swarm, sub_achievement, switch, sync_variable;

T:

target, team, teleport (ability, action), teleport_anim, terrain, terrain_defaults, terrain_graphics, terrain_mask, terrain_type, test, test_condition, test_do_attack_by_id, text_input, textdomain, theme, then, tile, time, time_area, topic, toplevel, trait, transform_unit, traveler, true, tunnel;

U:

unhide_unit, unit (action, scenario), unit_overlay, unit_type, unit_worth, units, unlock_view, unpetrify, unstore_unit, unsynced;

V:

value, variable, variables, variant, variation, victory_anim, village, vision_costs, volume;

W:

while, wml_message, wml_schema;

Z:

zoom;

How to describe a single unit

This tag, [unit], describes a single unit on the map, for example Konrad. It is different from the [unit] in [units], which describes a class of units.

The following keys are recognized:

  • type: the ID of the unit's unit type. See UnitWML.
  • side: the side that the unit is on.
  • gender: can be set to male or female to designate the gender of the unit. Default is male.
  • x, y: the location of the unit. If a location isn't provided and the side the unit will belong to has a recall list, the unit will be created on the recall list.
  • description: a unique identifier for the unit. This is not displayed to the player, but is to be used only for identifying and filtering for units. If not specified or when a unit is normally recruited, a random one will be generated for the unit to ensure that each unit has a unique description.
  • user_description: the name of the unit that is shown to the player. Note that the player may use the "rename unit" action to change this.
  • generate_description: if set to "yes", will generate a new name (user_description only, not description) for the unit, as if the unit was a freshly-recruited one.
  • unrenamable: if 'yes', the user_description cannot be changed by the player (which is only possible when the unit is on the player's side anyway).
  • traits_description: the description of the unit's traits which is displayed. However if it is not specified explicitly, the unit's actual traits' names will be used instead, so it is normally not necessary to set this.
  • random_traits: "no" will prevent random trait generation for units. You should only need to set this for placed nonleaders in multiplayer games or if you want to give a unit less traits than it would normally get for its unit type. When generating traits for a unit, first traits the unit has already been given are excluded. Then "musthave" traits (undead, mechanical) for the unit type are given. Then for leaders (canrecruit=1) traits that are not available to "any" (currently that's all of them to avoid a multiplayer OOS issue, but later will be restricted based on multiplayer play balance issues) are removed from consideration. Then traits are added randomly until the maximum allowed for the unit type is reached or there are no more available traits. Random traits can now be used in MP games but only when spawned in an event, so not for leaders and other units in the [side] definition.
  • canrecruit: a special key for leaders.
    • 0: default. Unit cannot recruit.
    • 1: unit can recruit.
Normally when a team controls no units with canrecruit=1, that team loses. However, even if your team has lost you continue to play with whatever units you still have until the scenario is over. Usually scenarios end when only one team is left with a leader that can recruit, but special victory conditions can be set up in campaigns. Normally you want to set the leader of a side with canrecruit=1. If you don't want the leader to recruit, it is usually better to just not give him any unit types to recruit, than to make a special victory condition. Units with canrecruit=1 are exempt from upkeep costs. So that leaders do not need to be given the loyal trait.
  • variation: the variation of itself the unit should be created as.
  • upkeep: the amount of upkeep the unit costs.
    • loyal no upkeep cost. Can be changed by the effect 'loyal' (see EffectWML)
    • full: unit costs level upkeep (see UnitWML).
    • An integer can be used to set the upkeep cost to that number.
    • The default is "full".
    • Leaders (units with canrecruit=1) never pay upkeep no matter what upkeep is set to.
    • Normally you don't want to muck with this value. If you want to give a side units without upkeep costs, give those units the 'loyal' trait.
  • overlays: a list of images that are overlayed on the unit.
  • goto_x:, goto_y: UI settings that control courses. Default is 0,0 i.e. the unit is not on a course.
  • hitpoints: the HP of the unit. Default is the max HP for type.
  • experience: the XP of the unit. Default is 0.
  • moves: number of movement points the unit has left. Default is the movement for its unit type.
  • resting: whether the unit has not moved yet this turn. Used to decide whether to give a unit rest healing.
  • ai_special: causes the unit to act differently.
    • "guardian" the unit will not move, except to attack something in the turn it moves (so, it only can move if an enemy unit gets within range of it).
  • facing: which way the unit is facing (this only affects how the unit is displayed).
    • Possible values are se, s, sw, nw, n, ne. Using sw is preferred for a "reversed" facing (looking to the left) and se for a normal (looking to the right) facing.
  • profile: sets a default portrait image for this unit. If the unit type already has a portrait set, this is used instead for this unit. When the unit advances, if the value of profile is different from the unit-type portrait, that value is preserved. If the profile field is empty or the same as the unit-type portrait, the level-advance changes the unit portrait to the default for the new level and type.
    • "unit_image" if given instead of a filename, uses the unit's base image as the portrait (in the same manner that unit types without portraits do by default).
  • animate: if yes, fades the unit in like when it's recruited/recalled.
  • [status] the status of the unit. This affects different features of the unit, for example whether the unit loses health each turn. Default for all keys is 'off', but this can be changed by the scenario or by special abilities (see AbilitiesWML). The status of a unit is displayed on the Status Table; each status modification statusmod is represented by the image misc/statusmod.png.
    • poisoned: if 'on', the unit loses 8 HP each turn. See also heals, cures, AbilitiesWML.
    • slowed: if 'on', the unit has 50% of its normal movement and does half damage. When the controller of the unit's turn is over, slowed is set to 'off'
    • stone: if 'on', the unit cannot move, attack, or be attacked.
    • hides: if 'yes', the unit cannot be seen by opponents.
  • [variables] a set of variables that will be stored when this unit is stored (See [store_unit], InternalActionsWML). The attribute variable=value means that when the unit is stored in the array unit, the variable unit.variables.variable will have the value value (See VariablesWML).
  • [modifications] changes that have been made to the unit.
    • [trait] a trait the unit has. Same format as [trait], UnitsWML.
    • [object] an object the unit has. Same format as [object], DirectActionsWML.
  • unit_description: overrides the unit type description for this unit. You will probably want to set up a post_advance event to override the default description after promotions. Or better, use an object with a profile effect(s) to filter on unit type and change the unit description and/or portrait.

See Also