Difference between revisions of "StandardSideFilter"

From The Battle for Wesnoth Wiki
(Add some anchors that can be linked to)
 
(4 intermediate revisions by the same user not shown)
Line 6: Line 6:
  
 
* '''side''': filter matches only if side number is contained in a comma-separated list. Note that as opposed to the usual inline side= key in wml action tags, which defaults to 1, the side= key in a SSF defaults to all sides (similarly, the id= key in SUFs defaults to all ids). This key also accepts ranges (i.e. "1,3-4,6")
 
* '''side''': filter matches only if side number is contained in a comma-separated list. Note that as opposed to the usual inline side= key in wml action tags, which defaults to 1, the side= key in a SSF defaults to all sides (similarly, the id= key in SUFs defaults to all ids). This key also accepts ranges (i.e. "1,3-4,6")
* '''[has_unit]''':   
+
* {{anchor|has_unit|'''[has_unit]'''}}:   
 
**'''[[StandardUnitFilter]]''': filter matches only if side controls a unit matched by it
 
**'''[[StandardUnitFilter]]''': filter matches only if side controls a unit matched by it
 
**'''search_recall_list''': (boolean yes|no, default no) whether to include recall list units when trying to match this [[StandardUnitFilter]] against a unit
 
**'''search_recall_list''': (boolean yes|no, default no) whether to include recall list units when trying to match this [[StandardUnitFilter]] against a unit
Line 12: Line 12:
 
