diff --git a/data/schema/core/actionwml.cfg b/data/schema/core/actionwml.cfg index 1a83b7e0980c9..42c5d10d3ed71 100644 --- a/data/schema/core/actionwml.cfg +++ b/data/schema/core/actionwml.cfg @@ -57,14 +57,14 @@ name="if" max=infinite super="$conditional_wml" - {ACTION_TAG "then" ()} + {ACTION_TAG "then" max=infinite} [tag] name="elseif" max=infinite super="$conditional_wml" - {ACTION_TAG "then" ()} + {ACTION_TAG "then" max=infinite} [/tag] - {ACTION_TAG "else" ()} + {ACTION_TAG "else" max=infinite} [/tag] [tag] name="switch" @@ -77,13 +77,13 @@ super="$action_wml" {REQUIRED_KEY value string} [/tag] - {ACTION_TAG "else" ()} + {ACTION_TAG "else" max=infinite} [/tag] [tag] name="while" max=infinite super="$conditional_wml" - {ACTION_TAG "do" max=infinite} + {ACTION_TAG "do" min,max=0,infinite} [tag] name="do" max=infinite @@ -107,7 +107,7 @@ {SIMPLE_KEY step s_int} [/else] [/if] - {ACTION_TAG "do" max=infinite} + {ACTION_TAG "do" min,max=0,infinite} [/tag] [tag] name="foreach" @@ -117,14 +117,14 @@ {SIMPLE_KEY variable string} {SIMPLE_KEY index_var string} {DEFAULT_KEY readonly s_bool no} - {ACTION_TAG "do" max=infinite} + {ACTION_TAG "do" min,max=0,infinite} [/tag] [tag] name="repeat" max=infinite {INSERT_TAG} {SIMPLE_KEY times s_int} - {ACTION_TAG "do" max=infinite} + {ACTION_TAG "do" min,max=0,infinite} [/tag] # Direct actions (DirectActionsWML) [tag] @@ -136,7 +136,7 @@ [if] result=victory [then] - {DEFAULT_KEY bonus s_bool yes} + {DEFAULT_KEY bonus s_bool,s_unsigned yes} {DEFAULT_KEY carryover_report s_bool yes} {DEFAULT_KEY save s_bool yes} {DEFAULT_KEY replay_save s_bool yes} @@ -147,15 +147,15 @@ {DEFAULT_KEY carryover_add s_bool no} {SIMPLE_KEY music string_list} {DEFAULT_KEY end_credits s_bool yes} - {SIMPLE_KEY end_text s_t_string} + {SIMPLE_KEY end_text t_string} {SIMPLE_KEY end_text_duration s_unsigned} [tag] name="result" max=infinite {INSERT_TAG} {REQUIRED_KEY result endlevel_result} - {SIMPLE_KEY side s_unsigned} - {DEFAULT_KEY bonus s_bool yes} + {REQUIRED_KEY side s_unsigned} + {DEFAULT_KEY bonus s_bool,s_unsigned yes} {SIMPLE_KEY carryover_percentage int} {DEFAULT_KEY carryover_add s_bool no} [/tag] @@ -165,7 +165,7 @@ [tag] name="unit" max=infinite - super="units/$single" + super="units/$unit" {INSERT_TAG} [/tag] [tag] @@ -173,16 +173,17 @@ max=infinite super="$filter_unit,$action_wml/role/auto_recall" {INSERT_TAG} + {FILTER_TAG "secondary_unit" unit {INSERT_TAG}} [/tag] [tag] name="teleport" max=infinite {INSERT_TAG} - {FILTER_TAG "filter" unit ()} + {FILTER_TAG "filter" unit {INSERT_TAG}} {SIMPLE_KEY x s_int} {SIMPLE_KEY y s_int} - {SIMPLE_KEY clear_shroud s_bool} - {SIMPLE_KEY animate s_bool} + {DEFAULT_KEY clear_shroud s_bool yes} + {DEFAULT_KEY animate s_bool no} {DEFAULT_KEY check_passability s_bool yes} [/tag] [tag] @@ -192,6 +193,7 @@ {SIMPLE_KEY x s_int} {SIMPLE_KEY y s_int} {SIMPLE_KEY mask map_data} + {SIMPLE_KEY mask_file string} {DEFAULT_KEY border s_bool no} [tag] name="rule" @@ -256,11 +258,12 @@ name="modify_side" max=infinite {INSERT_TAG} - {FILTER_TAG "filter_side" side ()} + {FILTER_TAG "filter_side" side {INSERT_TAG}} {SIMPLE_KEY side s_int} {SIMPLE_KEY income s_int} {SIMPLE_KEY recruit string_list} {SIMPLE_KEY team_name string} + {SIMPLE_KEY side_name string} {SIMPLE_KEY user_team_name t_string} {SIMPLE_KEY gold s_int} {SIMPLE_KEY village_gold s_int} @@ -272,6 +275,7 @@ {SIMPLE_KEY switch_ai string} {SIMPLE_KEY reset_maps s_bool} {SIMPLE_KEY reset_view s_bool} + {SIMPLE_KEY share_vision share_vision} {DEPRECATED_KEY share_maps s_bool} {DEPRECATED_KEY share_view s_bool} {SIMPLE_KEY shroud_data shroud_data} @@ -303,7 +307,7 @@ {INSERT_TAG} {SIMPLE_KEY side s_unsigned} {DEFAULT_KEY fire_event s_bool no} - {FILTER_TAG "filter_side" side ()} + {FILTER_TAG "filter_side" side {INSERT_TAG}} [/tag] [tag] name="kill" @@ -312,9 +316,9 @@ {INSERT_TAG} {SIMPLE_KEY animate s_bool} {SIMPLE_KEY fire_event s_bool} - {FILTER_TAG "secondary_unit" unit ()} - {FILTER_TAG "primary_attack" weapon ()} - {FILTER_TAG "secondary_attack" weapon ()} + {FILTER_TAG "secondary_unit" unit {INSERT_TAG}} + {FILTER_TAG "primary_attack" weapon {INSERT_TAG}} + {FILTER_TAG "secondary_attack" weapon {INSERT_TAG}} [/tag] [tag] name="move_unit" @@ -323,6 +327,7 @@ {INSERT_TAG} {SIMPLE_KEY to_x s_int} {SIMPLE_KEY to_y s_int} + {SIMPLE_KEY to_location string} {DEFAULT_KEY fire_event s_bool no} {DEFAULT_KEY check_passability s_bool yes} {SIMPLE_KEY force_scroll s_bool} @@ -337,7 +342,8 @@ max=infinite super="units/$unit" {INSERT_TAG} - {FILTER_TAG "filter" unit ()} + {FILTER_TAG "filter" unit {INSERT_TAG}} + {SIMPLE_KEY mode string} # TODO: This is undocumented and it's unclear what's allowed here; probably should be an enum though? [link] name="units/$modifications/trait" [/link] @@ -375,7 +381,7 @@ {SIMPLE_KEY name t_string} {SIMPLE_KEY description t_string} {SIMPLE_KEY cannot_use_message t_string} - {FILTER_TAG "filter" unit ()} + {FILTER_TAG "filter" unit {INSERT_TAG}} {ACTION_TAG "then" ()} {ACTION_TAG "else" ()} [/tag] @@ -392,14 +398,14 @@ super="$filter_location" {INSERT_TAG} {SIMPLE_KEY side s_unsigned} - {FILTER_TAG "filter_side" side ()} + {FILTER_TAG "filter_side" side {INSERT_TAG}} [/tag] [tag] name="lift_fog" max=infinite super="$filter_location" {INSERT_TAG} - {FILTER_TAG "filter_side" side ()} + {FILTER_TAG "filter_side" side {INSERT_TAG}} {DEFAULT_KEY multiturn s_bool no} [/tag] [tag] @@ -407,7 +413,7 @@ max=infinite super="$filter_location" {INSERT_TAG} - {FILTER_TAG "filter_side" side ()} + {FILTER_TAG "filter_side" side {INSERT_TAG}} {DEFAULT_KEY reset_view s_bool no} [/tag] {EMPTY_TAG "allow_undo,cancel_action" 0 infinite} @@ -419,9 +425,9 @@ name="heal_unit" max=infinite {INSERT_TAG} - {FILTER_TAG "filter" unit ()} - {FILTER_TAG "filter_second" unit ()} - {SIMPLE_KEY amonut heal_amount} + {FILTER_TAG "filter" unit {INSERT_TAG}} + {FILTER_TAG "filter_second" unit {INSERT_TAG}} + {SIMPLE_KEY amount heal_amount} {DEFAULT_KEY animate s_bool no} {DEFAULT_KEY moves heal_amount 0} {DEFAULT_KEY restore_attacks s_bool no} @@ -431,24 +437,27 @@ name="harm_unit" max=infinite {INSERT_TAG} - {FILTER_TAG "filter" unit ()} - {FILTER_TAG "filter_second" unit ()} + {FILTER_TAG "filter" unit ( + min=1 + {INSERT_TAG} + )} + {FILTER_TAG "filter_second" unit {INSERT_TAG}} {REQUIRED_KEY amount s_int} {SIMPLE_KEY alignment alignment} {SIMPLE_KEY damage_type string} {DEFAULT_KEY kill s_bool yes} {DEFAULT_KEY fire_event s_bool no} {DEFAULT_KEY animate s_bool no} - {SIMPLE_KEY delay s_unsigned} + {DEFAULT_KEY delay s_unsigned 500} {SIMPLE_KEY variable string} {DEFAULT_KEY poisoned s_bool no} {DEFAULT_KEY slowed s_bool no} {DEFAULT_KEY petrified s_bool no} {DEFAULT_KEY unhealable s_bool no} - {SIMPLE_KEY experience s_bool} - {SIMPLE_KEY resistance_modifier s_real} - {FILTER_TAG "primary_attack" weapon ()} - {FILTER_TAG "secondary_attack" weapon ()} + {DEFAULT_KEY experience s_bool no} + {DEFAULT_KEY resistance_modifier s_real 1} + {FILTER_TAG "primary_attack" weapon {INSERT_TAG}} + {FILTER_TAG "secondary_attack" weapon {INSERT_TAG}} [/tag] [tag] name="time_area" @@ -463,14 +472,15 @@ name="remove_time_area" max=infinite {INSERT_TAG} - {SIMPLE_KEY id string} + {REQUIRED_KEY id string} [/tag] {EMPTY_TAG "end_turn" 0 infinite} [tag] name="replace_map" max=infinite {INSERT_TAG} - {REQUIRED_KEY map map_data} + {SIMPLE_KEY map map_data} + {SIMPLE_KEY map_file string} {DEFAULT_KEY expand s_bool no} {DEFAULT_KEY shrink s_bool no} [/tag] @@ -567,6 +577,11 @@ deprecated=yes {SIMPLE_KEY code string} [/tag] + [tag] + name="custom_command" + {SIMPLE_KEY name string} + {DATA_TAG "data" 1 1} + [/tag] [/tag] [tag] name="put_to_recall_list" @@ -600,8 +615,9 @@ {SIMPLE_KEY caption t_string} {DEFAULT_KEY scroll s_bool yes} {DEFAULT_KEY highlight s_bool yes} - {SIMPLE_KEY duration s_unsigned} {SIMPLE_KEY sound string_list} + {SIMPLE_KEY voice string_list} + {SIMPLE_KEY variable string} {FORMATTING_KEYS} {SHOW_IF_TAG} [tag] @@ -613,8 +629,9 @@ {SIMPLE_KEY label t_string} {SIMPLE_KEY description t_string} {SIMPLE_KEY default s_bool} + {SIMPLE_KEY value string} {SHOW_IF_TAG} - {ACTION_TAG "command" ()} + {ACTION_TAG "command" max=infinite} [/tag] [tag] name="text_input" @@ -679,7 +696,7 @@ {DEFAULT_KEY synced s_bool yes} {DEFAULT_KEY use_hotkey s_bool yes} {SHOW_IF_TAG} - {FILTER_TAG "filter_location" location ()} + {FILTER_TAG "filter_location" location {INSERT_TAG}} {ACTION_TAG "command" {DEFAULT_KEY delayed_variable_substitution s_bool yes}} [tag] name="default_hotkey" @@ -707,6 +724,8 @@ super="scenario/item,$filter_location" {INSERT_TAG} {DEFAULT_KEY redraw s_bool yes} + {SIMPLE_KEY write_name string} + {SIMPLE_KEY name string} [/tag] [tag] name="remove_item" @@ -724,8 +743,8 @@ {COLOR_KEYS s_unsigned} [/tag] [tag] - name="move_unit_fake" - max=infinite + name="$fake_unit" + max=0 {SIMPLE_KEY type string} {SIMPLE_KEY x range_list} {SIMPLE_KEY y range_list} @@ -733,20 +752,21 @@ {SIMPLE_KEY gender gender} {SIMPLE_KEY variation string} {SIMPLE_KEY image_mods string} + [/tag] + [tag] + name="move_unit_fake" + max=infinite + super="$action_wml/$fake_unit" {DEFAULT_KEY force_scroll s_bool yes} [/tag] [tag] name="move_units_fake" max=infinite {INSERT_TAG} - # TODO: Does it accept force_scroll? + {DEFAULT_KEY force_scroll s_bool no} [tag] name="fake_unit" - # TODO: Does it accept gender, variation, or image_mods? - {SIMPLE_KEY type string} - {SIMPLE_KEY x s_unsigned} - {SIMPLE_KEY y s_unsigned} - {SIMPLE_KEY side s_unsigned} + super="$action_wml/$fake_unit" {SIMPLE_KEY skip_steps s_unsigned} [/tag] [/tag] @@ -762,7 +782,7 @@ {SIMPLE_KEY x s_int} {SIMPLE_KEY y s_int} {SIMPLE_KEY side s_unsigned} - {FILTER_TAG "filter_side" side ()} + {FILTER_TAG "filter_side" side {INSERT_TAG}} [/tag] [tag] name="scroll_to" @@ -773,7 +793,7 @@ {DEFAULT_KEY immediate s_bool no} {DEFAULT_KEY highlight s_bool no} {SIMPLE_KEY side s_unsigned} - {FILTER_TAG "filter_side" side ()} + {FILTER_TAG "filter_side" side {INSERT_TAG}} [/tag] [tag] name="scroll_to_unit" @@ -784,7 +804,7 @@ {DEFAULT_KEY immediate s_bool no} {DEFAULT_KEY highlight s_bool no} {SIMPLE_KEY for_side s_unsigned} - {FILTER_TAG "for_side" side ()} + {FILTER_TAG "for_side" side {INSERT_TAG}} [/tag] [tag] name="select_unit" @@ -797,7 +817,7 @@ [tag] name="sound" max=infinite - {SIMPLE_KEY name string_list} + {REQUIRED_KEY name string_list} {DEFAULT_KEY repeat s_unsigned 0} [/tag] [tag] @@ -837,7 +857,7 @@ [tag] name="delay" max=infinite - {SIMPLE_KEY time s_unsigned} + {REQUIRED_KEY time s_unsigned} {DEFAULT_KEY accelerate s_bool no} [/tag] [tag] @@ -849,16 +869,16 @@ {SIMPLE_KEY side s_unsigned} [/tag] [tag] - name="unit_overlay" + name="unit_overlay,remove_unit_overlay" max=infinite super="$filter_unit" {INSERT_TAG} - {SIMPLE_KEY image string} + {REQUIRED_KEY image string} [/tag] [tag] name="animate_unit" max=infinite - {SIMPLE_KEY flag string} + {REQUIRED_KEY flag string} {SIMPLE_KEY hits anim_hits} {SIMPLE_KEY text t_string} {SIMPLE_KEY male_text t_string} @@ -887,7 +907,8 @@ max=infinite super="$filter_location" {INSERT_TAG} - {SIMPLE_KEY text t_string} + {REQUIRED_KEY text t_string} + {SIMPLE_KEY color s_color} [/tag] [tag] name="deprecated_message" @@ -926,8 +947,8 @@ max=infinite super="$filter_side" {INSERT_TAG} - {SIMPLE_KEY speaker string} - {SIMPLE_KEY message string} + {DEFAULT_KEY speaker string "WML"} + {REQUIRED_KEY message string} {DEFAULT_KEY observable s_bool yes} [/tag] [tag] @@ -941,25 +962,31 @@ name="set_variable" max=infinite {INSERT_TAG} - {SIMPLE_KEY name string} + {REQUIRED_KEY name string} {SIMPLE_KEY value string} {SIMPLE_KEY literal string} {SIMPLE_KEY to_variable string} + {SIMPLE_KEY suffix string} + {SIMPLE_KEY prefix string} {SIMPLE_KEY add s_real} {SIMPLE_KEY sub s_real} {SIMPLE_KEY multiply s_real} {SIMPLE_KEY divide s_real} {SIMPLE_KEY modulo s_real} + {SIMPLE_KEY abs s_bool} + {SIMPLE_KEY root root_base} + {SIMPLE_KEY power s_real} {SIMPLE_KEY rand string_list} {SIMPLE_KEY time stamp} {SIMPLE_KEY string_length string} {SIMPLE_KEY round rounding_method} {SIMPLE_KEY ipart s_real} {SIMPLE_KEY fpart s_real} + {SIMPLE_KEY formula formula} [tag] name="join" - {SIMPLE_KEY variable string} - {SIMPLE_KEY key string} + {REQUIRED_KEY variable string} + {DEFAULT_KEY key string "value"} {SIMPLE_KEY separator string} {SIMPLE_KEY remove_empty s_bool} [/tag] @@ -968,19 +995,26 @@ name="set_variables" max=infinite {INSERT_TAG} - {SIMPLE_KEY name string} - {SIMPLE_KEY mode set_variables_mode} + {REQUIRED_KEY name string} {SIMPLE_KEY to_variable string} - {DATA_TAG value 0 infinite} - {DATA_TAG literal 0 infinite} - [tag] - name="split" - max=infinite - {SIMPLE_KEY list string} - {SIMPLE_KEY key string} - {SIMPLE_KEY separator string} - {SIMPLE_KEY remove_empty s_bool} - [/tag] + [if] + [not] + glob_on_to_variable=* + [/not] + [then] + {SIMPLE_KEY mode set_variables_mode} + {DATA_TAG value 0 infinite} + {DATA_TAG literal 0 infinite} + [tag] + name="split" + max=infinite + {SIMPLE_KEY list string} + {DEFAULT_KEY key string "value"} + {SIMPLE_KEY separator char} + {SIMPLE_KEY remove_empty s_bool} + [/tag] + [/then] + [/if] [/tag] [tag] name="store_gold" @@ -994,7 +1028,7 @@ max=infinite super="$filter_side" {INSERT_TAG} - {SIMPLE_KEY variable string} + {DEFAULT_KEY variable string "side"} [/tag] [tag] name="store_starting_location" @@ -1008,14 +1042,17 @@ max=infinite super="$filter_location" {INSERT_TAG} - {SIMPLE_KEY variable string} + {DEFAULT_KEY variable string "location"} [/tag] [tag] name="store_unit" max=infinite {INSERT_TAG} - {FILTER_TAG "filter" unit {INSERT_TAG}} - {SIMPLE_KEY variable string} + {FILTER_TAG "filter" unit ( + min=1 + {INSERT_TAG} + )} + {DEFAULT_KEY variable string "unit"} {SIMPLE_KEY mode store_unit_mode} {SIMPLE_KEY kill s_bool} [/tag] @@ -1023,30 +1060,33 @@ name="store_reachable_locations" max=infinite {INSERT_TAG} - {SIMPLE_KEY range reachable_range} - {SIMPLE_KEY moves reachable_moves} + {DEFAULT_KEY range reachable_range movement} + {DEFAULT_KEY moves reachable_moves current} {SIMPLE_KEY viewing_side s_unsigned} - {SIMPLE_KEY variable string} - {FILTER_TAG "filter" unit {INSERT_TAG}} + {REQUIRED_KEY variable string} + {FILTER_TAG "filter" unit ( + min=1 + {INSERT_TAG} + )} {FILTER_TAG "filter_location" location {INSERT_TAG}} [/tag] [tag] name="store_map_dimensions" max=infinite - {SIMPLE_KEY variable string} + {DEFAULT_KEY variable string "map_size"} [/tag] [tag] name="store_time_of_day" max=infinite {SIMPLE_KEY x s_unsigned} {SIMPLE_KEY y s_unsigned} - {SIMPLE_KEY variable string} + {DEFAULT_KEY variable string "time_of_day"} {SIMPLE_KEY turn s_unsigned} [/tag] [tag] name="store_turns" max=infinite - {SIMPLE_KEY variable string} + {DEFAULT_KEY variable string turns} [/tag] [tag] name="store_unit_defense" @@ -1060,7 +1100,7 @@ [tag] name="store_unit_type" max=infinite - {SIMPLE_KEY type string} + {REQUIRED_KEY type string} {SIMPLE_KEY variable string} [/tag] [tag] @@ -1083,15 +1123,17 @@ name="store_relative_direction" max=infinite {INSERT_TAG} - {SIMPLE_KEY variable string} # TODO: Is this a string or a direction? + {REQUIRED_KEY variable string} {SIMPLE_KEY mode s_unsigned} # TODO: This should really be an enum type [tag] name="source" + min=1 {SIMPLE_KEY x s_unsigned} {SIMPLE_KEY y s_unsigned} [/tag] [tag] name="destination" + min=1 {SIMPLE_KEY x s_unsigned} {SIMPLE_KEY y s_unsigned} [/tag] @@ -1105,8 +1147,14 @@ {DEFAULT_KEY check_visibility s_bool no} {DEFAULT_KEY check_teleport s_bool yes} {DEFAULT_KEY check_zoc s_bool yes} - {FILTER_TAG "traveler" unit {INSERT_TAG}} - {FILTER_TAG "destination" location {INSERT_TAG}} + {FILTER_TAG "traveler" unit ( + min=1 + {INSERT_TAG} + )} + {FILTER_TAG "destination" location ( + min=1 + {INSERT_TAG} + )} [/tag] [tag] name="unit_worth" @@ -1117,7 +1165,7 @@ [tag] name="clear_variable" max=infinite - {SIMPLE_KEY name string_list} + {REQUIRED_KEY name string_list} [/tag] [tag] name="sync_variable" @@ -1148,24 +1196,26 @@ {SIMPLE_KEY role string} {SIMPLE_KEY type string_list} {DEFAULT_KEY search_recall_list search_recall_list yes} - {ACTION_TAG else ()} + {DEFAULT_KEY reassign s_bool yes} + {ACTION_TAG else max=infinite} [tag] name="auto_recall" {DEFAULT_KEY show s_bool yes} {DEFAULT_KEY fire_event s_bool no} {DEFAULT_KEY check_passability s_bool yes} + {SIMPLE_KEY facing direction} [/tag] [/tag] [tag] name="random_placement" max=infinite {INSERT_TAG} - {SIMPLE_KEY num_items f_unsigned} - {SIMPLE_KEY variable string} - {SIMPLE_KEY min_distance s_unsigned} + {REQUIRED_KEY num_items f_unsigned} + {REQUIRED_KEY variable string} + {DEFAULT_KEY min_distance s_unsigned 0} {DEFAULT_KEY allow_less s_bool no} {FILTER_TAG "filter_location" location {INSERT_TAG}} - {ACTION_TAG "command" ()} + {ACTION_TAG "command" min=1} [/tag] {EMPTY_TAG "break,continue,return" 0 infinite} # The MicroAI tag is in a league of its own... @@ -1422,5 +1472,61 @@ [/case] [/switch] [/tag] + # Undocumented tags (or at least not linked from ActionWML wiki page) + [tag] + name="add_ai_behaviour" + max=infinite + deprecated=yes + {FILTER_TAG "filter" unit min=1} + {REQUIRED_KEY side s_unsigned} + {DEFAULT_KEY sticky s_bool no} + {DEFAULT_KEY loop_id string main_loop} + {SIMPLE_KEY evaluation string} + {SIMPLE_KEY execution string} + {SIMPLE_KEY bca_id string} + [/tag] + {ACTION_TAG "unsynced" max=infinite} + [tag] + name="clear_global_variable" + {REQUIRED_KEY global string} + {REQUIRED_KEY namespace string} + {SIMPLE_KEY side s_unsigned} + {DEFAULT_KEY immediate s_bool no} + [/tag] + [tag] + name="get_global_variable" + {REQUIRED_KEY from_global string} + {REQUIRED_KEY to_local string} + {REQUIRED_KEY namespace string} + {SIMPLE_KEY side s_unsigned} + [/tag] + [tag] + name="set_global_variable" + {REQUIRED_KEY to_global string} + {REQUIRED_KEY from_local string} + {REQUIRED_KEY namespace string} + {SIMPLE_KEY side s_unsigned} + {DEFAULT_KEY immediate s_bool no} + [/tag] + [tag] + name="store_rotate_map_location" + max=infinite + {INSERT_TAG} + {REQUIRED_KEY variable string} + {DEFAULT_KEY angle s_int 1} + {SIMPLE_KEY mode s_unsigned} # TODO: This should really be an enum type + [tag] + name="source" + min=1 + {SIMPLE_KEY x s_unsigned} + {SIMPLE_KEY y s_unsigned} + [/tag] + [tag] + name="destination" + min=1 + {SIMPLE_KEY x s_unsigned} + {SIMPLE_KEY y s_unsigned} + [/tag] + [/tag] any_tag=yes [/tag] diff --git a/data/schema/core/conditionalwml.cfg b/data/schema/core/conditionalwml.cfg index 34246f421238e..9063f67e9e1ce 100644 --- a/data/schema/core/conditionalwml.cfg +++ b/data/schema/core/conditionalwml.cfg @@ -43,6 +43,10 @@ {INSERT_TAG} {REQUIRED_KEY id string} [/tag] + {EMPTY_TAG "proceed_to_next_scenario" 0 infinite} + [link] + name="lua" + [/link] [tag] name="and,or,not" super="$condition_wml" diff --git a/data/schema/game_config.cfg b/data/schema/game_config.cfg index 14b3bf070ba64..da9bcf89d3a92 100644 --- a/data/schema/game_config.cfg +++ b/data/schema/game_config.cfg @@ -64,6 +64,17 @@ name="defeat_condition" value="no_leader_left|no_units_left|never|always" [/type] + [type] + name="root_base" + [union] + [type] + link=unsigned + [/type] + [type] + value="square|cube" + [/type] + [/union] + [/type] [type] name=range_list # value="\d+(-\d+)?(,\d+(-\d+)?)*" @@ -167,6 +178,25 @@ [/element] [/list] [/type] + [type] + name="anim_hits" + [union] + [type] + link=bool + [/type] + [type] + value="hit|miss|kill" + [/type] + [/union] + [/type] + [type] + name="anim_hits_list" + [list] + [element] + link="anim_hits" + [/element] + [/list] + [/type] [type] name="anim_hits" [list] diff --git a/data/schema/types/basic.cfg b/data/schema/types/basic.cfg index 90248038e48f5..abfd98f9bb497 100644 --- a/data/schema/types/basic.cfg +++ b/data/schema/types/basic.cfg @@ -33,6 +33,11 @@ value="_?.*" [/type] +[type] + name=char + value="." +[/type] + [type] name=color value="(?:2[0-5][0-5]|[01]?\d?\d)[.,]\s*(?:2[0-5][0-5]|[01]?\d?\d)[.,]\s*(?:2[0-5][0-5]|[01]?\d?\d)[.,]\s*(?:2[0-5][0-5]|[01]?\d?\d)" diff --git a/data/schema/types/subst.cfg b/data/schema/types/subst.cfg index fe6cb4320e728..34f2a5f2a7387 100644 --- a/data/schema/types/subst.cfg +++ b/data/schema/types/subst.cfg @@ -22,4 +22,3 @@ {SUBST_TYPE real} {SUBST_TYPE color} {SUBST_TYPE point} -{SUBST_TYPE t_string} diff --git a/data/schema/units/abilities.cfg b/data/schema/units/abilities.cfg index c7b71edc660a7..4f63bfc0e6ec5 100644 --- a/data/schema/units/abilities.cfg +++ b/data/schema/units/abilities.cfg @@ -96,9 +96,9 @@ name="tunnel" min=1 {SIMPLE_KEY id string} - {FILTER_TAG "filter" unit ()} - {FILTER_TAG "source" location ()} - {FILTER_TAG "target" location ()} + {FILTER_TAG "filter" unit min=1} + {FILTER_TAG "source" location min=1} + {FILTER_TAG "target" location min=1} {DEFAULT_KEY bidirectional bool yes} {DEFAULT_KEY always_visible bool no} {DEFAULT_KEY allow_vision bool yes} diff --git a/data/schema/units/animations.cfg b/data/schema/units/animations.cfg index b5eda147fa2ae..de21da1fba7f7 100644 --- a/data/schema/units/animations.cfg +++ b/data/schema/units/animations.cfg @@ -10,7 +10,7 @@ {SIMPLE_KEY direction dir_list} {SIMPLE_KEY frequency int} {SIMPLE_KEY base_score int} - {SIMPLE_KEY hits anim_hits} + {SIMPLE_KEY hits anim_hits_list} {FILTER_TAG "filter" unit ()} {FILTER_TAG "filter_second" unit ()}