df_ls_structure/objects/
creature.rs

1use df_ls_core::{AllowEmpty, Any, Choose, Clamp, DFChar, Reference, ReferenceTo, Referenceable};
2use df_ls_syntax_analysis::TokenDeserialize;
3use serde::{Deserialize, Serialize};
4
5mod attack;
6mod caste;
7mod creature_enums;
8mod gait;
9mod local_mat;
10mod misc_creature_nesting;
11mod select_caste;
12
13pub use attack::*;
14pub use caste::*;
15pub use creature_enums::*;
16pub use gait::*;
17pub use local_mat::*;
18pub use misc_creature_nesting::*;
19pub use select_caste::*;
20
21use crate::{
22    BiomeEnum, BodyAttributeEnum, BodyDetailPlanToken, BodyGlossToken, BodyToken,
23    BpCriteriaTokenArg, ColorToken, CreatureVariationToken, ItemReferenceArg, LocalMaterialToken,
24    MaleOrFemaleEnum, MaterialStateEnum, MaterialTokenArgWithLocalCreatureMat, NoneEnum,
25    PersonalityTraitEnum, SkillEnum, SoulAttributeEnum, SphereEnum, UnitTypeEnum, UseMaterial,
26    UseMaterialTemplate,
27};
28
29#[derive(
30    Serialize, Deserialize, Clone, Debug, Default, TokenDeserialize, PartialEq, Eq, Referenceable,
31)]
32pub struct CreatureToken {
33    /// argument 1 of `CREATURE`
34    #[token_de(token = "CREATURE", on_duplicate_to_parent, primary_token)]
35    #[referenceable(self_reference)]
36    pub reference: Option<ReferenceTo<Self>>,
37    // region: Creature-only tokens ===============================================================
38    /// Nested token `CASTE`
39    #[token_de(token = "CASTE")]
40    pub castes: Vec<Caste>,
41    /// Nested token `SELECT_CASTE`
42    #[token_de(token = "SELECT_CASTE")]
43    pub select_castes: Vec<SelectCaste>,
44    /// A list of `TISSUE` tokens on this creature.
45    #[token_de(token = "TISSUE")]
46    pub tissue: Vec<LocalTissueToken>,
47    /// A list of `USE_TISSUE` tokens on this creature.
48    #[token_de(token = "USE_TISSUE")]
49    pub use_tissue: Vec<UseTissue>,
50    /// A list of `USE_TISSUE_TEMPLATE` tokens on this creature.
51    #[token_de(token = "USE_TISSUE_TEMPLATE")]
52    pub use_tissue_template: Vec<UseTissueTemplate>,
53    /// A list of `SELECT_TISSUE` tokens on this creature.
54    #[token_de(token = "SELECT_TISSUE")]
55    pub select_tissue: Vec<SelectTissue>,
56    /// Removes a tissue from the creature.
57    #[token_de(token = "REMOVE_TISSUE")]
58    pub remove_tissue: Vec<Reference>, // ref is a local mat
59    /// A list of `MATERIAL` tokens on this creature.
60    #[token_de(token = "MATERIAL")]
61    pub material: Vec<LocalMaterialToken>,
62    /// A list of `USE_MATERIAL` tokens on this creature.
63    #[token_de(token = "USE_MATERIAL")]
64    pub use_material: Vec<UseMaterial>,
65    /// A list of `USE_MATERIAL_TEMPLATE` tokens on this creature.
66    #[token_de(token = "USE_MATERIAL_TEMPLATE")]
67    pub use_material_template: Vec<UseMaterialTemplate>,
68    /// A list of `SELECT_MATERIAL` tokens on this creature.
69    #[token_de(token = "SELECT_MATERIAL")]
70    pub select_material: Vec<SelectMaterial>,
71    /// Removes a material from the creature.
72    #[token_de(token = "REMOVE_MATERIAL")]
73    pub remove_material: Vec<Reference>, // ref is a local mat
74    /// If set, the creature will blink between its `[TILE]` and its `ALTTILE`.
75    #[token_de(token = "ALTTILE")]
76    pub alttile: Option<DFChar>,
77    /// Enables the creature to be kept in artificial hives by beekeepers.
78    #[token_de(token = "ARTIFICIAL_HIVEABLE")]
79    pub artificial_hiveable: Option<()>,
80    /// Select a biome the creature may appear in.
81    #[token_de(token = "BIOME")]
82    pub biome: Vec<BiomeEnum>,
83    /// Multiplies frequency by a factor of (integer)%.
84    #[token_de(token = "CHANGE_FREQUENCY_PERC")]
85    pub change_frequency_perc: Option<u32>,
86    /// The minimum/maximum numbers of how many creatures per spawned cluster. Certain vermin fish
87    /// use this token in combination with temperate ocean and river biome tokens to perform
88    /// seasonal migrations. Defaults to 1:1 if not specified.
89    #[token_de(token = "CLUSTER_NUMBER")]
90    pub cluster_number: Option<(u32, u32)>,
91    /// Color of the creature's tile.
92    /// See [Color](https://dwarffortresswiki.org/index.php/Color) for usage.
93    #[token_de(token = "COLOR")]
94    pub color: Option<(u8, u8, u8)>,
95    /// Creatures active in their civilization's military will use this tile instead.
96    #[token_de(token = "CREATURE_SOLDIER_TILE")]
97    pub creature_soldier_tile: Option<DFChar>,
98    /// The symbol of the creature in ASCII mode.
99    #[token_de(token = "CREATURE_TILE")]
100    pub creature_tile: Option<DFChar>,
101    /// Adding this token to a creature prevents it from appearing in generated worlds (unless it's
102    /// marked as always present for a particular civilisation). For example, adding it to dogs will
103    /// lead to worlds being generated without dogs in them. Also removes the creature from the
104    /// object testing arena's spawn list. If combined with `[FANCIFUL]`, artistic depictions of the
105    /// creature will occur regardless. Used by centaurs, chimeras and griffons in the vanilla game.
106    ///
107    /// Note: a creature tagged as `DOES_NOT_EXIST` can still be summoned successfully, as long as
108    /// it has a body defined in its raws ([source](http://www.bay12forums.com/smf/index.php?topic=165213.msg8086938#msg8086938)).
109    /// It's also possible for another creature to transform into it.
110    #[token_de(token = "DOES_NOT_EXIST")] // TODO maybe add a warning for this token? like #84
111    pub does_not_exist: Option<()>,
112    /// Makes the creature appear as a large 3x3 wagon responsible for carrying trade goods, pulled
113    /// by two `[WAGON_PULLER]` creatures and driven by a merchant.
114    #[token_de(token = "EQUIPMENT_WAGON")]
115    pub equipment_wagon: Option<()>,
116    /// Creature is considered evil and will only show up in evil biomes. Civilizations with
117    /// `[USE_EVIL_ANIMALS]` can domesticate them regardless of exotic status. Has no effect on
118    /// cavern creatures except to restrict taming. A civilization with evil creatures can
119    /// colonise evil areas.
120    #[token_de(token = "EVIL")]
121    pub evil: Option<()>,
122    /// The creature is a thing of legend and known to all civilizations. Its materials cannot be
123    /// requested or preferred. The tag also adds some art value modifiers. Used by a number of
124    /// creatures. Conflicts with `[COMMON_DOMESTIC]`.
125    #[token_de(token = "FANCIFUL")]
126    pub fanciful: Option<()>,
127    /// Determines the chances of a creature appearing within its environment, with higher values
128    /// resulting in more frequent appearance. Also affects the chance of a creature being brought
129    /// in a caravan for trading.
130    ///
131    /// The game effectively considers all creatures that can possibly appear and uses the
132    /// `FREQUENCY` value as a weight - for example, if there are three creatures with frequencies
133    /// 10/25/50, the creature with `[FREQUENCY:50]` will appear approximately 58.8% of the time.
134    ///
135    /// Defaults to 50 if not specified.
136    ///
137    /// Not to be confused with `[POP_RATIO]`.
138    #[token_de(token = "FREQUENCY")]
139    pub frequency: Option<u32>,
140    /// Defines a new name for a creature in baby state, much like `[BABYNAME]`, but applied
141    /// regardless of caste.
142    #[token_de(token = "GENERAL_BABY_NAME")]
143    pub general_baby_name: Option<(String, String)>,
144    /// Defines a new name for a creature in child state, much like `[CHILDNAME]`, but applied
145    /// regardless of caste.
146    #[token_de(token = "GENERAL_CHILD_NAME")]
147    pub general_child_name: Option<(String, String)>,
148    /// Found on procedurally generated creatures like forgotten beasts, titans, demons, angels, and
149    /// night creatures. Cannot be specified in user-defined raws.
150    #[token_de(token = "GENERATED")] // TODO mark generated, see #84
151    pub generated: Option<()>,
152    /// The colour of the creature's `[GLOWTILE]`.
153    #[token_de(token = "GLOWCOLOR")]
154    pub glowcolor: Option<(u8, u8, u8)>,
155    /// If present, the being glows in the dark (generally used for Adventurer Mode). The tile is
156    /// what replaces the being's current tile when it is obscured from your sight by darkness. The
157    /// default setting for kobolds (a yellow quotation mark) provides a nice "glowing eyes" effect.
158    /// The game is also hardcoded to automatically convert quotation mark `GLOWTILES` into
159    /// apostrophes if the creature has lost one eye. This token works at the generic creature level - for
160    /// caste-specific glow tiles, use `[CASTE_GLOWTILE]` instead.
161    #[token_de(token = "GLOWTILE")]
162    pub glowtile: Option<DFChar>,
163    /// Creature is considered good and will only show up in good biomes - unicorns, for example.
164    /// Civilizations with `[USE_GOOD_ANIMALS]` can domesticate them regardless of exotic status.
165    /// Has no effect on cavern creatures except to restrict taming. A civilization that has good
166    /// creatures can colonise good areas in world-gen.
167    #[token_de(token = "GOOD")]
168    pub good: Option<()>,
169    /// Found on generated angels. This is the historical figure ID of the deity to which the
170    /// angel is associated.
171    #[token_de(token = "HFID")] // TODO mark generated,  see #84
172    pub hfid: Option<u32>,
173    /// What product is harvested from beekeeping.
174    #[token_de(token = "HIVE_PRODUCT")]
175    pub hive_product: Vec<(
176        u32,
177        u32,
178        ItemReferenceArg,
179        MaterialTokenArgWithLocalCreatureMat,
180    )>,
181    /// Creature can spawn as a wild animal in the appropriate biomes.
182    #[token_de(token = "LARGE_ROAMING")]
183    pub large_roaming: Option<()>,
184    /// Allows you to play as a wild animal of this species in adventurer mode. Prevents trading of
185    /// (tame) instances of this creature in caravans.
186    #[token_de(token = "LOCAL_POPS_CONTROLLABLE")]
187    pub local_pops_controllable: Option<()>,
188    /// The creatures will scatter if they have this tag, or form tight packs if they don't.
189    #[token_de(token = "LOOSE_CLUSTERS")]
190    pub loose_clusters: Option<()>,
191    /// Marks if the creature is an actual real-life creature. Only used for worlfeb "age" names
192    /// at present.
193    #[token_de(token = "MUNDANE")]
194    pub mundane: Option<()>,
195    /// The generic name for any creature of this type - will be used when distinctions between
196    /// caste are unimportant. For names for specific castes, use `[CASTE_NAME]` instead. If left
197    /// undefined, the creature will be labeled as "nothing" by the game.
198    #[token_de(token = "NAME")]
199    pub name: Option<(String, String, String)>,
200    /// Sets what other creatures prefer about this creature. "Urist likes dwarves for their
201    /// beards." Multiple entries will be chosen from at random. Creatures lacking a `PREFSTRING`
202    /// token will never appear under another's preferences.
203    #[token_de(token = "PREFSTRING")]
204    pub prefstring: Vec<String>,
205    /// The generic name for members of this profession, at the creature level. In order to give
206    /// members of specific castes different names for professions, use `[CASTE_PROFESSION_NAME]`
207    /// instead.
208    #[token_de(token = "PROFESSION_NAME")]
209    pub profession_name: Vec<(UnitTypeEnum, String, String)>,
210    /// The creature will only show up in "savage" biomes. Has no effect on cavern creatures. Cannot
211    /// be combined with `[GOOD]` or `[EVIL]`.
212    #[token_de(token = "SAVAGE")]
213    pub savage: Option<()>,
214    /// Determines how keen a creature's sense of smell is. Lower is better. At 10000, a creature
215    /// cannot smell at all.
216    #[token_de(token = "SMELL_TRIGGER")]
217    pub smell_trigger: Option<u32>,
218    /// If this creature is active in its civilization's military, it will blink between its default
219    /// tile and this one.
220    #[token_de(token = "SOLDIER_ALTTILE")]
221    pub soldier_alttile: Option<DFChar>,
222    /// Boasting speeches relating to killing this creature. Examples include `dwarf.txt` and `elf.txt`
223    /// in `data\speech`. Must end in `.txt`.
224    #[token_de(token = "SPEECH")]
225    pub speech: Option<String>, // TODO: string is a txt path
226    /// Boasting speeches relating to killing females of this creature. Must end in `.txt`
227    #[token_de(token = "SPEECH_FEMALE")]
228    pub speech_female: Option<String>, // TODO: string is a txt path
229    /// Boasting speeches relating to killing males of this creature. Must end in `.txt`
230    #[token_de(token = "SPEECH_MALE")]
231    pub speech_male: Option<String>, // TODO: string is a txt path
232    /// Sets what religious spheres the creature is aligned to, for purposes of being worshipped via
233    /// the `[POWER]` token. Also affects the layout of hidden fun stuff, and the creature's name.
234    #[token_de(token = "SPHERE")]
235    pub sphere: Vec<SphereEnum>,
236    /// Possibly means that a large swarm of this vermin can be disturbed, usually in adventurer mode.
237    /// Needs verification.
238    #[token_de(token = "TRIGGERABLE_GROUP")]
239    pub triggerable_group: Option<(u32, u32)>,
240    /// Creature will occur in every region with the correct biome. Does not apply to `[EVIL]`/`[GOOD]`
241    /// tags.
242    #[token_de(token = "UBIQUITOUS")]
243    pub ubiquitous: Option<()>,
244    /// Depth that the creature appears underground. Numbers can be from 0 to 5. 0 is actually
245    /// 'above ground' and can be used if the creature is to appear both above and below ground.
246    ///
247    /// Values from 1 to 3 are the respective cavern levels, 4 is the magma sea and 5 is the `HFS`.
248    /// A single argument may be used instead of min and max. Demons use only 5:5; user-defined
249    /// creatures with both this depth and `[FLIER]` will take part in the initial wave from the
250    /// HFS alongside generated demons. Without `[FLIER]`, they will only spawn from the map
251    /// edges.
252    ///
253    /// Civilizations that can use underground plants or animals will only export (via the embark
254    /// screen or caravans) things that are available at depth 1.
255    #[token_de(token = "UNDERGROUND_DEPTH")]
256    pub underground_depth: Option<(u32, Option<u32>)>,
257    /// The vermin creature will attempt to eat exposed food. See `[PENETRATEPOWER]`. Distinct from
258    /// `[VERMIN_ROTTER]`.
259    #[token_de(token = "VERMIN_EATER")]
260    pub vermin_eater: Option<()>,
261    /// The vermin appears in water and will attempt to swim around.
262    #[token_de(token = "VERMIN_FISH")]
263    pub vermin_fish: Option<()>,
264    /// The creature appears in "general" surface ground locations. Note that this doesn't stop the
265    /// creature from flying if it can (most vermin birds have this tag).
266    #[token_de(token = "VERMIN_GROUNDER")]
267    pub vermin_grounder: Option<()>,
268    /// The vermin are attracted to rotting stuff and loose food left in the open and cause unhappy
269    /// thoughts to dwarves who encounter them. Present on flies, knuckle worms, acorn flies, and
270    /// blood gnats. May speed up decay, but this is not verified.
271    #[token_de(token = "VERMIN_ROTTER")]
272    pub vermin_rotter: Option<()>,
273    /// The creature randomly appears near dirt or mud, and may be uncovered by creatures that have
274    /// the `[ROOT_AROUND]` interaction such as geese and chickens. Dwarves will ignore the creature
275    /// when given the "Capture live land animal" task.
276    #[token_de(token = "VERMIN_SOIL")]
277    pub vermin_soil: Option<()>,
278    /// The vermin will appear in a single tile cluster of many vermin, such as a colony of ants.
279    #[token_de(token = "VERMIN_SOIL_COLONY")]
280    pub vermin_soil_colony: Option<()>,
281    // endregion ==================================================================================
282    // region: Caste Tokens =======================================================================
283    /// A list of `[ATTACK:...]` tokens this creature caste has.
284    #[token_de(token = "ATTACK")]
285    pub attacks: Vec<Attack>,
286    /// List of interactions the creature can perform.
287    #[token_de(token = "CAN_DO_INTERACTION")]
288    pub can_do_interaction: Vec<CanDoInteraction>,
289    /// A list of `SET_BP_GROUP` tokens on this creature.
290    #[token_de(token = "SET_BP_GROUP")]
291    pub set_bp_group: Vec<SetBpGroup>,
292    /// A list of `SET_TL_GROUP` tokens on this creature.
293    #[token_de(token = "SET_TL_GROUP")]
294    pub set_tl_group: Vec<SetTlGroup>,
295    /// A list of `SElECT_TISSUE_LAYER` tokens on this creature.
296    #[token_de(token = "SELECT_TISSUE_LAYER")]
297    pub select_tissue_layer: Vec<SelectTissueLayer>,
298    /// A list of `TISSUE_LAYER` tokens on this creature.
299    #[token_de(token = "TISSUE_LAYER")]
300    pub tissue_layer: Vec<TissueLayer>,
301    /// Presumably a counterpart to `TISSUE_LAYER_UNDER`, which adds a tissue layer over a given part.
302    #[token_de(token = "TISSUE_LAYER_OVER")]
303    // TODO: the optional reference here is weird and needs some research;
304    // look for this token in `creature_masterwork_fish.txt` to see what I mean.
305    pub tissue_layer_over: Vec<(BpCriteriaTokenArg, Reference, Option<Reference>)>,
306    /// Adds the tissue layer under a given part.
307    ///
308    /// For example an Iron Man has a gaseous poison within and this tissue (`GAS` is its name) has
309    /// the token `[TISSUE_LEAKS]` and its state is `GAS`, so when you puncture the iron outside and
310    /// damage this tissue it leaks gas (can have a syndrome by using a previous one in the creature
311    /// sample).
312    #[token_de(token = "TISSUE_LAYER_UNDER")]
313    pub tissue_layer_under: Vec<(BpCriteriaTokenArg, Reference)>,
314    /// Prevents tamed creature from being made available for adoption, instead allowing it to
315    /// automatically adopt whoever it wants. The basic requirements for adoption are intact, and
316    /// the creature will only adopt individuals who have a preference for their species. Used by
317    /// cats in the vanilla game.
318    #[token_de(token = "ADOPTS_OWNER")]
319    pub adopts_owner: Option<()>,
320    /// Makes the creature need alcohol to get through the working day; it will choose to drink
321    /// booze instead of water if possible. Going sober for too long reduces speed.
322    #[token_de(token = "ALCOHOL_DEPENDENT")]
323    pub alcohol_dependent: Option<()>,
324    /// Sets the creature to be active during the day, night, and twilight in Adventurer Mode. Seems
325    /// to be a separate value from `[DIURNAL]`/`[NOCTURNAL]`/`[CREPUSCULAR]`, rather than implying them.
326    #[token_de(token = "ALL_ACTIVE")]
327    pub all_active: Option<()>,
328    /// Found on `[LARGE_PREDATOR]`s who ambush their prey. Instead of charging relentlessly at prey,
329    /// the predator will wait till the prey is within a few squares before charging. May or may not
330    /// work on other creatures (unverified).
331    #[token_de(token = "AMBUSHPREDATOR")]
332    pub ambushpredator: Option<()>,
333    /// Allows a creature to breathe both inside and outside of water (unlike `[AQUATIC]`) - does
334    /// not prevent drowning in magma.
335    #[token_de(token = "AMPHIBIOUS")]
336    pub amphibious: Option<()>,
337    /// Applies the specified creature variation.
338    ///
339    /// In addition to the required `CREATURE_VARIATION` object ID, you may give extra arguments;
340    /// These extra arguments will replace instances of `!ARGn` in the creature variation, where
341    /// `n` is the index of the argument given to `APPLY_CREATURE_VARIATION`; the first argument
342    /// will replace any "`!ARG1`", the second any "`!ARG2`" and so on. You may use any number of arguments.
343    ///
344    /// If you have an `!ARGn` of a higher number than the arguments given, the replacements will
345    /// act oddly, depending on if `n` has more digits than the number of arguments given.
346    /// For example, `[APPLY_CREATURE_VARIATION:EXAMPLE_CV:one:two:three]`, which has three
347    /// arguments given, will leave all instances of `!ARG5` in `EXAMPLE_CV` intact as `!ARG5`,
348    /// but `!ARG10` will become `one0`.
349    ///
350    /// The pipe character `|` is turned into `:` when inserted, so single arguments in
351    /// `APPLY_CREATURE_VARIATION` may be turned into multi-argument segments in the output.
352    ///  For example, with this creature variation:
353    ///
354    /// ```df_raw
355    /// [CREATURE_VARIATION:DIMORPHIC_FEATHER_COLORS]
356    ///     [CV_NEW_TAG:SELECT_CASTE:FEMALE]
357    ///         [CV_NEW_TAG:SET_TL_GROUP:BY_CATEGORY:ALL:FEATHER]
358    ///             [CV_NEW_TAG:TL_COLOR_MODIFIER:!ARG1]
359    ///                 [CV_NEW_TAG:TLCM_NOUN:feathers:PLURAL]
360    ///     [CV_NEW_TAG:SELECT_CASTE:MALE]
361    ///         [CV_NEW_TAG:SET_TL_GROUP:BY_CATEGORY:ALL:FEATHER]
362    ///             [CV_NEW_TAG:TL_COLOR_MODIFIER:!ARG2]
363    ///                 [CV_NEW_TAG:TLCM_NOUN:feathers:PLURAL]
364    /// ```
365    /// If you use `[APPLY_CREATURE_VARIATION:DIMORPHIC_FEATHER_COLORS:BROWN|1:BLUE|10|GREEN|1|BLACK|1]`,
366    /// the following is what will be added to the creature:
367    ///
368    /// ```df_raw
369    /// [SELECT_CASTE:FEMALE]
370    ///     [SET_TL_GROUP:BY_CATEGORY:ALL:FEATHER]
371    ///     [TL_COLOR_MODIFIER:BROWN:1]
372    ///         [TLCM_NOUN:feathers:PLURAL]
373    /// [SELECT_CASTE:MALE]
374    ///     [SET_TL_GROUP:BY_CATEGORY:ALL:FEATHER]
375    ///     [TL_COLOR_MODIFIER:BLUE:10:GREEN:1:BLACK:1]
376    ///         [TLCM_NOUN:feathers:PLURAL]
377    /// ```
378    #[token_de(token = "APPLY_CREATURE_VARIATION")]
379    pub apply_creature_variation: Vec<(
380        ReferenceTo<CreatureVariationToken>,
381        Option<(Vec<AllowEmpty<Any>>,)>,
382    )>,
383    /// Enables the creature to breathe in water, but causes it to air-drown on dry land.
384    #[token_de(token = "AQUATIC")]
385    pub aquatic: Option<()>,
386    /// Causes the creature to be excluded from the object testing arena's creature spawning list.
387    ///
388    /// Typically applied to spoileriffic creatures.
389    #[token_de(token = "ARENA_RESTRICTED")]
390    pub arena_restricted: Option<()>,
391    /// Prevents the creature from attacking or frighten creatures with the `[NATURAL]` tag.
392    #[token_de(token = "AT_PEACE_WITH_WILDLIFE")]
393    pub at_peace_with_wildlife: Option<()>,
394    /// Specifies when a megabeast or semi-megabeast will attack the fortress. The attacks will
395    /// start occuring when at least one of the requirements is met. Setting a value to 0 disables
396    /// the trigger.
397    ///
398    /// Arguments: population, exported wealth, created wealth.
399    #[token_de(token = "ATTACK_TRIGGER")]
400    pub attack_trigger: Option<(u32, u32, u32)>,
401    /// Age at which creature is considered a child, the default is zero. One can think of this as
402    /// the duration of the baby stage.
403    #[token_de(token = "BABY")]
404    pub baby: Option<u32>,
405    /// Defines a new name for a creature in baby state at the caste level. For non-caste-specific
406    /// baby names, see `[GENERAL_BABY_NAME]`.
407    ///
408    /// Arguments: singular, plural
409    #[token_de(token = "BABYNAME")]
410    pub babyname: Option<(String, String)>,
411    /// Creature may be subject to beaching, becoming stranded on shores, where they will eventually
412    /// air-drown. The number indicates the frequency of the occurrence. Presumably requires the
413    /// creature to be `[AQUATIC]`. Used by orcas, sperm whales and sea nettle jellyfish in the
414    /// vanilla game.
415    #[token_de(token = "BEACH_FREQUENCY")]
416    pub beach_frequency: Option<u32>,
417    /// The creature is non-aggressive by default, and will never automatically be engaged by
418    /// companions or soldiers. It will run away from any creatures that are not friendly to it, and
419    /// will only defend itself if it becomes enraged. Can be thought of as the counterpoint of the
420    /// `[LARGE_PREDATOR]` tag. When tamed, animals with this tag will be useless for fortress
421    /// defense.
422    #[token_de(token = "BENIGN")]
423    pub benign: Option<()>,
424    /// Specifies what the creature's blood is made of.
425    #[token_de(token = "BLOOD")]
426    pub blood: Option<(MaterialTokenArgWithLocalCreatureMat, MaterialStateEnum)>,
427    /// Causes vampire-like behaviour; the creature will suck the blood of unconscious victims when
428    /// its thirst for blood grows sufficiently large. When controlling the creature in adventure
429    /// mode, this can be done at will. Seems to be required to make the creature denouncable as a
430    /// creature of the night.
431    #[token_de(token = "BLOODSUCKER")]
432    pub bloodsucker: Option<()>,
433    /// Draws body parts from `OBJECT:BODY` files (such as `body_default.txt`)
434    ///
435    /// For example:
436    ///
437    /// `[BODY:BODY_WITH_HEAD_FLAG:HEART:GUTS:BRAIN:MOUTH]`
438    ///
439    /// This is the body from a purring maggot. It creates a body with head, a heart, some guts, a
440    /// brain, and a mouth. That's all a maggot needs.
441    ///
442    /// **If the body is left undefined, the creature will cause a crash whenever it spawns.**
443    #[token_de(token = "BODY")]
444    pub body: Option<(Vec<ReferenceTo<BodyToken>>,)>,
445    /// A list of `BODY_APPEARANCE_MODIFIER` tokens on this creature.
446    #[token_de(token = "BODY_APPEARANCE_MODIFIER")]
447    pub body_appearance_modifier: Vec<BodyAppearanceModifier>,
448    /// Loads a plan listed in `OBJECT:BODY_DETAIL_PLAN` files, such as `b_detail_plan_default.txt`. Mass
449    /// applies `USE_MATERIAL_TEMPLATE`, mass alters `RELSIZE`, alters body part positions, and will
450    /// allow tissue layers to be defined. Tissue layers are defined in order of skin to bone here.
451    ///
452    /// For example:
453    ///
454    /// `[BODY_DETAIL_PLAN:VERTEBRATE_TISSUE_LAYERS:SKIN:FAT:MUSCLE:BONE:CARTILAGE]`
455    ///
456    /// This creates the detailed body of a fox, the skin, fat, muscle, bones and cartilage out of
457    /// the vertebrate tissues.
458    ///
459    /// A maggot would only need:
460    ///
461    /// `[BODY_DETAIL_PLAN:EXOSKELETON_TISSUE_LAYERS:SKIN:FAT:MUSCLE]`
462    #[token_de(token = "BODY_DETAIL_PLAN")]
463    pub body_detail_plan: Vec<(
464        ReferenceTo<BodyDetailPlanToken>,
465        Option<Reference>,
466        Option<Reference>,
467        Option<Reference>,
468        Option<Reference>,
469        Option<Reference>,
470    )>,
471    /// Sets size at a given age. Size is in cubic centimeters, and for normal body materials, is
472    /// roughly equal to the creature's average weight in grams.
473    ///
474    /// For example, this is the size of a minotaur:
475    ///
476    /// `[BODY_SIZE:0:0:10000]`
477    ///
478    /// `[BODY_SIZE:1:168:50000]`
479    ///
480    /// `[BODY_SIZE:12:0:220000]`
481    ///
482    /// Its birth size would be 10,000 cm3 (~10 kg). At 1 year and 168 days old it would be
483    /// 50,000 cm3 (~50 kg). And as an adult (at 12 years old) it would be 220,000 cm3 and weigh
484    /// roughly 220 kg.
485    #[token_de(token = "BODY_SIZE")]
486    pub body_size: Vec<(u32, u32, u32)>,
487    /// Substitutes body part text with replacement text. Draws gloss information from `OBJECT:BODY`
488    /// files (such as `body_default.txt`)
489    #[token_de(token = "BODYGLOSS")]
490    pub bodygloss: Vec<(Vec<ReferenceTo<BodyGlossToken>>,)>,
491    /// Creature eats bones. Implies `[CARNIVORE]`. Adventurers with this token are currently unable
492    /// to eat bones. [Bug:11069](https://www.bay12games.com/dwarves/mantisbt/view.php?id=11069)
493    #[token_de(token = "BONECARN")]
494    pub bonecarn: Option<()>,
495    /// Allows a creature to destroy furniture and buildings. Value `[1]` targets mostly doors,
496    /// hatches, furniture and the like. Value `[2]` targets any building/structure other than
497    /// floors, walls, and stairs.
498    #[token_de(token = "BUILDINGDESTROYER")]
499    pub buildingdestroyer: Option<u8>,
500    /// The creature gains skills and can have professions. If a member of a civilization (even a
501    /// pet) has this token, it'll need to eat, drink and sleep. Note that this token makes the
502    /// creature unable to be eaten by an adventurer, so it is not recommended for uncivilized
503    /// monsters. Adventurers lacking this token can allocate but not increase attributes and
504    /// skills. Skills allocated will disappear on start.
505    #[token_de(token = "CAN_LEARN")]
506    pub can_learn: Option<()>,
507    /// Can talk. Note that this is not necessary for a creature to gain social skills.
508    #[token_de(token = "CAN_SPEAK")]
509    pub can_speak: Option<()>,
510    /// Creature cannot climb, even if it has free grasp parts.
511    #[token_de(token = "CANNOT_CLIMB")]
512    pub cannot_climb: Option<()>,
513    /// Creature cannot jump.
514    #[token_de(token = "CANNOT_JUMP")]
515    pub cannot_jump: Option<()>,
516    /// Acts like `[NOT_LIVING]`, except that `[OPPOSED_TO_LIFE]` creatures will attack them.
517    #[token_de(token = "CANNOT_UNDEAD")]
518    pub cannot_undead: Option<()>,
519    /// Allows the creature to open doors that are set to be unpassable for pets. In adventure mode,
520    /// creatures lacking this token will be unable to pass through door tiles except whilst these
521    /// are occupied by other creatures.
522    #[token_de(token = "CANOPENDOORS")]
523    pub canopendoors: Option<()>,
524    /// Creature only eats meat. If the creature goes on rampages in worldgen, it will often devour
525    /// the people/animals it kills.
526    #[token_de(token = "CARNIVORE")]
527    pub carnivore: Option<()>,
528    /// Caste-specific `[ALTTILE]`; if set, the creature of this caste will blink between its
529    /// `[CASTE_TILE]` and its `CASTE_ALTTILE`.
530    #[token_de(token = "CASTE_ALTTILE")]
531    pub caste_alttile: Option<DFChar>,
532    /// Caste-specific `[COLOR]`. Color of the creature's tile.
533    /// See [Color](https://dwarffortresswiki.org/index.php/Color) for usage.
534    #[token_de(token = "CASTE_COLOR")]
535    pub caste_color: Option<(u8, u8, u8)>,
536    /// Caste-specific `[GLOWCOLOR]`; The colour of the creature/caste's `[CASTE_GLOWTILE]`.
537    #[token_de(token = "CASTE_GLOWCOLOR")]
538    pub caste_glowcolor: Option<(u8, u8, u8)>,
539    /// Caste-specific `[GLOWTILE]`; if present, the being glows in the dark (generally used for
540    /// Adventurer Mode). The tile is what replaces the being's current tile when it is obscured
541    /// from your sight by darkness.
542    #[token_de(token = "CASTE_GLOWTILE")]
543    pub caste_glowtile: Option<DFChar>,
544    /// Caste-specific `[NAME]`; the generic name for any creature of this type and caste.
545    #[token_de(token = "CASTE_NAME")]
546    pub caste_name: Option<(String, String, String)>,
547    /// Caste-specific `[PROFESSION_NAME]`; the generic name for members of this profession,
548    /// of this caste.
549    #[token_de(token = "CASTE_PROFESSION_NAME")]
550    pub caste_profession_name: Vec<(UnitTypeEnum, String, String)>,
551    /// Caste-specific `[SOLDIER_ALTTILE]`; if this creature of this caste is active in its
552    /// civilization's military, it will blink between its default tile and this one.
553    /// Requires `[CASTE_SOLDIER_TILE]`.
554    #[token_de(token = "CASTE_SOLDIER_ALTTILE")]
555    pub caste_soldier_alttile: Option<DFChar>,
556    /// Caste-specific `[CREATURE_SOLDIER_TILE]`; creatures of this caste active in their
557    /// civilization's military will use this tile instead.
558    #[token_de(token = "CASTE_SOLDIER_TILE")]
559    pub caste_soldier_tile: Option<DFChar>,
560    /// Caste-specific version of `[SPEECH]`; boasting speeches relating to killing this creature
561    /// of this caste. Examples of `SPEECH` include `dwarf.txt` and `elf.txt` in `data\speech`.
562    /// Must end in `.txt`.
563    #[token_de(token = "CASTE_SPEECH")]
564    pub caste_speech: Option<String>, // TODO: string is a txt path
565    /// Caste-specific `[CREATURE_TILE]`; the symbol of the creature of this caste in ASCII mode.
566    #[token_de(token = "CASTE_TILE")]
567    pub caste_tile: Option<DFChar>,
568    /// Gives the creature a bonus in caves. Also causes cave adaptation.
569    #[token_de(token = "CAVE_ADAPT")]
570    pub cave_adapt: Option<()>,
571    /// Multiplies body size by a factor of (integer)%. 50 halves size, 200 doubles.
572    #[token_de(token = "CHANGE_BODY_SIZE_PERC")]
573    pub change_body_size_perc: Option<u32>,
574    /// Age at which creature is considered an adult. One can think of this as the duration of the
575    /// child stage. Allows the creature's offspring to be rendered fully tame if trained during
576    /// their childhood.
577    #[token_de(token = "CHILD")]
578    pub child: Option<u32>,
579    /// Defines a new name for a creature in child state at the caste level. For non-caste-specific
580    /// child names, see `[GENERAL_CHILD_NAME]`.
581    #[token_de(token = "CHILDNAME")]
582    pub childname: Option<(String, String)>,
583    /// Number of eggs laid in one sitting.
584    #[token_de(token = "CLUTCH_SIZE")]
585    pub clutch_size: Option<(u32, u32)>,
586    /// Caste hovers around colony.
587    #[token_de(token = "COLONY_EXTERNAL")]
588    pub colony_external: Option<()>,
589    /// When combined with any of `[PET]`, `[PACK_ANIMAL]`, `[WAGON_PULLER]` and/or `[MOUNT]`, the
590    /// creature is guaranteed to be domesticated by any civilization with `[COMMON_DOMESTIC_PET]`,
591    /// `[COMMON_DOMESTIC_PACK]`.
592    ///
593    /// `[COMMON_DOMESTIC_PULL]` and/or `[COMMON_DOMESTIC_MOUNT]` respectively. Such civilizations
594    /// will always have access to the creature, even in the absence of wild populations. This token
595    /// is invalid on `[FANCIFUL]` creatures.
596    #[token_de(token = "COMMON_DOMESTIC")]
597    pub common_domestic: Option<()>,
598    /// Creatures of this caste's species with the `[SPOUSE_CONVERTER]` and
599    /// `[NIGHT_CREATURE_HUNTER]` tokens will kidnap `[SPOUSE_CONVERSION_TARGET]`s of an appropriate
600    /// sex and convert them into castes with `CONVERTED_SPOUSE`.
601    #[token_de(token = "CONVERTED_SPOUSE")]
602    pub converted_spouse: Option<()>,
603    /// Set this to allow the creature to be cooked in meals without first being butchered/cleaned.
604    /// Used by some water-dwelling vermin such as mussels, nautiluses and oysters.
605    #[token_de(token = "COOKABLE_LIVE")]
606    pub cookable_live: Option<()>,
607    /// Creature is 'berserk' and will attack all other creatures, except members of its own species
608    /// that also have the `CRAZED` tag. It will show "Berserk" in the unit list. Berserk creatures go
609    /// on rampages during worldgen much more frequently than non-berserk ones.
610    #[token_de(token = "CRAZED")]
611    pub crazed: Option<()>,
612    /// An arbitrary creature classification. Can be set to anything, but only existing uses are
613    /// `GENERAL_POISON` (used in syndromes), `EDIBLE_GROUND_BUG` (valid targets for `GOBBLE_VERMIN_x`
614    /// tokens), and `MAMMAL` (self-explanatory). A single creature can have multiple classes.
615    /// Eligibility for certain entity positions can also be permitted or restricted by this tag.
616    #[token_de(token = "CREATURE_CLASS")]
617    pub creature_class: Vec<Reference>,
618    /// Sets the creature to be active at twilight in adventurer mode.
619    #[token_de(token = "CREPUSCULAR")]
620    pub crepuscular: Option<()>,
621    /// Allows a creature to steal and eat edible items from a site. It will attempt to grab a food
622    /// item and immediately make its way to the map's edge, where it will disappear with it. If the
623    /// creature goes on rampages during worldgen, it will often steal food instead of attacking.
624    /// Trained and tame instances of the creature will no longer display this behavior.
625    #[token_de(token = "CURIOUSBEAST_EATER")]
626    pub curiousbeast_eater: Option<()>,
627    /// Allows a creature to (very quickly) drink your alcohol. Or spill the barrel to the ground.
628    /// Also affects undead versions of the creature. Unlike food or item thieves, drink thieves
629    /// will consume your alcohol on the spot rather than run away with one piece of it. Trained and
630    /// tame instances of the creature will no longer display this behavior.
631    #[token_de(token = "CURIOUSBEAST_GUZZLER")]
632    pub curiousbeast_guzzler: Option<()>,
633    /// Allows a creature to steal things (apparently, of the highest value it can find). It will
634    /// attempt to grab an item of value and immediately make its way to the map's edge, where it
635    /// will disappear with it. If the creature goes on rampages in worldgen, it will often steal
636    /// items instead of attacking - kea birds are infamous for this. Trained and tame instances of
637    /// the creature will no longer display this behavior. Also, makes the creature unable to drop
638    /// hauled items until it enters combat.
639    #[token_de(token = "CURIOUSBEAST_ITEM")]
640    pub curiousbeast_item: Option<()>,
641    /// Found on generated demons. Marks the caste to be used in the initial wave after breaking
642    /// into the underworld, and by the demon civilizations created during world-gen breachings.
643    /// Could not be specified in user-defined raws until version `0.47.01`.
644    #[token_de(token = "DEMON")]
645    pub demon: Option<()>,
646    /// A brief description of the creature type, as displayed when viewing the creature's
647    /// description/thoughts & preferences screen.
648    #[token_de(token = "DESCRIPTION")]
649    pub description: Option<String>,
650    /// Dies upon attacking. Used by honey bees to simulate them dying after using their stingers.
651    #[token_de(token = "DIE_WHEN_VERMIN_BITE")]
652    pub die_when_vermin_bite: Option<()>,
653    /// Increases experience gain during adventure mode. Creatures with 11 or higher are not
654    /// assigned for quests in adventure mode.
655    #[token_de(token = "DIFFICULTY")]
656    pub difficulty: Option<u32>,
657    /// Sets the creature to be active during the day in Adventurer Mode.
658    #[token_de(token = "DIURNAL")]
659    pub diurnal: Option<()>,
660    /// The creature hunts vermin by diving from the air. On tame creatures it works the same as
661    /// normal `[HUNTS_VERMIN]`. Found on peregrine falcons.
662    #[token_de(token = "DIVE_HUNTS_VERMIN")]
663    pub dive_hunts_vermin: Option<()>,
664    /// Defines the material composition of eggs laid by the creature. Egg-laying creatures in the
665    /// default game define this 3 times, using `LOCAL_CREATURE_MAT:EGGSHELL`,
666    /// `LOCAL_CREATURE_MAT:EGG_WHITE`, and then `LOCAL_CREATURE_MAT:EGG_YOLK`. Eggs will be made out of
667    /// eggshell. Edibility is determined by tags on whites or yolk, but they otherwise do not
668    /// exist.
669    #[token_de(token = "EGG_MATERIAL")]
670    pub egg_material: Vec<(MaterialTokenArgWithLocalCreatureMat, MaterialStateEnum)>,
671    /// Determines the size of laid eggs. Doesn't affect hatching or cooking, but bigger eggs will
672    /// be heavier, and may take longer to be hauled depending on the hauler's strength.
673    #[token_de(token = "EGG_SIZE")]
674    pub egg_size: Option<u32>,
675    /// Allows the creature to wear or wield items.
676    #[token_de(token = "EQUIPS")]
677    pub equips: Option<()>,
678    /// A list of `EXTRA_BUTCHER_OBJECT` tokens on this creature.
679    #[token_de(token = "EXTRA_BUTCHER_OBJECT")]
680    pub extra_butcher_object: Vec<ExtraButcherObject>,
681    /// Defines a creature extract which can be obtained via small animal dissection.
682    #[token_de(token = "EXTRACT")]
683    pub extract: Option<MaterialTokenArgWithLocalCreatureMat>,
684    /// Creature can see regardless of whether it has working eyes and has full 360 degree vision,
685    /// making it impossible to strike the creature from a blind spot in combat.
686    #[token_de(token = "EXTRAVISION")]
687    pub extravision: Option<()>,
688    /// Found on subterranean animal-man tribals. Currently defunct. In previous versions, it caused
689    /// these creatures to crawl out of chasms and underground rivers.
690    #[token_de(token = "FEATURE_ATTACK_GROUP")]
691    pub feature_attack_group: Option<()>,
692    /// Found on forgotten beasts. Presumably makes it act as such, initiating underground attacks on
693    /// fortresses, or leads to the pop-up message upon encountering one.
694    ///
695    /// Hides the creature from displaying in a world_sites_and_pops file, and does not create historical
696    /// figures like generated forgotten beasts do.
697    ///
698    /// Requires specifying a `[BIOME]` in which the creature will live, and both surface and subterranean
699    /// biomes are allowed. Does not stack with `[LARGE_ROAMING]` and if both are used the creature will
700    /// not spawn. Appears to be incompatible with `[DEMON]` even if used in separate castes.
701    ///
702    /// Could not be specified in user-defined raws until version `0.47.01`.
703    #[token_de(token = "FEATURE_BEAST")]
704    pub feature_beast: Option<()>,
705    /// Makes the creature biologically female, enabling her to bear young. Usually specified inside
706    /// a caste.
707    #[token_de(token = "FEMALE")]
708    pub female: Option<()>,
709    /// Makes the creature immune to `FIREBALL` and `FIREJET` attacks, and allows it to path through
710    /// high temperature zones, like lava or fires. Does not, by itself, make the creature immune to
711    /// the damaging effects of burning in fire, and does not prevent general heat damage or melting
712    /// on its own (this would require adjustments to be made to the creature's body materials - see
713    /// the dragon raws for an example).
714    #[token_de(token = "FIREIMMUNE")]
715    pub fireimmune: Option<()>,
716    /// Like `[FIREIMMUNE]`, but also renders the creature immune to `DRAGONFIRE` attacks.
717    #[token_de(token = "FIREIMMUNE_SUPER")]
718    pub fireimmune_super: Option<()>,
719    /// The creature's corpse is a single `FISH_RAW` food item that needs to be cleaned (into a
720    /// `FISH` item) at a fishery to become edible. Before being cleaned the item is referred to as
721    /// "raw". The food item is categorized under "fish" on the food and stocks screens, and when
722    /// uncleaned it is sorted under "raw fish" in the stocks (but does not show up on the food
723    /// screen).
724    ///
725    /// Without this or `[COOKABLE_LIVE]`, fished vermin will turn into food the same way as non-
726    /// vermin creatures, resulting in multiple units of food (meat, brain, lungs, eyes, spleen
727    /// etc.) from a single fished vermin. These units of food are categorized as meat by the game.
728    #[token_de(token = "FISHITEM")]
729    pub fishitem: Option<()>,
730    /// The creature's body is constantly at this temperature, heating up or cooling the surrounding
731    /// area. Alters the temperature of the creature's inventory and all adjacent tiles, with all
732    /// the effects that this implies. May trigger wildfires at high enough values. Also makes the
733    /// creature immune to extreme heat or cold as long as the temperature set is not harmful to the
734    /// materials that the creature is made from.
735    ///
736    /// Note that temperatures of 12000 and higher may cause pathfinding issues in fortress mode.
737    #[token_de(token = "FIXED_TEMP")]
738    pub fixed_temp: Option<u32>,
739    /// If engaged in combat, the creature will flee at the first sign of resistance. Used by
740    /// kobolds in the vanilla game.
741    #[token_de(token = "FLEEQUICK")]
742    pub fleequick: Option<()>,
743    /// Allows a creature to fly, independent of it having wings or not. Fortress Mode pathfinding
744    /// only partially incorporates flying - flying creatures need a land path to exist between them
745    /// and an area in order to access it, but as long as one such path exists, they do not need to
746    /// use it, instead being able to fly over intervening obstacles. Winged creatures with this
747    /// token can lose their ability to fly if their wings are crippled or severed. Winged creatures
748    /// without this token will be unable to fly. (A 'wing' in this context refers to any body part
749    /// with its own `FLIER` token).
750    #[token_de(token = "FLIER")]
751    pub flier: Option<()>,
752    /// Defines a gait by which the creature can move.
753    /// See [Gait](https://dwarffortresswiki.org/index.php/Gait) for more information.
754    ///
755    /// - `<max speed>` indicates the maximum speed achievable by a creature using this gait.
756    ///
757    /// - `<build up time>` indicates how long it will take for a creature using this gait to go from
758    /// `<start speed>` to `<max speed>`. For example, a value of 10 means that it should be able to
759    /// reach the maximum speed by moving 10 tiles in a straight line over even terrain.
760    ///
761    /// - `<max turning speed>` indicates the maximum speed permissible when the creature suddenly
762    /// changes its direction of motion. The creature's speed will be reduced to `<max turning speed>`
763    /// if travelling at a higher speed than this before turning.
764    ///
765    /// - `<start speed>` indicates the creature's speed when it starts moving using this gait.
766    ///
767    /// - `<energy expenditure>` indicates how energy-consuming the gait is. Higher values cause the
768    /// creature to tire out faster. Persistent usage of a high-intensity gait will eventually lead
769    /// to exhaustion and collapse.
770    ///
771    /// You may use `NO_BUILD_UP` instead of `<build up time>`, `<max turning speed>` and `<start speed>`.
772    ///
773    /// It's possible to specify a `<start speed>` greater than the `<max speed>`; the moving creature
774    /// will decelerate towards its `<max speed>` in this case.
775    #[token_de(token = "GAIT")]
776    pub gait: Vec<(
777        GaitTypeEnum,
778        String,
779        u32,
780        Choose<NoBuildUpEnum, (u32, u32, u32)>,
781        u32,
782        Option<GaitFlagTokenArg>,
783    )>,
784    /// Has the same function as `[MATERIAL_FORCE_MULTIPLIER]`, but applies to all attacks instead
785    /// of just those involving a specific material. Appears to be overridden by
786    /// `MATERIAL_FORCE_MULTIPLIER` (werebeasts, for example, use both tokens to provide resistance
787    /// to all materials, with one exception to which they are especially vulnerable).
788    #[token_de(token = "GENERAL_MATERIAL_FORCE_MULTIPLIER")]
789    pub general_material_force_multiplier: Option<(u32, u32)>,
790    /// Makes the creature get infections from necrotic tissue.
791    #[token_de(token = "GETS_INFECTIONS_FROM_ROT")]
792    pub gets_infections_from_rot: Option<()>,
793    /// Makes the creature's wounds become infected if left untreated for too long.
794    #[token_de(token = "GETS_WOUND_INFECTIONS")]
795    pub gets_wound_infections: Option<()>,
796    /// The creature can and will gnaw its way out of animal traps and cages using the specified
797    /// verb, depending on the material from which it is made (normally wood).
798    #[token_de(token = "GNAWER")]
799    pub gnawer: Option<String>,
800    /// The creature eats vermin of the specified class.
801    #[token_de(token = "GOBBLE_VERMIN_CLASS")]
802    pub gobble_vermin_class: Vec<Reference>, // TODO: ref is creature class
803    /// The creature eats a specified vermin.
804    #[token_de(token = "GOBBLE_VERMIN_CREATURE")]
805    pub gobble_vermin_creature: Vec<(ReferenceTo<CreatureToken>, Reference)>,
806    /// The value determines how rapidly grass is trampled when a creature steps on it - a value of
807    /// 0 causes the creature to never damage grass, while a value of 100 causes grass to be
808    /// trampled as rapidly as possible. Defaults to 5.
809    #[token_de(token = "GRASSTRAMPLE")]
810    pub grasstrample: Option<u32>,
811    /// Used in Creature Variants. This token changes the adult body size to the average of the old
812    /// adult body size and the target value and scales all intermediate growth stages by the same
813    /// factor.
814    #[token_de(token = "GRAVITATE_BODY_SIZE")]
815    pub gravitate_body_size: Option<u32>,
816    /// The creature is a grazer. If tamed in Fortress mode, it needs a pasture to survive. The
817    /// higher the number, the less frequently it needs to eat in order to live. See
818    /// [Pasture](https://dwarffortresswiki.org/index.php/Pasture) for details on its issues.
819    #[token_de(token = "GRAZER")]
820    pub grazer: Option<u32>,
821    /// Defines certain behaviors for the creature.
822    ///
823    /// These habits require the creature to have a `[LAIR]` to work properly, and also don't seem
824    /// to work on creatures who are not a `[SEMIMEGABEAST]`, `[MEGABEAST]` or
825    /// `[NIGHT_CREATURE_HUNTER]`.
826    #[token_de(token = "HABIT")]
827    pub habit: Vec<(HabitTypeEnum, u32)>,
828    /// "If you set `HABIT_NUM` to a number, it should give you that exact number of habits
829    /// according to the weights". All lists of `HABIT`s are preceded by `[HABIT_NUM:TEST_ALL]`.
830    #[token_de(token = "HABIT_NUM")]
831    pub habit_num: Option<Choose<u32, TestAllEnum>>,
832    /// The creature has nerves in its muscles. Cutting the muscle tissue can sever motor and
833    /// sensory nerves.
834    #[token_de(token = "HAS_NERVES")]
835    pub has_nerves: Option<()>,
836    /// The creature has a shell. Seemingly no longer used - holdover from previous versions.
837    #[token_de(token = "HASSHELL")]
838    pub hasshell: Option<()>,
839    /// Default 'NONE'. The creature's normal body temperature. Creature ceases maintaining
840    /// temperature on death unlike fixed material temperatures. Provides minor protection from
841    /// environmental temperature to the creature.
842    #[token_de(token = "HOMEOTHERM")]
843    pub homeotherm: Option<Choose<u32, NoneEnum>>,
844    /// Creature hunts and kills nearby vermin.
845    #[token_de(token = "HUNTS_VERMIN")]
846    pub hunts_vermin: Option<()>,
847    /// The creature cannot move. Found on sponges. Will also stop a creature from breeding in
848    /// fortress mode (MALE and `FEMALE` are affected, if one is `IMMOBILE` no breeding will
849    /// happen).
850    #[token_de(token = "IMMOBILE")]
851    pub immobile: Option<()>,
852    /// The creature is immobile while on land. Only works on `[AQUATIC]` creatures which can't
853    /// breathe on land.
854    #[token_de(token = "IMMOBILE_LAND")]
855    pub immobile_land: Option<()>,
856    /// The creature radiates fire. It will ignite, and potentially completely destroy, items the
857    /// creature is standing on. Keep booze away from critters with this tag. Also gives the vermin
858    /// a high chance of escaping from animal traps and cages made of certain materials.
859    #[token_de(token = "IMMOLATE")]
860    pub immolate: Option<()>,
861    /// Alias for `[CAN_SPEAK]` + `[CAN_LEARN]` but additionally keeps creatures from being
862    /// butchered by the AI during worldgen and post-gen. In fortress mode, `[CAN_LEARN]` is
863    /// enough.
864    #[token_de(token = "INTELLIGENT")]
865    pub intelligent: Option<()>,
866    /// Determines if the creature leaves behind a non-standard corpse (i.e. wood, statue, bars,
867    /// stone, pool of liquid, etc.).
868    #[token_de(token = "ITEMCORPSE")]
869    pub itemcorpse: Option<(ItemReferenceArg, MaterialTokenArgWithLocalCreatureMat)>,
870    /// The quality of an item-type corpse left behind. Valid values are:
871    /// - 0: ordinary
872    /// - 1: well-crafted
873    /// - 2: finely-crafted
874    /// - 3: superior
875    /// - 4: exceptional
876    /// - 5: masterpiece.
877    #[token_de(token = "ITEMCORPSE_QUALITY")]
878    pub itemcorpse_quality: Option<u8>, // TODO maybe nest under itemcorpse?
879    /// Found on megabeasts, semimegabeasts, and night creatures. The creature will seek out sites
880    /// of this type and take them as lairs.
881    #[token_de(token = "LAIR")]
882    pub lair: Vec<(LairTypeEnum, Clamp<u8, 0, 100>)>,
883    /// Defines certain features of the creature's lair. The only valid characteristic is
884    /// `HAS_DOORS`.
885    #[token_de(token = "LAIR_CHARACTERISTIC")]
886    pub lair_characteristic: Option<(LairCharacteristicEnum, Clamp<u8, 0, 100>)>,
887    /// This creature will actively hunt adventurers in its lair.
888    #[token_de(token = "LAIR_HUNTER")]
889    pub lair_hunter: Option<()>,
890    /// What this creature says while hunting adventurers in its lair. Requires a `.txt` on the end.
891    #[token_de(token = "LAIR_HUNTER_SPEECH")]
892    pub lair_hunter_speech: Option<String>, // TODO: string is a txt path
893    /// Will attack things that are smaller than it (like dwarves). Only one group of "large
894    /// predators" (possibly two groups on "savage" maps) will appear on any given map. In adventure
895    /// mode, large predators will try to ambush and attack you (and your party will attack them
896    /// back).
897    ///
898    /// When tamed, large predators tend to be much more aggressive to enemies than non-large
899    /// predators, making them a good choice for an animal army.
900    ///
901    /// They may go on rampages in worldgen, and adventurers may receive quests to kill them.
902    /// Also, they can be mentioned in the intro paragraph when starting a fortress e.g.
903    /// "ere the wolves get hungry."
904    #[token_de(token = "LARGE_PREDATOR")]
905    pub large_predator: Option<()>,
906    /// Creature lays eggs instead of giving birth to live young.
907    #[token_de(token = "LAYS_EGGS")]
908    pub lays_eggs: Option<()>,
909    /// Creature lays the specified item instead of regular eggs.
910    #[token_de(token = "LAYS_UNUSUAL_EGGS")]
911    pub lays_unusual_eggs: Option<(ItemReferenceArg, MaterialTokenArgWithLocalCreatureMat)>,
912    /// The creature has ligaments in its `[CONNECTIVE_TISSUE_ANCHOR]` tissues (bone or chitin by
913    /// default). Cutting the bone/chitin tissue severs the ligaments, disabling motor function if
914    /// the target is a limb.
915    #[token_de(token = "LIGAMENTS")]
916    pub ligaments: Option<(MaterialTokenArgWithLocalCreatureMat, u32)>,
917    /// The creature will generate light, such as in adventurer mode at night.
918    #[token_de(token = "LIGHT_GEN")]
919    pub light_gen: Option<()>,
920    /// The creature will attack enemies rather than flee from them. This tag has the same effect on
921    /// player-controlled creatures - including modded dwarves. Retired as of version `0.40.14`
922    /// in favor of `[LARGE_PREDATOR]`.
923    #[token_de(token = "LIKES_FIGHTING")]
924    pub likes_fighting: Option<()>,
925    /// Creature uses "sssssnake talk" (multiplies 'S' when talking - "My name isss Recisssiz.").
926    /// Used by serpent men and reptile men in the vanilla game. C's with the same pronunciation
927    /// (depending on the word) are not affected by this token.
928    #[token_de(token = "LISP")]
929    pub lisp: Option<()>,
930    /// Determines the number of offspring per one birth.
931    #[token_de(token = "LITTERSIZE")]
932    pub littersize: Option<(u32, u32)>,
933    /// Wild animals of this species may occasionally join a civilization. Prevents trading of
934    /// (tame) instances of this creature in caravans.
935    #[token_de(token = "LOCAL_POPS_PRODUCE_HEROES")]
936    pub local_pops_produce_heroes: Option<()>,
937    /// Lets a creature open doors that are set to forbidden in Fortress Mode.
938    #[token_de(token = "LOCKPICKER")]
939    pub lockpicker: Option<()>,
940    /// Determines how well a creature can see in the dark - higher is better. Dwarves have 10,000,
941    /// which amounts to perfect nightvision.
942    #[token_de(token = "LOW_LIGHT_VISION")]
943    pub low_light_vision: Option<Clamp<u16, 0, 10_000>>, // TODO: find out if it can be negative
944    /// No function, presumably a placeholder.
945    #[token_de(token = "MAGICAL")]
946    pub magical: Option<()>,
947    /// The creature is able to see while submerged in magma.
948    #[token_de(token = "MAGMA_VISION")]
949    pub magma_vision: Option<()>,
950    /// Makes the creature biologically male. Usually declared inside a caste.
951    #[token_de(token = "MALE")]
952    pub male: Option<()>,
953    // region: Mannerisms =========================================================================
954    /// Adds a possible mannerism to the creature's profile.
955    ///
956    /// Mannerisms give a possibility of a personality quirk being included in each member of a
957    /// caste.
958    ///
959    /// Mannerisms are hardcoded and not otherwise placed in the raws.
960    ///
961    /// Words placed with the mannerism token are the strings used in the mannerisms for that
962    /// particular part (e.g. replacing "finger" with "toe" will give you "when she gets
963    /// exasperated, she often points and shakes her toe").
964    #[token_de(token = "MANNERISM_ARMS")]
965    pub mannerism_arms: Option<String>,
966    /// Adds a possible mannerism to the creature's profile.
967    ///
968    /// Mannerisms give a possibility of a personality quirk being included in each member of a
969    /// caste.
970    ///
971    /// Mannerisms are hardcoded and not otherwise placed in the raws.
972    ///
973    /// Words placed with the mannerism token are the strings used in the mannerisms for that
974    /// particular part (e.g. replacing "finger" with "toe" will give you "when she gets
975    /// exasperated, she often points and shakes her toe").
976    #[token_de(token = "MANNERISM_BREATH")]
977    pub mannerism_breath: Option<()>,
978    /// Adds a possible mannerism to the creature's profile.
979    ///
980    /// Mannerisms give a possibility of a personality quirk being included in each member of a
981    /// caste.
982    ///
983    /// Mannerisms are hardcoded and not otherwise placed in the raws.
984    ///
985    /// Words placed with the mannerism token are the strings used in the mannerisms for that
986    /// particular part (e.g. replacing "finger" with "toe" will give you "when she gets
987    /// exasperated, she often points and shakes her toe").
988    #[token_de(token = "MANNERISM_CHEEK")]
989    pub mannerism_cheek: Option<String>,
990    /// Adds a possible mannerism to the creature's profile.
991    ///
992    /// Mannerisms give a possibility of a personality quirk being included in each member of a
993    /// caste.
994    ///
995    /// Mannerisms are hardcoded and not otherwise placed in the raws.
996    ///
997    /// Words placed with the mannerism token are the strings used in the mannerisms for that
998    /// particular part (e.g. replacing "finger" with "toe" will give you "when she gets
999    /// exasperated, she often points and shakes her toe").
1000    #[token_de(token = "MANNERISM_EAR")]
1001    pub mannerism_ear: Option<String>,
1002    /// Adds a possible mannerism to the creature's profile.
1003    ///
1004    /// Mannerisms give a possibility of a personality quirk being included in each member of a
1005    /// caste.
1006    ///
1007    /// Mannerisms are hardcoded and not otherwise placed in the raws.
1008    ///
1009    /// Words placed with the mannerism token are the strings used in the mannerisms for that
1010    /// particular part (e.g. replacing "finger" with "toe" will give you "when she gets
1011    /// exasperated, she often points and shakes her toe").
1012    #[token_de(token = "MANNERISM_EYELIDS")]
1013    pub mannerism_eyelids: Option<()>,
1014    /// Adds a possible mannerism to the creature's profile.
1015    ///
1016    /// Mannerisms give a possibility of a personality quirk being included in each member of a
1017    /// caste.
1018    ///
1019    /// Mannerisms are hardcoded and not otherwise placed in the raws.
1020    ///
1021    /// Words placed with the mannerism token are the strings used in the mannerisms for that
1022    /// particular part (e.g. replacing "finger" with "toe" will give you "when she gets
1023    /// exasperated, she often points and shakes her toe").
1024    #[token_de(token = "MANNERISM_EYES")]
1025    pub mannerism_eyes: Option<String>,
1026    /// Adds a possible mannerism to the creature's profile.
1027    ///
1028    /// Mannerisms give a possibility of a personality quirk being included in each member of a
1029    /// caste.
1030    ///
1031    /// Mannerisms are hardcoded and not otherwise placed in the raws.
1032    ///
1033    /// Words placed with the mannerism token are the strings used in the mannerisms for that
1034    /// particular part (e.g. replacing "finger" with "toe" will give you "when she gets
1035    /// exasperated, she often points and shakes her toe").
1036    #[token_de(token = "MANNERISM_FEET")]
1037    pub mannerism_feet: Option<String>,
1038    /// Adds a possible mannerism to the creature's profile.
1039    ///
1040    /// Mannerisms give a possibility of a personality quirk being included in each member of a
1041    /// caste.
1042    ///
1043    /// Mannerisms are hardcoded and not otherwise placed in the raws.
1044    ///
1045    /// Words placed with the mannerism token are the strings used in the mannerisms for that
1046    /// particular part (e.g. replacing "finger" with "toe" will give you "when she gets
1047    /// exasperated, she often points and shakes her toe").
1048    #[token_de(token = "MANNERISM_FINGERS")]
1049    pub mannerism_fingers: Option<(String, String)>,
1050    /// Adds a possible mannerism to the creature's profile.
1051    ///
1052    /// Mannerisms give a possibility of a personality quirk being included in each member of a
1053    /// caste.
1054    ///
1055    /// Mannerisms are hardcoded and not otherwise placed in the raws.
1056    ///
1057    /// Words placed with the mannerism token are the strings used in the mannerisms for that
1058    /// particular part (e.g. replacing "finger" with "toe" will give you "when she gets
1059    /// exasperated, she often points and shakes her toe").
1060    #[token_de(token = "MANNERISM_HAIR")]
1061    pub mannerism_hair: Option<String>,
1062    /// Adds a possible mannerism to the creature's profile.
1063    ///
1064    /// Mannerisms give a possibility of a personality quirk being included in each member of a
1065    /// caste.
1066    ///
1067    /// Mannerisms are hardcoded and not otherwise placed in the raws.
1068    ///
1069    /// Words placed with the mannerism token are the strings used in the mannerisms for that
1070    /// particular part (e.g. replacing "finger" with "toe" will give you "when she gets
1071    /// exasperated, she often points and shakes her toe").
1072    #[token_de(token = "MANNERISM_HANDS")]
1073    pub mannerism_hands: Option<String>,
1074    /// Adds a possible mannerism to the creature's profile.
1075    ///
1076    /// Mannerisms give a possibility of a personality quirk being included in each member of a
1077    /// caste.
1078    ///
1079    /// Mannerisms are hardcoded and not otherwise placed in the raws.
1080    ///
1081    /// Words placed with the mannerism token are the strings used in the mannerisms for that
1082    /// particular part (e.g. replacing "finger" with "toe" will give you "when she gets
1083    /// exasperated, she often points and shakes her toe").
1084    #[token_de(token = "MANNERISM_HEAD")]
1085    pub mannerism_head: Option<String>,
1086    /// Adds a possible mannerism to the creature's profile.
1087    ///
1088    /// Mannerisms give a possibility of a personality quirk being included in each member of a
1089    /// caste.
1090    ///
1091    /// Mannerisms are hardcoded and not otherwise placed in the raws.
1092    ///
1093    /// Words placed with the mannerism token are the strings used in the mannerisms for that
1094    /// particular part (e.g. replacing "finger" with "toe" will give you "when she gets
1095    /// exasperated, she often points and shakes her toe").
1096    #[token_de(token = "MANNERISM_KNUCKLES")]
1097    pub mannerism_knuckles: Option<String>,
1098    /// Adds a possible mannerism to the creature's profile.
1099    ///
1100    /// Mannerisms give a possibility of a personality quirk being included in each member of a
1101    /// caste.
1102    ///
1103    /// Mannerisms are hardcoded and not otherwise placed in the raws.
1104    ///
1105    /// Words placed with the mannerism token are the strings used in the mannerisms for that
1106    /// particular part (e.g. replacing "finger" with "toe" will give you "when she gets
1107    /// exasperated, she often points and shakes her toe").
1108    #[token_de(token = "MANNERISM_LAUGH")]
1109    pub mannerism_laugh: Option<()>,
1110    /// Adds a possible mannerism to the creature's profile.
1111    ///
1112    /// Mannerisms give a possibility of a personality quirk being included in each member of a
1113    /// caste.
1114    ///
1115    /// Mannerisms are hardcoded and not otherwise placed in the raws.
1116    ///
1117    /// Words placed with the mannerism token are the strings used in the mannerisms for that
1118    /// particular part (e.g. replacing "finger" with "toe" will give you "when she gets
1119    /// exasperated, she often points and shakes her toe").
1120    #[token_de(token = "MANNERISM_LEG")]
1121    pub mannerism_leg: Option<String>,
1122    /// Adds a possible mannerism to the creature's profile.
1123    ///
1124    /// Mannerisms give a possibility of a personality quirk being included in each member of a
1125    /// caste.
1126    ///
1127    /// Mannerisms are hardcoded and not otherwise placed in the raws.
1128    ///
1129    /// Words placed with the mannerism token are the strings used in the mannerisms for that
1130    /// particular part (e.g. replacing "finger" with "toe" will give you "when she gets
1131    /// exasperated, she often points and shakes her toe").
1132    #[token_de(token = "MANNERISM_LIPS")]
1133    pub mannerism_lips: Option<String>,
1134    /// Adds a possible mannerism to the creature's profile.
1135    ///
1136    /// Mannerisms give a possibility of a personality quirk being included in each member of a
1137    /// caste.
1138    ///
1139    /// Mannerisms are hardcoded and not otherwise placed in the raws.
1140    ///
1141    /// Words placed with the mannerism token are the strings used in the mannerisms for that
1142    /// particular part (e.g. replacing "finger" with "toe" will give you "when she gets
1143    /// exasperated, she often points and shakes her toe").
1144    #[token_de(token = "MANNERISM_MOUTH")]
1145    pub mannerism_mouth: Option<String>,
1146    /// Adds a possible mannerism to the creature's profile.
1147    ///
1148    /// Mannerisms give a possibility of a personality quirk being included in each member of a
1149    /// caste.
1150    ///
1151    /// Mannerisms are hardcoded and not otherwise placed in the raws.
1152    ///
1153    /// Words placed with the mannerism token are the strings used in the mannerisms for that
1154    /// particular part (e.g. replacing "finger" with "toe" will give you "when she gets
1155    /// exasperated, she often points and shakes her toe").
1156    #[token_de(token = "MANNERISM_NAILS")]
1157    pub mannerism_nails: Option<String>,
1158    /// Adds a possible mannerism to the creature's profile.
1159    ///
1160    /// Mannerisms give a possibility of a personality quirk being included in each member of a
1161    /// caste.
1162    ///
1163    /// Mannerisms are hardcoded and not otherwise placed in the raws.
1164    ///
1165    /// Words placed with the mannerism token are the strings used in the mannerisms for that
1166    /// particular part (e.g. replacing "finger" with "toe" will give you "when she gets
1167    /// exasperated, she often points and shakes her toe").
1168    #[token_de(token = "MANNERISM_NOSE")]
1169    pub mannerism_nose: Option<String>,
1170    /// Adds a possible mannerism to the creature's profile.
1171    ///
1172    /// Mannerisms give a possibility of a personality quirk being included in each member of a
1173    /// caste.
1174    ///
1175    /// Mannerisms are hardcoded and not otherwise placed in the raws.
1176    ///
1177    /// Words placed with the mannerism token are the strings used in the mannerisms for that
1178    /// particular part (e.g. replacing "finger" with "toe" will give you "when she gets
1179    /// exasperated, she often points and shakes her toe").
1180    #[token_de(token = "MANNERISM_POSTURE")]
1181    pub mannerism_posture: Option<()>,
1182    /// Adds a possible mannerism to the creature's profile.
1183    ///
1184    /// Mannerisms give a possibility of a personality quirk being included in each member of a
1185    /// caste.
1186    ///
1187    /// Mannerisms are hardcoded and not otherwise placed in the raws.
1188    ///
1189    /// Words placed with the mannerism token are the strings used in the mannerisms for that
1190    /// particular part (e.g. replacing "finger" with "toe" will give you "when she gets
1191    /// exasperated, she often points and shakes her toe").
1192    #[token_de(token = "MANNERISM_SIT")]
1193    pub mannerism_sit: Option<()>,
1194    /// Adds a possible mannerism to the creature's profile.
1195    ///
1196    /// Mannerisms give a possibility of a personality quirk being included in each member of a
1197    /// caste.
1198    ///
1199    /// Mannerisms are hardcoded and not otherwise placed in the raws.
1200    ///
1201    /// Words placed with the mannerism token are the strings used in the mannerisms for that
1202    /// particular part (e.g. replacing "finger" with "toe" will give you "when she gets
1203    /// exasperated, she often points and shakes her toe").
1204    #[token_de(token = "MANNERISM_SMILE")]
1205    pub mannerism_smile: Option<()>,
1206    /// Adds a possible mannerism to the creature's profile.
1207    ///
1208    /// Mannerisms give a possibility of a personality quirk being included in each member of a
1209    /// caste.
1210    ///
1211    /// Mannerisms are hardcoded and not otherwise placed in the raws.
1212    ///
1213    /// Words placed with the mannerism token are the strings used in the mannerisms for that
1214    /// particular part (e.g. replacing "finger" with "toe" will give you "when she gets
1215    /// exasperated, she often points and shakes her toe").
1216    #[token_de(token = "MANNERISM_STRETCH")]
1217    pub mannerism_stretch: Option<()>,
1218    /// Adds a possible mannerism to the creature's profile.
1219    ///
1220    /// Mannerisms give a possibility of a personality quirk being included in each member of a
1221    /// caste.
1222    ///
1223    /// Mannerisms are hardcoded and not otherwise placed in the raws.
1224    ///
1225    /// Words placed with the mannerism token are the strings used in the mannerisms for that
1226    /// particular part (e.g. replacing "finger" with "toe" will give you "when she gets
1227    /// exasperated, she often points and shakes her toe").
1228    #[token_de(token = "MANNERISM_TONGUE")]
1229    pub mannerism_tongue: Option<String>,
1230    /// Adds a possible mannerism to the creature's profile.
1231    ///
1232    /// Mannerisms give a possibility of a personality quirk being included in each member of a
1233    /// caste.
1234    ///
1235    /// Mannerisms are hardcoded and not otherwise placed in the raws.
1236    ///
1237    /// Words placed with the mannerism token are the strings used in the mannerisms for that
1238    /// particular part (e.g. replacing "finger" with "toe" will give you "when she gets
1239    /// exasperated, she often points and shakes her toe").
1240    #[token_de(token = "MANNERISM_WALK")]
1241    pub mannerism_walk: Option<()>,
1242    // endregion ==================================================================================
1243    /// When struck with a weapon made of the specified material, the force exerted will be
1244    /// multiplied by A/B, thus making the creature more or less susceptible to this material.
1245    /// For example, if A is 2 and B is 1, the force exerted by the defined material will be
1246    /// doubled. If A is 1 and B is 2, it will be halved instead.
1247    ///
1248    /// See also `[GENERAL_MATERIAL_FORCE_MULTIPLIER]`, which can be used to make this sort of
1249    /// effect applicable to all materials.
1250    #[token_de(token = "MATERIAL_FORCE_MULTIPLIER")]
1251    pub material_force_multiplier: Vec<(MaterialTokenArgWithLocalCreatureMat, u32, u32)>,
1252    /// Sets the creature to be active at dawn in adventurer mode.
1253    #[token_de(token = "MATUTINAL")]
1254    pub matutinal: Option<()>,
1255    /// Determines the creature's natural lifespan, using the specified minimum and maximum age
1256    /// values (in years). Each individual creature with this token is generated with a
1257    /// predetermined date (calculated down to the exact tick!) between these values, at which it is
1258    /// destined to die of old age, should it live long enough.
1259    ///
1260    /// Note that the probability of death at any given age does not increase as the creature gets
1261    /// older ([source](https://i.imgur.com/A1A4aA9.png)).
1262    ///
1263    /// Creatures which lack this token are naturally immortal. The `NO_AGING` syndrome tag will
1264    /// prevent death by old age from occurring. Also note that, among civilized creatures, castes
1265    /// which lack this token will refuse to marry others with it, and vice versa.
1266    #[token_de(token = "MAXAGE")]
1267    pub maxage: Option<(u32, u32)>,
1268    /// Makes the creature slowly stroll around, unless it's in combat or performing a job. If
1269    /// combined with `[CAN_LEARN]`, will severely impact their pathfinding and lead the creature to
1270    /// move extremely slowly when not performing any task.
1271    #[token_de(token = "MEANDERER")]
1272    pub meanderer: Option<()>,
1273    /// A 'boss' creature. A small number of the creatures are created during worldgen, their
1274    /// histories and descendants (if any) will be tracked in worldgen (as opposed to simply
1275    /// 'spawning'), and they will occasionally go on rampages, potentially leading to worship if
1276    /// they attack the same place multiple times. Their presence and number will also influence age
1277    /// names. When appearing in fortress mode, they will have a pop-up message announcing their
1278    /// arrival. They will remain hostile to military even after being tamed.
1279    /// [Bug:10731](https://www.bay12games.com/dwarves/mantisbt/view.php?id=10731)
1280    ///
1281    /// See the wiki [megabeast](https://dwarffortresswiki.org/index.php/Megabeast) page for more details.
1282    ///
1283    /// Requires specifying a `[BIOME]` in which the creature will live. Subterranean biomes appear
1284    /// to not be allowed.
1285    #[token_de(token = "MEGABEAST")]
1286    pub megabeast: Option<()>,
1287    /// This means you can increase your attribute to a given percentage of its starting value
1288    /// (or the average value + your starting value if that is higher).
1289    ///
1290    /// Default is 200, which would increase the attribute by either 200%, or by a flat +200
1291    /// if that is higher.
1292    #[token_de(token = "MENT_ATT_CAP_PERC")]
1293    pub ment_att_cap_perc: Vec<(SoulAttributeEnum, u32)>,
1294    /// Sets up a mental attribute's range of values (0-5000). All mental attribute ranges default
1295    /// to `200:800:900:1000:1100:1300:2000`.
1296    #[token_de(token = "MENT_ATT_RANGE")]
1297    pub ment_att_range: Vec<(SoulAttributeEnum, u32, u32, u32, u32, u32, u32, u32)>,
1298    /// Mental attribute gain/decay rates. Lower numbers in the last three slots make decay occur
1299    /// faster. Defaults are `500:4:5:4`.
1300    #[token_de(token = "MENT_ATT_RATES")]
1301    pub ment_att_rates: Vec<(
1302        SoulAttributeEnum,
1303        Choose<u32, NoneEnum>,
1304        Choose<u32, NoneEnum>,
1305        Choose<u32, NoneEnum>,
1306        Choose<u32, NoneEnum>,
1307    )>,
1308    /// Allows the creature to be milked in the farmer's workshop. The frequency is the amount of
1309    /// ticks the creature needs to "recharge" (i.e. how much time needs to pass before it can be
1310    /// milked again). Does not work on sentient creatures, regardless of ethics.
1311    #[token_de(token = "MILKABLE")]
1312    pub milkable: Option<(MaterialTokenArgWithLocalCreatureMat, u32)>,
1313    /// The creature spawns stealthed and will attempt to path into the fortress, pulling any levers
1314    /// it comes across. It will be invisible on the map and unit list until spotted by a citizen,
1315    /// at which point the game will pause and recenter on the creature. Used by gremlins in the
1316    /// vanilla game. "They go on little missions to mess with various fortress buildings, not just
1317    /// levers."
1318    #[token_de(token = "MISCHIEVOUS", alias = "MISCHIEVIOUS")]
1319    pub mischievous: Option<()>,
1320    /// Seemingly no longer used.
1321    #[token_de(token = "MODVALUE")]
1322    pub modvalue: Option<()>,
1323    /// Creature may be used as a mount. No use for the player in fortress mode, but enemy sieging
1324    /// forces may arrive with cavalry. Mounts are usable in adventure mode.
1325    #[token_de(token = "MOUNT")]
1326    pub mount: Option<()>,
1327    /// Creature may be used as a mount, but civilizations cannot domesticate it in worldgen without
1328    /// certain exceptions.
1329    #[token_de(token = "MOUNT_EXOTIC")]
1330    pub mount_exotic: Option<()>,
1331    /// Allows the creature to have all-around vision as long as it has multiple heads that can see.
1332    #[token_de(token = "MULTIPART_FULL_VISION")]
1333    pub multipart_full_vision: Option<()>,
1334    /// Makes the species usually produce a single offspring per birth, occasionally producing twins
1335    /// or triplets using typical real-world human probabilities. Requires `[FEMALE]`.
1336    #[token_de(token = "MULTIPLE_LITTER_RARE")]
1337    pub multiple_litter_rare: Option<()>,
1338    /// Animal is considered to be natural. `NATURAL` animals will not engage creatures tagged with
1339    /// `[AT_PEACE_WITH_WILDLIFE]` in combat unless they are members of a hostile entity and vice-
1340    /// versa.
1341    #[token_de(token = "NATURAL", alias = "NATURAL_ANIMAL")]
1342    pub natural: Option<()>,
1343    /// The creature possesses the specified skill at this level inherently - that is, it begins
1344    /// with the skill at this level, and the skill may never rust below that. A value of 15 is
1345    /// legendary.
1346    #[token_de(token = "NATURAL_SKILL")]
1347    pub natural_skill: Vec<(SkillEnum, u32)>,
1348    /// Creatures with this token can appear in bogeyman ambushes in adventure mode, where they
1349    /// adopt classical bogeyman traits such as stalking the adventurer and vaporising when dawn
1350    /// breaks. Such traits do not manifest if the creature is encountered outside of a bogeyman
1351    /// ambush (for instance, as a megabeast or a civilised being). In addition, their corpses and
1352    /// severed body parts turn into smoke after a short while. Note that setting the "Number of
1353    /// Bogeyman Types" in advanced world generation to 0 will only remove randomly-generated
1354    /// bogeymen.
1355    #[token_de(token = "NIGHT_CREATURE_BOGEYMAN")]
1356    pub night_creature_bogeyman: Option<()>,
1357    /// Found on some necromancers. Creatures with this tag will experiment and create strange
1358    /// hybrid creatures. This tag appears to be all that is needed to allow necromancers or modded
1359    /// secrets to create every category of procedural experimental creature
1360    /// ([Though more testing is required to fully confirm this](http://www.bay12forums.com/smf/index.php?topic=175437.msg8085255#msg8085255)).
1361    #[token_de(token = "NIGHT_CREATURE_EXPERIMENTER")]
1362    pub night_creature_experimenter: Option<()>,
1363    /// Found on night trolls and werebeasts. Implies that the creature is a night creature, and
1364    /// shows its description in legends mode entry. The creature is always hostile and will start
1365    /// no quarter combat with any nearby creatures, except for members of its own race. Note that
1366    /// this tag does not override the creature's normal behavior in fortress mode except for the
1367    /// aforementioned aggression, and doesn't prevent the creature from fleeing the battles it
1368    /// started. It also removes the creature's materials from stockpile settings list, making them
1369    /// be stored there regardless of settings.
1370    ///
1371    /// This tag causes the usual behaviour of werebeasts in worldgen, that is, fleeing towns upon
1372    /// being cursed and conducting raids from a lair. If this tag is absent from a deity curse, the
1373    /// accursed will simply be driven out of towns in a similar manner to vampires. When paired
1374    /// with `SPOUSE_CONVERTER`, a very small population of the creature will be created during
1375    /// worldgen (sometimes only a single individual will be created), and their histories will be
1376    /// tracked (that is, they will not spawn spontaneously later, they must either have children or
1377    /// convert other creatures to increase their numbers). The creature will settle in a lair and
1378    /// go on rampages during worldgen. It will actively attempt to seek out potential conversion
1379    /// targets to abduct, convert, and have children with (if possible).
1380    #[token_de(token = "NIGHT_CREATURE_HUNTER")]
1381    pub night_creature_hunter: Option<()>,
1382    /// Found on nightmares. Corpses and severed body parts derived from creatures with this token
1383    /// turn into smoke after a short while.
1384    #[token_de(token = "NIGHT_CREATURE_NIGHTMARE")]
1385    pub night_creature_nightmare: Option<()>,
1386    /// The creature caste does not appear in autumn.
1387    #[token_de(token = "NO_AUTUMN")]
1388    pub no_autumn: Option<()>,
1389    /// Creature doesn't require connected body parts to move (presumably); generally used on undead
1390    /// creatures with connections that have rotted away.
1391    #[token_de(token = "NO_CONNECTIONS_FOR_MOVEMENT")]
1392    pub no_connections_for_movement: Option<()>,
1393    /// Creature cannot become dizzy.
1394    #[token_de(token = "NO_DIZZINESS")]
1395    pub no_dizziness: Option<()>,
1396    /// Creature does not need to drink.
1397    #[token_de(token = "NO_DRINK")]
1398    pub no_drink: Option<()>,
1399    /// Creature does not need to eat.
1400    #[token_de(token = "NO_EAT")]
1401    pub no_eat: Option<()>,
1402    /// Creature cannot suffer fevers.
1403    #[token_de(token = "NO_FEVERS")]
1404    pub no_fevers: Option<()>,
1405    /// The creature is biologically sexless. Makes the creature unable to breed.
1406    #[token_de(token = "NO_GENDER")]
1407    pub no_gender: Option<()>,
1408    /// The creature cannot raise any physical attributes.
1409    #[token_de(token = "NO_PHYS_ATT_GAIN")]
1410    pub no_phys_att_gain: Option<()>,
1411    /// The creature cannot lose any physical attributes.
1412    #[token_de(token = "NO_PHYS_ATT_RUST")]
1413    pub no_phys_att_rust: Option<()>,
1414    /// Creature does not need to sleep. Can still be rendered unconscious by other means.
1415    #[token_de(token = "NO_SLEEP")]
1416    pub no_sleep: Option<()>,
1417    /// The creature caste does not appear in spring.
1418    #[token_de(token = "NO_SPRING")]
1419    pub no_spring: Option<()>,
1420    /// The creature caste does not appear in summer.
1421    #[token_de(token = "NO_SUMMER")]
1422    pub no_summer: Option<()>,
1423    /// Creature doesn't require an organ with the `[THOUGHT]` tag to survive or attack; generally
1424    /// used on creatures that don't have brains.
1425    #[token_de(token = "NO_THOUGHT_CENTER_FOR_MOVEMENT")]
1426    pub no_thought_center_for_movement: Option<()>,
1427    /// Prevents creature from selecting its color based on its profession (e.g. Miner, Hunter,
1428    /// Wrestler).
1429    #[token_de(token = "NO_UNIT_TYPE_COLOR")]
1430    pub no_unit_type_color: Option<()>,
1431    /// Likely prevents the creature from leaving broken vegetation tracks (unverified).
1432    #[token_de(token = "NO_VEGETATION_PERTURB")]
1433    pub no_vegetation_perturb: Option<()>,
1434    /// The creature caste does not appear in winter.
1435    #[token_de(token = "NO_WINTER")]
1436    pub no_winter: Option<()>,
1437    /// Creature has no bones.
1438    #[token_de(token = "NOBONES")]
1439    pub nobones: Option<()>,
1440    /// Creature doesn't need to breathe or have `[BREATHE]` parts in body, nor can it drown or be
1441    /// strangled. Creatures living in magma must have this tag, otherwise they will drown.
1442    #[token_de(token = "NOBREATHE")]
1443    pub nobreathe: Option<()>,
1444    /// Sets the creature to be active at night in adventure mode.
1445    #[token_de(token = "NOCTURNAL")]
1446    pub nocturnal: Option<()>,
1447    /// Creature has no emotions. It is immune to the effects of stress and unable to rage, and its
1448    /// needs cannot be fulfilled in any way. Used on undead in the vanilla game.
1449    #[token_de(token = "NOEMOTION")]
1450    pub noemotion: Option<()>,
1451    /// Creature can't become tired or over-exerted from taking too many combat actions or moving at
1452    /// full speed for extended periods of time.
1453    #[token_de(token = "NOEXERT")]
1454    pub noexert: Option<()>,
1455    /// Creature doesn't feel fear and will never flee from battle. Additionally, it causes bogeymen
1456    /// and nightmares to become friendly towards the creature.
1457    #[token_de(token = "NOFEAR")]
1458    pub nofear: Option<()>,
1459    /// Creature will not drop meat when butchered.
1460    #[token_de(token = "NOMEAT")]
1461    pub nomeat: Option<()>,
1462    /// Creature isn't nauseated by gut hits and cannot vomit.
1463    #[token_de(token = "NONAUSEA")]
1464    pub nonausea: Option<()>,
1465    /// Creature doesn't feel pain.
1466    #[token_de(token = "NOPAIN")]
1467    pub nopain: Option<()>,
1468    /// Creature will not drop a hide when butchered.
1469    #[token_de(token = "NOSKIN")]
1470    pub noskin: Option<()>,
1471    /// Creature will not drop a skull on butchering, rot, or decay of severed head.
1472    #[token_de(token = "NOSKULL")]
1473    pub noskull: Option<()>,
1474    /// Does not produce miasma when rotting.
1475    #[token_de(token = "NOSMELLYROT")]
1476    pub nosmellyrot: Option<()>,
1477    /// Weapons can't get stuck in the creature.
1478    #[token_de(token = "NOSTUCKINS")]
1479    pub nostuckins: Option<()>,
1480    /// Creature can't be stunned and knocked unconscious by pain or head injuries. Creatures with
1481    /// this tag never wake up from sleep in Fortress Mode. If this creature needs to sleep while
1482    /// playing, it will die.
1483    #[token_de(token = "NOSTUN")]
1484    pub nostun: Option<()>,
1485    /// Cannot be butchered.
1486    #[token_de(token = "NOT_BUTCHERABLE")]
1487    pub not_butcherable: Option<()>,
1488    /// Cannot be raised from the dead by necromancers or evil clouds. Implies the creature is not a
1489    /// normal living being. Used by vampires, mummies and inorganic creatures like the amethyst man
1490    /// and bronze colossus. Creatures who are `[OPPOSED_TO_LIFE]` (undead) will be docile towards
1491    /// creatures with this token.
1492    #[token_de(token = "NOT_LIVING")]
1493    pub not_living: Option<()>,
1494    /// Creature doesn't require a `[THOUGHT]` body part to survive. Has the added effect of
1495    /// preventing speech, though directly controlling creatures that would otherwise be capable of
1496    /// speaking allows them to engage in conversation.
1497    #[token_de(token = "NOTHOUGHT")]
1498    pub nothought: Option<()>,
1499    /// How easy the creature is to smell. The higher the number, the easier the creature can be
1500    /// smelt. Zero is odorless. Default is 50.
1501    #[token_de(token = "ODOR_LEVEL")]
1502    pub odor_level: Option<u32>,
1503    /// What the creature smells like. If no odor string is defined, the creature name (not the
1504    /// caste name) is used.
1505    #[token_de(token = "ODOR_STRING")]
1506    pub odor_string: Option<String>,
1507    /// Is hostile to all creatures except undead and other non-living ones and will show Opposed to
1508    /// life in the unit list. Used by undead in the vanilla game. Functions without the
1509    /// `[NOT_LIVING]` token, and seems to imply said token as well. Undead will not be hostile to
1510    /// otherwise-living creatures given this token. Living creatures given this token will attack
1511    /// living creatures that lack it, while ignoring other living creatures that also have this
1512    /// token.
1513    #[token_de(token = "OPPOSED_TO_LIFE")]
1514    pub opposed_to_life: Option<()>,
1515    /// Determines caste's likelihood of having sexual attraction to certain sexes. Values default
1516    /// to `75:20:5` for the same sex and `5:20:75` for the opposite sex. The first value indicates how
1517    /// likely to be entirely uninterested in the sex, the second decides if the creature will
1518    /// become lovers but not marry, the third decides if the creature will marry this sex. The
1519    /// values themselves are simply ratios and do not need to add up to any particular value.
1520    #[token_de(token = "ORIENTATION")]
1521    pub orientation: Vec<(MaleOrFemaleEnum, u32, u32, u32)>,
1522    /// Lets you play as an outsider of this species in adventure mode.
1523    #[token_de(token = "OUTSIDER_CONTROLLABLE")]
1524    pub outsider_controllable: Option<()>,
1525    /// Allows the creature to be used as a pack animal. Currently only used by merchants without
1526    /// wagons. Also prevents creature from dropping hauled items on its own -- do not use for
1527    /// player-controllable creatures!
1528    #[token_de(token = "PACK_ANIMAL")]
1529    pub pack_animal: Option<()>,
1530    /// The creature is immune to all paralyzing special attacks.
1531    #[token_de(token = "PARALYZEIMMUNE")]
1532    pub paralyzeimmune: Option<()>,
1533    /// Used to control the bat riders with paralyze-dart blowguns that flew through the `2D` chasm.
1534    /// Doesn't do anything now.
1535    #[token_de(token = "PATTERNFLIER")]
1536    pub patternflier: Option<()>,
1537    /// In earlier versions, creature would generate pearls. Apparently does nothing in the current
1538    /// version.
1539    #[token_de(token = "PEARL")]
1540    pub pearl: Option<()>,
1541    /// Controls the ability of vermin to find a way into containers when they are eating food from
1542    /// your stockpiles. The value for vermin in the game's current version ranges from 1-3. A
1543    /// higher value is better at penetrating containers.
1544    #[token_de(token = "PENETRATEPOWER")]
1545    pub penetratepower: Option<u32>,
1546    /// Determines the range and chance of personality traits. Standard is `0:50:100`.
1547    ///
1548    /// See [Personality trait](https://dwarffortresswiki.org/index.php/Personality_trait)
1549    /// for more info.
1550    #[token_de(token = "PERSONALITY")]
1551    pub personality: Vec<(PersonalityTraitEnum, u8, u8, u8)>,
1552    /// Allows the creature to be tamed in Fortress mode. Prerequisite for all other working animal
1553    /// roles. Civilizations that encounter it in worldgen will tame and domesticate it for their
1554    /// own use. Adding this to civilization members will classify them as pets instead of citizens,
1555    /// with all the problems that entails. However, you can solve these problems using the popular
1556    /// plugin Dwarf Therapist, which is completely unaffected by the tag.
1557    #[token_de(token = "PET")]
1558    pub pet: Option<()>,
1559    /// Allows the creature to be tamed in Fortress mode. Prequisite for all other working animal
1560    /// roles. Civilizations cannot domesticate it in worldgen, with certain exceptions.
1561    /// Adding this to civilization members will classify them as pets instead of citizens, with
1562    /// all the problems that entails. ([Example](https://dwarffortresswiki.org/index.php/Gremlin)).
1563    ///
1564    /// May make them more difficult to tame, but this needs verification.
1565    #[token_de(token = "PET_EXOTIC")]
1566    pub pet_exotic: Option<()>,
1567    /// How valuable a tamed animal is. Actual cost in points in the embarking screen is
1568    /// `1+(PETVALUE/2)` for an untrained animal, `1+PETVALUE` for a war/hunting one.
1569    #[token_de(token = "PETVALUE")]
1570    pub petvalue: Option<u32>,
1571    /// Divides the creature's `[PETVALUE]` by the specified number. Used by honey bees to prevent a
1572    /// single hive from being worth a fortune.
1573    #[token_de(token = "PETVALUE_DIVISOR")]
1574    pub petvalue_divisor: Option<u32>,
1575    /// This means you can increase your attribute to a given percentage of its starting value
1576    /// (or the average value + your starting value if that is higher).
1577    ///
1578    /// Default is 200, which would increase the attribute by either 200%, or by a flat +200
1579    /// if that is higher.
1580    #[token_de(token = "PHYS_ATT_CAP_PERC")]
1581    pub phys_att_cap_perc: Vec<(BodyAttributeEnum, u32)>,
1582    /// Sets up a physical attribute's range of values (0-5000). All physical attribute ranges
1583    /// default to `200:700:900:1000:1100:1300:2000`.
1584    #[token_de(token = "PHYS_ATT_RANGE")]
1585    pub phys_att_range: Vec<(BodyAttributeEnum, u32, u32, u32, u32, u32, u32, u32)>,
1586    /// Physical attribute gain/decay rates. Lower numbers in the last three slots make decay occur
1587    /// faster. Defaults for `STRENGTH`, `AGILITY`, `TOUGHNESS`, and `ENDURANCE` are `500:3:4:3`,
1588    /// while `RECUPERATION` and `DISEASE_RESISTANCE` default to `500:NONE:NONE:NONE`.
1589    #[token_de(token = "PHYS_ATT_RATES")]
1590    pub phys_att_rates: Vec<(
1591        BodyAttributeEnum,
1592        Choose<u32, NoneEnum>,
1593        Choose<u32, NoneEnum>,
1594        Choose<u32, NoneEnum>,
1595        Choose<u32, NoneEnum>,
1596    )>,
1597
1598    /// Weighted population of caste; Lower is rarer. Not to be confused with `[FREQUENCY]`.
1599    #[token_de(token = "POP_RATIO")]
1600    pub pop_ratio: Option<u32>,
1601    /// The minimum/maximum numbers of how many of these creatures are present in each world map
1602    /// tile of the appropriate region. Defaults to 1:1 if not specified.
1603    #[token_de(token = "POPULATION_NUMBER")]
1604    pub population_number: Option<(u32, u32)>,
1605    /// Allows the being to represent itself as a deity, allowing it to become the leader of a
1606    /// civilized group. Used by unique demons in the vanilla game. Requires `[CAN_SPEAK]` to
1607    /// actually do anything more than settle at a location (e.g. write books, lead armies, profane
1608    /// temples). Doesn't appear to do anything for creatures that are already civilized. Once the
1609    /// creature ascends to a position of leadership, it will proceed to act as a standard ruler for
1610    /// their entity and fulfill the same functions (hold tournaments, tame creatures, etc).
1611    #[token_de(token = "POWER")]
1612    pub power: Option<()>,
1613    /// Creature has a percentage chance to flip out at visible non-friendly creatures. Enraged
1614    /// creatures attack anything regardless of timidity and get a strength bonus to their hits.
1615    /// This is what makes badgers so hardcore.
1616    #[token_de(token = "PRONE_TO_RAGE")]
1617    pub prone_to_rage: Option<Clamp<u8, 0, 100>>,
1618    /// The creature has pus. Specifies the stuff secreted by infected wounds.
1619    #[token_de(token = "PUS")]
1620    pub pus: Option<(MaterialTokenArgWithLocalCreatureMat, MaterialStateEnum)>,
1621    /// Specifies a new relative size for a part than what is stated in the body plan. For example,
1622    /// dwarves have larger livers.
1623    #[token_de(token = "RELSIZE")]
1624    pub relsize: Vec<(BpCriteriaTokenArg, u32)>,
1625    /// What creature's remains are called.
1626    #[token_de(token = "REMAINS")]
1627    pub remains: Option<(String, String)>,
1628    /// What color the creature's remains are.
1629    #[token_de(token = "REMAINS_COLOR")]
1630    pub remains_color: Option<ColorToken>,
1631    /// Goes with `[VERMIN_BITE]` and `[DIE_WHEN_VERMIN_BITE]`, the vermin creature will leave
1632    /// remains on death when biting. Leaving this tag out will cause the creature to disappear
1633    /// entirely after it bites.
1634    #[token_de(token = "REMAINS_ON_VERMIN_BITE_DEATH")]
1635    pub remains_on_vermin_bite_death: Option<()>,
1636    /// Unknown.
1637    #[token_de(token = "REMAINS_UNDETERMINED")]
1638    pub remains_undetermined: Option<()>,
1639    /// The creature will retract into a body part when threatened. It will be unable to move or
1640    /// attack, but enemies will only be able to attack the specified body part. (eg. Turtle,
1641    /// Hedgehog)
1642    ///
1643    /// Second-person descriptions are used for adventurer mode natural ability. "<pro_pos>" can be
1644    /// used in the descriptions, being replaced with the proper pronoun (or lack thereof) in-game.
1645    ///
1646    /// Undead curled up creatures are buggy.
1647    /// See [Bug:11463](https://www.bay12games.com/dwarves/mantisbt/view.php?id=11463)
1648    /// and [Bug:10519](https://www.bay12games.com/dwarves/mantisbt/view.php?id=10519).
1649    #[token_de(token = "RETRACT_INTO_BP")]
1650    pub retract_into_bp: Option<(BpCriteriaTokenArg, String, String, String, String)>,
1651    /// Cat behavior. If it kills a vermin creature and has an owner, it carries the remains in its
1652    /// mouth and drops them at their feet. Requires `[HUNTS_VERMIN]`, obviously.
1653    #[token_de(token = "RETURNS_VERMIN_KILLS_TO_OWNER")]
1654    pub returns_vermin_kills_to_owner: Option<()>,
1655    /// Creature will occasionally root around in the grass, looking for insects.
1656    ///
1657    /// Used for flavor in Adventurer Mode, spawns vermin edible for this creature in Fortress Mode.
1658    /// Creatures missing the specified body part will be unable to perform this action. The action
1659    /// produces a message (visible in adventure mode) in the form:
1660    ///
1661    /// `[creature]` `[verb text]` the `[description of creature's location]`
1662    ///
1663    /// In adventure mode, the "rooting around" ability will be included in the "natural abilities"
1664    /// menu, represented by its second person verb text.
1665    #[token_de(token = "ROOT_AROUND")]
1666    pub root_around: Option<(BpCriteriaTokenArg, String, String)>,
1667    /// Causes the specified tissue layer(s) of the indicated body part(s) to secrete the designated
1668    /// material. A size 100 ('covering') contaminant is created over the affected body part(s) in
1669    /// its specified material state (and at the temperature appropriate to this state) when the
1670    /// trigger condition is met, as long as one of the secretory tissue layers is still intact.
1671    #[token_de(token = "SECRETION")]
1672    pub secretion: Vec<(
1673        MaterialTokenArgWithLocalCreatureMat,
1674        MaterialStateEnum,
1675        BpCriteriaTokenArg,
1676        Reference,
1677        // only an Option<> because of `creature_next_underground.txt` in vanilla:
1678        // TODO: find out why this is allowed to be an Option<>
1679        Option<SecretionTriggerEnum>,
1680    )>,
1681    /// Essentially the same as `[MEGABEAST]`, but more of them are created during worldgen.
1682    ///
1683    /// See the [semi-megabeast page](https://dwarffortresswiki.org/index.php/Semi-megabeast)
1684    /// for more info.
1685    #[token_de(token = "SEMIMEGABEAST")]
1686    pub semimegabeast: Option<()>,
1687    /// Gives the creature the ability to sense creatures belonging to the specified creature class
1688    /// even when they lie far beyond line of sight, including through walls and floors. It also
1689    /// appears to reduce or negate the combat penalty of blind units when fighting creatures they
1690    /// can sense. In adventure mode, the specified tile will be used to represent sensed creatures
1691    /// when they cannot be seen directly.
1692    #[token_de(token = "SENSE_CREATURE_CLASS")]
1693    pub sense_creature_class: Vec<(Reference, DFChar, u32, u32, u32)>, // TODO: ref is creature class
1694    /// The rate at which this creature learns this skill. Requires `[CAN_LEARN]` or `[INTELLIGENT]`
1695    /// to function.
1696    #[token_de(token = "SKILL_LEARN_RATE")]
1697    pub skill_learn_rate: Vec<(SkillEnum, u32)>,
1698    /// The rate at which this creature learns all skills. Requires `[CAN_LEARN]` or `[INTELLIGENT]`
1699    /// to function.
1700    #[token_de(token = "SKILL_LEARN_RATES")]
1701    pub skill_learn_rates: Option<u32>,
1702    /// Like `[SKILL_RATES]`, but applies to individual skills instead. Requires `[CAN_LEARN]` or
1703    /// `[INTELLIGENT]` to function.
1704    #[token_de(token = "SKILL_RATE")]
1705    pub skill_rate: Vec<(SkillEnum, u32, u32, u32, u32)>,
1706    /// Affects skill gain and decay. Lower numbers in the last three slots make decay occur faster
1707    /// (`[SKILL_RATES:100:1:1:1]` would cause rapid decay). The counter rates may also be replaced
1708    /// with `NONE`.
1709    ///
1710    /// Default is `[SKILL_RATES:100:8:16:16]`. Requires `[CAN_LEARN]` or `[INTELLIGENT]` to
1711    /// function.
1712    #[token_de(token = "SKILL_RATES")]
1713    pub skill_rates: Option<(
1714        Choose<u32, NoneEnum>,
1715        Choose<u32, NoneEnum>,
1716        Choose<u32, NoneEnum>,
1717        Choose<u32, NoneEnum>,
1718    )>,
1719    /// The rate at which this skill decays. Lower values cause the skill to decay faster. Requires
1720    /// `[CAN_LEARN]` or `[INTELLIGENT]` to function.
1721    #[token_de(token = "SKILL_RUST_RATE")]
1722    pub skill_rust_rate: Vec<(SkillEnum, u32, u32, u32)>,
1723    /// The rate at which all skills decay. Lower values cause the skills to decay faster. Requires
1724    /// `[CAN_LEARN]` or `[INTELLIGENT]` to function.
1725    #[token_de(token = "SKILL_RUST_RATES")]
1726    pub skill_rust_rates: Option<(u32, u32, u32)>,
1727    /// Shorthand for `[CAN_LEARN]` + `[SKILL_LEARN_RATES:50]` (unverified). Used by a number of
1728    /// 'primitive' creatures (like ogres, giants and troglodytes) in the vanilla game. Applicable
1729    /// to player races. Prevents a player from recruiting nobility, even basic ones. Subterranean
1730    /// creatures with this token combined with `[EVIL]` will become servants of goblins in their
1731    /// civilizations, in the style of trolls.
1732    #[token_de(token = "SLOW_LEARNER")]
1733    pub slow_learner: Option<()>,
1734    /// Creature leaves "remains" instead of a corpse. Used by vermin.
1735    #[token_de(token = "SMALL_REMAINS")]
1736    pub small_remains: Option<()>,
1737    /// Creature makes sounds periodically, which can be heard in Adventure mode.
1738    ///
1739    /// First-person reads "You bark"
1740    ///
1741    /// Third-person reads "The capybara barks"
1742    ///
1743    /// Out of sight reads "You hear a loud bark"
1744    ///
1745    /// with the text in bold being the description arguments of the token.
1746    #[token_de(token = "SOUND")]
1747    pub sound: Vec<(
1748        AlertOrPeacefulIntermittentEnum,
1749        u32,
1750        u32,
1751        Choose<VocalizationEnum, NoneEnum>,
1752        String,
1753        String,
1754        String,
1755    )>,
1756    /// Creature will only appear in biomes with this plant or creature available. Grazers given a
1757    /// specific type of grass (such as pandas and bamboo) will only eat that grass and nothing
1758    /// else, risking starvation if there's none available.
1759    #[token_de(token = "SPECIFIC_FOOD")]
1760    pub specific_food: Vec<PlantOrCreatureTokenArg>,
1761    /// This creature can be converted by a night creature with `[SPOUSE_CONVERTER]`.
1762    #[token_de(token = "SPOUSE_CONVERSION_TARGET")]
1763    pub spouse_conversion_target: Option<()>,
1764    /// If the creature has the `[NIGHT_CREATURE_HUNTER]` tag, it will kidnap
1765    /// `[SPOUSE_CONVERSION_TARGET]`s and transform them into the caste of its species with the
1766    /// `[CONVERTED_SPOUSE]` tag during worldgen. It may also start families this way.
1767    #[token_de(token = "SPOUSE_CONVERTER")]
1768    pub spouse_converter: Option<()>,
1769    /// If the creature rules over a site, it will cause the local landscape to be corrupted into
1770    /// evil surroundings associated with the creature's spheres. The creature must have at least
1771    /// one of the following spheres for this to take effect: `BLIGHT`, `DEATH`, `DISEASE`,
1772    /// `DEFORMITY`, `NIGHTMARES`. The first three kill vegetation, while the others sometimes do.
1773    ///
1774    /// The last two get evil plants and evil animals sometimes. `NIGHTMARES` gets bogeymen
1775    /// ([source](http://www.bay12forums.com/smf/index.php?topic=169696.msg8162224#msg8162224)).
1776    /// Used by demons in the vanilla game.
1777    #[token_de(token = "SPREAD_EVIL_SPHERES_IF_RULER")]
1778    pub spread_evil_spheres_if_ruler: Option<()>,
1779    /// Caste does not require `[GRASP]` body parts to climb -- it can climb with `[STANCE]` parts
1780    /// instead.
1781    #[token_de(token = "STANCE_CLIMBER")]
1782    pub stance_climber: Option<()>,
1783    /// Acts as `[GRAZER]` but set to `20000*G*(max size)^(-3/4)`, where `G` defaults to 100 but can
1784    /// be set in d_init, and the whole thing is trapped between 150 and 3 million. Used for all
1785    /// grazers in the default creature raws.
1786    #[token_de(token = "STANDARD_GRAZER")]
1787    pub standard_grazer: Option<()>,
1788    /// The creature will get strange moods in fortress mode and can produce artifacts.
1789    #[token_de(token = "STRANGE_MOODS")]
1790    pub strange_moods: Option<()>,
1791    /// Gives the creature knowledge of any secrets with `[SUPERNATURAL_LEARNING_POSSIBLE]` that
1792    /// match its spheres. Also prevents it from becoming a vampire or a werebeast. Other effects
1793    /// are unknown.
1794    #[token_de(token = "SUPERNATURAL")]
1795    pub supernatural: Option<()>,
1796    /// The creature naturally knows how to swim perfectly and does not use the swimmer skill, as
1797    /// opposed to `[SWIMS_LEARNED]`. However, Fortress mode AI never paths into water anyway,
1798    /// so it's less useful there.
1799    #[token_de(token = "SWIMS_INNATE")]
1800    pub swims_innate: Option<()>,
1801    /// The creature swims only as well as their present swimming skill allows them to.
1802    #[token_de(token = "SWIMS_LEARNED")]
1803    pub swims_learned: Option<()>,
1804    /// Dilutes the effects of syndromes which have the specified identifier. A percentage of 100
1805    /// is equal to the regular syndrome effect severity, higher percentages reduce severity.
1806    #[token_de(token = "SYNDROME_DILUTION_FACTOR")]
1807    pub syndrome_dilution_factor: Vec<(Reference, u32)>, // ref is a syndrome identifier
1808    /// The creature has tendons in its `[CONNECTIVE_TISSUE_ANCHOR]` tissues (bone or chitin by
1809    /// default). Cutting the bone/chitin tissue severs the tendons, disabling motor function if the
1810    /// target is a limb.
1811    #[token_de(token = "TENDONS")]
1812    pub tendons: Option<(MaterialTokenArgWithLocalCreatureMat, u32)>,
1813    /// The creature's webs can catch larger creatures.
1814    #[token_de(token = "THICKWEB")]
1815    pub thickweb: Option<()>,
1816    /// Found on titans. Cannot be specified in user-defined raws.
1817    #[token_de(token = "TITAN")] // TODO mark generated, see #84
1818    pub titan: Option<()>,
1819    /// How much the creature can carry when used by merchants.
1820    #[token_de(token = "TRADE_CAPACITY")]
1821    pub trade_capacity: Option<u32>,
1822    /// Shortcut for `[TRAINABLE_HUNTING]` + `[TRAINABLE_WAR]`.
1823    #[token_de(token = "TRAINABLE")]
1824    pub trainable: Option<()>,
1825    /// Can be trained as a hunting beast, increasing speed.
1826    #[token_de(token = "TRAINABLE_HUNTING")]
1827    pub trainable_hunting: Option<()>,
1828    /// Can be trained as a war beast, increasing strength and endurance.
1829    #[token_de(token = "TRAINABLE_WAR")]
1830    pub trainable_war: Option<()>,
1831    /// Allows the creature to go into [martial trances](https://dwarffortresswiki.org/index.php/Martial_trance).
1832    /// Used by dwarves in the vanilla game.
1833    #[token_de(token = "TRANCES")]
1834    pub trances: Option<()>,
1835    /// The creature will never trigger traps it steps on. Used by a number of creatures. Doesn't
1836    /// make the creature immune to remotely activated traps (like retractable spikes being
1837    /// triggered while the creature is standing over them). `TRAPAVOID` creatures lose this power
1838    /// if they're immobilized while standing in a trap, be it by stepping on thick web, being
1839    /// paralyzed or being knocked unconscious.
1840    #[token_de(token = "TRAPAVOID")]
1841    pub trapavoid: Option<()>,
1842    /// The creature is displayed as blue when in 7/7 water. Used on fish and amphibious creatures
1843    /// which swim under the water.
1844    #[token_de(token = "UNDERSWIM")]
1845    pub underswim: Option<()>,
1846    /// Found on generated demons; causes the game to create a single named instance of the demon
1847    /// which will emerge from the underworld and take over civilizations during worldgen. Could not
1848    /// be specified in user-defined raws prior to version `0.47.01`.
1849    #[token_de(token = "UNIQUE_DEMON")]
1850    pub unique_demon: Option<()>,
1851    /// Changes the language of the creature into unintelligible 'kobold-speak', which creatures of
1852    /// other species will be unable to understand. If a civilized creature has this and is not part
1853    /// of a `[SKULKING]` civ, it will tend to start wars with all nearby civilizations and will be
1854    /// unable to make peace treaties due to 'inability to communicate'.
1855    #[token_de(token = "UTTERANCES")]
1856    pub utterances: Option<()>,
1857    /// The creature is made of swampstuff. Doesn't appear to do anything in particular. Used by
1858    /// grimelings in the vanilla game.
1859    #[token_de(token = "VEGETATION")]
1860    pub vegetation: Option<()>,
1861    /// Enables vermin to bite other creatures, injecting the specified material. See
1862    /// `[SPECIALATTACK_INJECT_EXTRACT]` for details about injection - this token presumably works
1863    /// in a similar manner (unverified).
1864    #[token_de(token = "VERMIN_BITE")] // TODO research; can this be a Vec?
1865    pub vermin_bite: Option<(
1866        u32,
1867        String,
1868        MaterialTokenArgWithLocalCreatureMat,
1869        MaterialStateEnum,
1870    )>,
1871    /// Some dwarves will hate the creature and get unhappy thoughts when around it, and show a negative
1872    /// preference towards them. Being hated by some dwarves does not prevent the vermin from
1873    /// appearing as a positive preference for other dwarves.
1874    #[token_de(token = "VERMIN_HATEABLE")]
1875    pub vermin_hateable: Option<()>,
1876    /// This makes the creature move in a swarm of creatures of the same race as it (e.g. swarm of
1877    /// flies, swarm of ants).
1878    #[token_de(token = "VERMIN_MICRO")]
1879    pub vermin_micro: Option<()>,
1880    /// The creature cannot be caught by fishing.
1881    #[token_de(token = "VERMIN_NOFISH")]
1882    pub vermin_nofish: Option<()>,
1883    /// The creature will not be observed randomly roaming about the map.
1884    #[token_de(token = "VERMIN_NOROAM")]
1885    pub vermin_noroam: Option<()>,
1886    /// The creature cannot be caught in baited animal traps; however, a "catch live land animal"
1887    /// task may still be able to capture one if a dwarf finds one roaming around.
1888    #[token_de(token = "VERMIN_NOTRAP")]
1889    pub vermin_notrap: Option<()>,
1890    /// Old shorthand for "does cat stuff". Contains `[AT_PEACE_WITH_WILDLIFE]` +
1891    /// `[RETURNS_VERMIN_KILLS_TO_OWNER]` + `[HUNTS_VERMIN]` + `[ADOPTS_OWNER]`.
1892    #[token_de(token = "VERMINHUNTER")]
1893    pub verminhunter: Option<()>,
1894    /// Sets the creature to be active during the evening in adventurer mode.
1895    #[token_de(token = "VESPERTINE")]
1896    pub vespertine: Option<()>,
1897    /// Value should determine how close you have to get to a critter before it attacks (or prevents
1898    /// adv mode travel etc.) Default is 20.
1899    #[token_de(token = "VIEWRANGE")]
1900    pub viewrange: Option<u32>,
1901    /// The width of the creature's vision arcs, in degrees (i.e. 0 to 360). The first number is
1902    /// binocular vision, the second is non-binocular vision.
1903    ///
1904    /// Binocular vision has a minimum of about 10 degrees, monocular, a maximum of about 350
1905    /// degrees. Values past these limits will be accepted, but will default to ~10 degrees and ~350
1906    /// degrees respectively.
1907    #[token_de(token = "VISION_ARC")]
1908    pub vision_arc: Option<(Clamp<u16, 10, 360>, Clamp<u16, 0, 350>)>,
1909    /// Allows the creature to pull caravan wagons. If a civilization doesn't have access to any, it
1910    /// is restricted to trading with pack animals.
1911    #[token_de(token = "WAGON_PULLER")]
1912    pub wagon_puller: Option<()>,
1913    /// Allows the creature to create webs, and defines what the webs are made of.
1914    #[token_de(token = "WEBBER")]
1915    pub webber: Option<MaterialTokenArgWithLocalCreatureMat>,
1916    /// The creature will not get caught in thick webs. Used by creatures who can shoot thick webs
1917    /// (such as giant cave spiders) in order to make them immune to their own attacks.
1918    #[token_de(token = "WEBIMMUNE")]
1919    pub webimmune: Option<()>,
1920    // endregion ==================================================================================
1921    /// Applies the effects of all pending `[CV_ADD_TAG]` and `[CV_REMOVE_TAG]` tokens that have
1922    /// been defined in the current creature.
1923    #[token_de(token = "APPLY_CURRENT_CREATURE_VARIATION")]
1924    pub apply_current_creature_variation: Vec<()>,
1925    /// Copies creature tags, but not caste tags, from another specified creature. Used when making
1926    /// creature variations (i.e. giant animals and animal people). Often used in combination with
1927    /// `[APPLY_CREATURE_VARIATION]` to import standard variations from a file. Variations are
1928    /// documented in `c_variation_default.txt`, which also contains the code for giant animals and
1929    /// animal people.
1930    #[token_de(token = "COPY_TAGS_FROM")]
1931    pub copy_tags_from: Option<ReferenceTo<CreatureToken>>,
1932    // TODO: properly implement the 3 below tokens; ADD_TAG, REMOVE_TAG, and GO_TO_TAG:
1933    // --------------------------------------------------------------------------------------------
1934    /// **Warning: Incomplete token. This token is not yet properly implemented, and so you will
1935    /// not get any hover text information from the arguments, autocomplete will not work, and
1936    /// you will not be alerted to any errors.**
1937    ///
1938    /// ---
1939    /// Adds the given token to the creature.
1940    ///
1941    /// `APPLY_CREATURE_VARIATION` is the only token that cannot be added using this token.
1942    #[token_de(token = "CV_ADD_TAG", alias = "CV_NEW_TAG")]
1943    pub cv_add_tag: Vec<(Reference, Option<(Vec<Any>,)>)>,
1944    /// **Warning: Incomplete token. This token is not yet properly implemented, and so you will
1945    /// not get any hover text information from the arguments, autocomplete will not work, and
1946    /// you will not be alerted to any errors.**
1947    ///
1948    /// ---
1949    /// Removes from the creature all tokens which start with the given chain of token arguments.
1950    ///
1951    /// For example, `[CV_REMOVE_TAG:BODY:HUMANOID_SIMPLE]` would remove
1952    /// `[BODY:HUMANOID_SIMPLE:3_EYES]`, but `[CV_REMOVE_TAG:BODY:3_EYES]`, or `[CV_REMOVE_TAG:3_EYES]`
1953    /// would not. Neither would `[CV_REMOVE_TAG:BODY:HUMANOID_SIMPLE]` be able to remove
1954    /// `[BODY:HUMANOID_SIMPLE_NECK]`, as it looks for whole arguments.
1955    ///
1956    /// `[CV_REMOVE_TAG:BODY]` would remove both examples above, as they both start with `BODY`.
1957    #[token_de(token = "CV_REMOVE_TAG")]
1958    pub cv_remove_tag: Vec<(Reference, Option<(Vec<Any>,)>)>,
1959    /// **Warning: Incomplete token. This token is not yet properly implemented, and so you will
1960    /// not get any hover text information from the arguments, autocomplete will not work, and
1961    /// you will not be alerted to any errors.**
1962    ///
1963    /// ---
1964    /// When using tags from an existing creature, inserts new tags after the specified tag.
1965    #[token_de(token = "GO_TO_TAG")]
1966    pub go_to_tag: Vec<(Reference, Option<(Vec<Any>,)>)>,
1967    /// When using tags from an existing creature, inserts new tags at the end of the creature.
1968    #[token_de(token = "GO_TO_END")]
1969    pub go_to_end: Vec<()>,
1970    /// When using tags from an existing creature, inserts new tags at the beginning of the
1971    /// creature.
1972    #[token_de(token = "GO_TO_START")]
1973    pub go_to_start: Vec<()>,
1974    /// List of `[CV_CONVERT_TAG]` tokens.
1975    #[token_de(token = "CV_CONVERT_TAG")]
1976    pub cv_convert_tag: Vec<CreatureCvConvertTag>,
1977}