* '''team_name''': The currently filtered side matches only if this passed team_name is contained in its (the filtered side's) team_name= string. Note that a side can be allied/on the same team like 2 (more...) other sides which can be enemies at the same time. (achieved by defining a side via [side]team_name=1,2 etc.)
 
* '''team_name''': The currently filtered side matches only if this passed team_name is contained in its (the filtered side's) team_name= string. Note that a side can be allied/on the same team like 2 (more...) other sides which can be enemies at the same time. (achieved by defining a side via [side]team_name=1,2 etc.)
  
* '''[enemy_of]''': The currently filtered side must be an enemy of all of the sides matching this StandardSideFilter for it to match. If this inner StandardSideFilter matches no sides, the outer filter also doesn't. Note that a side is not an enemy of itself.
+
* {{anchor|enemy_of|'''[enemy_of]'''}}: The currently filtered side must be an enemy of all of the sides matching this StandardSideFilter for it to match. If this inner StandardSideFilter matches no sides, the outer filter also doesn't. Note that a side is not an enemy of itself.
 
**StandardSideFilter tags and keys
 
**StandardSideFilter tags and keys
  
* '''[allied_with]''': The currently filtered side must be allied with all of the sides matching this StandardSideFilter for it to match. If this inner StandardSideFilter matches no sides, the outer filter also doesn't. Note that a side is allied with itself.
+
* {{anchor|allied_with|'''[allied_with]'''}}: The currently filtered side must be allied with all of the sides matching this StandardSideFilter for it to match. If this inner StandardSideFilter matches no sides, the outer filter also doesn't. Note that a side is allied with itself.
 
**StandardSideFilter tags and keys
 
**StandardSideFilter tags and keys
  
* '''[has_enemy]''': The currently filtered side must have at least one enemy matching this StandardSideFilter for it to match. (Note that a side is not an enemy of itself.)
+
* {{anchor|has_enemy|'''[has_enemy]'''}}: The currently filtered side must have at least one enemy matching this StandardSideFilter for it to match. (Note that a side is not an enemy of itself.)
 
**StandardSideFilter tags and keys.
 
**StandardSideFilter tags and keys.
  
* '''[has_ally]''': The currently filtered side must have at least one ally matching this StandardSideFilter for it to match. (Note that a side is allied with itself.)
+
* {{anchor|has_ally|'''[has_ally]'''}}: The currently filtered side must have at least one ally matching this StandardSideFilter for it to match. (Note that a side is allied with itself.)
 
**StandardSideFilter tags and keys.
 
**StandardSideFilter tags and keys.
  
 
* '''controller''': The currently filtered side matches only if it has this controller string. Sensible values are ai, human, and null. This key is disabled for networked multiplayer, since there the controller value of a side may differ between the clients. Thus using this key would inevitably lead to OOS errors.
 
* '''controller''': The currently filtered side matches only if it has this controller string. Sensible values are ai, human, and null. This key is disabled for networked multiplayer, since there the controller value of a side may differ between the clients. Thus using this key would inevitably lead to OOS errors.
  
* '''formula''': {{DevFeature1.13|5}} A formula using [[Wesnoth Formula Language]]
+
* '''formula''': {{DevFeature1.13|5}} A formula using [[Wesnoth Formula Language]]. Do not surround the formula in <code>$(...)</code>, since that will erase the <tt>self</tt> variable.
  
 
Also, [and], [or], and [not] subfilters are supported.
 
Also, [and], [or], and [not] subfilters are supported.
  
 +
== Wesnoth Formula Language ==
 +
 +
When using the '''formula''' key, the context object is a '''side object''' which supports the following keys:
 +
 +
* '''side_number'''
 +
* '''id'''
 +
* '''save_id'''
 +
* '''gold'''
 +
* '''start_gold'''
 +
* '''base_income'''
 +
* '''total_income'''
 +
* '''village_gold'''
 +
* '''village_support'''
 +
* '''recall_cost'''
 +
* '''name'''
 +
* '''is_human'''
 +
* '''is_ai'''
 +
* '''is_network'''
 +
* '''fog''' - true if the side has fog enabled
 +
* '''shroud''' - true if the side has shroud enabled
 +
* '''hidden'''
 +
* '''flag'''
 +
* '''flag_icon'''
 +
* '''team_name'''
 +
* '''color'''
 +
* '''share_vision'''
 +
* '''carryover_bonus'''
 +
* '''carryover_percentage'''
 +
* '''carryover_add'''
 +
* '''recruit''' - a list of possible recruits
 +
* '''wml_vars''' - the WML variables stored with the side
 +
 +
== Interaction with inline side key ==
  
 
Interaction of SSF and side= in tags like [remove_shroud] :
 
Interaction of SSF and side= in tags like [remove_shroud] :

Latest revision as of 01:13, 25 February 2024

[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;

From FilterWML, this is the standard way of filtering on sides. Often a SSF needs to be included in a [filter_side] tag. There are however also many tags that take the SSF tags and keys directly as arguments.

The following attributes and sub-tags are permitted:

  • side: filter matches only if side number is contained in a comma-separated list. Note that as opposed to the usual inline side= key in wml action tags, which defaults to 1, the side= key in a SSF defaults to all sides (similarly, the id= key in SUFs defaults to all ids). This key also accepts ranges (i.e. "1,3-4,6")
  • [has_unit]:
    • StandardUnitFilter: filter matches only if side controls a unit matched by it
    • search_recall_list: (boolean yes|no, default no) whether to include recall list units when trying to match this StandardUnitFilter against a unit
  • team_name: The currently filtered side matches only if this passed team_name is contained in its (the filtered side's) team_name= string. Note that a side can be allied/on the same team like 2 (more...) other sides which can be enemies at the same time. (achieved by defining a side via [side]team_name=1,2 etc.)
  • [enemy_of]: The currently filtered side must be an enemy of all of the sides matching this StandardSideFilter for it to match. If this inner StandardSideFilter matches no sides, the outer filter also doesn't. Note that a side is not an enemy of itself.
    • StandardSideFilter tags and keys
  • [allied_with]: The currently filtered side must be allied with all of the sides matching this StandardSideFilter for it to match. If this inner StandardSideFilter matches no sides, the outer filter also doesn't. Note that a side is allied with itself.
    • StandardSideFilter tags and keys
  • [has_enemy]: The currently filtered side must have at least one enemy matching this StandardSideFilter for it to match. (Note that a side is not an enemy of itself.)
    • StandardSideFilter tags and keys.
  • [has_ally]: The currently filtered side must have at least one ally matching this StandardSideFilter for it to match. (Note that a side is allied with itself.)
    • StandardSideFilter tags and keys.
  • controller: The currently filtered side matches only if it has this controller string. Sensible values are ai, human, and null. This key is disabled for networked multiplayer, since there the controller value of a side may differ between the clients. Thus using this key would inevitably lead to OOS errors.

Also, [and], [or], and [not] subfilters are supported.

Wesnoth Formula Language

When using the formula key, the context object is a side object which supports the following keys:

  • side_number
  • id
  • save_id
  • gold
  • start_gold
  • base_income
  • total_income
  • village_gold
  • village_support
  • recall_cost
  • name
  • is_human
  • is_ai
  • is_network
  • fog - true if the side has fog enabled
  • shroud - true if the side has shroud enabled
  • hidden
  • flag
  • flag_icon
  • team_name
  • color
  • share_vision
  • carryover_bonus
  • carryover_percentage
  • carryover_add
  • recruit - a list of possible recruits
  • wml_vars - the WML variables stored with the side

Interaction with inline side key

Interaction of SSF and side= in tags like [remove_shroud] : In case that inline side= and [filter_side] are given, inline side= is ignored and [filter_side]side= gets priority:

selects side 4 and 5:

[remove_shroud]
  side=2
  [filter_side]
    side=4,5  
  [/filter_side]
[remove_shroud]
This page was last edited on 25 February 2024, at 01:13.