Add various new features to the schema

Addresses #3730

This is everything I could find by perusing the commit log.
I may have missed something, however.
This commit is contained in:
Celtic Minstrel 2019-03-03 11:55:46 -05:00
parent a50ec3f872
commit bfc997c91e
7 changed files with 45 additions and 8 deletions

View File

@ -190,6 +190,7 @@
{FILTER_TAG "filter" unit {INSERT_TAG}}
{SIMPLE_KEY x s_int}
{SIMPLE_KEY y s_int}
{SIMPLE_KEY location_id string}
{DEFAULT_KEY clear_shroud s_bool yes}
{DEFAULT_KEY animate s_bool no}
{DEFAULT_KEY check_passability s_bool yes}
@ -202,6 +203,7 @@
{SIMPLE_KEY y s_int}
{SIMPLE_KEY mask map_data}
{SIMPLE_KEY mask_file string}
{SIMPLE_KEY alignment mask_alignment}
{DEFAULT_KEY border s_bool no}
[tag]
name="rule"
@ -248,6 +250,7 @@
{DEFAULT_KEY animate s_bool yes}
{SIMPLE_KEY x s_coordinates}
{SIMPLE_KEY y s_coordinates}
{SIMPLE_KEY location_id string}
[/tag]
[tag]
name="allow_recruit,disallow_recruit,set_recruit"
@ -343,6 +346,8 @@
{SIMPLE_KEY to_x s_range_list}
{SIMPLE_KEY to_y s_range_list}
{SIMPLE_KEY to_location string}
{SIMPLE_KEY dir dir_list}
{DEFAULT_KEY clear_shroud s_bool no}
{DEFAULT_KEY fire_event s_bool no}
{DEFAULT_KEY check_passability s_bool yes}
{SIMPLE_KEY force_scroll s_bool}
@ -485,7 +490,8 @@
name="replace_map"
max=infinite
{INSERT_TAG}
{SIMPLE_KEY map map_data}
{DEPRECATED_KEY map map_data}
{SIMPLE_KEY map_data map_data}
{SIMPLE_KEY map_file string}
{DEFAULT_KEY expand s_bool no}
{DEFAULT_KEY shrink s_bool no}
@ -550,6 +556,7 @@
{SIMPLE_KEY value string}
{SIMPLE_KEY x s_int}
{SIMPLE_KEY y s_int}
{SIMPLE_KEY location_id string}
[tag]
name="from"
{SIMPLE_KEY x s_int}
@ -621,6 +628,8 @@
{DEFAULT_KEY highlight s_bool yes}
{SIMPLE_KEY sound string_list}
{SIMPLE_KEY voice string_list}
{SIMPLE_KEY male_voice string_list}
{SIMPLE_KEY female_voice string_list}
{SIMPLE_KEY variable string}
{FORMATTING_KEYS}
{SHOW_IF_TAG}
@ -732,6 +741,7 @@
{SIMPLE_KEY name string}
# Override some supertag keys to allow variable substitutions
{DEFAULT_KEY visible_in_fog s_bool yes}
{FILTER_TAG "filter_side" side ()}
[/tag]
[tag]
name="remove_item"
@ -1197,13 +1207,14 @@
{SIMPLE_KEY facing dir}
{SIMPLE_KEY x s_coordinates}
{SIMPLE_KEY y s_coordinates}
{SIMPLE_KEY location_id string}
[/tag]
[/tag]
[tag]
name="random_placement"
max=infinite
{INSERT_TAG}
{REQUIRED_KEY num_items f_unsigned,s_unsigned}
{REQUIRED_KEY num_items f_unsigned,s_unsigned,s_int_percent}
{REQUIRED_KEY variable string}
{DEFAULT_KEY min_distance s_unsigned 0}
{DEFAULT_KEY allow_less s_bool no}

View File

@ -117,7 +117,6 @@
{SIMPLE_KEY terrain_liked terrain_list}
[/tag]
# TODO: Is [event] really allowed at toplevel, outside a [scenario] or [era]?
[tag]
name="event"
max=infinite
@ -458,6 +457,7 @@
{SIMPLE_KEY image string}
{SIMPLE_KEY mask string}
{SIMPLE_KEY lawful_bonus int}
{SIMPLE_KEY liminal_bonus int}
{SIMPLE_KEY red int}
{SIMPLE_KEY green int}
{SIMPLE_KEY blue int}

View File

@ -36,6 +36,7 @@
{SIMPLE_KEY less_than_equal_to string}
{SIMPLE_KEY boolean_equals string}
{SIMPLE_KEY boolean_not_equals string}
{SIMPLE_KEY formula formula}
[/tag]
[tag]
name="found_item"

View File

@ -14,7 +14,7 @@
{SIMPLE_KEY radius s_int}
{SIMPLE_KEY formula formula}
{SIMPLE_KEY lua_function string}
{SIMPLE_KEY location_id string}
{SIMPLE_KEY location_id string_list}
{FILTER_TAG "filter" unit ()}
{FILTER_TAG "filter_owner" side ()}

View File

@ -31,6 +31,8 @@
{SIMPLE_KEY lua_function string}
{SIMPLE_KEY ai_special string}
{SIMPLE_KEY recall_cost s_range_list}
{SIMPLE_KEY usage string}
{SIMPLE_KEY alignment alignment}
[tag]
name="filter_wml"

View File

@ -88,6 +88,11 @@
name=alignment
value="lawful|neutral|chaotic|liminal"
[/type]
[type]
name=mask_alignment
value="even|odd"
# TODO: Document the third option once we finalize its name
[/type]
[type]
name=ai_usage
value="scout|fighter|archer|mixed fighter|healer|null"
@ -388,10 +393,8 @@
[tag]
name="lua"
max=infinite
[key]
name="code"
type="string"
[/key]
{SIMPLE_KEY name string}
{SIMPLE_KEY code string}
{DATA_TAG args 0 1}
[/tag]
[/tag]

View File

@ -1,4 +1,13 @@
#define BASED_ON_SPECIAL NAME
[tag]
name={NAME}
max=infinite
super="units/unit_type/attack/specials/" + {NAME}
{FILTER_TAG "filter_student" unit ()}
[/tag]
#enddef
[tag]
# Using invalid characters to ensure it doesn't match a real tag.
name="~generic~"
@ -69,12 +78,16 @@
name="resistance"
max=infinite
super="units/unit_type/abilities/~value~"
{FILTER_TAG "filter_weapon" weapon ()}
{FILTER_TAG "filter_second_weapon" weapon ()}
[/tag]
[tag]
name="leadership"
max=infinite
super="units/unit_type/abilities/~generic~"
{SIMPLE_KEY value f_int}
{FILTER_TAG "filter_weapon" weapon ()}
{FILTER_TAG "filter_second_weapon" weapon ()}
[/tag]
[tag]
name="illuminates"
@ -119,8 +132,15 @@
super="units/unit_type/abilities/~generic~"
{FILTER_TAG "filter_second_weapon" weapon ()}
[/tag]
{BASED_ON_SPECIAL "attacks"}
{BASED_ON_SPECIAL "chance_to_hit"}
{BASED_ON_SPECIAL "damage"}
{BASED_ON_SPECIAL "drains"}
{BASED_ON_SPECIAL "berserk"}
[tag]
name="*"
max=infinite
super="units/unit_type/abilities/~generic~"
[/tag]
#undef BASED_ON_SPECIAL