1 /**
2 * Status defaults for durations.
3 */
4
5 #pragma once
6
7 #include "act-iter.h"
8 #include "god-passive.h"
9 #include "tag-version.h"
10
_end_weapon_brand()11 static void _end_weapon_brand()
12 {
13 you.duration[DUR_EXCRUCIATING_WOUNDS] = 1;
14 ASSERT(you.weapon());
15 end_weapon_brand(*you.weapon(), true);
16 }
17
_end_invis()18 static void _end_invis()
19 {
20 if (you.invisible())
21 mprf(MSGCH_DURATION, "You feel more conspicuous.");
22 else
23 mprf(MSGCH_DURATION, "You flicker back into view.");
24 }
25
_end_corrosion()26 static void _end_corrosion()
27 {
28 you.props["corrosion_amount"] = 0;
29 you.redraw_armour_class = true;
30 you.wield_change = true;
31 }
32
_end_death_channel()33 static void _end_death_channel()
34 {
35 you.attribute[ATTR_DIVINE_DEATH_CHANNEL] = 0;
36 for (monster_iterator mi; mi; ++mi)
37 {
38 if (mi->type == MONS_SPECTRAL_THING && mi->summoner == MID_PLAYER)
39 {
40 mon_enchant abj = mi->get_ench(ENCH_FAKE_ABJURATION);
41 abj.duration = 0;
42 mi->update_ench(abj);
43 }
44 }
45 }
46
_end_sticky_flame()47 static void _end_sticky_flame()
48 {
49 you.props.erase("sticky_flame_source");
50 you.props.erase("sticky_flame_aux");
51 }
52
_redraw_armour()53 static void _redraw_armour()
54 {
55 you.redraw_armour_class = true;
56 }
57
58 // properties of the duration.
59 enum duration_flags : uint32_t
60 {
61 D_NO_FLAGS = 0,
62
63 // Whether to do automatic expiration colouring.
64 D_EXPIRES = 1<< 0,
65
66 // Whether !cancellation (and the like) end the duration.
67 D_DISPELLABLE = 1<< 1,
68 };
69
70 /// A description of the behaviour when a duration begins 'expiring'.
71 struct midpoint_msg
72 {
73 /// What message should be printed when the duration begins expiring?
74 const char* msg;
75 int max_offset; ///< What's the maximum value that the duration may be
76 ///< reduced by after the message prints?
77
78 /// Randomly, much should the duration actually be reduced by?
offsetmidpoint_msg79 int offset() const
80 {
81 return max_offset ? random2(max_offset+1) : 0;
82 }
83 };
84
85 /// What happens when a duration ends?
86 struct end_effect
87 {
88 /// A message for when the duration ends. Implies the duration ticks down.
89 const char* msg;
90 /// An effect that triggers when the duration ends.
91 void (*on_end)();
92 };
93
94 /// Does the duration decrease simply over time? If so, what happens?
95 struct decrement_rules
96 {
97 /// What happens when the duration ends?
98 end_effect end;
99 /// What happens when a duration hits 50% remaining.
100 midpoint_msg mid_msg;
101 /// Should the message be MSGCH_RECOVERY instead of MSGCH_DURATION?
102 bool recovery;
103 };
104
105 struct duration_def
106 {
107 duration_type dur;
108 int light_colour; ///< Base colour for status light.
109 const char *light_text; ///< Text for the status light.
110 const char *short_text; ///< Text for @ line on the % screen and morgues.
111 ///< Should be an adjective.
112 const char *name_text; ///< Text used in wizmode &^D. If empty, use the
113 ///< short_text.
114 const char *long_text; ///< Text for the @ message.
115
116 uint32_t flags; ///< A bitfield for various flags a duration can have.
117
118 /// Does the duration decrease simply over time? If so, what happens?
119 decrement_rules decr;
120 /// The number of turns below which the duration is considered 'expiring'.
121 int expire_threshold;
122
123 /// Return the name of the duration (name_text or short_text). */
nameduration_def124 const char *name() const
125 {
126 return name_text[0] ? name_text : short_text;
127 }
128
duration_has_flagduration_def129 bool duration_has_flag(uint64_t flag_wanted) const
130 {
131 return flags & flag_wanted;
132 }
133 };
134
135 /**
136 * "" for an entry means N/A, either because it is not shown in the
137 * relevant place, or because it is shown in a more complicated way.
138 * A "" for name_text indicates that the name is the same as the
139 * short text.
140 *
141 * Examples:
142 *
143 * DUR_FORESTED has "" for the short_text entry, and therefore has no
144 * entry on the "@:" line.
145 *
146 * DUR_QAZLAL_AC has "" for the light_text entry, and therefore has no
147 * status light (instead showing the AC bonus by coloring the player's
148 * AC blue).
149 */
150
151 static const duration_def duration_data[] =
152 {
153 { DUR_AGILITY,
154 LIGHTBLUE, "Agi",
155 "agile", "agility",
156 "You are agile.", D_DISPELLABLE,
157 {{ "You feel a little less agile now.", []() {
158 you.redraw_evasion = true;
159 }}}},
160 { DUR_BERSERK,
161 BLUE, "Berserk",
162 "berserking", "berserk",
163 "You are possessed by a berserker rage.", D_EXPIRES,
164 {{ "You are no longer berserk.", player_end_berserk }}, 6},
165 { DUR_BERSERK_COOLDOWN,
166 YELLOW, "-Berserk",
167 "on berserk cooldown", "berserk cooldown",
168 "You are unable to berserk.", D_NO_FLAGS},
169 { DUR_BREATH_WEAPON,
170 YELLOW, "Breath",
171 "short of breath", "breath weapon",
172 "You are short of breath.", D_NO_FLAGS,
173 { { "You have got your breath back." }, {}, true }},
174 { DUR_BRILLIANCE,
175 LIGHTBLUE, "Brill",
176 "brilliant", "brilliance",
177 "You are brilliant.", D_DISPELLABLE,
178 {{ "You feel a little less clever now." }}},
179 { DUR_CONF,
180 RED, "Conf",
181 "confused", "conf",
182 "You are confused.", D_DISPELLABLE,
183 {{ "You feel less confused." }}},
184 { DUR_CONFUSING_TOUCH, // Has custom long_text
185 LIGHTBLUE, "Touch",
186 "confusing by touch", "confusing touch",
187 "" , D_DISPELLABLE,
188 {{ "", []() {
189 mprf(MSGCH_DURATION, "%s",
190 you.hands_act("stop", "glowing.").c_str());
191 }}}, 20},
192 { DUR_CORONA, // Has custom long_text
193 YELLOW, "Corona",
194 "lit by a corona", "corona",
195 "", D_DISPELLABLE,
196 {{ "", []() {
197 if (!you.backlit())
198 mprf(MSGCH_DURATION, "You are no longer glowing.");
199 }}}},
200 { DUR_DEATH_CHANNEL,
201 MAGENTA, "DChan",
202 "death channeling", "death channel",
203 "You are channeling the dead.", D_DISPELLABLE | D_EXPIRES,
204 {{ "Your unholy channel expires.", _end_death_channel },
205 { "Your unholy channel is weakening.", 1 }}, 6},
206 { DUR_DIVINE_STAMINA,
207 WHITE, "Vit",
208 "vitalised", "divine stamina",
209 "You are divinely vitalised.", D_EXPIRES,
210 {{ "", zin_remove_divine_stamina }}},
211 { DUR_DIVINE_VIGOUR,
212 0, "",
213 "divinely vigorous", "divine vigour",
214 "You are imbued with divine vigour.", D_NO_FLAGS,
215 {{ "", elyvilon_remove_divine_vigour }}},
216 { DUR_EXHAUSTED,
217 YELLOW, "Exh",
218 "exhausted", "",
219 "You are exhausted.", D_NO_FLAGS,
220 {{ "You feel less exhausted." }}},
221 { DUR_ICY_ARMOUR,
222 0, "",
223 "ice-armoured", "icy armour",
224 "You are protected by a layer of icy armour.", D_DISPELLABLE | D_EXPIRES,
225 {}, 6},
226 { DUR_LIQUID_FLAMES,
227 RED, "Fire",
228 "on fire", "liquid flames",
229 "You are covered in liquid flames.", D_DISPELLABLE /*but special-cased*/,
230 {{ "You are no longer on fire.", _end_sticky_flame }}},
231 { DUR_LOWERED_WL,
232 RED, "Will/2",
233 "weak-willed", "lowered wl",
234 "You are weak-willed.", D_DISPELLABLE,
235 {{ "You feel your willpower return." }}},
236 { DUR_MIGHT,
237 LIGHTBLUE, "Might",
238 "mighty", "might",
239 "You are mighty.", D_DISPELLABLE,
240 {{ "You feel a little less mighty now." }}},
241 { DUR_PARALYSIS,
242 RED, "Para",
243 "paralysed", "paralysis",
244 "You are paralysed.", D_DISPELLABLE},
245 { DUR_PETRIFIED,
246 RED, "Stone",
247 "petrified", "",
248 "You are petrified.", D_DISPELLABLE},
249 { DUR_PETRIFYING,
250 LIGHTRED, "Petr",
251 "petrifying", "",
252 "You are turning to stone.", D_DISPELLABLE /*but special-cased*/ | D_EXPIRES,
253 {}, 1},
254 { DUR_RESISTANCE,
255 BLUE, "Resist",
256 "resistant", "resistance",
257 "You are resistant to the elements.", D_DISPELLABLE | D_EXPIRES,
258 {{ "Your resistance to elements expires." },
259 { "You start to feel less resistant.", 1}}, 6},
260 { DUR_SLIMIFY, // Has custom long_text
261 GREEN, "Slime",
262 "slimy", "slimify",
263 "", D_EXPIRES,
264 {{ "You feel less slimy."},
265 { "Your slime is starting to congeal.", 1 }}, 10},
266 { DUR_SLEEP,
267 0, "",
268 "sleeping", "sleep",
269 "You are sleeping.", D_DISPELLABLE},
270 { DUR_SWIFTNESS,
271 BLUE, "Swift",
272 "swift", "swiftness",
273 "You can move swiftly.", D_DISPELLABLE | D_EXPIRES, {}, 6},
274 { DUR_TELEPORT,
275 LIGHTBLUE, "Tele",
276 "about to teleport", "teleport",
277 "You are about to teleport.", D_DISPELLABLE /*but special-cased*/,
278 {{ "", []() {
279 you_teleport_now();
280 untag_followers();
281 }}}},
282 { DUR_DEATHS_DOOR,
283 LIGHTGREY, "DDoor",
284 "in death's door", "deaths door",
285 "You are standing in death's doorway.", D_EXPIRES,
286 {{ "Your life is in your own hands again!", []() {
287 you.duration[DUR_DEATHS_DOOR_COOLDOWN] = random_range(10, 30);
288 }}, { "Your time is quickly running out!", 5 }}, 10},
289 { DUR_DEATHS_DOOR_COOLDOWN,
290 YELLOW, "-DDoor",
291 "on death's door cooldown", "deaths door cooldown",
292 "You are unable to enter death's door.", D_NO_FLAGS,
293 {{ "You step away from death's doorway." }}},
294 { DUR_QUAD_DAMAGE,
295 BLUE, "Quad",
296 "quad damage", "",
297 "", D_EXPIRES,
298 {{ "", []() { invalidate_agrid(true); }},
299 { "Quad Damage is wearing off."}}, 3 }, // per client.qc
300 { DUR_SILENCE,
301 0, "",
302 "silenced", "silence",
303 "You radiate silence.", D_DISPELLABLE | D_EXPIRES,
304 {{ "Your hearing returns.", []() { invalidate_agrid(true); }}}, 5 },
305 { DUR_STEALTH,
306 BLUE, "Stealth",
307 "especially stealthy", "stealth",
308 "You are especially stealthy.", D_NO_FLAGS,
309 {{ "You feel less stealthy." }}},
310 { DUR_AFRAID,
311 RED, "Fear",
312 "afraid", "",
313 "You are terrified.", D_DISPELLABLE | D_EXPIRES,
314 {{ "Your fear fades away.", []() { you.clear_fearmongers(); }},
315 {}, true }},
316 { DUR_MIRROR_DAMAGE,
317 WHITE, "Mirror",
318 "mirroring injuries", "mirror damage",
319 "You mirror injuries.", D_NO_FLAGS,
320 {{ "Your dark mirror aura disappears." }}},
321 { DUR_VORTEX,
322 LIGHTGREY, "Vortex",
323 "in a vortex", "vortex",
324 "You are in the eye of a polar vortex.", D_EXPIRES},
325 { DUR_LIQUEFYING,
326 LIGHTBLUE, "Liquid",
327 "liquefying", "",
328 "You are liquefying the ground beneath you.", D_DISPELLABLE,
329 {{ "The ground is no longer liquid beneath you.", []() {
330 invalidate_agrid(false);
331 }}}},
332 { DUR_HEROISM,
333 LIGHTBLUE, "Hero",
334 "heroic", "heroism",
335 "You possess the skills of a mighty hero.", D_NO_FLAGS,
336 {{"", okawaru_remove_heroism}}},
337 { DUR_FINESSE,
338 LIGHTBLUE, "Finesse",
339 "finesse-ful", "finesse",
340 "Your blows are lightning fast.", D_NO_FLAGS,
341 {{"", okawaru_remove_finesse}}},
342 { DUR_LIFESAVING,
343 LIGHTGREY, "Prot",
344 "divinely protected", "lifesaving",
345 "You are calling for your life to be saved.", D_EXPIRES,
346 {{ "Your divine protection fades away." }}},
347 { DUR_VORTEX_COOLDOWN,
348 YELLOW, "-Vortex",
349 "on vortex cooldown", "vortex cooldown",
350 "You are unable to create a polar vortex.", D_NO_FLAGS,
351 {{ "The winds around you calm down.", []() {
352 remove_vortex_clouds(MID_PLAYER);
353 }}}},
354 { DUR_DISJUNCTION,
355 BLUE, "Disjoin",
356 "disjoining", "disjunction",
357 "You are disjoining your surroundings.", D_DISPELLABLE | D_EXPIRES,
358 {{ "The translocation energy dissipates.", []() {
359 invalidate_agrid(true);
360 }}}},
361 { DUR_SENTINEL_MARK,
362 LIGHTRED, "Mark",
363 "marked", "sentinel's mark",
364 "A sentinel's mark is revealing your location to enemies.", D_DISPELLABLE | D_EXPIRES,
365 {{ "The sentinel's mark upon you fades away." }}},
366 { DUR_WEREBLOOD,
367 BLUE, "Slay",
368 "wereblooded", "wereblood",
369 "Your melee attacks are strengthened by your wereblood.", D_DISPELLABLE | D_EXPIRES,
370 {{ "Your primal bloodlust has ended." },
371 { "Your primal bloodlust is almost over." }}, 6},
372 { DUR_FLAYED,
373 RED, "Flay",
374 "flayed", "",
375 "You are covered in terrible wounds.", D_DISPELLABLE /* but special-cased */ | D_EXPIRES},
376 { DUR_WEAK,
377 RED, "Weak",
378 "weakened", "weak",
379 "Your attacks are enfeebled.", D_DISPELLABLE,
380 {{ "Your attacks no longer feel as feeble." }}},
381 { DUR_DIMENSION_ANCHOR,
382 RED, "-Tele",
383 "untranslocatable", "dimension anchor",
384 "You are firmly anchored to this plane.", D_DISPELLABLE,
385 {{ "You are no longer firmly anchored in space." }}},
386 { DUR_LOCKED_DOWN,
387 RED, "-Move",
388 "immobile", "",
389 "You are magically locked in place.", D_DISPELLABLE,
390 {{ "You are no longer locked in place." }}},
391 { DUR_TOXIC_RADIANCE,
392 MAGENTA, "Toxic",
393 "radiating poison", "toxic radiance",
394 "You are radiating toxic energy.", D_DISPELLABLE,
395 {{ "Your toxic aura wanes." }}},
396 { DUR_RECITE,
397 WHITE, "Recite",
398 "reciting", "recite",
399 "You are reciting Zin's Axioms of Law.", D_NO_FLAGS},
400 { DUR_RECITE_COOLDOWN,
401 YELLOW, "-Recite",
402 "on recite cooldown", "",
403 "You are unable to recite.", D_NO_FLAGS,
404 {{ "You are ready to recite again." }}},
405 { DUR_FIRE_VULN,
406 RED, "rF-",
407 "fire vulnerable", "fire vulnerability",
408 "You are more vulnerable to fire.", D_DISPELLABLE,
409 {{ "You feel less vulnerable to fire." }}},
410 { DUR_BARBS,
411 RED, "Barbs",
412 "spiked", "barbed spikes",
413 "Barbed spikes are embedded in your body.", D_NO_FLAGS},
414 { DUR_POISON_VULN,
415 RED, "rP-",
416 "poison vulnerable", "poison vulnerability",
417 "You are more vulnerable to poison.", D_DISPELLABLE,
418 {{ "You feel less vulnerable to poison." }}},
419 { DUR_FROZEN,
420 RED, "Frozen",
421 "frozen", "",
422 "You are partly encased in ice.", D_DISPELLABLE,
423 {{ "The ice encasing you melts away." }, {}, true }},
424 { DUR_SAP_MAGIC,
425 RED, "Sap",
426 "magic-sapped", "sap magic",
427 "Casting spells hinders your spell success.", D_DISPELLABLE,
428 {{ "Your magic seems less tainted.", []() {
429 you.props.erase(SAP_MAGIC_KEY);
430 }}}},
431 { DUR_PORTAL_PROJECTILE,
432 LIGHTBLUE, "PProj",
433 "portalling projectiles", "portal projectile",
434 "You are teleporting projectiles to their destination.", D_DISPELLABLE,
435 {{ "You are no longer teleporting projectiles to their destination.",
436 []() { you.attribute[ATTR_PORTAL_PROJECTILE] = 0; }}}},
437 { DUR_FORESTED,
438 GREEN, "Forest",
439 "forested", "",
440 "You are summoning a forest.", D_NO_FLAGS,
441 {{ "Space becomes stable." }}},
442 { DUR_DRAGON_CALL,
443 WHITE, "Dragoncall",
444 "calling dragons", "dragon call",
445 "You are beckoning forth a horde of dragons.", D_NO_FLAGS,
446 {{ "The roar of the dragon horde subsides.", []() {
447 you.duration[DUR_DRAGON_CALL_COOLDOWN] = random_range(160, 260);
448 }}}},
449 { DUR_DRAGON_CALL_COOLDOWN,
450 YELLOW, "-Dragoncall",
451 "on dragon call cooldown", "dragon call cooldown",
452 "You are unable to call dragons.", D_NO_FLAGS,
453 {{ "You can once more reach out to the dragon horde." }}},
454 { DUR_NO_POTIONS,
455 RED, "-Potion",
456 "unable to drink", "no potions",
457 "You cannot drink potions.", D_NO_FLAGS,
458 {{ "", []() {
459 if (you.can_drink())
460 mprf(MSGCH_RECOVERY, "You can drink potions again.");
461 }}}},
462 { DUR_QAZLAL_FIRE_RES,
463 LIGHTBLUE, "rF+",
464 "protected from fire", "qazlal fire resistance",
465 "Qazlal is protecting you from fire.", D_NO_FLAGS,
466 {{ "You feel less protected from fire." },
467 { "Your protection from fire is fading.", 1}}, 6},
468 { DUR_QAZLAL_COLD_RES,
469 LIGHTBLUE, "rC+",
470 "protected from cold", "qazlal cold resistance",
471 "Qazlal is protecting you from cold.", D_NO_FLAGS,
472 {{ "You feel less protected from cold." },
473 { "Your protection from cold is fading.", 1}}, 6},
474 { DUR_QAZLAL_ELEC_RES,
475 LIGHTBLUE, "rElec+",
476 "protected from electricity", "qazlal elec resistance",
477 "Qazlal is protecting you from electricity.", D_NO_FLAGS,
478 {{ "You feel less protected from electricity." },
479 { "Your protection from electricity is fading.", 1}}, 6},
480 { DUR_QAZLAL_AC,
481 LIGHTBLUE, "",
482 "protected from physical damage", "qazlal ac",
483 "Qazlal is protecting you from physical damage.", D_NO_FLAGS,
484 {{ "You feel less protected from physical attacks.", _redraw_armour },
485 { "Your protection from physical attacks is fading." , 1 }}, 6},
486 { DUR_CORROSION,
487 RED, "Corr",
488 "corroded", "corrosion",
489 "You are corroded.", D_DISPELLABLE,
490 {{ "You are no longer corroded.", _end_corrosion }}},
491 { DUR_HORROR,
492 RED, "Horr",
493 "horrified", "horror",
494 "You are horrified, weakening your attacks and spells.", D_NO_FLAGS},
495 { DUR_NO_SCROLLS,
496 RED, "-Scroll",
497 "unable to read", "no scrolls",
498 "You cannot read scrolls.", D_NO_FLAGS,
499 {{ "You can read scrolls again." }, {}, true }},
500 { DUR_DIVINE_SHIELD,
501 0, "",
502 "divinely shielded", "divine shield",
503 "You are shielded by the power of the Shining One.", D_NO_FLAGS,
504 {{ "", tso_remove_divine_shield }}},
505 { DUR_CLEAVE,
506 LIGHTBLUE, "Cleave",
507 "cleaving", "cleave",
508 "You are cleaving through your foes.", D_NO_FLAGS,
509 {{ "Your cleaving frenzy subsides." }}},
510 { DUR_AMBROSIA, GREEN, "Ambros",
511 "ambrosia-drunk", "ambrosia",
512 "You are regenerating under the effects of ambrosia.", D_DISPELLABLE },
513 { DUR_CHANNEL_ENERGY, LIGHTBLUE, "Channel", "channeling", "channel",
514 "You are rapidly regenerating magical energy.", D_NO_FLAGS },
515 { DUR_DOOM_HOWL,
516 RED, "Howl",
517 "doom-hounded", "howl",
518 "A terrible howling echoes in your mind.", D_DISPELLABLE,
519 {{ "The infernal howling subsides.", []() {
520 you.props.erase(NEXT_DOOM_HOUND_KEY);
521 }}}},
522 { DUR_VERTIGO, YELLOW, "Vertigo",
523 "vertiginous", "vertigo",
524 "Vertigo is making it harder to attack, cast, and dodge.", D_DISPELLABLE,
525 {{ "The world stops spinning.", []() {
526 you.redraw_evasion = true;
527 }}}},
528 { DUR_SANGUINE_ARMOUR, LIGHTBLUE, "Blood",
529 "sanguine armoured", "sanguine armour",
530 "Your shed blood clings to and protects you.", D_NO_FLAGS,
531 {{ "Your blood armour dries and flakes away.", _redraw_armour }}},
532 { DUR_SPWPN_PROTECTION, 0, "",
533 "under a protective aura", "protection aura",
534 "Your weapon is exuding a protective aura.", D_NO_FLAGS,
535 {{ "", _redraw_armour }}},
536 { DUR_NO_HOP, YELLOW, "-Hop",
537 "unable to hop", "no hop",
538 "You are unable to hop.", D_NO_FLAGS,
539 {{ "You are ready to hop once more." }}},
540 { DUR_BLINKBOLT_COOLDOWN, YELLOW, "-Bbolt",
541 "blinkbolt cooldown", "no blinkbolt",
542 "", D_NO_FLAGS,
543 {{ "You feel energetic enough to blinkbolt again." }}},
544 { DUR_ACROBAT, 0, "",
545 "acrobatic", "acrobat",
546 "You are acrobatic and have increased evasion.", D_NO_FLAGS,
547 {{ "", []() {
548 you.redraw_evasion = true;
549 }}}},
550 { DUR_ATTRACTIVE,
551 LIGHTBLUE, "Attr",
552 "attractive", "attract",
553 "You attract monsters toward you.", D_DISPELLABLE },
554 { DUR_ELIXIR, WHITE, "Elixir",
555 "elixired", "elixir",
556 "You are rapidly regenerating health and magic.", D_NO_FLAGS},
557 { DUR_WORD_OF_CHAOS_COOLDOWN,
558 YELLOW, "-Word",
559 "on word of chaos cooldown", "word of chaos cooldown",
560 "You are unable to speak a word of chaos.", D_NO_FLAGS,
561 {{ "You are ready to speak a word of chaos again." }}},
562
563 // The following are visible in wizmode only, or are handled
564 // specially in the status lights and/or the % or @ screens.
565
566 { DUR_INVIS, 0, "", "", "invis", "", D_DISPELLABLE,
567 {{ "", _end_invis }, { "You flicker for a moment.", 1}}, 6},
568 { DUR_SLOW, 0, "", "", "slow", "", D_DISPELLABLE},
569 { DUR_MESMERISED, 0, "", "", "mesmerised", "", D_DISPELLABLE,
570 {{ "You break out of your daze.", []() { you.clear_beholders(); }},
571 {}, true }},
572 { DUR_MESMERISE_IMMUNE, 0, "", "", "mesmerisation immunity", "", D_NO_FLAGS, {{""}} },
573 { DUR_HASTE, 0, "", "", "haste", "", D_DISPELLABLE, {}, 6},
574 { DUR_FLIGHT, 0, "", "", "flight", "", D_DISPELLABLE /*but special-cased*/, {}, 10},
575 { DUR_POISONING, 0, "", "", "poisoning", "", D_NO_FLAGS},
576 { DUR_PIETY_POOL, 0, "", "", "piety pool", "", D_NO_FLAGS},
577 { DUR_TRANSFORMATION, 0, "", "", "transformation", "", D_DISPELLABLE /*but special-cased*/, {}, 10},
578 { DUR_EXCRUCIATING_WOUNDS, 0, "", "", "excruciating wounds", "", D_DISPELLABLE,
579 {{ "", _end_weapon_brand }}},
580 { DUR_DEMONIC_GUARDIAN, 0, "", "", "demonic guardian", "", D_NO_FLAGS, {{""}}},
581 { DUR_POWERED_BY_DEATH, 0, "", "", "pbd", "", D_NO_FLAGS},
582 { DUR_REPEL_STAIRS_MOVE, 0, "", "", "repel stairs move", "", D_NO_FLAGS, {{""}}},
583 { DUR_REPEL_STAIRS_CLIMB, 0, "", "", "repel stairs climb", "", D_NO_FLAGS, {{""}}},
584 { DUR_CLOUD_TRAIL, 0, "", "", "cloud trail", "", D_NO_FLAGS},
585 { DUR_TIME_STEP, 0, "", "", "time step", "", D_NO_FLAGS},
586 { DUR_ICEMAIL_DEPLETED, 0, "", "", "icemail depleted", "", D_NO_FLAGS,
587 {{ "Your icy envelope is restored.", _redraw_armour }}},
588 { DUR_PARALYSIS_IMMUNITY, 0, "", "", "paralysis immunity", "", D_NO_FLAGS},
589 { DUR_VEHUMET_GIFT, 0, "", "", "vehumet gift", "", D_NO_FLAGS, {{""}}},
590 { DUR_SICKENING, 0, "", "", "sickening", "", D_NO_FLAGS, {{""}}},
591 { DUR_WATER_HOLD, 0, "", "", "drowning", "", D_NO_FLAGS},
592 { DUR_SLEEP_IMMUNITY, 0, "", "", "sleep immunity", "", D_NO_FLAGS, {{""}}},
593 // Regeneration information handled separately.
594 { DUR_TROGS_HAND, 0, "", "strong-willed", "trogs hand",
595 "Your willpower is greatly increased.", D_EXPIRES,
596 {{"", trog_remove_trogs_hand},
597 {"You feel the effects of Trog's Hand fading.", 1}}, 6},
598 { DUR_GOZAG_GOLD_AURA, 0, "", "gold aura", "", "", D_NO_FLAGS,
599 {{ "", []() { you.props[GOZAG_GOLD_AURA_KEY] = 0; you.redraw_title = true;}}}},
600 { DUR_COLLAPSE, 0, "", "", "collapse", "", D_NO_FLAGS },
601 { DUR_BRAINLESS, 0, "", "", "brainless", "", D_NO_FLAGS },
602 { DUR_CLUMSY, 0, "", "", "clumsy", "", D_NO_FLAGS },
603 { DUR_ANCESTOR_DELAY, 0, "", "", "ancestor delay", "", D_NO_FLAGS, {{""}}},
604 { DUR_GRASPING_ROOTS, 0, "", "grasped by roots", "grasping roots",
605 "You are constricted by grasping roots.", D_NO_FLAGS},
606 { DUR_SHAFT_IMMUNITY, 0, "", "", "shaft immunity", "", D_NO_FLAGS, {{""}}},
607 { DUR_NOXIOUS_BOG,
608 MAGENTA, "Bog",
609 "spewing sludge", "noxious bog",
610 "You are spewing a noxious bog.", D_DISPELLABLE,
611 {{ "Your noxious spew wanes." }}},
612 { DUR_FROZEN_RAMPARTS, LIGHTBLUE, "Ramparts", "freezing walls",
613 "frozen ramparts", "You have covered nearby walls with an icy ambush.",
614 D_DISPELLABLE},
615 { DUR_HEAVENLY_STORM, 0, "", "in a heavenly storm", "heavenly storm",
616 "Heavenly clouds are increasing your accuracy and damage.", D_NO_FLAGS,
617 {{ "", wu_jian_decrement_heavenly_storm }}},
618 { DUR_SICKNESS, 0, "", "", "sickness", "", D_DISPELLABLE,
619 {{ "You feel your health improve." }}},
620
621
622 #if TAG_MAJOR_VERSION == 34
623 // And removed ones
624 { DUR_MAGIC_SAPPED, 0, "", "", "old magic sapped", "", D_NO_FLAGS},
625 { DUR_REPEL_MISSILES, 0, "", "", "old repel missiles", "", D_NO_FLAGS},
626 { DUR_DEFLECT_MISSILES, 0, "", "", "old deflect missiles", "", D_NO_FLAGS},
627 { DUR_JELLY_PRAYER, 0, "", "", "old jelly prayer", "", D_NO_FLAGS},
628 { DUR_CONTROLLED_FLIGHT, 0, "", "", "old controlled flight", "", D_NO_FLAGS},
629 { DUR_SEE_INVISIBLE, 0, "", "", "old see invisible", "", D_NO_FLAGS},
630 { DUR_INSULATION, 0, "", "", "old insulation", "", D_NO_FLAGS},
631 { DUR_BARGAIN, 0, "", "", "old bargain", "", D_NO_FLAGS},
632 { DUR_SLAYING, 0, "", "", "old slaying", "", D_NO_FLAGS},
633 { DUR_MISLED, 0, "", "", "old misled", "", D_NO_FLAGS},
634 { DUR_NAUSEA, 0, "", "", "old nausea", "", D_NO_FLAGS},
635 { DUR_TEMP_MUTATIONS, 0, "", "", "old temporary mutations", "", D_NO_FLAGS},
636 { DUR_BATTLESPHERE, 0, "", "", "old battlesphere", "", D_NO_FLAGS},
637 { DUR_RETCHING, 0, "", "", "old retching", "", D_NO_FLAGS},
638 { DUR_SPIRIT_HOWL, 0, "", "", "old spirit howl", "", D_NO_FLAGS},
639 { DUR_SONG_OF_SHIELDING, 0, "", "", "old song of shielding", "", D_NO_FLAGS},
640 { DUR_ANTENNAE_EXTEND, 0, "", "", "old antennae extend", "", D_NO_FLAGS},
641 { DUR_BUILDING_RAGE, 0, "", "", "old building rage", "", D_NO_FLAGS},
642 { DUR_NEGATIVE_VULN, 0, "", "", "old negative vuln", "", D_NO_FLAGS},
643 { DUR_SURE_BLADE, 0, "", "", "old sure blade", "", D_NO_FLAGS},
644 { DUR_CONTROL_TELEPORT, 0, "", "", "old control teleport", "", D_NO_FLAGS},
645 { DUR_DOOM_HOWL_IMMUNITY, 0, "", "", "old howl immunity", "", D_NO_FLAGS, {{""}}},
646 { DUR_CONDENSATION_SHIELD, 0, "", "", "old condensation shield", "", D_NO_FLAGS},
647 { DUR_PHASE_SHIFT, 0, "", "", "old phase shift", "", D_NO_FLAGS},
648 { DUR_TELEPATHY, 0, "", "", "old telepathy", "", D_NO_FLAGS},
649 { DUR_MAGIC_ARMOUR, 0, "", "", "old magic armour", "", D_NO_FLAGS},
650 { DUR_MAGIC_SHIELD, 0, "", "", "old magic shield", "", D_NO_FLAGS},
651 { DUR_FORTITUDE, 0, "", "", "old fortitude", "", D_NO_FLAGS},
652 { DUR_WATER_HOLD_IMMUNITY, 0, "", "", "old drowning immunity", "", D_NO_FLAGS, {{""}}},
653 { DUR_REGENERATION, 0, "", "", "old regeneration", "", D_NO_FLAGS},
654 { DUR_NO_CAST, 0, "", "", "old no cast", "", D_NO_FLAGS},
655 { DUR_GOURMAND, 0, "", "", "old gourmand", "", D_NO_FLAGS},
656 { DUR_ABJURATION_AURA, 0, "", "", "old abjuration", "", D_NO_FLAGS},
657 { DUR_INFUSION, 0, "", "", "old infusion", "", D_NO_FLAGS},
658 { DUR_SHROUD_OF_GOLUBRIA, 0, "", "", "old shroud", "", D_NO_FLAGS},
659 { DUR_FIRE_SHIELD, 0, "", "", "old ring of flames", "", D_NO_FLAGS},
660 { DUR_DARKNESS, 0, "", "", "old darkness", "", D_NO_FLAGS},
661 { DUR_STABBING, 0, "", "", "old stabbing", "", D_NO_FLAGS},
662 { DUR_SCRYING, 0, "", "", "old scrying", "", D_NO_FLAGS},
663 { DUR_ELIXIR_MAGIC, 0, "", "", "old elixir magic", "", D_NO_FLAGS},
664 { DUR_ANTIMAGIC, 0, "", "", "old antimagic", "", D_NO_FLAGS},
665 { DUR_DEVICE_SURGE, 0, "", "", "old device surge", "", D_NO_FLAGS},
666 #endif
667 };
668