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}