Blindfold removal fix
[slashemextended.git] / src / cmd.c
blob603a8282cb7d99b0e5c1077d623204f21f2eb1d2
1 /* SCCS Id: @(#)cmd.c 3.4 2003/02/06 */
2 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
3 /* NetHack may be freely redistributed. See license for details. */
5 #include <ctype.h>
7 #include "hack.h"
8 #include "extern.h"
9 #include "func_tab.h"
10 /* #define DEBUG */ /* uncomment for debugging */
13 * Some systems may have getchar() return EOF for various reasons, and
14 * we should not quit before seeing at least NR_OF_EOFS consecutive EOFs.
16 #if defined(SYSV) || defined(DGUX) || defined(HPUX)
17 #define NR_OF_EOFS 20
18 #endif
20 #define CMD_TRAVEL (char)0x90
22 #ifdef DEBUG
24 * only one "wiz_debug_cmd" routine should be available (in whatever
25 * module you are trying to debug) or things are going to get rather
26 * hard to link :-)
28 extern int wiz_debug_cmd(void);
29 #endif
31 #ifdef DUMB /* stuff commented out in extern.h, but needed here */
32 extern int doapply(void); /**/
33 extern int dorub(void); /**/
34 extern int dojump(void); /**/
35 extern int doextlist(void); /**/
36 extern int dodrop(void); /**/
37 extern int doddrop(void); /**/
38 extern int dodown(void); /**/
39 extern int doup(void); /**/
40 extern int donull(void); /**/
41 extern int dowipe(void); /**/
42 extern int do_mname(void); /**/
43 extern int ddocall(void); /**/
44 extern int dotakeoff(void); /**/
45 extern int doremring(void); /**/
46 extern int dowear(void); /**/
47 extern int doputon(void); /**/
48 extern int doddoremarm(void); /**/
49 extern int dokick(void); /**/
50 extern int dofire(void); /**/
51 extern int dofire(void); /**/
52 extern int dothrow(void); /**/
53 extern int doeat(void); /**/
54 extern int done2(void); /**/
55 extern int doengrave(void); /**/
56 extern int dopickup(void); /**/
57 extern int ddoinv(void); /**/
58 extern int dotypeinv(void); /**/
59 extern int dolook(void); /**/
60 extern int doprgold(void); /**/
61 extern int doprwep(void); /**/
62 extern int doprarm(void); /**/
63 extern int doprring(void); /**/
64 extern int dopramulet(void); /**/
65 extern int doprtool(void); /**/
66 extern int dosuspend(void); /**/
67 extern int doforce(void); /**/
68 extern int doopen(void); /**/
69 extern int doclose(void); /**/
70 extern int dosh(void); /**/
71 extern int dodiscovered(void); /**/
72 extern int doset(void); /**/
73 extern int dotogglepickup(void); /**/
74 extern int dowhatis(void); /**/
75 extern int doquickwhatis(void); /**/
76 extern int dowhatdoes(void); /**/
77 extern int dohelp(void); /**/
78 extern int dohistory(void); /**/
79 extern int doloot(void); /**/
80 extern int dodrink(void); /**/
81 extern int dodip(void); /**/
82 extern int dosacrifice(void); /**/
83 extern int dopray(void); /**/
84 extern int doturn(void); /**/
85 extern int dotech(void); /**/
86 extern int dotechwiz(void); /**/
87 extern int doredraw(void); /**/
88 extern int doread(void); /**/
89 extern int dosave(void); /**/
90 extern int dosearch(void); /**/
91 extern int doidtrap(void); /**/
92 extern int dopay(void); /**/
93 extern int dosit(void); /**/
94 extern int dotalk(void); /**/
95 extern int docast(void); /**/
96 extern int dovspell(void); /**/
97 extern int dotele(void); /**/
98 extern int dountrap(void); /**/
99 extern int doversion(void); /**/
100 extern int doextversion(void); /**/
101 extern int doswapweapon(void); /**/
102 extern int doswapweapon(void); /**/
103 extern int dowield(void); /**/
104 extern int dowieldquiver(void); /**/
105 extern int dowieldquiver(void); /**/
106 extern int dozap(void); /**/
107 extern int doorganize(void); /**/
108 extern int domarkforpet(void); /**/
109 extern int doremoveimarkers(void); /**/
110 extern int dodeletespell(void); /**/
112 #ifdef LIVELOG_SHOUT
113 extern int doshout(void); /**/
114 #endif
116 extern int dolistvanq(void); /**/
118 #endif /* DUMB */
120 #ifdef OVL1
121 static int (*timed_occ_fn)(void);
122 #endif /* OVL1 */
124 STATIC_PTR int doprev_message(void);
125 STATIC_PTR int timed_occupation(void);
126 STATIC_PTR int doextcmd(void);
127 #ifdef BORG
128 STATIC_PTR int doborgtoggle(void);
129 #endif
130 STATIC_PTR int domonability(void);
131 STATIC_PTR int dooverview_or_wiz_where(void);
132 STATIC_PTR int dotravel(void);
133 STATIC_PTR int playersteal(void);
134 #if 0
135 STATIC_PTR int specialpower(void); /* WAC -- use techniques */
136 #endif
137 # ifdef WIZARD
138 STATIC_PTR int wiz_wish(void);
139 STATIC_PTR int wiz_identify(void);
140 STATIC_PTR int wiz_map(void);
141 /* BEGIN TSANTH'S CODE */
142 STATIC_PTR int wiz_gain_ac(void);
143 STATIC_PTR int wiz_gain_level(void);
144 STATIC_PTR int wiz_toggle_invulnerability(void);
145 STATIC_PTR int wiz_detect_monsters(void);
146 /* END TSANTH'S CODE */
147 STATIC_PTR int wiz_genesis(void);
148 STATIC_PTR int wiz_where(void);
149 STATIC_PTR int wiz_detect(void);
150 STATIC_PTR int wiz_panic(void);
151 STATIC_PTR int wiz_polyself(void);
152 STATIC_PTR int wiz_level_tele(void);
153 STATIC_PTR int wiz_level_change(void);
154 STATIC_PTR int wiz_show_seenv(void);
155 STATIC_PTR int wiz_show_vision(void);
156 STATIC_PTR int wiz_mon_polycontrol(void);
157 STATIC_PTR int wiz_show_wmodes(void);
158 extern void list_vanquished(int, BOOLEAN_P); /* showborn patch */
159 #if defined(__BORLANDC__) && !defined(_WIN32)
160 extern void show_borlandc_stats(winid);
161 #endif
162 #ifdef DEBUG_MIGRATING_MONS
163 STATIC_PTR int wiz_migrate_mons(void);
164 #endif
165 STATIC_DCL void count_obj(struct obj *, long *, long *, BOOLEAN_P, BOOLEAN_P);
166 STATIC_DCL void obj_chain(winid, const char *, struct obj *, long *, long *);
167 STATIC_DCL void mon_invent_chain(winid, const char *, struct monst *, long *, long *);
168 STATIC_DCL void mon_chain(winid, const char *, struct monst *, long *, long *);
169 STATIC_DCL void contained(winid, const char *, long *, long *);
170 STATIC_PTR int wiz_show_stats(void);
171 #ifdef DISPLAY_LAYERS
172 STATIC_PTR int wiz_show_display(void);
173 #endif
174 # ifdef PORT_DEBUG
175 STATIC_DCL int wiz_port_debug(void);
176 # endif
177 # endif
178 int enter_explore_mode(void);
179 STATIC_PTR int doattributes(void);
180 STATIC_PTR int doconduct(void); /**/
181 STATIC_PTR boolean minimal_enlightenment(void);
182 STATIC_PTR int makemenu(const char *, struct menu_list *);
184 static NEARDATA struct rm *maploc;
186 static void bind_key(unsigned char, char*);
187 static void init_bind_list(void);
188 static void change_bind_list(void);
189 #ifdef WIZARD
190 static void add_debug_extended_commands(void);
191 #endif /* WIZARD */
193 #ifdef OVLB
194 STATIC_DCL void enlght_line(const char *,const char *,const char *);
195 STATIC_DCL char *enlght_combatinc(const char *,int,int,char *);
196 #endif /* OVLB */
198 static const char* readchar_queue="";
200 STATIC_DCL char *parse(void);
201 STATIC_DCL boolean help_dir(CHAR_P,const char *);
203 STATIC_PTR int domenusystem(void); /* WAC the menus*/
205 void nhwindows_hangup(); /* hacky fix for mac compiling */
207 STATIC_PTR int stefanjerepair(void);
208 STATIC_PTR int deseamshoes(void);
209 static NEARDATA schar delay; /* moves left for stefanje repairs */
211 #ifdef OVL1
213 STATIC_PTR int
214 doprev_message()
217 if (MenuIsBugged) {
218 pline("The previous message command is currently unavailable!");
219 if (flags.moreforced && !MessagesSuppressed) display_nhwindow(WIN_MESSAGE, TRUE); /* --More-- */
220 return 0;
223 if (AutomaticMorePrompt) {
224 pline("No, sorry, you can't review earlier messages.");
225 return 0;
228 return nh_doprev_message();
231 char *
232 montraitname(traitno) /* monstercolor function */
233 int traitno;
236 const char *output;
237 switch (traitno) {
238 case 1:
239 return "silent monsters";
240 case 2:
241 return "monsters that bark";
242 case 3:
243 return "monsters that mew";
244 case 4:
245 return "monsters that roar";
246 case 5:
247 return "monsters that growl";
248 case 6:
249 return "monsters that squeek";
250 case 7:
251 return "monsters that squawk";
252 case 8:
253 return "monsters that hiss";
254 case 9:
255 return "monsters that buzz";
256 case 10:
257 return "monsters that grunt";
258 case 11:
259 return "monsters that neigh";
260 case 12:
261 return "monsters that wail";
262 case 13:
263 return "monsters that gurgle";
264 case 14:
265 return "monsters that burble";
266 case 15:
267 return "monsters that shriek";
268 case 16:
269 return "monsters that rattle with their bones";
270 case 17:
271 return "monsters that laugh";
272 case 18:
273 return "monsters that mumble";
274 case 19:
275 return "monsters that imitate";
276 case 20:
277 return "monsters that make orc sounds";
278 case 21:
279 return "monsters that have humanoid speech";
280 case 22:
281 return "monsters that want to arrest the player";
282 case 23:
283 return "monsters with soldier dialogue";
284 case 24:
285 return "monsters with djinni dialogue";
286 case 25:
287 return "monsters with nurse dialogue";
288 case 26:
289 return "monsters with seduction dialogue";
290 case 27:
291 return "monsters with vampire dialogue";
292 case 28:
293 return "monsters that cuss";
294 case 29:
295 return "monsters that use nemesis dialogue";
296 case 30:
297 return "monsters that mutter cantrips";
298 case 31:
299 return "monsters that howl at the moon";
300 case 32:
301 return "monsters that boast";
302 case 33:
303 return "monsters that make sheep sounds";
304 case 34:
305 return "monsters that make chicken sounds";
306 case 35:
307 return "monsters that make cow sounds";
308 case 36:
309 return "monsters that make parrot sounds";
310 case 37:
311 return "monsters that talk like whores";
312 case 38:
313 return "monsters that produce tender farting noises";
314 case 39:
315 return "monsters that produce squeaky farting noises";
316 case 40:
317 return "monsters that produce loud farting noises";
318 case 41:
319 return "monsters that make boss taunts";
320 case 42:
321 return "monsters that make loud noise";
322 case 43:
323 return "monsters with fire resistance";
324 case 44:
325 return "monsters with cold resistance";
326 case 45:
327 return "monsters with sleep resistance";
328 case 46:
329 return "monsters with disintegration resistance";
330 case 47:
331 return "monsters with shock resistance";
332 case 48:
333 return "monsters with poison resistance";
334 case 49:
335 return "monsters with acid resistance";
336 case 50:
337 return "monsters with petrification resistance";
338 case 51:
339 return "monsters with death resistance";
340 case 52:
341 return "monsters with drain resistance";
342 case 53:
343 return "monsters that require +1 weapons to hit";
344 case 54:
345 return "monsters that require +2 weapons to hit";
346 case 55:
347 return "monsters that require +3 weapons to hit";
348 case 56:
349 return "monsters that require +4 weapons to hit";
350 case 57:
351 return "monsters that hit as a +1 weapon";
352 case 58:
353 return "monsters that hit as a +2 weapon";
354 case 59:
355 return "monsters that hit as a +3 weapon";
356 case 60:
357 return "monsters that hit as a +4 weapon";
358 case 61:
359 return "monsters that can fly";
360 case 62:
361 return "monsters that can swim";
362 case 63:
363 return "monsters that are amorphous";
364 case 64:
365 return "monsters that walk through walls";
366 case 65:
367 return "monsters that cling to the ceiling";
368 case 66:
369 return "monsters that can tunnel";
370 case 67:
371 return "monsters that need a pick-axe for tunneling";
372 case 68:
373 return "monsters that conceal under items";
374 case 69:
375 return "monsters that can hide";
376 case 70:
377 return "monsters that are amphibious";
378 case 71:
379 return "monsters that are breathless";
380 case 72:
381 return "monsters that cannot pick up items";
382 case 73:
383 return "monsters that have no eyes";
384 case 74:
385 return "monsters that have no hands";
386 case 75:
387 return "monsters that have no limbs";
388 case 76:
389 return "monsters that have no head";
390 case 77:
391 return "monsters that are mindless";
392 case 78:
393 return "monsters that are humanoid";
394 case 79:
395 return "monsters that count as animals";
396 case 80:
397 return "monsters that are slithy";
398 case 81:
399 return "monsters that are unsolid";
400 case 82:
401 return "monsters with a thick skin";
402 case 83:
403 return "monsters that can lay eggs";
404 case 84:
405 return "monsters that regenerate health";
406 case 85:
407 return "monsters that can see invisible";
408 case 86:
409 return "monsters that can teleport";
410 case 87:
411 return "monsters that can control teleport";
412 case 88:
413 return "monsters that are acidic when eaten";
414 case 89:
415 return "monsters that are poisonous when eaten";
416 case 90:
417 return "monsters that eat meat";
418 case 91:
419 return "monsters that eat veggies";
420 case 92:
421 return "monsters that eat both meat and veggies";
422 case 93:
423 return "monsters that eat metal";
424 case 94:
425 return "monsters that are not a valid polymorph form";
426 case 95:
427 return "monsters that count as undead";
428 case 96:
429 return "monsters that count as mercenaries";
430 case 97:
431 return "monsters that count as human";
432 case 98:
433 return "monsters that count as elf";
434 case 99:
435 return "monsters that count as dwarf";
436 case 100:
437 return "monsters that count as gnome";
438 case 101:
439 return "monsters that count as orc";
440 case 102:
441 return "monsters that count as hobbit";
442 case 103:
443 return "monsters that count as werecreatures";
444 case 104:
445 return "monsters that count as vampire";
446 case 105:
447 return "monsters that count as lord";
448 case 106:
449 return "monsters that count as prince";
450 case 107:
451 return "monsters that count as minion";
452 case 108:
453 return "monsters that count as giant";
454 case 109:
455 return "monsters that count as major demon";
456 case 110:
457 return "monsters that are always male";
458 case 111:
459 return "monsters that are always female";
460 case 112:
461 return "monsters that are neuter";
462 case 113:
463 return "monsters that have a proper name";
464 case 114:
465 return "monsters that are always spawned hostile";
466 case 115:
467 return "monsters that are always spawned peaceful";
468 case 116:
469 return "monsters that can be tamed with food";
470 case 117:
471 return "monsters that wander randomly";
472 case 118:
473 return "monsters that follow you up and down staircases";
474 case 119:
475 return "monsters that are extra nasty";
476 case 120:
477 return "monsters that are strong";
478 case 121:
479 return "monsters that can throw boulders";
480 case 122:
481 return "monsters that love to collect gold";
482 case 123:
483 return "monsters that love to collect gems";
484 case 124:
485 return "monsters that collect items";
486 case 125:
487 return "monsters that pick up magic items";
488 case 126:
489 return "monsters that want the Amulet of Yendor";
490 case 127:
491 return "monsters that want the Bell of Opening";
492 case 128:
493 return "monsters that want the Book of the Dead";
494 case 129:
495 return "monsters that want the Candelabrum of Invocation";
496 case 130:
497 return "monsters that want quest artifacts";
498 case 131:
499 return "monsters that wait for you to come";
500 case 132:
501 return "monsters that won't react unless you get up close";
502 case 133:
503 return "monsters that have infravision";
504 case 134:
505 return "monsters that can be seen with infravision";
506 case 135:
507 return "monsters that can spontaneously betray you";
508 case 136:
509 return "monsters that cannot be tamed";
510 case 137:
511 return "monsters that avoid being in a line with you";
512 case 138:
513 return "monsters that eat stone";
514 case 139:
515 return "monsters that are classified as petty";
516 case 140:
517 return "monsters that count as pokemon";
518 case 141:
519 return "monsters that are no valid polymorph forms for the player";
520 case 142:
521 return "monsters that never move";
522 case 143:
523 return "monsters that always generate with egotypes";
524 case 144:
525 return "monsters that are telepathic";
526 case 145:
527 return "monsters that can freely walk over spider webs";
528 case 146:
529 return "monsters which petrify others on touch";
530 case 147:
531 return "monsters that count as mind flayers";
532 case 148:
533 return "monsters whose corpses don't decay";
534 case 149:
535 return "monsters that like to mimic objects";
536 case 150:
537 return "monsters that permanently mimic objects";
538 case 151:
539 return "monsters that can turn you to slime when eaten";
540 case 152:
541 return "monsters that are uncommon by a factor 2";
542 case 153:
543 return "monsters that are uncommon by a factor 3";
544 case 154:
545 return "monsters that are uncommon by a factor 5";
546 case 155:
547 return "monsters that are uncommon by a factor 7";
548 case 156:
549 return "monsters that are uncommon by a factor 10";
550 case 157:
551 return "monsters that have mind flayer capabilities";
552 case 158:
553 return "monsters of tiny size";
554 case 159:
555 return "monsters of small size";
556 case 160:
557 return "monsters of medium size";
558 case 161:
559 return "monsters of large size";
560 case 162:
561 return "monsters of huge size";
562 case 163:
563 return "monsters of gigantic size";
564 case 164:
565 return "monsters that spawn in very large groups";
566 case 165:
567 return "unique monsters";
568 case 166:
569 return "monsters that spawn in small groups";
570 case 167:
571 return "monsters that spawn in large groups";
572 case 168:
573 return "monsters that can be genocided";
574 case 169:
575 return "monsters that never leave a corpse";
576 case 170:
577 return "monsters that have passive attacks";
578 case 171:
579 return "monsters that have claw attacks";
580 case 172:
581 return "monsters that have bite attacks";
582 case 173:
583 return "monsters that have kick attacks";
584 case 174:
585 return "monsters that have butt attacks";
586 case 175:
587 return "monsters that have touch attacks";
588 case 176:
589 return "monsters that have sting attacks";
590 case 177:
591 return "monsters that have hug attacks";
592 case 178:
593 return "monsters that have scratch attacks";
594 case 179:
595 return "monsters that have lash attacks";
596 case 180:
597 return "monsters that have spit attacks";
598 case 181:
599 return "monsters that have engulfing attacks";
600 case 182:
601 return "monsters that have breath attacks";
602 case 183:
603 return "monsters that have explosion attacks";
604 case 184:
605 return "monsters that explode when killed";
606 case 185:
607 return "monsters that have gaze attacks";
608 case 186:
609 return "monsters that have tentacle attacks";
610 case 187:
611 return "monsters that have trample attacks";
612 case 188:
613 return "monsters that have beam attacks";
614 case 189:
615 return "monsters that can multiply";
616 case 190:
617 return "monsters that have weapon attacks";
618 case 191:
619 return "monsters that can cast spells";
620 case 192:
621 return "monsters whose attacks do physical damage";
622 case 193:
623 return "monsters whose attacks can shoot magic missiles";
624 case 194:
625 return "monsters whose attacks do fire damage";
626 case 195:
627 return "monsters whose attacks do cold damage";
628 case 196:
629 return "monsters whose attacks can put you to sleep";
630 case 197:
631 return "monsters whose attacks can disintegrate you";
632 case 198:
633 return "monsters whose attacks do shock damage";
634 case 199:
635 return "monsters whose attacks poison you and drain strength";
636 case 200:
637 return "monsters whose attacks do acid damage";
638 case 201:
639 return "monsters whose attacks shoot light rays";
640 case 202:
641 return "monsters whose attacks blind you";
642 case 203:
643 return "monsters whose attacks stun you";
644 case 204:
645 return "monsters whose attacks slow you";
646 case 205:
647 return "monsters whose attacks paralyze you";
648 case 206:
649 return "monsters whose attacks can drain experience levels";
650 case 207:
651 return "monsters whose attacks drain magical energy";
652 case 208:
653 return "monsters whose attacks wound your legs";
654 case 209:
655 return "monsters whose attacks turn you to stone";
656 case 210:
657 return "monsters whose attacks cause it to stick to you";
658 case 211:
659 return "monsters whose attacks allow it to steal gold";
660 case 212:
661 return "monsters whose attacks allow it to steal items";
662 case 213:
663 return "monsters whose attacks allow it to seduce you and steal several items";
664 case 214:
665 return "monsters whose attacks teleport you";
666 case 215:
667 return "monsters whose attacks rust your equipment";
668 case 216:
669 return "monsters whose attacks confuse you";
670 case 217:
671 return "monsters whose attacks digest you";
672 case 218:
673 return "monsters whose attacks heal you";
674 case 219:
675 return "monsters whose attacks wrap around and drown you";
676 case 220:
677 return "monsters whose attacks infect you with lycanthropy";
678 case 221:
679 return "monsters whose attacks poison you and drain dexterity";
680 case 222:
681 return "monsters whose attacks poison you and drain constitution";
682 case 223:
683 return "monsters whose attacks drain your intelligence";
684 case 224:
685 return "monsters whose attacks make you deathly sick";
686 case 225:
687 return "monsters whose attacks rot your equipment";
688 case 226:
689 return "monsters whose attacks start sexual encounters";
690 case 227:
691 return "monsters whose attacks cause you to hallucinate";
692 case 228:
693 return "monsters who attack with the touch of death";
694 case 229:
695 return "monsters who attack to cause fever and chills";
696 case 230:
697 return "monsters whose attacks make you more hungry";
698 case 231:
699 return "monsters whose attacks turn you into a green slime";
700 case 232:
701 return "monsters whose attacks calm you";
702 case 233:
703 return "monsters whose attacks disenchant your equipment";
704 case 234:
705 return "monsters whose attacks polymorph you";
706 case 235:
707 return "monsters whose attacks corrode your equipment";
708 case 236:
709 return "monsters whose attacks tickle you";
710 case 237:
711 return "monsters whose attacks remove Elbereth engravings underneath you";
712 case 238:
713 return "monsters whose attacks cause slippery fingers";
714 case 239:
715 return "monsters whose attacks cause darkness";
716 case 240:
717 return "monsters whose attacks wither your equipment";
718 case 241:
719 return "monsters whose attacks drain your luck";
720 case 242:
721 return "monsters whose attacks numb you";
722 case 243:
723 return "monsters whose attacks freeze you solid";
724 case 244:
725 return "monsters whose attacks push you back";
726 case 245:
727 return "monsters whose attacks burn you";
728 case 246:
729 return "monsters whose attacks cause fear";
730 case 247:
731 return "monsters whose attacks reduce your divine protection";
732 case 248:
733 return "monsters whose attacks poison you and drain a random stat";
734 case 249:
735 return "monsters whose attacks allow the monster to heal its damaged hit points";
736 case 250:
737 return "monsters whose attacks burn your equipment with lava";
738 case 251:
739 return "monsters whose attacks cause fake messages to appear";
740 case 252:
741 return "monsters whose attacks cause Lethe waters to wash over you";
742 case 253:
743 return "monsters whose attacks cancel you";
744 case 254:
745 return "monsters whose attacks banish you";
746 case 255:
747 return "monsters whose attacks poison you and drain wisdom";
748 case 256:
749 return "monsters whose attacks shred your equipment";
750 case 257:
751 return "monsters whose attacks make your equipment wet";
752 case 258:
753 return "monsters whose attacks suck off your gear";
754 case 259:
755 return "monsters whose attacks shock you with high voltage";
756 case 260:
757 return "monsters who attack with big fat head spikes";
758 case 261:
759 return "monsters whose attacks abduct you";
760 case 262:
761 return "monsters whose attacks cause fire, cold, shock and drain life damage";
762 case 263:
763 return "monsters whose attacks become stronger the more often they hit";
764 case 264:
765 return "monsters whose attacks mirror yours";
766 case 265:
767 return "monsters whose attacks act like cursed unicorn horns";
768 case 266:
769 return "monsters whose attacks levelport you, or drain your levels if you can't levelport";
770 case 267:
771 return "monsters whose attacks suck your blood";
772 case 268:
773 return "monsters whose attacks shoot webs";
774 case 269:
775 return "monsters whose attacks teleport your gear away";
776 case 270:
777 return "monsters whose attacks cause depression";
778 case 271:
779 return "monsters whose attacks de-energize you";
780 case 272:
781 return "monsters whose attacks make you lazy";
782 case 273:
783 return "monsters whose attacks poison you and drain charisma";
784 case 274:
785 return "monsters whose attacks take you down a peg or two";
786 case 275:
787 return "monsters whose attacks are empowered with nexus";
788 case 276:
789 return "monsters whose attacks cause loud sound";
790 case 277:
791 return "monsters whose attacks cause gravity to warp around you";
792 case 278:
793 return "monsters whose attacks cause inertia";
794 case 279:
795 return "monsters whose attacks time you";
796 case 280:
797 return "monsters who attack with mana, which is completely irresistible";
798 case 281:
799 return "monsters who attack with plasma clouds";
800 case 282:
801 return "monsters whose attacks can drain your skills";
802 case 283:
803 return "monsters who can cast clerical spells";
804 case 284:
805 return "monsters who can cast arcane spells";
806 case 285:
807 return "monsters whose attacks do random things";
808 case 286:
809 return "monsters whose attacks steal the amulet";
810 case 287:
811 return "monsters whose attacks steal your intrinsics";
812 case 288:
813 return "monsters who attack with psionic blasts";
814 case 289:
815 return "monsters whose attacks badly poison you";
816 case 290:
817 return "monsters whose attacks eat your dreams";
818 case 291:
819 return "monsters whose attacks cause nasty stuff to happen";
820 case 292:
821 return "monsters whose attacks cause bad effects";
822 case 293:
823 return "monsters whose attacks corrode your entire inventory";
824 case 294:
825 return "monsters whose attacks curse your items";
826 case 295:
827 return "monsters whose attacks deactivate your intrinsics";
828 case 296:
829 return "monsters whose attacks cause you to fumble";
830 case 297:
831 return "monsters whose attacks dim you";
832 case 298:
833 return "monsters whose attacks cause map amnesia";
834 case 299:
835 return "monsters whose attacks freeze you with ice blocks";
836 case 300:
837 return "monsters whose attacks vaporize you";
838 case 301:
839 return "monsters who attack with razor-sharp stone edges";
840 case 302:
841 return "monsters whose attacks make you vomit";
842 case 303:
843 return "monsters who attack with highly corrosive chemical waste";
844 case 304:
845 return "monsters whose attacks frenzy you";
846 case 305:
847 return "monsters whose attacks disenchant your gear into the negatives";
848 case 306:
849 return "monsters whose attacks expose you to chaotic forces";
850 case 307:
851 return "monsters whose attacks make you insane";
852 case 308:
853 return "monsters whose attacks create traps";
854 case 309:
855 return "monsters whose attacks increase your carried weight";
856 case 310:
857 return "monsters whose attacks hit you with nether forces";
858 case 311:
859 return "monsters whose attacks are specific to their internal ID";
860 case 312:
861 return "monsters whose attacks are randomized with a very evil RNG";
862 case 313:
863 return "monsters who can cast any random monster spell";
864 case 314:
865 return "monsters that count as bats";
866 case 315:
867 return "monsters that revive after death";
868 case 316:
869 return "monsters that count as rats";
870 case 317:
871 return "monsters that are immune to non-silver weapons";
872 case 318:
873 return "monsters that have intrinsic reflection";
874 case 319:
875 return "monsters that are fleecy-colored <3";
876 case 320:
877 return "monsters that usually spawn tame";
878 case 321:
879 return "monsters that eat leather and other organics";
880 case 322:
881 return "monsters that originate from Castle of the Winds";
882 case 323:
883 return "joke monsters";
884 case 324:
885 return "monsters that originate from Angband";
886 case 325:
887 return "monsters that originate from Steamband";
888 case 326:
889 return "monsters that originate from Animeband";
890 case 327:
891 return "monsters that originate from the Diablo game series";
892 case 328:
893 return "monsters that originate from Dungeon Lords";
894 case 329:
895 return "monsters that originate from Vanilla NetHack or SLASH'EM";
896 case 330:
897 return "monsters that originate from dnethack";
898 case 331:
899 return "monsters whose stats are randomized per playthrough";
900 case 332:
901 return "monster shoes (AmyBSOD loves those!)";
902 case 333:
903 return "monsters that use an evil scentful perfume";
904 case 334:
905 return "monsters whose attacks drain alignment points";
906 case 335:
907 return "monsters whose attacks increase the sin counter";
908 case 336:
909 return "monsters with identity-specific nastiness attacks";
910 case 337:
911 return "monsters whose attacks contaminate you";
912 case 338:
913 return "monsters whose attacks aggravate monsters";
914 case 339:
915 return "monsters that were generated by jonadab's perlscript (nope, slex is not being taken over by robots)";
916 case 340:
917 return "monsters whose attacks delete your data";
918 case 341:
919 return "monsters from the Evil Variant";
920 case 342:
921 return "shapeshifting monsters";
922 case 343:
923 return "monsters that move like grid bugs";
924 case 344:
925 return "monsters whose attacks destroy your armor and weapons";
926 case 345:
927 return "monsters whose attacks cause you to tremble";
928 case 346:
929 return "monsters who can cause Ragnarok";
930 case 347:
931 return "monsters who try to convert you to their religion";
932 case 348:
933 return "HC aliens";
934 case 349:
935 return "monsters whose attacks randomly damage your items";
936 case 350:
937 return "monsters who attack with antimatter";
938 case 351:
939 return "monsters with extra painful attacks";
940 case 352:
941 return "monsters whose attacks increase your technique timeouts";
942 case 353:
943 return "monsters whose attacks reduce your spell memory";
944 case 354:
945 return "monsters whose attacks reduce your skill training";
946 case 355:
947 return "monsters whose attacks permanently damage your stats";
948 case 356:
949 return "monsters who deal random screwup damage";
950 case 357:
951 return "monsters with random thieving attacks";
952 case 358:
953 return "monsters with a game-specific regular attack";
954 case 359:
955 return "monsters with a game-specific nastiness attack";
956 case 360:
957 return "monsters with ranged thorns";
958 case 361:
959 return "monsters that originate from Elona";
960 case 362:
961 return "monsters that put nasty curses on your equipment";
962 case 363:
963 return "monsters whose attacks increase your sanity";
964 case 364:
965 return "monsters whose attacks cause really bad effects";
966 case 365:
967 return "monsters with bleedout attacks";
968 case 366:
969 return "monsters whose attacks shank you out of your armor";
970 case 367:
971 return "monsters that drain your score";
972 case 368:
973 return "monsters that cause terrain terror";
974 case 369:
975 return "monsters with feminism attacks";
976 case 370:
977 return "monsters with levitation attacks";
978 case 371:
979 return "monsters with illusion attacks";
980 case 372:
981 return "monsters whose attacks reduce your magic cancellation";
982 case 373:
983 return "monsters with armor-burning flame attacks";
984 case 374:
985 return "monsters with debuff attacks";
986 case 375:
987 return "monsters whose attacks un-erosionproof your gear";
988 case 376:
989 return "monsters who nivellate your HP and Pw";
990 case 377:
991 return "monsters whose attacks drain your technique levels";
992 case 378:
993 return "monsters with blasphemy attacks";
994 case 379:
995 return "monsters whose attack makes you trip and drop your items";
996 case 380:
997 return "monsters who always flee from you";
998 case 381:
999 return "monsters who always walk randomly";
1000 case 382:
1001 return "monsters who allow you to play casino games";
1002 case 383:
1003 return "monsters who talk gibberish";
1004 case 384:
1005 return "monsters who talk about glyphs";
1006 case 385:
1007 return "monster socks";
1008 case 386:
1009 return "monster pants";
1010 case 387:
1011 return "monsters who are occasionally on the phone";
1012 case 388:
1013 return "monster cars";
1014 case 389:
1015 return "monsters who speak japanese";
1016 case 390:
1017 return "monsters who speak russian";
1018 case 391:
1019 return "monsters who snore";
1020 case 392:
1021 return "monsters who try to photograph you";
1022 case 393:
1023 return "monsters who can repair your stuff";
1024 case 394:
1025 return "monsters who sell drugs to you";
1026 case 395:
1027 return "monsters who generate special combat messages";
1028 case 396:
1029 return "monsters who are mute";
1030 case 397:
1031 return "monsters who blabber about the plague";
1032 case 398:
1033 return "monsters who trumpet";
1034 case 399:
1035 return "monsters who are in pain";
1036 case 400:
1037 return "monsters who brag about their deeds";
1038 case 401:
1039 return "monsters who are royal princesses";
1040 case 402:
1041 return "monsters who are whiny little sissies";
1042 case 403:
1043 return "monsters who want you to clean female shoes";
1044 case 404:
1045 return "monsters who drain your alla";
1046 case 405:
1047 return "monsters who use a pokedex";
1048 case 406:
1049 return "bot monsters";
1050 case 407:
1051 return "monsters who talk about the apocalypse";
1052 case 408:
1053 return "monsters who imitate the quest leader";
1054 case 409:
1055 return "monsters who imitate the quest guardians";
1056 case 410:
1057 return "monsters who haven't been completely coded";
1058 case 411:
1059 return "self-harming monsters";
1060 case 412:
1061 return "monsters with a clock";
1062 case 413:
1063 return "oh-god monsters";
1064 case 414:
1065 return "monsters who always say 'wolloh'";
1066 case 415:
1067 return "monsters who let you guess the secret code";
1068 case 416:
1069 return "monsters who work as barbers";
1070 case 417:
1071 return "monsters who are affected by your areola diameter";
1072 case 418:
1073 return "monsters who can stabilize the space around";
1074 case 419:
1075 return "monsters who are prone to escape";
1076 case 420:
1077 return "monsters who are easy to become afraid";
1078 case 421:
1079 return "monsters who cannot be pokedexed";
1080 case 422:
1081 return "monsters that spawn dead";
1082 case 423:
1083 return "monsters who belong to the tree squad";
1084 case 424:
1085 return "monsters who belong to the metal mafia";
1086 case 425:
1087 return "monsters who belong to the deep state";
1088 case 426:
1089 return "monsters who originate from Age of Empires";
1090 case 427:
1091 return "monsters who originate from Fallout or The Elder Scrolls";
1092 case 428:
1093 return "monsters with inversion attacks";
1094 case 429:
1095 return "monsters with wince attacks";
1096 case 430:
1097 return "monsters with debt-increasing attacks";
1098 case 431:
1099 return "monsters who swap positions with you";
1100 case 432:
1101 return "monsters whose attacks teleport you to them";
1102 case 433:
1103 return "monsters who were generated by ChatGPT";
1104 case 434:
1105 return "monsters that originate from Cataclysm DDA";
1107 default:
1108 impossible("bad trait no %d, please update montraitname() in cmd.c", traitno);
1109 return "unknown";
1115 /* Count down by decrementing multi */
1116 STATIC_PTR int
1117 timed_occupation()
1119 (*timed_occ_fn)();
1120 if (multi > 0)
1121 multi--;
1122 return multi > 0;
1125 #ifdef HANGUPHANDLING
1126 /* some very old systems, or descendents of such systems, expect signal
1127 handlers to have return type `int', but they don't actually inspect
1128 the return value so we should be safe using `void' unconditionally */
1129 /*ARGUSED*/
1130 void
1131 hangup(int sig_unused) /* called as signal() handler, so sent
1132 at least one arg */
1135 if (u.hangupcheat) {
1136 u.hangupcheat++;
1137 u.hanguppenalty += 10; /* unfortunately we can't determine if you hanged up during a prompt! --Amy */
1138 if (multi) u.hangupparalysis += abs(multi);
1139 if (u.hangupparalysis > 5) u.hangupparalysis = 5; /* sanity check */
1142 if (program_state.exiting)
1143 program_state.in_moveloop = 0;
1144 nhwindows_hangup();
1145 #ifdef SAFERHANGUP
1146 /* When using SAFERHANGUP, the done_hup flag it tested in rhack
1147 and a couple of other places; actual hangup handling occurs then.
1148 This is 'safer' because it disallows certain cheats and also
1149 protects against losing objects in the process of being thrown,
1150 but also potentially riskier because the disconnected program
1151 must continue running longer before attempting a hangup save. */
1152 program_state.done_hup++;
1153 /* defer hangup iff game appears to be in progress */
1154 if (program_state.in_moveloop && program_state.something_worth_saving)
1155 return;
1156 #endif /* SAFERHANGUP */
1157 end_of_input();
1160 void
1161 end_of_input(void)
1163 #ifdef NOSAVEONHANGUP
1164 #ifdef INSURANCE
1166 /* uhh who programmed this? preserve_locks exists only with HANGUPHANDLING... --Amy */
1168 if (flags.ins_chkpt && program_state.something_worth_saving)
1169 program_state.preserve_locks = 1; /* keep files for recovery */
1170 #endif
1171 program_state.something_worth_saving = 0; /* don't save */
1172 #endif
1174 /* not "#ifndef NOSAVEONHANGUP", or the code isn't run correctly! --Amy */
1175 #ifndef SAFERHANGUP
1176 if (!program_state.done_hup++)
1177 #endif
1178 if (program_state.something_worth_saving)
1179 (void) dosave0();
1180 if (iflags.window_inited)
1181 exit_nhwindows((char *) 0);
1182 clearlocks();
1183 terminate(EXIT_SUCCESS);
1184 /*NOTREACHED*/ /* not necessarily true for vms... */
1185 return;
1187 #endif /* HANGUPHANDLING */
1189 /* If you have moved since initially setting some occupations, they
1190 * now shouldn't be able to restart.
1192 * The basic rule is that if you are carrying it, you can continue
1193 * since it is with you. If you are acting on something at a distance,
1194 * your orientation to it must have changed when you moved.
1196 * The exception to this is taking off items, since they can be taken
1197 * off in a number of ways in the intervening time, screwing up ordering.
1199 * Currently: Take off all armor.
1200 * Picking Locks / Forcing Chests.
1201 * Setting traps.
1203 void
1204 reset_occupations()
1206 reset_remarm();
1207 reset_pick();
1208 reset_trapset();
1211 /* If a time is given, use it to timeout this function, otherwise the
1212 * function times out by its own means.
1214 void
1215 set_occupation(fn, txt, xtime)
1216 int (*fn)(void);
1217 const char *txt;
1218 int xtime;
1220 if (xtime) {
1221 occupation = timed_occupation;
1222 timed_occ_fn = fn;
1223 } else
1224 occupation = fn;
1225 occtxt = txt;
1226 occtime = 0;
1227 return;
1231 static char popch(void);
1233 /* Provide a means to redo the last command. The flag `in_doagain' is set
1234 * to true while redoing the command. This flag is tested in commands that
1235 * require additional input (like `throw' which requires a thing and a
1236 * direction), and the input prompt is not shown. Also, while in_doagain is
1237 * TRUE, no keystrokes can be saved into the saveq.
1239 #define BSIZE 20
1240 static char pushq[BSIZE], saveq[BSIZE];
1241 static NEARDATA int phead, ptail, shead, stail;
1243 static char
1244 popch() {
1245 /* If occupied, return '\0', letting tgetch know a character should
1246 * be read from the keyboard. If the character read is not the
1247 * ABORT character (as checked in pcmain.c), that character will be
1248 * pushed back on the pushq.
1250 if (occupation) return '\0';
1251 if (in_doagain) return(char)((shead != stail) ? saveq[stail++] : '\0');
1252 else return(char)((phead != ptail) ? pushq[ptail++] : '\0');
1255 char
1256 pgetchar() { /* curtesy of aeb@cwi.nl */
1257 register int ch;
1259 if (iflags.debug_fuzzer) return randomkey();
1261 if(!(ch = popch()))
1262 ch = nhgetch();
1263 return((char)ch);
1266 /* A ch == 0 resets the pushq */
1267 void
1268 pushch(ch)
1269 char ch;
1271 if (!ch)
1272 phead = ptail = 0;
1273 if (phead < BSIZE)
1274 pushq[phead++] = ch;
1275 return;
1278 /* A ch == 0 resets the saveq. Only save keystrokes when not
1279 * replaying a previous command.
1281 void
1282 savech(ch)
1283 char ch;
1285 if (!in_doagain) {
1286 if (!ch)
1287 phead = ptail = shead = stail = 0;
1288 else if (shead < BSIZE)
1289 saveq[shead++] = ch;
1291 return;
1294 #endif /* OVL1 */
1295 #ifdef OVLB
1297 STATIC_PTR int
1298 doextcmd() /* here after # - now read a full-word command */
1300 int idx, retval;
1302 /* keep repeating until we don't run help or quit */
1303 do {
1304 idx = get_ext_cmd();
1305 if (idx < 0) return 0; /* quit */
1307 retval = (*extcmdlist[idx].ef_funct)();
1308 } while (extcmdlist[idx].ef_funct == doextlist);
1310 return retval;
1314 doextlist() /* here after #? - now list all full-word commands */
1316 register const struct ext_func_tab *efp;
1317 char buf[BUFSZ];
1318 winid datawin;
1320 datawin = create_nhwindow(NHW_TEXT);
1321 putstr(datawin, 0, "");
1322 putstr(datawin, 0, " Extended Commands List");
1323 putstr(datawin, 0, "");
1324 putstr(datawin, 0, " Press '#', then type:");
1325 putstr(datawin, 0, "");
1327 for(efp = extcmdlist; efp->ef_txt; efp++) {
1328 /* Show name and text for each command. Autocompleted
1329 * commands are marked with an asterisk ('*'). */
1330 sprintf(buf, " %c %-15s - %s.",
1331 efp->autocomplete ? '*' : ' ',
1332 efp->ef_txt, efp->ef_desc);
1333 putstr(datawin, 0, buf);
1335 putstr(datawin, 0, "");
1336 putstr(datawin, 0, " Commands marked with a * will be autocompleted.");
1337 display_nhwindow(datawin, FALSE);
1338 destroy_nhwindow(datawin);
1339 return 0;
1342 STATIC_PTR int
1343 doremoveimarkers()
1345 int x, y;
1347 if (uarmc && uarmc->oartifact == ART_TURN_LOSS_EXTREME) return 0;
1349 for(x=0; x<COLNO; x++) for(y=0; y<ROWNO; y++) {
1350 if (isok(x, y)) {
1351 if (memory_is_invisible(x, y)) {
1352 unmap_object(x,y);
1353 newsym(x,y);
1357 pline("Remembered monster markers removed.");
1359 return 0;
1363 #ifdef BORG
1364 static int doborgtoggle(void) {
1365 if (yn_function("Really enable cyborg?", ynqchars, 'n') == 'y') {
1366 borg_on = 1;
1367 pline("The cyborg is enabled.... Good luck!");
1369 return 0;
1371 #endif
1373 #if defined(TTY_GRAPHICS) || defined(CURSES_GRAPHICS) || defined(GL_GRAPHICS) || defined(SDL_GRAPHICS)
1374 #define MAX_EXT_CMD 200 /* Change if we ever have > 40 ext cmds */ /* So we can only rebind keys up to 200 times? Although unlikely to ever be encountered, I would call this a bug --Elronnd */
1376 * This is currently used only by the tty port and is
1377 * controlled via runtime option 'extmenu'
1378 * -AJA- The SDL/GL window systems use it too.
1381 extcmd_via_menu() /* here after # - now show pick-list of possible commands */
1383 const struct ext_func_tab *efp;
1384 menu_item *pick_list = (menu_item *)0;
1385 winid win;
1386 anything any;
1387 const struct ext_func_tab *choices[MAX_EXT_CMD];
1388 char buf[BUFSZ];
1389 char cbuf[QBUFSZ], prompt[QBUFSZ], fmtstr[20];
1390 int i, n, nchoices, acount;
1391 int ret, biggest;
1392 int accelerator, prevaccelerator;
1393 int matchlevel = 0;
1395 ret = 0;
1396 cbuf[0] = '\0';
1397 biggest = 0;
1398 while (!ret) {
1399 i = n = 0;
1400 accelerator = 0;
1401 any.a_void = 0;
1402 /* populate choices */
1403 for(efp = extcmdlist; efp->ef_txt; efp++) {
1404 if (!matchlevel || !strncmp(efp->ef_txt, cbuf, matchlevel)) {
1405 choices[i++] = efp;
1406 if ((int)strlen(efp->ef_desc) > biggest) {
1407 biggest = strlen(efp->ef_desc);
1408 sprintf(fmtstr,"%%-%ds", biggest + 15);
1410 #ifdef DEBUG
1411 if (i >= MAX_EXT_CMD - 2) {
1412 impossible("Exceeded %d extended commands in doextcmd() menu",
1413 MAX_EXT_CMD - 2);
1414 return 0;
1416 #endif
1419 choices[i] = (struct ext_func_tab *)0;
1420 nchoices = i;
1421 /* if we're down to one, we have our selection so get out of here */
1422 if (nchoices == 1) {
1423 for (i = 0; extcmdlist[i].ef_txt != (char *)0; i++)
1424 if (!strncmpi(extcmdlist[i].ef_txt, cbuf, matchlevel)) {
1425 ret = i;
1426 break;
1428 break;
1431 /* otherwise... */
1432 win = create_nhwindow(NHW_MENU);
1433 start_menu(win);
1434 prevaccelerator = 0;
1435 acount = 0;
1436 for(i = 0; choices[i]; ++i) {
1437 accelerator = choices[i]->ef_txt[matchlevel];
1438 if (accelerator != prevaccelerator || nchoices < (ROWNO - 3)) {
1439 if (acount) {
1440 /* flush the extended commands for that letter already in buf */
1441 sprintf(buf, fmtstr, prompt);
1442 any.a_char = prevaccelerator;
1443 add_menu(win, NO_GLYPH, &any, any.a_char, 0,
1444 ATR_NONE, buf, FALSE);
1445 acount = 0;
1448 prevaccelerator = accelerator;
1449 if (!acount || nchoices < (ROWNO - 3)) {
1450 sprintf(prompt, "%s [%s]", choices[i]->ef_txt,
1451 choices[i]->ef_desc);
1452 } else if (acount == 1) {
1453 sprintf(prompt, "%s or %s", choices[i-1]->ef_txt,
1454 choices[i]->ef_txt);
1455 } else {
1456 strcat(prompt," or ");
1457 strcat(prompt, choices[i]->ef_txt);
1459 ++acount;
1461 if (acount) {
1462 /* flush buf */
1463 sprintf(buf, fmtstr, prompt);
1464 any.a_char = prevaccelerator;
1465 add_menu(win, NO_GLYPH, &any, any.a_char, 0, ATR_NONE, buf, FALSE);
1467 sprintf(prompt, "Extended Command: %s", cbuf);
1468 end_menu(win, prompt);
1469 n = select_menu(win, PICK_ONE, &pick_list);
1470 destroy_nhwindow(win);
1471 if (n==1) {
1472 if (matchlevel > (QBUFSZ - 2)) {
1473 free((void *)pick_list);
1474 #ifdef DEBUG
1475 impossible("Too many characters (%d) entered in extcmd_via_menu()",
1476 matchlevel);
1477 #endif
1478 ret = -1;
1479 } else {
1480 cbuf[matchlevel++] = pick_list[0].item.a_char;
1481 cbuf[matchlevel] = '\0';
1482 free((void *)pick_list);
1484 } else {
1485 if (matchlevel) {
1486 ret = 0;
1487 matchlevel = 0;
1488 } else
1489 ret = -1;
1492 return ret;
1494 #endif
1496 STATIC_PTR int
1497 dooverview_or_wiz_where()
1499 #ifdef WIZARD
1500 if (wizard) return wiz_where();
1501 else
1502 #endif
1503 dooverview();
1504 return 0;
1507 /* #monster command - use special monster ability while polymorphed */
1508 /* edit by Amy - some polymorph forms have several abilities, so I'll try to make the player able to choose. */
1509 STATIC_PTR int
1510 domonability()
1512 char buf[BUFSZ];
1514 /* snail can't equip pick-axes, so should be able to dig without one from time to time --Amy */
1515 if (Race_if(PM_ELONA_SNAIL) && !u.snaildigging && yn("Do you want to fire a digging ray?")=='y' ) {
1516 u.snaildigging = rnz(1000);
1517 if (!PlayerCannotUseSkills && u.snaildigging >= 2) {
1518 switch (P_SKILL(P_SQUEAKING)) {
1519 case P_BASIC: u.snaildigging *= 9; u.snaildigging /= 10; break;
1520 case P_SKILLED: u.snaildigging *= 8; u.snaildigging /= 10; break;
1521 case P_EXPERT: u.snaildigging *= 7; u.snaildigging /= 10; break;
1522 case P_MASTER: u.snaildigging *= 6; u.snaildigging /= 10; break;
1523 case P_GRAND_MASTER: u.snaildigging *= 5; u.snaildigging /= 10; break;
1524 case P_SUPREME_MASTER: u.snaildigging *= 4; u.snaildigging /= 10; break;
1525 default: break;
1528 getdir((char *)0);
1529 zap_dig(FALSE); /* dig only one tile, just like in Elona */
1530 use_skill(P_SQUEAKING, rnd(20));
1531 return TRUE;
1533 else if (uarmf && uarmf->oartifact == ART_STEFANJE_S_PROBLEM && yn("Do you want to repair your 'Stefanje' sandals?")=='y') {
1534 if (uarmf->spe >= 0) {
1535 pline("Your sandals don't need repairs right now!");
1536 return TRUE;
1537 } else {
1538 delay = (uarmf->spe < -10) ? (-((uarmf->spe + 51) * 3)) : (-((uarmf->spe + 23) * 10));
1539 set_occupation(stefanjerepair, "repairing your 'Stefanje' sandals", 0);
1540 return TRUE;
1542 } else if (uarmf && uarmf->oartifact == ART_ENDLESS_DESEAMING && yn("Do you want to clean the dog shit from your Anastasia shoes?")=='y') {
1543 if (!uarmf->oeroded && !uarmf->oeroded2) {
1544 pline("Your shoes currently don't have any shit on their soles and therefore don't need cleaning.");
1545 return TRUE;
1546 } else {
1547 delay = -(rn1(50, 50));
1548 set_occupation(deseamshoes, "deseaming your Anastasia shoes", 0);
1549 return TRUE;
1551 } else if (uarmf && uarmf->oartifact == ART_THAT_S_SUPER_UNFAIR && yn("Do you want to clean the dog shit from your Kati shoes?")=='y') {
1552 if (!uarmf->oeroded && !uarmf->oeroded2) {
1553 pline("Your shoes currently don't have any shit on their soles and therefore don't need cleaning.");
1554 return TRUE;
1555 } else {
1556 delay = -rn1(50, 50);
1557 set_occupation(deseamshoes, "deseaming your Kati shoes", 0);
1558 return TRUE;
1561 } else if (issokosolver && !u.sokosolveboulder && yn("Do you want to create a boulder?")=='y' ) {
1562 u.sokosolveboulder = rnz(1000);
1563 if (!PlayerCannotUseSkills && u.sokosolveboulder >= 2) {
1564 switch (P_SKILL(P_SQUEAKING)) {
1565 case P_BASIC: u.sokosolveboulder *= 9; u.sokosolveboulder /= 10; break;
1566 case P_SKILLED: u.sokosolveboulder *= 8; u.sokosolveboulder /= 10; break;
1567 case P_EXPERT: u.sokosolveboulder *= 7; u.sokosolveboulder /= 10; break;
1568 case P_MASTER: u.sokosolveboulder *= 6; u.sokosolveboulder /= 10; break;
1569 case P_GRAND_MASTER: u.sokosolveboulder *= 5; u.sokosolveboulder /= 10; break;
1570 case P_SUPREME_MASTER: u.sokosolveboulder *= 4; u.sokosolveboulder /= 10; break;
1571 default: break;
1574 register struct obj *otmp2;
1575 otmp2 = mksobj(BOULDER, FALSE, FALSE, FALSE);
1576 if (!otmp2) {
1577 pline("For some strange reason, no boulder appeared!");
1578 return TRUE;
1580 otmp2->quan = 1;
1581 otmp2->owt = weight(otmp2);
1582 place_object(otmp2, u.ux, u.uy);
1583 stackobj(otmp2);
1584 newsym(u.ux, u.uy);
1585 pline("Kadoom! A boulder appeared underneath you.");
1586 use_skill(P_SQUEAKING, rnd(10));
1587 return TRUE;
1588 } else if (issokosolver && !u.sokosolveuntrap && yn("Do you want to disarm adjacent traps? (this doesn't work on pits, holes or other boulder-swallowing traps)")=='y' ) {
1589 int i, j, bd = 1, trpcount = 0, undtrpcnt = 0;
1590 struct trap *ttmp;
1592 u.sokosolveuntrap = rnz(4000);
1593 if (!PlayerCannotUseSkills && u.sokosolveuntrap >= 2) {
1594 switch (P_SKILL(P_SQUEAKING)) {
1595 case P_BASIC: u.sokosolveuntrap *= 9; u.sokosolveuntrap /= 10; break;
1596 case P_SKILLED: u.sokosolveuntrap *= 8; u.sokosolveuntrap /= 10; break;
1597 case P_EXPERT: u.sokosolveuntrap *= 7; u.sokosolveuntrap /= 10; break;
1598 case P_MASTER: u.sokosolveuntrap *= 6; u.sokosolveuntrap /= 10; break;
1599 case P_GRAND_MASTER: u.sokosolveuntrap *= 5; u.sokosolveuntrap /= 10; break;
1600 case P_SUPREME_MASTER: u.sokosolveuntrap *= 4; u.sokosolveuntrap /= 10; break;
1601 default: break;
1605 for (i = -bd; i <= bd; i++) for(j = -bd; j <= bd; j++) {
1607 if ((ttmp = t_at(u.ux + i, u.uy + j)) != 0) {
1608 if (ttmp->ttyp == MAGIC_PORTAL || ttmp->ttyp == HOLE || ttmp->ttyp == TRAPDOOR || ttmp->ttyp == SHAFT_TRAP || ttmp->ttyp == CURRENT_SHAFT || ttmp->ttyp == PIT || ttmp->ttyp == SPIKED_PIT || ttmp->ttyp == GIANT_CHASM || ttmp->ttyp == SHIT_PIT || ttmp->ttyp == MANA_PIT || ttmp->ttyp == ANOXIC_PIT || ttmp->ttyp == HYPOXIC_PIT || ttmp->ttyp == ACID_PIT) {
1609 undtrpcnt++;
1610 continue;
1612 deltrap(ttmp);
1613 trpcount++;
1617 (void) doredraw();
1618 pline("%d traps were disarmed.", trpcount);
1619 if (undtrpcnt) pline("%d traps could not be disarmed.", undtrpcnt);
1620 use_skill(P_SQUEAKING, rnd(30));
1621 return TRUE;
1622 } else if ((can_breathe(youmonst.data) || (!PlayerCannotUseSkills && P_SKILL(P_SYMBIOSIS) >= P_EXPERT && uactivesymbiosis && can_breathe(&mons[u.usymbiote.mnum]) )) && yn("Do you want to use your breath attack?")=='y' ) return dobreathe();
1623 else if ((attacktype(youmonst.data, AT_SPIT) || (!PlayerCannotUseSkills && P_SKILL(P_SYMBIOSIS) >= P_BASIC && uactivesymbiosis && attacktype(&mons[u.usymbiote.mnum], AT_SPIT) )) && yn("Do you want to use your spit attack?")=='y' ) return dospit();
1624 else if ((youmonst.data->mlet == S_NYMPH || (!PlayerCannotUseSkills && P_SKILL(P_SYMBIOSIS) >= P_MASTER && uactivesymbiosis && ((mons[u.usymbiote.mnum].mlet) == S_NYMPH) )) && yn("Do you want to remove an iron ball?")=='y' ) return doremove();
1625 else if ((attacktype(youmonst.data, AT_GAZE) || (!PlayerCannotUseSkills && P_SKILL(P_SYMBIOSIS) >= P_SKILLED && uactivesymbiosis && attacktype(&mons[u.usymbiote.mnum], AT_GAZE) )) && yn("Do you want to use your gaze attack?")=='y' ) return dogaze();
1626 else if (is_were(youmonst.data) && yn("Do you want to summon help?")=='y' ) return dosummon();
1627 else if ((webmaker(youmonst.data) || (!PlayerCannotUseSkills && P_SKILL(P_SYMBIOSIS) >= P_SKILLED && uactivesymbiosis && webmaker(&mons[u.usymbiote.mnum]) )) && yn("Do you want to spin webs?")=='y' ) return dospinweb();
1628 else if ((is_hider(youmonst.data) || (!PlayerCannotUseSkills && P_SKILL(P_SYMBIOSIS) >= P_SKILLED && uactivesymbiosis && is_hider(&mons[u.usymbiote.mnum]) )) && yn("Do you want to hide?")=='y' ) return dohide();
1629 else if ((is_mind_flayer(youmonst.data) || (uimplant && uimplant->oartifact == ART_TSCHHKRZKRZ) || (!PlayerCannotUseSkills && P_SKILL(P_SYMBIOSIS) >= P_SKILLED && uactivesymbiosis && is_mind_flayer(&mons[u.usymbiote.mnum]) )) && yn("Do you want to emit a mind blast?")=='y' ) return domindblast();
1630 else if (splittinggremlin(youmonst.data) && yn("Do you want to replicate in water?")=='y' ) {
1631 if(IS_FOUNTAIN(levl[u.ux][u.uy].typ)) {
1632 if (split_mon(&youmonst, (struct monst *)0))
1633 dryup(u.ux, u.uy, TRUE);
1634 } else There("is no fountain here.");
1635 } else if (splittinglavagremlin(youmonst.data) && yn("Do you want to replicate in lava?")=='y' ) {
1636 if(levl[u.ux][u.uy].typ == LAVAPOOL) {
1637 (split_mon(&youmonst, (struct monst *)0));
1638 } else There("is no lava here.");
1639 } else if ( (is_unicorn(youmonst.data) || (!PlayerCannotUseSkills && P_SKILL(P_SYMBIOSIS) >= P_EXPERT && uactivesymbiosis && is_unicorn(&mons[u.usymbiote.mnum])) || (Race_if(PM_PLAYER_UNICORN) && !Upolyd) ) && yn("Do you want to cure yourself with your horn?")=='y' ) {
1640 use_unicorn_horn((struct obj *)0);
1641 return 1;
1642 } else if ( (youmonst.data->msound == MS_CONVERT || (Race_if(PM_TURMENE) && !Upolyd) || (Race_if(PM_EGYMID) && !Upolyd) || (Race_if(PM_PERVERT) && !Upolyd) || (Race_if(PM_IRAHA) && !Upolyd) || (!PlayerCannotUseSkills && P_SKILL(P_SYMBIOSIS) >= P_BASIC && uactivesymbiosis && mons[u.usymbiote.mnum].msound == MS_CONVERT )) && yn("Do you want to preach conversion sermon?")=='y' ) {
1643 playermsconvert();
1644 } else if ((youmonst.data->msound == MS_HCALIEN || (Race_if(PM_HC_ALIEN) && !Upolyd) || (Race_if(PM_SLYER_ALIEN) && !Upolyd) || (!PlayerCannotUseSkills && P_SKILL(P_SYMBIOSIS) >= P_EXPERT && uactivesymbiosis && mons[u.usymbiote.mnum].msound == MS_HCALIEN )) && yn("Do you want to chant a wouwou taunt?")=='y' ) {
1645 playerwouwoutaunt();
1646 } else if ((youmonst.data->msound == MS_WHORE || (!PlayerCannotUseSkills && P_SKILL(P_SYMBIOSIS) >= P_EXPERT && uactivesymbiosis && mons[u.usymbiote.mnum].msound == MS_WHORE )) && yn("Do you want to use your sexiness against the monsters?")=='y' ) {
1647 playerwhoretalk();
1648 } else if ((youmonst.data->msound == MS_SUPERMAN || (!PlayerCannotUseSkills && P_SKILL(P_SYMBIOSIS) >= P_GRAND_MASTER && uactivesymbiosis && mons[u.usymbiote.mnum].msound == MS_SUPERMAN )) && yn("Do you want to make a superman taunt?")=='y' ) {
1649 playersupermantaunt();
1650 } else if ((youmonst.data->msound == MS_BONES || (!PlayerCannotUseSkills && P_SKILL(P_SYMBIOSIS) >= P_SKILLED && uactivesymbiosis && mons[u.usymbiote.mnum].msound == MS_BONES )) && yn("Do you want to rattle?")=='y' ) {
1651 playerrattlebones();
1652 } else if ((youmonst.data->msound == MS_SHRIEK || (!PlayerCannotUseSkills && P_SKILL(P_SYMBIOSIS) >= P_BASIC && uactivesymbiosis && mons[u.usymbiote.mnum].msound == MS_SHRIEK )) && yn("Do you want to shriek?")=='y' ) {
1653 You("shriek.");
1654 if(u.uburied)
1655 pline("Unfortunately sound does not carry well through rock.");
1656 else aggravate();
1657 } else if ((youmonst.data->msound == MS_FART_QUIET || (PlayerCannotUseSkills && P_SKILL(P_SYMBIOSIS) >= P_BASIC && uactivesymbiosis && mons[u.usymbiote.mnum].msound == MS_FART_QUIET) || (Race_if(PM_LOLI) && !Upolyd && mons[PM_LOLI].msound == MS_FART_QUIET)) && yn("Do you want to fart?")=='y' ) {
1658 if (u.uhunger <= 10) {
1659 pline("There isn't enough gas stored in your %s butt!", flags.female ? "sexy" : "ugly");
1660 return 0;
1661 } else {
1662 morehungry(10);
1663 pline("You produce %s farting noises with your %s butt.", rn2(2) ? "tender" : "soft", flags.female ? "sexy" : "ugly");
1664 if (practicantterror) {
1665 pline("%s booms: 'Stop farting in public, you disgusting practicant! Now you have to pay a fine of 500 zorkmids to me!'", noroelaname());
1666 fineforpracticant(500, 0, 0);
1669 use_skill(P_SQUEAKING, 1);
1670 u.cnd_fartingcount++;
1671 if (Role_if(PM_SOCIAL_JUSTICE_WARRIOR)) sjwtrigger();
1673 if (uarmf && uarmf->oartifact == ART_SARAH_S_GRANNY_WEAR) {
1674 healup((level_difficulty() + 5), 0, FALSE, FALSE);
1675 morehungry(200);
1676 return 1;
1679 if (uarmf && uarmf->oartifact == ART_ELIANE_S_SHIN_SMASH) {
1680 pline("The farting gas destroys your footwear instantly.");
1681 useup(uarmf);
1683 if (uarmf && uarmf->oartifact == ART_ELIANE_S_COMBAT_SNEAKERS) {
1684 pline("Eek! You can't stand farting gas!");
1685 badeffect();
1686 badeffect();
1687 badeffect();
1688 badeffect();
1690 if (!extralongsqueak()) badeffect();
1692 if (uarmh && itemhasappearance(uarmh, APP_BREATH_CONTROL_HELMET) ) {
1693 pline("Your breath control helmet keeps pumping the farting gas into your %s...", body_part(NOSE));
1694 badeffect();
1695 badeffect();
1698 if (uarmh && uarmh->oartifact == ART_VACUUM_CLEANER_DEATH) {
1699 pline("The farting gas almost asphyxiates you!");
1700 badeffect();
1701 badeffect();
1702 badeffect();
1703 badeffect();
1704 badeffect();
1705 losehp(rnd(u.ulevel * 3), "suffocating on farting gas", KILLED_BY);
1708 return 1;
1710 } else if ((youmonst.data->msound == MS_FART_NORMAL || (uarmf && uarmf->oartifact == ART_CLAUDIA_S_BEAUTY) || (PlayerCannotUseSkills && P_SKILL(P_SYMBIOSIS) >= P_BASIC && uactivesymbiosis && mons[u.usymbiote.mnum].msound == MS_FART_NORMAL) || (Race_if(PM_LOLI) && !Upolyd && mons[PM_LOLI].msound == MS_FART_NORMAL)) && yn("Do you want to fart?")=='y' ) {
1711 if (u.uhunger <= 10) {
1712 pline("There isn't enough gas stored in your %s butt!", flags.female ? "sexy" : "ugly");
1713 return 0;
1714 } else {
1715 morehungry(10);
1716 pline("You produce %s farting noises with your %s butt.", rn2(2) ? "beautiful" : "squeaky", flags.female ? "sexy" : "ugly");
1717 if (practicantterror) {
1718 pline("%s booms: 'Stop farting in public, you disgusting practicant! Now you have to pay a fine of 500 zorkmids to me!'", noroelaname());
1719 fineforpracticant(500, 0, 0);
1721 use_skill(P_SQUEAKING, 1);
1722 u.cnd_fartingcount++;
1723 if (Role_if(PM_SOCIAL_JUSTICE_WARRIOR)) sjwtrigger();
1725 if (uarmf && uarmf->oartifact == ART_ELIANE_S_SHIN_SMASH) {
1726 pline("The farting gas destroys your footwear instantly.");
1727 useup(uarmf);
1729 if (uarmf && uarmf->oartifact == ART_ELIANE_S_COMBAT_SNEAKERS) {
1730 pline("Eek! You can't stand farting gas!");
1731 badeffect();
1732 badeffect();
1733 badeffect();
1734 badeffect();
1736 if (!extralongsqueak()) badeffect();
1738 if (uarmh && itemhasappearance(uarmh, APP_BREATH_CONTROL_HELMET) ) {
1739 pline("Your breath control helmet keeps pumping the farting gas into your %s...", body_part(NOSE));
1740 badeffect();
1741 badeffect();
1744 if (uarmh && uarmh->oartifact == ART_VACUUM_CLEANER_DEATH) {
1745 pline("The farting gas almost asphyxiates you!");
1746 badeffect();
1747 badeffect();
1748 badeffect();
1749 badeffect();
1750 badeffect();
1751 losehp(rnd(u.ulevel * 3), "suffocating on farting gas", KILLED_BY);
1754 return 1;
1756 } else if ((youmonst.data->msound == MS_FART_LOUD || (PlayerCannotUseSkills && P_SKILL(P_SYMBIOSIS) >= P_BASIC && uactivesymbiosis && mons[u.usymbiote.mnum].msound == MS_FART_LOUD) || (Race_if(PM_LOLI) && !Upolyd && mons[PM_LOLI].msound == MS_FART_LOUD)) && yn("Do you want to fart?")=='y' ) {
1757 if (u.uhunger <= 10) {
1758 pline("There isn't enough gas stored in your %s butt!", flags.female ? "sexy" : "ugly");
1759 return 0;
1760 } else {
1761 morehungry(10);
1762 pline("You produce %s farting noises with your %s butt.", rn2(2) ? "disgusting" : "loud", flags.female ? "sexy" : "ugly");
1763 if (practicantterror) {
1764 pline("%s booms: 'Stop farting in public, you disgusting practicant! Now you have to pay a fine of 500 zorkmids to me!'", noroelaname());
1765 fineforpracticant(500, 0, 0);
1767 use_skill(P_SQUEAKING, 1);
1768 u.cnd_fartingcount++;
1769 if (Role_if(PM_SOCIAL_JUSTICE_WARRIOR)) sjwtrigger();
1771 if (uarmf && uarmf->oartifact == ART_ELIANE_S_SHIN_SMASH) {
1772 pline("The farting gas destroys your footwear instantly.");
1773 useup(uarmf);
1775 if (uarmf && uarmf->oartifact == ART_ELIANE_S_COMBAT_SNEAKERS) {
1776 pline("Eek! You can't stand farting gas!");
1777 badeffect();
1778 badeffect();
1779 badeffect();
1780 badeffect();
1782 if (!extralongsqueak()) badeffect();
1784 if (uarmh && itemhasappearance(uarmh, APP_BREATH_CONTROL_HELMET) ) {
1785 pline("Your breath control helmet keeps pumping the farting gas into your %s...", body_part(NOSE));
1786 badeffect();
1787 badeffect();
1790 if (uarmh && uarmh->oartifact == ART_VACUUM_CLEANER_DEATH) {
1791 pline("The farting gas almost asphyxiates you!");
1792 badeffect();
1793 badeffect();
1794 badeffect();
1795 badeffect();
1796 badeffect();
1797 losehp(rnd(u.ulevel * 3), "suffocating on farting gas", KILLED_BY);
1800 return 1;
1803 } else if (FemtrapActiveNatalia && flags.female && (u.nataliacycletimer >= u.nataliafollicularend) && (u.nataliacycletimer < (u.nataliafollicularend + u.natalialutealstart)) && PlayerBleeds && yn("Do you want to fire your menstruation at an enemy?") == 'y' ) {
1805 getdir((char *)0);
1807 struct obj *pseudo;
1808 pseudo = mksobj(SPE_MENSTRUATION, FALSE, 2, FALSE);
1809 if (!pseudo) {
1810 pline("Somehow, it failed.");
1811 return 0;
1813 if (pseudo->otyp == GOLD_PIECE) pseudo->otyp = SPE_MENSTRUATION; /* minimalist fix */
1814 pseudo->blessed = pseudo->cursed = 0;
1815 pseudo->quan = 20L; /* do not let useup get it */
1816 pseudo->spe = 5;
1817 weffects(pseudo);
1818 if (pseudo) obfree(pseudo, (struct obj *)0); /* now, get rid of it */
1820 if (Upolyd && u.mh < 5) {
1821 losehp(10000, "forcibly bleeding out", KILLED_BY);
1822 } else if (!Upolyd && u.uhp < 5) {
1823 losehp(10000, "forcibly bleeding out", KILLED_BY);
1825 if (rn2(2)) {
1826 if (Upolyd) u.mh -= ((u.mh / 5) + 1);
1827 else u.uhp -= ((u.uhp / 5) + 1);
1828 } else {
1829 if (Upolyd) {
1830 u.mh -= ((u.mhmax / 5) + 1);
1831 if (u.mh < 0) losehp(10000, "forcibly bleeding out", KILLED_BY);
1832 } else {
1833 u.uhp -= ((u.uhpmax / 5) + 1);
1834 if (u.uhp < 0) losehp(10000, "forcibly bleeding out", KILLED_BY);
1838 use_skill(P_SQUEAKING, 1);
1839 return 1;
1841 } else if (bmwride(ART_MOUNT_BOND) && yn("Check up on your steed's health?") == 'y') {
1843 if (u.usteed) pline("Your steed's health: %d (max %d).", u.usteed->mhp, u.usteed->mhpmax);
1845 return 0; /* does not require you to use a turn --Amy */
1847 } else if (Race_if(PM_HAND) && !u.handpulling && yn("Do you want to pull a monster to you?") == 'y') {
1849 register struct monst *nexusmon;
1850 int multiplegather = 0;
1852 if (u.uen < 100) {
1853 You("need at least 100 mana to use this ability!");
1854 return 0;
1855 } else {
1856 u.uen -= 100;
1857 u.handpulling = rnz(2000);
1858 if (!PlayerCannotUseSkills && u.handpulling >= 2) {
1859 switch (P_SKILL(P_SQUEAKING)) {
1860 case P_BASIC: u.handpulling *= 9; u.handpulling /= 10; break;
1861 case P_SKILLED: u.handpulling *= 8; u.handpulling /= 10; break;
1862 case P_EXPERT: u.handpulling *= 7; u.handpulling /= 10; break;
1863 case P_MASTER: u.handpulling *= 6; u.handpulling /= 10; break;
1864 case P_GRAND_MASTER: u.handpulling *= 5; u.handpulling /= 10; break;
1865 case P_SUPREME_MASTER: u.handpulling *= 4; u.handpulling /= 10; break;
1866 default: break;
1870 You("attempt to pull a monster to you.");
1871 for(nexusmon = fmon; nexusmon; nexusmon = nexusmon->nmon) {
1872 if (nexusmon && !nexusmon->mtame && !nexusmon->mpeaceful && !(u.usteed && (u.usteed == nexusmon)) ) {
1873 mnexto(nexusmon);
1874 pline("%s is pulled near!", Monnam(nexusmon));
1875 multiplegather++;
1876 goto callingoutdone;
1879 callingoutdone:
1880 if (!multiplegather) pline("There seems to be no eligible monster.");
1882 use_skill(P_SQUEAKING, rnd(5));
1885 } else if ( ( (Role_if(PM_HUSSY) && (!Upolyd && flags.female)) || (uarmf && uarmf->oartifact == ART_ANJA_S_WIDE_FIELD) || (uarmf && uarmf->oartifact == ART_CLAUDIA_S_BEAUTY) || (uarmf && uarmf->oartifact == ART_SCRATCHE_HUSSY) || have_femityjewel() || (PlayerCannotUseSkills && P_SKILL(P_SYMBIOSIS) >= P_SKILLED && uactivesymbiosis && mons[u.usymbiote.mnum].msound == MS_STENCH) || (Upolyd && youmonst.data->msound == MS_STENCH) ) && !u.hussyperfume && yn("Do you want to spread your scentful perfume?") == 'y') {
1886 You("spread the lovely feminine drum stint reluctance brand perfume to intoxicate monsters around you!");
1888 if (have_femityjewel()) {
1889 int attempts = 0;
1890 struct permonst *pm = 0;
1892 EntireLevelMode += 1; /* make sure that their M3_UNCOMMON5 doesn't get in the way --Amy */
1894 if (Aggravate_monster) {
1895 u.aggravation = 1;
1896 reset_rndmonst(NON_PM);
1899 newbossSTEN:
1900 do {
1901 pm = rndmonst();
1902 attempts++;
1903 if (attempts && (attempts % 10000 == 0)) u.mondiffhack++;
1904 if (!rn2(2000)) reset_rndmonst(NON_PM);
1906 } while ( (!pm || (pm && !(pm->msound == MS_STENCH ))) && attempts < 50000);
1908 if (!pm && rn2(50) ) {
1909 attempts = 0;
1910 goto newbossSTEN;
1912 if (pm && !(pm->msound == MS_STENCH) && rn2(50) ) {
1913 attempts = 0;
1914 goto newbossSTEN;
1917 if (pm) (void) makemon(pm, 0, 0, MM_ANGRY|MM_FRENZIED);
1919 u.mondiffhack = 0;
1920 u.aggravation = 0;
1924 int mondistance = 0;
1925 struct monst *mtmp3;
1926 int k, l;
1927 for (k = -5; k <= 5; k++) for(l = -5; l <= 5; l++) {
1928 if (!isok(u.ux + k, u.uy + l)) continue;
1930 mondistance = 1;
1931 if (k > 1) mondistance = k;
1932 if (k < -1) mondistance = -k;
1933 if (l > 1 && l > mondistance) mondistance = l;
1934 if (l < -1 && (-l > mondistance)) mondistance = -l;
1936 if ( (mtmp3 = m_at(u.ux + k, u.uy + l)) != 0) {
1937 mtmp3->mcanmove = 0;
1938 mtmp3->mfrozen = (rnd(16 - (mondistance * 2)));
1939 mtmp3->mstrategy &= ~STRAT_WAITFORU;
1940 mtmp3->mconf = TRUE;
1941 pline("%s becomes dizzy from the scent!", Monnam(mtmp3));
1944 u.hussyperfume = rnz(4000);
1945 if (!PlayerCannotUseSkills && u.hussyperfume >= 2) {
1946 switch (P_SKILL(P_SQUEAKING)) {
1947 case P_BASIC: u.hussyperfume *= 9; u.hussyperfume /= 10; break;
1948 case P_SKILLED: u.hussyperfume *= 8; u.hussyperfume /= 10; break;
1949 case P_EXPERT: u.hussyperfume *= 7; u.hussyperfume /= 10; break;
1950 case P_MASTER: u.hussyperfume *= 6; u.hussyperfume /= 10; break;
1951 case P_GRAND_MASTER: u.hussyperfume *= 5; u.hussyperfume /= 10; break;
1952 case P_SUPREME_MASTER: u.hussyperfume *= 4; u.hussyperfume /= 10; break;
1953 default: break;
1956 use_skill(P_SQUEAKING, rnd(40));
1958 } else if (Role_if(PM_HUSSY) && flags.female && u.uhs <= 0 && isok(u.ux, u.uy) && yn("Do you want to take a crap?") == 'y') {
1960 if (uarmu && uarmu->oartifact == ART_KATIA_S_SOFT_COTTON) {
1961 You("produce very erotic noises.");
1962 if (!rn2(10)) adjattrib(rn2(A_CHA), 1, -1, TRUE);
1963 } else You("grunt.");
1964 morehungry(rn2(400)+200);
1966 register struct trap *shittrap;
1968 if (!(t_at(u.ux, u.uy))) {
1970 shittrap = maketrap(u.ux, u.uy, SHIT_TRAP, 0, FALSE);
1971 if (shittrap && !(shittrap->hiddentrap)) {
1972 shittrap->tseen = 1;
1976 use_skill(P_SQUEAKING, rnd(10));
1978 return 1;
1980 } else if (Race_if(PM_IRAHA) && !u.irahapoison && yn("Do you want to poison your weapon?") == 'y') {
1982 if (!uwep) {
1983 pline("You are not holding a weapon!");
1984 return 0;
1986 /* Iraha are somehow capable of poisoning weapons that cannot be poisoned, this is by design --Amy */
1987 if (uwep) {
1988 if (!stack_too_big(uwep)) {
1989 uwep->opoisoned = TRUE;
1990 pline("Your weapon was poisoned.");
1991 } else pline("Unfortunately your wielded stack of weapons was too big, and so the poisoning failed.");
1995 u.irahapoison = rnz(1000);
1996 if (!PlayerCannotUseSkills && u.irahapoison >= 2) {
1997 switch (P_SKILL(P_SQUEAKING)) {
1998 case P_BASIC: u.irahapoison *= 9; u.irahapoison /= 10; break;
1999 case P_SKILLED: u.irahapoison *= 8; u.irahapoison /= 10; break;
2000 case P_EXPERT: u.irahapoison *= 7; u.irahapoison /= 10; break;
2001 case P_MASTER: u.irahapoison *= 6; u.irahapoison /= 10; break;
2002 case P_GRAND_MASTER: u.irahapoison *= 5; u.irahapoison /= 10; break;
2003 case P_SUPREME_MASTER: u.irahapoison *= 4; u.irahapoison /= 10; break;
2004 default: break;
2007 use_skill(P_SQUEAKING, rnd(10));
2009 } else if (!PlayerCannotUseSkills && u.juyofleeing && P_SKILL(P_JUYO) >= P_BASIC && yn("Do you want to turn off the increased chance of making a monster flee?") == 'y') {
2010 u.juyofleeing = 0;
2011 pline("Monsters have the regular chance of fleeing from you now, which is useful mainly if you are a role or race that gets penalties for hitting a fleeing monster.");
2012 return 0;
2013 } else if (!PlayerCannotUseSkills && !u.juyofleeing && P_SKILL(P_JUYO) >= P_BASIC && yn("You have the Juyo skill, which allows you to make it more likely that monsters flee when you hit them. That feature is currently deactivated. Do you want to activate it?") == 'y') {
2014 u.juyofleeing = 1;
2015 pline("Monsters will now be more likely to flee from you when hit, with the chance depending on your Juyo skill!");
2016 return 0;
2018 } else if (!PlayerCannotUseSkills && u.controlmiguc && P_SKILL(P_PETKEEPING) >= P_BASIC && yn("Do you want to turn off the increased chance of your missiles passing through pets?") == 'y') {
2019 u.controlmiguc = 0;
2020 pline("Your missiles now have the regular chance of hitting your pets.");
2021 return 0;
2022 } else if (!PlayerCannotUseSkills && !u.controlmiguc && P_SKILL(P_PETKEEPING) >= P_BASIC && yn("You have the petkeeping skill, which allows you to make it more likely that your missiles pass through pets without harming them. That feature is currently deactivated. Do you want to activate it?") == 'y') {
2023 u.controlmiguc = 1;
2024 pline("Your missiles will now sometimes pass through pets, with the chance depending on your petkeeping skill!");
2025 return 0;
2027 } else if (Role_if(PM_JANITOR) && yn("Do you want to clean up the trash at your location?") == 'y') {
2028 register struct obj *objchain, *allchain, *blahchain;
2029 register int trashvalue = 0;
2030 char objroom;
2031 struct monst *shkp = (struct monst *)0;
2033 if (Levitation && !Race_if(PM_LEVITATOR)) {
2034 pline("Since you're levitating, you can't reach the trash!");
2035 return 0;
2036 } else if (u.uswallow) {
2037 pline("Well, it seems you have some other problem to take care of first.");
2038 return 0;
2039 } else if (u.garbagecleaned >= 1000) {
2040 You("already filled your trash bin! You'll have to wait until the garbage truck arrives so you can empty it.");
2041 /* if for some reason the garbage truck time is zero, call a truck now (shouldn't happen) --Amy */
2042 if (!u.garbagetrucktime) u.garbagetrucktime = rn1(500,500);
2044 return 0;
2047 objchain = level.objects[u.ux][u.uy];
2049 for (allchain = objchain; allchain; allchain = blahchain) {
2051 if (u.garbagecleaned >= 1000) {
2052 You("filled your trash bin, and call a garbage truck that will arrive shortly.");
2053 u.garbagetrucktime = rn1(500,500);
2054 break;
2057 blahchain = allchain->nexthere;
2059 /* have to special-case some stuff... --Amy
2060 * iron chains and balls could be chained to you, caught by wornmask check
2061 * invocation artifacts are of course immune
2062 * gold is immune
2063 * items of variable weight: statues, corpses and containers are also immune */
2064 if (allchain->owornmask) continue;
2065 if (evades_destruction(allchain)) continue;
2066 if (allchain->oclass == COIN_CLASS) continue;
2067 if (allchain->otyp == STATUE || allchain->otyp == CORPSE || Is_container(allchain)) continue;
2069 if (objects[allchain->otyp].oc_weight > 0) trashvalue = (objects[allchain->otyp].oc_weight) * allchain->quan;
2070 else trashvalue = allchain->quan;
2072 u.garbagecleaned += trashvalue;
2073 You("clean up %s and add %d weight units to your trash bin.", doname(allchain), trashvalue);
2075 objroom = *in_rooms(allchain->ox, allchain->oy, SHOPBASE);
2076 shkp = shop_keeper(objroom);
2077 if (shkp && inhishop(shkp)) {
2078 if (costly_spot(u.ux, u.uy) && objroom == *u.ushops) {
2079 Norep("You trash it, you pay for it!");
2080 bill_dummy_object(allchain);
2081 } else (void) stolen_value(allchain, allchain->ox, allchain->oy, FALSE, FALSE, FALSE);
2084 delobj(allchain);
2086 if (u.garbagecleaned >= 1000) {
2087 You("filled your trash bin, and call a garbage truck that will arrive shortly.");
2088 u.garbagetrucktime = rn1(500,500);
2089 break;
2094 } else if ((Race_if(PM_PLAYER_MUSHROOM) || (uchain && uchain->oartifact == ART_ERO_ERO_ERO_ERO_MUSHROOM_M)) ) {
2096 /* This does not consume a turn, which is intentional. --Amy */
2097 if (!u.mushroompoles && yn("Currently your ability to use any weapon as a polearm is deactivated. Do you want to activate it?") == 'y') {
2098 u.mushroompoles = TRUE;
2099 pline("You switch to polearm mode.");
2100 return 0;
2101 } else if (u.mushroompoles && yn("Currently your ability to use any weapon as a polearm is activated. Do you want to deactivate it?") == 'y') {
2102 u.mushroompoles = FALSE;
2103 pline("You switch to regular weapon application mode.");
2104 return 0;
2107 goto mushroomannoyance;
2108 } else
2109 mushroomannoyance:
2110 if (P_SKILL(P_MARTIAL_ARTS) >= P_UNSKILLED && P_SKILL(P_BARE_HANDED_COMBAT) >= P_UNSKILLED) {
2112 if (!u.disablemartial && yn("You have both the martial arts and bare-handed combat skills, which are mutually exclusive. Currently martial arts is activated. Deactivate it?") == 'y') {
2113 u.disablemartial = TRUE;
2114 pline("You switch to bare-handed combat.");
2115 return 1;
2117 else if (u.disablemartial && yn("You have both the martial arts and bare-handed combat skills, which are mutually exclusive. Currently martial arts is deactivated. Activate it?") == 'y') {
2118 u.disablemartial = FALSE;
2119 pline("You switch to martial arts.");
2120 return 1;
2122 goto flowannoyance;
2123 } else
2124 flowannoyance:
2125 if (Role_if(PM_DEMAGOGUE) && !u.temprecursion && !u.demagoguerecursion && u.demagogueabilitytimer == 0 && !(In_endgame(&u.uz)) && yn("Do you want to use recursion to temporarily become someone else?") == 'y') {
2126 use_skill(P_SQUEAKING, rnd(20));
2127 u.demagogueabilitytimer = rnz(2500);
2128 if (!PlayerCannotUseSkills && u.demagogueabilitytimer >= 2) {
2129 switch (P_SKILL(P_SQUEAKING)) {
2130 case P_BASIC: u.demagogueabilitytimer *= 9; u.demagogueabilitytimer /= 10; break;
2131 case P_SKILLED: u.demagogueabilitytimer *= 8; u.demagogueabilitytimer /= 10; break;
2132 case P_EXPERT: u.demagogueabilitytimer *= 7; u.demagogueabilitytimer /= 10; break;
2133 case P_MASTER: u.demagogueabilitytimer *= 6; u.demagogueabilitytimer /= 10; break;
2134 case P_GRAND_MASTER: u.demagogueabilitytimer *= 5; u.demagogueabilitytimer /= 10; break;
2135 case P_SUPREME_MASTER: u.demagogueabilitytimer *= 4; u.demagogueabilitytimer /= 10; break;
2136 default: break;
2139 demagoguerecursioneffect();
2141 /* symbiote check should come last because how often do you need that, really? --Amy */
2143 } else if (uinsymbiosis && yn("Do you want to check your symbiote's stats?")=='y') {
2144 pline("Current symbiote is %s. Health: %d(%d). BUC: %s%s%s%s%s. ", mons[u.usymbiote.mnum].mname, u.usymbiote.mhp, u.usymbiote.mhpmax, u.usymbiote.stckcurse ? "sticky" : "", u.usymbiote.evilcurse ? " evil" : "", u.usymbiote.morgcurse ? " morgothian" : "", u.usymbiote.bbcurse ? " blackbreath" : "", u.usymbiote.prmcurse ? " prime cursed" : u.usymbiote.hvycurse ? " heavily cursed" : u.usymbiote.cursed ? " cursed" : "uncursed");
2145 #ifdef EXTENDED_INFO
2146 if (u.shutdowntime) pline("Your symbiote has been shut down for %d turns.", u.shutdowntime);
2147 corpsepager(u.usymbiote.mnum);
2148 #endif
2149 return FALSE;
2151 else if (uinsymbiosis && yn("Do you want to kill your symbiote?")=='y') {
2152 if (u.usymbiote.cursed) {
2153 You("can't. It's cursed.");
2154 return TRUE;
2156 /* that a player would *really* be stupid enough to not at least TRY to use a method for obtaining a new one...
2157 * oh well, I guess it should be made obvious because nowadays players always need handholding --Amy */
2158 getlin("Attention: This action causes an alignment and luck penalty; if you want to replace your symbiote with a different one, just use your preferred method of obtaining a new symbiote instead. Do you really want to murder your symbiote? [yes/no]?",buf);
2159 (void) lcase (buf);
2160 if (!(strcmp (buf, "yes"))) {
2162 if (uarmf && itemhasappearance(uarmf, APP_REMORA_HEELS) && u.usymbiote.mnum == PM_REMORA) {
2163 if (uarmf->spe > -1) uarmf->spe = -1;
2166 u.usymbiote.active = 0;
2167 u.usymbiote.mnum = PM_PLAYERMON;
2168 u.usymbiote.mhp = 0;
2169 u.usymbiote.mhpmax = 0;
2170 u.usymbiote.cursed = u.usymbiote.hvycurse = u.usymbiote.prmcurse = u.usymbiote.bbcurse = u.usymbiote.morgcurse = u.usymbiote.evilcurse = u.usymbiote.stckcurse = 0;
2171 if (flags.showsymbiotehp) flags.botl = TRUE;
2172 u.cnd_symbiotesdied++;
2174 adjalign(-50); /* bad!! */
2175 change_luck(-1);
2176 if (!FunnyHallu) {(Role_if(PM_PIRATE) || Role_if(PM_KORSAIR) || PirateSpeakOn) ? pline("Batten down the hatches!") : You_hear("the rumble of distant thunder...");}
2177 else You_hear("the studio audience applaud!");
2178 if (PlayerHearsSoundEffects) pline(issoviet ? "Molodets, geroy - ty ubil sobstvennogo domashnego zhivotnogo, potomu chto vy byli glupy. Vy na samom dele sovetskaya Pyat' Lo? Potomu chto on ne igrayet namnogo khuzhe, chem vy." : "Wummm. Wummmmmmmm!");
2180 You("no longer have a symbiote.");
2181 use_skill(P_SQUEAKING, 2);
2183 return TRUE;
2186 return FALSE;
2188 } else if (Upolyd)
2189 pline("Any (other) special ability you may have is purely reflexive.");
2190 else You("don't have another special ability in your normal form!");
2191 return 0;
2194 int /* deathexplore patch */
2195 enter_explore_mode()
2197 char buf[BUFSZ];
2198 if(!discover && !wizard) {
2199 pline("Beware! From explore mode there will be no return to normal game.");
2201 getlin ("Do you want to enter explore mode? [yes/no]?",buf);
2202 (void) lcase (buf);
2203 if (!(strcmp (buf, "yes"))) {
2204 clear_nhwindow(WIN_MESSAGE);
2205 You("are now in non-scoring explore mode.");
2206 discover = TRUE;
2208 else {
2209 clear_nhwindow(WIN_MESSAGE);
2210 pline("Resuming normal game.");
2212 /* Amy edit: For testing purposes, allow switching to explore mode while in wizard mode.
2213 * Any ascensions made that way still don't get on the high-score list, and wizard mode bones stuffing
2214 * was already possible anyway, so I don't really see how this could cause any harm as long as it's
2215 * not possible to switch from either wizard or explore mode to normal mode. */
2216 } else if (wizard) {
2217 getlin ("Do you want to switch to explore mode? [yes/no]?",buf);
2218 (void) lcase (buf);
2219 if (!(strcmp (buf, "yes"))) {
2220 clear_nhwindow(WIN_MESSAGE);
2221 You("are now in non-scoring explore mode.");
2222 discover = TRUE;
2223 wizard = FALSE;
2225 else {
2226 clear_nhwindow(WIN_MESSAGE);
2227 pline("Resuming wizard mode.");
2231 return 0;
2235 STATIC_PTR int
2236 playersteal()
2239 if (MenuIsBugged) {
2240 pline("The borrow command is currently unavailable!");
2241 if (flags.moreforced && !MessagesSuppressed) display_nhwindow(WIN_MESSAGE, TRUE); /* --More-- */
2242 return 0;
2245 register int x, y;
2246 int temp, chanch, base, dexadj, statbonus = 0;
2247 boolean no_steal = FALSE;
2249 if (nohands(youmonst.data) && !Race_if(PM_TRANSFORMER)) {
2250 pline("Could be hard without hands ...");
2251 if (yn("Attempt it anyway?") == 'y') {
2252 if (rn2(3) && !polyskillchance()) {
2253 drain_en(rnz(monster_difficulty() + 1) );
2254 pline("You lose Mana");
2255 if (!rn2(20)) badeffect();
2256 return 1;
2260 else no_steal = TRUE;
2262 if (near_capacity() > SLT_ENCUMBER) {
2263 Your("load is too heavy to attempt to steal.");
2264 no_steal = TRUE;
2266 if (no_steal) {
2267 /* discard direction typeahead, if any */
2268 if (flags.moreforced && !MessagesSuppressed) display_nhwindow(WIN_MESSAGE, TRUE); /* --More-- */
2269 return(0);
2272 if(!getdir(NULL)) return(0);
2273 if(!u.dx && !u.dy) return(0);
2275 x = u.ux + u.dx;
2276 y = u.uy + u.dy;
2278 if(u.uswallow) {
2279 pline("You search around but don't find anything.");
2280 if (flags.moreforced && !MessagesSuppressed) display_nhwindow(WIN_MESSAGE, TRUE); /* --More-- */
2281 return(1);
2284 u_wipe_engr(2);
2286 maploc = &levl[x][y];
2288 if(MON_AT(x, y)) {
2289 register struct monst *mdat = m_at(x, y);
2291 /* calculate chanch of sucess */
2292 base = 5;
2293 dexadj = 1;
2294 if (Role_if(PM_ROGUE)) {
2295 base = 5 + (u.ulevel * 2);
2296 dexadj = 3;
2298 if (Role_if(PM_PICKPOCKET)) {
2299 base = 5 + (u.ulevel * 3);
2300 dexadj = 5;
2303 if (Race_if(PM_HUMANOID_LEPRECHAUN)) {
2305 base += u.ulevel;
2306 dexadj += 1;
2309 if (ACURR(A_DEX) < 10) statbonus = (ACURR(A_DEX) - 10) * dexadj;
2310 else
2311 if (ACURR(A_DEX) > 14) statbonus = (ACURR(A_DEX) - 14) * dexadj;
2313 chanch = base + statbonus;
2315 if (uarmg && uarmg->otyp != GAUNTLETS_OF_DEXTERITY)
2316 chanch -= 5;
2317 if (!uarmg) chanch += 5;
2318 if (uarms) chanch -= 10;
2319 if (uarm && uarm->owt < 75) chanch += 10;
2320 else if (uarm && uarm->owt < 125) chanch += 5;
2321 else if (uarm && uarm->owt < 175) chanch += 0;
2322 else if (uarm && uarm->owt < 225) chanch -= 5;
2323 else if (uarm && uarm->owt < 275) chanch -= 10;
2324 else if (uarm && uarm->owt < 325) chanch -= 15;
2325 else if (uarm && uarm->owt < 375) chanch -= 20;
2326 else if (uarm) chanch -= 25;
2328 if (Race_if(PM_THRALL)) {
2329 if (chanch < 5) chanch = 5;
2330 chanch *= 2;
2333 if (uarmg && itemhasappearance(uarmg, APP_POLNISH_GLOVES) ) {
2334 if (chanch < 5) chanch = 5;
2335 chanch *= 2;
2338 if (RngePoland) {
2339 if (chanch < 5) chanch = 5;
2340 chanch *= 2;
2343 if (uarm && uarm->oartifact == ART_GREGOR_S_GANGSTER_GARMENTS) {
2344 if (chanch < 5) chanch = 5;
2345 chanch *= 2;
2348 if (uarmg && uarmg->oartifact == ART_REALSTEAL) {
2349 if (chanch < 5) chanch = 5;
2350 chanch *= 2;
2353 if (chanch < 5) chanch = 5;
2354 if (chanch > 95) chanch = 95;
2355 if (rnd(100) < chanch || mdat->mtame) {
2357 #ifdef GOLDOBJ
2358 /* [CWC] This will steal money from the monster from the
2359 * first found goldobj - we could be really clever here and
2360 * then move onwards to the next goldobj in invent if we
2361 * still have coins left to steal, but lets leave that until
2362 * we actually have other coin types to test it on.
2364 struct obj *gold = findgold(mdat->minvent);
2365 if (gold) {
2366 int mongold;
2367 int coinstolen;
2368 coinstolen = (u.ulevel * rn1(25,25));
2369 mongold = (int)gold->quan;
2370 if (coinstolen > mongold) coinstolen = mongold;
2371 if (coinstolen > 0) {
2372 if (coinstolen != mongold)
2373 gold = splitobj(gold, coinstolen);
2374 obj_extract_self(gold);
2375 if (merge_choice(invent, gold) || inv_cnt() < 52) {
2376 addinv(gold);
2377 You("steal %s.", doname(gold));
2378 } else {
2379 You("grab %s, but find no room in your knapsack.", doname(gold));
2380 dropy(gold);
2383 else
2384 impossible("cmd.c:playersteal() stealing negative money");
2385 #else
2386 if (mdat->mgold) {
2387 temp = (u.ulevel * rn1(25,25));
2388 if (temp > mdat->mgold) temp = mdat->mgold;
2389 u.ugold += temp;
2390 mdat->mgold -= temp;
2391 You("steal %d gold.",temp);
2392 #endif
2393 } else
2394 You("don't find anything to steal.");
2396 if (!mdat->mtame) exercise(A_DEX, TRUE);
2397 return(1);
2398 } else {
2399 You("failed to steal anything.");
2400 setmangry(mdat);
2401 return(1);
2403 } else {
2404 pline("I don't see anybody to rob there!");
2405 return(0);
2408 return(0);
2411 #ifdef WIZARD
2413 /* ^W command - wish for something */
2414 STATIC_PTR int
2415 wiz_wish() /* Unlimited wishes for debug mode by Paul Polderman */
2417 if (wizard) {
2418 boolean save_verbose = flags.verbose;
2420 flags.verbose = FALSE;
2421 makewish(TRUE);
2422 flags.verbose = save_verbose;
2423 (void) encumber_msg();
2424 } else
2425 pline("Unavailable command '^W'.");
2426 return 0;
2430 #if 0 /* WAC -- Now uses techniques */
2431 STATIC_PTR int
2432 specialpower() /* Special class abilites [modified by Tom] */
2435 * STEPHEN WHITE'S NEW CODE
2437 * For clarification, lastuse (as declared in decl.{c|h}) is the
2438 * actual length of time the power is active, nextuse is when you can
2439 * next use the ability.
2442 /*Added wizard mode can choose to use ability - wAC*/
2443 if (u.unextuse) {
2444 You("have to wait %s before using your ability again.",
2445 (u.unextuse > 500) ? "for a while" : "a little longer");
2446 #ifdef WIZARD
2447 if (!wizard || (yn("Use ability anyways?") == 'n'))
2448 #endif
2449 return(0);
2452 switch (u.role) {
2453 case 'A':
2454 /*WAC stolen from the spellcasters...'A' can identify from
2455 historical research*/
2456 if(Hallucination || Stunned || Confusion) {
2457 You("can't concentrate right now!");
2458 break;
2459 } else if((ACURR(A_INT) + ACURR(A_WIS)) < rnd(60)) {
2460 pline("Nothing in your pack looks familiar.");
2461 u.unextuse = rn1(500,500);
2462 break;
2463 } else if(invent) {
2464 int ret;
2465 You("examine your possessions.");
2466 identify_pack(1, 0, 0);
2467 /*WAC this should be better - made like scroll of identify*/
2468 /* KMH -- also commented out use of 'ret' without initialization */
2469 /* ret = ggetobj("identify", identify, 1, FALSE);*/
2470 /* if (ret < 0) break; *//* quit or no eligible items */
2471 /* ret = ggetobj("identify", identify, 1, FALSE);*/
2472 } else {
2473 /* KMH -- fixed non-compliant string */
2474 You("are already quite familiar with the contents of your pack.");
2475 break;
2477 u.unextuse = rn1(500,1500);
2478 break;
2479 case 'G':
2480 Your("ability, gem identification, is automatic.");
2481 return(0);
2482 case 'P':
2483 Your("ability, bless and curse detection, is automatic.");
2484 return(0);
2485 case 'D':
2486 /* KMH -- Just do it! (Besides, Alt isn't portable...) */
2487 return (polyatwill());
2488 /*Your("ability, polymorphing, uses the alt-y key.");*/
2489 /*return(0);*/
2490 case 'L':
2491 /*only when empty handed, in human form!*/
2492 if (Upolyd) {
2493 You("can't do this while polymorphed!");
2494 break;
2496 if (uwep == 0) {
2497 Your("fingernails extend into claws!");
2498 aggravate();
2499 u.ulastuse = d(2,4) + (u.ulevel/5) + 1; /* [max] was d(2,8) */
2500 u.unextuse = rn1(1000,1000); /* [max] increased delay */
2502 else You("can't do this while holding a weapon!");
2503 break;
2504 case 'R':
2505 /* KMH -- Just do it! (Besides, Alt isn't portable...) */
2506 return (playersteal());
2507 /*Your("ability, stealing, uses the alt-b key.");*/
2508 /*return(0);*/
2509 break;
2510 case 'M':
2511 Your("special ability is unarmed combat, and it is automatic.");
2512 return(0);
2513 break;
2514 case 'C':
2515 case 'T':
2516 You("don't have a special ability!");
2517 return(0);
2518 break;
2519 case 'B':
2520 You("fly into a berserk rage!");
2521 u.ulastuse = d(2,8) + (u.ulevel/5) + 1;
2522 incr_itimeout(&HFast, u.ulastuse);
2523 u.unextuse = rn1(1000,500);
2524 return(0);
2525 break;
2526 case 'F':
2527 case 'I':
2528 case 'N':
2529 case 'W':
2530 /* WAC spell-users can study their known spells*/
2531 if(Hallucination || Stunned || Confusion) {
2532 You("can't concentrate right now!");
2533 break;
2534 } else {
2535 You("concentrate...");
2536 studyspell(); /*in spell.c*/
2538 break;
2539 case 'E':
2540 Your("%s %s become blurs as they reach for your quiver!",
2541 uarmg ? "gloved" : "bare", /* Del Lamb */
2542 makeplural(body_part(HAND)));
2543 u.ulastuse = rnd((int) (u.ulevel/6 + 1)) + 1;
2544 u.unextuse = rn1(1000,500);
2545 break;
2546 case 'U':
2547 case 'V':
2548 if(!uwep || (weapon_type(uwep) == P_NONE)) {
2549 You("are not wielding a weapon!");
2550 break;
2551 } else if(uwep->known == TRUE) {
2552 You("study and practice with your %s %s.",
2553 uarmg ? "gloved" : "bare", /* Del Lamb */
2554 makeplural(body_part(HAND)));
2555 practice_weapon();
2556 } else {
2557 if (not_fully_identified(uwep)) {
2558 You("examine %s.", doname(uwep));
2559 if (rnd(15) <= ACURR(A_INT)) {
2560 makeknown(uwep->otyp);
2561 uwep->known = TRUE;
2562 You("discover it is %s",doname(uwep));
2563 } else
2564 pline("Unfortunately, you didn't learn anything new.");
2566 /*WAC Added practicing code - in weapon.c*/
2567 practice_weapon();
2569 u.unextuse = rn1(500,500);
2570 break;
2571 case 'H':
2572 if (Hallucination || Stunned || Confusion) {
2573 You("are in no condition to perform surgery!");
2574 break;
2576 if ((Sick) || (Slimed)) { /* WAC cure sliming too */
2577 if(carrying(SCALPEL)) {
2578 pline("Using your scalpel (ow!), you cure your infection!");
2579 make_sick(0L,(char *)0, TRUE,SICK_ALL);
2580 Slimed = 0;
2581 if(u.uhp > 6) u.uhp -= 5;
2582 else u.uhp = 1;
2583 u.unextuse = rn1(500,500);
2584 break;
2585 } else pline("If only you had a scalpel...");
2587 if (u.uhp < u.uhpmax) {
2588 if(carrying(MEDICAL_KIT)) {
2589 pline("Using your medical kit, you bandage your wounds.");
2590 u.uhp += (u.ulevel * (rnd(2)+1)) + rn1(5,5);
2591 } else {
2592 pline("You bandage your wounds as best you can.");
2593 u.uhp += (u.ulevel) + rn1(5,5);
2595 u.unextuse = rn1(1000,500);
2596 if (u.uhp > u.uhpmax) u.uhp = u.uhpmax;
2597 } else pline("You don't need your healing powers!");
2598 break;
2599 case 'K':
2600 if (u.uhp < u.uhpmax || Sick || Slimed) { /*WAC heal sliming */
2601 if (Sick) You("lay your hands on the foul sickness...");
2602 pline("A warm glow spreads through your body!");
2603 if (Slimed) pline_The("slime is removed.");
2604 Slimed = 0;
2605 if(Sick) make_sick(0L,(char*)0, TRUE, SICK_ALL);
2606 else u.uhp += (u.ulevel * 4);
2607 if (u.uhp > u.uhpmax) u.uhp = u.uhpmax;
2608 u.unextuse = 3000;
2609 } else {
2610 pline(nothing_happens);
2611 if (FailureEffects || u.uprops[FAILURE_EFFECTS].extrinsic || have_failurestone()) {
2612 pline("Oh wait, actually something bad happens...");
2613 badeffect();
2616 break;
2617 case 'S':
2618 You("scream \"KIIILLL!\"");
2619 aggravate();
2620 u.ulastuse = rnd((int) (u.ulevel/6 + 1)) + 1;
2621 u.unextuse = rn1(1000,500);
2622 return(0);
2623 break;
2624 case 'Y':
2625 if (u.usteed) {
2626 pline("%s gets tamer.", Monnam(u.usteed));
2627 tamedog(u.usteed, (struct obj *) 0, FALSE);
2628 u.unextuse = rn1(1000,500);
2629 } else
2630 Your("special ability is only effective when riding a monster.");
2631 break;
2632 default:
2633 break;
2635 /*By default, action should take a turn*/
2636 return(1);
2638 #endif
2641 /* ^I command - identify hero's inventory */
2642 STATIC_PTR int
2643 wiz_identify()
2645 if (wizard) identify_pack(0, 1, 0);
2646 else pline("Unavailable command '^I'.");
2647 return 0;
2650 /* ^F command - reveal the level map and any traps on it */
2651 STATIC_PTR int
2652 wiz_map()
2655 if (wizard) {
2656 struct trap *t;
2657 long save_Hconf = HConfusion,
2658 save_Hhallu = HHallucination;
2660 HConfusion = HHallucination = 0L;
2661 for (t = ftrap; t != 0; t = t->ntrap) {
2662 if (!t->hiddentrap) t->tseen = 1;
2663 if (!t->hiddentrap) map_trap(t, TRUE);
2665 do_mapping();
2666 HConfusion = save_Hconf;
2667 HHallucination = save_Hhallu;
2668 } else
2669 pline("Unavailable command '^F'.");
2670 return 0;
2673 /* ^G command - generate monster(s); a count prefix will be honored */
2674 STATIC_PTR int
2675 wiz_gain_level()
2677 if (wizard) pluslvl(FALSE);
2678 else pline("Unavailable command '^J'.");
2679 return 0;
2682 /* BEGIN TSANTH'S CODE */
2683 STATIC_PTR int
2684 wiz_gain_ac()
2686 if (wizard) {
2687 if (u.ublessed < 20) {
2688 pline("Intrinsic AC increased by 1.");
2689 HProtection |= FROMOUTSIDE;
2690 u.ublessed++;
2691 flags.botl = 1;
2692 } else
2693 pline("Intrinsic AC is already maximized.");
2695 else
2696 pline("Unavailable command '^C'.");
2697 return 0;
2700 STATIC_PTR int
2701 wiz_toggle_invulnerability()
2703 if (wizard) {
2704 if ((Invulnerable == 0) && (u.uinvulnerable == FALSE)) {
2705 You("will be invulnerable for 32000 turns.");
2706 Invulnerable = 32000;
2707 u.uinvulnerable = TRUE;
2709 else {
2710 You("are no longer invulnerable.");
2711 Invulnerable = 0;
2712 u.uinvulnerable = FALSE;
2715 else pline("Unavailable command '^N'.");
2716 return 0;
2718 /* END TSANTH'S CODE */
2720 STATIC_PTR int
2721 wiz_detect_monsters()
2723 if (wizard) {
2724 You("can detect monsters.");
2725 incr_itimeout(&HDetect_monsters, 32000);
2727 else pline("Unavailable command '^H'.");
2728 return 0;
2731 STATIC_PTR int
2732 wiz_genesis()
2734 if (wizard) (void) create_particular();
2735 else pline("Unavailable command '^G'.");
2736 return 0;
2739 /* ^O command - display dungeon layout */
2740 STATIC_PTR int
2741 wiz_where()
2743 if (wizard) (void) print_dungeon(FALSE, (int *)0, (xchar *)0);
2744 else pline("Unavailable command '^O'.");
2745 return 0;
2748 /* ^E command - detect unseen (secret doors, traps, hidden monsters) */
2749 STATIC_PTR int
2750 wiz_detect()
2752 if(wizard) (void) findit();
2753 else pline("Unavailable command '^E'.");
2754 return 0;
2757 /* ^V command - level teleport */
2758 STATIC_PTR int
2759 wiz_level_tele()
2761 if (wizard) level_tele();
2762 else pline("Unavailable command '^V'.");
2763 return 0;
2766 /* #monpolycontrol command - choose new form for shapechangers, polymorphees */
2767 STATIC_PTR int
2768 wiz_mon_polycontrol()
2770 iflags.mon_polycontrol = !iflags.mon_polycontrol;
2771 pline("Monster polymorph control is %s.",
2772 iflags.mon_polycontrol ? "on" : "off");
2773 return 0;
2776 /* #levelchange command - adjust hero's experience level */
2777 STATIC_PTR int
2778 wiz_level_change()
2780 char buf[BUFSZ];
2781 int newlevel;
2782 int ret;
2784 getlin("To what experience level do you want to be set?", buf);
2785 (void)mungspaces(buf);
2786 if (buf[0] == '\033' || buf[0] == '\0') ret = 0;
2787 else ret = sscanf(buf, "%d", &newlevel);
2789 if (ret != 1) {
2790 pline("%s", Never_mind);
2791 if (FailureEffects || u.uprops[FAILURE_EFFECTS].extrinsic || have_failurestone()) {
2792 pline("Oh wait, actually I do mind...");
2793 badeffect();
2795 return 0;
2797 if (newlevel == u.ulevel) {
2798 You("are already that experienced.");
2799 } else if (newlevel < u.ulevel) {
2800 if (u.ulevel == 1) {
2801 You("are already as inexperienced as you can get.");
2802 return 0;
2804 if (newlevel < 1) newlevel = 1;
2805 while (u.ulevel > newlevel)
2806 losexp("#levelchange", TRUE, FALSE);
2807 } else {
2808 if (u.ulevel >= MAXULEV) {
2809 You("are already as experienced as you can get.");
2810 return 0;
2812 if (newlevel > MAXULEV) newlevel = MAXULEV;
2813 while (u.ulevel < newlevel)
2814 pluslvl(FALSE);
2816 u.ulevelmax = u.ulevel;
2817 return 0;
2820 /* #panic command - test program's panic handling */
2821 STATIC_PTR int
2822 wiz_panic()
2824 if (iflags.debug_fuzzer) {
2825 u.uhp = u.uhpmax = 1000;
2826 u.uen = u.uenmax = 1000;
2827 return 0;
2830 if (yn("Do you want to call panic() and end your game?") == 'y')
2831 panic("crash test.");
2832 return 0;
2835 /* #polyself command - change hero's form */
2836 STATIC_PTR int
2837 wiz_polyself()
2839 polyself(TRUE);
2840 return 0;
2843 /* #seenv command */
2844 STATIC_PTR int
2845 wiz_show_seenv()
2847 winid win;
2848 int x, y, v, startx, stopx, curx;
2849 char row[COLNO+1];
2851 win = create_nhwindow(NHW_TEXT);
2853 * Each seenv description takes up 2 characters, so center
2854 * the seenv display around the hero.
2856 startx = max(1, u.ux-(COLNO/4));
2857 stopx = min(startx+(COLNO/2), COLNO);
2858 /* can't have a line exactly 80 chars long */
2859 if (stopx - startx == COLNO/2) startx++;
2861 for (y = 0; y < ROWNO; y++) {
2862 for (x = startx, curx = 0; x < stopx; x++, curx += 2) {
2863 if (x == u.ux && y == u.uy) {
2864 row[curx] = row[curx+1] = '@';
2865 } else {
2866 v = levl[x][y].seenv & 0xff;
2867 if (v == 0)
2868 row[curx] = row[curx+1] = ' ';
2869 else
2870 sprintf(&row[curx], "%02x", v);
2873 /* remove trailing spaces */
2874 for (x = curx-1; x >= 0; x--)
2875 if (row[x] != ' ') break;
2876 row[x+1] = '\0';
2878 putstr(win, 0, row);
2880 display_nhwindow(win, TRUE);
2881 destroy_nhwindow(win);
2882 return 0;
2885 /* #vision command */
2886 STATIC_PTR int
2887 wiz_show_vision()
2889 winid win;
2890 int x, y, v;
2891 char row[COLNO+1];
2893 win = create_nhwindow(NHW_TEXT);
2894 sprintf(row, "Flags: 0x%x could see, 0x%x in sight, 0x%x temp lit",
2895 COULD_SEE, IN_SIGHT, TEMP_LIT);
2896 putstr(win, 0, row);
2897 putstr(win, 0, "");
2898 for (y = 0; y < ROWNO; y++) {
2899 for (x = 1; x < COLNO; x++) {
2900 if (x == u.ux && y == u.uy)
2901 row[x] = '@';
2902 else {
2903 v = viz_array[y][x]; /* data access should be hidden */
2904 if (v == 0)
2905 row[x] = ' ';
2906 else
2907 row[x] = '0' + viz_array[y][x];
2910 /* remove trailing spaces */
2911 for (x = COLNO-1; x >= 1; x--)
2912 if (row[x] != ' ') break;
2913 row[x+1] = '\0';
2915 putstr(win, 0, &row[1]);
2917 display_nhwindow(win, TRUE);
2918 destroy_nhwindow(win);
2919 return 0;
2922 /* #wmode command */
2923 STATIC_PTR int
2924 wiz_show_wmodes()
2926 winid win;
2927 int x,y;
2928 char row[COLNO+1];
2929 struct rm *lev;
2931 win = create_nhwindow(NHW_TEXT);
2932 for (y = 0; y < ROWNO; y++) {
2933 for (x = 0; x < COLNO; x++) {
2934 lev = &levl[x][y];
2935 if (x == u.ux && y == u.uy)
2936 row[x] = '@';
2937 else if (IS_WALL(lev->typ) || lev->typ == SDOOR)
2938 row[x] = '0' + (lev->wall_info & WM_MASK);
2939 else if (lev->typ == CORR)
2940 row[x] = '#';
2941 else if (IS_ROOM(lev->typ) || IS_DOOR(lev->typ))
2942 row[x] = '.';
2943 else
2944 row[x] = 'x';
2946 row[COLNO] = '\0';
2947 putstr(win, 0, row);
2949 display_nhwindow(win, TRUE);
2950 destroy_nhwindow(win);
2952 win = create_nhwindow(NHW_TEXT);
2953 for (y = 0; y < ROWNO; y++) {
2954 for (x = 0; x < COLNO; x++) {
2955 lev = &levl[x][y];
2956 if (x == u.ux && y == u.uy)
2957 row[x] = '@';
2958 else if (lev->wall_info & W_HARDGROWTH)
2959 row[x] = 'H';
2960 else if (lev->wall_info & W_EASYGROWTH)
2961 row[x] = 'E';
2962 else
2963 row[x] = 'x';
2965 row[COLNO] = '\0';
2966 putstr(win, 0, row);
2968 display_nhwindow(win, TRUE);
2969 destroy_nhwindow(win);
2971 return 0;
2974 #endif /* WIZARD */
2977 /* -enlightenment and conduct- */
2978 static winid en_win;
2979 static const char
2980 You_[] = "You ",
2981 are[] = "are ", were[] = "were ",
2982 have[] = "have ", had[] = "had ",
2983 can[] = "can ", could[] = "could ";
2984 static const char
2985 have_been[] = "have been ",
2986 have_never[] = "have never ", never[] = "never ";
2988 #define enl_msg(prefix,present,past,suffix) \
2989 enlght_line(prefix, final ? past : present, suffix)
2990 #define you_are(attr) enl_msg(You_,are,were,attr)
2991 #define you_have(attr) enl_msg(You_,have,had,attr)
2992 #define you_can(attr) enl_msg(You_,can,could,attr)
2993 #define you_have_been(goodthing) enl_msg(You_,have_been,were,goodthing)
2994 #define you_have_never(badthing) enl_msg(You_,have_never,never,badthing)
2995 #define you_have_X(something) enl_msg(You_,have,(const char *)"",something)
2997 static void
2998 enlght_line(start, middle, end)
2999 const char *start, *middle, *end;
3001 char buf[BUFSZ];
3003 sprintf(buf, "%s%s%s.", start, middle, end);
3004 putstr(en_win, 0, buf);
3009 /* KMH, intrinsic patch -- several of these are updated */
3010 void
3011 enlightenment(final, guaranteed)
3012 int final; /* 0 => still in progress; 1 => over, survived; 2 => dead */
3013 boolean guaranteed;
3015 int ltmp;
3016 char buf[BUFSZ];
3017 struct permonst *ptr;
3019 en_win = create_nhwindow(NHW_MENU);
3020 putstr(en_win, 0, final ? "Final Attributes:" : "Current Attributes:");
3021 putstr(en_win, 0, "");
3023 if (u.freeplaymode) you_are("a demigod");
3024 if (flags.zapem) you_are("playing in ZAPM mode");
3025 if (flags.wonderland) you_are("playing in wonderland mode");
3026 if (flags.lostsoul && !flags.uberlostsoul) you_are("playing in lost soul mode");
3027 if (flags.uberlostsoul) you_are("playing in uber lost soul mode");
3028 if (flags.gehenna) you_are("playing in gehenna mode");
3029 if (flags.dudley) you_are("playing in dudley mode");
3030 if (flags.iwbtg) you_are("playing in IWBTG mode");
3031 if (flags.elmstreet) you_are("playing in elm street mode");
3032 if (flags.blindfox) you_are("playing in blindfox mode");
3033 if (flags.hippie) you_are("playing in hippie mode");
3034 #ifdef GMMODE
3035 if (flags.gmmode) you_are("playing in game master mode");
3036 if (flags.supergmmode) you_are("playing in super game master mode");
3037 #endif
3038 if (flags.assholemode) you_are("playing in asshole mode");
3039 if (PlayerOnBlacklist()) you_are("on the list of unfriendly persons");
3041 if ((guaranteed || !rn2(10)) && u.uevent.uhand_of_elbereth) {
3042 static const char * const hofe_titles[3] = {
3043 "the Hand of Elbereth",
3044 "the Envoy of Balance",
3045 "the Glory of Arioch"
3047 you_are(hofe_titles[u.uevent.uhand_of_elbereth - 1]);
3050 /* note: piousness 20 matches MIN_QUEST_ALIGN (quest.h) */
3051 if ((guaranteed || !rn2(10)) && u.ualign.record >= 20) you_are("piously aligned");
3052 else if ((guaranteed || !rn2(10)) && u.ualign.record > 13) you_are("devoutly aligned");
3053 else if ((guaranteed || !rn2(10)) && u.ualign.record > 8) you_are("fervently aligned");
3054 else if ((guaranteed || !rn2(10)) && u.ualign.record > 3) you_are("stridently aligned");
3055 else if ((guaranteed || !rn2(10)) && u.ualign.record == 3) you_are("aligned");
3056 else if ((guaranteed || !rn2(10)) && u.ualign.record > 0) you_are("haltingly aligned");
3057 else if ((guaranteed || !rn2(10)) && u.ualign.record == 0) you_are("nominally aligned");
3058 else if ((guaranteed || !rn2(10)) && u.ualign.record >= -3) you_have("strayed");
3059 else if ((guaranteed || !rn2(10)) && u.ualign.record >= -8) you_have("sinned");
3060 else if (guaranteed || !rn2(10)) you_have("transgressed");
3061 #ifdef WIZARD
3062 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1) ) { /* can randomly appear with enlightenment, always after death --Amy */
3063 sprintf(buf, " %d", u.ualign.record);
3064 enl_msg("Your alignment ", "is", "was", buf);
3067 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1) ) { /* can randomly appear with enlightenment, always after death --Amy */
3068 sprintf(buf, " %d", u.alignlim);
3069 enl_msg("Your max alignment ", "is", "was", buf);
3072 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1) ) { /* can randomly appear with enlightenment, always after death --Amy */
3073 sprintf(buf, " %d sins", u.ualign.sins);
3074 enl_msg("You ", "carry", "carried", buf);
3077 if ((guaranteed || !rn2(10)) && (u.impossibleproperty >= 0) && ((wizard || (!rn2(10)) || final >= 1 ) )) {
3078 sprintf(buf, " %s", enchname(u.impossibleproperty) );
3079 enl_msg("You ", "cannot have this property at all:", "could not have this property at all:", buf);
3082 if ((guaranteed || !rn2(10)) && (u.nonextrinsicproperty >= 0 ) && ((wizard || (!rn2(10)) || final >= 1 ) )) {
3083 sprintf(buf, " %s", enchname(u.nonextrinsicproperty) );
3084 enl_msg("You ", "cannot have this property extrinsically:", "could not have this property extrinsically:", buf);
3087 if ((guaranteed || !rn2(10)) && (u.nonintrinsicproperty >= 0 ) && ((wizard || (!rn2(10)) || final >= 1 ) )) {
3088 sprintf(buf, " %s", enchname(u.nonintrinsicproperty) );
3089 enl_msg("You ", "cannot have this property intrinsically:", "could not have this property intrinsically:", buf);
3092 if ((guaranteed || !rn2(10)) && (u.nondoubleproperty >= 0 ) && ((wizard || (!rn2(10)) || final >= 1 ) )) {
3093 sprintf(buf, " %s", enchname(u.nondoubleproperty) );
3094 enl_msg("You ", "cannot have the double effect of this property:", "could not have the double effect of this property:", buf);
3097 if ((guaranteed || !rn2(10)) && ((wizard || (!rn2(10)) || final >= 1 ) && u.idscrollpenalty > 100)) {
3098 sprintf(buf, " %d", u.idscrollpenalty);
3099 enl_msg("Scroll identification only ", "works 100 times out of", "worked 100 times out of", buf);
3102 if ((guaranteed || !rn2(10)) && ((wizard || (!rn2(10)) || final >= 1 ) && u.idpotionpenalty > 3)) {
3103 sprintf(buf, " %d", u.idpotionpenalty);
3104 enl_msg("Potion identification only ", "works 3 times out of", "worked 3 times out of", buf);
3107 if ((guaranteed || !rn2(10)) && ((wizard || (!rn2(10)) || final >= 1 ) && u.idringpenalty > 4)) {
3108 sprintf(buf, " %d", u.idringpenalty);
3109 enl_msg("Ring identification only ", "works 4 times out of", "worked 4 times out of", buf);
3112 if ((guaranteed || !rn2(10)) && ((wizard || (!rn2(10)) || final >= 1 ) && u.idamuletpenalty > 15)) {
3113 sprintf(buf, " %d", u.idamuletpenalty);
3114 enl_msg("Amulet identification only ", "works 15 times out of", "worked 15 times out of", buf);
3117 if ((guaranteed || !rn2(10)) && ((wizard || (!rn2(10)) || final >= 1 ) && u.idimplantpenalty > 1)) {
3118 sprintf(buf, " %d", u.idimplantpenalty);
3119 enl_msg("Implant identification only ", "works 1 times out of", "worked 1 times out of", buf);
3122 if ((guaranteed || !rn2(10)) && ((wizard || (!rn2(10)) || final >= 1 ) && u.idwandpenalty > 3)) {
3123 sprintf(buf, " %d", u.idwandpenalty);
3124 enl_msg("Wand identification only ", "works 3 times out of", "worked 3 times out of", buf);
3127 if ((guaranteed || !rn2(10)) && ((wizard || (!rn2(10)) || final >= 1 ) && u.idarmorpenalty > 15)) {
3128 sprintf(buf, " %d", u.idarmorpenalty);
3129 enl_msg("Armor identification only ", "works 15 times out of", "worked 15 times out of", buf);
3132 if ((guaranteed || !rn2(10)) && ((wizard || (!rn2(10)) || final >= 1 ) && u.idspellbookpenalty > 2)) {
3133 sprintf(buf, " %d", u.idspellbookpenalty);
3134 enl_msg("Spellbook identification only ", "works 2 times out of", "worked 2 times out of", buf);
3137 if ((guaranteed || !rn2(10)) && ((wizard || (!rn2(10)) || final >= 1 ) && u.idgempenalty > 100)) {
3138 sprintf(buf, " %d", u.idgempenalty);
3139 enl_msg("Gem identification only ", "works 100 times out of", "worked 100 times out of", buf);
3142 if ((guaranteed || !rn2(10)) && ((wizard || (!rn2(10)) || final >= 1 ) && u.idtoolpenalty > 5)) {
3143 sprintf(buf, " %d", u.idtoolpenalty);
3144 enl_msg("Tool identification only ", "works 5 times out of", "worked 5 times out of", buf);
3147 if ((guaranteed || !rn2(10)) && ((wizard || (!rn2(10)) || final >= 1 ) && u.musableremovechance)) {
3148 sprintf(buf, " %d%% chance", 100 - u.musableremovechance);
3149 enl_msg("Monsters ", "will only drop their musable items with", "only dropped their musable items with", buf);
3152 if ((guaranteed || !rn2(10)) && ((wizard || (!rn2(10)) || final >= 1 ) && u.equipmentremovechance)) {
3153 sprintf(buf, " %d%% chance", 100 - u.equipmentremovechance);
3154 enl_msg("Monsters ", "will only drop their equipment with", "only dropped their equipment with", buf);
3157 if ((guaranteed || !rn2(10)) && ((wizard || (!rn2(10)) || final >= 1 ) && u.bookspawnchance)) {
3158 sprintf(buf, " %d%%", 100 - u.bookspawnchance);
3159 enl_msg("Book drop chance ", "is reduced to", "was reduced to", buf);
3162 if ((guaranteed || !rn2(10)) && ((wizard || (!rn2(10)) || final >= 1 ) && u.scrollspawnchance)) {
3163 sprintf(buf, " %d%%", 100 - u.scrollspawnchance);
3164 enl_msg("Scroll drop chance ", "is reduced to", "was reduced to", buf);
3167 if ((guaranteed || !rn2(10)) && ((wizard || (!rn2(10)) || final >= 1 ) && u.ringspawnchance)) {
3168 sprintf(buf, " %d%%", 100 - u.ringspawnchance);
3169 enl_msg("Ring drop chance ", "is reduced to", "was reduced to", buf);
3172 if ((guaranteed || !rn2(10)) && ((wizard || (!rn2(10)) || final >= 1 ) && u.wandspawnchance)) {
3173 sprintf(buf, " %d%%", 100 - u.wandspawnchance);
3174 enl_msg("Wand drop chance ", "is reduced to", "was reduced to", buf);
3177 if ((guaranteed || !rn2(10)) && ((wizard || (!rn2(10)) || final >= 1 ) && u.amuletspawnchance)) {
3178 sprintf(buf, " %d%%", 100 - u.amuletspawnchance);
3179 enl_msg("Amulet drop chance ", "is reduced to", "was reduced to", buf);
3182 if ((guaranteed || !rn2(10)) && ((wizard || (!rn2(10)) || final >= 1 ) && u.implantspawnchance)) {
3183 sprintf(buf, " %d%%", 100 - u.implantspawnchance);
3184 enl_msg("Implant drop chance ", "is reduced to", "was reduced to", buf);
3187 if ((guaranteed || !rn2(10)) && ((wizard || (!rn2(10)) || final >= 1 ) && u.potionspawnchance)) {
3188 sprintf(buf, " %d%%", 100 - u.potionspawnchance);
3189 enl_msg("Potion drop chance ", "is reduced to", "was reduced to", buf);
3192 if ((guaranteed || !rn2(10)) && ((wizard || (!rn2(10)) || final >= 1 ) && u.weaponspawnchance)) {
3193 sprintf(buf, " %d%%", 100 - u.weaponspawnchance);
3194 enl_msg("Weapon drop chance ", "is reduced to", "was reduced to", buf);
3197 if ((guaranteed || !rn2(10)) && ((wizard || (!rn2(10)) || final >= 1 ) && u.armorspawnchance)) {
3198 sprintf(buf, " %d%%", 100 - u.armorspawnchance);
3199 enl_msg("Armor drop chance ", "is reduced to", "was reduced to", buf);
3202 if ((guaranteed || !rn2(10)) && ((wizard || (!rn2(10)) || final >= 1 ) && u.toolspawnchance)) {
3203 sprintf(buf, " %d%%", 100 - u.toolspawnchance);
3204 enl_msg("Tool drop chance ", "is reduced to", "was reduced to", buf);
3207 if ((guaranteed || !rn2(10)) && ((wizard || (!rn2(10)) || final >= 1 ) && u.foodspawnchance)) {
3208 sprintf(buf, " %d%%", 100 - u.foodspawnchance);
3209 enl_msg("Food drop chance ", "is reduced to", "was reduced to", buf);
3212 if ((guaranteed || !rn2(10)) && ((wizard || (!rn2(10)) || final >= 1 ) && u.shopitemreduction)) {
3213 sprintf(buf, " %d%%", 100 - u.shopitemreduction);
3214 enl_msg("Shop item generation ", "is reduced to", "was reduced to", buf);
3217 if ((guaranteed || !rn2(10)) && ((wizard || (!rn2(10)) || final >= 1 ) && u.antimusablebias)) {
3218 sprintf(buf, " %d%%", u.antimusablebias);
3219 enl_msg("Musable item generation frequency ", "has a negative bias of", "had a negative bias of", buf);
3222 if ((guaranteed || !rn2(10)) && ((wizard || (!rn2(10)) || final >= 1 ) && u.concealitemchance)) {
3223 sprintf(buf, " %d%% of the time only", 100 - u.concealitemchance);
3224 enl_msg("Concealing monsters ", "are spawned underneath items", "were spawned underneath items", buf);
3227 if ((guaranteed || !rn2(10)) && ((wizard || (!rn2(10)) || final >= 1 ) && u.usefulitemchance)) {
3228 sprintf(buf, " %d%% chance", 100 - u.usefulitemchance);
3229 enl_msg("Monster death drops ", "spawn with only", "spawned with only", buf);
3232 if ((guaranteed || !rn2(10)) && u.hiddenpowerskill && (wizard || (!rn2(100)) || final >= 1 ) ) {
3233 sprintf(buf, " %s", wpskillname(u.hiddenpowerskill));
3234 enl_msg("Mastering the following skill ", "teaches you the hidden power:", "taught you the hidden power:", buf);
3237 if ((guaranteed || !rn2(10)) && u.untrainableskill && (wizard || (!rn2(10)) || final >= 1 ) ) {
3238 sprintf(buf, " %s", wpskillname(u.untrainableskill));
3239 enl_msg("The following skill ", "cannot be trained at all:", "could not be trained at all:", buf);
3242 if ((guaranteed || !rn2(10)) && u.halfspeedskill && (wizard || (!rn2(10)) || final >= 1 ) ) {
3243 sprintf(buf, " %s", wpskillname(u.halfspeedskill));
3244 enl_msg("The following skill ", "is trained at half the usual rate:", "was trained at half the usual rate:", buf);
3247 if ((guaranteed || !rn2(10)) && u.fifthspeedskill && (wizard || (!rn2(10)) || final >= 1 ) ) {
3248 sprintf(buf, " %s", wpskillname(u.fifthspeedskill));
3249 enl_msg("The following skill ", "is trained at one fifth the usual rate:", "was trained at one fifth the usual rate:", buf);
3252 if ((guaranteed || !rn2(10)) && u.basiclimitskill && (wizard || (!rn2(10)) || final >= 1 ) ) {
3253 sprintf(buf, " %s", wpskillname(u.basiclimitskill));
3254 enl_msg("The following skill ", "is limited to basic proficiency:", "was limited to basic proficiency:", buf);
3257 if ((guaranteed || !rn2(10)) && u.skilledlimitskill && (wizard || (!rn2(10)) || final >= 1 ) ) {
3258 sprintf(buf, " %s", wpskillname(u.skilledlimitskill));
3259 enl_msg("The following skill ", "is limited to skilled proficiency:", "was limited to skilled proficiency:", buf);
3262 if ((guaranteed || !rn2(10)) && u.expertlimitskill && (wizard || (!rn2(10)) || final >= 1 ) ) {
3263 sprintf(buf, " %s", wpskillname(u.expertlimitskill));
3264 enl_msg("The following skill ", "is limited to expert proficiency:", "was limited to expert proficiency:", buf);
3267 if ((guaranteed || !rn2(10)) && u.earlytrainingskill && (wizard || (!rn2(10)) || final >= 1 ) ) {
3268 sprintf(buf, " %s (turn %d)", wpskillname(u.earlytrainingskill), u.earlytrainingtimer);
3269 enl_msg("The following skill ", "becomes untrainable if you try to train it too early:", "became untrainable if you tried to train it too early:", buf);
3270 if (u.earlytrainingblown) {
3271 sprintf(buf, "blown your chance of training the %s skill", wpskillname(u.earlytrainingskill));
3272 you_have(buf);
3276 if ((guaranteed || !rn2(10)) && u.frtrainingskill && (wizard || (!rn2(10)) || final >= 1 ) ) {
3277 sprintf(buf, " %s (turn %d)", wpskillname(u.frtrainingskill), u.frtrainingtimer);
3278 enl_msg("The following skill ", "becomes untrainable if you try to train it too early:", "became untrainable if you tried to train it too early:", buf);
3279 if (u.frtrainingblown) {
3280 sprintf(buf, "blown your chance of training the %s skill", wpskillname(u.frtrainingskill));
3281 you_have(buf);
3285 if ((guaranteed || !rn2(10)) && u.latetrainingskill && (wizard || (!rn2(10)) || final >= 1 ) ) {
3286 sprintf(buf, " %s (turn %d)", wpskillname(u.latetrainingskill), u.latetrainingtimer);
3287 enl_msg("The following skill ", "becomes untrainable after a while:", "became untrainable after a while:", buf);
3290 if ((guaranteed || !rn2(10)) && u.lavtrainingskill && (wizard || (!rn2(10)) || final >= 1 ) ) {
3291 sprintf(buf, " %s (turn %d)", wpskillname(u.lavtrainingskill), u.lavtrainingtimer);
3292 enl_msg("The following skill ", "can't be trained before a certain turn number is reached:", "couldn't be trained before a certain turn number is reached:", buf);
3295 if ((guaranteed || !rn2(10)) && u.slowtrainingskill && (wizard || (!rn2(10)) || final >= 1 ) ) {
3296 sprintf(buf, " %s", wpskillname(u.slowtrainingskill));
3297 enl_msg("The following skill ", "becomes harder to train at higher skill levels:", "became harder to train at higher skill levels:", buf);
3300 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 ) && u.stickycursechance ) {
3301 sprintf(buf, " %d%%", u.stickycursechance);
3302 enl_msg("Sticky curses ", "are more common by", "were more common by", buf);
3305 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 ) && u.heavycursechance) {
3306 sprintf(buf, " %d%%", u.heavycursechance);
3307 enl_msg("Heavy curses ", "are more common by", "were more common by", buf);
3310 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 ) && u.primecursechance) {
3311 sprintf(buf, " %d%%", u.primecursechance);
3312 enl_msg("Prime curses ", "are more common by", "were more common by", buf);
3315 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 ) && u.genericcursechance) {
3316 sprintf(buf, " %d%%", u.genericcursechance);
3317 enl_msg("Items ", "are more likely to be generated cursed by", "were more likely to be generated cursed by", buf);
3320 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1) ) {
3321 sprintf(buf, " %d", u.monstermultiplier);
3322 enl_msg("Monster spawn rate ", "multiplier is currently", "multiplier was currently", buf);
3325 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) { sprintf(buf, " %d", nartifact_exist() );
3326 enl_msg("Number of artifacts generated ", "is", "was", buf);
3329 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) { sprintf(buf, " %d", u.fakeartifacts );
3330 enl_msg("Number of fake artifacts generated ", "is", "was", buf);
3333 if ((guaranteed || !rn2(10)) && u.legscratching > 1) { sprintf(buf, " %d", u.legscratching - 1);
3334 enl_msg("Your leg damage ", "is", "was", buf);
3337 if ((guaranteed || !rn2(10)) && u.youpolyamount > 0) { sprintf(buf, " %d", u.youpolyamount);
3338 enl_msg("Your remaining amount of free polymorphs ", "is", "was", buf);
3341 if ((guaranteed || !rn2(10)) && u.antimagicshell > 0) { sprintf(buf, " %d more turns", u.antimagicshell);
3342 enl_msg("Your antimagic shell ", "will last", "would have lasted", buf);
3345 if ((guaranteed || !rn2(10)) && Role_if(PM_UNBELIEVER)) {
3346 you_are("producing a permanent antimagic shell");
3349 if ((guaranteed || !rn2(10)) ) {
3350 sprintf(buf, " '%s", bundledescription());
3351 enl_msg("Your hairstyle ", "is", "was", buf);
3354 if ((guaranteed || !rn2(10)) ) {
3355 sprintf(buf, " '%s'", currentmartialstyle());
3356 enl_msg("Your current martial arts style ", "is", "was", buf);
3359 if ((guaranteed || !rn2(10)) ) {
3360 sprintf(buf, " %d", u.casinochips);
3361 enl_msg("Your amount of casino chips ", "is", "was", buf);
3364 if ((guaranteed || !rn2(10)) ) {
3365 sprintf(buf, " %d turns ago", u.barbertimer);
3366 enl_msg("The last time you got a new haircut ", "is", "was", buf);
3369 if ((guaranteed || !rn2(10)) ) {
3370 sprintf(buf, " %d", u.areoladiameter);
3371 enl_msg("Your areola diameter ", "is", "was", buf);
3374 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) { sprintf(buf, " turn %d", u.monstertimeout);
3375 enl_msg("Monster spawn increase ", "start at", "would have started at", buf);
3378 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {sprintf(buf, " turn %d", u.monstertimefinish);
3379 enl_msg("Monster spawn increase ", "reaches its maximum at", "had reached its maximum at", buf);
3380 enl_msg("In this game, Eevee's evolution ", "is ", "was ", mons[u.eeveelution].mname );
3381 /* these two are tied together because the monstertimefinish variable defines the evolution --Amy */
3384 if ((guaranteed || !rn2(10))) {
3385 sprintf(buf, " %d", u.maxrndmonstchoicecount);
3386 enl_msg("Maximum amount of combined random monster spawn freqs ", "is", "was", buf);
3389 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) { sprintf(buf, " turn %d", u.ascensiontimelimit);
3390 enl_msg("Your limit for ascension ", "is at", "was at", buf);
3393 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3394 enl_msg("The monster class that cannot be genocided ", "is ", "was ", monexplain[u.ungenocidable] );
3397 if ((guaranteed || !rn2(10)) && ((wizard || (!rn2(10)) || final >= 1 )) && u.alwaysinvisible) {
3398 enl_msg("Today, the monster class that always gets generated invisible ", "is ", "was ", monexplain[u.alwaysinvisible] );
3401 if ((guaranteed || !rn2(10)) && ((wizard || (!rn2(10)) || final >= 1 )) && u.alwayshidden) {
3402 enl_msg("Today, the monster class that always gets generated hidden ", "is ", "was ", monexplain[u.alwayshidden] );
3405 if ((guaranteed || !rn2(10)) && (u.freqmonsterbonus && (wizard || (!rn2(10)) || final >= 1 ))) {
3406 sprintf(buf, "spawned more often: %s (freq bonus %d)", monexplain[u.frequentmonster], u.freqmonsterbonus);
3407 enl_msg("The monster class that ", "is ", "was ", buf );
3410 if ((guaranteed || !rn2(10)) && (u.freqcolorbonus && (wizard || (!rn2(10)) || final >= 1 ))) {
3411 sprintf(buf, "spawned more often: %s (freq bonus %d)", c_obj_colors[u.frequentcolor], u.freqcolorbonus);
3412 enl_msg("The monster color that ", "is ", "was ", buf );
3415 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3416 ptr = &mons[u.frequentspecies];
3417 sprintf(buf, "spawned more often: %s (freq bonus %d)", ptr->mname, u.freqspeciesbonus);
3418 enl_msg("The monster species that ", "is ", "was ", buf );
3421 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3422 ptr = &mons[u.frequentspecies2];
3423 sprintf(buf, "spawned more often: %s (freq bonus %d)", ptr->mname, u.freqspeciesbonus2);
3424 enl_msg("The monster species that ", "is ", "was ", buf );
3427 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3428 ptr = &mons[u.frequentspecies3];
3429 sprintf(buf, "spawned more often: %s (freq bonus %d)", ptr->mname, u.freqspeciesbonus3);
3430 enl_msg("The monster species that ", "is ", "was ", buf );
3433 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3434 ptr = &mons[u.frequentspecies4];
3435 sprintf(buf, "spawned more often: %s (freq bonus %d)", ptr->mname, u.freqspeciesbonus4);
3436 enl_msg("The monster species that ", "is ", "was ", buf );
3439 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3440 ptr = &mons[u.frequentspecies5];
3441 sprintf(buf, "spawned more often: %s (freq bonus %d)", ptr->mname, u.freqspeciesbonus5);
3442 enl_msg("The monster species that ", "is ", "was ", buf );
3445 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3446 ptr = &mons[u.frequentspecies6];
3447 sprintf(buf, "spawned more often: %s (freq bonus %d)", ptr->mname, u.freqspeciesbonus6);
3448 enl_msg("The monster species that ", "is ", "was ", buf );
3451 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3452 ptr = &mons[u.frequentspecies7];
3453 sprintf(buf, "spawned more often: %s (freq bonus %d)", ptr->mname, u.freqspeciesbonus7);
3454 enl_msg("The monster species that ", "is ", "was ", buf );
3457 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3458 ptr = &mons[u.frequentspecies8];
3459 sprintf(buf, "spawned more often: %s (freq bonus %d)", ptr->mname, u.freqspeciesbonus8);
3460 enl_msg("The monster species that ", "is ", "was ", buf );
3463 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3464 ptr = &mons[u.frequentspecies9];
3465 sprintf(buf, "spawned more often: %s (freq bonus %d)", ptr->mname, u.freqspeciesbonus9);
3466 enl_msg("The monster species that ", "is ", "was ", buf );
3469 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3470 ptr = &mons[u.frequentspecies10];
3471 sprintf(buf, "spawned more often: %s (freq bonus %d)", ptr->mname, u.freqspeciesbonus10);
3472 enl_msg("The monster species that ", "is ", "was ", buf );
3475 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3476 ptr = &mons[u.frequentspecies11];
3477 sprintf(buf, "spawned more often: %s (freq bonus %d)", ptr->mname, u.freqspeciesbonus11);
3478 enl_msg("The monster species that ", "is ", "was ", buf );
3481 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3482 ptr = &mons[u.frequentspecies12];
3483 sprintf(buf, "spawned more often: %s (freq bonus %d)", ptr->mname, u.freqspeciesbonus12);
3484 enl_msg("The monster species that ", "is ", "was ", buf );
3487 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3488 ptr = &mons[u.frequentspecies13];
3489 sprintf(buf, "spawned more often: %s (freq bonus %d)", ptr->mname, u.freqspeciesbonus13);
3490 enl_msg("The monster species that ", "is ", "was ", buf );
3493 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3494 ptr = &mons[u.frequentspecies14];
3495 sprintf(buf, "spawned more often: %s (freq bonus %d)", ptr->mname, u.freqspeciesbonus14);
3496 enl_msg("The monster species that ", "is ", "was ", buf );
3499 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3500 ptr = &mons[u.frequentspecies15];
3501 sprintf(buf, "spawned more often: %s (freq bonus %d)", ptr->mname, u.freqspeciesbonus15);
3502 enl_msg("The monster species that ", "is ", "was ", buf );
3505 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3506 ptr = &mons[u.frequentspecies16];
3507 sprintf(buf, "spawned more often: %s (freq bonus %d)", ptr->mname, u.freqspeciesbonus16);
3508 enl_msg("The monster species that ", "is ", "was ", buf );
3511 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3512 ptr = &mons[u.frequentspecies17];
3513 sprintf(buf, "spawned more often: %s (freq bonus %d)", ptr->mname, u.freqspeciesbonus17);
3514 enl_msg("The monster species that ", "is ", "was ", buf );
3517 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3518 ptr = &mons[u.frequentspecies18];
3519 sprintf(buf, "spawned more often: %s (freq bonus %d)", ptr->mname, u.freqspeciesbonus18);
3520 enl_msg("The monster species that ", "is ", "was ", buf );
3523 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3524 ptr = &mons[u.frequentspecies19];
3525 sprintf(buf, "spawned more often: %s (freq bonus %d)", ptr->mname, u.freqspeciesbonus19);
3526 enl_msg("The monster species that ", "is ", "was ", buf );
3529 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3530 ptr = &mons[u.frequentspecies20];
3531 sprintf(buf, "spawned more often: %s (freq bonus %d)", ptr->mname, u.freqspeciesbonus20);
3532 enl_msg("The monster species that ", "is ", "was ", buf );
3535 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3536 sprintf(buf, "more common: %s (freq bonus %d)", montraitname(u.frequenttrait1), u.freqtraitbonus1);
3537 enl_msg("The monster trait that ", "is ", "was ", buf );
3540 if ((guaranteed || !rn2(10)) && u.frequenttrait2 && (wizard || (!rn2(10)) || final >= 1 )) {
3541 sprintf(buf, "more common: %s (freq bonus %d)", montraitname(u.frequenttrait2), u.freqtraitbonus2);
3542 enl_msg("The monster trait that ", "is ", "was ", buf );
3545 if ((guaranteed || !rn2(10)) && u.frequenttrait3 && (wizard || (!rn2(10)) || final >= 1 )) {
3546 sprintf(buf, "more common: %s (freq bonus %d)", montraitname(u.frequenttrait3), u.freqtraitbonus3);
3547 enl_msg("The monster trait that ", "is ", "was ", buf );
3550 if ((guaranteed || !rn2(10)) && u.frequenttrait4 && (wizard || (!rn2(10)) || final >= 1 )) {
3551 sprintf(buf, "more common: %s (freq bonus %d)", montraitname(u.frequenttrait4), u.freqtraitbonus4);
3552 enl_msg("The monster trait that ", "is ", "was ", buf );
3555 if ((guaranteed || !rn2(10)) && u.frequenttrait5 && (wizard || (!rn2(10)) || final >= 1 )) {
3556 sprintf(buf, "more common: %s (freq bonus %d)", montraitname(u.frequenttrait5), u.freqtraitbonus5);
3557 enl_msg("The monster trait that ", "is ", "was ", buf );
3560 if ((guaranteed || !rn2(10)) && u.frequenttrait6 && (wizard || (!rn2(10)) || final >= 1 )) {
3561 sprintf(buf, "more common: %s (freq bonus %d)", montraitname(u.frequenttrait6), u.freqtraitbonus6);
3562 enl_msg("The monster trait that ", "is ", "was ", buf );
3565 if ((guaranteed || !rn2(10)) && u.frequenttrait7 && (wizard || (!rn2(10)) || final >= 1 )) {
3566 sprintf(buf, "more common: %s (freq bonus %d)", montraitname(u.frequenttrait7), u.freqtraitbonus7);
3567 enl_msg("The monster trait that ", "is ", "was ", buf );
3570 if ((guaranteed || !rn2(10)) && u.frequenttrait8 && (wizard || (!rn2(10)) || final >= 1 )) {
3571 sprintf(buf, "more common: %s (freq bonus %d)", montraitname(u.frequenttrait8), u.freqtraitbonus8);
3572 enl_msg("The monster trait that ", "is ", "was ", buf );
3575 if ((guaranteed || !rn2(10)) && u.frequenttrait9 && (wizard || (!rn2(10)) || final >= 1 )) {
3576 sprintf(buf, "more common: %s (freq bonus %d)", montraitname(u.frequenttrait9), u.freqtraitbonus9);
3577 enl_msg("The monster trait that ", "is ", "was ", buf );
3580 if ((guaranteed || !rn2(10)) && u.frequenttrait10 && (wizard || (!rn2(10)) || final >= 1 )) {
3581 sprintf(buf, "more common: %s (freq bonus %d)", montraitname(u.frequenttrait10), u.freqtraitbonus10);
3582 enl_msg("The monster trait that ", "is ", "was ", buf );
3585 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3586 ptr = &mons[u.nospawnspecies];
3587 sprintf(buf, "never randomly spawned: %s", ptr->mname);
3588 enl_msg("The monster species that ", "is ", "was ", buf );
3591 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3592 ptr = &mons[u.nospawnspecies2];
3593 sprintf(buf, "never randomly spawned: %s", ptr->mname);
3594 enl_msg("The monster species that ", "is ", "was ", buf );
3597 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3598 ptr = &mons[u.nospawnspecies3];
3599 sprintf(buf, "never randomly spawned: %s", ptr->mname);
3600 enl_msg("The monster species that ", "is ", "was ", buf );
3603 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3604 ptr = &mons[u.nospawnspecies4];
3605 sprintf(buf, "never randomly spawned: %s", ptr->mname);
3606 enl_msg("The monster species that ", "is ", "was ", buf );
3609 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3610 ptr = &mons[u.nospawnspecies5];
3611 sprintf(buf, "never randomly spawned: %s", ptr->mname);
3612 enl_msg("The monster species that ", "is ", "was ", buf );
3615 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3616 ptr = &mons[u.nospawnspecies6];
3617 sprintf(buf, "never randomly spawned: %s", ptr->mname);
3618 enl_msg("The monster species that ", "is ", "was ", buf );
3621 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3622 ptr = &mons[u.nospawnspecies7];
3623 sprintf(buf, "never randomly spawned: %s", ptr->mname);
3624 enl_msg("The monster species that ", "is ", "was ", buf );
3627 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3628 ptr = &mons[u.nospawnspecies8];
3629 sprintf(buf, "never randomly spawned: %s", ptr->mname);
3630 enl_msg("The monster species that ", "is ", "was ", buf );
3633 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3634 ptr = &mons[u.nospawnspecies9];
3635 sprintf(buf, "never randomly spawned: %s", ptr->mname);
3636 enl_msg("The monster species that ", "is ", "was ", buf );
3639 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3640 ptr = &mons[u.nospawnspecies10];
3641 sprintf(buf, "never randomly spawned: %s", ptr->mname);
3642 enl_msg("The monster species that ", "is ", "was ", buf );
3645 if ((guaranteed || !rn2(10)) && ((wizard || (!rn2(10)) || final >= 1 ) && u.speedymonster)) {
3646 sprintf(buf, "always generated with extra speed: %s", monexplain[u.speedymonster]);
3647 enl_msg("The monster class that ", "is ", "was ", buf );
3650 if ((guaranteed || !rn2(10)) && ((wizard || (!rn2(10)) || final >= 1 ) && u.musemonster)) {
3651 sprintf(buf, "more likely to generate with musable stuff: %s", monexplain[u.musemonster]);
3652 enl_msg("The monster class that ", "is ", "was ", buf );
3655 if ((guaranteed || !rn2(10)) && u.minimalism && isminimalist) {sprintf(buf, " %d", u.minimalism);
3656 enl_msg("Items generate only 1 time in X, and X ", "is", "was", buf);
3659 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3660 sprintf(buf, "never generated: %s (%s)", obj_descr[u.unobtainable].oc_name, objtypenames[objects[u.unobtainable].oc_class]);
3661 enl_msg("The RNG hath decreed that this item ", "is ", "was ", buf );
3664 if ((guaranteed || !rn2(10)) && u.unobtainable2 != -1 && (wizard || (!rn2(10)) || final >= 1 )) {
3665 sprintf(buf, "never generated: %s (%s)", obj_descr[u.unobtainable2].oc_name, objtypenames[objects[u.unobtainable2].oc_class]);
3666 enl_msg("The RNG hath decreed that this item ", "is ", "was ", buf );
3669 if ((guaranteed || !rn2(10)) && u.unobtainable3 != -1 && (wizard || (!rn2(10)) || final >= 1 )) {
3670 sprintf(buf, "never generated: %s (%s)", obj_descr[u.unobtainable3].oc_name, objtypenames[objects[u.unobtainable3].oc_class]);
3671 enl_msg("The RNG hath decreed that this item ", "is ", "was ", buf );
3674 if ((guaranteed || !rn2(10)) && u.unobtainable4 != -1 && (wizard || (!rn2(10)) || final >= 1 )) {
3675 sprintf(buf, "never generated: %s (%s)", obj_descr[u.unobtainable4].oc_name, objtypenames[objects[u.unobtainable4].oc_class]);
3676 enl_msg("The RNG hath decreed that this item ", "is ", "was ", buf );
3679 if ((guaranteed || !rn2(10)) && u.unobtainable5 != -1 && (wizard || (!rn2(10)) || final >= 1 )) {
3680 sprintf(buf, "never generated: %s (%s)", obj_descr[u.unobtainable5].oc_name, objtypenames[objects[u.unobtainable5].oc_class]);
3681 enl_msg("The RNG hath decreed that this item ", "is ", "was ", buf );
3684 if ((guaranteed || !rn2(10)) && u.unobtainable6 != -1 && (wizard || (!rn2(10)) || final >= 1 )) {
3685 sprintf(buf, "never generated: %s (%s)", obj_descr[u.unobtainable6].oc_name, objtypenames[objects[u.unobtainable6].oc_class]);
3686 enl_msg("The RNG hath decreed that this item ", "is ", "was ", buf );
3689 if ((guaranteed || !rn2(10)) && u.unobtainable7 != -1 && (wizard || (!rn2(10)) || final >= 1 )) {
3690 sprintf(buf, "never generated: %s (%s)", obj_descr[u.unobtainable7].oc_name, objtypenames[objects[u.unobtainable7].oc_class]);
3691 enl_msg("The RNG hath decreed that this item ", "is ", "was ", buf );
3694 if ((guaranteed || !rn2(10)) && u.unobtainable8 != -1 && (wizard || (!rn2(10)) || final >= 1 )) {
3695 sprintf(buf, "never generated: %s (%s)", obj_descr[u.unobtainable8].oc_name, objtypenames[objects[u.unobtainable8].oc_class]);
3696 enl_msg("The RNG hath decreed that this item ", "is ", "was ", buf );
3699 if ((guaranteed || !rn2(10)) && u.unobtainable9 != -1 && (wizard || (!rn2(10)) || final >= 1 )) {
3700 sprintf(buf, "never generated: %s (%s)", obj_descr[u.unobtainable9].oc_name, objtypenames[objects[u.unobtainable9].oc_class]);
3701 enl_msg("The RNG hath decreed that this item ", "is ", "was ", buf );
3704 if ((guaranteed || !rn2(10)) && u.unobtainable10 != -1 && (wizard || (!rn2(10)) || final >= 1 )) {
3705 sprintf(buf, "never generated: %s (%s)", obj_descr[u.unobtainable10].oc_name, objtypenames[objects[u.unobtainable10].oc_class]);
3706 enl_msg("The RNG hath decreed that this item ", "is ", "was ", buf );
3709 if ((guaranteed || !rn2(10)) && ((wizard || (!rn2(10)) || final >= 1 ) && (u.unobtainablegeno != -1) )) {
3710 sprintf(buf, "genocided: %s (%s)", obj_descr[u.unobtainablegeno].oc_name, objtypenames[objects[u.unobtainablegeno].oc_class]);
3711 enl_msg("This item ", "is ", "was ", buf );
3714 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3715 sprintf(buf, "generated more often: %s (%s, freq bonus %d)", obj_descr[u.veryobtainable].oc_name, objtypenames[objects[u.veryobtainable].oc_class], u.veryobtainableboost);
3716 enl_msg("The RNG hath decreed that this item ", "is ", "was ", buf );
3719 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3720 sprintf(buf, "generated more often: %s (%s, freq bonus %d)", obj_descr[u.veryobtainable2].oc_name, objtypenames[objects[u.veryobtainable2].oc_class], u.veryobtainableboost2);
3721 enl_msg("The RNG hath decreed that this item ", "is ", "was ", buf );
3724 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3725 sprintf(buf, "generated more often: %s (%s, freq bonus %d)", obj_descr[u.veryobtainable3].oc_name, objtypenames[objects[u.veryobtainable3].oc_class], u.veryobtainableboost3);
3726 enl_msg("The RNG hath decreed that this item ", "is ", "was ", buf );
3729 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3730 sprintf(buf, "generated more often: %s (%s, freq bonus %d)", obj_descr[u.veryobtainable4].oc_name, objtypenames[objects[u.veryobtainable4].oc_class], u.veryobtainableboost4);
3731 enl_msg("The RNG hath decreed that this item ", "is ", "was ", buf );
3734 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3735 sprintf(buf, "generated more often: %s (%s, freq bonus %d)", obj_descr[u.veryobtainable5].oc_name, objtypenames[objects[u.veryobtainable5].oc_class], u.veryobtainableboost5);
3736 enl_msg("The RNG hath decreed that this item ", "is ", "was ", buf );
3739 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3740 sprintf(buf, "generated more often: %s (%s, freq bonus %d)", obj_descr[u.veryobtainable6].oc_name, objtypenames[objects[u.veryobtainable6].oc_class], u.veryobtainableboost6);
3741 enl_msg("The RNG hath decreed that this item ", "is ", "was ", buf );
3744 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3745 sprintf(buf, "generated more often: %s (%s, freq bonus %d)", obj_descr[u.veryobtainable7].oc_name, objtypenames[objects[u.veryobtainable7].oc_class], u.veryobtainableboost7);
3746 enl_msg("The RNG hath decreed that this item ", "is ", "was ", buf );
3749 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3750 sprintf(buf, "generated more often: %s (%s, freq bonus %d)", obj_descr[u.veryobtainable8].oc_name, objtypenames[objects[u.veryobtainable8].oc_class], u.veryobtainableboost8);
3751 enl_msg("The RNG hath decreed that this item ", "is ", "was ", buf );
3754 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3755 sprintf(buf, "generated more often: %s (%s, freq bonus %d)", obj_descr[u.veryobtainable9].oc_name, objtypenames[objects[u.veryobtainable9].oc_class], u.veryobtainableboost9);
3756 enl_msg("The RNG hath decreed that this item ", "is ", "was ", buf );
3759 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3760 sprintf(buf, "generated more often: %s (%s, freq bonus %d)", obj_descr[u.veryobtainable10].oc_name, objtypenames[objects[u.veryobtainable10].oc_class], u.veryobtainableboost10);
3761 enl_msg("The RNG hath decreed that this item ", "is ", "was ", buf );
3764 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3765 sprintf(buf, "generated more often: %s (%s, freq bonus %d)", obj_descr[u.veryobtainable11].oc_name, objtypenames[objects[u.veryobtainable11].oc_class], u.veryobtainableboost11);
3766 enl_msg("The RNG hath decreed that this item ", "is ", "was ", buf );
3769 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3770 sprintf(buf, "generated more often: %s (%s, freq bonus %d)", obj_descr[u.veryobtainable12].oc_name, objtypenames[objects[u.veryobtainable12].oc_class], u.veryobtainableboost12);
3771 enl_msg("The RNG hath decreed that this item ", "is ", "was ", buf );
3774 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3775 sprintf(buf, "generated more often: %s (%s, freq bonus %d)", obj_descr[u.veryobtainable13].oc_name, objtypenames[objects[u.veryobtainable13].oc_class], u.veryobtainableboost13);
3776 enl_msg("The RNG hath decreed that this item ", "is ", "was ", buf );
3779 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3780 sprintf(buf, "generated more often: %s (%s, freq bonus %d)", obj_descr[u.veryobtainable14].oc_name, objtypenames[objects[u.veryobtainable14].oc_class], u.veryobtainableboost14);
3781 enl_msg("The RNG hath decreed that this item ", "is ", "was ", buf );
3784 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3785 sprintf(buf, "generated more often: %s (%s, freq bonus %d)", obj_descr[u.veryobtainable15].oc_name, objtypenames[objects[u.veryobtainable15].oc_class], u.veryobtainableboost15);
3786 enl_msg("The RNG hath decreed that this item ", "is ", "was ", buf );
3789 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3790 sprintf(buf, "generated more often: %s (%s, freq bonus %d)", obj_descr[u.veryobtainable16].oc_name, objtypenames[objects[u.veryobtainable16].oc_class], u.veryobtainableboost16);
3791 enl_msg("The RNG hath decreed that this item ", "is ", "was ", buf );
3794 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3795 sprintf(buf, "generated more often: %s (%s, freq bonus %d)", obj_descr[u.veryobtainable17].oc_name, objtypenames[objects[u.veryobtainable17].oc_class], u.veryobtainableboost17);
3796 enl_msg("The RNG hath decreed that this item ", "is ", "was ", buf );
3799 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3800 sprintf(buf, "generated more often: %s (%s, freq bonus %d)", obj_descr[u.veryobtainable18].oc_name, objtypenames[objects[u.veryobtainable18].oc_class], u.veryobtainableboost18);
3801 enl_msg("The RNG hath decreed that this item ", "is ", "was ", buf );
3804 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3805 sprintf(buf, "generated more often: %s (%s, freq bonus %d)", obj_descr[u.veryobtainable19].oc_name, objtypenames[objects[u.veryobtainable19].oc_class], u.veryobtainableboost19);
3806 enl_msg("The RNG hath decreed that this item ", "is ", "was ", buf );
3809 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3810 sprintf(buf, "generated more often: %s (%s, freq bonus %d)", obj_descr[u.veryobtainable20].oc_name, objtypenames[objects[u.veryobtainable20].oc_class], u.veryobtainableboost20);
3811 enl_msg("The RNG hath decreed that this item ", "is ", "was ", buf );
3814 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 ) && (u.veryobtainclass1 > 0) ) {
3815 sprintf(buf, "generated more often: %s (freq bonus %d)", objtypenames[u.veryobtainclass1], u.veryobtainclass1boost);
3816 enl_msg("The RNG hath decreed that this item class ", "is ", "was ", buf );
3819 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 ) && (u.veryobtainclass2 > 0) ) {
3820 sprintf(buf, "generated more often: %s (freq bonus %d)", objtypenames[u.veryobtainclass2], u.veryobtainclass2boost);
3821 enl_msg("The RNG hath decreed that this item class ", "is ", "was ", buf );
3824 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 ) && (u.veryobtainclass3 > 0) ) {
3825 sprintf(buf, "generated more often: %s (freq bonus %d)", objtypenames[u.veryobtainclass3], u.veryobtainclass3boost);
3826 enl_msg("The RNG hath decreed that this item class ", "is ", "was ", buf );
3829 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3830 sprintf(buf, "always generated cursed: %s (%s)", obj_descr[u.alwayscurseditem].oc_name, objtypenames[objects[u.alwayscurseditem].oc_class]);
3831 enl_msg("The RNG hath decreed that this item ", "is ", "was ", buf );
3834 if ((guaranteed || !rn2(10)) && (u.alwayscurseditem2 != -1) && (wizard || (!rn2(10)) || final >= 1 )) {
3835 sprintf(buf, "always generated cursed: %s (%s)", obj_descr[u.alwayscurseditem2].oc_name, objtypenames[objects[u.alwayscurseditem2].oc_class]);
3836 enl_msg("The RNG hath decreed that this item ", "is ", "was ", buf );
3839 if ((guaranteed || !rn2(10)) && (u.alwayscurseditem3 != -1) && (wizard || (!rn2(10)) || final >= 1 )) {
3840 sprintf(buf, "always generated cursed: %s (%s)", obj_descr[u.alwayscurseditem3].oc_name, objtypenames[objects[u.alwayscurseditem3].oc_class]);
3841 enl_msg("The RNG hath decreed that this item ", "is ", "was ", buf );
3844 if ((guaranteed || !rn2(10)) && (u.alwayscurseditem4 != -1) && (wizard || (!rn2(10)) || final >= 1 )) {
3845 sprintf(buf, "always generated cursed: %s (%s)", obj_descr[u.alwayscurseditem4].oc_name, objtypenames[objects[u.alwayscurseditem4].oc_class]);
3846 enl_msg("The RNG hath decreed that this item ", "is ", "was ", buf );
3849 if ((guaranteed || !rn2(10)) && (u.alwayscurseditem5 != -1) && (wizard || (!rn2(10)) || final >= 1 )) {
3850 sprintf(buf, "always generated cursed: %s (%s)", obj_descr[u.alwayscurseditem5].oc_name, objtypenames[objects[u.alwayscurseditem5].oc_class]);
3851 enl_msg("The RNG hath decreed that this item ", "is ", "was ", buf );
3854 if ((guaranteed || !rn2(10)) && (u.alwayscurseditem6 != -1) && (wizard || (!rn2(10)) || final >= 1 )) {
3855 sprintf(buf, "always generated cursed: %s (%s)", obj_descr[u.alwayscurseditem6].oc_name, objtypenames[objects[u.alwayscurseditem6].oc_class]);
3856 enl_msg("The RNG hath decreed that this item ", "is ", "was ", buf );
3859 if ((guaranteed || !rn2(10)) && (u.alwayscurseditem7 != -1) && (wizard || (!rn2(10)) || final >= 1 )) {
3860 sprintf(buf, "always generated cursed: %s (%s)", obj_descr[u.alwayscurseditem7].oc_name, objtypenames[objects[u.alwayscurseditem7].oc_class]);
3861 enl_msg("The RNG hath decreed that this item ", "is ", "was ", buf );
3864 if ((guaranteed || !rn2(10)) && (u.alwayscurseditem8 != -1) && (wizard || (!rn2(10)) || final >= 1 )) {
3865 sprintf(buf, "always generated cursed: %s (%s)", obj_descr[u.alwayscurseditem8].oc_name, objtypenames[objects[u.alwayscurseditem8].oc_class]);
3866 enl_msg("The RNG hath decreed that this item ", "is ", "was ", buf );
3869 if ((guaranteed || !rn2(10)) && (u.alwayscurseditem9 != -1) && (wizard || (!rn2(10)) || final >= 1 )) {
3870 sprintf(buf, "always generated cursed: %s (%s)", obj_descr[u.alwayscurseditem9].oc_name, objtypenames[objects[u.alwayscurseditem9].oc_class]);
3871 enl_msg("The RNG hath decreed that this item ", "is ", "was ", buf );
3874 if ((guaranteed || !rn2(10)) && (u.alwayscurseditem10 != -1) && (wizard || (!rn2(10)) || final >= 1 )) {
3875 sprintf(buf, "always generated cursed: %s (%s)", obj_descr[u.alwayscurseditem10].oc_name, objtypenames[objects[u.alwayscurseditem10].oc_class]);
3876 enl_msg("The RNG hath decreed that this item ", "is ", "was ", buf );
3879 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3880 sprintf(buf, "always invisible: %s", defsyms[trap_to_defsym(u.invisotrap)].explanation);
3881 enl_msg("The RNG hath decreed that this trap ", "is ", "was ", buf );
3884 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3885 sprintf(buf, "generated more often: %s (freq bonus %d)", defsyms[trap_to_defsym(u.frequenttrap)].explanation, u.freqtrapbonus);
3886 enl_msg("The RNG hath decreed that this trap ", "is ", "was ", buf );
3889 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 ) && u.spellbookbias1 != -1) {
3890 sprintf(buf, "%s (freq bonus %d)", wpskillname(u.spellbookbias1), u.spellbookchance1);
3891 enl_msg("The spell school whose books are more common ", "is ", "was ", buf );
3894 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 ) && u.spellbookbias2 != -1) {
3895 sprintf(buf, "%s (freq bonus %d)", wpskillname(u.spellbookbias2), u.spellbookchance2);
3896 enl_msg("The spell school whose books are more common ", "is ", "was ", buf );
3899 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 ) && u.spellbookbias3 != -1) {
3900 sprintf(buf, "%s (freq bonus %d)", wpskillname(u.spellbookbias3), u.spellbookchance3);
3901 enl_msg("The spell school whose books are more common ", "is ", "was ", buf );
3904 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3905 sprintf(buf, "for 1 in %d traps", u.traprandomizing);
3906 enl_msg("Trap randomization ", "happens ", "happened ", buf );
3909 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3910 sprintf(buf, "spawned invisible 1 times in %d", u.invistrapchance);
3911 enl_msg("Traps ", "are ", "were ", buf );
3914 if ((guaranteed || !rn2(10)) && u.trapxtradiff && (wizard || (!rn2(10)) || final >= 1 )) {
3915 sprintf(buf, "increased by %d", u.trapxtradiff);
3916 enl_msg("Trap difficulty ", "is ", "was ", buf );
3919 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {
3920 sprintf(buf, "extra hard to find %d%% of the time", u.xdifftrapchance);
3921 enl_msg("Traps ", "are ", "were ", buf );
3924 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {sprintf(buf, " turn %d", u.next_check);
3925 enl_msg("Next attribute increase check ", "comes at", "would have come at", buf);
3928 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {sprintf(buf, " %d", AEXE(A_STR));
3929 enl_msg("Strength training ", "is", "was", buf);
3932 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {sprintf(buf, " %d", AEXE(A_DEX));
3933 enl_msg("Dexterity training ", "is", "was", buf);
3936 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {sprintf(buf, " %d", AEXE(A_WIS));
3937 enl_msg("Wisdom training ", "is", "was", buf);
3940 if ((guaranteed || !rn2(10)) && (wizard || (!rn2(10)) || final >= 1 )) {sprintf(buf, " %d", AEXE(A_CON));
3941 enl_msg("Constitution training ", "is", "was", buf);
3943 #endif
3945 if (guaranteed || !rn2(10)) {sprintf(buf, " %d", u.usanity);
3946 enl_msg("Your sanity ", "is", "was", buf);
3949 if (guaranteed || !rn2(10)) {sprintf(buf, " %d alla remaining", u.alla);
3950 enl_msg("You ", "have", "had", buf);
3953 if ((guaranteed || !rn2(10)) && u.negativeprotection) {sprintf(buf, " %d", u.negativeprotection);
3954 enl_msg("Your protection was reduced. The amount ", "is", "was", buf);
3957 if ((guaranteed || !rn2(10)) && u.tremblingamount) {sprintf(buf, " %d", u.tremblingamount);
3958 enl_msg("You're trembling, which reduces your to-hit and spellcasting chances. The amount ", "is", "was", buf);
3961 if ((guaranteed || !rn2(10)) && u.tsloss_str) {
3962 sprintf(buf, " %d", u.tsloss_str);
3963 enl_msg("Your strength ", "is temporarily reduced by", "was temporarily reduced by", buf);
3965 if ((guaranteed || !rn2(10)) && u.tsloss_dex) {
3966 sprintf(buf, " %d", u.tsloss_dex);
3967 enl_msg("Your dexterity ", "is temporarily reduced by", "was temporarily reduced by", buf);
3969 if ((guaranteed || !rn2(10)) && u.tsloss_con) {
3970 sprintf(buf, " %d", u.tsloss_con);
3971 enl_msg("Your constitution ", "is temporarily reduced by", "was temporarily reduced by", buf);
3973 if ((guaranteed || !rn2(10)) && u.tsloss_wis) {
3974 sprintf(buf, " %d", u.tsloss_wis);
3975 enl_msg("Your wisdom ", "is temporarily reduced by", "was temporarily reduced by", buf);
3977 if ((guaranteed || !rn2(10)) && u.tsloss_int) {
3978 sprintf(buf, " %d", u.tsloss_int);
3979 enl_msg("Your intelligence ", "is temporarily reduced by", "was temporarily reduced by", buf);
3981 if ((guaranteed || !rn2(10)) && u.tsloss_cha) {
3982 sprintf(buf, " %d", u.tsloss_cha);
3983 enl_msg("Your charisma ", "is temporarily reduced by", "was temporarily reduced by", buf);
3986 if ((guaranteed || !rn2(10)) && u.extralives == 1) {
3987 you_have("an extra life");
3990 if ((guaranteed || !rn2(10)) && u.extralives > 1) {sprintf(buf, " %d", u.extralives);
3991 enl_msg("Your amount of extra lives ", "is", "was", buf);
3994 if ((guaranteed || !rn2(10)) && u.chokhmahdamage) {sprintf(buf, " %d", u.chokhmahdamage);
3995 enl_msg("The escalating chokhmah attack damage ", "is", "was", buf);
3998 /*** Resistances to troubles ***/
3999 if ((guaranteed || !rn2(10)) && Fire_resistance) you_are(StrongFire_resistance ? "doubly fire resistant" : "fire resistant");
4000 if ((guaranteed || !rn2(10)) && Cold_resistance) you_are(StrongCold_resistance ? "doubly cold resistant" : "cold resistant");
4001 if ((guaranteed || !rn2(10)) && Sleep_resistance) you_are(StrongSleep_resistance ? "doubly sleep resistant" : "sleep resistant");
4002 if ((guaranteed || !rn2(10)) && Disint_resistance) you_are(StrongDisint_resistance ? "doubly disintegration-resistant" : "disintegration-resistant");
4003 if ((guaranteed || !rn2(10)) && Shock_resistance) you_are(StrongShock_resistance ? "doubly shock resistant" : "shock resistant");
4004 if ((guaranteed || !rn2(10)) && Poison_resistance) you_are(StrongPoison_resistance ? "doubly poison resistant" : "poison resistant");
4005 if ((guaranteed || !rn2(10)) && Drain_resistance) you_are(StrongDrain_resistance ? "doubly level-drain resistant" : "level-drain resistant");
4006 if ((guaranteed || !rn2(10)) && Sick_resistance) you_are(StrongSick_resistance ? "completely immune to sickness" : IntSick_resistance ? "immune to sickness" : "resistant to sickness");
4007 if ((guaranteed || !rn2(10)) && Antimagic) you_are(StrongAntimagic ? "doubly magic-protected" : "magic-protected");
4008 if ((guaranteed || !rn2(10)) && Acid_resistance) you_are(StrongAcid_resistance ? "doubly acid resistant" : "acid resistant");
4009 if ((guaranteed || !rn2(10)) && Fear_resistance) you_are(StrongFear_resistance ? "highly resistant to fear" : "resistant to fear");
4010 if ((guaranteed || !rn2(10)) && Stone_resistance)
4011 you_are(StrongStone_resistance ? "completely immune to petrification" : IntStone_resistance ? "immune to petrification" : "petrification resistant");
4012 if ((guaranteed || !rn2(10)) && Astral_vision)
4013 you_have(StrongAstral_vision ? "super-x-ray vision" : "x-ray vision");
4014 if ((guaranteed || !rn2(10)) && Invulnerable) {
4015 sprintf(buf, "invulnerable");
4016 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", Invulnerable);
4017 you_are(buf);
4019 /*if (u.urealedibility) you_can("recognize detrimental food");*/
4021 if ((guaranteed || !rn2(10)) && u.urealedibility) {
4022 sprintf(buf, "recognize detrimental food");
4023 sprintf(eos(buf), " (%d)", u.urealedibility);
4024 you_can(buf);
4027 if ((guaranteed || !rn2(10)) && u.boosttimer) {
4028 sprintf(buf, "boosted");
4029 if (!rn2(10)) sprintf(eos(buf), " (%d)", u.boosttimer);
4030 you_are(buf);
4033 /*** Troubles ***/
4035 if ((guaranteed || !rn2(10)) && multi) {
4036 sprintf(buf, "paralyzed.");
4037 sprintf(eos(buf), " (%d)", multi);
4038 you_are(buf);
4041 if ((guaranteed || !rn2(10)) && Halluc_resistance) {
4042 if (StrongHalluc_resistance) enl_msg("You strongly resist", "", "ed", " hallucinations");
4043 else enl_msg("You resist", "", "ed", " hallucinations");
4045 if ((guaranteed || !rn2(10)) && Blind_resistance) {
4046 if (StrongBlind_resistance) enl_msg("You strongly resist", "", "ed", " blindness");
4047 else enl_msg("You resist", "", "ed", " blindness");
4049 /*if (final) { */
4050 if ((guaranteed || !rn2(10)) && Hallucination) {
4051 if (HeavyHallu) sprintf(buf, "badly hallucinating");
4052 else sprintf(buf, "hallucinating");
4053 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", HHallucination);
4054 you_are(buf);
4056 if ((guaranteed || !rn2(10)) && Stunned) {
4057 if (HeavyStunned) sprintf(buf, "badly stunned");
4058 else sprintf(buf, "stunned");
4059 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", HStun);
4060 you_are(buf);
4062 if ((guaranteed || !rn2(10)) && Confusion) {
4063 if (HeavyConfusion) sprintf(buf, "badly confused");
4064 else sprintf(buf, "confused");
4065 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", HConfusion);
4066 you_are(buf);
4068 if ((guaranteed || !rn2(10)) && Blind) {
4069 if (HeavyBlind) sprintf(buf, "badly blinded");
4070 else sprintf(buf, "blinded");
4071 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", Blinded);
4072 you_are(buf);
4074 if ((guaranteed || !rn2(10)) && Sick) {
4075 sprintf(buf, "sick");
4076 if (u.usick_type & SICK_VOMITABLE) sprintf(eos(buf), " from food poisoning");
4077 if (u.usick_type & SICK_NONVOMITABLE) sprintf(eos(buf), " from illness");
4078 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", Sick);
4079 you_are(buf);
4081 if ((guaranteed || !rn2(10)) && Vomiting) {
4082 sprintf(buf, "nauseated");
4083 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", Vomiting);
4084 you_are(buf);
4086 if ((guaranteed || !rn2(10)) && Feared) {
4087 if (HeavyFeared) sprintf(buf, "stricken with very strong fear");
4088 else sprintf(buf, "stricken with fear");
4089 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", HFeared);
4090 you_are(buf);
4092 if ((guaranteed || !rn2(10)) && Numbed) {
4093 if (HeavyNumbed) sprintf(buf, "badly numbed");
4094 else sprintf(buf, "numbed");
4095 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", HNumbed);
4096 you_are(buf);
4098 if ((guaranteed || !rn2(10)) && Frozen) {
4099 if (HeavyFrozen) sprintf(buf, "frozen rigid and solid");
4100 else sprintf(buf, "frozen solid");
4101 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", HFrozen);
4102 you_are(buf);
4105 if ((guaranteed || !rn2(10)) && u.hanguppenalty) {
4106 sprintf(buf, "temporarily slower because you tried to hangup cheat");
4107 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%d)", u.hanguppenalty);
4108 you_are(buf);
4111 if ((guaranteed || !rn2(10)) && Burned) {
4112 if (HeavyBurned) sprintf(buf, "badly burned");
4113 else sprintf(buf, "burned");
4114 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", HBurned);
4115 you_are(buf);
4118 if ((guaranteed || !rn2(10)) && Dimmed) {
4119 if (HeavyDimmed) sprintf(buf, "badly dimmed");
4120 else sprintf(buf, "dimmed");
4121 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", HDimmed);
4122 you_are(buf);
4125 if ((guaranteed || !rn2(10)) && Punished) {
4126 you_are("punished");
4129 if ((guaranteed || !rn2(10)) && u.totter) {
4130 you_have("inverted directional keys");
4133 if ((guaranteed || !rn2(10)) && sengr_at("Elbereth", u.ux, u.uy) ) {
4134 you_are("standing on an active Elbereth engraving");
4137 if ((guaranteed || !rn2(10)) && Stoned) {
4138 sprintf(buf, "turning to stone");
4139 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", Stoned);
4140 you_are(buf);
4142 if ((guaranteed || !rn2(10)) && Slimed) {
4143 sprintf(buf, "turning into slime");
4144 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", Slimed);
4145 you_are(buf);
4147 if ((guaranteed || !rn2(10)) && Strangled) {
4148 sprintf(buf, (u.uburied) ? "buried" : "being strangled");
4149 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", Strangled);
4150 you_are(buf);
4152 if ((guaranteed || !rn2(10)) && PlayerBleeds) {
4153 sprintf(buf, "bleeding");
4154 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", PlayerBleeds);
4155 you_are(buf);
4157 if ((guaranteed || !rn2(10)) && Prem_death) {
4158 sprintf(buf, "going to die prematurely");
4159 you_are(buf);
4161 if ((guaranteed || !rn2(10)) && IsGlib) {
4162 sprintf(buf, "slippery %s", makeplural(body_part(FINGER)));
4163 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", Glib);
4164 you_have(buf);
4168 if ((guaranteed || !rn2(10)) && (MenuBug || u.uprops[MENU_LOST].extrinsic || have_menubugstone())) {
4169 sprintf(buf, "the menu bug.");
4170 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", MenuBug);
4171 you_have(buf);
4173 if ((guaranteed || !rn2(10)) && (SpeedBug || u.uprops[SPEED_BUG].extrinsic || have_speedbugstone())) {
4174 sprintf(buf, "the speed bug.");
4175 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", SpeedBug);
4176 you_have(buf);
4178 if ((guaranteed || !rn2(10)) && (Superscroller || u.uprops[SUPERSCROLLER_ACTIVE].extrinsic || have_superscrollerstone())) {
4179 sprintf(buf, "the superscroller.");
4180 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", Superscroller);
4181 you_have(buf);
4183 if ((guaranteed || !rn2(10)) && (RMBLoss || u.uprops[RMB_LOST].extrinsic || have_rmbstone())) {
4184 sprintf(buf, "the following problem: Your right mouse button failed.");
4185 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", RMBLoss);
4186 you_have(buf);
4188 if ((guaranteed || !rn2(10)) && (DisplayLoss || u.uprops[DISPLAY_LOST].extrinsic || have_displaystone())) {
4189 sprintf(buf, "the following problem: Your display failed.");
4190 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", DisplayLoss);
4191 you_have(buf);
4193 if ((guaranteed || !rn2(10)) && (SpellLoss || u.uprops[SPELLS_LOST].extrinsic || have_spelllossstone())) {
4194 sprintf(buf, "the following problem: You lost spells.");
4195 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", SpellLoss);
4196 you_have(buf);
4198 if ((guaranteed || !rn2(10)) && (YellowSpells || u.uprops[YELLOW_SPELLS].extrinsic || have_yellowspellstone())) {
4199 sprintf(buf, "the following problem: Your spells became yellow.");
4200 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", YellowSpells);
4201 you_have(buf);
4203 if ((guaranteed || !rn2(10)) && (AutoDestruct || u.uprops[AUTO_DESTRUCT].extrinsic || have_autodestructstone())) {
4204 sprintf(buf, "the following problem: An auto destruct mechanism was initiated.");
4205 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", AutoDestruct);
4206 you_have(buf);
4208 if ((guaranteed || !rn2(10)) && (MemoryLoss || u.uprops[MEMORY_LOST].extrinsic || have_memorylossstone())) {
4209 sprintf(buf, "the following problem: There is low local memory.");
4210 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", MemoryLoss);
4211 you_have(buf);
4213 if ((guaranteed || !rn2(10)) && (InventoryLoss || u.uprops[INVENTORY_LOST].extrinsic || have_inventorylossstone())) {
4214 sprintf(buf, "the following problem: There is not enough memory to create an inventory window.");
4215 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", InventoryLoss);
4216 you_have(buf);
4218 if ((guaranteed || !rn2(10)) && (BlackNgWalls || u.uprops[BLACK_NG_WALLS].extrinsic || have_blackystone())) {
4219 sprintf(buf, "the following problem: Blacky and his NG walls are closing in.");
4220 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", BlackNgWalls);
4221 you_have(buf);
4223 if ((guaranteed || !rn2(10)) && (FreeHandLoss || u.uprops[FREE_HAND_LOST].extrinsic || have_freehandbugstone())) {
4224 sprintf(buf, "the following problem: Your free hand is less likely to be free.");
4225 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FreeHandLoss);
4226 you_have(buf);
4228 if ((guaranteed || !rn2(10)) && (Unidentify || u.uprops[UNIDENTIFY].extrinsic || have_unidentifystone())) {
4229 sprintf(buf, "the following problem: Your possessions sometimes unidentify themselves.");
4230 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", Unidentify);
4231 you_have(buf);
4233 if ((guaranteed || !rn2(10)) && (Thirst || u.uprops[THIRST].extrinsic || have_thirststone())) {
4234 sprintf(buf, "a strong sense of thirst.");
4235 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", Thirst);
4236 you_have(buf);
4238 if ((guaranteed || !rn2(10)) && (LuckLoss || u.uprops[LUCK_LOSS].extrinsic || have_unluckystone())) {
4239 sprintf(buf, "the following problem: You're shitting out of luck (SOL).");
4240 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", LuckLoss);
4241 you_have(buf);
4243 if ((guaranteed || !rn2(10)) && (ShadesOfGrey || u.uprops[SHADES_OF_GREY].extrinsic || have_shadesofgreystone())) {
4244 sprintf(buf, "the following problem: Everything displays in various shades of grey.");
4245 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", ShadesOfGrey);
4246 you_have(buf);
4248 if ((guaranteed || !rn2(10)) && (FaintActive || u.uprops[FAINT_ACTIVE].extrinsic || have_faintingstone())) {
4249 sprintf(buf, "the following problem: You randomly faint.");
4250 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FaintActive);
4251 you_have(buf);
4253 if ((guaranteed || !rn2(10)) && (Itemcursing || u.uprops[ITEMCURSING].extrinsic || have_cursingstone() || have_primecurse() )) {
4254 sprintf(buf, "the following problem: Your inventory gradually fills up with cursed items.");
4255 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", Itemcursing);
4256 you_have(buf);
4259 if ((guaranteed || !rn2(10)) && have_morgothiancurse() ) {
4260 sprintf(buf, "afflicted by the Ancient Morgothian Curse.");
4261 you_are(buf);
4263 if ((guaranteed || !rn2(10)) && have_topiylinencurse() ) {
4264 sprintf(buf, "afflicted by Topi Ylinen's Curse, a.k.a. the Ancient Foul Curse.");
4265 you_are(buf);
4267 if ((guaranteed || !rn2(10)) && have_blackbreathcurse() ) {
4268 sprintf(buf, "filled with the Black Breath.");
4269 you_are(buf);
4272 if ((guaranteed || !rn2(10)) && (DifficultyIncreased || u.uprops[DIFFICULTY_INCREASED].extrinsic || have_difficultystone())) {
4273 sprintf(buf, "the following problem: The difficulty of the game was arbitrarily increased.");
4274 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", DifficultyIncreased);
4275 you_have(buf);
4277 if ((guaranteed || !rn2(10)) && (Deafness || u.uprops[DEAFNESS].extrinsic || have_deafnessstone())) {
4278 sprintf(buf, "a hearing break.");
4279 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", Deafness);
4280 you_have(buf);
4282 if ((guaranteed || !rn2(10)) && (CasterProblem || u.uprops[CASTER_PROBLEM].extrinsic || have_antimagicstone())) {
4283 sprintf(buf, "blood mana.");
4284 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", CasterProblem);
4285 you_have(buf);
4287 if ((guaranteed || !rn2(10)) && (WeaknessProblem || u.uprops[WEAKNESS_PROBLEM].extrinsic || have_weaknessstone())) {
4288 sprintf(buf, "the following problem: Being weak from hunger damages your health.");
4289 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", WeaknessProblem);
4290 you_have(buf);
4292 if ((guaranteed || !rn2(10)) && (RotThirteen || u.uprops[ROT_THIRTEEN].extrinsic || have_rotthirteenstone())) {
4293 sprintf(buf, "the following problem: A rot13 cypher has been activated for lowercase letters.");
4294 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", RotThirteen);
4295 you_have(buf);
4297 if ((guaranteed || !rn2(10)) && (BishopGridbug || u.uprops[BISHOP_GRIDBUG].extrinsic || have_bishopstone())) {
4298 sprintf(buf, "the following problem: You cannot move diagonally.");
4299 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", BishopGridbug);
4300 you_have(buf);
4302 if ((guaranteed || !rn2(10)) && (ConfusionProblem || u.uprops[CONFUSION_PROBLEM].extrinsic || have_confusionstone())) {
4303 sprintf(buf, "a confusing problem.");
4304 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", ConfusionProblem);
4305 you_have(buf);
4307 if ((guaranteed || !rn2(10)) && (NoDropProblem || u.uprops[DROP_BUG].extrinsic || have_dropbugstone())) {
4308 sprintf(buf, "the following problem: You cannot drop items.");
4309 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", NoDropProblem);
4310 you_have(buf);
4312 if ((guaranteed || !rn2(10)) && (DSTWProblem || u.uprops[DSTW_BUG].extrinsic || have_dstwstone())) {
4313 sprintf(buf, "the following problem: Your potions don't always work.");
4314 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", DSTWProblem);
4315 you_have(buf);
4317 if ((guaranteed || !rn2(10)) && (StatusTrapProblem || u.uprops[STATUS_FAILURE].extrinsic || have_statusstone())) {
4318 sprintf(buf, "the following problem: You can't cure status effects.");
4319 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", StatusTrapProblem);
4320 you_have(buf);
4322 if ((guaranteed || !rn2(10)) && (AlignmentProblem || u.uprops[ALIGNMENT_FAILURE].extrinsic || have_alignmentstone())) {
4323 sprintf(buf, "the following problem: Your maximum alignment will decrease over time.");
4324 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", AlignmentProblem);
4325 you_have(buf);
4327 if ((guaranteed || !rn2(10)) && (StairsProblem || u.uprops[STAIRSTRAP].extrinsic || have_stairstrapstone())) {
4328 sprintf(buf, "the following problem: Stairs are always trapped.");
4329 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", StairsProblem);
4330 you_have(buf);
4332 if ((guaranteed || !rn2(10)) && (UninformationProblem || u.uprops[UNINFORMATION].extrinsic || have_uninformationstone())) {
4333 sprintf(buf, "the following problem: The game gives insufficient amounts of information.");
4334 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", UninformationProblem);
4335 you_have(buf);
4338 if ((guaranteed || !rn2(10)) && (TimerunBug || u.uprops[TIMERUN_BUG].extrinsic || have_timerunstone())) {
4339 sprintf(buf, "the following problem: All actions take turns.");
4340 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", TimerunBug);
4341 you_have(buf);
4344 if ((guaranteed || !rn2(10)) && (MulchBug || u.uprops[MULCH_BUG].extrinsic || have_mulchstone())) {
4345 sprintf(buf, "the following problem: Your ranged weapon ammo mulches every time.");
4346 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", MulchBug);
4347 you_have(buf);
4350 if ((guaranteed || !rn2(10)) && (SpellCooldownBug || u.uprops[SPELL_COOLDOWN_BUG].extrinsic || have_spellcooldownstone())) {
4351 sprintf(buf, "the following problem: Whenever you cast a spell, you have to wait for a couple turns until you can cast another.");
4352 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", SpellCooldownBug);
4353 you_have(buf);
4356 if ((guaranteed || !rn2(10)) && (HaveAPinBug || u.uprops[HAVE_A_PIN_BUG].extrinsic || have_haveapinstone())) {
4357 sprintf(buf, "the following problem: Your HP and Pw cannot regenerate beyond the cap of the other.");
4358 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", HaveAPinBug);
4359 you_have(buf);
4362 if ((guaranteed || !rn2(10)) && (TurbodullBug || u.uprops[TURBODULL_BUG].extrinsic || have_turbodullstone())) {
4363 sprintf(buf, "the following problem: Your equipment dulls much more quickly.");
4364 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", TurbodullBug);
4365 you_have(buf);
4368 if ((guaranteed || !rn2(10)) && (InaccuracyBug || u.uprops[INACCURACY_BUG].extrinsic || have_inaccuracystone())) {
4369 sprintf(buf, "the following problem: Your ray wands and spells, thrown potions and similar stuff hit the enemy much less often.");
4370 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", InaccuracyBug);
4371 you_have(buf);
4374 if ((guaranteed || !rn2(10)) && (InventorySizeBug || u.uprops[INVENTORY_SIZE_BUG].extrinsic || have_inventorysizestone())) {
4375 sprintf(buf, "the following problem: You cannot have more than a certain amount of items in your open inventory.");
4376 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", InventorySizeBug);
4377 you_have(buf);
4380 if ((guaranteed || !rn2(10)) && (CostlyFailureBug || u.uprops[COSTLY_FAILURE_BUG].extrinsic || have_costlyfailurestone())) {
4381 sprintf(buf, "the following problem: Failing to cast a spell uses up the full amount of mana.");
4382 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", CostlyFailureBug);
4383 you_have(buf);
4386 if ((guaranteed || !rn2(10)) && (ReddamBug || u.uprops[REDDAM_BUG].extrinsic || have_reddamstone())) {
4387 sprintf(buf, "the following problem: Your damage has been reduced by %d.", u.reddamamount);
4388 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", ReddamBug);
4389 you_have(buf);
4392 if ((guaranteed || !rn2(10)) && (RedincBug || u.uprops[REDINC_BUG].extrinsic || have_redincstone())) {
4393 sprintf(buf, "the following problem: Your to-hit has been reduced by %d.", u.redincamount);
4394 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", RedincBug);
4395 you_have(buf);
4398 if ((guaranteed || !rn2(10)) && (MonsterMultishotBug || u.uprops[MONSTER_MULTISHOT_EFFECT].extrinsic || have_monstermultishotstone())) {
4399 sprintf(buf, "the following problem: Monsters can multishot their ranged weapons.");
4400 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", MonsterMultishotBug);
4401 you_have(buf);
4404 if ((guaranteed || !rn2(10)) && (MeanBurdenEffect || u.uprops[MEAN_BURDEN_EFFECT].extrinsic || have_meanburdenstone())) {
4405 sprintf(buf, "the following problem: You're always at least burdened.");
4406 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", MeanBurdenEffect);
4407 you_have(buf);
4410 if ((guaranteed || !rn2(10)) && (CarrcapEffect || u.uprops[CARRCAP_EFFECT].extrinsic || have_carrcapstone())) {
4411 sprintf(buf, "the following problem: Your carry capacity is shit.");
4412 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", CarrcapEffect);
4413 you_have(buf);
4416 if ((guaranteed || !rn2(10)) && (UmengEffect || u.uprops[UMENG_EFFECT].extrinsic || have_umengstone())) {
4417 sprintf(buf, "the following problem: The top line always says 'umeng'.");
4418 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", UmengEffect);
4419 you_have(buf);
4422 if ((guaranteed || !rn2(10)) && (AefdeEffect || u.uprops[AEFDE_EFFECT].extrinsic || have_aefdestone())) {
4423 sprintf(buf, "the following problem: Some chaotic dudes are trying to mess up the dungeon.");
4424 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", AefdeEffect);
4425 you_have(buf);
4428 if ((guaranteed || !rn2(10)) && (EpviEffect || u.uprops[EPVI_EFFECT].extrinsic || have_epvistone())) {
4429 sprintf(buf, "the following problem: Items whose level is higher than yours are unusable.");
4430 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", EpviEffect);
4431 you_have(buf);
4434 if ((guaranteed || !rn2(10)) && (FuckfuckfuckEffect || u.uprops[FUCKFUCKFUCK_EFFECT].extrinsic || have_fuckfuckfuckstone())) {
4435 sprintf(buf, "the following problem: Items lose their BUC identification like they do in the variant that calls itself 3.7 and don't stack properly.");
4436 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FuckfuckfuckEffect);
4437 you_have(buf);
4440 if ((guaranteed || !rn2(10)) && (OptionBugEffect || u.uprops[OPTION_BUG_EFFECT].extrinsic || have_optionstone())) {
4441 sprintf(buf, "the following problem: Your options may randomly change to other values.");
4442 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", OptionBugEffect);
4443 you_have(buf);
4446 if ((guaranteed || !rn2(10)) && (MiscolorEffect || u.uprops[MISCOLOR_EFFECT].extrinsic || have_miscolorstone())) {
4447 sprintf(buf, "the following problem: The dungeon is miscolored.");
4448 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", MiscolorEffect);
4449 you_have(buf);
4452 if ((guaranteed || !rn2(10)) && (OneRainbowEffect || u.uprops[ONE_RAINBOW_EFFECT].extrinsic || have_onerainbowstone())) {
4453 sprintf(buf, "the following problem: One specific color becomes fleecy.");
4454 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", OneRainbowEffect);
4455 you_have(buf);
4458 if ((guaranteed || !rn2(10)) && (ColorshiftEffect || u.uprops[COLORSHIFT_EFFECT].extrinsic || have_colorshiftstone())) {
4459 sprintf(buf, "the following problem: Matching colors will change back and forth.");
4460 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", ColorshiftEffect);
4461 you_have(buf);
4464 if ((guaranteed || !rn2(10)) && (TopLineEffect || u.uprops[TOP_LINE_EFFECT].extrinsic || have_toplinestone())) {
4465 sprintf(buf, "the following problem: The top line displays fleecy-colored messages, which is a lot of fun.");
4466 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", TopLineEffect);
4467 you_have(buf);
4470 if ((guaranteed || !rn2(10)) && (CapsBugEffect || u.uprops[CAPS_BUG_EFFECT].extrinsic || have_capsstone())) {
4471 sprintf(buf, "the following problem: Lower-case monsters appear as upper-case ones.");
4472 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", CapsBugEffect);
4473 you_have(buf);
4476 if ((guaranteed || !rn2(10)) && (UnKnowledgeEffect || u.uprops[UN_KNOWLEDGE_EFFECT].extrinsic || have_unknowledgestone())) {
4477 sprintf(buf, "the following problem: Spellbooks and tools must be identified if you want to be able to use them.");
4478 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", UnKnowledgeEffect);
4479 you_have(buf);
4482 if ((guaranteed || !rn2(10)) && (DarkhanceEffect || u.uprops[DARKHANCE_EFFECT].extrinsic || have_darkhancestone())) {
4483 sprintf(buf, "the following problem: The skill enhance screen is dark.");
4484 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", DarkhanceEffect);
4485 you_have(buf);
4488 if ((guaranteed || !rn2(10)) && (DschueueuetEffect || u.uprops[DSCHUEUEUET_EFFECT].extrinsic || have_dschueueuetstone())) {
4489 sprintf(buf, "the following problem: Down staircases may take you several levels deeper.");
4490 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", DschueueuetEffect);
4491 you_have(buf);
4494 if ((guaranteed || !rn2(10)) && (NopeskillEffect || u.uprops[NOPESKILL_EFFECT].extrinsic || have_nopeskillstone())) {
4495 sprintf(buf, "the following problem: Enhancing a skill drains it, which may result in you not being able to enhance the skill in question.");
4496 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", NopeskillEffect);
4497 you_have(buf);
4500 if ((guaranteed || !rn2(10)) && (RealLieEffect || u.uprops[REAL_LIE_EFFECT].extrinsic || have_realliestone())) {
4501 sprintf(buf, "the following problem: The pokedex tells lies to you that may become real.");
4502 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", RealLieEffect);
4503 you_have(buf);
4506 if ((guaranteed || !rn2(10)) && (EscapePastEffect || u.uprops[ESCAPE_PAST_EFFECT].extrinsic || have_escapepaststone())) {
4507 sprintf(buf, "the following problem: Using the ESC key to clear --More-- prompts causes bad effects.");
4508 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", EscapePastEffect);
4509 you_have(buf);
4512 if ((guaranteed || !rn2(10)) && (PethateEffect || u.uprops[PETHATE_EFFECT].extrinsic || have_pethatestone())) {
4513 sprintf(buf, "the following problem: Monsters will constantly try to kill your pets.");
4514 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", PethateEffect);
4515 you_have(buf);
4518 if ((guaranteed || !rn2(10)) && (PetLashoutEffect || u.uprops[PET_LASHOUT_EFFECT].extrinsic || have_petlashoutstone())) {
4519 sprintf(buf, "the following problem: Your pets will infight.");
4520 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", PetLashoutEffect);
4521 you_have(buf);
4524 if ((guaranteed || !rn2(10)) && (PetstarveEffect || u.uprops[PETSTARVE_EFFECT].extrinsic || have_petstarvestone())) {
4525 sprintf(buf, "the following problem: Your pets are much more likely to starve.");
4526 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", PetstarveEffect);
4527 you_have(buf);
4530 if ((guaranteed || !rn2(10)) && (PetscrewEffect || u.uprops[PETSCREW_EFFECT].extrinsic || have_petscrewstone())) {
4531 sprintf(buf, "the following problem: Your pets are subjected to random bad effects.");
4532 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", PetscrewEffect);
4533 you_have(buf);
4536 if ((guaranteed || !rn2(10)) && (TechLossEffect || u.uprops[TECH_LOSS_EFFECT].extrinsic || have_techlossstone())) {
4537 sprintf(buf, "the following problem: You lost techniques.");
4538 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", TechLossEffect);
4539 you_have(buf);
4542 if ((guaranteed || !rn2(10)) && (ProoflossEffect || u.uprops[PROOFLOSS_EFFECT].extrinsic || have_prooflossstone())) {
4543 sprintf(buf, "the following problem: Your erosionproof equipment may spontaneously un-erosionproof itself.");
4544 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", ProoflossEffect);
4545 you_have(buf);
4548 if ((guaranteed || !rn2(10)) && (UnInvisEffect || u.uprops[UN_INVIS_EFFECT].extrinsic || have_uninvisstone())) {
4549 sprintf(buf, "the following problem: Your invisible equipment may spontaneously become visible.");
4550 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", UnInvisEffect);
4551 you_have(buf);
4554 if ((guaranteed || !rn2(10)) && (DetectationEffect || u.uprops[DETECTATION_EFFECT].extrinsic || have_detectationstone())) {
4555 sprintf(buf, "the following problem: Many ways of detecting your surroundings do no longer work.");
4556 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", DetectationEffect);
4557 you_have(buf);
4560 if ((guaranteed || !rn2(10)) && (RepeatingNastycurseEffect || u.uprops[REPEATING_NASTYCURSE_EFFECT].extrinsic || have_nastycursestone())) {
4561 sprintf(buf, "the following problem: Your armor pieces will receive nasty trap enchantments over time.");
4562 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", RepeatingNastycurseEffect);
4563 you_have(buf);
4566 if ((guaranteed || !rn2(10)) && (ReallyBadTrapEffect || u.uprops[REALLY_BAD_TRAP_EFFECT].extrinsic || have_reallybadstone())) {
4567 sprintf(buf, "the following problem: Bad effects become really bad effects.");
4568 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", ReallyBadTrapEffect);
4569 you_have(buf);
4572 if ((guaranteed || !rn2(10)) && (CovidTrapEffect || u.uprops[COVID_TRAP_EFFECT].extrinsic || have_covidstone())) {
4573 sprintf(buf, "a chronical covid-19 disease.");
4574 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", CovidTrapEffect);
4575 you_have(buf);
4578 if ((guaranteed || !rn2(10)) && (ArtiblastEffect || u.uprops[ARTIBLAST_EFFECT].extrinsic || have_blaststone())) {
4579 sprintf(buf, "the following problem: Artifacts always blast you.");
4580 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", ArtiblastEffect);
4581 you_have(buf);
4584 if ((guaranteed || !rn2(10)) && (GiantExplorerBug || u.uprops[GIANT_EXPLORER].extrinsic || have_giantexplorerstone())) {
4585 sprintf(buf, "the following problem: You can explore a huge area and trigger all nasty traps in that area.");
4586 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", GiantExplorerBug);
4587 you_have(buf);
4590 if ((guaranteed || !rn2(10)) && (YawmBug || u.uprops[YAWM_EFFECT].extrinsic || have_yawmstone())) {
4591 sprintf(buf, "the following problem: You see a smaller area of the level, and the longer you don't trigger any traps, the smaller it becomes.");
4592 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", YawmBug);
4593 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (last trigger %d)", u.yawmtime);
4594 you_have(buf);
4597 if ((guaranteed || !rn2(10)) && (TrapwarpingBug || u.uprops[TRAPWARPING].extrinsic || have_trapwarpstone())) {
4598 sprintf(buf, "the following problem: Traps sometimes turn into other traps.");
4599 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", TrapwarpingBug);
4600 you_have(buf);
4603 if ((guaranteed || !rn2(10)) && (EnthuEffect || u.uprops[ENTHU_EFFECT].extrinsic || have_bossgodstone())) {
4604 sprintf(buf, "the following problem: All hostile monsters can cast all spells.");
4605 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", EnthuEffect);
4606 you_have(buf);
4609 if ((guaranteed || !rn2(10)) && (MikraEffect || u.uprops[MIKRA_EFFECT].extrinsic || have_ubergodstone())) {
4610 sprintf(buf, "the following problem: Monsters may create farting webs underneath you.");
4611 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", MikraEffect);
4612 you_have(buf);
4615 if ((guaranteed || !rn2(10)) && (GotsTooGoodEffect || u.uprops[GOTS_TOO_GOOD_EFFECT].extrinsic || have_toogoodgostone())) {
4616 sprintf(buf, "the following problem: If you have a lot of health relative to your maximum, your speed is lower.");
4617 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", GotsTooGoodEffect);
4618 you_have(buf);
4621 if ((guaranteed || !rn2(10)) && (NoFunWallsEffect || u.uprops[NO_FUN_WALLS].extrinsic || have_funwallstone())) {
4622 sprintf(buf, "the following problem: Walking into walls causes the wall to fart at you.");
4623 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", NoFunWallsEffect);
4624 you_have(buf);
4627 if ((guaranteed || !rn2(10)) && (CradleChaosEffect || u.uprops[CRADLE_CHAOS_EFFECT].extrinsic || have_chaoscradlestone())) {
4628 sprintf(buf, "the following problem: Newly spawned monsters have their levels increased to match the monster difficulty.");
4629 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", CradleChaosEffect);
4630 you_have(buf);
4633 if ((guaranteed || !rn2(10)) && (TezEffect || u.uprops[TEZ_EFFECT].extrinsic || have_tezstone())) {
4634 sprintf(buf, "the following problem: Squares with monsters on them are no longer see-through.");
4635 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", TezEffect);
4636 you_have(buf);
4639 if ((guaranteed || !rn2(10)) && (KillerRoomEffect || u.uprops[KILLER_ROOM_EFFECT].extrinsic || have_killerroomstone())) {
4640 sprintf(buf, "the following problem: Faux killer rooms spawn over time.");
4641 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", KillerRoomEffect);
4642 you_have(buf);
4645 if ((guaranteed || !rn2(10)) && (SanityTrebleEffect || u.uprops[SANITY_TREBLE_EFFECT].extrinsic || have_sanitytreblestone())) {
4646 sprintf(buf, "the following problem: Sanity effects will increase your sanity by a much higher amount than usual.");
4647 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", SanityTrebleEffect);
4648 you_have(buf);
4651 if ((guaranteed || !rn2(10)) && (StatDecreaseBug || u.uprops[STAT_DECREASE_BUG].extrinsic || have_statdecreasestone())) {
4652 sprintf(buf, "the following problem: The soft cap for your attributes is much lower.");
4653 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", StatDecreaseBug);
4654 you_have(buf);
4657 if ((guaranteed || !rn2(10)) && (SimeoutBug || u.uprops[SIMEOUT_BUG].extrinsic || have_simeoutstone())) {
4658 sprintf(buf, "the following problem: Your sanity slowly increases over time.");
4659 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", SimeoutBug);
4660 you_have(buf);
4663 if ((guaranteed || !rn2(10)) && (BadPartBug || u.uprops[BAD_PARTS].extrinsic || have_badpartstone())) {
4664 sprintf(buf, "in the bad part.");
4665 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", BadPartBug);
4666 you_are(buf);
4669 if ((guaranteed || !rn2(10)) && (CompletelyBadPartBug || u.uprops[COMPLETELY_BAD_PARTS].extrinsic || have_completelybadpartstone())) {
4670 sprintf(buf, "in the completely bad part.");
4671 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", CompletelyBadPartBug);
4672 you_are(buf);
4675 if ((guaranteed || !rn2(10)) && (EvilVariantActive || u.uprops[EVIL_VARIANT_ACTIVE].extrinsic || have_evilvariantstone())) {
4676 sprintf(buf, "the following problem: You're forced to play the evil variant.");
4677 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", EvilVariantActive);
4678 you_have(buf);
4681 if ((guaranteed || !rn2(10)) && (OrangeSpells || u.uprops[ORANGE_SPELLS].extrinsic || have_orangespellstone())) {
4682 sprintf(buf, "the following problem: Your spells became orange.");
4683 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", OrangeSpells);
4684 you_have(buf);
4687 if ((guaranteed || !rn2(10)) && (VioletSpells || u.uprops[VIOLET_SPELLS].extrinsic || have_violetspellstone())) {
4688 sprintf(buf, "the following problem: Your spells became violet.");
4689 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", VioletSpells);
4690 you_have(buf);
4693 if ((guaranteed || !rn2(10)) && (LongingEffect || u.uprops[LONGING_EFFECT].extrinsic || have_longingstone())) {
4694 sprintf(buf, "the following problem: The game bombards you with 'sexy' messages.");
4695 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", LongingEffect);
4696 you_have(buf);
4699 if ((guaranteed || !rn2(10)) && (CursedParts || u.uprops[CURSED_PARTS].extrinsic || have_cursedpartstone())) {
4700 sprintf(buf, "the following problem: Sometimes you're forced to wear cursed equipment.");
4701 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", CursedParts);
4702 you_have(buf);
4705 if ((guaranteed || !rn2(10)) && (Quaversal || u.uprops[QUAVERSAL].extrinsic || have_quaversalstone())) {
4706 sprintf(buf, "the following problem: Unless you're standing on specific tiles, the entire screen is black.");
4707 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", Quaversal);
4708 you_have(buf);
4711 if ((guaranteed || !rn2(10)) && (AppearanceShuffling || u.uprops[APPEARANCE_SHUFFLING].extrinsic || have_appearanceshufflingstone())) {
4712 sprintf(buf, "the following problem: The randomized appearances of items are occasionally shuffled.");
4713 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", AppearanceShuffling);
4714 you_have(buf);
4717 if ((guaranteed || !rn2(10)) && (BrownSpells || u.uprops[BROWN_SPELLS].extrinsic || have_brownspellstone())) {
4718 sprintf(buf, "the following problem: Your spells became brown.");
4719 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", BrownSpells);
4720 you_have(buf);
4723 if ((guaranteed || !rn2(10)) && (Choicelessness || u.uprops[CHOICELESSNESS].extrinsic || have_choicelessstone())) {
4724 sprintf(buf, "the following problem: Direction prompts often don't allow you to select anything.");
4725 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", Choicelessness);
4726 you_have(buf);
4729 if ((guaranteed || !rn2(10)) && (Goldspells || u.uprops[GOLDSPELLS].extrinsic || have_goldspellstone())) {
4730 sprintf(buf, "the following problem: You often can't choose which spell you want to cast.");
4731 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", Goldspells);
4732 you_have(buf);
4735 if ((guaranteed || !rn2(10)) && (Deprovement || u.uprops[DEPROVEMENT].extrinsic || have_deprovementstone())) {
4736 sprintf(buf, "the following problem: Leveling up no longer increases your maximum HP and Pw.");
4737 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", Deprovement);
4738 you_have(buf);
4741 if ((guaranteed || !rn2(10)) && (InitializationFail || u.uprops[INITIALIZATION_FAIL].extrinsic || have_initializationstone())) {
4742 sprintf(buf, "the following problem: Prompts that let you choose an item will not appear.");
4743 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", InitializationFail);
4744 you_have(buf);
4747 if ((guaranteed || !rn2(10)) && (GushlushEffect || u.uprops[GUSHLUSH].extrinsic || have_gushlushstone())) {
4748 sprintf(buf, "the following problem: To-hit, spellcasting chances and some other stuff always assume that you're experience level 1.");
4749 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", GushlushEffect);
4750 you_have(buf);
4753 if ((guaranteed || !rn2(10)) && (SoiltypeEffect || u.uprops[SOILTYPE].extrinsic || have_soiltypestone())) {
4754 sprintf(buf, "the following problem: You trigger ground-based traps even while flying or levitating.");
4755 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", SoiltypeEffect);
4756 you_have(buf);
4759 if ((guaranteed || !rn2(10)) && (DangerousTerrains || u.uprops[DANGEROUS_TERRAINS].extrinsic || have_dangerousterrainstone())) {
4760 sprintf(buf, "the following problem: Standing next to dangerous terrain may confuse or stun you with no warning.");
4761 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", DangerousTerrains);
4762 you_have(buf);
4765 if ((guaranteed || !rn2(10)) && (FalloutEffect || u.uprops[FALLOUT_EFFECT].extrinsic || have_falloutstone())) {
4766 sprintf(buf, "the following problem: Your contamination increases over time.");
4767 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FalloutEffect);
4768 you_have(buf);
4771 if ((guaranteed || !rn2(10)) && (MojibakeEffect || u.uprops[MOJIBAKE].extrinsic || have_mojibakestone())) {
4772 sprintf(buf, "the following problem: Some glyphs are randomized.");
4773 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", MojibakeEffect);
4774 you_have(buf);
4777 if ((guaranteed || !rn2(10)) && (GravationEffect || u.uprops[GRAVATION].extrinsic || have_gravationstone())) {
4778 sprintf(buf, "the following problem: Random monster spawns use aggravate monster rules.");
4779 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", GravationEffect);
4780 you_have(buf);
4783 if ((guaranteed || !rn2(10)) && (UncalledEffect || u.uprops[UNCALLED_EFFECT].extrinsic || have_uncalledstone())) {
4784 sprintf(buf, "the following problem: You can't give names to items or monsters.");
4785 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", UncalledEffect);
4786 you_have(buf);
4789 if ((guaranteed || !rn2(10)) && (ExplodingDiceEffect || u.uprops[EXPLODING_DICE].extrinsic || have_explodingdicestone())) {
4790 sprintf(buf, "the following problem: Monster attacks use exploding dice for damage calculations.");
4791 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", ExplodingDiceEffect);
4792 you_have(buf);
4795 if ((guaranteed || !rn2(10)) && (PermacurseEffect || u.uprops[PERMACURSE_EFFECT].extrinsic || have_permacursestone())) {
4796 sprintf(buf, "the following problem: Many conventional methods of curse removal no longer work.");
4797 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", PermacurseEffect);
4798 you_have(buf);
4801 if ((guaranteed || !rn2(10)) && (ShroudedIdentity || u.uprops[SHROUDED_IDENTITY].extrinsic || have_shroudedidentitystone())) {
4802 sprintf(buf, "the following problem: Identifying items is much harder.");
4803 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", ShroudedIdentity);
4804 you_have(buf);
4807 if ((guaranteed || !rn2(10)) && (FeelerGauges || u.uprops[FEELER_GAUGES].extrinsic || have_feelergaugesstone())) {
4808 sprintf(buf, "the following problem: Monsters always know where you are and come straight for you.");
4809 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FeelerGauges);
4810 you_have(buf);
4813 if ((guaranteed || !rn2(10)) && (LongScrewup || u.uprops[LONG_SCREWUP].extrinsic || have_longscrewupstone())) {
4814 sprintf(buf, "the following problem: Triggering a nasty trap causes the effect to last for a really long time.");
4815 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", LongScrewup);
4816 you_have(buf);
4819 if ((guaranteed || !rn2(10)) && (WingYellowChange || u.uprops[WING_YELLOW_GLYPHS].extrinsic || have_wingyellowstone())) {
4820 sprintf(buf, "the following problem: You're forced to play with a different tileset.");
4821 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", WingYellowChange);
4822 you_have(buf);
4825 if ((guaranteed || !rn2(10)) && (LifeSavingBug || u.uprops[LIFE_SAVING_BUG].extrinsic || have_lifesavingstone())) {
4826 sprintf(buf, "the following problem: Monsters occasionally lifesave when killed.");
4827 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", LifeSavingBug);
4828 you_have(buf);
4831 if ((guaranteed || !rn2(10)) && (CurseuseEffect || u.uprops[CURSEUSE_EFFECT].extrinsic || have_curseusestone())) {
4832 sprintf(buf, "the following problem: Any scroll, potion, spellbook, wand or tool you use automatically becomes cursed.");
4833 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", CurseuseEffect);
4834 you_have(buf);
4837 if ((guaranteed || !rn2(10)) && (CutNutritionEffect || u.uprops[CUT_NUTRITION].extrinsic || have_cutnutritionstone())) {
4838 sprintf(buf, "the following problem: You gain much less nutrition than usual.");
4839 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", CutNutritionEffect);
4840 you_have(buf);
4843 if ((guaranteed || !rn2(10)) && (SkillLossEffect || u.uprops[SKILL_LOSS_EFFECT].extrinsic || have_skilllossstone())) {
4844 sprintf(buf, "the following problem: Your skills will gradually lose training.");
4845 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", SkillLossEffect);
4846 you_have(buf);
4849 if ((guaranteed || !rn2(10)) && (AutopilotEffect || u.uprops[AUTOPILOT_EFFECT].extrinsic || have_autopilotstone())) {
4850 sprintf(buf, "the following problem: You're on autopilot.");
4851 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", AutopilotEffect);
4852 you_have(buf);
4855 if ((guaranteed || !rn2(10)) && (MysteriousForceActive || u.uprops[MYSTERIOUS_FORCE_EFFECT].extrinsic || have_forcestone())) {
4856 sprintf(buf, "the following problem: The dirty mysterious force full of dirt is back.");
4857 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", MysteriousForceActive);
4858 you_have(buf);
4861 if ((guaranteed || !rn2(10)) && (MonsterGlyphChange || u.uprops[MONSTER_GLYPH_BUG].extrinsic || have_monsterglyphstone())) {
4862 sprintf(buf, "the following problem: Monsters rapidly change glyphs.");
4863 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", MonsterGlyphChange);
4864 you_have(buf);
4867 if ((guaranteed || !rn2(10)) && (ChangingDirectives || u.uprops[CHANGING_DIRECTIVES].extrinsic || have_changingdirectivestone())) {
4868 sprintf(buf, "the following problem: The directives you've given to your pets will change randomly.");
4869 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", ChangingDirectives);
4870 you_have(buf);
4873 if ((guaranteed || !rn2(10)) && (ContainerKaboom || u.uprops[CONTAINER_KABOOM].extrinsic || have_containerkaboomstone())) {
4874 sprintf(buf, "the following problem: Opening a container causes bad stuff to happen.");
4875 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", ContainerKaboom);
4876 you_have(buf);
4879 if ((guaranteed || !rn2(10)) && (StealDegrading || u.uprops[STEAL_DEGRADING].extrinsic || have_stealdegradestone())) {
4880 sprintf(buf, "the following problem: If a monster steals your items, the stolen items are cursed and disenchanted.");
4881 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", StealDegrading);
4882 you_have(buf);
4885 if ((guaranteed || !rn2(10)) && (LeftInventoryBug || u.uprops[LEFT_INVENTORY].extrinsic || have_leftinventorystone())) {
4886 sprintf(buf, "the following problem: Items that leave your inventory will be unidentified.");
4887 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", LeftInventoryBug);
4888 you_have(buf);
4891 if ((guaranteed || !rn2(10)) && (FluctuatingSpeed || u.uprops[FLUCTUATING_SPEED].extrinsic || have_fluctuatingspeedstone())) {
4892 sprintf(buf, "the following problem: Your movement speed fluctuates from extremely fast to ultra slow.");
4893 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FluctuatingSpeed);
4894 you_have(buf);
4897 if ((guaranteed || !rn2(10)) && (TarmuStrokingNora || u.uprops[TARMU_STROKING_NORA].extrinsic || have_tarmustrokingnorastone())) {
4898 sprintf(buf, "the following problem: Searching may cause a new trap to spawn.");
4899 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", TarmuStrokingNora);
4900 you_have(buf);
4903 if ((guaranteed || !rn2(10)) && (FailureEffects || u.uprops[FAILURE_EFFECTS].extrinsic || have_failurestone())) {
4904 sprintf(buf, "the following problem: The messages 'nothing happens' or 'never mind' become dangerous.");
4905 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FailureEffects);
4906 you_have(buf);
4909 if ((guaranteed || !rn2(10)) && (BrightCyanSpells || u.uprops[BRIGHT_CYAN_SPELLS].extrinsic || have_brightcyanspellstone())) {
4910 sprintf(buf, "the following problem: Your spells became bright cyan.");
4911 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", BrightCyanSpells);
4912 you_have(buf);
4915 if ((guaranteed || !rn2(10)) && (FrequentationSpawns || u.uprops[FREQUENTATION_SPAWNS].extrinsic || have_frequentationspawnstone())) {
4916 sprintf(buf, "the following problem: Some monster trait is more common than usual.");
4917 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FrequentationSpawns);
4918 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%s)", montraitname(u.frequentationtrait));
4919 you_have(buf);
4922 if ((guaranteed || !rn2(10)) && (PetAIScrewed || u.uprops[PET_AI_SCREWED].extrinsic || have_petaistone())) {
4923 sprintf(buf, "the following problem: Your pets refuse to follow you.");
4924 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", PetAIScrewed);
4925 you_have(buf);
4928 if ((guaranteed || !rn2(10)) && (SatanEffect || u.uprops[SATAN_EFFECT].extrinsic || have_satanstone())) {
4929 sprintf(buf, "the following problem: Satan made it so that changing dungeon levels paralyzes you for a turn.");
4930 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", SatanEffect);
4931 you_have(buf);
4934 if ((guaranteed || !rn2(10)) && (RememberanceEffect || u.uprops[REMEMBERANCE_EFFECT].extrinsic || have_rememberancestone())) {
4935 sprintf(buf, "the following problem: Spells with low spell memory are harder to cast.");
4936 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", RememberanceEffect);
4937 you_have(buf);
4940 if ((guaranteed || !rn2(10)) && (PokelieEffect || u.uprops[POKELIE_EFFECT].extrinsic || have_pokeliestone())) {
4941 sprintf(buf, "the following problem: The pokedex lies to you.");
4942 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", PokelieEffect);
4943 you_have(buf);
4946 if ((guaranteed || !rn2(10)) && (AlwaysAutopickup || u.uprops[AUTOPICKUP_ALWAYS].extrinsic || have_autopickupstone())) {
4947 sprintf(buf, "the following problem: You always pick up items.");
4948 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", AlwaysAutopickup);
4949 you_have(buf);
4952 if ((guaranteed || !rn2(10)) && (DywypiProblem || u.uprops[DYWYPI_PROBLEM].extrinsic || have_dywypistone())) {
4953 sprintf(buf, "the following problem: If you lifesave, you have to give the correct answer or you die anyway.");
4954 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", DywypiProblem);
4955 you_have(buf);
4958 if ((guaranteed || !rn2(10)) && (SilverSpells || u.uprops[SILVER_SPELLS].extrinsic || have_silverspellstone())) {
4959 sprintf(buf, "the following problem: Your spells became silver.");
4960 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", SilverSpells);
4961 you_have(buf);
4964 if ((guaranteed || !rn2(10)) && (MetalSpells || u.uprops[METAL_SPELLS].extrinsic || have_metalspellstone())) {
4965 sprintf(buf, "the following problem: Your spells became metal.");
4966 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", MetalSpells);
4967 you_have(buf);
4970 if ((guaranteed || !rn2(10)) && (PlatinumSpells || u.uprops[PLATINUM_SPELLS].extrinsic || have_platinumspellstone())) {
4971 sprintf(buf, "the following problem: Your spells became platinum.");
4972 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", PlatinumSpells);
4973 you_have(buf);
4976 if ((guaranteed || !rn2(10)) && (ManlerEffect || u.uprops[MANLER_EFFECT].extrinsic || have_manlerstone())) {
4977 sprintf(buf, "the following problem: The manler is chasing you.");
4978 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", ManlerEffect);
4979 you_have(buf);
4982 if ((guaranteed || !rn2(10)) && (DoorningEffect || u.uprops[DOORNING_EFFECT].extrinsic || have_doorningstone())) {
4983 sprintf(buf, "the following problem: Doors are dangerous.");
4984 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", DoorningEffect);
4985 you_have(buf);
4988 if ((guaranteed || !rn2(10)) && (NownsibleEffect || u.uprops[NOWNSIBLE_EFFECT].extrinsic || have_nownsiblestone())) {
4989 sprintf(buf, "the following problem: Triggering a trap makes it invisible.");
4990 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", NownsibleEffect);
4991 you_have(buf);
4994 if ((guaranteed || !rn2(10)) && (ElmStreetEffect || u.uprops[ELM_STREET_EFFECT].extrinsic || have_elmstreetstone())) {
4995 sprintf(buf, "the following problem: The game behaves as if it were Friday the 13th.");
4996 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", ElmStreetEffect);
4997 you_have(buf);
5000 if ((guaranteed || !rn2(10)) && (MonnoiseEffect || u.uprops[MONNOISE_EFFECT].extrinsic || have_monnoisestone())) {
5001 sprintf(buf, "the following problem: Monsters make noises.");
5002 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", MonnoiseEffect);
5003 you_have(buf);
5006 if ((guaranteed || !rn2(10)) && (RangCallEffect || u.uprops[RANG_CALL_EFFECT].extrinsic || have_rangcallstone())) {
5007 sprintf(buf, "the following problem: The presence of boss monsters increases your sanity.");
5008 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", RangCallEffect);
5009 you_have(buf);
5012 if ((guaranteed || !rn2(10)) && (RecurringSpellLoss || u.uprops[RECURRING_SPELL_LOSS].extrinsic || have_recurringspelllossstone())) {
5013 sprintf(buf, "the following problem: You repeatedly lose spell memory.");
5014 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", RecurringSpellLoss);
5015 you_have(buf);
5018 if ((guaranteed || !rn2(10)) && (AntitrainingEffect || u.uprops[ANTI_TRAINING_EFFECT].extrinsic || have_antitrainingstone())) {
5019 sprintf(buf, "the following problem: Your skill training is occasionally reduced.");
5020 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", AntitrainingEffect);
5021 you_have(buf);
5024 if ((guaranteed || !rn2(10)) && (TechoutBug || u.uprops[TECHOUT_BUG].extrinsic || have_techoutstone())) {
5025 sprintf(buf, "the following problem: Your techniques may sometimes be put on timeout.");
5026 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", TechoutBug);
5027 you_have(buf);
5030 if ((guaranteed || !rn2(10)) && (StatDecay || u.uprops[STAT_DECAY].extrinsic || have_statdecaystone())) {
5031 sprintf(buf, "the following problem: Your stats will gradually decay.");
5032 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", StatDecay);
5033 you_have(buf);
5036 if ((guaranteed || !rn2(10)) && (Movemork || u.uprops[MOVEMORKING].extrinsic || have_movemorkstone())) {
5037 sprintf(buf, "the following problem: Monsters are generated with movement energy.");
5038 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", Movemork);
5039 you_have(buf);
5042 if ((guaranteed || !rn2(10)) && (LootcutBug || u.uprops[LOOTCUT_BUG].extrinsic || have_lootcutstone())) {
5043 sprintf(buf, "the following problem: Monsters delete their musable items when killed.");
5044 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", LootcutBug);
5045 you_have(buf);
5048 if ((guaranteed || !rn2(10)) && (MonsterSpeedBug || u.uprops[MONSTER_SPEED_BUG].extrinsic || have_monsterspeedstone())) {
5049 sprintf(buf, "the following problem: Monsters are moving faster.");
5050 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", MonsterSpeedBug);
5051 you_have(buf);
5054 if ((guaranteed || !rn2(10)) && (ScalingBug || u.uprops[SCALING_BUG].extrinsic || have_scalingstone())) {
5055 sprintf(buf, "the following problem: Minimum monster level depends on your current depth.");
5056 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", ScalingBug);
5057 you_have(buf);
5060 if ((guaranteed || !rn2(10)) && (EnmityBug || u.uprops[ENMITY_BUG].extrinsic || have_inimicalstone())) {
5061 sprintf(buf, "the following problem: Monsters always spawn hostile.");
5062 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", EnmityBug);
5063 you_have(buf);
5066 if ((guaranteed || !rn2(10)) && (WhiteSpells || u.uprops[WHITE_SPELLS].extrinsic || have_whitespellstone())) {
5067 sprintf(buf, "the following problem: Your spells became white.");
5068 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", WhiteSpells);
5069 you_have(buf);
5072 if ((guaranteed || !rn2(10)) && (CompleteGraySpells || u.uprops[COMPLETE_GRAY_SPELLS].extrinsic || have_greyoutstone())) {
5073 sprintf(buf, "the following problem: Your spells became completely gray.");
5074 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", CompleteGraySpells);
5075 you_have(buf);
5078 if ((guaranteed || !rn2(10)) && (QuasarVision || u.uprops[QUASAR_BUG].extrinsic || have_quasarstone())) {
5079 sprintf(buf, "the following problem: You can barely see the quasars.");
5080 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", QuasarVision);
5081 you_have(buf);
5084 if ((guaranteed || !rn2(10)) && (MommaBugEffect || u.uprops[MOMMA_BUG].extrinsic || have_mommystone())) {
5085 sprintf(buf, "the following problem: Your momma will repeatedly be insulted.");
5086 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", MommaBugEffect);
5087 you_have(buf);
5090 if ((guaranteed || !rn2(10)) && (HorrorBugEffect || u.uprops[HORROR_BUG].extrinsic || have_horrorstone())) {
5091 sprintf(buf, "the following problem: You will repeatedly get hit with status effects.");
5092 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", HorrorBugEffect);
5093 you_have(buf);
5096 if ((guaranteed || !rn2(10)) && (ArtificerBug || u.uprops[ARTIFICER_BUG].extrinsic || have_artificialstone())) {
5097 sprintf(buf, "the following problem: You will be forced to equip evil artifacts.");
5098 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", ArtificerBug);
5099 you_have(buf);
5102 if ((guaranteed || !rn2(10)) && (WereformBug || u.uprops[WEREFORM_BUG].extrinsic || have_wereformstone())) {
5103 sprintf(buf, "the following problem: You randomly polymorph into werecreatures.");
5104 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", WereformBug);
5105 you_have(buf);
5108 if ((guaranteed || !rn2(10)) && (NonprayerBug || u.uprops[NON_PRAYER_BUG].extrinsic || have_antiprayerstone())) {
5109 sprintf(buf, "the following problem: Your prayer timeout goes up instead of down.");
5110 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", NonprayerBug);
5111 you_have(buf);
5114 if ((guaranteed || !rn2(10)) && (EvilPatchEffect || u.uprops[EVIL_PATCH_EFFECT].extrinsic || have_evilpatchstone())) {
5115 sprintf(buf, "the following problem: You will get nasty trap effects intrinsically over time.");
5116 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", EvilPatchEffect);
5117 you_have(buf);
5120 if ((guaranteed || !rn2(10)) && (HardModeEffect || u.uprops[HARD_MODE_EFFECT].extrinsic || have_hardmodestone())) {
5121 sprintf(buf, "the following problem: All damage you take is doubled.");
5122 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", HardModeEffect);
5123 you_have(buf);
5126 if ((guaranteed || !rn2(10)) && (SecretAttackBug || u.uprops[SECRET_ATTACK_BUG].extrinsic || have_secretattackstone())) {
5127 sprintf(buf, "the following problem: Monsters occasionally use their secret attacks.");
5128 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", SecretAttackBug);
5129 you_have(buf);
5132 if ((guaranteed || !rn2(10)) && (EaterBugEffect || u.uprops[EATER_BUG].extrinsic || have_eaterstone())) {
5133 sprintf(buf, "the following problem: Monsters can eat all items they encounter.");
5134 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", EaterBugEffect);
5135 you_have(buf);
5138 if ((guaranteed || !rn2(10)) && (CovetousnessBug || u.uprops[COVETOUSNESS_BUG].extrinsic || have_covetousstone())) {
5139 sprintf(buf, "the following problem: Covetous monster AI fires each turn.");
5140 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", CovetousnessBug);
5141 you_have(buf);
5144 if ((guaranteed || !rn2(10)) && (NotSeenBug || u.uprops[NOT_SEEN_BUG].extrinsic || have_nonseeingstone())) {
5145 sprintf(buf, "the following problem: The walls became invisible.");
5146 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", NotSeenBug);
5147 you_have(buf);
5150 if ((guaranteed || !rn2(10)) && (DarkModeBug || u.uprops[DARK_MODE_BUG].extrinsic || have_darkmodestone())) {
5151 sprintf(buf, "the following problem: Lit tiles aren't visible unless you would also see them if they were unlit.");
5152 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", DarkModeBug);
5153 you_have(buf);
5156 if ((guaranteed || !rn2(10)) && (AntisearchEffect || u.uprops[ANTISEARCH_EFFECT].extrinsic || have_unfindablestone())) {
5157 sprintf(buf, "the following problem: The search command never finds anything.");
5158 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", AntisearchEffect);
5159 you_have(buf);
5162 if ((guaranteed || !rn2(10)) && (HomicideEffect || u.uprops[HOMICIDE_EFFECT].extrinsic || have_homicidestone())) {
5163 sprintf(buf, "the following problem: Monsters build new traps for you to blunder into.");
5164 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", HomicideEffect);
5165 you_have(buf);
5168 if ((guaranteed || !rn2(10)) && (NastynationBug || u.uprops[NASTY_NATION_BUG].extrinsic || have_multitrappingstone())) {
5169 sprintf(buf, "the following problem: All trap types except beneficial ones are equally likely to generate.");
5170 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", NastynationBug);
5171 you_have(buf);
5174 if ((guaranteed || !rn2(10)) && (WakeupCallBug || u.uprops[WAKEUP_CALL_BUG].extrinsic || have_wakeupcallstone())) {
5175 sprintf(buf, "the following problem: Peaceful monsters may spontaneously turn hostile.");
5176 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", WakeupCallBug);
5177 you_have(buf);
5180 if ((guaranteed || !rn2(10)) && (GrayoutBug || u.uprops[GRAYOUT_BUG].extrinsic || have_grayoutstone())) {
5181 sprintf(buf, "the following problem: The display intermittently becomes all gray.");
5182 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", GrayoutBug);
5183 you_have(buf);
5186 if ((guaranteed || !rn2(10)) && (GrayCenterBug || u.uprops[GRAY_CENTER_BUG].extrinsic || have_graycenterstone())) {
5187 sprintf(buf, "the following problem: Your immediate surroundings are obscured by a gray shroud.");
5188 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", GrayCenterBug);
5189 you_have(buf);
5192 if ((guaranteed || !rn2(10)) && (CheckerboardBug || u.uprops[CHECKERBOARD_BUG].extrinsic || have_checkerboardstone())) {
5193 sprintf(buf, "the following problem: Only one color of checkerboard tiles is ever visible at any given time.");
5194 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", CheckerboardBug);
5195 you_have(buf);
5198 if ((guaranteed || !rn2(10)) && (ClockwiseSpinBug || u.uprops[CLOCKWISE_SPIN_BUG].extrinsic || have_clockwisestone())) {
5199 sprintf(buf, "the following problem: Your directional keys are shifted 45 degrees clockwise.");
5200 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", ClockwiseSpinBug);
5201 you_have(buf);
5204 if ((guaranteed || !rn2(10)) && (CounterclockwiseSpin || u.uprops[COUNTERCLOCKWISE_SPIN_BUG].extrinsic || have_counterclockwisestone())) {
5205 sprintf(buf, "the following problem: Your directional keys are shifted 90 degrees counterclockwise.");
5206 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", CounterclockwiseSpin);
5207 you_have(buf);
5210 if ((guaranteed || !rn2(10)) && (LagBugEffect || u.uprops[LAG_BUG].extrinsic || have_lagstone())) {
5211 sprintf(buf, "the following problem: The game lags.");
5212 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", LagBugEffect);
5213 you_have(buf);
5216 if ((guaranteed || !rn2(10)) && (BlesscurseEffect || u.uprops[BLESSCURSE_EFFECT].extrinsic || have_blesscursestone())) {
5217 sprintf(buf, "the following problem: Picking up a blessed item instantly curses it.");
5218 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", BlesscurseEffect);
5219 you_have(buf);
5222 if ((guaranteed || !rn2(10)) && (DeLightBug || u.uprops[DE_LIGHT_BUG].extrinsic || have_delightstone())) {
5223 sprintf(buf, "the following problem: Tiles that you're walking on automatically become unlit.");
5224 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", DeLightBug);
5225 you_have(buf);
5228 if ((guaranteed || !rn2(10)) && (DischargeBug || u.uprops[DISCHARGE_BUG].extrinsic || have_dischargestone())) {
5229 sprintf(buf, "the following problem: If you use wands or tools that have charges, more charges are used up than normal.");
5230 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", DischargeBug);
5231 you_have(buf);
5234 if ((guaranteed || !rn2(10)) && (TrashingBugEffect || u.uprops[TRASHING_EFFECT].extrinsic || have_trashstone())) {
5235 sprintf(buf, "the following problem: If you equip enchanted weapons, armor or rings, their enchantment value decreases.");
5236 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", TrashingBugEffect);
5237 you_have(buf);
5240 if ((guaranteed || !rn2(10)) && (FilteringBug || u.uprops[FILTERING_BUG].extrinsic || have_filteringstone())) {
5241 sprintf(buf, "the following problem: Certain messages may be replaced with generic ones.");
5242 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FilteringBug);
5243 you_have(buf);
5246 if ((guaranteed || !rn2(10)) && (DeformattingBug || u.uprops[DEFORMATTING_BUG].extrinsic || have_deformattingstone())) {
5247 sprintf(buf, "the following problem: Your pokedex doesn't work.");
5248 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", DeformattingBug);
5249 you_have(buf);
5252 if ((guaranteed || !rn2(10)) && (FlickerStripBug || u.uprops[FLICKER_STRIP_BUG].extrinsic || have_flickerstripstone())) {
5253 sprintf(buf, "the following problem: The bottom status line only displays garbage strings.");
5254 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FlickerStripBug);
5255 you_have(buf);
5258 if ((guaranteed || !rn2(10)) && (UndressingEffect || u.uprops[UNDRESSING_EFFECT].extrinsic || have_undressingstone())) {
5259 sprintf(buf, "the following problem: You spontaneously take off equipment.");
5260 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", UndressingEffect);
5261 you_have(buf);
5264 if ((guaranteed || !rn2(10)) && (Hyperbluewalls || u.uprops[HYPERBLUEWALL_BUG].extrinsic || have_hyperbluestone())) {
5265 sprintf(buf, "the following problem: Walls are blue, and walking into them hurts you.");
5266 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", Hyperbluewalls);
5267 you_have(buf);
5270 if ((guaranteed || !rn2(10)) && (NoliteBug || u.uprops[NOLITE_BUG].extrinsic || have_nolightstone())) {
5271 sprintf(buf, "the following problem: Staircases and object piles are no longer highlighted.");
5272 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", NoliteBug);
5273 you_have(buf);
5276 if ((guaranteed || !rn2(10)) && (ParanoiaBugEffect || u.uprops[PARANOIA_BUG].extrinsic || have_paranoiastone())) {
5277 sprintf(buf, "the following problem: There is no confirmation if you walk into traps, water or lava.");
5278 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", ParanoiaBugEffect);
5279 you_have(buf);
5282 if ((guaranteed || !rn2(10)) && (FleecescriptBug || u.uprops[FLEECESCRIPT_BUG].extrinsic || have_fleecestone())) {
5283 sprintf(buf, "the following problem: Inventory item descriptions appear in fleecy colors, which is actually not all that problematic. :-)");
5284 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FleecescriptBug);
5285 you_have(buf);
5288 if ((guaranteed || !rn2(10)) && (InterruptEffect || u.uprops[INTERRUPT_EFFECT].extrinsic || have_interruptionstone())) {
5289 sprintf(buf, "the following problem: The read, quaff, zap and apply commands now take several turns to use and can be interrupted.");
5290 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", InterruptEffect);
5291 you_have(buf);
5294 if ((guaranteed || !rn2(10)) && (DustbinBug || u.uprops[DUSTBIN_BUG].extrinsic || have_dustbinstone())) {
5295 sprintf(buf, "the following problem: If you pick up a scroll, it may disintegrate.");
5296 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", DustbinBug);
5297 you_have(buf);
5300 if ((guaranteed || !rn2(10)) && (ManaBatteryBug || u.uprops[MANA_BATTERY_BUG].extrinsic || have_batterystone())) {
5301 sprintf(buf, "a living mana battery.");
5302 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", ManaBatteryBug);
5303 you_are(buf);
5306 if ((guaranteed || !rn2(10)) && (Monsterfingers || u.uprops[MONSTERFINGERS_EFFECT].extrinsic || have_butterfingerstone())) {
5307 sprintf(buf, "the following problem: Picking up potions may break them and subject you to their vapors.");
5308 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", Monsterfingers);
5309 you_have(buf);
5312 if ((guaranteed || !rn2(10)) && (MiscastBug || u.uprops[MISCAST_BUG].extrinsic || have_miscastingstone())) {
5313 sprintf(buf, "the following problem: Casting a spell always causes backlash, regardless of whether the spell worked.");
5314 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", MiscastBug);
5315 you_have(buf);
5318 if ((guaranteed || !rn2(10)) && (MessageSuppression || u.uprops[MESSAGE_SUPPRESSION_BUG].extrinsic || have_messagesuppressionstone())) {
5319 sprintf(buf, "the following problem: The top status line doesn't display anything.");
5320 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", MessageSuppression);
5321 you_have(buf);
5324 if ((guaranteed || !rn2(10)) && (StuckAnnouncement || u.uprops[STUCK_ANNOUNCEMENT_BUG].extrinsic || have_stuckannouncementstone())) {
5325 sprintf(buf, "the following problem: The bottom status line only updates if you explicitly tell it to do so.");
5326 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", StuckAnnouncement);
5327 you_have(buf);
5330 if ((guaranteed || !rn2(10)) && (BloodthirstyEffect || u.uprops[BLOODTHIRSTY_EFFECT].extrinsic || have_stormstone())) {
5331 sprintf(buf, "the following problem: There is no confirmation if you walk into a peaceful monster.");
5332 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", BloodthirstyEffect);
5333 you_have(buf);
5336 if ((guaranteed || !rn2(10)) && (MaximumDamageBug || u.uprops[MAXIMUM_DAMAGE_BUG].extrinsic || have_maximumdamagestone())) {
5337 sprintf(buf, "the following problem: Monster attacks always deal maximum damage to you.");
5338 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", MaximumDamageBug);
5339 you_have(buf);
5342 if ((guaranteed || !rn2(10)) && (LatencyBugEffect || u.uprops[LATENCY_BUG].extrinsic || have_latencystone())) {
5343 sprintf(buf, "the following problem: There is background latency.");
5344 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", LatencyBugEffect);
5345 you_have(buf);
5348 if ((guaranteed || !rn2(10)) && (StarlitBug || u.uprops[STARLIT_BUG].extrinsic || have_starlitskystone())) {
5349 sprintf(buf, "the following problem: All monsters look the same and you can't tell them apart.");
5350 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", StarlitBug);
5351 you_have(buf);
5354 if ((guaranteed || !rn2(10)) && (KnowledgeBug || u.uprops[KNOWLEDGE_BUG].extrinsic || have_trapknowledgestone())) {
5355 sprintf(buf, "the following problem: All traps look the same and you can't tell them apart.");
5356 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", KnowledgeBug);
5357 you_have(buf);
5360 if ((guaranteed || !rn2(10)) && (HighscoreBug || u.uprops[HIGHSCORE_BUG].extrinsic || have_highscorestone())) {
5361 sprintf(buf, "the following problem: The game continuously spawns spacewars monsters and nasty traps.");
5362 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", HighscoreBug);
5363 you_have(buf);
5366 if ((guaranteed || !rn2(10)) && (PinkSpells || u.uprops[PINK_SPELLS].extrinsic || have_pinkspellstone())) {
5367 sprintf(buf, "the following problem: Your spells became pink.");
5368 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", PinkSpells);
5369 you_have(buf);
5372 if ((guaranteed || !rn2(10)) && (GreenSpells || u.uprops[GREEN_SPELLS].extrinsic || have_greenspellstone())) {
5373 sprintf(buf, "the following problem: Your spells became green.");
5374 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", GreenSpells);
5375 you_have(buf);
5378 if ((guaranteed || !rn2(10)) && (EvencoreEffect || u.uprops[EVC_EFFECT].extrinsic || have_evcstone())) {
5379 sprintf(buf, "the following problem: The game will spawn fake invisible monster markers.");
5380 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", EvencoreEffect);
5381 you_have(buf);
5384 if ((guaranteed || !rn2(10)) && (UnderlayerBug || u.uprops[UNDERLAYER_BUG].extrinsic || have_underlaidstone())) {
5385 sprintf(buf, "the following problem: Invisible monster markers are not visible, but bumping into them uses up a turn.");
5386 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", UnderlayerBug);
5387 you_have(buf);
5390 if ((guaranteed || !rn2(10)) && (DamageMeterBug || u.uprops[DAMAGE_METER_BUG].extrinsic || have_damagemeterstone())) {
5391 sprintf(buf, "the following problem: The game won't tell you exactly how much damage an attack does.");
5392 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", DamageMeterBug);
5393 you_have(buf);
5396 if ((guaranteed || !rn2(10)) && (ArbitraryWeightBug || u.uprops[ARBITRARY_WEIGHT_BUG].extrinsic || have_weightstone())) {
5397 sprintf(buf, "the following problem: You can't see your carry capacity or the weight of items.");
5398 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", ArbitraryWeightBug);
5399 you_have(buf);
5402 if ((guaranteed || !rn2(10)) && (FuckedInfoBug || u.uprops[FUCKED_INFO_BUG].extrinsic || have_infofuckstone())) {
5403 sprintf(buf, "the following problem: You can't see what character you are playing.");
5404 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FuckedInfoBug);
5405 you_have(buf);
5408 if ((guaranteed || !rn2(10)) && (BlackSpells || u.uprops[BLACK_SPELLS].extrinsic || have_blackspellstone())) {
5409 sprintf(buf, "the following problem: Your spells became black.");
5410 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", BlackSpells);
5411 you_have(buf);
5414 if ((guaranteed || !rn2(10)) && (CyanSpells || u.uprops[CYAN_SPELLS].extrinsic || have_cyanspellstone())) {
5415 sprintf(buf, "the following problem: Your spells became cyan.");
5416 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", CyanSpells);
5417 you_have(buf);
5420 if ((guaranteed || !rn2(10)) && (HeapEffectBug || u.uprops[HEAP_EFFECT].extrinsic || have_heapstone())) {
5421 sprintf(buf, "the following problem: Messages are repeated randomly.");
5422 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", HeapEffectBug);
5423 you_have(buf);
5426 if ((guaranteed || !rn2(10)) && (BlueSpells || u.uprops[BLUE_SPELLS].extrinsic || have_bluespellstone())) {
5427 sprintf(buf, "the following problem: Your spells became blue.");
5428 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", BlueSpells);
5429 you_have(buf);
5432 if ((guaranteed || !rn2(10)) && (TronEffect || u.uprops[TRON_EFFECT].extrinsic || have_tronstone())) {
5433 sprintf(buf, "the following problem: You can't walk in the same direction twice in a row.");
5434 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", TronEffect);
5435 you_have(buf);
5438 if ((guaranteed || !rn2(10)) && (RedSpells || u.uprops[RED_SPELLS].extrinsic || have_redspellstone())) {
5439 sprintf(buf, "the following problem: Your spells became red.");
5440 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", RedSpells);
5441 you_have(buf);
5444 if ((guaranteed || !rn2(10)) && (TooHeavyEffect || u.uprops[TOO_HEAVY_EFFECT].extrinsic || have_tooheavystone())) {
5445 sprintf(buf, "the following problem: Picking up an item increases your carried weight by more than what the item weighs.");
5446 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", TooHeavyEffect);
5447 you_have(buf);
5450 if ((guaranteed || !rn2(10)) && (ElongationBug || u.uprops[ELONGATION_BUG].extrinsic || have_elongatedstone())) {
5451 sprintf(buf, "the following problem: Monsters' hug attacks, ranged weapons and breaths can hit you from very far away.");
5452 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", ElongationBug);
5453 you_have(buf);
5456 if ((guaranteed || !rn2(10)) && (WrapoverEffect || u.uprops[WRAPOVER_EFFECT].extrinsic || have_wrapoverstone())) {
5457 sprintf(buf, "the following problem: Your positively enchanted items may randomly turn into negatively enchanted ones.");
5458 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", WrapoverEffect);
5459 you_have(buf);
5462 if ((guaranteed || !rn2(10)) && (DestructionEffect || u.uprops[DESTRUCTION_EFFECT].extrinsic || have_destructionstone())) {
5463 sprintf(buf, "the following problem: Item destruction may happen randomly.");
5464 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", DestructionEffect);
5465 you_have(buf);
5468 if ((guaranteed || !rn2(10)) && (MeleePrefixBug || u.uprops[MELEE_PREFIX_BUG].extrinsic || have_meleeprefixstone())) {
5469 sprintf(buf, "the following problem: If you simply walk into monsters to attack, you lose a turn.");
5470 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", MeleePrefixBug);
5471 you_have(buf);
5474 if ((guaranteed || !rn2(10)) && (AutomoreBug || u.uprops[AUTOMORE_BUG].extrinsic || have_automorestone())) {
5475 sprintf(buf, "the following problem: There are no --More-- prompts.");
5476 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", AutomoreBug);
5477 you_have(buf);
5480 if ((guaranteed || !rn2(10)) && (UnfairAttackBug || u.uprops[UNFAIR_ATTACK_BUG].extrinsic || have_unfairattackstone())) {
5481 sprintf(buf, "the following problem: Monsters will occasionally use very unfair attacks on you.");
5482 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", UnfairAttackBug);
5483 you_have(buf);
5486 if ((guaranteed || !rn2(10)) && (DisconnectedStairs || u.uprops[DISCONNECTED_STAIRS].extrinsic || have_disconnectstone())) {
5487 sprintf(buf, "the following problem: Staircases are disconnected.");
5488 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", DisconnectedStairs);
5489 you_have(buf);
5492 if ((guaranteed || !rn2(10)) && (InterfaceScrewed || u.uprops[INTERFACE_SCREW].extrinsic || have_interfacescrewstone())) {
5493 sprintf(buf, "the following problem: The main game display does not update automatically.");
5494 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", InterfaceScrewed);
5495 you_have(buf);
5498 if ((guaranteed || !rn2(10)) && (Bossfights || u.uprops[BOSSFIGHT].extrinsic || have_bossfightstone())) {
5499 sprintf(buf, "the following problem: Boss monsters spawn much more often.");
5500 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", Bossfights);
5501 you_have(buf);
5504 if ((guaranteed || !rn2(10)) && (EntireLevelMode || u.uprops[ENTIRE_LEVEL].extrinsic || have_entirelevelstone())) {
5505 sprintf(buf, "the following problem: Monster types that used to be rare are common now.");
5506 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", EntireLevelMode);
5507 you_have(buf);
5510 if ((guaranteed || !rn2(10)) && (BonesLevelChange || u.uprops[BONES_CHANGE].extrinsic || have_bonestone())) {
5511 sprintf(buf, "the following problem: You always find or leave bones levels if possible.");
5512 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", BonesLevelChange);
5513 you_have(buf);
5516 if ((guaranteed || !rn2(10)) && (AutocursingEquipment || u.uprops[AUTOCURSE_EQUIP].extrinsic || have_autocursestone())) {
5517 sprintf(buf, "the following problem: Every item you put on automatically curses itself.");
5518 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", AutocursingEquipment);
5519 you_have(buf);
5522 if ((guaranteed || !rn2(10)) && (HighlevelStatus || u.uprops[HIGHLEVEL_STATUS].extrinsic || have_highlevelstone())) {
5523 sprintf(buf, "the following problem: Higher-level monsters are more likely to spawn.");
5524 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", HighlevelStatus);
5525 you_have(buf);
5528 if ((guaranteed || !rn2(10)) && (SpellForgetting || u.uprops[SPELL_FORGETTING].extrinsic || have_spellforgettingstone())) {
5529 sprintf(buf, "the following problem: Your spell memory decreases rapidly.");
5530 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", SpellForgetting);
5531 you_have(buf);
5534 if ((guaranteed || !rn2(10)) && (SoundEffectBug || u.uprops[SOUND_EFFECT_BUG].extrinsic || have_soundeffectstone())) {
5535 sprintf(buf, "the following problem: Things that happen will play 'sound effects'.");
5536 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", SoundEffectBug);
5537 you_have(buf);
5540 if ((guaranteed || !rn2(10)) && (CaptchaProblem || u.uprops[CAPTCHA].extrinsic || have_captchastone())) {
5541 sprintf(buf, "the following problem: You sometimes have to solve captchas.");
5542 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", CaptchaProblem);
5543 you_have(buf);
5545 if ((guaranteed || !rn2(10)) && (FarlookProblem || u.uprops[FARLOOK_BUG].extrinsic || have_farlookstone())) {
5546 sprintf(buf, "the following problem: Farlooking peaceful monsters angers them.");
5547 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FarlookProblem);
5548 you_have(buf);
5550 if ((guaranteed || !rn2(10)) && (RespawnProblem || u.uprops[RESPAWN_BUG].extrinsic || have_respawnstone())) {
5551 sprintf(buf, "the following problem: Killing monsters will cause them to respawn somewhere on the level.");
5552 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", RespawnProblem);
5553 you_have(buf);
5556 if ((guaranteed || !rn2(10)) && (BigscriptEffect || u.uprops[BIGSCRIPT].extrinsic || have_bigscriptstone())) {
5557 sprintf(buf, "BIGscript.");
5558 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", BigscriptEffect);
5559 you_have(buf);
5561 if ((guaranteed || !rn2(10)) && (BankTrapEffect || u.uprops[BANKBUG].extrinsic || have_bankstone())) {
5562 sprintf(buf, "the following problem: Your money will wander into a mysterious bank.");
5563 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", BankTrapEffect);
5564 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (amount stored: %d)", u.bankcashamount);
5565 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (money limit: %d)", u.bankcashlimit);
5566 you_have(buf);
5567 } else {
5568 if ((guaranteed || !rn2(10)) && u.bankcashamount) {
5569 if (wizard || (!rn2(10)) || final >= 1 ) {
5570 sprintf(buf, "the following amount of cash stored in the bank:");
5571 sprintf(eos(buf), " %d", u.bankcashamount);
5572 you_have(buf);
5575 if ((guaranteed || !rn2(10)) && u.bankcashlimit) {
5576 if (wizard || (!rn2(10)) || final >= 1 ) {
5577 sprintf(buf, "the following bank cash limit:");
5578 sprintf(eos(buf), " %d", u.bankcashlimit);
5579 you_have(buf);
5583 if ((guaranteed || !rn2(10)) && (MapTrapEffect || u.uprops[MAPBUG].extrinsic || have_mapstone())) {
5584 sprintf(buf, "the following problem: The map doesn't display correctly.");
5585 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", MapTrapEffect);
5586 you_have(buf);
5588 if ((guaranteed || !rn2(10)) && (TechTrapEffect || u.uprops[TECHBUG].extrinsic || have_techniquestone())) {
5589 sprintf(buf, "the following problem: Your techniques frequently don't work.");
5590 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", TechTrapEffect);
5591 you_have(buf);
5593 if ((guaranteed || !rn2(10)) && (RecurringDisenchant || u.uprops[RECURRING_DISENCHANT].extrinsic || have_disenchantmentstone())) {
5594 sprintf(buf, "the following problem: Your possessions disenchant themselves spontaneously.");
5595 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", RecurringDisenchant);
5596 you_have(buf);
5598 if ((guaranteed || !rn2(10)) && (verisiertEffect || u.uprops[VERISIERTEFFECT].extrinsic || have_verisiertstone())) {
5599 sprintf(buf, "the following problem: Monster respawn speeds up rapidly.");
5600 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", verisiertEffect);
5601 you_have(buf);
5603 if ((guaranteed || !rn2(10)) && (ChaosTerrain || u.uprops[CHAOS_TERRAIN].extrinsic || have_chaosterrainstone())) {
5604 sprintf(buf, "the following problem: The terrain slowly becomes ever more chaotic.");
5605 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", ChaosTerrain);
5606 you_have(buf);
5608 if ((guaranteed || !rn2(10)) && (Muteness || u.uprops[MUTENESS].extrinsic || have_mutenessstone())) {
5609 sprintf(buf, "the following problem: You're mute, and have great difficulty when trying to cast spells.");
5610 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", Muteness);
5611 you_have(buf);
5613 if ((guaranteed || !rn2(10)) && (EngravingDoesntWork || u.uprops[ENGRAVINGBUG].extrinsic || have_engravingstone())) {
5614 sprintf(buf, "the following problem: Monsters don't respect Elbereth.");
5615 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", EngravingDoesntWork);
5616 you_have(buf);
5618 if ((guaranteed || !rn2(10)) && (MagicDeviceEffect || u.uprops[MAGIC_DEVICE_BUG].extrinsic || have_magicdevicestone())) {
5619 sprintf(buf, "the following problem: Zapping a wand can cause it to explode.");
5620 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", MagicDeviceEffect);
5621 you_have(buf);
5623 if ((guaranteed || !rn2(10)) && (BookTrapEffect || u.uprops[BOOKBUG].extrinsic || have_bookstone())) {
5624 sprintf(buf, "the following problem: Reading spellbooks confuses you.");
5625 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", BookTrapEffect);
5626 you_have(buf);
5628 if ((guaranteed || !rn2(10)) && (LevelTrapEffect || u.uprops[LEVELBUG].extrinsic || have_levelstone())) {
5629 sprintf(buf, "the following problem: Monsters become stronger if many of their species have been generated already.");
5630 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", LevelTrapEffect);
5631 you_have(buf);
5633 if ((guaranteed || !rn2(10)) && (QuizTrapEffect || u.uprops[QUIZZES].extrinsic || have_quizstone())) {
5634 sprintf(buf, "the following problem: You have to partake in the Great NetHack Quiz.");
5635 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", QuizTrapEffect);
5636 you_have(buf);
5639 if ((guaranteed || !rn2(10)) && (FastMetabolismEffect || u.uprops[FAST_METABOLISM].extrinsic || have_metabolicstone())) {
5640 sprintf(buf, "the following problem: Your food consumption is much faster.");
5641 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FastMetabolismEffect);
5642 you_have(buf);
5645 if ((guaranteed || !rn2(10)) && (NoReturnEffect || u.uprops[NORETURN].extrinsic || have_noreturnstone())) {
5646 sprintf(buf, "the following problem: You cannot teleport at all.");
5647 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", NoReturnEffect);
5648 you_have(buf);
5651 if ((guaranteed || !rn2(10)) && (AlwaysEgotypeMonsters || u.uprops[ALWAYS_EGOTYPES].extrinsic || have_egostone())) {
5652 sprintf(buf, "the following problem: Monsters always spawn with egotypes.");
5653 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", AlwaysEgotypeMonsters);
5654 you_have(buf);
5657 if ((guaranteed || !rn2(10)) && (TimeGoesByFaster || u.uprops[FAST_FORWARD].extrinsic || have_fastforwardstone())) {
5658 sprintf(buf, "the following problem: Time goes by faster.");
5659 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", TimeGoesByFaster);
5660 you_have(buf);
5663 if ((guaranteed || !rn2(10)) && (FoodIsAlwaysRotten || u.uprops[FOOD_IS_ROTTEN].extrinsic || have_rottenstone())) {
5664 sprintf(buf, "the following problem: Your food is always rotten.");
5665 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FoodIsAlwaysRotten);
5666 you_have(buf);
5669 if ((guaranteed || !rn2(10)) && (AllSkillsUnskilled || u.uprops[SKILL_DEACTIVATED].extrinsic || have_unskilledstone())) {
5670 sprintf(buf, "the following problem: Your skills are deactivated.");
5671 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", AllSkillsUnskilled);
5672 you_have(buf);
5675 if ((guaranteed || !rn2(10)) && (AllStatsAreLower || u.uprops[STATS_LOWERED].extrinsic || have_lowstatstone())) {
5676 sprintf(buf, "the following problem: All of your stats are lowered.");
5677 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", AllStatsAreLower);
5678 you_have(buf);
5681 if ((guaranteed || !rn2(10)) && (PlayerCannotTrainSkills || u.uprops[TRAINING_DEACTIVATED].extrinsic || have_trainingstone())) {
5682 sprintf(buf, "the following problem: You cannot train skills.");
5683 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", PlayerCannotTrainSkills);
5684 you_have(buf);
5687 if ((guaranteed || !rn2(10)) && (PlayerCannotExerciseStats || u.uprops[EXERCISE_DEACTIVATED].extrinsic || have_exercisestone())) {
5688 sprintf(buf, "the following problem: You cannot exercise your stats.");
5689 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", PlayerCannotExerciseStats);
5690 you_have(buf);
5693 if ((guaranteed || !rn2(10)) && MCReduction) {
5694 sprintf(buf, "reduced magic cancellation.");
5695 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", MCReduction);
5696 you_have(buf);
5699 if ((guaranteed || !rn2(10)) && (u.uprops[INTRINSIC_LOSS].extrinsic || IntrinsicLossProblem || have_intrinsiclossstone() )) {
5700 sprintf(buf, "a case of random intrinsic loss.");
5701 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", IntrinsicLossProblem);
5702 you_have(buf);
5704 if ((guaranteed || !rn2(10)) && u.uprops[TRAP_REVEALING].extrinsic) {
5705 sprintf(buf, "randomly revealing traps");
5706 you_are(buf);
5708 if ((guaranteed || !rn2(10)) && (u.uprops[BLOOD_LOSS].extrinsic || BloodLossProblem || have_bloodlossstone() )) {
5709 sprintf(buf, "bleeding out");
5710 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", BloodLossProblem);
5711 you_are(buf);
5713 if ((guaranteed || !rn2(10)) && (u.uprops[NASTINESS_EFFECTS].extrinsic || NastinessProblem || have_nastystone() )) {
5714 sprintf(buf, "subjected to random nasty trap effects");
5715 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", NastinessProblem);
5716 you_are(buf);
5718 if ((guaranteed || !rn2(10)) && (u.uprops[BAD_EFFECTS].extrinsic || BadEffectProblem || have_badeffectstone() )) {
5719 sprintf(buf, "subjected to random bad effects");
5720 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", BadEffectProblem);
5721 you_are(buf);
5723 if ((guaranteed || !rn2(10)) && (u.uprops[AUTOMATIC_TRAP_CREATION].extrinsic || TrapCreationProblem || have_trapcreationstone() )) {
5724 sprintf(buf, "more likely to encounter traps");
5725 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", TrapCreationProblem);
5726 you_are(buf);
5728 if ((guaranteed || !rn2(10)) && u.uprops[SENTIENT_HIGH_HEELS].extrinsic) {
5729 sprintf(buf, "wearing sentient high heels");
5730 you_are(buf);
5732 if ((guaranteed || !rn2(10)) && (u.uprops[REPEATING_VULNERABILITY].extrinsic || AutomaticVulnerabilitiy || have_vulnerabilitystone() )) {
5733 sprintf(buf, "the risk of temporarily losing intrinsics");
5734 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", AutomaticVulnerabilitiy);
5735 you_have(buf);
5737 if ((guaranteed || !rn2(10)) && (u.uprops[TELEPORTING_ITEMS].extrinsic || TeleportingItems || have_itemportstone() )) {
5738 sprintf(buf, "teleporting items");
5739 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", TeleportingItems);
5740 you_have(buf);
5743 if ((guaranteed || !rn2(10)) && (u.uprops[RECURRING_AMNESIA].extrinsic || RecurringAmnesia || have_amnesiastone() )) {
5744 sprintf(buf, "going to suffer from amnesia now and then");
5745 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", RecurringAmnesia);
5746 you_are(buf);
5749 if ((guaranteed || !rn2(10)) && (u.uprops[TURNLIMITATION].extrinsic || TurnLimitation || have_limitationstone() )) {
5750 sprintf(buf, "getting your ascension turn limit reduced whenever you take damage");
5751 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", TurnLimitation);
5752 you_are(buf);
5755 if ((guaranteed || !rn2(10)) && (u.uprops[WEAKSIGHT].extrinsic || WeakSight || have_weaksightstone() )) {
5756 sprintf(buf, "short-sighted");
5757 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", WeakSight);
5758 you_are(buf);
5761 if ((guaranteed || !rn2(10)) && (u.uprops[RANDOM_MESSAGES].extrinsic || RandomMessages || have_messagestone() )) {
5762 sprintf(buf, "reading random messages");
5763 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", RandomMessages);
5764 you_are(buf);
5767 if ((guaranteed || !rn2(10)) && (u.uprops[DESECRATION].extrinsic || Desecration || have_nonsacredstone() )) {
5768 sprintf(buf, "the following problem: Altars malfunction whenever you try to use them");
5769 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", Desecration);
5770 you_have(buf);
5773 if ((guaranteed || !rn2(10)) && (u.uprops[STARVATION_EFFECT].extrinsic || StarvationEffect || have_starvationstone() )) {
5774 sprintf(buf, "not going to get corpses from defeated enemies");
5775 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", StarvationEffect);
5776 you_are(buf);
5779 if ((guaranteed || !rn2(10)) && (u.uprops[NO_DROPS_EFFECT].extrinsic || NoDropsEffect || have_droplessstone() )) {
5780 sprintf(buf, "not going to get death drops from monsters");
5781 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", NoDropsEffect);
5782 you_are(buf);
5785 if ((guaranteed || !rn2(10)) && (u.uprops[LOW_EFFECTS].extrinsic || LowEffects || have_loweffectstone() )) {
5786 sprintf(buf, "reduced power of magical effects");
5787 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", LowEffects);
5788 you_have(buf);
5791 if ((guaranteed || !rn2(10)) && (u.uprops[INVIS_TRAPS_EFFECT].extrinsic || InvisibleTrapsEffect || have_invisostone() )) {
5792 sprintf(buf, "not going to see traps");
5793 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", InvisibleTrapsEffect);
5794 you_are(buf);
5797 if ((guaranteed || !rn2(10)) && (u.uprops[GHOST_WORLD].extrinsic || GhostWorld || have_ghostlystone() )) {
5798 sprintf(buf, "in a ghost world");
5799 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", GhostWorld);
5800 you_are(buf);
5803 if ((guaranteed || !rn2(10)) && (u.uprops[DEHYDRATION].extrinsic || Dehydration || have_dehydratingstone() )) {
5804 sprintf(buf, "going to become dehydrated");
5805 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", Dehydration);
5806 you_are(buf);
5809 if ((guaranteed || !rn2(10)) && (u.uprops[HATE_TRAP_EFFECT].extrinsic || HateTrapEffect || have_hatestone() )) {
5810 sprintf(buf, "the following problem: Pets hate you with a fiery passion.");
5811 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", HateTrapEffect);
5812 you_have(buf);
5815 if ((guaranteed || !rn2(10)) && (u.uprops[TOTTER_EFFECT].extrinsic || TotterTrapEffect || have_directionswapstone() )) {
5816 sprintf(buf, "the following problem: Your directional keys got swapped.");
5817 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", TotterTrapEffect);
5818 you_have(buf);
5821 if ((guaranteed || !rn2(10)) && (u.uprops[NONINTRINSIC_EFFECT].extrinsic || Nonintrinsics || have_nonintrinsicstone() )) {
5822 sprintf(buf, "unable to get intrinsics from eating corpses");
5823 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", Nonintrinsics);
5824 you_are(buf);
5827 if ((guaranteed || !rn2(10)) && (u.uprops[DROPCURSES_EFFECT].extrinsic || Dropcurses || have_dropcursestone() )) {
5828 sprintf(buf, "the following problem: Dropping items causes them to autocurse.");
5829 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", Dropcurses);
5830 you_have(buf);
5833 if ((guaranteed || !rn2(10)) && (u.uprops[NAKEDNESS].extrinsic || Nakedness || have_nakedstone() )) {
5834 sprintf(buf, "effectively naked");
5835 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", Nakedness);
5836 you_are(buf);
5839 if ((guaranteed || !rn2(10)) && (u.uprops[ANTILEVELING].extrinsic || Antileveling || have_antilevelstone() )) {
5840 sprintf(buf, "unable to gain experience past experience level 10, and slower to reach XL10");
5841 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", Antileveling);
5842 you_are(buf);
5845 if ((guaranteed || !rn2(10)) && (u.uprops[ITEM_STEALING_EFFECT].extrinsic || ItemStealingEffect || have_stealerstone() )) {
5846 sprintf(buf, "more likely to have your items stolen");
5847 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", ItemStealingEffect);
5848 you_are(buf);
5851 if ((guaranteed || !rn2(10)) && (u.uprops[REBELLION_EFFECT].extrinsic || Rebellions || have_rebelstone() )) {
5852 sprintf(buf, "the following problem: Pets can spontaneously rebel and become hostile.");
5853 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", Rebellions);
5854 you_have(buf);
5857 if ((guaranteed || !rn2(10)) && (u.uprops[CRAP_EFFECT].extrinsic || CrapEffect || have_shitstone() )) {
5858 sprintf(buf, "diarrhea");
5859 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", CrapEffect);
5860 you_have(buf);
5863 if ((guaranteed || !rn2(10)) && (u.uprops[PROJECTILES_MISFIRE].extrinsic || ProjectilesMisfire || have_misfirestone() )) {
5864 sprintf(buf, "the following problem: Your projectiles often misfire.");
5865 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", ProjectilesMisfire);
5866 you_have(buf);
5869 if ((guaranteed || !rn2(10)) && (u.uprops[WALL_TRAP_EFFECT].extrinsic || WallTrapping || have_wallstone() )) {
5870 sprintf(buf, "the following problem: Dungeon regrowth is excessively fast.");
5871 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", WallTrapping);
5872 you_have(buf);
5875 if ((guaranteed || !rn2(10)) && u.uprops[RANDOM_RUMORS].extrinsic) {
5876 sprintf(buf, "going to listen to random rumors");
5877 you_are(buf);
5880 if ((guaranteed || !rn2(10)) && IncreasedGravity) {
5881 sprintf(buf, "increased encumbrance due to a stronger gravity.");
5882 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", IncreasedGravity);
5883 you_have(buf);
5886 if ((guaranteed || !rn2(10)) && u.graundweight) {
5887 sprintf(buf, "burdened by some dead weight.");
5888 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%d)", u.graundweight);
5889 you_are(buf);
5892 if ((guaranteed || !rn2(10)) && NoStaircase) {
5893 sprintf(buf, "to wait until you can use staircases again.");
5894 sprintf(eos(buf), " (%ld)", NoStaircase);
5895 you_have(buf);
5898 if ((guaranteed || !rn2(10)) && u.ragnaroktimer) {
5899 sprintf(buf, "going to experience Ragnarok.");
5900 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%d)", u.ragnaroktimer);
5901 you_are(buf);
5904 if ((guaranteed || !rn2(10)) && u.sokosolveboulder && issokosolver) {
5905 sprintf(buf, "to wait until you can create boulders again.");
5906 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%d)", u.sokosolveboulder);
5907 you_have(buf);
5910 if ((guaranteed || !rn2(10)) && u.sokosolveuntrap && issokosolver) {
5911 sprintf(buf, "to wait until you can disarm traps again.");
5912 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%d)", u.sokosolveuntrap);
5913 you_have(buf);
5916 if ((guaranteed || !rn2(10)) && u.footererlevel) {
5917 sprintf(buf, "going to encounter the footerers.");
5918 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (level %d)", u.footererlevel);
5919 you_are(buf);
5922 if ((guaranteed || !rn2(10)) && FemtrapActiveFemmy) {
5923 sprintf(buf, "possessed by the ghost of Femmy.");
5924 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapFemmy);
5925 you_are(buf);
5928 if ((guaranteed || !rn2(10)) && FemtrapActiveMadeleine) {
5929 sprintf(buf, "possessed by the ghost of Madeleine.");
5930 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapMadeleine);
5931 you_are(buf);
5934 if ((guaranteed || !rn2(10)) && FemtrapActiveMarlena) {
5935 sprintf(buf, "possessed by the ghost of Marlena.");
5936 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapMarlena);
5937 you_are(buf);
5940 if ((guaranteed || !rn2(10)) && FemtrapActiveSabrina) {
5941 sprintf(buf, "possessed by the ghost of Sabrina.");
5942 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapSabrina);
5943 you_are(buf);
5946 if ((guaranteed || !rn2(10)) && FemtrapActiveTanja) {
5947 sprintf(buf, "possessed by the ghost of Tanja.");
5948 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapTanja);
5949 you_are(buf);
5952 if ((guaranteed || !rn2(10)) && FemtrapActiveSonja) {
5953 sprintf(buf, "possessed by the ghost of Sonja.");
5954 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapSonja);
5955 you_are(buf);
5958 if ((guaranteed || !rn2(10)) && FemtrapActiveRhea) {
5959 sprintf(buf, "possessed by the ghost of Rhea.");
5960 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapRhea);
5961 you_are(buf);
5964 if ((guaranteed || !rn2(10)) && FemtrapActiveLara) {
5965 sprintf(buf, "possessed by the ghost of Lara.");
5966 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapLara);
5967 you_are(buf);
5970 if ((guaranteed || !rn2(10)) && FemtrapActiveNadine) {
5971 sprintf(buf, "possessed by the ghost of Nadine.");
5972 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapNadine);
5973 you_are(buf);
5976 if ((guaranteed || !rn2(10)) && FemtrapActiveLuisa) {
5977 sprintf(buf, "possessed by the ghost of Luisa.");
5978 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapLuisa);
5979 you_are(buf);
5982 if ((guaranteed || !rn2(10)) && FemtrapActiveIrina) {
5983 sprintf(buf, "possessed by the ghost of Irina.");
5984 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapIrina);
5985 you_are(buf);
5988 if ((guaranteed || !rn2(10)) && FemtrapActiveLiselotte) {
5989 sprintf(buf, "possessed by the ghost of Liselotte.");
5990 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapLiselotte);
5991 you_are(buf);
5994 if ((guaranteed || !rn2(10)) && FemtrapActiveGreta) {
5995 sprintf(buf, "possessed by the ghost of Greta.");
5996 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapGreta);
5997 you_are(buf);
6000 if ((guaranteed || !rn2(10)) && FemtrapActiveJane) {
6001 sprintf(buf, "possessed by the ghost of Jane.");
6002 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapJane);
6003 you_are(buf);
6006 if ((guaranteed || !rn2(10)) && FemtrapActiveSueLyn) {
6007 sprintf(buf, "possessed by the ghost of Sue Lyn.");
6008 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapSueLyn);
6009 you_are(buf);
6012 if ((guaranteed || !rn2(10)) && FemtrapActiveCharlotte) {
6013 sprintf(buf, "possessed by the ghost of Charlotte.");
6014 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapCharlotte);
6015 you_are(buf);
6018 if ((guaranteed || !rn2(10)) && FemtrapActiveHannah) {
6019 sprintf(buf, "possessed by the ghost of Hannah.");
6020 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapHannah);
6021 you_are(buf);
6024 if ((guaranteed || !rn2(10)) && FemtrapActiveLittleMarie) {
6025 sprintf(buf, "possessed by the ghost of Little Marie.");
6026 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapLittleMarie);
6027 you_are(buf);
6030 if ((guaranteed || !rn2(10)) && FemtrapActiveRuth) {
6031 sprintf(buf, "possessed by the ghost of Ruth.");
6032 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapRuth);
6033 you_are(buf);
6036 if ((guaranteed || !rn2(10)) && FemtrapActiveMagdalena) {
6037 sprintf(buf, "possessed by the ghost of Magdalena.");
6038 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapMagdalena);
6039 you_are(buf);
6042 if ((guaranteed || !rn2(10)) && FemtrapActiveMarleen) {
6043 sprintf(buf, "possessed by the ghost of Marleen.");
6044 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapMarleen);
6045 you_are(buf);
6048 if ((guaranteed || !rn2(10)) && FemtrapActiveKlara) {
6049 sprintf(buf, "possessed by the ghost of Klara.");
6050 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapKlara);
6051 you_are(buf);
6054 if ((guaranteed || !rn2(10)) && FemtrapActiveFriederike) {
6055 sprintf(buf, "possessed by the ghost of Friederike.");
6056 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapFriederike);
6057 you_are(buf);
6060 if ((guaranteed || !rn2(10)) && FemtrapActiveNaomi) {
6061 sprintf(buf, "possessed by the ghost of Naomi.");
6062 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapNaomi);
6063 you_are(buf);
6066 if ((guaranteed || !rn2(10)) && FemtrapActiveUte) {
6067 sprintf(buf, "possessed by the ghost of Ute.");
6068 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapUte);
6069 you_are(buf);
6072 if ((guaranteed || !rn2(10)) && FemtrapActiveJasieen) {
6073 sprintf(buf, "possessed by the ghost of Jasieen.");
6074 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapJasieen);
6075 you_are(buf);
6078 if ((guaranteed || !rn2(10)) && FemtrapActiveYasaman) {
6079 sprintf(buf, "possessed by the ghost of Yasaman.");
6080 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapYasaman);
6081 you_are(buf);
6084 if ((guaranteed || !rn2(10)) && FemtrapActiveMayBritt) {
6085 sprintf(buf, "possessed by the ghost of May-Britt.");
6086 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapMayBritt);
6087 you_are(buf);
6090 if ((guaranteed || !rn2(10)) && FemtrapActiveKsenia) {
6091 sprintf(buf, "possessed by the ghost of Ksenia.");
6092 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapKsenia);
6093 you_are(buf);
6096 if ((guaranteed || !rn2(10)) && FemtrapActiveLydia) {
6097 sprintf(buf, "possessed by the ghost of Lydia.");
6098 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapLydia);
6099 you_are(buf);
6102 if ((guaranteed || !rn2(10)) && FemtrapActiveConny) {
6103 sprintf(buf, "possessed by the ghost of Conny.");
6104 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapConny);
6105 you_are(buf);
6108 if ((guaranteed || !rn2(10)) && FemtrapActiveKatia) {
6109 sprintf(buf, "possessed by the ghost of Katia.");
6110 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapKatia);
6111 you_are(buf);
6114 if ((guaranteed || !rn2(10)) && FemtrapActiveMariya) {
6115 sprintf(buf, "possessed by the ghost of Mariya.");
6116 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapMariya);
6117 you_are(buf);
6120 if ((guaranteed || !rn2(10)) && FemtrapActiveElise) {
6121 sprintf(buf, "possessed by the ghost of Elise.");
6122 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapElise);
6123 you_are(buf);
6126 if ((guaranteed || !rn2(10)) && FemtrapActiveRonja) {
6127 sprintf(buf, "possessed by the ghost of Ronja.");
6128 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapRonja);
6129 you_are(buf);
6132 if ((guaranteed || !rn2(10)) && FemtrapActiveAriane) {
6133 sprintf(buf, "possessed by the ghost of Ariane.");
6134 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapAriane);
6135 you_are(buf);
6138 if ((guaranteed || !rn2(10)) && FemtrapActiveJohanna) {
6139 sprintf(buf, "possessed by the ghost of Johanna.");
6140 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapJohanna);
6141 you_are(buf);
6144 if ((guaranteed || !rn2(10)) && FemtrapActiveInge) {
6145 sprintf(buf, "possessed by the ghost of Inge.");
6146 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapInge);
6147 you_are(buf);
6150 if ((guaranteed || !rn2(10)) && FemtrapActiveSarah) {
6151 sprintf(buf, "possessed by the ghost of Sarah.");
6152 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapSarah);
6153 you_are(buf);
6156 if ((guaranteed || !rn2(10)) && FemtrapActiveClaudia) {
6157 sprintf(buf, "possessed by the ghost of Claudia.");
6158 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapClaudia);
6159 you_are(buf);
6162 if ((guaranteed || !rn2(10)) && FemtrapActiveLudgera) {
6163 sprintf(buf, "possessed by the ghost of Ludgera.");
6164 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapLudgera);
6165 you_are(buf);
6168 if ((guaranteed || !rn2(10)) && FemtrapActiveKati) {
6169 sprintf(buf, "possessed by the ghost of Kati.");
6170 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapKati);
6171 you_are(buf);
6174 if ((guaranteed || !rn2(10)) && FemtrapActiveAnastasia) {
6175 sprintf(buf, "possessed by the ghost of Anastasia.");
6176 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapAnastasia);
6177 you_are(buf);
6180 if ((guaranteed || !rn2(10)) && FemtrapActiveJessica) {
6181 sprintf(buf, "possessed by the ghost of Jessica.");
6182 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapJessica);
6183 you_are(buf);
6186 if ((guaranteed || !rn2(10)) && FemtrapActiveSolvejg) {
6187 sprintf(buf, "possessed by the ghost of Solvejg.");
6188 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapSolvejg);
6189 you_are(buf);
6192 if ((guaranteed || !rn2(10)) && FemtrapActiveWendy) {
6193 sprintf(buf, "possessed by the ghost of Wendy.");
6194 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapWendy);
6195 you_are(buf);
6198 if ((guaranteed || !rn2(10)) && FemtrapActiveKatharina) {
6199 sprintf(buf, "possessed by the ghost of Katharina.");
6200 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapKatharina);
6201 you_are(buf);
6204 if ((guaranteed || !rn2(10)) && FemtrapActiveElena) {
6205 sprintf(buf, "possessed by the ghost of Elena.");
6206 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapElena);
6207 you_are(buf);
6210 if ((guaranteed || !rn2(10)) && FemtrapActiveThai) {
6211 sprintf(buf, "possessed by the ghost of Thai.");
6212 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapThai);
6213 you_are(buf);
6216 if ((guaranteed || !rn2(10)) && FemtrapActiveElif) {
6217 sprintf(buf, "possessed by the ghost of Elif.");
6218 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapElif);
6219 you_are(buf);
6222 if ((guaranteed || !rn2(10)) && FemtrapActiveNadja) {
6223 sprintf(buf, "possessed by the ghost of Nadja.");
6224 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapNadja);
6225 you_are(buf);
6228 if ((guaranteed || !rn2(10)) && FemtrapActiveSandra) {
6229 sprintf(buf, "possessed by the ghost of Sandra.");
6230 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapSandra);
6231 you_are(buf);
6234 if ((guaranteed || !rn2(10)) && FemtrapActiveNatalje) {
6235 sprintf(buf, "possessed by the ghost of Natalje.");
6236 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapNatalje);
6237 you_are(buf);
6240 if ((guaranteed || !rn2(10)) && FemtrapActiveJeanetta) {
6241 sprintf(buf, "possessed by the ghost of Jeanetta.");
6242 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapJeanetta);
6243 you_are(buf);
6246 if ((guaranteed || !rn2(10)) && FemtrapActiveYvonne) {
6247 sprintf(buf, "possessed by the ghost of Yvonne.");
6248 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapYvonne);
6249 you_are(buf);
6252 if ((guaranteed || !rn2(10)) && FemtrapActiveMaurah) {
6253 sprintf(buf, "possessed by the ghost of Maurah.");
6254 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapMaurah);
6255 you_are(buf);
6258 if ((guaranteed || !rn2(10)) && FemtrapActiveMeltem) {
6259 sprintf(buf, "possessed by the ghost of Meltem.");
6260 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapMeltem);
6261 you_are(buf);
6264 if ((guaranteed || !rn2(10)) && FemtrapActiveNelly) {
6265 sprintf(buf, "possessed by the ghost of Nelly.");
6266 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapNelly);
6267 you_are(buf);
6270 if ((guaranteed || !rn2(10)) && FemtrapActiveEveline) {
6271 sprintf(buf, "possessed by the ghost of Eveline.");
6272 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapEveline);
6273 you_are(buf);
6276 if ((guaranteed || !rn2(10)) && FemtrapActiveKarin) {
6277 sprintf(buf, "possessed by the ghost of Karin.");
6278 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapKarin);
6279 you_are(buf);
6282 if ((guaranteed || !rn2(10)) && FemtrapActiveJuen) {
6283 sprintf(buf, "possessed by the ghost of Juen.");
6284 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapJuen);
6285 you_are(buf);
6288 if ((guaranteed || !rn2(10)) && FemtrapActiveKristina) {
6289 sprintf(buf, "possessed by the ghost of Kristina.");
6290 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapKristina);
6291 you_are(buf);
6294 if ((guaranteed || !rn2(10)) && FemtrapActiveLou) {
6295 sprintf(buf, "possessed by the ghost of Lou.");
6296 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapLou);
6297 you_are(buf);
6300 if ((guaranteed || !rn2(10)) && FemtrapActiveAlmut) {
6301 sprintf(buf, "possessed by the ghost of Almut.");
6302 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapAlmut);
6303 you_are(buf);
6306 if ((guaranteed || !rn2(10)) && FemtrapActiveJulietta) {
6307 sprintf(buf, "possessed by the ghost of Julietta.");
6308 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapJulietta);
6309 you_are(buf);
6312 if ((guaranteed || !rn2(10)) && FemtrapActiveArabella) {
6313 sprintf(buf, "possessed by the ghost of Arabella.");
6314 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapArabella);
6315 you_are(buf);
6318 if ((guaranteed || !rn2(10)) && FemtrapActiveKristin) {
6319 sprintf(buf, "possessed by the ghost of Kristin.");
6320 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapKristin);
6321 you_are(buf);
6324 if ((guaranteed || !rn2(10)) && FemtrapActiveAnna) {
6325 sprintf(buf, "possessed by the ghost of Anna.");
6326 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapAnna);
6327 you_are(buf);
6330 if ((guaranteed || !rn2(10)) && FemtrapActiveRuea) {
6331 sprintf(buf, "possessed by the ghost of Ruea.");
6332 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapRuea);
6333 you_are(buf);
6336 if ((guaranteed || !rn2(10)) && FemtrapActiveDora) {
6337 sprintf(buf, "possessed by the ghost of Dora.");
6338 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapDora);
6339 you_are(buf);
6342 if ((guaranteed || !rn2(10)) && FemtrapActiveMarike) {
6343 sprintf(buf, "possessed by the ghost of Marike.");
6344 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapMarike);
6345 you_are(buf);
6348 if ((guaranteed || !rn2(10)) && FemtrapActiveJette) {
6349 sprintf(buf, "possessed by the ghost of Jette.");
6350 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapJette);
6351 you_are(buf);
6354 if ((guaranteed || !rn2(10)) && FemtrapActiveIna) {
6355 sprintf(buf, "possessed by the ghost of Ina.");
6356 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapIna);
6357 you_are(buf);
6360 if ((guaranteed || !rn2(10)) && FemtrapActiveSing) {
6361 sprintf(buf, "possessed by the ghost of Sing.");
6362 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapSing);
6363 you_are(buf);
6366 if ((guaranteed || !rn2(10)) && FemtrapActiveVictoria) {
6367 sprintf(buf, "possessed by the ghost of Victoria.");
6368 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapVictoria);
6369 you_are(buf);
6372 if ((guaranteed || !rn2(10)) && FemtrapActiveMelissa) {
6373 sprintf(buf, "possessed by the ghost of Melissa.");
6374 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapMelissa);
6375 you_are(buf);
6378 if ((guaranteed || !rn2(10)) && FemtrapActiveAnita) {
6379 sprintf(buf, "possessed by the ghost of Anita.");
6380 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapAnita);
6381 you_are(buf);
6384 if ((guaranteed || !rn2(10)) && FemtrapActiveHenrietta) {
6385 sprintf(buf, "possessed by the ghost of Henrietta.");
6386 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapHenrietta);
6387 you_are(buf);
6390 if ((guaranteed || !rn2(10)) && FemtrapActiveVerena) {
6391 sprintf(buf, "possessed by the ghost of Verena.");
6392 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapVerena);
6393 you_are(buf);
6396 if ((guaranteed || !rn2(10)) && FemtrapActiveAnnemarie) {
6397 sprintf(buf, "possessed by the ghost of Annemarie.");
6398 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapAnnemarie);
6399 you_are(buf);
6402 if ((guaranteed || !rn2(10)) && FemtrapActiveJil) {
6403 sprintf(buf, "possessed by the ghost of Jil.");
6404 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapJil);
6405 you_are(buf);
6408 if ((guaranteed || !rn2(10)) && FemtrapActiveJana) {
6409 sprintf(buf, "possessed by the ghost of Jana.");
6410 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapJana);
6411 you_are(buf);
6414 if ((guaranteed || !rn2(10)) && FemtrapActiveKatrin) {
6415 sprintf(buf, "possessed by the ghost of Katrin.");
6416 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapKatrin);
6417 you_are(buf);
6420 if ((guaranteed || !rn2(10)) && FemtrapActiveGudrun) {
6421 sprintf(buf, "possessed by the ghost of Gudrun.");
6422 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapGudrun);
6423 you_are(buf);
6426 if ((guaranteed || !rn2(10)) && FemtrapActiveElla) {
6427 sprintf(buf, "possessed by the ghost of Ella.");
6428 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapElla);
6429 you_are(buf);
6432 if ((guaranteed || !rn2(10)) && FemtrapActiveManuela) {
6433 sprintf(buf, "possessed by the ghost of Manuela.");
6434 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapManuela);
6435 you_are(buf);
6438 if ((guaranteed || !rn2(10)) && FemtrapActiveJennifer) {
6439 sprintf(buf, "possessed by the ghost of Jennifer.");
6440 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapJennifer);
6441 you_are(buf);
6444 if ((guaranteed || !rn2(10)) && FemtrapActivePatricia) {
6445 sprintf(buf, "possessed by the ghost of Patricia.");
6446 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapPatricia);
6447 you_are(buf);
6450 if ((guaranteed || !rn2(10)) && FemtrapActiveAntje) {
6451 sprintf(buf, "possessed by the ghost of Antje.");
6452 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapAntje);
6453 you_are(buf);
6456 if ((guaranteed || !rn2(10)) && FemtrapActiveAntjeX) {
6457 sprintf(buf, "possessed by the special ghost of Antje.");
6458 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapAntjeX);
6459 you_are(buf);
6462 if ((guaranteed || !rn2(10)) && FemtrapActiveKerstin) {
6463 sprintf(buf, "possessed by the ghost of Kerstin.");
6464 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapKerstin);
6465 you_are(buf);
6468 if ((guaranteed || !rn2(10)) && FemtrapActiveLaura) {
6469 sprintf(buf, "possessed by the ghost of Laura.");
6470 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapLaura);
6471 you_are(buf);
6474 if ((guaranteed || !rn2(10)) && FemtrapActiveLarissa) {
6475 sprintf(buf, "possessed by the ghost of Larissa.");
6476 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapLarissa);
6477 you_are(buf);
6480 if ((guaranteed || !rn2(10)) && FemtrapActiveNora) {
6481 sprintf(buf, "possessed by the ghost of Nora.");
6482 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapNora);
6483 you_are(buf);
6486 if ((guaranteed || !rn2(10)) && FemtrapActiveNatalia) {
6487 sprintf(buf, "possessed by the ghost of Natalia.");
6488 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapNatalia);
6489 if (flags.female && (u.nataliacycletimer < u.nataliafollicularend)) sprintf(eos(buf), " (follicular phase)");
6490 else if (flags.female && (u.nataliacycletimer < (u.nataliafollicularend + u.natalialutealstart) )) sprintf(eos(buf), " (menstrual phase)");
6491 else if (flags.female && (u.nataliacycletimer >= (u.nataliafollicularend + u.natalialutealstart) )) sprintf(eos(buf), " (luteal phase)");
6492 you_are(buf);
6495 if ((guaranteed || !rn2(10)) && FemtrapActiveSusanne) {
6496 sprintf(buf, "possessed by the ghost of Susanne.");
6497 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapSusanne);
6498 you_are(buf);
6501 if ((guaranteed || !rn2(10)) && FemtrapActiveLisa) {
6502 sprintf(buf, "possessed by the ghost of Lisa.");
6503 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapLisa);
6504 you_are(buf);
6507 if ((guaranteed || !rn2(10)) && FemtrapActiveBridghitte) {
6508 sprintf(buf, "possessed by the ghost of Bridghitte.");
6509 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapBridghitte);
6510 you_are(buf);
6513 if ((guaranteed || !rn2(10)) && FemtrapActiveJulia) {
6514 sprintf(buf, "possessed by the ghost of Julia.");
6515 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapJulia);
6516 you_are(buf);
6519 if ((guaranteed || !rn2(10)) && FemtrapActiveNicole) {
6520 sprintf(buf, "possessed by the ghost of Nicole.");
6521 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapNicole);
6522 you_are(buf);
6525 if ((guaranteed || !rn2(10)) && FemtrapActiveRita) {
6526 sprintf(buf, "possessed by the ghost of Rita.");
6527 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapRita);
6528 you_are(buf);
6531 if ((guaranteed || !rn2(10)) && FemtrapActiveJanina) {
6532 sprintf(buf, "possessed by the ghost of Janina.");
6533 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapJanina);
6534 you_are(buf);
6537 if ((guaranteed || !rn2(10)) && FemtrapActiveRosa) {
6538 sprintf(buf, "possessed by the ghost of Rosa.");
6539 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", FemaleTrapRosa);
6540 you_are(buf);
6543 if ((guaranteed || !rn2(10)) && Race_if(PM_PERVERT)) {
6544 sprintf(buf, "had sex the last time this many turns ago:");
6545 sprintf(eos(buf), " %d", u.pervertsex);
6546 you_have(buf);
6549 if ((guaranteed || !rn2(10)) && Race_if(PM_PERVERT)) {
6550 sprintf(buf, "prayed the last time this many turns ago:");
6551 sprintf(eos(buf), " %d", u.pervertpray);
6552 you_have(buf);
6555 if ((guaranteed || !rn2(10)) && u.elberethcheese) {
6556 sprintf(buf, "experiencing reduced Elbereth effectiveness");
6557 sprintf(eos(buf), " (%d)", u.elberethcheese);
6558 you_are(buf);
6561 if (u.bucskill) {
6562 sprintf(buf, "%d points of BUC expertise", u.bucskill);
6563 you_have(buf);
6565 if (u.enchantrecskill) {
6566 sprintf(buf, "%d points of enchantment expertise", u.enchantrecskill);
6567 you_have(buf);
6569 if (u.weapchantrecskill) {
6570 sprintf(buf, "%d points of weapon enchantment expertise", u.weapchantrecskill);
6571 you_have(buf);
6574 if (u.hangupamount) {
6575 sprintf(buf, "used the hangup function, which means you're either a FILTHY CHEAT0R or you have a shaky internet connection. Hopefully it's the latter so Amy doesn't have to reinstate the hangup penalty.");
6576 sprintf(eos(buf), " (%d)", u.hangupamount);
6577 you_have(buf);
6581 if (Race_if(PM_FELID)) {
6582 sprintf(buf, "%d ", u.felidlives);
6583 sprintf(eos(buf), "lives left");
6584 you_have(buf);
6587 if (u.homosexual == 0) {
6588 sprintf(buf, "not decided on your sexuality yet");
6589 you_have(buf);
6591 if (u.homosexual == 1) {
6592 sprintf(buf, "heterosexual");
6593 you_are(buf);
6595 if (u.homosexual == 2) {
6596 sprintf(buf, "homosexual");
6597 you_are(buf);
6600 if (u.returntimer) {
6601 sprintf(buf, "waiting to be recalled.");
6602 sprintf(eos(buf), " (%d)", u.returntimer);
6603 you_are(buf);
6606 if (Role_if(PM_HUSSY)) {
6607 sprintf(buf, "%ld ", (u.hussyhurtturn - moves));
6608 sprintf(eos(buf), "turns left to hit a guy.");
6609 you_have(buf);
6610 sprintf(buf, "%ld ", (u.hussykillturn - moves));
6611 sprintf(eos(buf), "turns left to defeat a guy.");
6612 you_have(buf);
6615 if ((guaranteed || !rn2(10)) && u.contamination) {
6616 if (u.contamination >= 1000) sprintf(buf, "suffering from fatal contamination. Health and mana regeneration are reduced.");
6617 else if (u.contamination >= 800) sprintf(buf, "suffering from lethal contamination.");
6618 else if (u.contamination >= 600) sprintf(buf, "suffering from severe contamination.");
6619 else if (u.contamination >= 400) sprintf(buf, "suffering from contamination.");
6620 else if (u.contamination >= 200) sprintf(buf, "suffering from light contamination.");
6621 else if (u.contamination >= 100) sprintf(buf, "suffering from minor contamination.");
6622 else if (u.contamination >= 1) sprintf(buf, "suffering from very slight contamination.");
6623 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%d)", u.contamination);
6624 you_are(buf);
6627 if ((guaranteed || !rn2(10)) && u.copwantedlevel) {
6628 sprintf(buf, "being chased by the kops.");
6629 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%d)", u.copwantedlevel);
6630 you_are(buf);
6633 if ((guaranteed || !rn2(10)) && u.treesquadwantedlevel) {
6634 sprintf(buf, "being chased by the tree squad.");
6635 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%d)", u.treesquadwantedlevel);
6636 you_are(buf);
6639 if ((guaranteed || !rn2(10)) && u.pompejiwantedlevel) {
6640 sprintf(buf, "being chased by the pompeji squad.");
6641 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%d)", u.pompejiwantedlevel);
6642 you_are(buf);
6645 if ((guaranteed || !rn2(10)) && u.pompejipermanentrecord) {
6646 sprintf(buf, "a permament pompeji record.");
6647 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%d)", u.pompejipermanentrecord);
6648 you_have(buf);
6651 if ((guaranteed || !rn2(10)) && u.fluidatorwantedlevel) {
6652 sprintf(buf, "being chased by the fluidator squad.");
6653 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%d)", u.fluidatorwantedlevel);
6654 you_are(buf);
6657 if ((guaranteed || !rn2(10)) && u.bulletatorwantedlevel) {
6658 sprintf(buf, "being chased by the bulletator squad.");
6659 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%d)", u.bulletatorwantedlevel);
6660 you_are(buf);
6663 if ((guaranteed || !rn2(10)) && u.gmmailsreceived) {
6664 sprintf(buf, "received monster-summoning mail from AmyBSOD, the Game Master.");
6665 sprintf(eos(buf), " (%d)", u.gmmailsreceived);
6666 you_have(buf);
6669 if ((guaranteed || !rn2(10)) && TimeStopped) {
6670 sprintf(buf, "stopped the flow of time.");
6671 sprintf(eos(buf), " (%ld)", TimeStopped);
6672 you_have(buf);
6675 if ((guaranteed || !rn2(10)) && u.drippingtread) {
6676 sprintf(buf, "dripping elements.");
6677 sprintf(eos(buf), " (%d)", u.drippingtread);
6678 you_are(buf);
6681 if ((guaranteed || !rn2(10)) && u.geolysis) {
6682 sprintf(buf, "using geolysis.");
6683 sprintf(eos(buf), " (%d)", u.geolysis);
6684 you_are(buf);
6687 if ((guaranteed || !rn2(10)) && u.disruptionshield) {
6688 sprintf(buf, "your disruption shield up.");
6689 sprintf(eos(buf), " (%d)", u.disruptionshield);
6690 you_have(buf);
6693 if ((guaranteed || !rn2(10)) && u.inertiacontrol) {
6694 sprintf(buf, "controlling the flow of a spell.");
6695 sprintf(eos(buf), " (%d)", u.inertiacontrol);
6696 you_are(buf);
6699 if ((guaranteed || !rn2(10)) && u.sterilized) {
6700 sprintf(buf, "sterilized the air around you.");
6701 sprintf(eos(buf), " (%d)", u.sterilized);
6702 you_have(buf);
6705 if ((guaranteed || !rn2(10)) && u.holyshield) {
6706 sprintf(buf, "your holy shield up.");
6707 sprintf(eos(buf), " (%d)", u.holyshield);
6708 you_have(buf);
6711 if ((guaranteed || !rn2(10)) && u.berserktime) {
6712 sprintf(buf, "berserk.");
6713 sprintf(eos(buf), " (%d)", u.berserktime);
6714 you_are(buf);
6717 if ((guaranteed || !rn2(10)) && u.magicshield) {
6718 sprintf(buf, "your magic shield up.");
6719 sprintf(eos(buf), " (%d)", u.magicshield);
6720 you_have(buf);
6723 if ((guaranteed || !rn2(10)) && u.combatcommand) {
6724 sprintf(buf, "used the combat command.");
6725 sprintf(eos(buf), " (%d)", u.combatcommand);
6726 you_have(buf);
6729 if ((guaranteed || !rn2(10)) && u.burrowed) {
6730 sprintf(buf, "burrowed into the ground.");
6731 sprintf(eos(buf), " (%d)", u.burrowed);
6732 you_are(buf);
6735 if ((guaranteed || !rn2(10)) && u.stasistime) {
6736 sprintf(buf, "in stasis, and the monsters are too.");
6737 sprintf(eos(buf), " (%d)", u.stasistime);
6738 you_are(buf);
6741 if ((guaranteed || !rn2(10)) && u.powerfailure) {
6742 sprintf(buf, "experiencing a power failure.");
6743 sprintf(eos(buf), " (%d)", u.powerfailure);
6744 you_are(buf);
6747 if ((guaranteed || !rn2(10)) && u.tunnelized) {
6748 sprintf(buf, "reduced armor class due to tunneling dirt on your clothes.");
6749 sprintf(eos(buf), " (%d)", u.tunnelized);
6750 you_have(buf);
6753 if ((guaranteed || !rn2(10)) && u.nailpolish) {
6754 sprintf(buf, "applied nail polish.");
6755 sprintf(eos(buf), " (%d)", u.nailpolish);
6756 you_have(buf);
6759 if ((guaranteed || !rn2(10)) && u.enchantspell) {
6760 sprintf(buf, "enchanted your weapon with fire.");
6761 sprintf(eos(buf), " (%d)", u.enchantspell);
6762 you_have(buf);
6765 if ((guaranteed || !rn2(10)) && u.thornspell) {
6766 sprintf(buf, "thorns.");
6767 sprintf(eos(buf), " (%d)", u.thornspell);
6768 you_have(buf);
6771 if ((guaranteed || !rn2(10)) && u.egglayingtimeout) {
6772 sprintf(buf, "to wait until you can lay eggs again.");
6773 sprintf(eos(buf), " (%d)", u.egglayingtimeout);
6774 you_have(buf);
6777 if ((guaranteed || !rn2(10)) && u.swappositioncount) {
6778 sprintf(buf, "going to swap positions with the next monster you move into.");
6779 sprintf(eos(buf), " (%d)", u.swappositioncount);
6780 you_are(buf);
6783 if ((guaranteed || !rn2(10)) && u.contingencyturns) {
6784 sprintf(buf, "signed up a contract with the reaper.");
6785 sprintf(eos(buf), " (%d)", u.contingencyturns);
6786 you_have(buf);
6789 if ((guaranteed || !rn2(10)) && u.horsehopturns) {
6790 sprintf(buf, "the ability to jump as long as you're riding.");
6791 sprintf(eos(buf), " (%d)", u.horsehopturns);
6792 you_have(buf);
6795 if ((guaranteed || !rn2(10)) && u.bodyfluideffect) {
6796 sprintf(buf, "very acidic skin.");
6797 sprintf(eos(buf), " (%d)", u.bodyfluideffect);
6798 you_have(buf);
6801 if ((guaranteed || !rn2(10)) && u.antitelespelltimeout) {
6802 sprintf(buf, "erected an anti-teleportation field.");
6803 sprintf(eos(buf), " (%d)", u.antitelespelltimeout);
6804 you_have(buf);
6807 if ((guaranteed || !rn2(10)) && u.breathenhancetimer) {
6808 sprintf(buf, "magically enhanced breath.");
6809 sprintf(eos(buf), " (%d)", u.breathenhancetimer);
6810 you_have(buf);
6813 if ((guaranteed || !rn2(10)) && u.snaildigging) {
6814 sprintf(buf, "to wait until you can fire another digging ray.");
6815 sprintf(eos(buf), " (%d)", u.snaildigging);
6816 you_have(buf);
6819 if ((guaranteed || !rn2(10)) && u.hussyperfume) {
6820 sprintf(buf, "to wait until you can spread the perfume again.");
6821 sprintf(eos(buf), " (%d)", u.hussyperfume);
6822 you_have(buf);
6825 if ((guaranteed || !rn2(10)) && u.irahapoison) {
6826 sprintf(buf, "to wait until you can poison your weapon again.");
6827 sprintf(eos(buf), " (%d)", u.irahapoison);
6828 you_have(buf);
6831 if ((guaranteed || !rn2(10)) && Role_if(PM_JANITOR)) {
6832 sprintf(buf, "the following amount of trash in your trash can:");
6833 sprintf(eos(buf), " %d", u.garbagecleaned);
6834 you_have(buf);
6837 if ((guaranteed || !rn2(10)) && Role_if(PM_JANITOR) && u.garbagetrucktime) {
6838 sprintf(buf, "called the garbage truck, and it will arrive in");
6839 sprintf(eos(buf), " %d turns", u.garbagetrucktime);
6840 you_have(buf);
6843 if ((guaranteed || !rn2(10)) && u.walscholarpass) {
6844 sprintf(buf, "able to pass through grave walls.");
6845 sprintf(eos(buf), " (%d)", u.walscholarpass);
6846 you_are(buf);
6849 if ((guaranteed || !rn2(10)) && u.demagogueabilitytimer && isdemagogue) {
6850 sprintf(buf, "to wait until you can use your special recursion.");
6851 sprintf(eos(buf), " (%d)", u.demagogueabilitytimer);
6852 you_have(buf);
6855 if ((guaranteed || !rn2(10)) && u.acutraining) {
6856 sprintf(buf, "double skill training.");
6857 sprintf(eos(buf), " (%d)", u.acutraining);
6858 you_have(buf);
6861 if ((guaranteed || !rn2(10)) && u.dragonpolymorphtime) {
6862 sprintf(buf, "to wait until you can polymorph into a dragon again.");
6863 sprintf(eos(buf), " (%d)", u.dragonpolymorphtime);
6864 you_have(buf);
6867 if ((guaranteed || !rn2(10)) && u.werepolymorphtime) {
6868 sprintf(buf, "to wait until you can polymorph into a werecreature again.");
6869 sprintf(eos(buf), " (%d)", u.werepolymorphtime);
6870 you_have(buf);
6873 if ((guaranteed || !rn2(10)) && UseTheForce) {
6874 sprintf(buf, StrongUseTheForce ? "able to use the force like a jedi grandmaster" : "able to use the force like a true jedi");
6875 you_are(buf);
6878 if ((guaranteed || !rn2(10)) && u.uprops[SENSORY_DEPRIVATION].extrinsic) {
6879 sprintf(buf, "sensory deprivation.");
6880 you_have(buf);
6883 if ((guaranteed || !rn2(10)) && NoFire_resistance && (final || u.uprops[DEAC_FIRE_RES].intrinsic) ) {
6884 sprintf(buf, "prevented from having fire resistance");
6885 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_FIRE_RES].intrinsic);
6886 you_are(buf);
6888 if ((guaranteed || !rn2(10)) && NoCold_resistance && (final || u.uprops[DEAC_COLD_RES].intrinsic) ) {
6889 sprintf(buf, "prevented from having cold resistance");
6890 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_COLD_RES].intrinsic);
6891 you_are(buf);
6893 if ((guaranteed || !rn2(10)) && NoSleep_resistance && (final || u.uprops[DEAC_SLEEP_RES].intrinsic) ) {
6894 sprintf(buf, "prevented from having sleep resistance");
6895 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_SLEEP_RES].intrinsic);
6896 you_are(buf);
6898 if ((guaranteed || !rn2(10)) && NoDisint_resistance && (final || u.uprops[DEAC_DISINT_RES].intrinsic) ) {
6899 sprintf(buf, "prevented from having disintegration resistance");
6900 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_DISINT_RES].intrinsic);
6901 you_are(buf);
6903 if ((guaranteed || !rn2(10)) && NoShock_resistance && (final || u.uprops[DEAC_SHOCK_RES].intrinsic) ) {
6904 sprintf(buf, "prevented from having shock resistance");
6905 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_SHOCK_RES].intrinsic);
6906 you_are(buf);
6908 if ((guaranteed || !rn2(10)) && NoPoison_resistance && (final || u.uprops[DEAC_POISON_RES].intrinsic) ) {
6909 sprintf(buf, "prevented from having poison resistance");
6910 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_POISON_RES].intrinsic);
6911 you_are(buf);
6913 if ((guaranteed || !rn2(10)) && NoDrain_resistance && (final || u.uprops[DEAC_DRAIN_RES].intrinsic) ) {
6914 sprintf(buf, "prevented from having drain resistance");
6915 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_DRAIN_RES].intrinsic);
6916 you_are(buf);
6918 if ((guaranteed || !rn2(10)) && NoSick_resistance && (final || u.uprops[DEAC_SICK_RES].intrinsic) ) {
6919 sprintf(buf, "prevented from having sickness resistance");
6920 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_SICK_RES].intrinsic);
6921 you_are(buf);
6923 if ((guaranteed || !rn2(10)) && NoAntimagic_resistance && (final || u.uprops[DEAC_ANTIMAGIC].intrinsic) ) {
6924 sprintf(buf, "prevented from having magic resistance");
6925 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_ANTIMAGIC].intrinsic);
6926 you_are(buf);
6928 if ((guaranteed || !rn2(10)) && NoAcid_resistance && (final || u.uprops[DEAC_ACID_RES].intrinsic) ) {
6929 sprintf(buf, "prevented from having acid resistance");
6930 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_ACID_RES].intrinsic);
6931 you_are(buf);
6933 if ((guaranteed || !rn2(10)) && NoStone_resistance && (final || u.uprops[DEAC_STONE_RES].intrinsic) ) {
6934 sprintf(buf, "prevented from having petrification resistance");
6935 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_STONE_RES].intrinsic);
6936 you_are(buf);
6938 if ((guaranteed || !rn2(10)) && NoFear_resistance && (final || u.uprops[DEAC_FEAR_RES].intrinsic) ) {
6939 sprintf(buf, "prevented from having fear resistance");
6940 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_FEAR_RES].intrinsic);
6941 you_are(buf);
6943 if ((guaranteed || !rn2(10)) && NoSee_invisible && (final || u.uprops[DEAC_SEE_INVIS].intrinsic) ) {
6944 sprintf(buf, "prevented from having see invisible");
6945 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_SEE_INVIS].intrinsic);
6946 you_are(buf);
6948 if ((guaranteed || !rn2(10)) && NoManaleech && (final || u.uprops[DEAC_MANALEECH].intrinsic) ) {
6949 sprintf(buf, "prevented from having manaleech");
6950 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_MANALEECH].intrinsic);
6951 you_are(buf);
6953 if ((guaranteed || !rn2(10)) && NoPeacevision && (final || u.uprops[DEAC_PEACEVISION].intrinsic) ) {
6954 sprintf(buf, "prevented from having peacevision");
6955 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_PEACEVISION].intrinsic);
6956 you_are(buf);
6958 if ((guaranteed || !rn2(10)) && NoTelepat && (final || u.uprops[DEAC_TELEPAT].intrinsic) ) {
6959 sprintf(buf, "prevented from having telepathy");
6960 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_TELEPAT].intrinsic);
6961 you_are(buf);
6963 if ((guaranteed || !rn2(10)) && NoWarning && (final || u.uprops[DEAC_WARNING].intrinsic) ) {
6964 sprintf(buf, "prevented from having warning");
6965 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_WARNING].intrinsic);
6966 you_are(buf);
6968 if ((guaranteed || !rn2(10)) && NoSearching && (final || u.uprops[DEAC_SEARCHING].intrinsic) ) {
6969 sprintf(buf, "prevented from having automatic searching");
6970 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_SEARCHING].intrinsic);
6971 you_are(buf);
6973 if ((guaranteed || !rn2(10)) && NoClairvoyant && (final || u.uprops[DEAC_CLAIRVOYANT].intrinsic) ) {
6974 sprintf(buf, "prevented from having clairvoyance");
6975 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_CLAIRVOYANT].intrinsic);
6976 you_are(buf);
6978 if ((guaranteed || !rn2(10)) && NoInfravision && (final || u.uprops[DEAC_INFRAVISION].intrinsic) ) {
6979 sprintf(buf, "prevented from having infravision");
6980 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_INFRAVISION].intrinsic);
6981 you_are(buf);
6983 if ((guaranteed || !rn2(10)) && NoDetect_monsters && (final || u.uprops[DEAC_DETECT_MONSTERS].intrinsic) ) {
6984 sprintf(buf, "prevented from having detect monsters");
6985 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_DETECT_MONSTERS].intrinsic);
6986 you_are(buf);
6988 if ((guaranteed || !rn2(10)) && NoInvisible && (final || u.uprops[DEAC_INVIS].intrinsic) ) {
6989 sprintf(buf, "prevented from having invisibility");
6990 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_INVIS].intrinsic);
6991 you_are(buf);
6993 if ((guaranteed || !rn2(10)) && NoDisplaced && (final || u.uprops[DEAC_DISPLACED].intrinsic) ) {
6994 sprintf(buf, "prevented from having displacement");
6995 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_DISPLACED].intrinsic);
6996 you_are(buf);
6998 if ((guaranteed || !rn2(10)) && NoStealth && (final || u.uprops[DEAC_STEALTH].intrinsic) ) {
6999 sprintf(buf, "prevented from having stealth");
7000 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_STEALTH].intrinsic);
7001 you_are(buf);
7003 if ((guaranteed || !rn2(10)) && NoJumping && (final || u.uprops[DEAC_JUMPING].intrinsic) ) {
7004 sprintf(buf, "prevented from having jumping");
7005 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_JUMPING].intrinsic);
7006 you_are(buf);
7008 if ((guaranteed || !rn2(10)) && NoTeleport_control && (final || u.uprops[DEAC_TELEPORT_CONTROL].intrinsic) ) {
7009 sprintf(buf, "prevented from having teleport control");
7010 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_TELEPORT_CONTROL].intrinsic);
7011 you_are(buf);
7013 if ((guaranteed || !rn2(10)) && NoFlying && (final || u.uprops[DEAC_FLYING].intrinsic) ) {
7014 sprintf(buf, "prevented from having flying");
7015 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_FLYING].intrinsic);
7016 you_are(buf);
7018 if ((guaranteed || !rn2(10)) && NoBreathless && (final || u.uprops[DEAC_MAGICAL_BREATHING].intrinsic) ) {
7019 sprintf(buf, "prevented from having magical breathing");
7020 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_MAGICAL_BREATHING].intrinsic);
7021 you_are(buf);
7023 if ((guaranteed || !rn2(10)) && NoPasses_walls && (final || u.uprops[DEAC_PASSES_WALLS].intrinsic) ) {
7024 sprintf(buf, "prevented from having phasing");
7025 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_PASSES_WALLS].intrinsic);
7026 you_are(buf);
7028 if ((guaranteed || !rn2(10)) && NoSlow_digestion && (final || u.uprops[DEAC_SLOW_DIGESTION].intrinsic) ) {
7029 sprintf(buf, "prevented from having slow digestion");
7030 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_SLOW_DIGESTION].intrinsic);
7031 you_are(buf);
7033 if ((guaranteed || !rn2(10)) && NoHalf_spell_damage && (final || u.uprops[DEAC_HALF_SPDAM].intrinsic) ) {
7034 sprintf(buf, "prevented from having half spell damage");
7035 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_HALF_SPDAM].intrinsic);
7036 you_are(buf);
7038 if ((guaranteed || !rn2(10)) && NoHalf_physical_damage && (final || u.uprops[DEAC_HALF_PHDAM].intrinsic) ) {
7039 sprintf(buf, "prevented from having half physical damage");
7040 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_HALF_PHDAM].intrinsic);
7041 you_are(buf);
7043 if ((guaranteed || !rn2(10)) && NoRegeneration && (final || u.uprops[DEAC_REGENERATION].intrinsic) ) {
7044 sprintf(buf, "prevented from having regeneration");
7045 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_REGENERATION].intrinsic);
7046 you_are(buf);
7048 if ((guaranteed || !rn2(10)) && NoEnergy_regeneration && (final || u.uprops[DEAC_ENERGY_REGENERATION].intrinsic) ) {
7049 sprintf(buf, "prevented from having mana regeneration");
7050 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_ENERGY_REGENERATION].intrinsic);
7051 you_are(buf);
7053 if ((guaranteed || !rn2(10)) && NoPolymorph_control && (final || u.uprops[DEAC_POLYMORPH_CONTROL].intrinsic) ) {
7054 sprintf(buf, "prevented from having polymorph control");
7055 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_POLYMORPH_CONTROL].intrinsic);
7056 you_are(buf);
7058 if ((guaranteed || !rn2(10)) && NoFast && (final || u.uprops[DEAC_FAST].intrinsic) ) {
7059 sprintf(buf, "prevented from having speed");
7060 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_FAST].intrinsic);
7061 you_are(buf);
7063 if ((guaranteed || !rn2(10)) && NoReflecting && (final || u.uprops[DEAC_REFLECTING].intrinsic) ) {
7064 sprintf(buf, "prevented from having reflection");
7065 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_REFLECTING].intrinsic);
7066 you_are(buf);
7068 if ((guaranteed || !rn2(10)) && NoKeen_memory && (final || u.uprops[DEAC_KEEN_MEMORY].intrinsic) ) {
7069 sprintf(buf, "prevented from having keen memory");
7070 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_KEEN_MEMORY].intrinsic);
7071 you_are(buf);
7073 if ((guaranteed || !rn2(10)) && NoSight_bonus && (final || u.uprops[DEAC_SIGHT_BONUS].intrinsic) ) {
7074 sprintf(buf, "prevented from having a sight bonus");
7075 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_SIGHT_BONUS].intrinsic);
7076 you_are(buf);
7078 if ((guaranteed || !rn2(10)) && NoVersus_curses && (final || u.uprops[DEAC_VERSUS_CURSES].intrinsic) ) {
7079 sprintf(buf, "prevented from having curse resistance");
7080 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_VERSUS_CURSES].intrinsic);
7081 you_are(buf);
7084 if ((guaranteed || !rn2(10)) && NoStun_resist && (final || u.uprops[DEAC_STUN_RES].intrinsic) ) {
7085 sprintf(buf, "prevented from having stun resistance");
7086 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_STUN_RES].intrinsic);
7087 you_are(buf);
7089 if ((guaranteed || !rn2(10)) && NoConf_resist && (final || u.uprops[DEAC_CONF_RES].intrinsic) ) {
7090 sprintf(buf, "prevented from having confusion resistance");
7091 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_CONF_RES].intrinsic);
7092 you_are(buf);
7095 if ((guaranteed || !rn2(10)) && NoPsi_resist && (final || u.uprops[DEAC_PSI_RES].intrinsic) ) {
7096 sprintf(buf, "prevented from having psi resistance");
7097 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_PSI_RES].intrinsic);
7098 you_are(buf);
7101 if ((guaranteed || !rn2(10)) && NoDouble_attack && (final || u.uprops[DEAC_DOUBLE_ATTACK].intrinsic) ) {
7102 sprintf(buf, "prevented from having double attacks");
7103 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_DOUBLE_ATTACK].intrinsic);
7104 you_are(buf);
7106 if ((guaranteed || !rn2(10)) && NoQuad_attack && (final || u.uprops[DEAC_QUAD_ATTACK].intrinsic) ) {
7107 sprintf(buf, "prevented from having quad attacks");
7108 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_QUAD_ATTACK].intrinsic);
7109 you_are(buf);
7112 if ((guaranteed || !rn2(10)) && NoFree_action && (final || u.uprops[DEAC_FREE_ACTION].intrinsic) ) {
7113 sprintf(buf, "prevented from having free action");
7114 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_FREE_ACTION].intrinsic);
7115 you_are(buf);
7118 if ((guaranteed || !rn2(10)) && NoHallu_party && (final || u.uprops[DEAC_HALLU_PARTY].intrinsic) ) {
7119 sprintf(buf, "prevented from hallu partying");
7120 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_HALLU_PARTY].intrinsic);
7121 you_are(buf);
7124 if ((guaranteed || !rn2(10)) && NoDrunken_boxing && (final || u.uprops[DEAC_DRUNKEN_BOXING].intrinsic) ) {
7125 sprintf(buf, "prevented from drunken boxing");
7126 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_DRUNKEN_BOXING].intrinsic);
7127 you_are(buf);
7130 if ((guaranteed || !rn2(10)) && NoStunnopathy && (final || u.uprops[DEAC_STUNNOPATHY].intrinsic) ) {
7131 sprintf(buf, "prevented from having stunnopathy");
7132 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_STUNNOPATHY].intrinsic);
7133 you_are(buf);
7136 if ((guaranteed || !rn2(10)) && NoNumbopathy && (final || u.uprops[DEAC_NUMBOPATHY].intrinsic) ) {
7137 sprintf(buf, "prevented from having numbopathy");
7138 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_NUMBOPATHY].intrinsic);
7139 you_are(buf);
7142 if ((guaranteed || !rn2(10)) && NoDimmopathy && (final || u.uprops[DEAC_DIMMOPATHY].intrinsic) ) {
7143 sprintf(buf, "prevented from having dimmopathy");
7144 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_DIMMOPATHY].intrinsic);
7145 you_are(buf);
7148 if ((guaranteed || !rn2(10)) && NoFreezopathy && (final || u.uprops[DEAC_FREEZOPATHY].intrinsic) ) {
7149 sprintf(buf, "prevented from having freezopathy");
7150 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_FREEZOPATHY].intrinsic);
7151 you_are(buf);
7154 if ((guaranteed || !rn2(10)) && NoStoned_chiller && (final || u.uprops[DEAC_STONED_CHILLER].intrinsic) ) {
7155 sprintf(buf, "prevented from being a stoned chiller");
7156 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_STONED_CHILLER].intrinsic);
7157 you_are(buf);
7160 if ((guaranteed || !rn2(10)) && NoCorrosivity && (final || u.uprops[DEAC_CORROSIVITY].intrinsic) ) {
7161 sprintf(buf, "prevented from having corrosivity");
7162 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_CORROSIVITY].intrinsic);
7163 you_are(buf);
7166 if ((guaranteed || !rn2(10)) && NoFear_factor && (final || u.uprops[DEAC_FEAR_FACTOR].intrinsic) ) {
7167 sprintf(buf, "prevented from having an increased fear factor");
7168 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_FEAR_FACTOR].intrinsic);
7169 you_are(buf);
7172 if ((guaranteed || !rn2(10)) && NoBurnopathy && (final || u.uprops[DEAC_BURNOPATHY].intrinsic) ) {
7173 sprintf(buf, "prevented from having burnopathy");
7174 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_BURNOPATHY].intrinsic);
7175 you_are(buf);
7178 if ((guaranteed || !rn2(10)) && NoSickopathy && (final || u.uprops[DEAC_SICKOPATHY].intrinsic) ) {
7179 sprintf(buf, "prevented from having sickopathy");
7180 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_SICKOPATHY].intrinsic);
7181 you_are(buf);
7184 if ((guaranteed || !rn2(10)) && NoWonderlegs && (final || u.uprops[DEAC_WONDERLEGS].intrinsic) ) {
7185 sprintf(buf, "prevented from having wonderlegs");
7186 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_WONDERLEGS].intrinsic);
7187 you_are(buf);
7190 if ((guaranteed || !rn2(10)) && NoGlib_combat && (final || u.uprops[DEAC_GLIB_COMBAT].intrinsic) ) {
7191 sprintf(buf, "prevented from having glib combat");
7192 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_GLIB_COMBAT].intrinsic);
7193 you_are(buf);
7196 if ((guaranteed || !rn2(10)) && NoUseTheForce && (final || u.uprops[DEAC_THE_FORCE].intrinsic) ) {
7197 sprintf(buf, "prevented from using the force like a real jedi");
7198 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_THE_FORCE].intrinsic);
7199 you_are(buf);
7202 if ((guaranteed || !rn2(10)) && NoCont_resist && (final || u.uprops[DEAC_CONT_RES].intrinsic) ) {
7203 sprintf(buf, "prevented from having contamination resistance");
7204 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_CONT_RES].intrinsic);
7205 you_are(buf);
7208 if ((guaranteed || !rn2(10)) && NoDiscount_action && (final || u.uprops[DEAC_DISCOUNT_ACTION].intrinsic) ) {
7209 sprintf(buf, "prevented from having discount action");
7210 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_DISCOUNT_ACTION].intrinsic);
7211 you_are(buf);
7214 if ((guaranteed || !rn2(10)) && NoFull_nutrient && (final || u.uprops[DEAC_FULL_NUTRIENT].intrinsic) ) {
7215 sprintf(buf, "prevented from having full nutrients");
7216 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_FULL_NUTRIENT].intrinsic);
7217 you_are(buf);
7220 if ((guaranteed || !rn2(10)) && NoTechnicality && (final || u.uprops[DEAC_TECHNICALITY].intrinsic) ) {
7221 sprintf(buf, "prevented from having technicality");
7222 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_TECHNICALITY].intrinsic);
7223 you_are(buf);
7226 if ((guaranteed || !rn2(10)) && NoDefusing && (final || u.uprops[DEAC_DEFUSING].intrinsic) ) {
7227 sprintf(buf, "prevented from having the defusing ability");
7228 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_DEFUSING].intrinsic);
7229 you_are(buf);
7232 if ((guaranteed || !rn2(10)) && NoResistancePiercing && (final || u.uprops[DEAC_RESISTANCE_PIERCING].intrinsic) ) {
7233 sprintf(buf, "prevented from having resistance piercing");
7234 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_RESISTANCE_PIERCING].intrinsic);
7235 you_are(buf);
7238 if ((guaranteed || !rn2(10)) && NoMysteryResist && (final || u.uprops[DEAC_MYSTERY_RES].intrinsic) ) {
7239 sprintf(buf, "prevented from having mystery resistance");
7240 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_MYSTERY_RES].intrinsic);
7241 you_are(buf);
7244 if ((guaranteed || !rn2(10)) && NoSpellboost && (final || u.uprops[DEAC_SPELLBOOST].intrinsic) ) {
7245 sprintf(buf, "prevented from having spellboost");
7246 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_SPELLBOOST].intrinsic);
7247 you_are(buf);
7250 if ((guaranteed || !rn2(10)) && NoMagicFindBonus && (final || u.uprops[DEAC_MAGIC_FIND].intrinsic) ) {
7251 sprintf(buf, "prevented from having magic find");
7252 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_MAGIC_FIND].intrinsic);
7253 you_are(buf);
7256 if ((guaranteed || !rn2(10)) && NoScentView && (final || u.uprops[DEAC_SCENT_VIEW].intrinsic) ) {
7257 sprintf(buf, "prevented from having scent view");
7258 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_SCENT_VIEW].intrinsic);
7259 you_are(buf);
7262 if ((guaranteed || !rn2(10)) && NoDiminishedBleeding && (final || u.uprops[DEAC_DIMINISHED_BLEEDING].intrinsic) ) {
7263 sprintf(buf, "prevented from having diminished bleeding");
7264 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_DIMINISHED_BLEEDING].intrinsic);
7265 you_are(buf);
7268 if ((guaranteed || !rn2(10)) && NoControlMagic && (final || u.uprops[DEAC_CONTROL_MAGIC].intrinsic) ) {
7269 sprintf(buf, "prevented from having control magic");
7270 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_CONTROL_MAGIC].intrinsic);
7271 you_are(buf);
7274 if ((guaranteed || !rn2(10)) && NoExpBoost && (final || u.uprops[DEAC_EXP_BOOST].intrinsic) ) {
7275 sprintf(buf, "prevented from having experience boost");
7276 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_EXP_BOOST].intrinsic);
7277 you_are(buf);
7280 if ((guaranteed || !rn2(10)) && NoAstral_vision && (final || u.uprops[DEAC_ASTRAL_VISION].intrinsic) ) {
7281 sprintf(buf, "prevented from having astral vision");
7282 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_ASTRAL_VISION].intrinsic);
7283 you_are(buf);
7286 if ((guaranteed || !rn2(10)) && NoBlind_resistance && (final || u.uprops[DEAC_BLIND_RES].intrinsic) ) {
7287 sprintf(buf, "prevented from having blindness resistance");
7288 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_BLIND_RES].intrinsic);
7289 you_are(buf);
7292 if ((guaranteed || !rn2(10)) && NoHalluc_resistance && (final || u.uprops[DEAC_HALLUC_RES].intrinsic) ) {
7293 sprintf(buf, "prevented from having hallucination resistance");
7294 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_HALLUC_RES].intrinsic);
7295 you_are(buf);
7298 if ((guaranteed || !rn2(10)) && NoPainSense && (final || u.uprops[DEAC_PAIN_SENSE].intrinsic) ) {
7299 sprintf(buf, "prevented from having pain sense");
7300 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uprops[DEAC_PAIN_SENSE].intrinsic);
7301 you_are(buf);
7304 if ((guaranteed || !rn2(10)) && u.badfcursed) {
7305 sprintf(buf, "cursed");
7306 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%d)", u.badfcursed);
7307 you_are(buf);
7310 if ((guaranteed || !rn2(10)) && u.badfdoomed) {
7311 sprintf(buf, "DOOMED");
7312 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%d)", u.badfdoomed);
7313 you_are(buf);
7316 int shieldblockrate = 0;
7318 if ((guaranteed || !rn2(10)) && uarms) {
7320 shieldblockrate = shield_block_rate(uarms);
7321 if (uarms->otyp == ELVEN_SHIELD) {
7322 if (Race_if(PM_ELF) || Race_if(PM_PLAYER_MYRKALFR) || Race_if(PM_DROW) || Role_if(PM_ELPH) || Role_if(PM_TWELPH)) shieldblockrate += 5;
7325 if (uarms->otyp == URUK_HAI_SHIELD || uarms->otyp == ORCISH_SHIELD || uarms->otyp == ORCISH_GUARD_SHIELD) {
7326 if (Race_if(PM_ORC)) shieldblockrate += 5;
7328 if (uarms->otyp == DWARVISH_ROUNDSHIELD) {
7329 if (Race_if(PM_DWARF)) shieldblockrate += 5;
7330 if (Role_if(PM_MIDGET)) shieldblockrate += 5;
7333 if (!(PlayerCannotUseSkills)) {
7334 switch (P_SKILL(P_SHIELD)) {
7335 case P_BASIC: shieldblockrate += 2; break;
7336 case P_SKILLED: shieldblockrate += 4; break;
7337 case P_EXPERT: shieldblockrate += 6; break;
7338 case P_MASTER: shieldblockrate += 8; break;
7339 case P_GRAND_MASTER: shieldblockrate += 10; break;
7340 case P_SUPREME_MASTER: shieldblockrate += 12; break;
7345 if (uarms->oartifact == ART_LURTZ_S_WALL) shieldblockrate += 20;
7346 if (uarm && uarm->oartifact == ART_MOEBIUS_ARMOR) shieldblockrate += 10;
7347 if (uarms->oartifact == ART_I_M_GETTING_HUNGRY) shieldblockrate += 20;
7348 if (uarms->oartifact == ART_WHANG_CLINK_CLONK) shieldblockrate += 10;
7349 if (uarms->oartifact == ART_BLOCKBETTER) shieldblockrate += 5;
7350 if (uarms->oartifact == ART_VITALITY_STORM) shieldblockrate += 2;
7351 if (uarms->oartifact == ART_SUPER_SKELLIE) shieldblockrate += 10;
7352 if (uarms->oartifact == ART_WHO_CARES_ABOUT_A_LITTLE_R) shieldblockrate += 15;
7353 if (uarms->oartifact == ART_LOOK_HOW_IT_BLOCKS) shieldblockrate += 20;
7354 if (uarms->oartifact == ART_BLOCKING_EXTREME) shieldblockrate += 10;
7355 if (uarms->oartifact == ART_TSCHINGFIRM) shieldblockrate += 10;
7356 if (uarms->oartifact == ART_CUTTING_THROUGH) shieldblockrate += 5;
7357 if (uarms->oartifact == ART_LITTLE_PROTECTER) shieldblockrate += 5;
7358 if (uwep && uwep->oartifact == ART_VEST_REPLACEMENT) shieldblockrate += 10;
7359 if (uwep && uwep->oartifact == ART_THOSE_LAZY_PROGRAMMERS) shieldblockrate += 10;
7360 if (Race_if(PM_MACTHEIST)) shieldblockrate += 10;
7362 if (u.holyshield) shieldblockrate += (3 + spell_damage_bonus(SPE_HOLY_SHIELD));
7364 if (uarms->spe > 0) shieldblockrate += (uarms->spe * 2);
7366 if (uarms->cursed) shieldblockrate /= 2;
7367 if (uarms->blessed) shieldblockrate += 5;
7369 if (uarms->spe < 0) shieldblockrate += (uarms->spe * 2);
7371 if (uarm && uarm->oartifact == ART_WOODSTOCK) shieldblockrate += 5;
7372 if (uwep && uwep->oartifact == ART_HOLD_IT_OUT) shieldblockrate += 20;
7373 if (uarm && uarm->oartifact == ART_FARTHER_INTO_THE_JUNGLE) shieldblockrate += 10;
7374 if (uwep && uwep->oartifact == ART_BIMMSELIMMELIMM) shieldblockrate += 10;
7375 if (uwep && uwep->oartifact == ART_SECANTED) shieldblockrate += 5;
7376 if (Numbed) shieldblockrate -= 10;
7378 if (!PlayerCannotUseSkills) {
7379 switch (P_SKILL(P_SHIEN)) {
7380 case P_BASIC: shieldblockrate += 1; break;
7381 case P_SKILLED: shieldblockrate += 2; break;
7382 case P_EXPERT: shieldblockrate += 3; break;
7383 case P_MASTER: shieldblockrate += 4; break;
7384 case P_GRAND_MASTER: shieldblockrate += 5; break;
7385 case P_SUPREME_MASTER: shieldblockrate += 6; break;
7389 if (Conflict && shieldblockrate > 0) {
7390 shieldblockrate *= 2;
7391 shieldblockrate /= 3;
7393 if (StrongConflict && shieldblockrate > 0) {
7394 shieldblockrate *= 2;
7395 shieldblockrate /= 3;
7398 if (Role_if(PM_DANCER)) shieldblockrate /= 2;
7400 if (uarms && uarms->oartifact == ART_THERMO_NUCLEAR_CHAMBER) shieldblockrate = 0;
7401 if (uarms && uarms->oartifact == ART_SUPER_ENERGY_LINES) shieldblockrate = 0;
7402 if (uarms && uarms->otyp == BROKEN_SHIELD) shieldblockrate = 0;
7404 if (shieldblockrate < 0) shieldblockrate = 0;
7406 sprintf(buf, "%d%%", shieldblockrate);
7407 enl_msg("Your chance to block ", "is ", "was ", buf );
7410 if ((guaranteed || !rn2(10)) && Fumbling) {
7411 sprintf(buf, "fumbling");
7412 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%d)", u.fumbleduration);
7413 you_are(buf);
7415 if ((guaranteed || !rn2(10)) && (Wounded_legs && !u.usteed)) {
7416 sprintf(buf, "wounded %s", makeplural(body_part(LEG)));
7417 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", HWounded_legs);
7418 you_have(buf);
7420 #if defined(WIZARD) /*randomly tell this to the player outside of wizard mode too --Amy */
7421 if ((guaranteed || !rn2(10)) && (Wounded_legs && u.usteed && (wizard || !rn2(10) || final >= 1 ))) {
7422 strcpy(buf, x_monnam(u.usteed, ARTICLE_YOUR, (char *)0,
7423 SUPPRESS_SADDLE | SUPPRESS_HALLUCINATION, FALSE));
7424 *buf = highc(*buf);
7425 enl_msg(buf, " has", " had", " wounded legs");
7427 #endif
7428 if ((guaranteed || !rn2(10)) && Sleeping) enl_msg("You ", "fall", "fell", " asleep");
7429 if ((guaranteed || !rn2(10)) && Hunger && !StrongHunger) enl_msg("You hunger", "", "ed", " rapidly");
7430 if ((guaranteed || !rn2(10)) && Hunger && StrongHunger) enl_msg("You hunger", "", "ed", " extremely rapidly");
7432 if ((guaranteed || !rn2(10)) && have_sleepstone()) enl_msg("You ", "are", "were", " very tired");
7433 if ((guaranteed || !rn2(10)) && have_cursedmagicresstone()) enl_msg("You ", "take", "took", " double damage");
7434 if ((guaranteed || !rn2(10)) && uamul && uamul->otyp == AMULET_OF_VULNERABILITY) enl_msg("You ", "take", "took", " extra damage");
7436 /*** Vision and senses ***/
7437 if ((guaranteed || !rn2(10)) && See_invisible && !StrongSee_invisible) enl_msg(You_, "see", "saw", " invisible");
7438 if ((guaranteed || !rn2(10)) && See_invisible && StrongSee_invisible) enl_msg(You_, "see", "saw", " invisible and hidden");
7439 if ((guaranteed || !rn2(10)) && Manaleech) enl_msg(You_, "leech", "leeched", StrongManaleech ? " a lot of mana" : " mana");
7440 if ((guaranteed || !rn2(10)) && Peacevision) enl_msg(You_, "recognize", "recognized", StrongPeacevision ? " peaceful creatures and other stuff" : " peaceful creatures");
7441 if ((guaranteed || !rn2(10)) && (Blind_telepat || Unblind_telepat) && !StrongTelepat) you_are("telepathic");
7442 if ((guaranteed || !rn2(10)) && (Blind_telepat || Unblind_telepat) && StrongTelepat) you_are("very telepathic");
7443 if ((guaranteed || !rn2(10)) && Map_amnesia) enl_msg(You_, "have", "had", StrongMap_amnesia ? " total map amnesia" : " map amnesia");
7445 if ((guaranteed || !rn2(10)) && InvertedState) {
7446 sprintf(buf, StrongInvertedState ? "completely inverted" : "inverted");
7447 if (wizard) sprintf(eos(buf), " (%d)", HInvertedState);
7448 you_are(buf);
7450 if ((guaranteed || !rn2(10)) && WinceState) {
7451 sprintf(buf, StrongWinceState ? "wincing painfully" : "wincing");
7452 if (wizard) sprintf(eos(buf), " (%d)", HWinceState);
7453 you_are(buf);
7455 if ((guaranteed || !rn2(10)) && BurdenedState) enl_msg(You_, "are", "were", StrongBurdenedState ? " heavily burdened" : " burdened");
7456 if ((guaranteed || !rn2(10)) && MagicVacuum) enl_msg(You_, "are", "were", StrongMagicVacuum ? " suffering from a complete magic vacuum" : " suffering from a magic vacuum");
7457 if ((guaranteed || !rn2(10)) && FuckOverEffect) enl_msg(You_, "are", "were", StrongFuckOverEffect ? " being totally fucked over" : " being fucked over");
7459 if ((guaranteed || !rn2(10)) && Hallu_party) you_are(StrongHallu_party ? "totally hallu partying" : "hallu partying");
7460 if ((guaranteed || !rn2(10)) && Drunken_boxing) you_are(StrongDrunken_boxing ? "a very drunken boxer" : "a drunken boxer");
7461 if ((guaranteed || !rn2(10)) && Stunnopathy) you_are(StrongStunnopathy ? "very stunnopathic" : "stunnopathic");
7462 if ((guaranteed || !rn2(10)) && Numbopathy) you_are(StrongNumbopathy ? "very numbopathic" : "numbopathic");
7463 if ((guaranteed || !rn2(10)) && Dimmopathy) you_are(StrongDimmopathy ? "very dimmopathic" : "dimmopathic");
7464 if ((guaranteed || !rn2(10)) && Freezopathy) you_are(StrongFreezopathy ? "very freezopathic" : "freezopathic");
7465 if ((guaranteed || !rn2(10)) && Stoned_chiller) you_are(StrongStoned_chiller ? "a totally stoned chiller" : "a stoned chiller");
7466 if ((guaranteed || !rn2(10)) && Corrosivity) you_are(StrongCorrosivity ? "incredibly corrosive" : "extremely corrosive");
7467 if ((guaranteed || !rn2(10)) && Fear_factor) you_have(StrongFear_factor ? "a highly increased fear factor" : "an increased fear factor");
7468 if ((guaranteed || !rn2(10)) && Burnopathy) you_are(StrongBurnopathy ? "very burnopathic" : "burnopathic");
7469 if ((guaranteed || !rn2(10)) && Sickopathy) you_are(StrongSickopathy ? "very sickopathic" : "sickopathic");
7470 if ((guaranteed || !rn2(10)) && Wonderlegs) you_have(StrongWonderlegs ? "protected wonderlegs" : "wonderlegs");
7471 if ((guaranteed || !rn2(10)) && Glib_combat) you_are(StrongGlib_combat ? "a flictionless glibbery fighter" : "a glibbery fighter");
7473 if ((guaranteed || !rn2(10)) && Warning) you_are(StrongWarning ? "definitely warned" : "warned");
7474 if ((guaranteed || !rn2(10)) && (Warn_of_mon && flags.warntype)) {
7475 /* [ALI] Add support for undead */
7476 int i, nth = 0;
7477 unsigned long warntype = flags.warntype;
7478 struct { unsigned long mask; const char *str; } warntypes[] = {
7479 M2_ORC, "orcs",
7480 M2_DEMON, "demons",
7481 M2_UNDEAD, "undead",
7484 sprintf(buf, "aware of the presence of ");
7485 for(i = 0; i < SIZE(warntypes); i++)
7487 if (warntype & warntypes[i].mask) {
7488 warntype &= ~warntypes[i].mask;
7489 if (nth) {
7490 if (warntype)
7491 strcat(buf, ", ");
7492 else
7493 strcat(buf, " and ");
7495 else
7496 nth = 1;
7497 strcat(buf, warntypes[i].str);
7500 if (warntype)
7502 if (nth)
7503 strcat(buf, " and ");
7504 strcat(buf, something);
7506 you_are(buf);
7508 #if 0 /* ALI - dealt with under Warn_of_mon */
7509 if ((guaranteed || !rn2(10)) && Undead_warning) you_are("warned of undead");
7510 #endif
7512 if ((guaranteed || !rn2(10)) && (Role_if(PM_ACTIVISTOR) || Race_if(PM_PEACEMAKER) )) you_are("aware of the presence of topmodels");
7513 if ((guaranteed || !rn2(10)) && (Role_if(PM_ACTIVISTOR) && uwep && is_quest_artifact(uwep) )) you_are("aware of the presence of unique monsters");
7514 /*if (uamul && uamul->otyp == AMULET_OF_UNDEAD_WARNING ) you_are("aware of the presence of undead");
7515 if ((guaranteed || !rn2(10)) && (uarmh && uarmh->otyp == HELMET_OF_UNDEAD_WARNING )) you_are("aware of the presence of undead");*/
7516 if ((guaranteed || !rn2(10)) && (uamul && uamul->otyp == AMULET_OF_POISON_WARNING )) you_are("aware of the presence of poisonous monsters");
7517 if ((guaranteed || !rn2(10)) && (uamul && uamul->otyp == AMULET_OF_OWN_RACE_WARNING )) you_are("aware of the presence of same-race monsters");
7518 if ((guaranteed || !rn2(10)) && (uamul && uamul->otyp == AMULET_OF_COVETOUS_WARNING )) you_are("aware of the presence of covetous monsters");
7519 if ((guaranteed || !rn2(10)) && (ublindf && ublindf->otyp == BOSS_VISOR )) you_are("aware of the presence of covetous monsters");
7520 if ((guaranteed || !rn2(10)) && Role_if(PM_PALADIN) ) you_are("aware of the presence of demons");
7521 if ((guaranteed || !rn2(10)) && Race_if(PM_VORTEX) ) you_are("aware of the presence of unsolid creatures");
7522 if ((guaranteed || !rn2(10)) && Race_if(PM_VORTEX) ) you_are("aware of the presence of creatures without limbs");
7523 if ((guaranteed || !rn2(10)) && Race_if(PM_CORTEX) ) you_are("aware of the presence of unsolid creatures");
7524 if ((guaranteed || !rn2(10)) && Race_if(PM_CORTEX) ) you_are("aware of the presence of creatures without limbs");
7525 if ((guaranteed || !rn2(10)) && Race_if(PM_LEVITATOR) ) you_are("aware of the presence of flying monsters");
7526 if ((guaranteed || !rn2(10)) && Race_if(PM_RODNEYAN) ) you_are("able to sense monsters possessing coveted objects");
7527 if ((guaranteed || !rn2(10)) && isselfhybrid) you_are("aware of the presence of strong wanderers");
7528 if ((guaranteed || !rn2(10)) && isselfhybrid) you_are("aware of the presence of monsters that are valid polymorph forms for monsters only");
7530 if ((guaranteed || !rn2(10)) && Searching) you_have(StrongSearching ? "quick autosearching" : "automatic searching");
7532 if ((guaranteed || !rn2(10)) && Clairvoyant) {
7533 sprintf(buf, StrongClairvoyant ? "highly clairvoyant" : "clairvoyant");
7534 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", HClairvoyant);
7535 you_are(buf);
7538 if ((guaranteed || !rn2(10)) && Infravision) you_have(StrongInfravision ? "strong infravision" : "infravision");
7540 if ((guaranteed || !rn2(10)) && u.banishmentbeam) you_are("going to be banished");
7541 if ((guaranteed || !rn2(10)) && u.levelporting) you_are("going to be levelported");
7543 if ((guaranteed || !rn2(10)) && u.inertia) {
7544 sprintf(buf, "slowed by inertia");
7545 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%d)", u.inertia);
7546 you_are(buf);
7549 if ((guaranteed || !rn2(10)) && u.temprecursion) {
7550 sprintf(buf, "under the effect of temporary recursion");
7551 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%d)", u.temprecursiontime);
7552 you_are(buf);
7555 if ((guaranteed || !rn2(10)) && u.demagoguerecursion) {
7556 sprintf(buf, "temporarily playing as another role");
7557 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%d)", u.demagoguerecursiontime);
7558 you_are(buf);
7561 if ((guaranteed || !rn2(10)) && Detect_monsters) {
7562 sprintf(buf, StrongDetect_monsters ? "sensing all monsters" : "sensing the presence of monsters");
7563 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", HDetect_monsters);
7564 you_are(buf);
7567 if ((guaranteed || !rn2(10)) && u.umconf) you_are("going to confuse monsters");
7569 if (guaranteed || !rn2(10)) {
7570 sprintf(buf, "%d points of nutrition remaining", u.uhunger); you_have(buf);
7573 /*** Appearance and behavior ***/
7574 if ((guaranteed || !rn2(10)) && Adornment) {
7575 int adorn = 0;
7577 if(uleft && uleft->otyp == RIN_ADORNMENT) adorn += uleft->spe;
7578 if(uright && uright->otyp == RIN_ADORNMENT) adorn += uright->spe;
7579 if(uleft && uleft->otyp == RIN_UPPER_ADORNMENT) adorn += uleft->spe;
7580 if(uright && uright->otyp == RIN_UPPER_ADORNMENT) adorn += uright->spe;
7581 if (adorn < 0)
7582 you_are("poorly adorned");
7583 else
7584 you_are("adorned");
7586 if ((guaranteed || !rn2(10)) && Invisible) you_are(StrongInvis ? "very invisible" : "invisible");
7587 else if ((guaranteed || !rn2(10)) && Invis) you_are(StrongInvis ? "very invisible to others" : "invisible to others");
7588 /* ordinarily "visible" is redundant; this is a special case for
7589 the situation when invisibility would be an expected attribute */
7590 else if ((guaranteed || !rn2(10)) && ((HInvis || EInvis || pm_invisible(youmonst.data)) && BInvis))
7591 you_are("visible");
7592 if ((guaranteed || !rn2(10)) && Displaced) you_are(StrongDisplaced ? "very displaced" : "displaced");
7593 if ((guaranteed || !rn2(10)) && Stealth) you_are(StrongStealth ? "very stealthy" : "stealthy");
7594 if ((guaranteed || !rn2(10)) && StrongAggravate_monster) enl_msg("You completely aggravate", "", "d", " monsters");
7595 if ((guaranteed || !rn2(10)) && !StrongAggravate_monster && ExtAggravate_monster) enl_msg("You strongly aggravate", "", "d", " monsters");
7596 if ((guaranteed || !rn2(10)) && !StrongAggravate_monster && IntAggravate_monster) enl_msg("You aggravate", "", "d", " monsters");
7597 if ((guaranteed || !rn2(10)) && Aggravate_monster) {
7598 sprintf(buf, "aggravating monsters for %ld more turns", HAggravate_monster);
7599 you_are(buf);
7601 if ((guaranteed || !rn2(10)) && Conflict) enl_msg("You cause", "", "d", StrongConflict ? " lots of conflict" : " conflict");
7603 /*** Transportation ***/
7604 if ((guaranteed || !rn2(10)) && Jumping) you_can(StrongJumping ? "jump far" : "jump");
7605 if ((guaranteed || !rn2(10)) && Teleportation) you_have(StrongTeleportation ? "chronic teleportitis" : "teleportitis");
7606 if ((guaranteed || !rn2(10)) && Teleport_control) you_have(StrongTeleport_control ? "complete teleport control" : "teleport control");
7607 /*if (Lev_at_will) you_are("levitating, at will");
7608 else if ((guaranteed || !rn2(10)) && Levitation) you_are(StrongLevitation ? "floatitating" : "levitating");*/ /* without control */
7610 if ((guaranteed || !rn2(10)) && Lev_at_will) {
7611 sprintf(buf, "levitating, at will");
7612 #ifdef WIZARD
7613 if (wizard || !rn2(10) || final >= 1 ) sprintf(eos(buf), " (%ld)", HLevitation);
7614 #endif /*same like above --Amy */
7615 you_are(buf);
7617 if ((guaranteed || !rn2(10)) && Levitation) {
7618 sprintf(buf, StrongLevitation ? "floatitating" : "levitating");
7619 #ifdef WIZARD
7620 if (wizard || !rn2(10) || final >= 1 ) sprintf(eos(buf), " (%ld)", HLevitation);
7621 #endif /*same like above --Amy */
7622 you_are(buf);
7625 else if ((guaranteed || !rn2(10)) && Flying) you_can(StrongFlying ? "fly up and down" : "fly");
7626 if ((guaranteed || !rn2(10)) && Wwalking) you_can("walk on water");
7627 if ((guaranteed || !rn2(10)) && Swimming) you_can(StrongSwimming ? "swim like a world champion" : "swim");
7628 if ((guaranteed || !rn2(10)) && PainSense) you_can(StrongPainSense ? "sense the pain of everyone" : "sense others' pain");
7629 if ((guaranteed || !rn2(10)) && Breathless) you_can(StrongMagical_breathing ? "survive everywhere without needing to breathe" : "survive without air");
7630 else if ((guaranteed || !rn2(10)) && Amphibious) you_can("breathe water");
7631 if ((guaranteed || !rn2(10)) && Passes_walls) you_can(StrongPasses_walls ? "walk through every wall" : "walk through walls");
7632 /* If you die while dismounting, u.usteed is still set. Since several
7633 * places in the done() sequence depend on u.usteed, just detect this
7634 * special case. */
7635 if ((guaranteed || !rn2(10)) && (u.usteed && (final < 2 || strcmp(killer, "riding accident")))) {
7636 sprintf(buf, "riding %s (%s)", y_monnam(u.usteed), sanityrandomname() ? rndmonnam() : u.usteed->data->mname);
7637 you_are(buf);
7639 if ((guaranteed || !rn2(10)) && u.uswallow) {
7640 sprintf(buf, "swallowed by %s", a_monnam(u.ustuck));
7641 #ifdef WIZARD
7642 if (wizard || !rn2(10) || final >= 1 ) sprintf(eos(buf), " (%u)", u.uswldtim);
7643 #endif /*same like above --Amy */
7644 you_are(buf);
7645 } else if ((guaranteed || !rn2(10)) && u.ustuck) {
7646 sprintf(buf, "%s %s",
7647 (Upolyd && sticks(youmonst.data)) ? "holding" : "held by",
7648 a_monnam(u.ustuck));
7649 you_are(buf);
7652 /*** Physical attributes ***/
7653 if ((guaranteed || !rn2(10)) && increase_accuracy_bonus_value() )
7654 you_have(enlght_combatinc("to hit", increase_accuracy_bonus_value(), final, buf));
7655 if ((guaranteed || !rn2(10)) && increase_damage_bonus_value())
7656 you_have(enlght_combatinc("damage", increase_damage_bonus_value(), final, buf));
7657 if ((guaranteed || !rn2(10)) && Slow_digestion) you_have(StrongSlow_digestion ? "extremely slow digestion" : "slower digestion");
7658 if ((guaranteed || !rn2(10)) && Keen_memory)
7659 enl_msg("Your memory ", "is", "was", StrongKeen_memory ? " very keen" : " keen");
7660 if ((guaranteed || !rn2(10)) && Sight_bonus) enl_msg("Your sight ", "is", "was", StrongSight_bonus ? " greatly improved" : " improved");
7661 if ((guaranteed || !rn2(10)) && Versus_curses) you_have(StrongVersus_curses ? "double curse resistance" : "curse resistance");
7663 if ((guaranteed || !rn2(10)) && Stun_resist) you_have(StrongStun_resist ? "double stun resistance" : "stun resistance");
7664 if ((guaranteed || !rn2(10)) && Conf_resist) you_have(StrongConf_resist ? "double confusion resistance" : "confusion resistance");
7665 if ((guaranteed || !rn2(10)) && Cont_resist) you_have(StrongCont_resist ? "double contamination resistance" : "contamination resistance");
7666 if ((guaranteed || !rn2(10)) && Discount_action) you_have(StrongDiscount_action ? "high discount action" : "discount action");
7667 if ((guaranteed || !rn2(10)) && Full_nutrient) you_have(StrongFull_nutrient ? "very full nutrients" : "full nutrients");
7668 if ((guaranteed || !rn2(10)) && Technicality) you_have(StrongTechnicality ? "greatly improved technique levels" : "improved technique levels");
7669 if ((guaranteed || !rn2(10)) && Defusing) you_have(StrongDefusing ? "very good abilities to disarm traps" : "the ability to disarm traps");
7670 if ((guaranteed || !rn2(10)) && ResistancePiercing) you_have(StrongResistancePiercing ? "powerful resistance piercing abilities" : "resistance piercing abilities");
7671 if ((guaranteed || !rn2(10)) && MysteryResist) you_have(StrongMysteryResist ? "strong mystery resistance" : "mystery resistance");
7672 if ((guaranteed || !rn2(10)) && MagicFindBonus) you_have(StrongMagicFindBonus ? "much higher chances of finding magical items" : "higher chances of finding magical items");
7673 if ((guaranteed || !rn2(10)) && Spellboost) you_have(StrongSpellboost ? "greatly improved spell power" : "improved spell power");
7674 if ((guaranteed || !rn2(10)) && (ScentView || EcholocationActive)) you_have(StrongScentView ? "scent view and echolocation" : (ScentView && EcholocationActive) ? "scent view and echolocation" : EcholocationActive ? "echolocation" : "scent view");
7675 if ((guaranteed || !rn2(10)) && DiminishedBleeding) you_have(StrongDiminishedBleeding ? "greatly diminished bleeding" : "diminished bleeding");
7676 if ((guaranteed || !rn2(10)) && ControlMagic) you_have(StrongControlMagic ? "strong magic control" : "magic control");
7677 if ((guaranteed || !rn2(10)) && ExpBoost) you_have(StrongExpBoost ? "a strong experience boost" : "an experience boost");
7678 if ((guaranteed || !rn2(10)) && Psi_resist) you_have(StrongPsi_resist ? "double psi resistance" : "psi resistance");
7679 if ((guaranteed || !rn2(10)) && Extra_wpn_practice) enl_msg("You ", "can", "could", StrongExtra_wpn_practice ? " train skills and attributes much faster" : " train skills and attributes faster");
7680 if ((guaranteed || !rn2(10)) && Death_resistance) you_have("resistance to death rays");
7681 if ((guaranteed || !rn2(10)) && Double_attack) you_have(StrongDouble_attack ? "super double attacks" : "double attacks");
7682 if ((guaranteed || !rn2(10)) && Quad_attack) you_have(StrongQuad_attack ? "super quad attacks" : "quad attacks");
7684 if ((guaranteed || !rn2(10)) && Half_physical_damage) you_have(StrongHalf_physical_damage ? "strong physical resistance" : "physical resistance");
7685 if ((guaranteed || !rn2(10)) && Half_spell_damage) you_have(StrongHalf_spell_damage ? "strong spell resistance" : "spell resistance");
7686 if ((guaranteed || !rn2(10)) && Regeneration) enl_msg(StrongRegeneration ? "You quickly regenerate" : "You regenerate", "", "d", "");
7687 if ((guaranteed || !rn2(10)) && Energy_regeneration) you_have(StrongEnergy_regeneration ? "quick mana regeneration" : "mana regeneration");
7688 if ((guaranteed || !rn2(10)) && (u.uspellprot || Protection)) {
7689 int prot = 0;
7691 if(uleft && uleft->otyp == RIN_PROTECTION) prot += uleft->spe;
7692 if(uleft && uleft->otyp == RIN_THREE_POINT_SEVEN_PROTECTI) prot += uleft->spe;
7693 if(uright && uright->otyp == RIN_PROTECTION) prot += uright->spe;
7694 if(uright && uright->otyp == RIN_THREE_POINT_SEVEN_PROTECTI) prot += uright->spe;
7695 if (HProtection & INTRINSIC) prot += u.ublessed;
7696 prot += u.uspellprot;
7698 if (prot < 0)
7699 you_are("ineffectively protected");
7700 else
7701 you_are("protected");
7703 if ((guaranteed || !rn2(10)) && Protection_from_shape_changers)
7704 you_are("protected from shape changers");
7705 if ((guaranteed || !rn2(10)) && Polymorph) you_have(StrongPolymorph ? "chronic polymorphitis" : "polymorphitis");
7706 if ((guaranteed || !rn2(10)) && Polymorph_control) you_have(StrongPolymorph_control ? "complete polymorph control" : "polymorph control");
7707 if ((guaranteed || !rn2(10)) && (u.ulycn >= LOW_PM)) {
7708 strcpy(buf, an(mons[u.ulycn].mname));
7709 you_are(buf);
7711 if ((guaranteed || !rn2(10)) && (Upolyd && !missingnoprotect)) {
7712 if (u.umonnum == u.ulycn) strcpy(buf, "in beast form");
7713 else sprintf(buf, "polymorphed into %s", an(youmonst.data->mname));
7714 #ifdef WIZARD
7715 if (wizard || !rn2(10) || final >= 1) sprintf(eos(buf), " (%d)", u.mtimedone);
7716 #endif
7717 you_are(buf);
7719 if ((guaranteed || !rn2(10)) && uinsymbiosis) {
7720 sprintf(buf, "in symbiosis with %s, symbiote health %d(%d), BUC %s%s%s%s%s", mons[u.usymbiote.mnum].mname, u.usymbiote.mhp, u.usymbiote.mhpmax, u.usymbiote.stckcurse ? "sticky" : "", u.usymbiote.evilcurse ? " evil" : "", u.usymbiote.morgcurse ? " morgothian" : "", u.usymbiote.bbcurse ? " blackbreath" : "", u.usymbiote.prmcurse ? " prime cursed" : u.usymbiote.hvycurse ? " heavily cursed" : u.usymbiote.cursed ? " cursed" : "uncursed");
7721 if (u.shutdowntime) {
7722 sprintf(eos(buf), ", shutdown for %d turns", u.shutdowntime);
7723 } else if (symbiote_is_shut_down()) {
7724 sprintf(eos(buf), ", shutdown");
7726 you_are(buf);
7729 if ((guaranteed || !rn2(10)) && Unchanging) you_can("not change from your current form");
7730 if ((guaranteed || !rn2(10)) && (Fast && !SpeedBug && !u.uprops[SPEED_BUG].extrinsic && !(uarmf && uarmf->oartifact == ART_UNEVEN_ENGINE) && !(uarmf && uarmf->oartifact == ART_ERROR_IN_PLAY_ENCHANTMENT) && !have_speedbugstone())) you_are(StrongFast ? "ultra fast" : Very_fast ? "very fast" : "fast");
7731 if ((guaranteed || !rn2(10)) && (Fast && (SpeedBug || u.uprops[SPEED_BUG].extrinsic || (uarmf && uarmf->oartifact == ART_UNEVEN_ENGINE) || (uarmf && uarmf->oartifact == ART_ERROR_IN_PLAY_ENCHANTMENT) || have_speedbugstone()) )) you_are(StrongFast ? "ultra slow" : Very_fast ? "very slow" : "slow");
7732 if ((guaranteed || !rn2(10)) && (!Fast && Very_fast && !SpeedBug && !u.uprops[SPEED_BUG].extrinsic && !(uarmf && uarmf->oartifact == ART_UNEVEN_ENGINE) && !(uarmf && uarmf->oartifact == ART_ERROR_IN_PLAY_ENCHANTMENT) && !have_speedbugstone())) you_are("very fast");
7733 if ((guaranteed || !rn2(10)) && (!Fast && Very_fast && (SpeedBug || u.uprops[SPEED_BUG].extrinsic || (uarmf && uarmf->oartifact == ART_UNEVEN_ENGINE) || (uarmf && uarmf->oartifact == ART_ERROR_IN_PLAY_ENCHANTMENT) || have_speedbugstone()) )) you_are("very slow");
7734 if ((guaranteed || !rn2(10)) && Reflecting) you_have(StrongReflecting ? "powerful reflection" : "reflection");
7735 if ((guaranteed || !rn2(10)) && Free_action) you_have(StrongFree_action ? "very free action" : "free action");
7736 if ((guaranteed || !rn2(10)) && SustainAbilityOn) you_have("fixed abilities");
7737 if ((guaranteed || !rn2(10)) && (uamul && uamul->otyp == AMULET_VERSUS_STONE))
7738 enl_msg("You ", "will be", "would have been", " depetrified");
7739 if ((guaranteed || !rn2(10)) && Lifesaved)
7740 enl_msg("Your life ", "will be", "would have been", " saved");
7741 if ((guaranteed || !rn2(10)) && Second_chance)
7742 enl_msg("You ","will be", "would have been"," given a second chance");
7743 if ((guaranteed || !rn2(10)) && u.metalguard)
7744 enl_msg("The next damage you ","take will be", "took would have been"," nullified");
7745 if ((guaranteed || !rn2(10)) && u.twoweap) {
7746 if (uwep && uswapwep)
7747 sprintf(buf, "wielding two weapons at once");
7748 else if (uwep || uswapwep)
7749 sprintf(buf, "fighting with a weapon and your %s %s",
7750 uwep ? "left" : "right", body_part(HAND));
7751 else
7752 sprintf(buf, "fighting with two %s",
7753 makeplural(body_part(HAND)));
7754 you_are(buf);
7757 /*** Miscellany ***/
7758 if ((guaranteed || !rn2(10)) && Luck) {
7759 ltmp = abs((int)Luck);
7760 sprintf(buf, "%s%slucky",
7761 ltmp >= 10 ? "extremely " : ltmp >= 5 ? "very " : "",
7762 Luck < 0 ? "un" : "");
7763 #ifdef WIZARD
7764 if (wizard || !rn2(10) || final >= 1 ) sprintf(eos(buf), " (%d)", Luck);
7765 #endif /*sometimes show your actual luck too --Amy */
7766 you_are(buf);
7768 #ifdef WIZARD
7769 else if ((guaranteed || !rn2(10)) && (wizard || !rn2(10) || final >= 1)) enl_msg("Your luck ", "is", "was", " zero");
7770 #endif
7771 if ((guaranteed || !rn2(10)) && (u.moreluck > 0)) you_have("extra luck");
7772 else if ((guaranteed || !rn2(10)) && (u.moreluck < 0)) you_have("reduced luck");
7773 if ((guaranteed || !rn2(10)) && (carrying(LUCKSTONE) || stone_luck(TRUE))) {
7774 ltmp = stone_luck(FALSE);
7775 if (ltmp <= 0)
7776 enl_msg("Bad luck ", "does", "did", " not time out for you");
7777 if (ltmp >= 0)
7778 enl_msg("Good luck ", "does", "did", " not time out for you");
7781 /* KMH, balance patch -- healthstones affect health */
7782 if ((guaranteed || !rn2(10)) && u.uhealbonus)
7784 sprintf(buf, "%s health", u.uhealbonus > 0 ? "extra" :
7785 "reduced");
7786 #ifdef WIZARD
7787 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%ld)", u.uhealbonus);
7788 #endif
7789 you_have(buf);
7791 #ifdef WIZARD
7792 else if (wizard) enl_msg("Your health bonus ", "is", "was", " zero");
7793 #endif
7795 if ((guaranteed || !rn2(10)) && recalc_mana() )
7797 sprintf(buf, "%s mana", recalc_mana() > 0 ? "extra" :
7798 "reduced");
7799 #ifdef WIZARD
7800 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%d)", recalc_mana() );
7801 #endif
7802 you_have(buf);
7804 #ifdef WIZARD
7805 else if (wizard) enl_msg("Your mana bonus ", "is", "was", " zero");
7806 #endif
7807 if (guaranteed || !rn2(10)) {
7808 sprintf(buf, "spell retention for remembering %d spells", urole.spelrete);
7809 you_have(buf);
7812 if ((guaranteed || !rn2(10)) && u.ugangr) {
7813 sprintf(buf, " %sangry with you",
7814 u.ugangr > 6 ? "extremely " : u.ugangr > 3 ? "very " : "");
7815 #ifdef WIZARD
7816 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%d)", u.ugangr);
7817 #endif
7818 enl_msg(u_gname(), " is", " was", buf);
7819 } /*else*/
7821 * We need to suppress this when the game is over, because death
7822 * can change the value calculated by can_pray(), potentially
7823 * resulting in a false claim that you could have prayed safely.
7825 if (guaranteed || !rn2(10)) {
7827 /* "can [not] safely pray" vs "could [not] have safely prayed" */
7829 sprintf(buf, "%s%ssafely pray%s", u.ugangr ? "not " : can_pray(FALSE) ? "" : "not ",
7830 final ? "have " : "", final ? "ed" : "");
7832 /*sprintf(buf, "%ssafely pray", can_pray(FALSE) ? "" : "not ");*/
7834 #ifdef WIZARD
7835 if (wizard || (!rn2(10)) || final >= 1 ) sprintf(eos(buf), " (%d)", u.ublesscnt);
7836 #endif
7838 you_can(buf);
7843 #if 0 /* WAC -- replaced by techniques */
7844 /* sprintf(buf, "%s%suse%s your special", !u.unextuse ? "" : "not ",
7845 final ? "have " : "", final ? "d" : "");*/
7846 sprintf(buf, "%suse your special", !u.unextuse ? "" : "not ");
7847 #ifdef WIZARD
7848 if (wizard) sprintf(eos(buf), " (%d)", u.unextuse);
7849 #endif
7850 you_can(buf);
7851 #endif
7855 const char *p;
7857 buf[0] = '\0';
7858 if (final < 2) { /* still in progress, or quit/escaped/ascended */
7859 p = "survived after being killed ";
7860 switch (u.umortality) {
7861 case 0: p = !final ? (char *)0 : "survived"; break;
7862 case 1: strcpy(buf, "once"); break;
7863 case 2: strcpy(buf, "twice"); break;
7864 case 3: strcpy(buf, "thrice"); break;
7865 default: sprintf(buf, "%d times", u.umortality);
7866 break;
7868 } else { /* game ended in character's death */
7869 p = "are dead";
7870 switch (u.umortality) {
7871 case 0: impossible("dead without dying?");
7872 case 1: break; /* just "are dead" */
7873 default: sprintf(buf, " (%d%s time!)", u.umortality,
7874 ordin(u.umortality));
7875 break;
7878 if (p) enl_msg(You_, "have been killed ", p, buf);
7881 display_nhwindow(en_win, TRUE);
7882 destroy_nhwindow(en_win);
7883 return;
7886 const char * const encx_stat[] = {
7888 "burdened",
7889 "stressed",
7890 "strained",
7891 "overtaxed",
7892 "overloaded"
7895 const char *hux_stat[] = {
7896 "satiated",
7897 " ",
7898 "hungry ",
7899 "weak ",
7900 "fainting",
7901 "fainted ",
7902 "starved "
7905 #ifdef DUMP_LOG
7906 void
7907 dump_enlightenment(final)
7908 int final;
7910 int ltmp;
7911 char buf[BUFSZ];
7912 char buf2[BUFSZ];
7913 const char *enc_stat[] = { /* copied from botl.c */
7915 "burdened",
7916 "stressed",
7917 "strained",
7918 "overtaxed",
7919 "overloaded"
7921 char *youwere = " You were ";
7922 char *youhave = " You have ";
7923 char *youhad = " You had ";
7924 char *youcould = " You could ";
7925 struct permonst *ptr;
7927 dump("", "Final attributes");
7929 if (u.freeplaymode) dump(youwere, "a demigod");
7930 if (flags.zapem) dump(youwere, "playing in ZAPM mode");
7931 if (flags.wonderland) dump(youwere, "playing in wonderland mode");
7932 if (flags.lostsoul && !flags.uberlostsoul) dump(youwere, "playing in lost soul mode");
7933 if (flags.uberlostsoul) dump(youwere, "playing in uber lost soul mode");
7934 if (flags.gehenna) dump(youwere, "playing in gehenna mode");
7935 if (flags.dudley) dump(youwere, "playing in dudley mode");
7936 if (flags.iwbtg) dump(youwere, "playing in IWBTG mode");
7937 if (flags.elmstreet) dump(youwere, "playing in elm street mode");
7938 if (flags.blindfox) dump(youwere, "playing in blindfox mode");
7939 if (flags.hippie) dump(youwere, "playing in hippie mode");
7940 #ifdef GMMODE
7941 if (flags.gmmode) dump(youwere, "playing in game master mode");
7942 if (flags.supergmmode) dump(youwere, "playing in super game master mode");
7943 #endif
7944 if (flags.assholemode) dump(youwere, "playing in asshole mode");
7945 if (PlayerOnBlacklist()) dump(youwere, "on the list of unfriendly persons");
7947 if (u.uevent.uhand_of_elbereth) {
7948 static const char * const hofe_titles[3] = {
7949 "the Hand of Elbereth",
7950 "the Envoy of Balance",
7951 "the Glory of Arioch"
7953 dump(youwere,
7954 (char *)hofe_titles[u.uevent.uhand_of_elbereth - 1]);
7957 if (u.ualign.record >= 20)
7958 dump(youwere, "piously aligned");
7959 else if (u.ualign.record > 13)
7960 dump(youwere, "devoutly aligned");
7961 else if (u.ualign.record > 8)
7962 dump(youwere, "fervently aligned");
7963 else if (u.ualign.record > 3)
7964 dump(youwere, "stridently aligned");
7965 else if (u.ualign.record == 3)
7966 dump(youwere, "aligned");
7967 else if (u.ualign.record > 0)
7968 dump(youwere, "haltingly aligned");
7969 else if (u.ualign.record == 0)
7970 dump(youwere, "nominally aligned");
7971 else if (u.ualign.record >= -3) dump(youhave, "strayed");
7972 else if (u.ualign.record >= -8) dump(youhave, "sinned");
7973 else dump(" You have ", "transgressed");
7975 sprintf(buf, " %d", u.ualign.record);
7976 dump(" Your alignment was ", buf);
7978 sprintf(buf, " %d", u.alignlim);
7979 dump(" Your max alignment was ", buf);
7981 sprintf(buf, " %d sins", u.ualign.sins);
7982 dump(" You carried ", buf);
7984 if (u.impossibleproperty >= 0) {
7985 sprintf(buf, " %s", enchname(u.impossibleproperty) );
7986 dump(" You could not have this property at all:", buf);
7989 if (u.nonextrinsicproperty >= 0) {
7990 sprintf(buf, " %s", enchname(u.nonextrinsicproperty) );
7991 dump(" You could not have this property extrinsically:", buf);
7994 if (u.nonintrinsicproperty >= 0) {
7995 sprintf(buf, " %s", enchname(u.nonintrinsicproperty) );
7996 dump(" You could not have this property intrinsically:", buf);
7999 if (u.nondoubleproperty >= 0) {
8000 sprintf(buf, " %s", enchname(u.nondoubleproperty) );
8001 dump(" You could not have the double effect of this property:", buf);
8004 if (u.idscrollpenalty > 100) {
8005 sprintf(buf, " %d", u.idscrollpenalty);
8006 dump(" Scroll identification only worked 100 times out of", buf);
8009 if (u.idpotionpenalty > 3) {
8010 sprintf(buf, " %d", u.idpotionpenalty);
8011 dump(" Potion identification only worked 3 times out of", buf);
8014 if (u.idringpenalty > 4) {
8015 sprintf(buf, " %d", u.idringpenalty);
8016 dump(" Ring identification only worked 4 times out of", buf);
8019 if (u.idamuletpenalty > 15) {
8020 sprintf(buf, " %d", u.idamuletpenalty);
8021 dump(" Amulet identification only worked 15 times out of", buf);
8023 if (u.idimplantpenalty > 15) {
8024 sprintf(buf, " %d", u.idimplantpenalty);
8025 dump(" Implant identification only worked 1 times out of", buf);
8028 if (u.idwandpenalty > 3) {
8029 sprintf(buf, " %d", u.idwandpenalty);
8030 dump(" Wand identification only worked 3 times out of", buf);
8033 if (u.idarmorpenalty > 15) {
8034 sprintf(buf, " %d", u.idarmorpenalty);
8035 dump(" Armor identification only worked 15 times out of", buf);
8038 if (u.idspellbookpenalty > 2) {
8039 sprintf(buf, " %d", u.idspellbookpenalty);
8040 dump(" Spellbook identification only worked 2 times out of", buf);
8043 if (u.idgempenalty > 100) {
8044 sprintf(buf, " %d", u.idgempenalty);
8045 dump(" Gem identification only worked 100 times out of", buf);
8048 if (u.idtoolpenalty > 5) {
8049 sprintf(buf, " %d", u.idtoolpenalty);
8050 dump(" Tool identification only worked 5 times out of", buf);
8053 if (u.musableremovechance) {
8054 sprintf(buf, " %d%% chance", 100 - u.musableremovechance);
8055 dump(" Monsters only dropped their musable items with", buf);
8058 if (u.equipmentremovechance) {
8059 sprintf(buf, " %d%% chance", 100 - u.equipmentremovechance);
8060 dump(" Monsters only dropped their equipment with", buf);
8063 if (u.bookspawnchance) {
8064 sprintf(buf, " %d%%", 100 - u.bookspawnchance);
8065 dump(" Book drop chance was reduced to", buf);
8068 if (u.scrollspawnchance) {
8069 sprintf(buf, " %d%%", 100 - u.scrollspawnchance);
8070 dump(" Scroll drop chance was reduced to", buf);
8073 if (u.antimusablebias) {
8074 sprintf(buf, " %d%%", u.antimusablebias);
8075 dump(" Musable item generation frequency had a negative bias of", buf);
8078 if (u.ringspawnchance) {
8079 sprintf(buf, " %d%%", 100 - u.ringspawnchance);
8080 dump(" Ring drop chance was reduced to", buf);
8083 if (u.wandspawnchance) {
8084 sprintf(buf, " %d%%", 100 - u.wandspawnchance);
8085 dump(" Wand drop chance was reduced to", buf);
8088 if (u.amuletspawnchance) {
8089 sprintf(buf, " %d%%", 100 - u.amuletspawnchance);
8090 dump(" Amulet drop chance was reduced to", buf);
8093 if (u.implantspawnchance) {
8094 sprintf(buf, " %d%%", 100 - u.implantspawnchance);
8095 dump(" Implant drop chance was reduced to", buf);
8098 if (u.potionspawnchance) {
8099 sprintf(buf, " %d%%", 100 - u.potionspawnchance);
8100 dump(" Potion drop chance was reduced to", buf);
8103 if (u.weaponspawnchance) {
8104 sprintf(buf, " %d%%", 100 - u.weaponspawnchance);
8105 dump(" Weapon drop chance was reduced to", buf);
8108 if (u.armorspawnchance) {
8109 sprintf(buf, " %d%%", 100 - u.armorspawnchance);
8110 dump(" Armor drop chance was reduced to", buf);
8113 if (u.toolspawnchance) {
8114 sprintf(buf, " %d%%", 100 - u.toolspawnchance);
8115 dump(" Tool drop chance was reduced to", buf);
8118 if (u.foodspawnchance) {
8119 sprintf(buf, " %d%%", 100 - u.foodspawnchance);
8120 dump(" Food drop chance was reduced to", buf);
8123 if (u.shopitemreduction) {
8124 sprintf(buf, " %d%%", 100 - u.shopitemreduction);
8125 dump(" Shop item generation was reduced to", buf);
8128 if (u.concealitemchance) {
8129 sprintf(buf, " %d%% of the time only", 100 - u.concealitemchance);
8130 dump(" Concealing monsters were spawned underneath items", buf);
8133 if (u.usefulitemchance) {
8134 sprintf(buf, " %d%% chance", 100 - u.usefulitemchance);
8135 dump(" Monster death drops spawned with only", buf);
8138 if (u.hiddenpowerskill) {
8139 sprintf(buf, " %s", wpskillname(u.hiddenpowerskill));
8140 dump(" Mastering the following skill taught you the hidden power:", buf);
8143 if (u.untrainableskill) {
8144 sprintf(buf, " %s", wpskillname(u.untrainableskill));
8145 dump(" The following skill could not be trained at all:", buf);
8148 if (u.halfspeedskill) {
8149 sprintf(buf, " %s", wpskillname(u.halfspeedskill));
8150 dump(" The following skill was trained at half the usual rate:", buf);
8153 if (u.fifthspeedskill) {
8154 sprintf(buf, " %s", wpskillname(u.fifthspeedskill));
8155 dump(" The following skill was trained at one fifth the usual rate:", buf);
8158 if (u.basiclimitskill) {
8159 sprintf(buf, " %s", wpskillname(u.basiclimitskill));
8160 dump(" The following skill was limited to basic proficiency:", buf);
8163 if (u.skilledlimitskill) {
8164 sprintf(buf, " %s", wpskillname(u.skilledlimitskill));
8165 dump(" The following skill was limited to skilled proficiency:", buf);
8168 if (u.expertlimitskill) {
8169 sprintf(buf, " %s", wpskillname(u.expertlimitskill));
8170 dump(" The following skill was limited to expert proficiency:", buf);
8173 if (u.earlytrainingskill) {
8174 sprintf(buf, " %s (turn %d)", wpskillname(u.earlytrainingskill), u.earlytrainingtimer);
8175 dump(" The following skill became untrainable if you tried to train it too early:", buf);
8178 if (u.earlytrainingblown) {
8179 sprintf(buf, "blown your chance of training the %s skill", wpskillname(u.earlytrainingskill));
8180 dump(youhad, buf);
8183 if (u.frtrainingskill) {
8184 sprintf(buf, " %s (turn %d)", wpskillname(u.frtrainingskill), u.frtrainingtimer);
8185 dump(" The following skill became untrainable if you tried to train it too early:", buf);
8188 if (u.frtrainingblown) {
8189 sprintf(buf, "blown your chance of training the %s skill", wpskillname(u.frtrainingskill));
8190 dump(youhad, buf);
8193 if (u.latetrainingskill) {
8194 sprintf(buf, " %s (turn %d)", wpskillname(u.latetrainingskill), u.latetrainingtimer);
8195 dump(" The following skill became untrainable after a while:", buf);
8198 if (u.lavtrainingskill) {
8199 sprintf(buf, " %s (turn %d)", wpskillname(u.lavtrainingskill), u.lavtrainingtimer);
8200 dump(" The following skill couldn't be trained before a certain turn number is reached:", buf);
8203 if (u.slowtrainingskill) {
8204 sprintf(buf, " %s", wpskillname(u.slowtrainingskill));
8205 dump(" The following skill became harder to train at higher skill levels:", buf);
8208 if (u.stickycursechance) {
8209 sprintf(buf, " %d%%", u.stickycursechance);
8210 dump(" Sticky curses were more common by", buf);
8213 if (u.heavycursechance) {
8214 sprintf(buf, " %d%%", u.heavycursechance);
8215 dump(" Heavy curses were more common by", buf);
8218 if (u.primecursechance) {
8219 sprintf(buf, " %d%%", u.primecursechance);
8220 dump(" Prime curses were more common by", buf);
8223 if (u.genericcursechance) {
8224 sprintf(buf, " %d%%", u.genericcursechance);
8225 dump(" Items were more likely to be generated cursed by", buf);
8228 sprintf(buf, " %d", u.monstermultiplier);
8229 dump(" Monster spawn rate multiplier was currently", buf);
8231 sprintf(buf, " %d", nartifact_exist() );
8232 dump(" Number of artifacts generated was ", buf);
8234 sprintf(buf, " %d", u.fakeartifacts );
8235 dump(" Number of fake artifacts generated was ", buf);
8237 if (u.legscratching > 1) {
8238 sprintf(buf, " %d", u.legscratching - 1);
8239 dump(" Your leg damage was ", buf);
8242 if (u.youpolyamount > 0) {
8243 sprintf(buf, " %d", u.youpolyamount);
8244 dump(" Your remaining amount of free polymorphs was ", buf);
8247 if (u.antimagicshell > 0) {
8248 sprintf(buf, " %d more turns", u.antimagicshell);
8249 dump(" Your antimagic shell would have lasted", buf);
8252 if (Role_if(PM_UNBELIEVER)) {
8253 dump(" You were ", "producing a permanent antimagic shell");
8256 sprintf(buf, " '%s", bundledescription());
8257 dump(" Your hairstyle was", buf);
8259 sprintf(buf, " '%s'", currentmartialstyle());
8260 dump(" Your current martial arts style was", buf);
8262 sprintf(buf, " %d", u.casinochips);
8263 dump(" Your amount of casino chips was", buf);
8265 sprintf(buf, " %d turns ago", u.barbertimer);
8266 dump(" The last time you got a new haircut was", buf);
8268 sprintf(buf, " %d", u.areoladiameter);
8269 dump(" Your areola diameter was", buf);
8271 sprintf(buf, " turn %d", u.monstertimeout);
8272 dump(" Monster spawn increase started at ", buf);
8274 sprintf(buf, " turn %d", u.monstertimefinish);
8275 dump(" Monster spawn increase reached its maximum at ", buf);
8276 dump(" In this game, Eevee's evolution was ", mons[u.eeveelution].mname );
8277 /* these two are tied together because the monstertimefinish variable defines the evolution --Amy */
8279 sprintf(buf, " %d", u.maxrndmonstchoicecount);
8280 dump(" Maximum amount of combined random monster spawn freqs was", buf);
8282 sprintf(buf, " turn %d", u.ascensiontimelimit);
8283 dump(" Your limit for ascension was at ", buf);
8285 dump(" The monster class that cannot be genocided was ", monexplain[u.ungenocidable] );
8287 if (u.alwaysinvisible) {
8288 dump(" Today, this monster class was always generated invisible: ", monexplain[u.alwaysinvisible] );
8291 if (u.alwayshidden) {
8292 dump(" Today, this monster class was always generated hidden: ", monexplain[u.alwayshidden] );
8295 if (u.freqmonsterbonus) {
8296 sprintf(buf, "spawned more often: %s (freq bonus %d)", monexplain[u.frequentmonster], u.freqmonsterbonus);
8297 dump(" The monster class that was ", buf );
8300 if (u.freqcolorbonus) {
8301 sprintf(buf, "spawned more often: %s (freq bonus %d)", c_obj_colors[u.frequentcolor], u.freqcolorbonus);
8302 dump(" The monster color that was ", buf );
8305 ptr = &mons[u.frequentspecies];
8306 sprintf(buf, "spawned more often: %s (freq bonus %d)", ptr->mname, u.freqspeciesbonus);
8307 dump(" The monster species that ", buf );
8309 ptr = &mons[u.frequentspecies2];
8310 sprintf(buf, "spawned more often: %s (freq bonus %d)", ptr->mname, u.freqspeciesbonus2);
8311 dump(" The monster species that ", buf );
8313 ptr = &mons[u.frequentspecies3];
8314 sprintf(buf, "spawned more often: %s (freq bonus %d)", ptr->mname, u.freqspeciesbonus3);
8315 dump(" The monster species that ", buf );
8317 ptr = &mons[u.frequentspecies4];
8318 sprintf(buf, "spawned more often: %s (freq bonus %d)", ptr->mname, u.freqspeciesbonus4);
8319 dump(" The monster species that ", buf );
8321 ptr = &mons[u.frequentspecies5];
8322 sprintf(buf, "spawned more often: %s (freq bonus %d)", ptr->mname, u.freqspeciesbonus5);
8323 dump(" The monster species that ", buf );
8325 ptr = &mons[u.frequentspecies6];
8326 sprintf(buf, "spawned more often: %s (freq bonus %d)", ptr->mname, u.freqspeciesbonus6);
8327 dump(" The monster species that ", buf );
8329 ptr = &mons[u.frequentspecies7];
8330 sprintf(buf, "spawned more often: %s (freq bonus %d)", ptr->mname, u.freqspeciesbonus7);
8331 dump(" The monster species that ", buf );
8333 ptr = &mons[u.frequentspecies8];
8334 sprintf(buf, "spawned more often: %s (freq bonus %d)", ptr->mname, u.freqspeciesbonus8);
8335 dump(" The monster species that ", buf );
8337 ptr = &mons[u.frequentspecies9];
8338 sprintf(buf, "spawned more often: %s (freq bonus %d)", ptr->mname, u.freqspeciesbonus9);
8339 dump(" The monster species that ", buf );
8341 ptr = &mons[u.frequentspecies10];
8342 sprintf(buf, "spawned more often: %s (freq bonus %d)", ptr->mname, u.freqspeciesbonus10);
8343 dump(" The monster species that ", buf );
8345 ptr = &mons[u.frequentspecies11];
8346 sprintf(buf, "spawned more often: %s (freq bonus %d)", ptr->mname, u.freqspeciesbonus11);
8347 dump(" The monster species that ", buf );
8349 ptr = &mons[u.frequentspecies12];
8350 sprintf(buf, "spawned more often: %s (freq bonus %d)", ptr->mname, u.freqspeciesbonus12);
8351 dump(" The monster species that ", buf );
8353 ptr = &mons[u.frequentspecies13];
8354 sprintf(buf, "spawned more often: %s (freq bonus %d)", ptr->mname, u.freqspeciesbonus13);
8355 dump(" The monster species that ", buf );
8357 ptr = &mons[u.frequentspecies14];
8358 sprintf(buf, "spawned more often: %s (freq bonus %d)", ptr->mname, u.freqspeciesbonus14);
8359 dump(" The monster species that ", buf );
8361 ptr = &mons[u.frequentspecies15];
8362 sprintf(buf, "spawned more often: %s (freq bonus %d)", ptr->mname, u.freqspeciesbonus15);
8363 dump(" The monster species that ", buf );
8365 ptr = &mons[u.frequentspecies16];
8366 sprintf(buf, "spawned more often: %s (freq bonus %d)", ptr->mname, u.freqspeciesbonus16);
8367 dump(" The monster species that ", buf );
8369 ptr = &mons[u.frequentspecies17];
8370 sprintf(buf, "spawned more often: %s (freq bonus %d)", ptr->mname, u.freqspeciesbonus17);
8371 dump(" The monster species that ", buf );
8373 ptr = &mons[u.frequentspecies18];
8374 sprintf(buf, "spawned more often: %s (freq bonus %d)", ptr->mname, u.freqspeciesbonus18);
8375 dump(" The monster species that ", buf );
8377 ptr = &mons[u.frequentspecies19];
8378 sprintf(buf, "spawned more often: %s (freq bonus %d)", ptr->mname, u.freqspeciesbonus19);
8379 dump(" The monster species that ", buf );
8381 ptr = &mons[u.frequentspecies20];
8382 sprintf(buf, "spawned more often: %s (freq bonus %d)", ptr->mname, u.freqspeciesbonus20);
8383 dump(" The monster species that ", buf );
8385 sprintf(buf, "more common: %s (freq bonus %d)", montraitname(u.frequenttrait1), u.freqtraitbonus1);
8386 dump(" The monster trait that was ", buf );
8388 if (u.frequenttrait2) {
8389 sprintf(buf, "more common: %s (freq bonus %d)", montraitname(u.frequenttrait2), u.freqtraitbonus2);
8390 dump(" The monster trait that was ", buf );
8393 if (u.frequenttrait3) {
8394 sprintf(buf, "more common: %s (freq bonus %d)", montraitname(u.frequenttrait3), u.freqtraitbonus3);
8395 dump(" The monster trait that was ", buf );
8398 if (u.frequenttrait4) {
8399 sprintf(buf, "more common: %s (freq bonus %d)", montraitname(u.frequenttrait4), u.freqtraitbonus4);
8400 dump(" The monster trait that was ", buf );
8403 if (u.frequenttrait5) {
8404 sprintf(buf, "more common: %s (freq bonus %d)", montraitname(u.frequenttrait5), u.freqtraitbonus5);
8405 dump(" The monster trait that was ", buf );
8408 if (u.frequenttrait6) {
8409 sprintf(buf, "more common: %s (freq bonus %d)", montraitname(u.frequenttrait6), u.freqtraitbonus6);
8410 dump(" The monster trait that was ", buf );
8413 if (u.frequenttrait7) {
8414 sprintf(buf, "more common: %s (freq bonus %d)", montraitname(u.frequenttrait7), u.freqtraitbonus7);
8415 dump(" The monster trait that was ", buf );
8418 if (u.frequenttrait8) {
8419 sprintf(buf, "more common: %s (freq bonus %d)", montraitname(u.frequenttrait8), u.freqtraitbonus8);
8420 dump(" The monster trait that was ", buf );
8423 if (u.frequenttrait9) {
8424 sprintf(buf, "more common: %s (freq bonus %d)", montraitname(u.frequenttrait9), u.freqtraitbonus9);
8425 dump(" The monster trait that was ", buf );
8428 if (u.frequenttrait10) {
8429 sprintf(buf, "more common: %s (freq bonus %d)", montraitname(u.frequenttrait10), u.freqtraitbonus10);
8430 dump(" The monster trait that was ", buf );
8433 ptr = &mons[u.nospawnspecies];
8434 sprintf(buf, "never randomly spawned: %s", ptr->mname);
8435 dump(" The monster species that ", buf );
8437 ptr = &mons[u.nospawnspecies2];
8438 sprintf(buf, "never randomly spawned: %s", ptr->mname);
8439 dump(" The monster species that ", buf );
8441 ptr = &mons[u.nospawnspecies3];
8442 sprintf(buf, "never randomly spawned: %s", ptr->mname);
8443 dump(" The monster species that ", buf );
8445 ptr = &mons[u.nospawnspecies4];
8446 sprintf(buf, "never randomly spawned: %s", ptr->mname);
8447 dump(" The monster species that ", buf );
8449 ptr = &mons[u.nospawnspecies5];
8450 sprintf(buf, "never randomly spawned: %s", ptr->mname);
8451 dump(" The monster species that ", buf );
8453 ptr = &mons[u.nospawnspecies6];
8454 sprintf(buf, "never randomly spawned: %s", ptr->mname);
8455 dump(" The monster species that ", buf );
8457 ptr = &mons[u.nospawnspecies7];
8458 sprintf(buf, "never randomly spawned: %s", ptr->mname);
8459 dump(" The monster species that ", buf );
8461 ptr = &mons[u.nospawnspecies8];
8462 sprintf(buf, "never randomly spawned: %s", ptr->mname);
8463 dump(" The monster species that ", buf );
8465 ptr = &mons[u.nospawnspecies9];
8466 sprintf(buf, "never randomly spawned: %s", ptr->mname);
8467 dump(" The monster species that ", buf );
8469 ptr = &mons[u.nospawnspecies10];
8470 sprintf(buf, "never randomly spawned: %s", ptr->mname);
8471 dump(" The monster species that ", buf );
8473 if (u.speedymonster) {
8474 sprintf(buf, "always generated with extra speed: %s", monexplain[u.speedymonster]);
8475 dump(" The monster class that ", buf );
8478 if (u.musemonster) {
8479 sprintf(buf, "more likely to generate with musable stuff: %s", monexplain[u.musemonster]);
8480 dump(" The monster class that ", buf );
8483 if (u.minimalism && isminimalist) {
8484 sprintf(buf, " %d", u.minimalism);
8485 dump(" Items generated only 1 time in", buf);
8488 sprintf(buf, "never generated: %s (%s)", obj_descr[u.unobtainable].oc_name, objtypenames[objects[u.unobtainable].oc_class]);
8489 dump(" The RNG hath decreed that this item was ", buf );
8491 if (u.unobtainable2 != -1) {
8492 sprintf(buf, "never generated: %s (%s)", obj_descr[u.unobtainable2].oc_name, objtypenames[objects[u.unobtainable2].oc_class]);
8493 dump(" The RNG hath decreed that this item was ", buf );
8496 if (u.unobtainable3 != -1) {
8497 sprintf(buf, "never generated: %s (%s)", obj_descr[u.unobtainable3].oc_name, objtypenames[objects[u.unobtainable3].oc_class]);
8498 dump(" The RNG hath decreed that this item was ", buf );
8501 if (u.unobtainable4 != -1) {
8502 sprintf(buf, "never generated: %s (%s)", obj_descr[u.unobtainable4].oc_name, objtypenames[objects[u.unobtainable4].oc_class]);
8503 dump(" The RNG hath decreed that this item was ", buf );
8506 if (u.unobtainable5 != -1) {
8507 sprintf(buf, "never generated: %s (%s)", obj_descr[u.unobtainable5].oc_name, objtypenames[objects[u.unobtainable5].oc_class]);
8508 dump(" The RNG hath decreed that this item was ", buf );
8511 if (u.unobtainable6 != -1) {
8512 sprintf(buf, "never generated: %s (%s)", obj_descr[u.unobtainable6].oc_name, objtypenames[objects[u.unobtainable6].oc_class]);
8513 dump(" The RNG hath decreed that this item was ", buf );
8516 if (u.unobtainable7 != -1) {
8517 sprintf(buf, "never generated: %s (%s)", obj_descr[u.unobtainable7].oc_name, objtypenames[objects[u.unobtainable7].oc_class]);
8518 dump(" The RNG hath decreed that this item was ", buf );
8521 if (u.unobtainable8 != -1) {
8522 sprintf(buf, "never generated: %s (%s)", obj_descr[u.unobtainable8].oc_name, objtypenames[objects[u.unobtainable8].oc_class]);
8523 dump(" The RNG hath decreed that this item was ", buf );
8526 if (u.unobtainable9 != -1) {
8527 sprintf(buf, "never generated: %s (%s)", obj_descr[u.unobtainable9].oc_name, objtypenames[objects[u.unobtainable9].oc_class]);
8528 dump(" The RNG hath decreed that this item was ", buf );
8531 if (u.unobtainable10 != -1) {
8532 sprintf(buf, "never generated: %s (%s)", obj_descr[u.unobtainable10].oc_name, objtypenames[objects[u.unobtainable10].oc_class]);
8533 dump(" The RNG hath decreed that this item was ", buf );
8536 if (u.unobtainablegeno != -1) {
8537 sprintf(buf, "%s (%s)", obj_descr[u.unobtainablegeno].oc_name, objtypenames[objects[u.unobtainablegeno].oc_class]);
8538 dump(" You had genocided this item: ", buf );
8541 sprintf(buf, "generated more often: %s (%s, freq bonus %d)", obj_descr[u.veryobtainable].oc_name, objtypenames[objects[u.veryobtainable].oc_class], u.veryobtainableboost);
8542 dump(" The RNG hath decreed that this item was ", buf );
8544 sprintf(buf, "generated more often: %s (%s, freq bonus %d)", obj_descr[u.veryobtainable2].oc_name, objtypenames[objects[u.veryobtainable2].oc_class], u.veryobtainableboost2);
8545 dump(" The RNG hath decreed that this item was ", buf );
8547 sprintf(buf, "generated more often: %s (%s, freq bonus %d)", obj_descr[u.veryobtainable3].oc_name, objtypenames[objects[u.veryobtainable3].oc_class], u.veryobtainableboost3);
8548 dump(" The RNG hath decreed that this item was ", buf );
8550 sprintf(buf, "generated more often: %s (%s, freq bonus %d)", obj_descr[u.veryobtainable4].oc_name, objtypenames[objects[u.veryobtainable4].oc_class], u.veryobtainableboost4);
8551 dump(" The RNG hath decreed that this item was ", buf );
8553 sprintf(buf, "generated more often: %s (%s, freq bonus %d)", obj_descr[u.veryobtainable5].oc_name, objtypenames[objects[u.veryobtainable5].oc_class], u.veryobtainableboost5);
8554 dump(" The RNG hath decreed that this item was ", buf );
8556 sprintf(buf, "generated more often: %s (%s, freq bonus %d)", obj_descr[u.veryobtainable6].oc_name, objtypenames[objects[u.veryobtainable6].oc_class], u.veryobtainableboost6);
8557 dump(" The RNG hath decreed that this item was ", buf );
8559 sprintf(buf, "generated more often: %s (%s, freq bonus %d)", obj_descr[u.veryobtainable7].oc_name, objtypenames[objects[u.veryobtainable7].oc_class], u.veryobtainableboost7);
8560 dump(" The RNG hath decreed that this item was ", buf );
8562 sprintf(buf, "generated more often: %s (%s, freq bonus %d)", obj_descr[u.veryobtainable8].oc_name, objtypenames[objects[u.veryobtainable8].oc_class], u.veryobtainableboost8);
8563 dump(" The RNG hath decreed that this item was ", buf );
8565 sprintf(buf, "generated more often: %s (%s, freq bonus %d)", obj_descr[u.veryobtainable9].oc_name, objtypenames[objects[u.veryobtainable9].oc_class], u.veryobtainableboost9);
8566 dump(" The RNG hath decreed that this item was ", buf );
8568 sprintf(buf, "generated more often: %s (%s, freq bonus %d)", obj_descr[u.veryobtainable10].oc_name, objtypenames[objects[u.veryobtainable10].oc_class], u.veryobtainableboost10);
8569 dump(" The RNG hath decreed that this item was ", buf );
8571 sprintf(buf, "generated more often: %s (%s, freq bonus %d)", obj_descr[u.veryobtainable11].oc_name, objtypenames[objects[u.veryobtainable11].oc_class], u.veryobtainableboost11);
8572 dump(" The RNG hath decreed that this item was ", buf );
8574 sprintf(buf, "generated more often: %s (%s, freq bonus %d)", obj_descr[u.veryobtainable12].oc_name, objtypenames[objects[u.veryobtainable12].oc_class], u.veryobtainableboost12);
8575 dump(" The RNG hath decreed that this item was ", buf );
8577 sprintf(buf, "generated more often: %s (%s, freq bonus %d)", obj_descr[u.veryobtainable13].oc_name, objtypenames[objects[u.veryobtainable13].oc_class], u.veryobtainableboost13);
8578 dump(" The RNG hath decreed that this item was ", buf );
8580 sprintf(buf, "generated more often: %s (%s, freq bonus %d)", obj_descr[u.veryobtainable14].oc_name, objtypenames[objects[u.veryobtainable14].oc_class], u.veryobtainableboost14);
8581 dump(" The RNG hath decreed that this item was ", buf );
8583 sprintf(buf, "generated more often: %s (%s, freq bonus %d)", obj_descr[u.veryobtainable15].oc_name, objtypenames[objects[u.veryobtainable15].oc_class], u.veryobtainableboost15);
8584 dump(" The RNG hath decreed that this item was ", buf );
8586 sprintf(buf, "generated more often: %s (%s, freq bonus %d)", obj_descr[u.veryobtainable16].oc_name, objtypenames[objects[u.veryobtainable16].oc_class], u.veryobtainableboost16);
8587 dump(" The RNG hath decreed that this item was ", buf );
8589 sprintf(buf, "generated more often: %s (%s, freq bonus %d)", obj_descr[u.veryobtainable17].oc_name, objtypenames[objects[u.veryobtainable17].oc_class], u.veryobtainableboost17);
8590 dump(" The RNG hath decreed that this item was ", buf );
8592 sprintf(buf, "generated more often: %s (%s, freq bonus %d)", obj_descr[u.veryobtainable18].oc_name, objtypenames[objects[u.veryobtainable18].oc_class], u.veryobtainableboost18);
8593 dump(" The RNG hath decreed that this item was ", buf );
8595 sprintf(buf, "generated more often: %s (%s, freq bonus %d)", obj_descr[u.veryobtainable19].oc_name, objtypenames[objects[u.veryobtainable19].oc_class], u.veryobtainableboost19);
8596 dump(" The RNG hath decreed that this item was ", buf );
8598 sprintf(buf, "generated more often: %s (%s, freq bonus %d)", obj_descr[u.veryobtainable20].oc_name, objtypenames[objects[u.veryobtainable20].oc_class], u.veryobtainableboost20);
8599 dump(" The RNG hath decreed that this item was ", buf );
8601 if (u.veryobtainclass1 > 0) {
8602 sprintf(buf, "generated more often: %s (freq bonus %d)", objtypenames[u.veryobtainclass1], u.veryobtainclass1boost);
8603 dump(" The RNG hath decreed that this item class was ", buf );
8606 if (u.veryobtainclass2 > 0) {
8607 sprintf(buf, "generated more often: %s (freq bonus %d)", objtypenames[u.veryobtainclass2], u.veryobtainclass2boost);
8608 dump(" The RNG hath decreed that this item class was ", buf );
8611 if (u.veryobtainclass3 > 0) {
8612 sprintf(buf, "generated more often: %s (freq bonus %d)", objtypenames[u.veryobtainclass3], u.veryobtainclass3boost);
8613 dump(" The RNG hath decreed that this item class was ", buf );
8616 sprintf(buf, "always generated cursed: %s (%s)", obj_descr[u.alwayscurseditem].oc_name, objtypenames[objects[u.alwayscurseditem].oc_class]);
8617 dump(" The RNG hath decreed that this item was ", buf );
8619 if (u.alwayscurseditem2 != -1) {
8620 sprintf(buf, "always generated cursed: %s (%s)", obj_descr[u.alwayscurseditem2].oc_name, objtypenames[objects[u.alwayscurseditem2].oc_class]);
8621 dump(" The RNG hath decreed that this item was ", buf );
8624 if (u.alwayscurseditem3 != -1) {
8625 sprintf(buf, "always generated cursed: %s (%s)", obj_descr[u.alwayscurseditem3].oc_name, objtypenames[objects[u.alwayscurseditem3].oc_class]);
8626 dump(" The RNG hath decreed that this item was ", buf );
8629 if (u.alwayscurseditem4 != -1) {
8630 sprintf(buf, "always generated cursed: %s (%s)", obj_descr[u.alwayscurseditem4].oc_name, objtypenames[objects[u.alwayscurseditem4].oc_class]);
8631 dump(" The RNG hath decreed that this item was ", buf );
8634 if (u.alwayscurseditem5 != -1) {
8635 sprintf(buf, "always generated cursed: %s (%s)", obj_descr[u.alwayscurseditem5].oc_name, objtypenames[objects[u.alwayscurseditem5].oc_class]);
8636 dump(" The RNG hath decreed that this item was ", buf );
8639 if (u.alwayscurseditem6 != -1) {
8640 sprintf(buf, "always generated cursed: %s (%s)", obj_descr[u.alwayscurseditem6].oc_name, objtypenames[objects[u.alwayscurseditem6].oc_class]);
8641 dump(" The RNG hath decreed that this item was ", buf );
8644 if (u.alwayscurseditem7 != -1) {
8645 sprintf(buf, "always generated cursed: %s (%s)", obj_descr[u.alwayscurseditem7].oc_name, objtypenames[objects[u.alwayscurseditem7].oc_class]);
8646 dump(" The RNG hath decreed that this item was ", buf );
8649 if (u.alwayscurseditem8 != -1) {
8650 sprintf(buf, "always generated cursed: %s (%s)", obj_descr[u.alwayscurseditem8].oc_name, objtypenames[objects[u.alwayscurseditem8].oc_class]);
8651 dump(" The RNG hath decreed that this item was ", buf );
8654 if (u.alwayscurseditem9 != -1) {
8655 sprintf(buf, "always generated cursed: %s (%s)", obj_descr[u.alwayscurseditem9].oc_name, objtypenames[objects[u.alwayscurseditem9].oc_class]);
8656 dump(" The RNG hath decreed that this item was ", buf );
8659 if (u.alwayscurseditem10 != -1) {
8660 sprintf(buf, "always generated cursed: %s (%s)", obj_descr[u.alwayscurseditem10].oc_name, objtypenames[objects[u.alwayscurseditem10].oc_class]);
8661 dump(" The RNG hath decreed that this item was ", buf );
8664 sprintf(buf, "always invisible: %s", defsyms[trap_to_defsym(u.invisotrap)].explanation);
8665 dump(" The RNG hath decreed that this trap was ", buf );
8667 sprintf(buf, "generated more often: %s (freq bonus %d)", defsyms[trap_to_defsym(u.frequenttrap)].explanation, u.freqtrapbonus);
8668 dump(" The RNG hath decreed that this trap was ", buf );
8670 if (u.spellbookbias1 != -1) {
8671 sprintf(buf, "%s (freq bonus %d)", wpskillname(u.spellbookbias1), u.spellbookchance1);
8672 dump(" The spell school whose books are more common was ", buf );
8675 if (u.spellbookbias2 != -1) {
8676 sprintf(buf, "%s (freq bonus %d)", wpskillname(u.spellbookbias2), u.spellbookchance2);
8677 dump(" The spell school whose books are more common was ", buf );
8680 if (u.spellbookbias3 != -1) {
8681 sprintf(buf, "%s (freq bonus %d)", wpskillname(u.spellbookbias3), u.spellbookchance3);
8682 dump(" The spell school whose books are more common was ", buf );
8685 sprintf(buf, "for 1 in %d traps", u.traprandomizing);
8686 dump(" Trap randomization happened ", buf );
8688 sprintf(buf, "spawned invisible 1 times in %d", u.invistrapchance);
8689 dump(" Traps were ", buf );
8691 if (u.trapxtradiff) {
8692 sprintf(buf, "increased by %d", u.trapxtradiff);
8693 dump(" Trap difficulty was ", buf );
8696 sprintf(buf, "extra hard to find %d%% of the time", u.xdifftrapchance);
8697 dump(" Traps were ", buf );
8699 sprintf(buf, " turn %d", u.next_check);
8700 dump(" Next attribute increase check would have come at", buf);
8702 sprintf(buf, " %d", AEXE(A_STR));
8703 dump(" Strength training was", buf);
8705 sprintf(buf, " %d", AEXE(A_DEX));
8706 dump(" Dexterity training was", buf);
8708 sprintf(buf, " %d", AEXE(A_WIS));
8709 dump(" Wisdom training was", buf);
8711 sprintf(buf, " %d", AEXE(A_CON));
8712 dump(" Constitution training was", buf);
8714 sprintf(buf, " %d", u.usanity);
8715 dump(" Your sanity was", buf);
8717 sprintf(buf, " %d alla remaining", u.alla);
8718 dump(" You had", buf);
8720 if (u.negativeprotection) {
8721 sprintf(buf, " %d", u.negativeprotection);
8722 dump(" Your protection was reduced by", buf);
8725 if (u.tremblingamount) {
8726 sprintf(buf, " %d", u.tremblingamount);
8727 dump(" You were trembling, reducing your to-hit and spellcasting chances. Amount:", buf);
8730 if (u.tsloss_str) {
8731 sprintf(buf, " %d", u.tsloss_str);
8732 dump(" Your strength was temporarily reduced by", buf);
8734 if (u.tsloss_dex) {
8735 sprintf(buf, " %d", u.tsloss_dex);
8736 dump(" Your dexterity was temporarily reduced by", buf);
8738 if (u.tsloss_con) {
8739 sprintf(buf, " %d", u.tsloss_con);
8740 dump(" Your constitution was temporarily reduced by", buf);
8742 if (u.tsloss_wis) {
8743 sprintf(buf, " %d", u.tsloss_wis);
8744 dump(" Your wisdom was temporarily reduced by", buf);
8746 if (u.tsloss_int) {
8747 sprintf(buf, " %d", u.tsloss_int);
8748 dump(" Your intelligence was temporarily reduced by", buf);
8750 if (u.tsloss_cha) {
8751 sprintf(buf, " %d", u.tsloss_cha);
8752 dump(" Your charisma was temporarily reduced by", buf);
8755 if (u.extralives == 1) {
8756 dump(youhad, "an extra life");
8759 if (u.extralives > 1) {
8760 sprintf(buf, " %d", u.extralives);
8761 dump(" Your amount of extra lives was", buf);
8764 if (u.chokhmahdamage) {
8765 sprintf(buf, " %d", u.chokhmahdamage);
8766 dump(" The escalating chokhmah attack damage was", buf);
8769 /*** Resistances to troubles ***/
8770 if (Fire_resistance) dump(youwere, StrongFire_resistance ? "doubly fire resistant" : "fire resistant");
8771 if (Cold_resistance) dump(youwere, StrongCold_resistance ? "doubly cold resistant" : "cold resistant");
8772 if (Sleep_resistance) dump(youwere, StrongSleep_resistance ? "doubly sleep resistant" : "sleep resistant");
8773 if (Disint_resistance) dump(youwere, StrongDisint_resistance ? "doubly disintegration-resistant" : "disintegration-resistant");
8774 if (Shock_resistance) dump(youwere, StrongShock_resistance ? "doubly shock resistant" : "shock resistant");
8775 if (Poison_resistance) dump(youwere, StrongPoison_resistance ? "doubly poison resistant" : "poison resistant");
8776 if (Drain_resistance) dump(youwere, StrongDrain_resistance ? "doubly level-drain resistant" : "level-drain resistant");
8777 if (Sick_resistance) dump(youwere, StrongSick_resistance ? "completely immune to sickness" : IntSick_resistance ? "immune to sickness" : "resistant to sickness");
8778 if (Antimagic) dump(youwere, StrongAntimagic ? "doubly magic-protected" : "magic-protected");
8779 if (Acid_resistance) dump(youwere, StrongAcid_resistance ? "doubly acid resistant" : "acid resistant");
8780 if (Fear_resistance) dump(youwere, StrongFear_resistance ? "highly resistant to fear" : "resistant to fear");
8781 if (Stone_resistance) dump(youwere, StrongStone_resistance ? "completely immune to petrification" : IntStone_resistance ? "immune to petrification" : "petrification resistant");
8782 if (Astral_vision) dump(youhad, StrongAstral_vision ? "super-x-ray vision" : "x-ray vision");
8783 if (Invulnerable) dump(youwere, "invulnerable");
8784 if (u.urealedibility) {
8785 sprintf(buf, "recognize detrimental food");
8786 sprintf(eos(buf), " (%d)", u.urealedibility);
8787 dump(youcould, buf);
8790 if (u.boosttimer) {
8791 sprintf(buf, "boosted");
8792 sprintf(eos(buf), " (%d)", u.boosttimer);
8793 dump(youwere, buf);
8796 /*** Troubles ***/
8798 if (multi) {
8799 sprintf(buf, "paralyzed");
8800 sprintf(eos(buf), " (%d)", multi);
8801 dump(youwere, buf);
8804 if (Halluc_resistance) {
8805 if (StrongHalluc_resistance) dump(" ", "You strongly resisted hallucinations");
8806 else dump(" ", "You resisted hallucinations");
8808 if (Blind_resistance) {
8809 if (StrongBlind_resistance) dump(" ", "You strongly resisted blindness");
8810 else dump(" ", "You resisted blindness");
8812 if (Hallucination) {
8813 if (HeavyHallu) sprintf(buf, "badly hallucinating");
8814 else sprintf(buf, "hallucinating");
8815 sprintf(eos(buf), " (%ld)", HHallucination);
8816 dump(youwere, buf);
8818 if (Stunned) {
8819 if (HeavyStunned) sprintf(buf, "badly stunned");
8820 else sprintf(buf, "stunned");
8821 sprintf(eos(buf), " (%ld)", HStun);
8822 dump(youwere, buf);
8824 if (Confusion) {
8825 if (HeavyConfusion) sprintf(buf, "badly confused");
8826 else sprintf(buf, "confused");
8827 sprintf(eos(buf), " (%ld)", HConfusion);
8828 dump(youwere, buf);
8830 if (Blinded) {
8831 if (HeavyBlind) sprintf(buf, "badly blinded");
8832 else sprintf(buf, "blinded");
8833 sprintf(eos(buf), " (%ld)", Blinded);
8834 dump(youwere, buf);
8836 if (Sick) {
8837 sprintf(buf, "sick");
8838 if (u.usick_type & SICK_VOMITABLE) sprintf(eos(buf), " from food poisoning");
8839 if (u.usick_type & SICK_NONVOMITABLE) sprintf(eos(buf), " from illness");
8840 sprintf(eos(buf), " (%ld)", Sick);
8841 dump(youwere, buf);
8843 if (Vomiting) {
8844 sprintf(buf, "nauseated");
8845 sprintf(eos(buf), " (%ld)", Vomiting);
8846 dump(youwere, buf);
8848 if (Feared) {
8849 if (HeavyFeared) sprintf(buf, "stricken with very strong fear");
8850 else sprintf(buf, "stricken with fear");
8851 sprintf(eos(buf), " (%ld)", HFeared);
8852 dump(youwere, buf);
8854 if (Numbed) {
8855 if (HeavyNumbed) sprintf(buf, "badly numbed");
8856 else sprintf(buf, "numbed");
8857 sprintf(eos(buf), " (%ld)", HNumbed);
8858 dump(youwere, buf);
8860 if (Frozen) {
8861 if (HeavyFrozen) sprintf(buf, "frozen rigid and solid");
8862 else sprintf(buf, "frozen solid");
8863 sprintf(eos(buf), " (%ld)", HFrozen);
8864 dump(youwere, buf);
8867 if (u.hanguppenalty) {
8868 sprintf(buf, "temporarily slower because you tried to hangup cheat");
8869 sprintf(eos(buf), " (%d)", u.hanguppenalty);
8870 dump(youwere, buf);
8873 if (Burned) {
8874 if (HeavyBurned) sprintf(buf, "badly burned");
8875 else sprintf(buf, "burned");
8876 sprintf(eos(buf), " (%ld)", HBurned);
8877 dump(youwere, buf);
8880 if (Dimmed) {
8881 if (HeavyDimmed) sprintf(buf, "badly dimmed");
8882 else sprintf(buf, "dimmed");
8883 sprintf(eos(buf), " (%ld)", HDimmed);
8884 dump(youwere, buf);
8887 if (Punished) dump(youwere, "punished");
8889 if (u.totter) dump(youhad, "inverted directional keys");
8891 if (sengr_at("Elbereth", u.ux, u.uy) ) dump(youwere, "standing on an active Elbereth engraving");
8893 if (Stoned) {
8894 sprintf(buf, "turning to stone");
8895 sprintf(eos(buf), " (%ld)", Stoned);
8896 dump(youwere, buf);
8898 if (Slimed) {
8899 sprintf(buf, "turning into slime");
8900 sprintf(eos(buf), " (%ld)", Slimed);
8901 dump(youwere, buf);
8903 if (Strangled) {
8904 sprintf(buf, (u.uburied) ? "buried" : "being strangled");
8905 sprintf(eos(buf), " (%ld)", Strangled);
8906 dump(youwere, buf);
8908 if (PlayerBleeds) {
8909 sprintf(buf, "bleeding");
8910 sprintf(eos(buf), " (%ld)", PlayerBleeds);
8911 dump(youwere, buf);
8913 if (Prem_death) {
8914 sprintf(buf, "going to die prematurely");
8915 dump(youwere, buf);
8918 if (IsGlib) {
8919 sprintf(buf, "slippery %s", makeplural(body_part(FINGER)));
8920 sprintf(eos(buf), " (%ld)", Glib);
8921 dump(youhad, buf);
8924 if (MenuBug || u.uprops[MENU_LOST].extrinsic || have_menubugstone()) {
8925 sprintf(buf, "the menu bug.");
8926 sprintf(eos(buf), " (%ld)", MenuBug);
8927 dump(youhad, buf);
8929 if (SpeedBug || u.uprops[SPEED_BUG].extrinsic || have_speedbugstone()) {
8930 sprintf(buf, "the speed bug.");
8931 sprintf(eos(buf), " (%ld)", SpeedBug);
8932 dump(youhad, buf);
8934 if (Superscroller || u.uprops[SUPERSCROLLER_ACTIVE].extrinsic || have_superscrollerstone()) {
8935 sprintf(buf, "the superscroller.");
8936 sprintf(eos(buf), " (%ld)", Superscroller);
8937 dump(youhad, buf);
8939 if (RMBLoss || u.uprops[RMB_LOST].extrinsic || have_rmbstone()) {
8940 sprintf(buf, "the following problem: Your right mouse button failed.");
8941 sprintf(eos(buf), " (%ld)", RMBLoss);
8942 dump(youhad, buf);
8944 if (DisplayLoss || u.uprops[DISPLAY_LOST].extrinsic || have_displaystone()) {
8945 sprintf(buf, "the following problem: Your display failed.");
8946 sprintf(eos(buf), " (%ld)", DisplayLoss);
8947 dump(youhad, buf);
8949 if (SpellLoss || u.uprops[SPELLS_LOST].extrinsic || have_spelllossstone()) {
8950 sprintf(buf, "the following problem: You lost spells.");
8951 sprintf(eos(buf), " (%ld)", SpellLoss);
8952 dump(youhad, buf);
8954 if (YellowSpells || u.uprops[YELLOW_SPELLS].extrinsic || have_yellowspellstone()) {
8955 sprintf(buf, "the following problem: Your spells became yellow.");
8956 sprintf(eos(buf), " (%ld)", YellowSpells);
8957 dump(youhad, buf);
8959 if (AutoDestruct || u.uprops[AUTO_DESTRUCT].extrinsic || have_autodestructstone()) {
8960 sprintf(buf, "the following problem: An auto destruct mechanism was initiated.");
8961 sprintf(eos(buf), " (%ld)", AutoDestruct);
8962 dump(youhad, buf);
8964 if (MemoryLoss || u.uprops[MEMORY_LOST].extrinsic || have_memorylossstone()) {
8965 sprintf(buf, "the following problem: There was low local memory.");
8966 sprintf(eos(buf), " (%ld)", MemoryLoss);
8967 dump(youhad, buf);
8969 if (InventoryLoss || u.uprops[INVENTORY_LOST].extrinsic || have_inventorylossstone()) {
8970 sprintf(buf, "the following problem: There was not enough memory to create an inventory window.");
8971 sprintf(eos(buf), " (%ld)", InventoryLoss);
8972 dump(youhad, buf);
8974 if (BlackNgWalls || u.uprops[BLACK_NG_WALLS].extrinsic || have_blackystone()) {
8975 sprintf(buf, "the following problem: Blacky and his NG walls were closing in.");
8976 sprintf(eos(buf), " (%ld)", BlackNgWalls);
8977 dump(youhad, buf);
8979 if (FreeHandLoss || u.uprops[FREE_HAND_LOST].extrinsic || have_freehandbugstone()) {
8980 sprintf(buf, "the following problem: Your free hand was less likely to be free.");
8981 sprintf(eos(buf), " (%ld)", FreeHandLoss);
8982 dump(youhad, buf);
8984 if (Unidentify || u.uprops[UNIDENTIFY].extrinsic || have_unidentifystone()) {
8985 sprintf(buf, "the following problem: Your possessions sometimes unidentified themselves.");
8986 sprintf(eos(buf), " (%ld)", Unidentify);
8987 dump(youhad, buf);
8989 if (Thirst || u.uprops[THIRST].extrinsic || have_thirststone()) {
8990 sprintf(buf, "a strong sense of thirst.");
8991 sprintf(eos(buf), " (%ld)", Thirst);
8992 dump(youhad, buf);
8994 if (LuckLoss || u.uprops[LUCK_LOSS].extrinsic || have_unluckystone()) {
8995 sprintf(buf, "the following problem: You were shitting out of luck (SOL).");
8996 sprintf(eos(buf), " (%ld)", LuckLoss);
8997 dump(youhad, buf);
8999 if (ShadesOfGrey || u.uprops[SHADES_OF_GREY].extrinsic || have_shadesofgreystone()) {
9000 sprintf(buf, "the following problem: Everything displayed in various shades of grey.");
9001 sprintf(eos(buf), " (%ld)", ShadesOfGrey);
9002 dump(youhad, buf);
9004 if (FaintActive || u.uprops[FAINT_ACTIVE].extrinsic || have_faintingstone()) {
9005 sprintf(buf, "the following problem: You randomly fainted.");
9006 sprintf(eos(buf), " (%ld)", FaintActive);
9007 dump(youhad, buf);
9009 if (Itemcursing || u.uprops[ITEMCURSING].extrinsic || have_cursingstone() || have_primecurse() ) {
9010 sprintf(buf, "the following problem: Your inventory gradually filled up with cursed items.");
9011 sprintf(eos(buf), " (%ld)", Itemcursing);
9012 dump(youhad, buf);
9014 if (have_morgothiancurse() ) {
9015 sprintf(buf, "afflicted by the Ancient Morgothian Curse.");
9016 dump(youwere, buf);
9018 if (have_topiylinencurse() ) {
9019 sprintf(buf, "afflicted by Topi Ylinen's Curse, a.k.a. the Ancient Foul Curse.");
9020 dump(youwere, buf);
9022 if (have_blackbreathcurse() ) {
9023 sprintf(buf, "filled with the Black Breath.");
9024 dump(youwere, buf);
9027 if (DifficultyIncreased || u.uprops[DIFFICULTY_INCREASED].extrinsic || have_difficultystone()) {
9028 sprintf(buf, "the following problem: The difficulty of the game was arbitrarily increased.");
9029 sprintf(eos(buf), " (%ld)", DifficultyIncreased);
9030 dump(youhad, buf);
9032 if (Deafness || u.uprops[DEAFNESS].extrinsic || have_deafnessstone()) {
9033 sprintf(buf, "a hearing break.");
9034 sprintf(eos(buf), " (%ld)", Deafness);
9035 dump(youhad, buf);
9037 if (CasterProblem || u.uprops[CASTER_PROBLEM].extrinsic || have_antimagicstone()) {
9038 sprintf(buf, "blood mana.");
9039 sprintf(eos(buf), " (%ld)", CasterProblem);
9040 dump(youhad, buf);
9042 if (WeaknessProblem || u.uprops[WEAKNESS_PROBLEM].extrinsic || have_weaknessstone()) {
9043 sprintf(buf, "the following problem: Being weak from hunger damaged your health.");
9044 sprintf(eos(buf), " (%ld)", WeaknessProblem);
9045 dump(youhad, buf);
9047 if (RotThirteen || u.uprops[ROT_THIRTEEN].extrinsic || have_rotthirteenstone()) {
9048 sprintf(buf, "the following problem: A rot13 cypher had been activated for lowercase letters.");
9049 sprintf(eos(buf), " (%ld)", RotThirteen);
9050 dump(youhad, buf);
9052 if (BishopGridbug || u.uprops[BISHOP_GRIDBUG].extrinsic || have_bishopstone()) {
9053 sprintf(buf, "the following problem: You could not move diagonally.");
9054 sprintf(eos(buf), " (%ld)", BishopGridbug);
9055 dump(youhad, buf);
9057 if (ConfusionProblem || u.uprops[CONFUSION_PROBLEM].extrinsic || have_confusionstone()) {
9058 sprintf(buf, "a confusing problem.");
9059 sprintf(eos(buf), " (%ld)", ConfusionProblem);
9060 dump(youhad, buf);
9062 if (NoDropProblem || u.uprops[DROP_BUG].extrinsic || have_dropbugstone()) {
9063 sprintf(buf, "the following problem: You could not drop items.");
9064 sprintf(eos(buf), " (%ld)", NoDropProblem);
9065 dump(youhad, buf);
9067 if (DSTWProblem || u.uprops[DSTW_BUG].extrinsic || have_dstwstone()) {
9068 sprintf(buf, "the following problem: Your potions didn't always work.");
9069 sprintf(eos(buf), " (%ld)", DSTWProblem);
9070 dump(youhad, buf);
9072 if (StatusTrapProblem || u.uprops[STATUS_FAILURE].extrinsic || have_statusstone()) {
9073 sprintf(buf, "the following problem: You could not cure status effects.");
9074 sprintf(eos(buf), " (%ld)", StatusTrapProblem);
9075 dump(youhad, buf);
9077 if (AlignmentProblem || u.uprops[ALIGNMENT_FAILURE].extrinsic || have_alignmentstone()) {
9078 sprintf(buf, "the following problem: Your maximum alignment decreased over time.");
9079 sprintf(eos(buf), " (%ld)", AlignmentProblem);
9080 dump(youhad, buf);
9082 if (StairsProblem || u.uprops[STAIRSTRAP].extrinsic || have_stairstrapstone()) {
9083 sprintf(buf, "the following problem: Stairs were always trapped.");
9084 sprintf(eos(buf), " (%ld)", StairsProblem);
9085 dump(youhad, buf);
9087 if (UninformationProblem || u.uprops[UNINFORMATION].extrinsic || have_uninformationstone()) {
9088 sprintf(buf, "the following problem: The game gave insufficient amounts of information.");
9089 sprintf(eos(buf), " (%ld)", UninformationProblem);
9090 dump(youhad, buf);
9092 if (ReallyBadTrapEffect || u.uprops[REALLY_BAD_TRAP_EFFECT].extrinsic || have_reallybadstone()) {
9093 sprintf(buf, "the following problem: Bad effects become really bad effects.");
9094 sprintf(eos(buf), " (%ld)", ReallyBadTrapEffect);
9095 dump(youhad, buf);
9097 if (CovidTrapEffect || u.uprops[COVID_TRAP_EFFECT].extrinsic || have_covidstone()) {
9098 sprintf(buf, "a chronical covid-19 disease.");
9099 sprintf(eos(buf), " (%ld)", CovidTrapEffect);
9100 dump(youhad, buf);
9102 if (ArtiblastEffect || u.uprops[ARTIBLAST_EFFECT].extrinsic || have_blaststone()) {
9103 sprintf(buf, "the following problem: Artifacts always blast you.");
9104 sprintf(eos(buf), " (%ld)", ArtiblastEffect);
9105 dump(youhad, buf);
9107 if (TimerunBug || u.uprops[TIMERUN_BUG].extrinsic || have_timerunstone()) {
9108 sprintf(buf, "the following problem: All actions take turns.");
9109 sprintf(eos(buf), " (%ld)", TimerunBug);
9110 dump(youhad, buf);
9112 if (MulchBug || u.uprops[MULCH_BUG].extrinsic || have_mulchstone()) {
9113 sprintf(buf, "the following problem: Your ranged weapon ammo mulches every time.");
9114 sprintf(eos(buf), " (%ld)", MulchBug);
9115 dump(youhad, buf);
9117 if (SpellCooldownBug || u.uprops[SPELL_COOLDOWN_BUG].extrinsic || have_spellcooldownstone()) {
9118 sprintf(buf, "the following problem: Whenever you cast a spell, you have to wait for a couple turns until you can cast another.");
9119 sprintf(eos(buf), " (%ld)", SpellCooldownBug);
9120 dump(youhad, buf);
9122 if (HaveAPinBug || u.uprops[HAVE_A_PIN_BUG].extrinsic || have_haveapinstone()) {
9123 sprintf(buf, "the following problem: Your HP and Pw cannot regenerate beyond the cap of the other.");
9124 sprintf(eos(buf), " (%ld)", HaveAPinBug);
9125 dump(youhad, buf);
9127 if (TurbodullBug || u.uprops[TURBODULL_BUG].extrinsic || have_turbodullstone()) {
9128 sprintf(buf, "the following problem: Your equipment dulls much more quickly.");
9129 sprintf(eos(buf), " (%ld)", TurbodullBug);
9130 dump(youhad, buf);
9132 if (InaccuracyBug || u.uprops[INACCURACY_BUG].extrinsic || have_inaccuracystone()) {
9133 sprintf(buf, "the following problem: Your ray wands and spells, thrown potions and similar stuff hit the enemy much less often.");
9134 sprintf(eos(buf), " (%ld)", InaccuracyBug);
9135 dump(youhad, buf);
9137 if (InventorySizeBug || u.uprops[INVENTORY_SIZE_BUG].extrinsic || have_inventorysizestone()) {
9138 sprintf(buf, "the following problem: You cannot have more than a certain amount of items in your open inventory.");
9139 sprintf(eos(buf), " (%ld)", InventorySizeBug);
9140 dump(youhad, buf);
9142 if (CostlyFailureBug || u.uprops[COSTLY_FAILURE_BUG].extrinsic || have_costlyfailurestone()) {
9143 sprintf(buf, "the following problem: Failing to cast a spell uses up the full amount of mana.");
9144 sprintf(eos(buf), " (%ld)", CostlyFailureBug);
9145 dump(youhad, buf);
9147 if (ReddamBug || u.uprops[REDDAM_BUG].extrinsic || have_reddamstone()) {
9148 sprintf(buf, "the following problem: Your damage has been reduced by %d.", u.reddamamount);
9149 sprintf(eos(buf), " (%ld)", ReddamBug);
9150 dump(youhad, buf);
9152 if (RedincBug || u.uprops[REDINC_BUG].extrinsic || have_redincstone()) {
9153 sprintf(buf, "the following problem: Your to-hit has been reduced by %d.", u.redincamount);
9154 sprintf(eos(buf), " (%ld)", RedincBug);
9155 dump(youhad, buf);
9157 if (MonsterMultishotBug || u.uprops[MONSTER_MULTISHOT_EFFECT].extrinsic || have_monstermultishotstone()) {
9158 sprintf(buf, "the following problem: Monsters can multishot their ranged weapons.");
9159 sprintf(eos(buf), " (%ld)", MonsterMultishotBug);
9160 dump(youhad, buf);
9162 if (MeanBurdenEffect || u.uprops[MEAN_BURDEN_EFFECT].extrinsic || have_meanburdenstone()) {
9163 sprintf(buf, "the following problem: You're always at least burdened.");
9164 sprintf(eos(buf), " (%ld)", MeanBurdenEffect);
9165 dump(youhad, buf);
9167 if (CarrcapEffect || u.uprops[CARRCAP_EFFECT].extrinsic || have_carrcapstone()) {
9168 sprintf(buf, "the following problem: Your carry capacity is shit.");
9169 sprintf(eos(buf), " (%ld)", CarrcapEffect);
9170 dump(youhad, buf);
9172 if (UmengEffect || u.uprops[UMENG_EFFECT].extrinsic || have_umengstone()) {
9173 sprintf(buf, "the following problem: The top line always says 'umeng'.");
9174 sprintf(eos(buf), " (%ld)", UmengEffect);
9175 dump(youhad, buf);
9177 if (AefdeEffect || u.uprops[AEFDE_EFFECT].extrinsic || have_aefdestone()) {
9178 sprintf(buf, "the following problem: Some chaotic dudes are trying to mess up the dungeon.");
9179 sprintf(eos(buf), " (%ld)", AefdeEffect);
9180 dump(youhad, buf);
9182 if (EpviEffect || u.uprops[EPVI_EFFECT].extrinsic || have_epvistone()) {
9183 sprintf(buf, "the following problem: Items whose level is higher than yours are unusable.");
9184 sprintf(eos(buf), " (%ld)", EpviEffect);
9185 dump(youhad, buf);
9187 if (FuckfuckfuckEffect || u.uprops[FUCKFUCKFUCK_EFFECT].extrinsic || have_fuckfuckfuckstone()) {
9188 sprintf(buf, "the following problem: Items lose their BUC identification like they do in the variant that calls itself 3.7 and don't stack properly.");
9189 sprintf(eos(buf), " (%ld)", FuckfuckfuckEffect);
9190 dump(youhad, buf);
9192 if (OptionBugEffect || u.uprops[OPTION_BUG_EFFECT].extrinsic || have_optionstone()) {
9193 sprintf(buf, "the following problem: Your options may randomly change to other values.");
9194 sprintf(eos(buf), " (%ld)", OptionBugEffect);
9195 dump(youhad, buf);
9197 if (MiscolorEffect || u.uprops[MISCOLOR_EFFECT].extrinsic || have_miscolorstone()) {
9198 sprintf(buf, "the following problem: The dungeon is miscolored.");
9199 sprintf(eos(buf), " (%ld)", MiscolorEffect);
9200 dump(youhad, buf);
9202 if (OneRainbowEffect || u.uprops[ONE_RAINBOW_EFFECT].extrinsic || have_onerainbowstone()) {
9203 sprintf(buf, "the following problem: One specific color becomes fleecy.");
9204 sprintf(eos(buf), " (%ld)", OneRainbowEffect);
9205 dump(youhad, buf);
9207 if (ColorshiftEffect || u.uprops[COLORSHIFT_EFFECT].extrinsic || have_colorshiftstone()) {
9208 sprintf(buf, "the following problem: Matching colors will change back and forth.");
9209 sprintf(eos(buf), " (%ld)", ColorshiftEffect);
9210 dump(youhad, buf);
9212 if (TopLineEffect || u.uprops[TOP_LINE_EFFECT].extrinsic || have_toplinestone()) {
9213 sprintf(buf, "the following problem: The top line displays fleecy-colored messages, which is a lot of fun.");
9214 sprintf(eos(buf), " (%ld)", TopLineEffect);
9215 dump(youhad, buf);
9217 if (CapsBugEffect || u.uprops[CAPS_BUG_EFFECT].extrinsic || have_capsstone()) {
9218 sprintf(buf, "the following problem: Lower-case monsters appear as upper-case ones.");
9219 sprintf(eos(buf), " (%ld)", CapsBugEffect);
9220 dump(youhad, buf);
9222 if (UnKnowledgeEffect || u.uprops[UN_KNOWLEDGE_EFFECT].extrinsic || have_unknowledgestone()) {
9223 sprintf(buf, "the following problem: Spellbooks and tools must be identified if you want to be able to use them.");
9224 sprintf(eos(buf), " (%ld)", UnKnowledgeEffect);
9225 dump(youhad, buf);
9227 if (DarkhanceEffect || u.uprops[DARKHANCE_EFFECT].extrinsic || have_darkhancestone()) {
9228 sprintf(buf, "the following problem: The skill enhance screen is dark.");
9229 sprintf(eos(buf), " (%ld)", DarkhanceEffect);
9230 dump(youhad, buf);
9232 if (DschueueuetEffect || u.uprops[DSCHUEUEUET_EFFECT].extrinsic || have_dschueueuetstone()) {
9233 sprintf(buf, "the following problem: Down staircases may take you several levels deeper.");
9234 sprintf(eos(buf), " (%ld)", DschueueuetEffect);
9235 dump(youhad, buf);
9237 if (NopeskillEffect || u.uprops[NOPESKILL_EFFECT].extrinsic || have_nopeskillstone()) {
9238 sprintf(buf, "the following problem: Enhancing a skill drains it, which may result in you not being able to enhance the skill in question.");
9239 sprintf(eos(buf), " (%ld)", NopeskillEffect);
9240 dump(youhad, buf);
9242 if (RealLieEffect || u.uprops[REAL_LIE_EFFECT].extrinsic || have_realliestone()) {
9243 sprintf(buf, "the following problem: The pokedex tells lies to you that may become real.");
9244 sprintf(eos(buf), " (%ld)", RealLieEffect);
9245 dump(youhad, buf);
9247 if (EscapePastEffect || u.uprops[ESCAPE_PAST_EFFECT].extrinsic || have_escapepaststone()) {
9248 sprintf(buf, "the following problem: Using the ESC key to clear --More-- prompts causes bad effects.");
9249 sprintf(eos(buf), " (%ld)", EscapePastEffect);
9250 dump(youhad, buf);
9252 if (PethateEffect || u.uprops[PETHATE_EFFECT].extrinsic || have_pethatestone()) {
9253 sprintf(buf, "the following problem: Monsters will constantly try to kill your pets.");
9254 sprintf(eos(buf), " (%ld)", PethateEffect);
9255 dump(youhad, buf);
9257 if (PetLashoutEffect || u.uprops[PET_LASHOUT_EFFECT].extrinsic || have_petlashoutstone()) {
9258 sprintf(buf, "the following problem: Your pets will infight.");
9259 sprintf(eos(buf), " (%ld)", PetLashoutEffect);
9260 dump(youhad, buf);
9262 if (PetstarveEffect || u.uprops[PETSTARVE_EFFECT].extrinsic || have_petstarvestone()) {
9263 sprintf(buf, "the following problem: Your pets are much more likely to starve.");
9264 sprintf(eos(buf), " (%ld)", PetstarveEffect);
9265 dump(youhad, buf);
9267 if (PetscrewEffect || u.uprops[PETSCREW_EFFECT].extrinsic || have_petscrewstone()) {
9268 sprintf(buf, "the following problem: Your pets are subjected to random bad effects.");
9269 sprintf(eos(buf), " (%ld)", PetscrewEffect);
9270 dump(youhad, buf);
9272 if (TechLossEffect || u.uprops[TECH_LOSS_EFFECT].extrinsic || have_techlossstone()) {
9273 sprintf(buf, "the following problem: You lost techniques.");
9274 sprintf(eos(buf), " (%ld)", TechLossEffect);
9275 dump(youhad, buf);
9277 if (ProoflossEffect || u.uprops[PROOFLOSS_EFFECT].extrinsic || have_prooflossstone()) {
9278 sprintf(buf, "the following problem: Your erosionproof equipment may spontaneously un-erosionproof itself.");
9279 sprintf(eos(buf), " (%ld)", ProoflossEffect);
9280 dump(youhad, buf);
9282 if (UnInvisEffect || u.uprops[UN_INVIS_EFFECT].extrinsic || have_uninvisstone()) {
9283 sprintf(buf, "the following problem: Your invisible equipment may spontaneously become visible.");
9284 sprintf(eos(buf), " (%ld)", UnInvisEffect);
9285 dump(youhad, buf);
9287 if (DetectationEffect || u.uprops[DETECTATION_EFFECT].extrinsic || have_detectationstone()) {
9288 sprintf(buf, "the following problem: Many ways of detecting your surroundings do no longer work.");
9289 sprintf(eos(buf), " (%ld)", DetectationEffect);
9290 dump(youhad, buf);
9292 if (RepeatingNastycurseEffect || u.uprops[REPEATING_NASTYCURSE_EFFECT].extrinsic || have_nastycursestone()) {
9293 sprintf(buf, "the following problem: Your armor pieces will receive nasty trap enchantments over time.");
9294 sprintf(eos(buf), " (%ld)", RepeatingNastycurseEffect);
9295 dump(youhad, buf);
9297 if (GiantExplorerBug || u.uprops[GIANT_EXPLORER].extrinsic || have_giantexplorerstone()) {
9298 sprintf(buf, "the following problem: You can explore a huge area and trigger all nasty traps in that area.");
9299 sprintf(eos(buf), " (%ld)", GiantExplorerBug);
9300 dump(youhad, buf);
9302 if (YawmBug || u.uprops[YAWM_EFFECT].extrinsic || have_yawmstone()) {
9303 sprintf(buf, "the following problem: You see a smaller area of the level, and the longer you don't trigger any traps, the smaller it becomes.");
9304 sprintf(eos(buf), " (%ld)", YawmBug);
9305 sprintf(eos(buf), " (last trigger %d)", u.yawmtime);
9306 dump(youhad, buf);
9308 if (TrapwarpingBug || u.uprops[TRAPWARPING].extrinsic || have_trapwarpstone()) {
9309 sprintf(buf, "the following problem: Traps sometimes turn into other traps.");
9310 sprintf(eos(buf), " (%ld)", TrapwarpingBug);
9311 dump(youhad, buf);
9313 if (EnthuEffect || u.uprops[ENTHU_EFFECT].extrinsic || have_bossgodstone()) {
9314 sprintf(buf, "the following problem: All hostile monsters can cast all spells.");
9315 sprintf(eos(buf), " (%ld)", EnthuEffect);
9316 dump(youhad, buf);
9318 if (MikraEffect || u.uprops[MIKRA_EFFECT].extrinsic || have_ubergodstone()) {
9319 sprintf(buf, "the following problem: Monsters may create farting webs underneath you.");
9320 sprintf(eos(buf), " (%ld)", MikraEffect);
9321 dump(youhad, buf);
9323 if (GotsTooGoodEffect || u.uprops[GOTS_TOO_GOOD_EFFECT].extrinsic || have_toogoodgostone()) {
9324 sprintf(buf, "the following problem: If you have a lot of health relative to your maximum, your speed is lower.");
9325 sprintf(eos(buf), " (%ld)", GotsTooGoodEffect);
9326 dump(youhad, buf);
9328 if (NoFunWallsEffect || u.uprops[NO_FUN_WALLS].extrinsic || have_funwallstone()) {
9329 sprintf(buf, "the following problem: Walking into walls causes the wall to fart at you.");
9330 sprintf(eos(buf), " (%ld)", NoFunWallsEffect);
9331 dump(youhad, buf);
9333 if (CradleChaosEffect || u.uprops[CRADLE_CHAOS_EFFECT].extrinsic || have_chaoscradlestone()) {
9334 sprintf(buf, "the following problem: Newly spawned monsters have their levels increased to match the monster difficulty.");
9335 sprintf(eos(buf), " (%ld)", CradleChaosEffect);
9336 dump(youhad, buf);
9338 if (TezEffect || u.uprops[TEZ_EFFECT].extrinsic || have_tezstone()) {
9339 sprintf(buf, "the following problem: Squares with monsters on them are no longer see-through.");
9340 sprintf(eos(buf), " (%ld)", TezEffect);
9341 dump(youhad, buf);
9343 if (KillerRoomEffect || u.uprops[KILLER_ROOM_EFFECT].extrinsic || have_killerroomstone()) {
9344 sprintf(buf, "the following problem: Faux killer rooms spawn over time.");
9345 sprintf(eos(buf), " (%ld)", KillerRoomEffect);
9346 dump(youhad, buf);
9349 if (SanityTrebleEffect || u.uprops[SANITY_TREBLE_EFFECT].extrinsic || have_sanitytreblestone()) {
9350 sprintf(buf, "the following problem: Sanity effects will increase your sanity by a much higher amount than usual.");
9351 sprintf(eos(buf), " (%ld)", SanityTrebleEffect);
9352 dump(youhad, buf);
9355 if (StatDecreaseBug || u.uprops[STAT_DECREASE_BUG].extrinsic || have_statdecreasestone()) {
9356 sprintf(buf, "the following problem: The soft cap for your attributes is much lower.");
9357 sprintf(eos(buf), " (%ld)", StatDecreaseBug);
9358 dump(youhad, buf);
9361 if (SimeoutBug || u.uprops[SIMEOUT_BUG].extrinsic || have_simeoutstone()) {
9362 sprintf(buf, "the following problem: Your sanity slowly increases over time.");
9363 sprintf(eos(buf), " (%ld)", SimeoutBug);
9364 dump(youhad, buf);
9367 if (BadPartBug || u.uprops[BAD_PARTS].extrinsic || have_badpartstone()) {
9368 sprintf(buf, "in the bad part.");
9369 sprintf(eos(buf), " (%ld)", BadPartBug);
9370 dump(youwere, buf);
9373 if (CompletelyBadPartBug || u.uprops[COMPLETELY_BAD_PARTS].extrinsic || have_completelybadpartstone()) {
9374 sprintf(buf, "in the completely bad part.");
9375 sprintf(eos(buf), " (%ld)", CompletelyBadPartBug);
9376 dump(youwere, buf);
9379 if (EvilVariantActive || u.uprops[EVIL_VARIANT_ACTIVE].extrinsic || have_evilvariantstone()) {
9380 sprintf(buf, "the following problem: You're forced to play the evil variant.");
9381 sprintf(eos(buf), " (%ld)", EvilVariantActive);
9382 dump(youhad, buf);
9385 if (OrangeSpells || u.uprops[ORANGE_SPELLS].extrinsic || have_orangespellstone()) {
9386 sprintf(buf, "the following problem: Your spells became orange.");
9387 sprintf(eos(buf), " (%ld)", OrangeSpells);
9388 dump(youhad, buf);
9391 if (VioletSpells || u.uprops[VIOLET_SPELLS].extrinsic || have_violetspellstone()) {
9392 sprintf(buf, "the following problem: Your spells became violet.");
9393 sprintf(eos(buf), " (%ld)", VioletSpells);
9394 dump(youhad, buf);
9397 if (LongingEffect || u.uprops[LONGING_EFFECT].extrinsic || have_longingstone()) {
9398 sprintf(buf, "the following problem: The game bombards you with 'sexy' messages.");
9399 sprintf(eos(buf), " (%ld)", LongingEffect);
9400 dump(youhad, buf);
9403 if (CursedParts || u.uprops[CURSED_PARTS].extrinsic || have_cursedpartstone()) {
9404 sprintf(buf, "the following problem: Sometimes you're forced to wear cursed equipment.");
9405 sprintf(eos(buf), " (%ld)", CursedParts);
9406 dump(youhad, buf);
9409 if (Quaversal || u.uprops[QUAVERSAL].extrinsic || have_quaversalstone()) {
9410 sprintf(buf, "the following problem: Unless you're standing on specific tiles, the entire screen is black.");
9411 sprintf(eos(buf), " (%ld)", Quaversal);
9412 dump(youhad, buf);
9415 if (AppearanceShuffling || u.uprops[APPEARANCE_SHUFFLING].extrinsic || have_appearanceshufflingstone()) {
9416 sprintf(buf, "the following problem: The randomized appearances of items are occasionally shuffled.");
9417 sprintf(eos(buf), " (%ld)", AppearanceShuffling);
9418 dump(youhad, buf);
9421 if (BrownSpells || u.uprops[BROWN_SPELLS].extrinsic || have_brownspellstone()) {
9422 sprintf(buf, "the following problem: Your spells became brown.");
9423 sprintf(eos(buf), " (%ld)", BrownSpells);
9424 dump(youhad, buf);
9427 if (Choicelessness || u.uprops[CHOICELESSNESS].extrinsic || have_choicelessstone()) {
9428 sprintf(buf, "the following problem: Direction prompts often don't allow you to select anything.");
9429 sprintf(eos(buf), " (%ld)", Choicelessness);
9430 dump(youhad, buf);
9433 if (Goldspells || u.uprops[GOLDSPELLS].extrinsic || have_goldspellstone()) {
9434 sprintf(buf, "the following problem: You often can't choose which spell you want to cast.");
9435 sprintf(eos(buf), " (%ld)", Goldspells);
9436 dump(youhad, buf);
9439 if (Deprovement || u.uprops[DEPROVEMENT].extrinsic || have_deprovementstone()) {
9440 sprintf(buf, "the following problem: Leveling up no longer increases your maximum HP and Pw.");
9441 sprintf(eos(buf), " (%ld)", Deprovement);
9442 dump(youhad, buf);
9445 if (InitializationFail || u.uprops[INITIALIZATION_FAIL].extrinsic || have_initializationstone()) {
9446 sprintf(buf, "the following problem: Prompts that let you choose an item will not appear.");
9447 sprintf(eos(buf), " (%ld)", InitializationFail);
9448 dump(youhad, buf);
9451 if (GushlushEffect || u.uprops[GUSHLUSH].extrinsic || have_gushlushstone()) {
9452 sprintf(buf, "the following problem: To-hit, spellcasting chances and some other stuff always assume that you're experience level 1.");
9453 sprintf(eos(buf), " (%ld)", GushlushEffect);
9454 dump(youhad, buf);
9457 if (SoiltypeEffect || u.uprops[SOILTYPE].extrinsic || have_soiltypestone()) {
9458 sprintf(buf, "the following problem: You trigger ground-based traps even while flying or levitating.");
9459 sprintf(eos(buf), " (%ld)", SoiltypeEffect);
9460 dump(youhad, buf);
9463 if (DangerousTerrains || u.uprops[DANGEROUS_TERRAINS].extrinsic || have_dangerousterrainstone()) {
9464 sprintf(buf, "the following problem: Standing next to dangerous terrain may confuse or stun you with no warning.");
9465 sprintf(eos(buf), " (%ld)", DangerousTerrains);
9466 dump(youhad, buf);
9469 if (FalloutEffect || u.uprops[FALLOUT_EFFECT].extrinsic || have_falloutstone()) {
9470 sprintf(buf, "the following problem: Your contamination increases over time.");
9471 sprintf(eos(buf), " (%ld)", FalloutEffect);
9472 dump(youhad, buf);
9475 if (MojibakeEffect || u.uprops[MOJIBAKE].extrinsic || have_mojibakestone()) {
9476 sprintf(buf, "the following problem: Some glyphs are randomized.");
9477 sprintf(eos(buf), " (%ld)", MojibakeEffect);
9478 dump(youhad, buf);
9481 if (GravationEffect || u.uprops[GRAVATION].extrinsic || have_gravationstone()) {
9482 sprintf(buf, "the following problem: Random monster spawns use aggravate monster rules.");
9483 sprintf(eos(buf), " (%ld)", GravationEffect);
9484 dump(youhad, buf);
9487 if (UncalledEffect || u.uprops[UNCALLED_EFFECT].extrinsic || have_uncalledstone()) {
9488 sprintf(buf, "the following problem: You can't give names to items or monsters.");
9489 sprintf(eos(buf), " (%ld)", UncalledEffect);
9490 dump(youhad, buf);
9493 if (ExplodingDiceEffect || u.uprops[EXPLODING_DICE].extrinsic || have_explodingdicestone()) {
9494 sprintf(buf, "the following problem: Monster attacks use exploding dice for damage calculations.");
9495 sprintf(eos(buf), " (%ld)", ExplodingDiceEffect);
9496 dump(youhad, buf);
9499 if (PermacurseEffect || u.uprops[PERMACURSE_EFFECT].extrinsic || have_permacursestone()) {
9500 sprintf(buf, "the following problem: Many conventional methods of curse removal no longer work.");
9501 sprintf(eos(buf), " (%ld)", PermacurseEffect);
9502 dump(youhad, buf);
9505 if (ShroudedIdentity || u.uprops[SHROUDED_IDENTITY].extrinsic || have_shroudedidentitystone()) {
9506 sprintf(buf, "the following problem: Identifying items is much harder.");
9507 sprintf(eos(buf), " (%ld)", ShroudedIdentity);
9508 dump(youhad, buf);
9511 if (FeelerGauges || u.uprops[FEELER_GAUGES].extrinsic || have_feelergaugesstone()) {
9512 sprintf(buf, "the following problem: Monsters always know where you are and come straight for you.");
9513 sprintf(eos(buf), " (%ld)", FeelerGauges);
9514 dump(youhad, buf);
9517 if (LongScrewup || u.uprops[LONG_SCREWUP].extrinsic || have_longscrewupstone()) {
9518 sprintf(buf, "the following problem: Triggering a nasty trap causes the effect to last for a really long time.");
9519 sprintf(eos(buf), " (%ld)", LongScrewup);
9520 dump(youhad, buf);
9523 if (WingYellowChange || u.uprops[WING_YELLOW_GLYPHS].extrinsic || have_wingyellowstone()) {
9524 sprintf(buf, "the following problem: You're forced to play with a different tileset.");
9525 sprintf(eos(buf), " (%ld)", WingYellowChange);
9526 dump(youhad, buf);
9529 if (LifeSavingBug || u.uprops[LIFE_SAVING_BUG].extrinsic || have_lifesavingstone()) {
9530 sprintf(buf, "the following problem: Monsters occasionally lifesave when killed.");
9531 sprintf(eos(buf), " (%ld)", LifeSavingBug);
9532 dump(youhad, buf);
9535 if (CurseuseEffect || u.uprops[CURSEUSE_EFFECT].extrinsic || have_curseusestone()) {
9536 sprintf(buf, "the following problem: Any scroll, potion, spellbook, wand or tool you use automatically becomes cursed.");
9537 sprintf(eos(buf), " (%ld)", CurseuseEffect);
9538 dump(youhad, buf);
9541 if (CutNutritionEffect || u.uprops[CUT_NUTRITION].extrinsic || have_cutnutritionstone()) {
9542 sprintf(buf, "the following problem: You gain much less nutrition than usual.");
9543 sprintf(eos(buf), " (%ld)", CutNutritionEffect);
9544 dump(youhad, buf);
9547 if (SkillLossEffect || u.uprops[SKILL_LOSS_EFFECT].extrinsic || have_skilllossstone()) {
9548 sprintf(buf, "the following problem: Your skills will gradually lose training.");
9549 sprintf(eos(buf), " (%ld)", SkillLossEffect);
9550 dump(youhad, buf);
9553 if (AutopilotEffect || u.uprops[AUTOPILOT_EFFECT].extrinsic || have_autopilotstone()) {
9554 sprintf(buf, "the following problem: You're on autopilot.");
9555 sprintf(eos(buf), " (%ld)", AutopilotEffect);
9556 dump(youhad, buf);
9559 if (MysteriousForceActive || u.uprops[MYSTERIOUS_FORCE_EFFECT].extrinsic || have_forcestone()) {
9560 sprintf(buf, "the following problem: The dirty mysterious force full of dirt is back.");
9561 sprintf(eos(buf), " (%ld)", MysteriousForceActive);
9562 dump(youhad, buf);
9565 if (MonsterGlyphChange || u.uprops[MONSTER_GLYPH_BUG].extrinsic || have_monsterglyphstone()) {
9566 sprintf(buf, "the following problem: Monsters rapidly change glyphs.");
9567 sprintf(eos(buf), " (%ld)", MonsterGlyphChange);
9568 dump(youhad, buf);
9571 if (ChangingDirectives || u.uprops[CHANGING_DIRECTIVES].extrinsic || have_changingdirectivestone()) {
9572 sprintf(buf, "the following problem: The directives you've given to your pets will change randomly.");
9573 sprintf(eos(buf), " (%ld)", ChangingDirectives);
9574 dump(youhad, buf);
9577 if (ContainerKaboom || u.uprops[CONTAINER_KABOOM].extrinsic || have_containerkaboomstone()) {
9578 sprintf(buf, "the following problem: Opening a container causes bad stuff to happen.");
9579 sprintf(eos(buf), " (%ld)", ContainerKaboom);
9580 dump(youhad, buf);
9583 if (StealDegrading || u.uprops[STEAL_DEGRADING].extrinsic || have_stealdegradestone()) {
9584 sprintf(buf, "the following problem: If a monster steals your items, the stolen items are cursed and disenchanted.");
9585 sprintf(eos(buf), " (%ld)", StealDegrading);
9586 dump(youhad, buf);
9589 if (LeftInventoryBug || u.uprops[LEFT_INVENTORY].extrinsic || have_leftinventorystone()) {
9590 sprintf(buf, "the following problem: Items that leave your inventory will be unidentified.");
9591 sprintf(eos(buf), " (%ld)", LeftInventoryBug);
9592 dump(youhad, buf);
9595 if (FluctuatingSpeed || u.uprops[FLUCTUATING_SPEED].extrinsic || have_fluctuatingspeedstone()) {
9596 sprintf(buf, "the following problem: Your movement speed fluctuates from extremely fast to ultra slow.");
9597 sprintf(eos(buf), " (%ld)", FluctuatingSpeed);
9598 dump(youhad, buf);
9601 if (TarmuStrokingNora || u.uprops[TARMU_STROKING_NORA].extrinsic || have_tarmustrokingnorastone()) {
9602 sprintf(buf, "the following problem: Searching may cause a new trap to spawn.");
9603 sprintf(eos(buf), " (%ld)", TarmuStrokingNora);
9604 dump(youhad, buf);
9607 if (FailureEffects || u.uprops[FAILURE_EFFECTS].extrinsic || have_failurestone()) {
9608 sprintf(buf, "the following problem: The messages 'nothing happens' or 'never mind' become dangerous.");
9609 sprintf(eos(buf), " (%ld)", FailureEffects);
9610 dump(youhad, buf);
9613 if (BrightCyanSpells || u.uprops[BRIGHT_CYAN_SPELLS].extrinsic || have_brightcyanspellstone()) {
9614 sprintf(buf, "the following problem: Your spells became bright cyan.");
9615 sprintf(eos(buf), " (%ld)", BrightCyanSpells);
9616 dump(youhad, buf);
9619 if (FrequentationSpawns || u.uprops[FREQUENTATION_SPAWNS].extrinsic || have_frequentationspawnstone()) {
9620 sprintf(buf, "the following problem: Some monster trait is more common than usual.");
9621 sprintf(eos(buf), " (%ld)", FrequentationSpawns);
9622 sprintf(eos(buf), " (%s)", montraitname(u.frequentationtrait));
9623 dump(youhad, buf);
9626 if (PetAIScrewed || u.uprops[PET_AI_SCREWED].extrinsic || have_petaistone()) {
9627 sprintf(buf, "the following problem: Your pets refuse to follow you.");
9628 sprintf(eos(buf), " (%ld)", PetAIScrewed);
9629 dump(youhad, buf);
9632 if (SatanEffect || u.uprops[SATAN_EFFECT].extrinsic || have_satanstone()) {
9633 sprintf(buf, "the following problem: Satan made it so that changing dungeon levels paralyzes you for a turn.");
9634 sprintf(eos(buf), " (%ld)", SatanEffect);
9635 dump(youhad, buf);
9638 if (RememberanceEffect || u.uprops[REMEMBERANCE_EFFECT].extrinsic || have_rememberancestone()) {
9639 sprintf(buf, "the following problem: Spells with low spell memory are harder to cast.");
9640 sprintf(eos(buf), " (%ld)", RememberanceEffect);
9641 dump(youhad, buf);
9644 if (PokelieEffect || u.uprops[POKELIE_EFFECT].extrinsic || have_pokeliestone()) {
9645 sprintf(buf, "the following problem: The pokedex lies to you.");
9646 sprintf(eos(buf), " (%ld)", PokelieEffect);
9647 dump(youhad, buf);
9650 if (AlwaysAutopickup || u.uprops[AUTOPICKUP_ALWAYS].extrinsic || have_autopickupstone()) {
9651 sprintf(buf, "the following problem: You always pick up items.");
9652 sprintf(eos(buf), " (%ld)", AlwaysAutopickup);
9653 dump(youhad, buf);
9656 if (DywypiProblem || u.uprops[DYWYPI_PROBLEM].extrinsic || have_dywypistone()) {
9657 sprintf(buf, "the following problem: If you lifesave, you have to give the correct answer or you die anyway.");
9658 sprintf(eos(buf), " (%ld)", DywypiProblem);
9659 dump(youhad, buf);
9662 if (SilverSpells || u.uprops[SILVER_SPELLS].extrinsic || have_silverspellstone()) {
9663 sprintf(buf, "the following problem: Your spells became silver.");
9664 sprintf(eos(buf), " (%ld)", SilverSpells);
9665 dump(youhad, buf);
9668 if (MetalSpells || u.uprops[METAL_SPELLS].extrinsic || have_metalspellstone()) {
9669 sprintf(buf, "the following problem: Your spells became metal.");
9670 sprintf(eos(buf), " (%ld)", MetalSpells);
9671 dump(youhad, buf);
9674 if (PlatinumSpells || u.uprops[PLATINUM_SPELLS].extrinsic || have_platinumspellstone()) {
9675 sprintf(buf, "the following problem: Your spells became platinum.");
9676 sprintf(eos(buf), " (%ld)", PlatinumSpells);
9677 dump(youhad, buf);
9680 if (ManlerEffect || u.uprops[MANLER_EFFECT].extrinsic || have_manlerstone()) {
9681 sprintf(buf, "the following problem: The manler is chasing you.");
9682 sprintf(eos(buf), " (%ld)", ManlerEffect);
9683 dump(youhad, buf);
9686 if (DoorningEffect || u.uprops[DOORNING_EFFECT].extrinsic || have_doorningstone()) {
9687 sprintf(buf, "the following problem: Doors are dangerous.");
9688 sprintf(eos(buf), " (%ld)", DoorningEffect);
9689 dump(youhad, buf);
9692 if (NownsibleEffect || u.uprops[NOWNSIBLE_EFFECT].extrinsic || have_nownsiblestone()) {
9693 sprintf(buf, "the following problem: Triggering a trap makes it invisible.");
9694 sprintf(eos(buf), " (%ld)", NownsibleEffect);
9695 dump(youhad, buf);
9698 if (ElmStreetEffect || u.uprops[ELM_STREET_EFFECT].extrinsic || have_elmstreetstone()) {
9699 sprintf(buf, "the following problem: The game behaves as if it were Friday the 13th.");
9700 sprintf(eos(buf), " (%ld)", ElmStreetEffect);
9701 dump(youhad, buf);
9704 if (MonnoiseEffect || u.uprops[MONNOISE_EFFECT].extrinsic || have_monnoisestone()) {
9705 sprintf(buf, "the following problem: Monsters make noises.");
9706 sprintf(eos(buf), " (%ld)", MonnoiseEffect);
9707 dump(youhad, buf);
9710 if (RangCallEffect || u.uprops[RANG_CALL_EFFECT].extrinsic || have_rangcallstone()) {
9711 sprintf(buf, "the following problem: The presence of boss monsters increases your sanity.");
9712 sprintf(eos(buf), " (%ld)", RangCallEffect);
9713 dump(youhad, buf);
9716 if (RecurringSpellLoss || u.uprops[RECURRING_SPELL_LOSS].extrinsic || have_recurringspelllossstone()) {
9717 sprintf(buf, "the following problem: You repeatedly lose spell memory.");
9718 sprintf(eos(buf), " (%ld)", RecurringSpellLoss);
9719 dump(youhad, buf);
9722 if (AntitrainingEffect || u.uprops[ANTI_TRAINING_EFFECT].extrinsic || have_antitrainingstone()) {
9723 sprintf(buf, "the following problem: Your skill training is occasionally reduced.");
9724 sprintf(eos(buf), " (%ld)", AntitrainingEffect);
9725 dump(youhad, buf);
9728 if (TechoutBug || u.uprops[TECHOUT_BUG].extrinsic || have_techoutstone()) {
9729 sprintf(buf, "the following problem: Your techniques may sometimes be put on timeout.");
9730 sprintf(eos(buf), " (%ld)", TechoutBug);
9731 dump(youhad, buf);
9734 if (StatDecay || u.uprops[STAT_DECAY].extrinsic || have_statdecaystone()) {
9735 sprintf(buf, "the following problem: Your stats will gradually decay.");
9736 sprintf(eos(buf), " (%ld)", StatDecay);
9737 dump(youhad, buf);
9740 if (Movemork || u.uprops[MOVEMORKING].extrinsic || have_movemorkstone()) {
9741 sprintf(buf, "the following problem: Monsters are generated with movement energy.");
9742 sprintf(eos(buf), " (%ld)", Movemork);
9743 dump(youhad, buf);
9746 if (LootcutBug || u.uprops[LOOTCUT_BUG].extrinsic || have_lootcutstone()) {
9747 sprintf(buf, "the following problem: Monsters delete their musable items when killed.");
9748 sprintf(eos(buf), " (%ld)", LootcutBug);
9749 dump(youhad, buf);
9752 if (MonsterSpeedBug || u.uprops[MONSTER_SPEED_BUG].extrinsic || have_monsterspeedstone()) {
9753 sprintf(buf, "the following problem: Monsters are moving faster.");
9754 sprintf(eos(buf), " (%ld)", MonsterSpeedBug);
9755 dump(youhad, buf);
9758 if (ScalingBug || u.uprops[SCALING_BUG].extrinsic || have_scalingstone()) {
9759 sprintf(buf, "the following problem: Minimum monster level depends on your current depth.");
9760 sprintf(eos(buf), " (%ld)", ScalingBug);
9761 dump(youhad, buf);
9764 if (EnmityBug || u.uprops[ENMITY_BUG].extrinsic || have_inimicalstone()) {
9765 sprintf(buf, "the following problem: Monsters always spawn hostile.");
9766 sprintf(eos(buf), " (%ld)", EnmityBug);
9767 dump(youhad, buf);
9770 if (WhiteSpells || u.uprops[WHITE_SPELLS].extrinsic || have_whitespellstone()) {
9771 sprintf(buf, "the following problem: Your spells became white.");
9772 sprintf(eos(buf), " (%ld)", WhiteSpells);
9773 dump(youhad, buf);
9776 if (CompleteGraySpells || u.uprops[COMPLETE_GRAY_SPELLS].extrinsic || have_greyoutstone()) {
9777 sprintf(buf, "the following problem: Your spells became completely gray.");
9778 sprintf(eos(buf), " (%ld)", CompleteGraySpells);
9779 dump(youhad, buf);
9782 if (QuasarVision || u.uprops[QUASAR_BUG].extrinsic || have_quasarstone()) {
9783 sprintf(buf, "the following problem: You can barely see the quasars.");
9784 sprintf(eos(buf), " (%ld)", QuasarVision);
9785 dump(youhad, buf);
9788 if (MommaBugEffect || u.uprops[MOMMA_BUG].extrinsic || have_mommystone()) {
9789 sprintf(buf, "the following problem: Your momma will repeatedly be insulted.");
9790 sprintf(eos(buf), " (%ld)", MommaBugEffect);
9791 dump(youhad, buf);
9794 if (HorrorBugEffect || u.uprops[HORROR_BUG].extrinsic || have_horrorstone()) {
9795 sprintf(buf, "the following problem: You will repeatedly get hit with status effects.");
9796 sprintf(eos(buf), " (%ld)", HorrorBugEffect);
9797 dump(youhad, buf);
9800 if (ArtificerBug || u.uprops[ARTIFICER_BUG].extrinsic || have_artificialstone()) {
9801 sprintf(buf, "the following problem: You will be forced to equip evil artifacts.");
9802 sprintf(eos(buf), " (%ld)", ArtificerBug);
9803 dump(youhad, buf);
9806 if (WereformBug || u.uprops[WEREFORM_BUG].extrinsic || have_wereformstone()) {
9807 sprintf(buf, "the following problem: You randomly polymorph into werecreatures.");
9808 sprintf(eos(buf), " (%ld)", WereformBug);
9809 dump(youhad, buf);
9812 if (NonprayerBug || u.uprops[NON_PRAYER_BUG].extrinsic || have_antiprayerstone()) {
9813 sprintf(buf, "the following problem: Your prayer timeout goes up instead of down.");
9814 sprintf(eos(buf), " (%ld)", NonprayerBug);
9815 dump(youhad, buf);
9818 if (EvilPatchEffect || u.uprops[EVIL_PATCH_EFFECT].extrinsic || have_evilpatchstone()) {
9819 sprintf(buf, "the following problem: You will get nasty trap effects intrinsically over time.");
9820 sprintf(eos(buf), " (%ld)", EvilPatchEffect);
9821 dump(youhad, buf);
9824 if (HardModeEffect || u.uprops[HARD_MODE_EFFECT].extrinsic || have_hardmodestone()) {
9825 sprintf(buf, "the following problem: All damage you take is doubled.");
9826 sprintf(eos(buf), " (%ld)", HardModeEffect);
9827 dump(youhad, buf);
9830 if (SecretAttackBug || u.uprops[SECRET_ATTACK_BUG].extrinsic || have_secretattackstone()) {
9831 sprintf(buf, "the following problem: Monsters occasionally use their secret attacks.");
9832 sprintf(eos(buf), " (%ld)", SecretAttackBug);
9833 dump(youhad, buf);
9836 if (EaterBugEffect || u.uprops[EATER_BUG].extrinsic || have_eaterstone()) {
9837 sprintf(buf, "the following problem: Monsters can eat all items they encounter.");
9838 sprintf(eos(buf), " (%ld)", EaterBugEffect);
9839 dump(youhad, buf);
9842 if (CovetousnessBug || u.uprops[COVETOUSNESS_BUG].extrinsic || have_covetousstone()) {
9843 sprintf(buf, "the following problem: Covetous monster AI fires each turn.");
9844 sprintf(eos(buf), " (%ld)", CovetousnessBug);
9845 dump(youhad, buf);
9848 if (NotSeenBug || u.uprops[NOT_SEEN_BUG].extrinsic || have_nonseeingstone()) {
9849 sprintf(buf, "the following problem: The walls became invisible.");
9850 sprintf(eos(buf), " (%ld)", NotSeenBug);
9851 dump(youhad, buf);
9854 if (DarkModeBug || u.uprops[DARK_MODE_BUG].extrinsic || have_darkmodestone()) {
9855 sprintf(buf, "the following problem: Lit tiles aren't visible unless you would also see them if they were unlit.");
9856 sprintf(eos(buf), " (%ld)", DarkModeBug);
9857 dump(youhad, buf);
9860 if (AntisearchEffect || u.uprops[ANTISEARCH_EFFECT].extrinsic || have_unfindablestone()) {
9861 sprintf(buf, "the following problem: The search command never finds anything.");
9862 sprintf(eos(buf), " (%ld)", AntisearchEffect);
9863 dump(youhad, buf);
9866 if (HomicideEffect || u.uprops[HOMICIDE_EFFECT].extrinsic || have_homicidestone()) {
9867 sprintf(buf, "the following problem: Monsters build new traps for you to blunder into.");
9868 sprintf(eos(buf), " (%ld)", HomicideEffect);
9869 dump(youhad, buf);
9872 if (NastynationBug || u.uprops[NASTY_NATION_BUG].extrinsic || have_multitrappingstone()) {
9873 sprintf(buf, "the following problem: All trap types except beneficial ones are equally likely to generate.");
9874 sprintf(eos(buf), " (%ld)", NastynationBug);
9875 dump(youhad, buf);
9878 if (WakeupCallBug || u.uprops[WAKEUP_CALL_BUG].extrinsic || have_wakeupcallstone()) {
9879 sprintf(buf, "the following problem: Peaceful monsters may spontaneously turn hostile.");
9880 sprintf(eos(buf), " (%ld)", WakeupCallBug);
9881 dump(youhad, buf);
9884 if (GrayoutBug || u.uprops[GRAYOUT_BUG].extrinsic || have_grayoutstone()) {
9885 sprintf(buf, "the following problem: The display intermittently becomes all gray.");
9886 sprintf(eos(buf), " (%ld)", GrayoutBug);
9887 dump(youhad, buf);
9890 if (GrayCenterBug || u.uprops[GRAY_CENTER_BUG].extrinsic || have_graycenterstone()) {
9891 sprintf(buf, "the following problem: Your immediate surroundings are obscured by a gray shroud.");
9892 sprintf(eos(buf), " (%ld)", GrayCenterBug);
9893 dump(youhad, buf);
9896 if (CheckerboardBug || u.uprops[CHECKERBOARD_BUG].extrinsic || have_checkerboardstone()) {
9897 sprintf(buf, "the following problem: Only one color of checkerboard tiles is ever visible at any given time.");
9898 sprintf(eos(buf), " (%ld)", CheckerboardBug);
9899 dump(youhad, buf);
9902 if (ClockwiseSpinBug || u.uprops[CLOCKWISE_SPIN_BUG].extrinsic || have_clockwisestone()) {
9903 sprintf(buf, "the following problem: Your directional keys are shifted 45 degrees clockwise.");
9904 sprintf(eos(buf), " (%ld)", ClockwiseSpinBug);
9905 dump(youhad, buf);
9908 if (CounterclockwiseSpin || u.uprops[COUNTERCLOCKWISE_SPIN_BUG].extrinsic || have_counterclockwisestone()) {
9909 sprintf(buf, "the following problem: Your directional keys are shifted 90 degrees counterclockwise.");
9910 sprintf(eos(buf), " (%ld)", CounterclockwiseSpin);
9911 dump(youhad, buf);
9914 if (LagBugEffect || u.uprops[LAG_BUG].extrinsic || have_lagstone()) {
9915 sprintf(buf, "the following problem: The game lags.");
9916 sprintf(eos(buf), " (%ld)", LagBugEffect);
9917 dump(youhad, buf);
9920 if (BlesscurseEffect || u.uprops[BLESSCURSE_EFFECT].extrinsic || have_blesscursestone()) {
9921 sprintf(buf, "the following problem: Picking up a blessed item instantly curses it.");
9922 sprintf(eos(buf), " (%ld)", BlesscurseEffect);
9923 dump(youhad, buf);
9926 if (DeLightBug || u.uprops[DE_LIGHT_BUG].extrinsic || have_delightstone()) {
9927 sprintf(buf, "the following problem: Tiles that you're walking on automatically become unlit.");
9928 sprintf(eos(buf), " (%ld)", DeLightBug);
9929 dump(youhad, buf);
9932 if (DischargeBug || u.uprops[DISCHARGE_BUG].extrinsic || have_dischargestone()) {
9933 sprintf(buf, "the following problem: If you use wands or tools that have charges, more charges are used up than normal.");
9934 sprintf(eos(buf), " (%ld)", DischargeBug);
9935 dump(youhad, buf);
9938 if (TrashingBugEffect || u.uprops[TRASHING_EFFECT].extrinsic || have_trashstone()) {
9939 sprintf(buf, "the following problem: If you equip enchanted weapons, armor or rings, their enchantment value decreases.");
9940 sprintf(eos(buf), " (%ld)", TrashingBugEffect);
9941 dump(youhad, buf);
9944 if (FilteringBug || u.uprops[FILTERING_BUG].extrinsic || have_filteringstone()) {
9945 sprintf(buf, "the following problem: Certain messages may be replaced with generic ones.");
9946 sprintf(eos(buf), " (%ld)", FilteringBug);
9947 dump(youhad, buf);
9950 if (DeformattingBug || u.uprops[DEFORMATTING_BUG].extrinsic || have_deformattingstone()) {
9951 sprintf(buf, "the following problem: Your pokedex doesn't work.");
9952 sprintf(eos(buf), " (%ld)", DeformattingBug);
9953 dump(youhad, buf);
9956 if (FlickerStripBug || u.uprops[FLICKER_STRIP_BUG].extrinsic || have_flickerstripstone()) {
9957 sprintf(buf, "the following problem: The bottom status line only displays garbage strings.");
9958 sprintf(eos(buf), " (%ld)", FlickerStripBug);
9959 dump(youhad, buf);
9962 if (UndressingEffect || u.uprops[UNDRESSING_EFFECT].extrinsic || have_undressingstone()) {
9963 sprintf(buf, "the following problem: You spontaneously take off equipment.");
9964 sprintf(eos(buf), " (%ld)", UndressingEffect);
9965 dump(youhad, buf);
9968 if (Hyperbluewalls || u.uprops[HYPERBLUEWALL_BUG].extrinsic || have_hyperbluestone()) {
9969 sprintf(buf, "the following problem: Walls are blue, and walking into them hurts you.");
9970 sprintf(eos(buf), " (%ld)", Hyperbluewalls);
9971 dump(youhad, buf);
9974 if (NoliteBug || u.uprops[NOLITE_BUG].extrinsic || have_nolightstone()) {
9975 sprintf(buf, "the following problem: Staircases and object piles are no longer highlighted.");
9976 sprintf(eos(buf), " (%ld)", NoliteBug);
9977 dump(youhad, buf);
9980 if (ParanoiaBugEffect || u.uprops[PARANOIA_BUG].extrinsic || have_paranoiastone()) {
9981 sprintf(buf, "the following problem: There is no confirmation if you walk into traps, water or lava.");
9982 sprintf(eos(buf), " (%ld)", ParanoiaBugEffect);
9983 dump(youhad, buf);
9986 if (FleecescriptBug || u.uprops[FLEECESCRIPT_BUG].extrinsic || have_fleecestone()) {
9987 sprintf(buf, "the following problem: Inventory item descriptions appear in fleecy colors, which is actually not all that problematic. :-)");
9988 sprintf(eos(buf), " (%ld)", FleecescriptBug);
9989 dump(youhad, buf);
9992 if (InterruptEffect || u.uprops[INTERRUPT_EFFECT].extrinsic || have_interruptionstone()) {
9993 sprintf(buf, "the following problem: The read, quaff, zap and apply commands now take several turns to use and can be interrupted.");
9994 sprintf(eos(buf), " (%ld)", InterruptEffect);
9995 dump(youhad, buf);
9998 if (DustbinBug || u.uprops[DUSTBIN_BUG].extrinsic || have_dustbinstone()) {
9999 sprintf(buf, "the following problem: If you pick up a scroll, it may disintegrate.");
10000 sprintf(eos(buf), " (%ld)", DustbinBug);
10001 dump(youhad, buf);
10004 if (ManaBatteryBug || u.uprops[MANA_BATTERY_BUG].extrinsic || have_batterystone()) {
10005 sprintf(buf, "a living mana battery.");
10006 sprintf(eos(buf), " (%ld)", ManaBatteryBug);
10007 dump(youwere, buf);
10010 if (Monsterfingers || u.uprops[MONSTERFINGERS_EFFECT].extrinsic || have_butterfingerstone()) {
10011 sprintf(buf, "the following problem: Picking up potions may break them and subject you to their vapors.");
10012 sprintf(eos(buf), " (%ld)", Monsterfingers);
10013 dump(youhad, buf);
10016 if (MiscastBug || u.uprops[MISCAST_BUG].extrinsic || have_miscastingstone()) {
10017 sprintf(buf, "the following problem: Casting a spell always causes backlash, regardless of whether the spell worked.");
10018 sprintf(eos(buf), " (%ld)", MiscastBug);
10019 dump(youhad, buf);
10022 if (MessageSuppression || u.uprops[MESSAGE_SUPPRESSION_BUG].extrinsic || have_messagesuppressionstone()) {
10023 sprintf(buf, "the following problem: The top status line doesn't display anything.");
10024 sprintf(eos(buf), " (%ld)", MessageSuppression);
10025 dump(youhad, buf);
10028 if (StuckAnnouncement || u.uprops[STUCK_ANNOUNCEMENT_BUG].extrinsic || have_stuckannouncementstone()) {
10029 sprintf(buf, "the following problem: The bottom status line only updates if you explicitly tell it to do so.");
10030 sprintf(eos(buf), " (%ld)", StuckAnnouncement);
10031 dump(youhad, buf);
10034 if (BloodthirstyEffect || u.uprops[BLOODTHIRSTY_EFFECT].extrinsic || have_stormstone()) {
10035 sprintf(buf, "the following problem: There is no confirmation if you walk into a peaceful monster.");
10036 sprintf(eos(buf), " (%ld)", BloodthirstyEffect);
10037 dump(youhad, buf);
10040 if (MaximumDamageBug || u.uprops[MAXIMUM_DAMAGE_BUG].extrinsic || have_maximumdamagestone()) {
10041 sprintf(buf, "the following problem: Monster attacks always deal maximum damage to you.");
10042 sprintf(eos(buf), " (%ld)", MaximumDamageBug);
10043 dump(youhad, buf);
10046 if (LatencyBugEffect || u.uprops[LATENCY_BUG].extrinsic || have_latencystone()) {
10047 sprintf(buf, "the following problem: There is background latency.");
10048 sprintf(eos(buf), " (%ld)", LatencyBugEffect);
10049 dump(youhad, buf);
10052 if (StarlitBug || u.uprops[STARLIT_BUG].extrinsic || have_starlitskystone()) {
10053 sprintf(buf, "the following problem: All monsters look the same and you can't tell them apart.");
10054 sprintf(eos(buf), " (%ld)", StarlitBug);
10055 dump(youhad, buf);
10058 if (KnowledgeBug || u.uprops[KNOWLEDGE_BUG].extrinsic || have_trapknowledgestone()) {
10059 sprintf(buf, "the following problem: All traps look the same and you can't tell them apart.");
10060 sprintf(eos(buf), " (%ld)", KnowledgeBug);
10061 dump(youhad, buf);
10064 if (HighscoreBug || u.uprops[HIGHSCORE_BUG].extrinsic || have_highscorestone()) {
10065 sprintf(buf, "the following problem: The game continuously spawns spacewars monsters and nasty traps.");
10066 sprintf(eos(buf), " (%ld)", HighscoreBug);
10067 dump(youhad, buf);
10070 if (PinkSpells || u.uprops[PINK_SPELLS].extrinsic || have_pinkspellstone()) {
10071 sprintf(buf, "the following problem: Your spells became pink.");
10072 sprintf(eos(buf), " (%ld)", PinkSpells);
10073 dump(youhad, buf);
10076 if (GreenSpells || u.uprops[GREEN_SPELLS].extrinsic || have_greenspellstone()) {
10077 sprintf(buf, "the following problem: Your spells became green.");
10078 sprintf(eos(buf), " (%ld)", GreenSpells);
10079 dump(youhad, buf);
10082 if (EvencoreEffect || u.uprops[EVC_EFFECT].extrinsic || have_evcstone()) {
10083 sprintf(buf, "the following problem: The game will spawn fake invisible monster markers.");
10084 sprintf(eos(buf), " (%ld)", EvencoreEffect);
10085 dump(youhad, buf);
10088 if (UnderlayerBug || u.uprops[UNDERLAYER_BUG].extrinsic || have_underlaidstone()) {
10089 sprintf(buf, "the following problem: Invisible monster markers are not visible, but bumping into them uses up a turn.");
10090 sprintf(eos(buf), " (%ld)", UnderlayerBug);
10091 dump(youhad, buf);
10094 if (DamageMeterBug || u.uprops[DAMAGE_METER_BUG].extrinsic || have_damagemeterstone()) {
10095 sprintf(buf, "the following problem: The game won't tell you exactly how much damage an attack does.");
10096 sprintf(eos(buf), " (%ld)", DamageMeterBug);
10097 dump(youhad, buf);
10100 if (ArbitraryWeightBug || u.uprops[ARBITRARY_WEIGHT_BUG].extrinsic || have_weightstone()) {
10101 sprintf(buf, "the following problem: You can't see your carry capacity or the weight of items.");
10102 sprintf(eos(buf), " (%ld)", ArbitraryWeightBug);
10103 dump(youhad, buf);
10106 if (FuckedInfoBug || u.uprops[FUCKED_INFO_BUG].extrinsic || have_infofuckstone()) {
10107 sprintf(buf, "the following problem: You can't see what character you are playing.");
10108 sprintf(eos(buf), " (%ld)", FuckedInfoBug);
10109 dump(youhad, buf);
10112 if (BlackSpells || u.uprops[BLACK_SPELLS].extrinsic || have_blackspellstone()) {
10113 sprintf(buf, "the following problem: Your spells became black.");
10114 sprintf(eos(buf), " (%ld)", BlackSpells);
10115 dump(youhad, buf);
10118 if (CyanSpells || u.uprops[CYAN_SPELLS].extrinsic || have_cyanspellstone()) {
10119 sprintf(buf, "the following problem: Your spells became cyan.");
10120 sprintf(eos(buf), " (%ld)", CyanSpells);
10121 dump(youhad, buf);
10124 if (HeapEffectBug || u.uprops[HEAP_EFFECT].extrinsic || have_heapstone()) {
10125 sprintf(buf, "the following problem: Messages are repeated randomly.");
10126 sprintf(eos(buf), " (%ld)", HeapEffectBug);
10127 dump(youhad, buf);
10130 if (BlueSpells || u.uprops[BLUE_SPELLS].extrinsic || have_bluespellstone()) {
10131 sprintf(buf, "the following problem: Your spells became blue.");
10132 sprintf(eos(buf), " (%ld)", BlueSpells);
10133 dump(youhad, buf);
10136 if (TronEffect || u.uprops[TRON_EFFECT].extrinsic || have_tronstone()) {
10137 sprintf(buf, "the following problem: You can't walk in the same direction twice in a row.");
10138 sprintf(eos(buf), " (%ld)", TronEffect);
10139 dump(youhad, buf);
10142 if (RedSpells || u.uprops[RED_SPELLS].extrinsic || have_redspellstone()) {
10143 sprintf(buf, "the following problem: Your spells became red.");
10144 sprintf(eos(buf), " (%ld)", RedSpells);
10145 dump(youhad, buf);
10148 if (TooHeavyEffect || u.uprops[TOO_HEAVY_EFFECT].extrinsic || have_tooheavystone()) {
10149 sprintf(buf, "the following problem: Picking up an item increases your carried weight by more than what the item weighs.");
10150 sprintf(eos(buf), " (%ld)", TooHeavyEffect);
10151 dump(youhad, buf);
10154 if (ElongationBug || u.uprops[ELONGATION_BUG].extrinsic || have_elongatedstone()) {
10155 sprintf(buf, "the following problem: Monsters' hug attacks, ranged weapons and breaths can hit you from very far away.");
10156 sprintf(eos(buf), " (%ld)", ElongationBug);
10157 dump(youhad, buf);
10160 if (WrapoverEffect || u.uprops[WRAPOVER_EFFECT].extrinsic || have_wrapoverstone()) {
10161 sprintf(buf, "the following problem: Your positively enchanted items may randomly turn into negatively enchanted ones.");
10162 sprintf(eos(buf), " (%ld)", WrapoverEffect);
10163 dump(youhad, buf);
10166 if (DestructionEffect || u.uprops[DESTRUCTION_EFFECT].extrinsic || have_destructionstone()) {
10167 sprintf(buf, "the following problem: Item destruction may happen randomly.");
10168 sprintf(eos(buf), " (%ld)", DestructionEffect);
10169 dump(youhad, buf);
10172 if (MeleePrefixBug || u.uprops[MELEE_PREFIX_BUG].extrinsic || have_meleeprefixstone()) {
10173 sprintf(buf, "the following problem: If you simply walk into monsters to attack, you lose a turn.");
10174 sprintf(eos(buf), " (%ld)", MeleePrefixBug);
10175 dump(youhad, buf);
10178 if (AutomoreBug || u.uprops[AUTOMORE_BUG].extrinsic || have_automorestone()) {
10179 sprintf(buf, "the following problem: There are no --More-- prompts.");
10180 sprintf(eos(buf), " (%ld)", AutomoreBug);
10181 dump(youhad, buf);
10184 if (UnfairAttackBug || u.uprops[UNFAIR_ATTACK_BUG].extrinsic || have_unfairattackstone()) {
10185 sprintf(buf, "the following problem: Monsters will occasionally use very unfair attacks on you.");
10186 sprintf(eos(buf), " (%ld)", UnfairAttackBug);
10187 dump(youhad, buf);
10190 if (DisconnectedStairs || u.uprops[DISCONNECTED_STAIRS].extrinsic || have_disconnectstone()) {
10191 sprintf(buf, "the following problem: Staircases were disconnected.");
10192 sprintf(eos(buf), " (%ld)", DisconnectedStairs);
10193 dump(youhad, buf);
10196 if (InterfaceScrewed || u.uprops[INTERFACE_SCREW].extrinsic || have_interfacescrewstone()) {
10197 sprintf(buf, "the following problem: The main game display did not update automatically.");
10198 sprintf(eos(buf), " (%ld)", InterfaceScrewed);
10199 dump(youhad, buf);
10202 if (Bossfights || u.uprops[BOSSFIGHT].extrinsic || have_bossfightstone()) {
10203 sprintf(buf, "the following problem: Boss monsters spawned much more often.");
10204 sprintf(eos(buf), " (%ld)", Bossfights);
10205 dump(youhad, buf);
10208 if (EntireLevelMode || u.uprops[ENTIRE_LEVEL].extrinsic || have_entirelevelstone()) {
10209 sprintf(buf, "the following problem: Monster types that used to be rare were common.");
10210 sprintf(eos(buf), " (%ld)", EntireLevelMode);
10211 dump(youhad, buf);
10214 if (BonesLevelChange || u.uprops[BONES_CHANGE].extrinsic || have_bonestone()) {
10215 sprintf(buf, "the following problem: You always found or left bones levels if possible.");
10216 sprintf(eos(buf), " (%ld)", BonesLevelChange);
10217 dump(youhad, buf);
10220 if (AutocursingEquipment || u.uprops[AUTOCURSE_EQUIP].extrinsic || have_autocursestone()) {
10221 sprintf(buf, "the following problem: Every item you put on automatically cursed itself.");
10222 sprintf(eos(buf), " (%ld)", AutocursingEquipment);
10223 dump(youhad, buf);
10226 if (HighlevelStatus || u.uprops[HIGHLEVEL_STATUS].extrinsic || have_highlevelstone()) {
10227 sprintf(buf, "the following problem: Higher-level monsters were more likely to spawn.");
10228 sprintf(eos(buf), " (%ld)", HighlevelStatus);
10229 dump(youhad, buf);
10232 if (SpellForgetting || u.uprops[SPELL_FORGETTING].extrinsic || have_spellforgettingstone()) {
10233 sprintf(buf, "the following problem: Your spell memory decreased rapidly.");
10234 sprintf(eos(buf), " (%ld)", SpellForgetting);
10235 dump(youhad, buf);
10238 if (SoundEffectBug || u.uprops[SOUND_EFFECT_BUG].extrinsic || have_soundeffectstone()) {
10239 sprintf(buf, "the following problem: Things that happened would play 'sound effects'.");
10240 sprintf(eos(buf), " (%ld)", SoundEffectBug);
10241 dump(youhad, buf);
10244 if (CaptchaProblem || u.uprops[CAPTCHA].extrinsic || have_captchastone()) {
10245 sprintf(buf, "the following problem: You sometimes had to solve captchas.");
10246 sprintf(eos(buf), " (%ld)", CaptchaProblem);
10247 dump(youhad, buf);
10249 if (FarlookProblem || u.uprops[FARLOOK_BUG].extrinsic || have_farlookstone()) {
10250 sprintf(buf, "the following problem: Farlooking peaceful monsters angered them.");
10251 sprintf(eos(buf), " (%ld)", FarlookProblem);
10252 dump(youhad, buf);
10254 if (RespawnProblem || u.uprops[RESPAWN_BUG].extrinsic || have_respawnstone()) {
10255 sprintf(buf, "the following problem: Killing monsters caused them to respawn somewhere on the level.");
10256 sprintf(eos(buf), " (%ld)", RespawnProblem);
10257 dump(youhad, buf);
10260 if (BigscriptEffect || u.uprops[BIGSCRIPT].extrinsic || have_bigscriptstone()) {
10261 sprintf(buf, "BIGscript.");
10262 sprintf(eos(buf), " (%ld)", BigscriptEffect);
10263 dump(youhad, buf);
10265 if (BankTrapEffect || u.uprops[BANKBUG].extrinsic || have_bankstone()) {
10266 sprintf(buf, "the following problem: Your money wandered into a mysterious bank.");
10267 sprintf(eos(buf), " (%ld)", BankTrapEffect);
10268 sprintf(eos(buf), " (amount stored: %d)", u.bankcashamount);
10269 sprintf(eos(buf), " (money limit: %d)", u.bankcashlimit);
10270 dump(youhad, buf);
10271 } else {
10272 if (u.bankcashamount) {
10273 sprintf(buf, "the following amount of cash stored in the bank:");
10274 sprintf(eos(buf), " %d", u.bankcashamount);
10275 dump(youhad, buf);
10277 if (u.bankcashlimit) {
10278 sprintf(buf, "the following bank cash limit:");
10279 sprintf(eos(buf), " %d", u.bankcashlimit);
10280 dump(youhad, buf);
10283 if (MapTrapEffect || u.uprops[MAPBUG].extrinsic || have_mapstone()) {
10284 sprintf(buf, "the following problem: The map didn't display correctly.");
10285 sprintf(eos(buf), " (%ld)", MapTrapEffect);
10286 dump(youhad, buf);
10288 if (TechTrapEffect || u.uprops[TECHBUG].extrinsic || have_techniquestone()) {
10289 sprintf(buf, "the following problem: Your techniques frequently didn't work.");
10290 sprintf(eos(buf), " (%ld)", TechTrapEffect);
10291 dump(youhad, buf);
10293 if (RecurringDisenchant || u.uprops[RECURRING_DISENCHANT].extrinsic || have_disenchantmentstone()) {
10294 sprintf(buf, "the following problem: Your possessions disenchanted themselves spontaneously.");
10295 sprintf(eos(buf), " (%ld)", RecurringDisenchant);
10296 dump(youhad, buf);
10298 if (verisiertEffect || u.uprops[VERISIERTEFFECT].extrinsic || have_verisiertstone()) {
10299 sprintf(buf, "the following problem: Monster respawn speeded up rapidly.");
10300 sprintf(eos(buf), " (%ld)", verisiertEffect);
10301 dump(youhad, buf);
10303 if (ChaosTerrain || u.uprops[CHAOS_TERRAIN].extrinsic || have_chaosterrainstone()) {
10304 sprintf(buf, "the following problem: The terrain slowly became ever more chaotic.");
10305 sprintf(eos(buf), " (%ld)", ChaosTerrain);
10306 dump(youhad, buf);
10308 if (Muteness || u.uprops[MUTENESS].extrinsic || have_mutenessstone()) {
10309 sprintf(buf, "the following problem: You were mute, and had great difficulty when trying to cast spells.");
10310 sprintf(eos(buf), " (%ld)", Muteness);
10311 dump(youhad, buf);
10313 if (EngravingDoesntWork || u.uprops[ENGRAVINGBUG].extrinsic || have_engravingstone()) {
10314 sprintf(buf, "the following problem: Monsters didn't respect Elbereth.");
10315 sprintf(eos(buf), " (%ld)", EngravingDoesntWork);
10316 dump(youhad, buf);
10318 if (MagicDeviceEffect || u.uprops[MAGIC_DEVICE_BUG].extrinsic || have_magicdevicestone()) {
10319 sprintf(buf, "the following problem: Zapping a wand could cause it to explode.");
10320 sprintf(eos(buf), " (%ld)", MagicDeviceEffect);
10321 dump(youhad, buf);
10323 if (BookTrapEffect || u.uprops[BOOKBUG].extrinsic || have_bookstone()) {
10324 sprintf(buf, "the following problem: Reading spellbooks confused you.");
10325 sprintf(eos(buf), " (%ld)", BookTrapEffect);
10326 dump(youhad, buf);
10328 if (LevelTrapEffect || u.uprops[LEVELBUG].extrinsic || have_levelstone()) {
10329 sprintf(buf, "the following problem: Monsters became stronger if many of their species had been generated already.");
10330 sprintf(eos(buf), " (%ld)", LevelTrapEffect);
10331 dump(youhad, buf);
10333 if (QuizTrapEffect || u.uprops[QUIZZES].extrinsic || have_quizstone()) {
10334 sprintf(buf, "the following problem: You had to partake in the Great NetHack Quiz.");
10335 sprintf(eos(buf), " (%ld)", QuizTrapEffect);
10336 dump(youhad, buf);
10339 if (FastMetabolismEffect || u.uprops[FAST_METABOLISM].extrinsic || have_metabolicstone()) {
10340 sprintf(buf, "the following problem: Your food consumption was much faster.");
10341 sprintf(eos(buf), " (%ld)", FastMetabolismEffect);
10342 dump(youhad, buf);
10345 if (NoReturnEffect || u.uprops[NORETURN].extrinsic || have_noreturnstone()) {
10346 sprintf(buf, "the following problem: You could not teleport at all.");
10347 sprintf(eos(buf), " (%ld)", NoReturnEffect);
10348 dump(youhad, buf);
10351 if (AlwaysEgotypeMonsters || u.uprops[ALWAYS_EGOTYPES].extrinsic || have_egostone()) {
10352 sprintf(buf, "the following problem: Monsters always spawned with egotypes.");
10353 sprintf(eos(buf), " (%ld)", AlwaysEgotypeMonsters);
10354 dump(youhad, buf);
10357 if (TimeGoesByFaster || u.uprops[FAST_FORWARD].extrinsic || have_fastforwardstone()) {
10358 sprintf(buf, "the following problem: Time went by faster.");
10359 sprintf(eos(buf), " (%ld)", TimeGoesByFaster);
10360 dump(youhad, buf);
10363 if (FoodIsAlwaysRotten || u.uprops[FOOD_IS_ROTTEN].extrinsic || have_rottenstone()) {
10364 sprintf(buf, "the following problem: Your food was always rotten.");
10365 sprintf(eos(buf), " (%ld)", FoodIsAlwaysRotten);
10366 dump(youhad, buf);
10369 if (AllSkillsUnskilled || u.uprops[SKILL_DEACTIVATED].extrinsic || have_unskilledstone()) {
10370 sprintf(buf, "the following problem: Your skills were deactivated.");
10371 sprintf(eos(buf), " (%ld)", AllSkillsUnskilled);
10372 dump(youhad, buf);
10375 if (AllStatsAreLower || u.uprops[STATS_LOWERED].extrinsic || have_lowstatstone()) {
10376 sprintf(buf, "the following problem: All of your stats were lowered.");
10377 sprintf(eos(buf), " (%ld)", AllStatsAreLower);
10378 dump(youhad, buf);
10381 if (PlayerCannotTrainSkills || u.uprops[TRAINING_DEACTIVATED].extrinsic || have_trainingstone()) {
10382 sprintf(buf, "the following problem: You could not train skills.");
10383 sprintf(eos(buf), " (%ld)", PlayerCannotTrainSkills);
10384 dump(youhad, buf);
10387 if (PlayerCannotExerciseStats || u.uprops[EXERCISE_DEACTIVATED].extrinsic || have_exercisestone()) {
10388 sprintf(buf, "the following problem: You could not exercise your stats.");
10389 sprintf(eos(buf), " (%ld)", PlayerCannotExerciseStats);
10390 dump(youhad, buf);
10393 if (MCReduction) {
10394 sprintf(buf, "reduced magic cancellation.");
10395 sprintf(eos(buf), " (%ld)", MCReduction);
10396 dump(youhad, buf);
10399 if (u.uprops[INTRINSIC_LOSS].extrinsic || IntrinsicLossProblem || have_intrinsiclossstone() ) {
10400 sprintf(buf, "a case of random intrinsic loss.");
10401 sprintf(eos(buf), " (%ld)", IntrinsicLossProblem);
10402 dump(youhad, buf);
10404 if (u.uprops[TRAP_REVEALING].extrinsic) {
10405 sprintf(buf, "randomly revealing traps");
10406 dump(youwere, buf);
10408 if (u.uprops[BLOOD_LOSS].extrinsic || BloodLossProblem || have_bloodlossstone() ) {
10409 sprintf(buf, "bleeding out");
10410 sprintf(eos(buf), " (%ld)", BloodLossProblem);
10411 dump(youwere, buf);
10413 if (u.uprops[NASTINESS_EFFECTS].extrinsic || NastinessProblem || have_nastystone() ) {
10414 sprintf(buf, "subjected to random nasty trap effects");
10415 sprintf(eos(buf), " (%ld)", NastinessProblem);
10416 dump(youwere, buf);
10418 if (u.uprops[BAD_EFFECTS].extrinsic || BadEffectProblem || have_badeffectstone() ) {
10419 sprintf(buf, "subjected to random bad effects");
10420 sprintf(eos(buf), " (%ld)", BadEffectProblem);
10421 dump(youwere, buf);
10423 if (u.uprops[AUTOMATIC_TRAP_CREATION].extrinsic || TrapCreationProblem || have_trapcreationstone() ) {
10424 sprintf(buf, "more likely to encounter traps");
10425 sprintf(eos(buf), " (%ld)", TrapCreationProblem);
10426 dump(youwere, buf);
10428 if (u.uprops[SENTIENT_HIGH_HEELS].extrinsic) {
10429 sprintf(buf, "wearing sentient high heels");
10430 dump(youwere, buf);
10432 if (u.uprops[REPEATING_VULNERABILITY].extrinsic || AutomaticVulnerabilitiy || have_vulnerabilitystone() ) {
10433 sprintf(buf, "the risk of temporarily losing intrinsics");
10434 sprintf(eos(buf), " (%ld)", AutomaticVulnerabilitiy);
10435 dump(youhad, buf);
10437 if (u.uprops[TELEPORTING_ITEMS].extrinsic || TeleportingItems || have_itemportstone() ) {
10438 sprintf(buf, "teleporting items");
10439 sprintf(eos(buf), " (%ld)", TeleportingItems);
10440 dump(youhad, buf);
10443 if (u.uprops[DESECRATION].extrinsic || Desecration || have_nonsacredstone() ) {
10444 sprintf(buf, "the following problem: Altars malfunction whenever you try to use them");
10445 sprintf(eos(buf), " (%ld)", Desecration);
10446 dump(youhad, buf);
10449 if (u.uprops[STARVATION_EFFECT].extrinsic || StarvationEffect || have_starvationstone() ) {
10450 sprintf(buf, "not going to get corpses from defeated enemies");
10451 sprintf(eos(buf), " (%ld)", StarvationEffect);
10452 dump(youwere, buf);
10455 if (u.uprops[NO_DROPS_EFFECT].extrinsic || NoDropsEffect || have_droplessstone() ) {
10456 sprintf(buf, "not going to get death drops from monsters");
10457 sprintf(eos(buf), " (%ld)", NoDropsEffect);
10458 dump(youwere, buf);
10461 if (u.uprops[LOW_EFFECTS].extrinsic || LowEffects || have_loweffectstone() ) {
10462 sprintf(buf, "reduced power of magical effects");
10463 sprintf(eos(buf), " (%ld)", LowEffects);
10464 dump(youhad, buf);
10467 if (u.uprops[INVIS_TRAPS_EFFECT].extrinsic || InvisibleTrapsEffect || have_invisostone() ) {
10468 sprintf(buf, "not going to see traps");
10469 sprintf(eos(buf), " (%ld)", InvisibleTrapsEffect);
10470 dump(youwere, buf);
10473 if (u.uprops[GHOST_WORLD].extrinsic || GhostWorld || have_ghostlystone() ) {
10474 sprintf(buf, "in a ghost world");
10475 sprintf(eos(buf), " (%ld)", GhostWorld);
10476 dump(youwere, buf);
10479 if (u.uprops[DEHYDRATION].extrinsic || Dehydration || have_dehydratingstone() ) {
10480 sprintf(buf, "going to become dehydrated");
10481 sprintf(eos(buf), " (%ld)", Dehydration);
10482 dump(youwere, buf);
10485 if (u.uprops[HATE_TRAP_EFFECT].extrinsic || HateTrapEffect || have_hatestone() ) {
10486 sprintf(buf, "the following problem: Pets hate you with a fiery passion.");
10487 sprintf(eos(buf), " (%ld)", HateTrapEffect);
10488 dump(youhad, buf);
10491 if (u.uprops[TOTTER_EFFECT].extrinsic || TotterTrapEffect || have_directionswapstone() ) {
10492 sprintf(buf, "the following problem: Your directional keys got swapped.");
10493 sprintf(eos(buf), " (%ld)", TotterTrapEffect);
10494 dump(youhad, buf);
10497 if (u.uprops[NONINTRINSIC_EFFECT].extrinsic || Nonintrinsics || have_nonintrinsicstone() ) {
10498 sprintf(buf, "unable to get intrinsics from eating corpses");
10499 sprintf(eos(buf), " (%ld)", Nonintrinsics);
10500 dump(youwere, buf);
10503 if (u.uprops[DROPCURSES_EFFECT].extrinsic || Dropcurses || have_dropcursestone() ) {
10504 sprintf(buf, "the following problem: Dropping items causes them to autocurse.");
10505 sprintf(eos(buf), " (%ld)", Dropcurses);
10506 dump(youhad, buf);
10509 if (u.uprops[NAKEDNESS].extrinsic || Nakedness || have_nakedstone() ) {
10510 sprintf(buf, "effectively naked");
10511 sprintf(eos(buf), " (%ld)", Nakedness);
10512 dump(youwere, buf);
10515 if (u.uprops[ANTILEVELING].extrinsic || Antileveling || have_antilevelstone() ) {
10516 sprintf(buf, "unable to gain experience past experience level 10, and slower to reach XL10");
10517 sprintf(eos(buf), " (%ld)", Antileveling);
10518 dump(youwere, buf);
10521 if (u.uprops[ITEM_STEALING_EFFECT].extrinsic || ItemStealingEffect || have_stealerstone() ) {
10522 sprintf(buf, "more likely to have your items stolen");
10523 sprintf(eos(buf), " (%ld)", ItemStealingEffect);
10524 dump(youwere, buf);
10527 if (u.uprops[REBELLION_EFFECT].extrinsic || Rebellions || have_rebelstone() ) {
10528 sprintf(buf, "the following problem: Pets can spontaneously rebel and become hostile.");
10529 sprintf(eos(buf), " (%ld)", Rebellions);
10530 dump(youhad, buf);
10533 if (u.uprops[CRAP_EFFECT].extrinsic || CrapEffect || have_shitstone() ) {
10534 sprintf(buf, "diarrhea");
10535 sprintf(eos(buf), " (%ld)", CrapEffect);
10536 dump(youhad, buf);
10539 if (u.uprops[PROJECTILES_MISFIRE].extrinsic || ProjectilesMisfire || have_misfirestone() ) {
10540 sprintf(buf, "the following problem: Your projectiles often misfire.");
10541 sprintf(eos(buf), " (%ld)", ProjectilesMisfire);
10542 dump(youhad, buf);
10545 if (u.uprops[WALL_TRAP_EFFECT].extrinsic || WallTrapping || have_wallstone() ) {
10546 sprintf(buf, "the following problem: Dungeon regrowth is excessively fast.");
10547 sprintf(eos(buf), " (%ld)", WallTrapping);
10548 dump(youhad, buf);
10551 if (u.uprops[RECURRING_AMNESIA].extrinsic || RecurringAmnesia || have_amnesiastone() ) {
10552 sprintf(buf, "going to suffer from amnesia now and then");
10553 sprintf(eos(buf), " (%ld)", RecurringAmnesia);
10554 dump(youwere, buf);
10557 if (u.uprops[TURNLIMITATION].extrinsic || TurnLimitation || have_limitationstone() ) {
10558 sprintf(buf, "getting your ascension turn limit reduced whenever you take damage");
10559 sprintf(eos(buf), " (%ld)", TurnLimitation);
10560 dump(youwere, buf);
10563 if (u.uprops[WEAKSIGHT].extrinsic || WeakSight || have_weaksightstone() ) {
10564 sprintf(buf, "short-sighted");
10565 sprintf(eos(buf), " (%ld)", WeakSight);
10566 dump(youwere, buf);
10569 if (u.uprops[RANDOM_MESSAGES].extrinsic || RandomMessages || have_messagestone() ) {
10570 sprintf(buf, "reading random messages");
10571 sprintf(eos(buf), " (%ld)", RandomMessages);
10572 dump(youwere, buf);
10576 if (u.uprops[RANDOM_RUMORS].extrinsic) {
10577 sprintf(buf, "going to listen to random rumors");
10578 dump(youwere, buf);
10581 if (IncreasedGravity) {
10582 sprintf(buf, "increased encumbrance due to a stronger gravity.");
10583 sprintf(eos(buf), " (%ld)", IncreasedGravity);
10584 dump(youhad, buf);
10587 if (u.graundweight) {
10588 sprintf(buf, "burdened by some dead weight.");
10589 sprintf(eos(buf), " (%d)", u.graundweight);
10590 dump(youwere, buf);
10593 if (NoStaircase) {
10594 sprintf(buf, "to wait until you could use staircases again.");
10595 sprintf(eos(buf), " (%ld)", NoStaircase);
10596 dump(youhad, buf);
10599 if (u.ragnaroktimer) {
10600 sprintf(buf, "going to experience Ragnarok.");
10601 sprintf(eos(buf), " (%d)", u.ragnaroktimer);
10602 dump(youwere, buf);
10605 if (u.sokosolveboulder && issokosolver) {
10606 sprintf(buf, "to wait until you can create boulders again.");
10607 sprintf(eos(buf), " (%d)", u.sokosolveboulder);
10608 dump(youhad, buf);
10611 if (u.sokosolveuntrap && issokosolver) {
10612 sprintf(buf, "to wait until you can disarm traps again.");
10613 sprintf(eos(buf), " (%d)", u.sokosolveuntrap);
10614 dump(youhad, buf);
10617 if (u.footererlevel) {
10618 sprintf(buf, "going to encounter the footerers.");
10619 sprintf(eos(buf), " (level %d)", u.footererlevel);
10620 dump(youwere, buf);
10623 if (FemtrapActiveFemmy) {
10624 sprintf(buf, "possessed by the ghost of Femmy.");
10625 sprintf(eos(buf), " (%ld)", FemaleTrapFemmy);
10626 dump(youwere, buf);
10629 if (FemtrapActiveMadeleine) {
10630 sprintf(buf, "possessed by the ghost of Madeleine.");
10631 sprintf(eos(buf), " (%ld)", FemaleTrapMadeleine);
10632 dump(youwere, buf);
10635 if (FemtrapActiveMarlena) {
10636 sprintf(buf, "possessed by the ghost of Marlena.");
10637 sprintf(eos(buf), " (%ld)", FemaleTrapMarlena);
10638 dump(youwere, buf);
10641 if (FemtrapActiveSabrina) {
10642 sprintf(buf, "possessed by the ghost of Sabrina.");
10643 sprintf(eos(buf), " (%ld)", FemaleTrapSabrina);
10644 dump(youwere, buf);
10647 if (FemtrapActiveTanja) {
10648 sprintf(buf, "possessed by the ghost of Tanja.");
10649 sprintf(eos(buf), " (%ld)", FemaleTrapTanja);
10650 dump(youwere, buf);
10653 if (FemtrapActiveSonja) {
10654 sprintf(buf, "possessed by the ghost of Sonja.");
10655 sprintf(eos(buf), " (%ld)", FemaleTrapSonja);
10656 dump(youwere, buf);
10659 if (FemtrapActiveRhea) {
10660 sprintf(buf, "possessed by the ghost of Rhea.");
10661 sprintf(eos(buf), " (%ld)", FemaleTrapRhea);
10662 dump(youwere, buf);
10665 if (FemtrapActiveLara) {
10666 sprintf(buf, "possessed by the ghost of Lara.");
10667 sprintf(eos(buf), " (%ld)", FemaleTrapLara);
10668 dump(youwere, buf);
10671 if (FemtrapActiveNadine) {
10672 sprintf(buf, "possessed by the ghost of Nadine.");
10673 sprintf(eos(buf), " (%ld)", FemaleTrapNadine);
10674 dump(youwere, buf);
10677 if (FemtrapActiveLuisa) {
10678 sprintf(buf, "possessed by the ghost of Luisa.");
10679 sprintf(eos(buf), " (%ld)", FemaleTrapLuisa);
10680 dump(youwere, buf);
10683 if (FemtrapActiveIrina) {
10684 sprintf(buf, "possessed by the ghost of Irina.");
10685 sprintf(eos(buf), " (%ld)", FemaleTrapIrina);
10686 dump(youwere, buf);
10689 if (FemtrapActiveLiselotte) {
10690 sprintf(buf, "possessed by the ghost of Liselotte.");
10691 sprintf(eos(buf), " (%ld)", FemaleTrapLiselotte);
10692 dump(youwere, buf);
10695 if (FemtrapActiveGreta) {
10696 sprintf(buf, "possessed by the ghost of Greta.");
10697 sprintf(eos(buf), " (%ld)", FemaleTrapGreta);
10698 dump(youwere, buf);
10701 if (FemtrapActiveJane) {
10702 sprintf(buf, "possessed by the ghost of Jane.");
10703 sprintf(eos(buf), " (%ld)", FemaleTrapJane);
10704 dump(youwere, buf);
10707 if (FemtrapActiveSueLyn) {
10708 sprintf(buf, "possessed by the ghost of Sue Lyn.");
10709 sprintf(eos(buf), " (%ld)", FemaleTrapSueLyn);
10710 dump(youwere, buf);
10713 if (FemtrapActiveCharlotte) {
10714 sprintf(buf, "possessed by the ghost of Charlotte.");
10715 sprintf(eos(buf), " (%ld)", FemaleTrapCharlotte);
10716 dump(youwere, buf);
10719 if (FemtrapActiveHannah) {
10720 sprintf(buf, "possessed by the ghost of Hannah.");
10721 sprintf(eos(buf), " (%ld)", FemaleTrapHannah);
10722 dump(youwere, buf);
10725 if (FemtrapActiveLittleMarie) {
10726 sprintf(buf, "possessed by the ghost of Little Marie.");
10727 sprintf(eos(buf), " (%ld)", FemaleTrapLittleMarie);
10728 dump(youwere, buf);
10731 if (FemtrapActiveRuth) {
10732 sprintf(buf, "possessed by the ghost of Ruth.");
10733 sprintf(eos(buf), " (%ld)", FemaleTrapRuth);
10734 dump(youwere, buf);
10737 if (FemtrapActiveMagdalena) {
10738 sprintf(buf, "possessed by the ghost of Magdalena.");
10739 sprintf(eos(buf), " (%ld)", FemaleTrapMagdalena);
10740 dump(youwere, buf);
10743 if (FemtrapActiveMarleen) {
10744 sprintf(buf, "possessed by the ghost of Marleen.");
10745 sprintf(eos(buf), " (%ld)", FemaleTrapMarleen);
10746 dump(youwere, buf);
10749 if (FemtrapActiveKlara) {
10750 sprintf(buf, "possessed by the ghost of Klara.");
10751 sprintf(eos(buf), " (%ld)", FemaleTrapKlara);
10752 dump(youwere, buf);
10755 if (FemtrapActiveFriederike) {
10756 sprintf(buf, "possessed by the ghost of Friederike.");
10757 sprintf(eos(buf), " (%ld)", FemaleTrapFriederike);
10758 dump(youwere, buf);
10761 if (FemtrapActiveNaomi) {
10762 sprintf(buf, "possessed by the ghost of Naomi.");
10763 sprintf(eos(buf), " (%ld)", FemaleTrapNaomi);
10764 dump(youwere, buf);
10767 if (FemtrapActiveUte) {
10768 sprintf(buf, "possessed by the ghost of Ute.");
10769 sprintf(eos(buf), " (%ld)", FemaleTrapUte);
10770 dump(youwere, buf);
10773 if (FemtrapActiveJasieen) {
10774 sprintf(buf, "possessed by the ghost of Jasieen.");
10775 sprintf(eos(buf), " (%ld)", FemaleTrapJasieen);
10776 dump(youwere, buf);
10779 if (FemtrapActiveYasaman) {
10780 sprintf(buf, "possessed by the ghost of Yasaman.");
10781 sprintf(eos(buf), " (%ld)", FemaleTrapYasaman);
10782 dump(youwere, buf);
10785 if (FemtrapActiveMayBritt) {
10786 sprintf(buf, "possessed by the ghost of May-Britt.");
10787 sprintf(eos(buf), " (%ld)", FemaleTrapMayBritt);
10788 dump(youwere, buf);
10791 if (FemtrapActiveKsenia) {
10792 sprintf(buf, "possessed by the ghost of Ksenia.");
10793 sprintf(eos(buf), " (%ld)", FemaleTrapKsenia);
10794 dump(youwere, buf);
10797 if (FemtrapActiveLydia) {
10798 sprintf(buf, "possessed by the ghost of Lydia.");
10799 sprintf(eos(buf), " (%ld)", FemaleTrapLydia);
10800 dump(youwere, buf);
10803 if (FemtrapActiveConny) {
10804 sprintf(buf, "possessed by the ghost of Conny.");
10805 sprintf(eos(buf), " (%ld)", FemaleTrapConny);
10806 dump(youwere, buf);
10809 if (FemtrapActiveKatia) {
10810 sprintf(buf, "possessed by the ghost of Katia.");
10811 sprintf(eos(buf), " (%ld)", FemaleTrapKatia);
10812 dump(youwere, buf);
10815 if (FemtrapActiveMariya) {
10816 sprintf(buf, "possessed by the ghost of Mariya.");
10817 sprintf(eos(buf), " (%ld)", FemaleTrapMariya);
10818 dump(youwere, buf);
10821 if (FemtrapActiveElise) {
10822 sprintf(buf, "possessed by the ghost of Elise.");
10823 sprintf(eos(buf), " (%ld)", FemaleTrapElise);
10824 dump(youwere, buf);
10827 if (FemtrapActiveRonja) {
10828 sprintf(buf, "possessed by the ghost of Ronja.");
10829 sprintf(eos(buf), " (%ld)", FemaleTrapRonja);
10830 dump(youwere, buf);
10833 if (FemtrapActiveAriane) {
10834 sprintf(buf, "possessed by the ghost of Ariane.");
10835 sprintf(eos(buf), " (%ld)", FemaleTrapAriane);
10836 dump(youwere, buf);
10839 if (FemtrapActiveJohanna) {
10840 sprintf(buf, "possessed by the ghost of Johanna.");
10841 sprintf(eos(buf), " (%ld)", FemaleTrapJohanna);
10842 dump(youwere, buf);
10845 if (FemtrapActiveInge) {
10846 sprintf(buf, "possessed by the ghost of Inge.");
10847 sprintf(eos(buf), " (%ld)", FemaleTrapInge);
10848 dump(youwere, buf);
10851 if (FemtrapActiveSarah) {
10852 sprintf(buf, "possessed by the ghost of Sarah.");
10853 sprintf(eos(buf), " (%ld)", FemaleTrapSarah);
10854 dump(youwere, buf);
10857 if (FemtrapActiveClaudia) {
10858 sprintf(buf, "possessed by the ghost of Claudia.");
10859 sprintf(eos(buf), " (%ld)", FemaleTrapClaudia);
10860 dump(youwere, buf);
10863 if (FemtrapActiveLudgera) {
10864 sprintf(buf, "possessed by the ghost of Ludgera.");
10865 sprintf(eos(buf), " (%ld)", FemaleTrapLudgera);
10866 dump(youwere, buf);
10869 if (FemtrapActiveKati) {
10870 sprintf(buf, "possessed by the ghost of Kati.");
10871 sprintf(eos(buf), " (%ld)", FemaleTrapKati);
10872 dump(youwere, buf);
10875 if (FemtrapActiveAnastasia) {
10876 sprintf(buf, "possessed by the ghost of Anastasia.");
10877 sprintf(eos(buf), " (%ld)", FemaleTrapAnastasia);
10878 dump(youwere, buf);
10881 if (FemtrapActiveJessica) {
10882 sprintf(buf, "possessed by the ghost of Jessica.");
10883 sprintf(eos(buf), " (%ld)", FemaleTrapJessica);
10884 dump(youwere, buf);
10887 if (FemtrapActiveSolvejg) {
10888 sprintf(buf, "possessed by the ghost of Solvejg.");
10889 sprintf(eos(buf), " (%ld)", FemaleTrapSolvejg);
10890 dump(youwere, buf);
10893 if (FemtrapActiveWendy) {
10894 sprintf(buf, "possessed by the ghost of Wendy.");
10895 sprintf(eos(buf), " (%ld)", FemaleTrapWendy);
10896 dump(youwere, buf);
10899 if (FemtrapActiveKatharina) {
10900 sprintf(buf, "possessed by the ghost of Katharina.");
10901 sprintf(eos(buf), " (%ld)", FemaleTrapKatharina);
10902 dump(youwere, buf);
10905 if (FemtrapActiveElena) {
10906 sprintf(buf, "possessed by the ghost of Elena.");
10907 sprintf(eos(buf), " (%ld)", FemaleTrapElena);
10908 dump(youwere, buf);
10911 if (FemtrapActiveThai) {
10912 sprintf(buf, "possessed by the ghost of Thai.");
10913 sprintf(eos(buf), " (%ld)", FemaleTrapThai);
10914 dump(youwere, buf);
10917 if (FemtrapActiveElif) {
10918 sprintf(buf, "possessed by the ghost of Elif.");
10919 sprintf(eos(buf), " (%ld)", FemaleTrapElif);
10920 dump(youwere, buf);
10923 if (FemtrapActiveNadja) {
10924 sprintf(buf, "possessed by the ghost of Nadja.");
10925 sprintf(eos(buf), " (%ld)", FemaleTrapNadja);
10926 dump(youwere, buf);
10929 if (FemtrapActiveSandra) {
10930 sprintf(buf, "possessed by the ghost of Sandra.");
10931 sprintf(eos(buf), " (%ld)", FemaleTrapSandra);
10932 dump(youwere, buf);
10935 if (FemtrapActiveNatalje) {
10936 sprintf(buf, "possessed by the ghost of Natalje.");
10937 sprintf(eos(buf), " (%ld)", FemaleTrapNatalje);
10938 dump(youwere, buf);
10941 if (FemtrapActiveJeanetta) {
10942 sprintf(buf, "possessed by the ghost of Jeanetta.");
10943 sprintf(eos(buf), " (%ld)", FemaleTrapJeanetta);
10944 dump(youwere, buf);
10947 if (FemtrapActiveYvonne) {
10948 sprintf(buf, "possessed by the ghost of Yvonne.");
10949 sprintf(eos(buf), " (%ld)", FemaleTrapYvonne);
10950 dump(youwere, buf);
10953 if (FemtrapActiveMaurah) {
10954 sprintf(buf, "possessed by the ghost of Maurah.");
10955 sprintf(eos(buf), " (%ld)", FemaleTrapMaurah);
10956 dump(youwere, buf);
10959 if (FemtrapActiveMeltem) {
10960 sprintf(buf, "possessed by the ghost of Meltem.");
10961 sprintf(eos(buf), " (%ld)", FemaleTrapMeltem);
10962 dump(youwere, buf);
10965 if (FemtrapActiveNelly) {
10966 sprintf(buf, "possessed by the ghost of Nelly.");
10967 sprintf(eos(buf), " (%ld)", FemaleTrapNelly);
10968 dump(youwere, buf);
10971 if (FemtrapActiveEveline) {
10972 sprintf(buf, "possessed by the ghost of Eveline.");
10973 sprintf(eos(buf), " (%ld)", FemaleTrapEveline);
10974 dump(youwere, buf);
10977 if (FemtrapActiveKarin) {
10978 sprintf(buf, "possessed by the ghost of Karin.");
10979 sprintf(eos(buf), " (%ld)", FemaleTrapKarin);
10980 dump(youwere, buf);
10983 if (FemtrapActiveJuen) {
10984 sprintf(buf, "possessed by the ghost of Juen.");
10985 sprintf(eos(buf), " (%ld)", FemaleTrapJuen);
10986 dump(youwere, buf);
10989 if (FemtrapActiveKristina) {
10990 sprintf(buf, "possessed by the ghost of Kristina.");
10991 sprintf(eos(buf), " (%ld)", FemaleTrapKristina);
10992 dump(youwere, buf);
10995 if (FemtrapActiveLou) {
10996 sprintf(buf, "possessed by the ghost of Lou.");
10997 sprintf(eos(buf), " (%ld)", FemaleTrapLou);
10998 dump(youwere, buf);
11001 if (FemtrapActiveAlmut) {
11002 sprintf(buf, "possessed by the ghost of Almut.");
11003 sprintf(eos(buf), " (%ld)", FemaleTrapAlmut);
11004 dump(youwere, buf);
11007 if (FemtrapActiveJulietta) {
11008 sprintf(buf, "possessed by the ghost of Julietta.");
11009 sprintf(eos(buf), " (%ld)", FemaleTrapJulietta);
11010 dump(youwere, buf);
11013 if (FemtrapActiveArabella) {
11014 sprintf(buf, "possessed by the ghost of Arabella.");
11015 sprintf(eos(buf), " (%ld)", FemaleTrapArabella);
11016 dump(youwere, buf);
11019 if (FemtrapActiveKristin) {
11020 sprintf(buf, "possessed by the ghost of Kristin.");
11021 sprintf(eos(buf), " (%ld)", FemaleTrapKristin);
11022 dump(youwere, buf);
11025 if (FemtrapActiveAnna) {
11026 sprintf(buf, "possessed by the ghost of Anna.");
11027 sprintf(eos(buf), " (%ld)", FemaleTrapAnna);
11028 dump(youwere, buf);
11031 if (FemtrapActiveRuea) {
11032 sprintf(buf, "possessed by the ghost of Ruea.");
11033 sprintf(eos(buf), " (%ld)", FemaleTrapRuea);
11034 dump(youwere, buf);
11037 if (FemtrapActiveDora) {
11038 sprintf(buf, "possessed by the ghost of Dora.");
11039 sprintf(eos(buf), " (%ld)", FemaleTrapDora);
11040 dump(youwere, buf);
11043 if (FemtrapActiveMarike) {
11044 sprintf(buf, "possessed by the ghost of Marike.");
11045 sprintf(eos(buf), " (%ld)", FemaleTrapMarike);
11046 dump(youwere, buf);
11049 if (FemtrapActiveJette) {
11050 sprintf(buf, "possessed by the ghost of Jette.");
11051 sprintf(eos(buf), " (%ld)", FemaleTrapJette);
11052 dump(youwere, buf);
11055 if (FemtrapActiveIna) {
11056 sprintf(buf, "possessed by the ghost of Ina.");
11057 sprintf(eos(buf), " (%ld)", FemaleTrapIna);
11058 dump(youwere, buf);
11061 if (FemtrapActiveSing) {
11062 sprintf(buf, "possessed by the ghost of Sing.");
11063 sprintf(eos(buf), " (%ld)", FemaleTrapSing);
11064 dump(youwere, buf);
11067 if (FemtrapActiveVictoria) {
11068 sprintf(buf, "possessed by the ghost of Victoria.");
11069 sprintf(eos(buf), " (%ld)", FemaleTrapVictoria);
11070 dump(youwere, buf);
11073 if (FemtrapActiveMelissa) {
11074 sprintf(buf, "possessed by the ghost of Melissa.");
11075 sprintf(eos(buf), " (%ld)", FemaleTrapMelissa);
11076 dump(youwere, buf);
11079 if (FemtrapActiveAnita) {
11080 sprintf(buf, "possessed by the ghost of Anita.");
11081 sprintf(eos(buf), " (%ld)", FemaleTrapAnita);
11082 dump(youwere, buf);
11085 if (FemtrapActiveHenrietta) {
11086 sprintf(buf, "possessed by the ghost of Henrietta.");
11087 sprintf(eos(buf), " (%ld)", FemaleTrapHenrietta);
11088 dump(youwere, buf);
11091 if (FemtrapActiveVerena) {
11092 sprintf(buf, "possessed by the ghost of Verena.");
11093 sprintf(eos(buf), " (%ld)", FemaleTrapVerena);
11094 dump(youwere, buf);
11097 if (FemtrapActiveAnnemarie) {
11098 sprintf(buf, "possessed by the ghost of Annemarie.");
11099 sprintf(eos(buf), " (%ld)", FemaleTrapAnnemarie);
11100 dump(youwere, buf);
11103 if (FemtrapActiveJil) {
11104 sprintf(buf, "possessed by the ghost of Jil.");
11105 sprintf(eos(buf), " (%ld)", FemaleTrapJil);
11106 dump(youwere, buf);
11109 if (FemtrapActiveJana) {
11110 sprintf(buf, "possessed by the ghost of Jana.");
11111 sprintf(eos(buf), " (%ld)", FemaleTrapJana);
11112 dump(youwere, buf);
11115 if (FemtrapActiveKatrin) {
11116 sprintf(buf, "possessed by the ghost of Katrin.");
11117 sprintf(eos(buf), " (%ld)", FemaleTrapKatrin);
11118 dump(youwere, buf);
11121 if (FemtrapActiveGudrun) {
11122 sprintf(buf, "possessed by the ghost of Gudrun.");
11123 sprintf(eos(buf), " (%ld)", FemaleTrapGudrun);
11124 dump(youwere, buf);
11127 if (FemtrapActiveElla) {
11128 sprintf(buf, "possessed by the ghost of Ella.");
11129 sprintf(eos(buf), " (%ld)", FemaleTrapElla);
11130 dump(youwere, buf);
11133 if (FemtrapActiveManuela) {
11134 sprintf(buf, "possessed by the ghost of Manuela.");
11135 sprintf(eos(buf), " (%ld)", FemaleTrapManuela);
11136 dump(youwere, buf);
11139 if (FemtrapActiveJennifer) {
11140 sprintf(buf, "possessed by the ghost of Jennifer.");
11141 sprintf(eos(buf), " (%ld)", FemaleTrapJennifer);
11142 dump(youwere, buf);
11145 if (FemtrapActivePatricia) {
11146 sprintf(buf, "possessed by the ghost of Patricia.");
11147 sprintf(eos(buf), " (%ld)", FemaleTrapPatricia);
11148 dump(youwere, buf);
11151 if (FemtrapActiveAntje) {
11152 sprintf(buf, "possessed by the ghost of Antje.");
11153 sprintf(eos(buf), " (%ld)", FemaleTrapAntje);
11154 dump(youwere, buf);
11157 if (FemtrapActiveAntjeX) {
11158 sprintf(buf, "possessed by the special ghost of Antje.");
11159 sprintf(eos(buf), " (%ld)", FemaleTrapAntjeX);
11160 dump(youwere, buf);
11163 if (FemtrapActiveKerstin) {
11164 sprintf(buf, "possessed by the ghost of Kerstin.");
11165 sprintf(eos(buf), " (%ld)", FemaleTrapKerstin);
11166 dump(youwere, buf);
11169 if (FemtrapActiveLaura) {
11170 sprintf(buf, "possessed by the ghost of Laura.");
11171 sprintf(eos(buf), " (%ld)", FemaleTrapLaura);
11172 dump(youwere, buf);
11175 if (FemtrapActiveLarissa) {
11176 sprintf(buf, "possessed by the ghost of Larissa.");
11177 sprintf(eos(buf), " (%ld)", FemaleTrapLarissa);
11178 dump(youwere, buf);
11181 if (FemtrapActiveNora) {
11182 sprintf(buf, "possessed by the ghost of Nora.");
11183 sprintf(eos(buf), " (%ld)", FemaleTrapNora);
11184 dump(youwere, buf);
11187 if (FemtrapActiveNatalia) {
11188 sprintf(buf, "possessed by the ghost of Natalia.");
11189 sprintf(eos(buf), " (%ld)", FemaleTrapNatalia);
11190 if (flags.female && (u.nataliacycletimer < u.nataliafollicularend)) sprintf(eos(buf), " (follicular phase)");
11191 else if (flags.female && (u.nataliacycletimer < (u.nataliafollicularend + u.natalialutealstart) )) sprintf(eos(buf), " (menstrual phase)");
11192 else if (flags.female && (u.nataliacycletimer >= (u.nataliafollicularend + u.natalialutealstart) )) sprintf(eos(buf), " (luteal phase)");
11193 dump(youwere, buf);
11196 if (FemtrapActiveSusanne) {
11197 sprintf(buf, "possessed by the ghost of Susanne.");
11198 sprintf(eos(buf), " (%ld)", FemaleTrapSusanne);
11199 dump(youwere, buf);
11202 if (FemtrapActiveLisa) {
11203 sprintf(buf, "possessed by the ghost of Lisa.");
11204 sprintf(eos(buf), " (%ld)", FemaleTrapLisa);
11205 dump(youwere, buf);
11208 if (FemtrapActiveBridghitte) {
11209 sprintf(buf, "possessed by the ghost of Bridghitte.");
11210 sprintf(eos(buf), " (%ld)", FemaleTrapBridghitte);
11211 dump(youwere, buf);
11214 if (FemtrapActiveJulia) {
11215 sprintf(buf, "possessed by the ghost of Julia.");
11216 sprintf(eos(buf), " (%ld)", FemaleTrapJulia);
11217 dump(youwere, buf);
11220 if (FemtrapActiveNicole) {
11221 sprintf(buf, "possessed by the ghost of Nicole.");
11222 sprintf(eos(buf), " (%ld)", FemaleTrapNicole);
11223 dump(youwere, buf);
11226 if (FemtrapActiveRita) {
11227 sprintf(buf, "possessed by the ghost of Rita.");
11228 sprintf(eos(buf), " (%ld)", FemaleTrapRita);
11229 dump(youwere, buf);
11232 if (FemtrapActiveJanina) {
11233 sprintf(buf, "possessed by the ghost of Janina.");
11234 sprintf(eos(buf), " (%ld)", FemaleTrapJanina);
11235 dump(youwere, buf);
11238 if (FemtrapActiveRosa) {
11239 sprintf(buf, "possessed by the ghost of Rosa.");
11240 sprintf(eos(buf), " (%ld)", FemaleTrapRosa);
11241 dump(youwere, buf);
11244 if (Race_if(PM_PERVERT)) {
11245 sprintf(buf, "had sex the last time this many turns ago:");
11246 sprintf(eos(buf), " %d", u.pervertsex);
11247 dump(youhad, buf);
11250 if (Race_if(PM_PERVERT)) {
11251 sprintf(buf, "prayed the last time this many turns ago:");
11252 sprintf(eos(buf), " %d", u.pervertpray);
11253 dump(youhad, buf);
11256 if (u.elberethcheese) {
11257 sprintf(buf, "experiencing reduced Elbereth effectiveness");
11258 sprintf(eos(buf), " (%d)", u.elberethcheese);
11259 dump(youwere, buf);
11262 if (u.bucskill) {
11263 sprintf(buf, "%d points of BUC expertise", u.bucskill);
11264 dump(youhad, buf);
11266 if (u.enchantrecskill) {
11267 sprintf(buf, "%d points of enchantment expertise", u.enchantrecskill);
11268 dump(youhad, buf);
11270 if (u.weapchantrecskill) {
11271 sprintf(buf, "%d points of weapon enchantment expertise", u.weapchantrecskill);
11272 dump(youhad, buf);
11275 if (u.hangupamount) {
11276 sprintf(buf, "used the hangup function, which means you're either a FILTHY CHEAT0R or you have a shaky internet connection. Hopefully it's the latter so Amy doesn't have to reinstate the hangup penalty.");
11277 sprintf(eos(buf), " (%d)", u.hangupamount);
11278 dump(youhad, buf);
11282 if (Race_if(PM_FELID)) {
11283 sprintf(buf, "%d ", u.felidlives);
11284 sprintf(eos(buf), "lives left");
11285 dump(youhad, buf);
11287 if (u.homosexual == 0) {
11288 sprintf(buf, "not decided on your sexuality yet");
11289 dump(youhad, buf);
11291 if (u.homosexual == 1) {
11292 sprintf(buf, "heterosexual");
11293 dump(youwere, buf);
11295 if (u.homosexual == 2) {
11296 sprintf(buf, "homosexual");
11297 dump(youwere, buf);
11300 if (u.returntimer) {
11301 sprintf(buf, "waiting to be recalled.");
11302 sprintf(eos(buf), " (%d)", u.returntimer);
11303 dump(youwere, buf);
11306 if (Role_if(PM_HUSSY)) {
11307 sprintf(buf, "%ld ", (u.hussyhurtturn - moves));
11308 sprintf(eos(buf), "turns left to hit a guy.");
11309 dump(youhad, buf);
11310 sprintf(buf, "%ld ", (u.hussykillturn - moves));
11311 sprintf(eos(buf), "turns left to defeat a guy.");
11312 dump(youhad, buf);
11315 if (u.contamination) {
11316 if (u.contamination >= 1000) sprintf(buf, "suffering from fatal contamination. Health and mana regeneration were reduced.");
11317 else if (u.contamination >= 800) sprintf(buf, "suffering from lethal contamination.");
11318 else if (u.contamination >= 600) sprintf(buf, "suffering from severe contamination.");
11319 else if (u.contamination >= 400) sprintf(buf, "suffering from contamination.");
11320 else if (u.contamination >= 200) sprintf(buf, "suffering from light contamination.");
11321 else if (u.contamination >= 100) sprintf(buf, "suffering from minor contamination.");
11322 else if (u.contamination >= 1) sprintf(buf, "suffering from very slight contamination.");
11323 sprintf(eos(buf), " (%d)", u.contamination);
11324 dump(youwere, buf);
11327 if (u.copwantedlevel) {
11328 sprintf(buf, "being chased by the kops.");
11329 sprintf(eos(buf), " (%d)", u.copwantedlevel);
11330 dump(youwere, buf);
11333 if (u.treesquadwantedlevel) {
11334 sprintf(buf, "being chased by the tree squad.");
11335 sprintf(eos(buf), " (%d)", u.treesquadwantedlevel);
11336 dump(youwere, buf);
11339 if (u.pompejiwantedlevel) {
11340 sprintf(buf, "being chased by the pompeji squad.");
11341 sprintf(eos(buf), " (%d)", u.pompejiwantedlevel);
11342 dump(youwere, buf);
11345 if (u.pompejipermanentrecord) {
11346 sprintf(buf, "a permament pompeji record.");
11347 sprintf(eos(buf), " (%d)", u.pompejipermanentrecord);
11348 dump(youhad, buf);
11351 if (u.fluidatorwantedlevel) {
11352 sprintf(buf, "being chased by the fluidator squad.");
11353 sprintf(eos(buf), " (%d)", u.fluidatorwantedlevel);
11354 dump(youwere, buf);
11357 if (u.bulletatorwantedlevel) {
11358 sprintf(buf, "being chased by the bulletator squad.");
11359 sprintf(eos(buf), " (%d)", u.bulletatorwantedlevel);
11360 dump(youwere, buf);
11363 if (u.gmmailsreceived) {
11364 sprintf(buf, "received monster-summoning mail from AmyBSOD, the Game Master.");
11365 sprintf(eos(buf), " (%d)", u.gmmailsreceived);
11366 dump(youhad, buf);
11369 if (TimeStopped) {
11370 sprintf(buf, "stopped the flow of time.");
11371 sprintf(eos(buf), " (%ld)", TimeStopped);
11372 dump(youhad, buf);
11375 if (u.drippingtread) {
11376 sprintf(buf, "dripping elements.");
11377 sprintf(eos(buf), " (%d)", u.drippingtread);
11378 dump(youwere, buf);
11381 if (u.geolysis) {
11382 sprintf(buf, "using geolysis.");
11383 sprintf(eos(buf), " (%d)", u.geolysis);
11384 dump(youwere, buf);
11387 if (u.disruptionshield) {
11388 sprintf(buf, "your disruption shield up.");
11389 sprintf(eos(buf), " (%d)", u.disruptionshield);
11390 dump(youhad, buf);
11393 if (u.inertiacontrol) {
11394 sprintf(buf, "controlling the flow of a spell.");
11395 sprintf(eos(buf), " (%d)", u.inertiacontrol);
11396 dump(youwere, buf);
11399 if (u.sterilized) {
11400 sprintf(buf, "sterilized the air around you.");
11401 sprintf(eos(buf), " (%d)", u.sterilized);
11402 dump(youhad, buf);
11405 if (u.holyshield) {
11406 sprintf(buf, "your holy shield up.");
11407 sprintf(eos(buf), " (%d)", u.holyshield);
11408 dump(youhad, buf);
11411 if (u.berserktime) {
11412 sprintf(buf, "berserk.");
11413 sprintf(eos(buf), " (%d)", u.berserktime);
11414 dump(youwere, buf);
11417 if (u.magicshield) {
11418 sprintf(buf, "your magic shield up.");
11419 sprintf(eos(buf), " (%d)", u.magicshield);
11420 dump(youhad, buf);
11423 if (u.combatcommand) {
11424 sprintf(buf, "used the combat command.");
11425 sprintf(eos(buf), " (%d)", u.combatcommand);
11426 dump(youhad, buf);
11429 if (u.burrowed) {
11430 sprintf(buf, "burrowed into the ground.");
11431 sprintf(eos(buf), " (%d)", u.burrowed);
11432 dump(youwere, buf);
11435 if (u.stasistime) {
11436 sprintf(buf, "in stasis, and the monsters were too.");
11437 sprintf(eos(buf), " (%d)", u.stasistime);
11438 dump(youwere, buf);
11441 if (u.powerfailure) {
11442 sprintf(buf, "experiencing a power failure.");
11443 sprintf(eos(buf), " (%d)", u.powerfailure);
11444 dump(youwere, buf);
11447 if (u.tunnelized) {
11448 sprintf(buf, "reduced armor class due to tunneling dirt on your clothes.");
11449 sprintf(eos(buf), " (%d)", u.tunnelized);
11450 dump(youhad, buf);
11453 if (u.nailpolish) {
11454 sprintf(buf, "applied nail polish.");
11455 sprintf(eos(buf), " (%d)", u.nailpolish);
11456 dump(youhad, buf);
11459 if (u.enchantspell) {
11460 sprintf(buf, "enchanted your weapon with fire.");
11461 sprintf(eos(buf), " (%d)", u.enchantspell);
11462 dump(youhad, buf);
11465 if (u.thornspell) {
11466 sprintf(buf, "thorns.");
11467 sprintf(eos(buf), " (%d)", u.thornspell);
11468 dump(youhad, buf);
11471 if (u.egglayingtimeout) {
11472 sprintf(buf, "to wait until you can lay eggs again.");
11473 sprintf(eos(buf), " (%d)", u.egglayingtimeout);
11474 dump(youhad, buf);
11477 if (u.swappositioncount) {
11478 sprintf(buf, "going to swap positions with the next monster you move into.");
11479 sprintf(eos(buf), " (%d)", u.swappositioncount);
11480 dump(youwere, buf);
11483 if (u.contingencyturns) {
11484 sprintf(buf, "signed up a contract with the reaper.");
11485 sprintf(eos(buf), " (%d)", u.contingencyturns);
11486 dump(youhad, buf);
11489 if (u.horsehopturns) {
11490 sprintf(buf, "the ability to jump as long as you're riding.");
11491 sprintf(eos(buf), " (%d)", u.horsehopturns);
11492 dump(youhad, buf);
11495 if (u.bodyfluideffect) {
11496 sprintf(buf, "very acidic skin.");
11497 sprintf(eos(buf), " (%d)", u.bodyfluideffect);
11498 dump(youhad, buf);
11501 if (u.antitelespelltimeout) {
11502 sprintf(buf, "erected an anti-teleportation field.");
11503 sprintf(eos(buf), " (%d)", u.antitelespelltimeout);
11504 dump(youhad, buf);
11507 if (u.breathenhancetimer) {
11508 sprintf(buf, "magically enhanced breath.");
11509 sprintf(eos(buf), " (%d)", u.breathenhancetimer);
11510 dump(youhad, buf);
11513 if (u.snaildigging) {
11514 sprintf(buf, "to wait until you can fire another digging ray.");
11515 sprintf(eos(buf), " (%d)", u.snaildigging);
11516 dump(youhad, buf);
11519 if (u.hussyperfume) {
11520 sprintf(buf, "to wait until you can spread the perfume again.");
11521 sprintf(eos(buf), " (%d)", u.hussyperfume);
11522 dump(youhad, buf);
11525 if (u.irahapoison) {
11526 sprintf(buf, "to wait until you can poison your weapon again.");
11527 sprintf(eos(buf), " (%d)", u.irahapoison);
11528 dump(youhad, buf);
11531 if (Role_if(PM_JANITOR)) {
11532 sprintf(buf, "the following amount of trash in your trash can:");
11533 sprintf(eos(buf), " %d", u.garbagecleaned);
11534 dump(youhad, buf);
11537 if (Role_if(PM_JANITOR) && u.garbagetrucktime) {
11538 sprintf(buf, "called the garbage truck, and it will arrive in");
11539 sprintf(eos(buf), " %d turns", u.garbagetrucktime);
11540 dump(youhad, buf);
11543 if (u.walscholarpass) {
11544 sprintf(buf, "able to pass through grave walls.");
11545 sprintf(eos(buf), " (%d)", u.walscholarpass);
11546 dump(youwere, buf);
11549 if (u.demagogueabilitytimer && isdemagogue) {
11550 sprintf(buf, "to wait until you can use your special recursion.");
11551 sprintf(eos(buf), " (%d)", u.demagogueabilitytimer);
11552 dump(youhad, buf);
11555 if (u.acutraining) {
11556 sprintf(buf, "double skill training.");
11557 sprintf(eos(buf), " (%d)", u.acutraining);
11558 dump(youhad, buf);
11561 if (u.dragonpolymorphtime) {
11562 sprintf(buf, "to wait until you can polymorph into a dragon again.");
11563 sprintf(eos(buf), " (%d)", u.dragonpolymorphtime);
11564 dump(youhad, buf);
11567 if (u.werepolymorphtime) {
11568 sprintf(buf, "to wait until you can polymorph into a werecreature again.");
11569 sprintf(eos(buf), " (%d)", u.werepolymorphtime);
11570 dump(youhad, buf);
11574 if (UseTheForce) {
11575 sprintf(buf, StrongUseTheForce ? "able to use the force like a jedi grandmaster" : "able to use the force like a true jedi");
11576 dump(youwere, buf);
11579 if (u.uprops[SENSORY_DEPRIVATION].extrinsic) {
11580 sprintf(buf, "sensory deprivation.");
11581 dump(youhad, buf);
11584 if (NoFire_resistance) {
11585 sprintf(buf, "prevented from having fire resistance");
11586 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_FIRE_RES].intrinsic);
11587 dump(youwere, buf);
11589 if (NoCold_resistance) {
11590 sprintf(buf, "prevented from having cold resistance");
11591 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_COLD_RES].intrinsic);
11592 dump(youwere, buf);
11594 if (NoSleep_resistance) {
11595 sprintf(buf, "prevented from having sleep resistance");
11596 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_SLEEP_RES].intrinsic);
11597 dump(youwere, buf);
11599 if (NoDisint_resistance) {
11600 sprintf(buf, "prevented from having disintegration resistance");
11601 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_DISINT_RES].intrinsic);
11602 dump(youwere, buf);
11604 if (NoShock_resistance) {
11605 sprintf(buf, "prevented from having shock resistance");
11606 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_SHOCK_RES].intrinsic);
11607 dump(youwere, buf);
11609 if (NoPoison_resistance) {
11610 sprintf(buf, "prevented from having poison resistance");
11611 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_POISON_RES].intrinsic);
11612 dump(youwere, buf);
11614 if (NoDrain_resistance) {
11615 sprintf(buf, "prevented from having drain resistance");
11616 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_DRAIN_RES].intrinsic);
11617 dump(youwere, buf);
11619 if (NoSick_resistance) {
11620 sprintf(buf, "prevented from having sickness resistance");
11621 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_SICK_RES].intrinsic);
11622 dump(youwere, buf);
11624 if (NoAntimagic_resistance) {
11625 sprintf(buf, "prevented from having magic resistance");
11626 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_ANTIMAGIC].intrinsic);
11627 dump(youwere, buf);
11629 if (NoAcid_resistance) {
11630 sprintf(buf, "prevented from having acid resistance");
11631 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_ACID_RES].intrinsic);
11632 dump(youwere, buf);
11634 if (NoStone_resistance) {
11635 sprintf(buf, "prevented from having petrification resistance");
11636 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_STONE_RES].intrinsic);
11637 dump(youwere, buf);
11639 if (NoFear_resistance) {
11640 sprintf(buf, "prevented from having fear resistance");
11641 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_FEAR_RES].intrinsic);
11642 dump(youwere, buf);
11644 if (NoSee_invisible) {
11645 sprintf(buf, "prevented from having see invisible");
11646 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_SEE_INVIS].intrinsic);
11647 dump(youwere, buf);
11649 if (NoManaleech) {
11650 sprintf(buf, "prevented from having manaleech");
11651 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_MANALEECH].intrinsic);
11652 dump(youwere, buf);
11654 if (NoPeacevision) {
11655 sprintf(buf, "prevented from having peacevision");
11656 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_PEACEVISION].intrinsic);
11657 dump(youwere, buf);
11659 if (NoTelepat) {
11660 sprintf(buf, "prevented from having telepathy");
11661 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_TELEPAT].intrinsic);
11662 dump(youwere, buf);
11664 if (NoWarning) {
11665 sprintf(buf, "prevented from having warning");
11666 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_WARNING].intrinsic);
11667 dump(youwere, buf);
11669 if (NoSearching) {
11670 sprintf(buf, "prevented from having automatic searching");
11671 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_SEARCHING].intrinsic);
11672 dump(youwere, buf);
11674 if (NoClairvoyant) {
11675 sprintf(buf, "prevented from having clairvoyance");
11676 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_CLAIRVOYANT].intrinsic);
11677 dump(youwere, buf);
11679 if (NoInfravision) {
11680 sprintf(buf, "prevented from having infravision");
11681 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_INFRAVISION].intrinsic);
11682 dump(youwere, buf);
11684 if (NoDetect_monsters) {
11685 sprintf(buf, "prevented from having detect monsters");
11686 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_DETECT_MONSTERS].intrinsic);
11687 dump(youwere, buf);
11689 if (NoInvisible) {
11690 sprintf(buf, "prevented from having invisibility");
11691 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_INVIS].intrinsic);
11692 dump(youwere, buf);
11694 if (NoDisplaced) {
11695 sprintf(buf, "prevented from having displacement");
11696 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_DISPLACED].intrinsic);
11697 dump(youwere, buf);
11699 if (NoStealth) {
11700 sprintf(buf, "prevented from having stealth");
11701 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_STEALTH].intrinsic);
11702 dump(youwere, buf);
11704 if (NoJumping) {
11705 sprintf(buf, "prevented from having jumping");
11706 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_JUMPING].intrinsic);
11707 dump(youwere, buf);
11709 if (NoTeleport_control) {
11710 sprintf(buf, "prevented from having teleport control");
11711 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_TELEPORT_CONTROL].intrinsic);
11712 dump(youwere, buf);
11714 if (NoFlying) {
11715 sprintf(buf, "prevented from having flying");
11716 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_FLYING].intrinsic);
11717 dump(youwere, buf);
11719 if (NoBreathless) {
11720 sprintf(buf, "prevented from having magical breathing");
11721 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_MAGICAL_BREATHING].intrinsic);
11722 dump(youwere, buf);
11724 if (NoPasses_walls) {
11725 sprintf(buf, "prevented from having phasing");
11726 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_PASSES_WALLS].intrinsic);
11727 dump(youwere, buf);
11729 if (NoSlow_digestion) {
11730 sprintf(buf, "prevented from having slow digestion");
11731 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_SLOW_DIGESTION].intrinsic);
11732 dump(youwere, buf);
11734 if (NoHalf_spell_damage) {
11735 sprintf(buf, "prevented from having half spell damage");
11736 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_HALF_SPDAM].intrinsic);
11737 dump(youwere, buf);
11739 if (NoHalf_physical_damage) {
11740 sprintf(buf, "prevented from having half physical damage");
11741 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_HALF_PHDAM].intrinsic);
11742 dump(youwere, buf);
11744 if (NoRegeneration) {
11745 sprintf(buf, "prevented from having regeneration");
11746 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_REGENERATION].intrinsic);
11747 dump(youwere, buf);
11749 if (NoEnergy_regeneration) {
11750 sprintf(buf, "prevented from having mana regeneration");
11751 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_ENERGY_REGENERATION].intrinsic);
11752 dump(youwere, buf);
11754 if (NoPolymorph_control) {
11755 sprintf(buf, "prevented from having polymorph control");
11756 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_POLYMORPH_CONTROL].intrinsic);
11757 dump(youwere, buf);
11759 if (NoFast) {
11760 sprintf(buf, "prevented from having speed");
11761 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_FAST].intrinsic);
11762 dump(youwere, buf);
11764 if (NoReflecting) {
11765 sprintf(buf, "prevented from having reflection");
11766 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_REFLECTING].intrinsic);
11767 dump(youwere, buf);
11769 if (NoKeen_memory) {
11770 sprintf(buf, "prevented from having keen memory");
11771 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_KEEN_MEMORY].intrinsic);
11772 dump(youwere, buf);
11774 if (NoSight_bonus) {
11775 sprintf(buf, "prevented from having a sight bonus");
11776 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_SIGHT_BONUS].intrinsic);
11777 dump(youwere, buf);
11779 if (NoVersus_curses) {
11780 sprintf(buf, "prevented from having curse resistance");
11781 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_VERSUS_CURSES].intrinsic);
11782 dump(youwere, buf);
11785 if (NoStun_resist) {
11786 sprintf(buf, "prevented from having stun resistance");
11787 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_STUN_RES].intrinsic);
11788 dump(youwere, buf);
11790 if (NoConf_resist) {
11791 sprintf(buf, "prevented from having confusion resistance");
11792 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_CONF_RES].intrinsic);
11793 dump(youwere, buf);
11795 if (NoPsi_resist) {
11796 sprintf(buf, "prevented from having psi resistance");
11797 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_PSI_RES].intrinsic);
11798 dump(youwere, buf);
11800 if (NoDouble_attack) {
11801 sprintf(buf, "prevented from having double attacks");
11802 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_DOUBLE_ATTACK].intrinsic);
11803 dump(youwere, buf);
11805 if (NoQuad_attack) {
11806 sprintf(buf, "prevented from having quad attacks");
11807 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_QUAD_ATTACK].intrinsic);
11808 dump(youwere, buf);
11811 if (NoFree_action) {
11812 sprintf(buf, "prevented from having free action");
11813 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_FREE_ACTION].intrinsic);
11814 dump(youwere, buf);
11817 if (NoHallu_party) {
11818 sprintf(buf, "prevented from hallu partying");
11819 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_HALLU_PARTY].intrinsic);
11820 dump(youwere, buf);
11823 if (NoDrunken_boxing) {
11824 sprintf(buf, "prevented from drunken boxing");
11825 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_DRUNKEN_BOXING].intrinsic);
11826 dump(youwere, buf);
11829 if (NoStunnopathy) {
11830 sprintf(buf, "prevented from having stunnopathy");
11831 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_STUNNOPATHY].intrinsic);
11832 dump(youwere, buf);
11835 if (NoNumbopathy) {
11836 sprintf(buf, "prevented from having numbopathy");
11837 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_NUMBOPATHY].intrinsic);
11838 dump(youwere, buf);
11841 if (NoDimmopathy) {
11842 sprintf(buf, "prevented from having dimmopathy");
11843 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_DIMMOPATHY].intrinsic);
11844 dump(youwere, buf);
11847 if (NoFreezopathy) {
11848 sprintf(buf, "prevented from having freezopathy");
11849 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_FREEZOPATHY].intrinsic);
11850 dump(youwere, buf);
11853 if (NoStoned_chiller) {
11854 sprintf(buf, "prevented from being a stoned chiller");
11855 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_STONED_CHILLER].intrinsic);
11856 dump(youwere, buf);
11859 if (NoCorrosivity) {
11860 sprintf(buf, "prevented from having corrosivity");
11861 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_CORROSIVITY].intrinsic);
11862 dump(youwere, buf);
11865 if (NoFear_factor) {
11866 sprintf(buf, "prevented from having an increased fear factor");
11867 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_FEAR_FACTOR].intrinsic);
11868 dump(youwere, buf);
11871 if (NoBurnopathy) {
11872 sprintf(buf, "prevented from having burnopathy");
11873 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_BURNOPATHY].intrinsic);
11874 dump(youwere, buf);
11877 if (NoSickopathy) {
11878 sprintf(buf, "prevented from having sickopathy");
11879 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_SICKOPATHY].intrinsic);
11880 dump(youwere, buf);
11883 if (NoWonderlegs) {
11884 sprintf(buf, "prevented from having wonderlegs");
11885 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_WONDERLEGS].intrinsic);
11886 dump(youwere, buf);
11888 if (NoGlib_combat) {
11889 sprintf(buf, "prevented from having glib combat");
11890 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_GLIB_COMBAT].intrinsic);
11891 dump(youwere, buf);
11894 if (NoUseTheForce) {
11895 sprintf(buf, "prevented from using the force like a real jedi");
11896 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_THE_FORCE].intrinsic);
11897 dump(youwere, buf);
11899 if (NoCont_resist) {
11900 sprintf(buf, "prevented from having contamination resistance");
11901 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_CONT_RES].intrinsic);
11902 dump(youwere, buf);
11905 if (NoDiscount_action) {
11906 sprintf(buf, "prevented from having discount action");
11907 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_DISCOUNT_ACTION].intrinsic);
11908 dump(youwere, buf);
11911 if (NoFull_nutrient) {
11912 sprintf(buf, "prevented from having full nutrients");
11913 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_FULL_NUTRIENT].intrinsic);
11914 dump(youwere, buf);
11917 if (NoTechnicality) {
11918 sprintf(buf, "prevented from having technicality");
11919 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_TECHNICALITY].intrinsic);
11920 dump(youwere, buf);
11923 if (NoDefusing) {
11924 sprintf(buf, "prevented from having the defusing ability");
11925 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_DEFUSING].intrinsic);
11926 dump(youwere, buf);
11929 if (NoResistancePiercing) {
11930 sprintf(buf, "prevented from having resistance piercing");
11931 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_RESISTANCE_PIERCING].intrinsic);
11932 dump(youwere, buf);
11935 if (NoMysteryResist) {
11936 sprintf(buf, "prevented from having mystery resistance");
11937 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_MYSTERY_RES].intrinsic);
11938 dump(youwere, buf);
11941 if (NoSpellboost) {
11942 sprintf(buf, "prevented from having spellboost");
11943 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_SPELLBOOST].intrinsic);
11944 dump(youwere, buf);
11947 if (NoMagicFindBonus) {
11948 sprintf(buf, "prevented from having magic find");
11949 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_MAGIC_FIND].intrinsic);
11950 dump(youwere, buf);
11953 if (NoScentView) {
11954 sprintf(buf, "prevented from having scent view");
11955 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_SCENT_VIEW].intrinsic);
11956 dump(youwere, buf);
11959 if (NoDiminishedBleeding) {
11960 sprintf(buf, "prevented from having diminished bleeding");
11961 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_DIMINISHED_BLEEDING].intrinsic);
11962 dump(youwere, buf);
11965 if (NoControlMagic) {
11966 sprintf(buf, "prevented from having control magic");
11967 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_CONTROL_MAGIC].intrinsic);
11968 dump(youwere, buf);
11971 if (NoExpBoost) {
11972 sprintf(buf, "prevented from having experience boost");
11973 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_EXP_BOOST].intrinsic);
11974 dump(youwere, buf);
11977 if (NoAstral_vision) {
11978 sprintf(buf, "prevented from having astral vision");
11979 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_ASTRAL_VISION].intrinsic);
11980 dump(youwere, buf);
11983 if (NoBlind_resistance) {
11984 sprintf(buf, "prevented from having blindness resistance");
11985 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_BLIND_RES].intrinsic);
11986 dump(youwere, buf);
11989 if (NoHalluc_resistance) {
11990 sprintf(buf, "prevented from having hallucination resistance");
11991 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_HALLUC_RES].intrinsic);
11992 dump(youwere, buf);
11995 if (NoPainSense) {
11996 sprintf(buf, "prevented from having pain sense");
11997 sprintf(eos(buf), " (%ld)", u.uprops[DEAC_PAIN_SENSE].intrinsic);
11998 dump(youwere, buf);
12001 if (u.badfcursed) {
12002 sprintf(buf, "cursed");
12003 sprintf(eos(buf), " (%d)", u.badfcursed);
12004 dump(youwere, buf);
12007 if (u.badfdoomed) {
12008 sprintf(buf, "DOOMED");
12009 sprintf(eos(buf), " (%d)", u.badfdoomed);
12010 dump(youwere, buf);
12013 int shieldblockrate = 0;
12015 if (uarms) {
12017 shieldblockrate = shield_block_rate(uarms);
12018 if (uarms->otyp == ELVEN_SHIELD) {
12019 if (Race_if(PM_ELF) || Race_if(PM_PLAYER_MYRKALFR) || Race_if(PM_DROW) || Role_if(PM_ELPH) || Role_if(PM_TWELPH)) shieldblockrate += 5;
12022 if (uarms->otyp == URUK_HAI_SHIELD || uarms->otyp == ORCISH_SHIELD || uarms->otyp == ORCISH_GUARD_SHIELD) {
12023 if (Race_if(PM_ORC)) shieldblockrate += 5;
12025 if (uarms->otyp == DWARVISH_ROUNDSHIELD) {
12026 if (Race_if(PM_DWARF)) shieldblockrate += 5;
12027 if (Role_if(PM_MIDGET)) shieldblockrate += 5;
12030 if (!(PlayerCannotUseSkills)) {
12031 switch (P_SKILL(P_SHIELD)) {
12032 case P_BASIC: shieldblockrate += 2; break;
12033 case P_SKILLED: shieldblockrate += 4; break;
12034 case P_EXPERT: shieldblockrate += 6; break;
12035 case P_MASTER: shieldblockrate += 8; break;
12036 case P_GRAND_MASTER: shieldblockrate += 10; break;
12037 case P_SUPREME_MASTER: shieldblockrate += 12; break;
12042 if (uarms->oartifact == ART_LURTZ_S_WALL) shieldblockrate += 20;
12043 if (uarm && uarm->oartifact == ART_MOEBIUS_ARMOR) shieldblockrate += 10;
12044 if (uarms->oartifact == ART_I_M_GETTING_HUNGRY) shieldblockrate += 20;
12045 if (uarms->oartifact == ART_WHANG_CLINK_CLONK) shieldblockrate += 10;
12046 if (uarms->oartifact == ART_BLOCKBETTER) shieldblockrate += 5;
12047 if (uarms->oartifact == ART_VITALITY_STORM) shieldblockrate += 2;
12048 if (uarms->oartifact == ART_SUPER_SKELLIE) shieldblockrate += 10;
12049 if (uarms->oartifact == ART_WHO_CARES_ABOUT_A_LITTLE_R) shieldblockrate += 15;
12050 if (uarms->oartifact == ART_LOOK_HOW_IT_BLOCKS) shieldblockrate += 20;
12051 if (uarms->oartifact == ART_BLOCKING_EXTREME) shieldblockrate += 10;
12052 if (uarms->oartifact == ART_TSCHINGFIRM) shieldblockrate += 10;
12053 if (uarms->oartifact == ART_CUTTING_THROUGH) shieldblockrate += 5;
12054 if (uarms->oartifact == ART_LITTLE_PROTECTER) shieldblockrate += 5;
12055 if (uwep && uwep->oartifact == ART_VEST_REPLACEMENT) shieldblockrate += 10;
12056 if (uwep && uwep->oartifact == ART_THOSE_LAZY_PROGRAMMERS) shieldblockrate += 10;
12057 if (Race_if(PM_MACTHEIST)) shieldblockrate += 10;
12059 if (u.holyshield) shieldblockrate += (3 + spell_damage_bonus(SPE_HOLY_SHIELD));
12061 if (uarms->spe > 0) shieldblockrate += (uarms->spe * 2);
12063 if (uarms->cursed) shieldblockrate /= 2;
12064 if (uarms->blessed) shieldblockrate += 5;
12066 if (uarms->spe < 0) shieldblockrate += (uarms->spe * 2);
12068 if (uarm && uarm->oartifact == ART_WOODSTOCK) shieldblockrate += 5;
12069 if (uwep && uwep->oartifact == ART_HOLD_IT_OUT) shieldblockrate += 20;
12070 if (uwep && uwep->oartifact == ART_SECANTED) shieldblockrate += 5;
12071 if (uarm && uarm->oartifact == ART_FARTHER_INTO_THE_JUNGLE) shieldblockrate += 10;
12072 if (uwep && uwep->oartifact == ART_BIMMSELIMMELIMM) shieldblockrate += 10;
12073 if (Numbed) shieldblockrate -= 10;
12075 if (!PlayerCannotUseSkills) {
12076 switch (P_SKILL(P_SHIEN)) {
12077 case P_BASIC: shieldblockrate += 1; break;
12078 case P_SKILLED: shieldblockrate += 2; break;
12079 case P_EXPERT: shieldblockrate += 3; break;
12080 case P_MASTER: shieldblockrate += 4; break;
12081 case P_GRAND_MASTER: shieldblockrate += 5; break;
12082 case P_SUPREME_MASTER: shieldblockrate += 6; break;
12086 if (Conflict && shieldblockrate > 0) {
12087 shieldblockrate *= 2;
12088 shieldblockrate /= 3;
12090 if (StrongConflict && shieldblockrate > 0) {
12091 shieldblockrate *= 2;
12092 shieldblockrate /= 3;
12095 if (Role_if(PM_DANCER)) shieldblockrate /= 2;
12097 if (uarms && uarms->oartifact == ART_THERMO_NUCLEAR_CHAMBER) shieldblockrate = 0;
12098 if (uarms && uarms->oartifact == ART_SUPER_ENERGY_LINES) shieldblockrate = 0;
12099 if (uarms && uarms->otyp == BROKEN_SHIELD) shieldblockrate = 0;
12101 if (shieldblockrate < 0) shieldblockrate = 0;
12103 sprintf(buf, "%d%%", shieldblockrate);
12104 dump(" Your chance to block was ", buf );
12107 if (Fumbling) dump(" ", "You fumbled");
12109 if (Fumbling) {
12110 sprintf(buf, "fumbling");
12111 sprintf(eos(buf), " (%d)", u.fumbleduration);
12112 dump(youwere, buf);
12115 if (Wounded_legs && !u.usteed ) {
12116 sprintf(buf, "wounded %s", makeplural(body_part(LEG)));
12117 sprintf(eos(buf), " (%ld)", HWounded_legs);
12118 dump(youhad, buf);
12120 if (Wounded_legs && u.usteed) {
12121 strcpy(buf, x_monnam(u.usteed, ARTICLE_YOUR, (char *)0,
12122 SUPPRESS_SADDLE | SUPPRESS_HALLUCINATION, FALSE));
12123 *buf = highc(*buf);
12124 strcat(buf, " had wounded legs");
12125 dump(" ", buf);
12127 if (Sleeping) dump(" ", "You fell asleep");
12128 if (Hunger && !StrongHunger) dump(" ", "You hungered rapidly");
12129 if (Hunger && StrongHunger) dump(" ", "You hungered extremely rapidly");
12131 if (have_sleepstone()) dump(" ", "You were very tired");
12132 if (have_cursedmagicresstone()) dump(" ", "You took double damage");
12133 if (uamul && uamul->otyp == AMULET_OF_VULNERABILITY) dump(" ", "You took extra damage");
12135 /*** Vision and senses ***/
12136 if (See_invisible && !StrongSee_invisible) dump(" ", "You saw invisible");
12137 if (See_invisible && StrongSee_invisible) dump(" ", "You saw invisible and hidden");
12138 if (Manaleech && !StrongManaleech) dump(" ", "You leeched mana");
12139 if (Manaleech && StrongManaleech) dump(" ", "You leeched a lot of mana");
12140 if (Peacevision) dump(" ", StrongPeacevision ? "You recognized peaceful creatures and other stuff" : "You recognized peaceful creatures");
12141 if (Map_amnesia) dump(" ", StrongMap_amnesia ? "You had total map amnesia" : "You had map amnesia");
12143 if (InvertedState) {
12144 sprintf(buf, StrongInvertedState ? "completely inverted" : "inverted");
12145 sprintf(eos(buf), " (%d)", HInvertedState);
12146 dump(youwere, buf);
12148 if (WinceState) {
12149 sprintf(buf, StrongWinceState ? "wincing painfully" : "wincing");
12150 sprintf(eos(buf), " (%d)", HWinceState);
12151 dump(youwere, buf);
12154 if (BurdenedState) dump(" ", StrongBurdenedState ? "You were heavily burdened" : "You were burdened");
12155 if (MagicVacuum) dump(" ", StrongMagicVacuum ? "You were suffering from a complete magic vacuum" : "You were suffering from a magic vacuum");
12156 if (FuckOverEffect) dump(" ", StrongFuckOverEffect ? "You were being totally fucked over" : "You were being fucked over");
12158 if ((Blind_telepat || Unblind_telepat) && !StrongTelepat) dump(youwere, "telepathic");
12159 if ((Blind_telepat || Unblind_telepat) && StrongTelepat) dump(youwere, "very telepathic");
12161 if (Hallu_party) dump(youwere, StrongHallu_party ? "totally hallu partying" : "hallu partying");
12162 if (Drunken_boxing) dump(youwere, StrongDrunken_boxing ? "a very drunken boxer" : "a drunken boxer");
12163 if (Stunnopathy) dump(youwere, StrongStunnopathy ? "very stunnopathic" : "stunnopathic");
12164 if (Numbopathy) dump(youwere, StrongNumbopathy ? "very numbopathic" : "numbopathic");
12165 if (Dimmopathy) dump(youwere, StrongDimmopathy ? "very dimmopathic" : "dimmopathic");
12166 if (Freezopathy) dump(youwere, StrongFreezopathy ? "very freezopathic" : "freezopathic");
12167 if (Stoned_chiller) dump(youwere, StrongStoned_chiller ? "a totally stoned chiller" : "a stoned chiller");
12168 if (Corrosivity) dump(youwere, StrongCorrosivity ? "incredibly corrosive" : "extremely corrosive");
12169 if (Fear_factor) dump(youhad, StrongFear_factor ? "a highly increased fear factor" : "an increased fear factor");
12170 if (Burnopathy) dump(youwere, StrongBurnopathy ? "very burnopathic" : "burnopathic");
12171 if (Sickopathy) dump(youwere, StrongSickopathy ? "very sickopathic" : "sickopathic");
12172 if (Wonderlegs) dump(youhad, StrongWonderlegs ? "protected wonderlegs" : "wonderlegs");
12173 if (Glib_combat) dump(youwere, StrongGlib_combat ? "a flictionless glibbery fighter" : "a glibbery fighter");
12175 if (Warning) dump(youwere, StrongWarning ? "definitely warned" : "warned");
12176 if (Warn_of_mon && flags.warntype) {
12177 sprintf(buf, "aware of the presence of %s",
12178 (flags.warntype & M2_ORC) ? "orcs" :
12179 (flags.warntype & M2_DEMON) ? "demons" :
12180 something);
12181 dump(youwere, buf);
12183 if (Undead_warning) dump(youwere, "warned of undead");
12185 if (Role_if(PM_ACTIVISTOR) || Race_if(PM_PEACEMAKER) ) dump(youwere, "aware of the presence of topmodels");
12186 if (Role_if(PM_ACTIVISTOR) && uwep && is_quest_artifact(uwep) ) dump(youwere, "aware of the presence of unique monsters");
12187 /*if (uamul && uamul->otyp == AMULET_OF_UNDEAD_WARNING ) dump(youwere, "aware of the presence of undead");
12188 if (uarmh && uarmh->otyp == HELMET_OF_UNDEAD_WARNING ) dump(youwere, "aware of the presence of undead");*/
12189 if (uamul && uamul->otyp == AMULET_OF_POISON_WARNING ) dump(youwere, "aware of the presence of poisonous monsters");
12190 if (uamul && uamul->otyp == AMULET_OF_OWN_RACE_WARNING ) dump(youwere, "aware of the presence of same-race monsters");
12191 if (uamul && uamul->otyp == AMULET_OF_COVETOUS_WARNING ) dump(youwere, "aware of the presence of covetous monsters");
12192 if (ublindf && ublindf->otyp == BOSS_VISOR ) dump(youwere, "aware of the presence of covetous monsters");
12193 if (Role_if(PM_PALADIN) ) dump(youwere, "aware of the presence of demons");
12194 if (Race_if(PM_VORTEX) ) dump(youwere, "aware of the presence of unsolid creatures");
12195 if (Race_if(PM_VORTEX) ) dump(youwere, "aware of the presence of creatures without limbs");
12196 if (Race_if(PM_CORTEX) ) dump(youwere, "aware of the presence of unsolid creatures");
12197 if (Race_if(PM_CORTEX) ) dump(youwere, "aware of the presence of creatures without limbs");
12198 if (Race_if(PM_LEVITATOR) ) dump(youwere, "aware of the presence of flying monsters");
12199 if (Race_if(PM_RODNEYAN) ) dump(youwere, "able to sense monsters possessing coveted objects");
12200 if (isselfhybrid) dump(youwere, "aware of the presence of strong wanderers");
12201 if (isselfhybrid) dump(youwere, "aware of the presence of monsters that are valid polymorph forms for monsters only");
12203 if (Searching) dump(youhad, StrongSearching ? "quick autosearching" : "automatic searching");
12204 if (Clairvoyant) {
12205 sprintf(buf, StrongClairvoyant ? "highly clairvoyant" : "clairvoyant");
12206 sprintf(eos(buf), " (%ld)", HClairvoyant);
12207 dump(youwere, buf);
12210 if (Infravision) dump(youhad, StrongInfravision ? "strong infravision" : "infravision");
12212 if (u.banishmentbeam) dump(youwere, "going to be banished");
12213 if (u.levelporting) dump(youwere, "going to be levelported");
12215 if (u.inertia) {
12216 sprintf(buf, "slowed by inertia");
12217 sprintf(eos(buf), " (%d)", u.inertia);
12218 dump(youwere, buf);
12221 if (u.temprecursion) {
12222 sprintf(buf, "under the effect of temporary recursion");
12223 sprintf(eos(buf), " (%d)", u.temprecursiontime);
12224 dump(youwere, buf);
12227 if (u.demagoguerecursion) {
12228 sprintf(buf, "temporarily playing as another role");
12229 sprintf(eos(buf), " (%d)", u.demagoguerecursiontime);
12230 dump(youwere, buf);
12232 if (Detect_monsters) {
12233 sprintf(buf, StrongDetect_monsters ? "sensing all monsters" : "sensing the presence of monsters");
12234 sprintf(eos(buf), " (%ld)", HDetect_monsters);
12235 dump(youwere, buf);
12238 if (u.umconf) dump(youwere, "going to confuse monsters");
12240 sprintf(buf, "%d points of nutrition remaining", u.uhunger);
12241 dump(youhad, buf);
12243 /*** Appearance and behavior ***/
12244 if (Adornment) {
12245 int adorn = 0;
12246 if(uleft && uleft->otyp == RIN_ADORNMENT) adorn += uleft->spe;
12247 if(uright && uright->otyp == RIN_ADORNMENT) adorn += uright->spe;
12248 if(uleft && uleft->otyp == RIN_UPPER_ADORNMENT) adorn += uleft->spe;
12249 if(uright && uright->otyp == RIN_UPPER_ADORNMENT) adorn += uright->spe;
12250 if (adorn < 0)
12251 dump(youwere, "poorly adorned");
12252 else
12253 dump(youwere, "adorned");
12255 if (Invisible) dump(youwere, StrongInvis ? "very invisible" : "invisible");
12256 else if (Invis) dump(youwere, StrongInvis ? "very invisible to others" : "invisible to others");
12257 /* ordinarily "visible" is redundant; this is a special case for
12258 the situation when invisibility would be an expected attribute */
12259 else if ((HInvis || EInvis || pm_invisible(youmonst.data)) && BInvis)
12260 dump(youwere, "visible");
12261 if (Displaced) dump(youwere, StrongDisplaced ? "very displaced" : "displaced");
12262 if (Stealth) dump(youwere, StrongStealth ? "very stealthy" : "stealthy");
12263 if (StrongAggravate_monster) dump(" ", "You completely aggravated monsters");
12264 if (!StrongAggravate_monster && ExtAggravate_monster) dump(" ", "You strongly aggravated monsters");
12265 if (!StrongAggravate_monster && IntAggravate_monster) dump(" ", "You aggravated monsters");
12266 if (Aggravate_monster) {
12267 sprintf(buf, "aggravating monsters for %ld more turns", HAggravate_monster);
12268 dump(youwere, buf);
12271 if (Conflict) dump(" ", StrongConflict ? "You caused lots of conflict" : "You caused conflict");
12273 /*** Transportation ***/
12274 if (Jumping) dump(youcould, StrongJumping ? "jump far" : "jump");
12275 if (Teleportation) dump(youhad, StrongTeleportation ? "chronic teleportitis" : "teleportitis");
12276 if (Teleport_control) dump(youhad, StrongTeleport_control ? "complete teleport control" : "teleport control");
12278 if (Lev_at_will) {
12279 sprintf(buf, "levitating, at will");
12280 sprintf(eos(buf), " (%ld)", HLevitation);
12281 dump(youwere, buf);
12283 if (Levitation) {
12284 sprintf(buf, StrongLevitation ? "floatitating" : "levitating");
12285 sprintf(eos(buf), " (%ld)", HLevitation);
12286 dump(youwere, buf);
12289 else if (Flying) dump(youcould, StrongFlying ? "fly up and down" : "fly");
12290 if (Wwalking) dump(youcould, "walk on water");
12291 if (Swimming) dump(youcould, StrongSwimming ? "swim like a world champion" : "swim");
12292 if (PainSense) dump(youcould, StrongPainSense ? "sense the pain of everyone" : "sense others' pain");
12293 if (Breathless) dump(youcould, StrongMagical_breathing ? "survive everywhere without needing to breathe" : "survive without air");
12294 else if (Amphibious) dump(youcould, "breathe water");
12295 if (Passes_walls) dump(youcould, StrongPasses_walls ? "walk through every wall" : "walk through walls");
12296 if (u.usteed && (final < 2 || strcmp(killer, "riding accident"))) {
12297 sprintf(buf, "riding %s (%s)", y_monnam(u.usteed), u.usteed->data->mname);
12298 dump(youwere, buf);
12300 if (u.uswallow) {
12301 sprintf(buf, "swallowed by %s", a_monnam(u.ustuck));
12302 #ifdef WIZARD
12303 if (wizard) sprintf(eos(buf), " (%u)", u.uswldtim);
12304 #endif
12305 dump(youwere, buf);
12306 } else if (u.ustuck) {
12307 sprintf(buf, "%s %s",
12308 (Upolyd && sticks(youmonst.data)) ? "holding" : "held by",
12309 a_monnam(u.ustuck));
12310 dump(youwere, buf);
12313 /*** Physical attributes ***/
12314 if (increase_accuracy_bonus_value())
12315 dump(youhad,
12316 enlght_combatinc("to hit", increase_accuracy_bonus_value(), final, buf));
12317 if (increase_damage_bonus_value())
12318 dump(youhad,
12319 enlght_combatinc("damage", increase_damage_bonus_value(), final, buf));
12320 if (Slow_digestion) dump(youhad, StrongSlow_digestion ? "extremely slow digestion" : "slower digestion");
12321 if (Keen_memory) dump(" ", StrongKeen_memory ? "Your memory was very keen" : "Your memory was keen");
12323 if (Sight_bonus) dump(" ", StrongSight_bonus ? "Your sight was greatly improved" : "Your sight was improved");
12324 if (Versus_curses) dump(youhad, StrongVersus_curses ? "double curse resistance" : "curse resistance");
12326 if (Stun_resist) dump(youhad, StrongStun_resist ? "double stun resistance" : "stun resistance");
12327 if (Conf_resist) dump(youhad, StrongConf_resist ? "double confusion resistance" : "confusion resistance");
12328 if (Cont_resist) dump(youhad, StrongCont_resist ? "double contamination resistance" : "contamination resistance");
12329 if (Discount_action) dump(youhad, StrongDiscount_action ? "high discount action" : "discount action");
12330 if (Full_nutrient) dump(youhad, StrongFull_nutrient ? "very full nutrients" : "full nutrients");
12331 if (Technicality) dump(youhad, StrongTechnicality ? "greatly improved technique levels" : "improved technique levels");
12332 if (Defusing) dump(youhad, StrongDefusing ? "very good abilities to disarm traps" : "the ability to disarm traps");
12333 if (ResistancePiercing) dump(youhad, StrongResistancePiercing ? "powerful resistance piercing abilities" : "resistance piercing abilities");
12334 if (MysteryResist) dump(youhad, StrongMysteryResist ? "strong mystery resistance" : "mystery resistance");
12335 if (MagicFindBonus) dump(youhad, StrongMagicFindBonus ? "much higher chances of finding magical items" : "higher chances of finding magical items");
12336 if (Spellboost) dump(youhad, StrongSpellboost ? "greatly improved spell power" : "improved spell power");
12337 if (ScentView || EcholocationActive) dump(youhad, StrongScentView ? "scent view and echolocation" : (ScentView && EcholocationActive) ? "scent view and echolocation" : EcholocationActive ? "echolocation" : "scent view");
12338 if (DiminishedBleeding) dump(youhad, StrongDiminishedBleeding ? "greatly diminished bleeding" : "diminished bleeding");
12339 if (ControlMagic) dump(youhad, StrongControlMagic ? "strong magic control" : "magic control");
12340 if (ExpBoost) dump(youhad, StrongExpBoost ? "a strong experience boost" : "an experience boost");
12341 if (Psi_resist) dump(youhad, StrongPsi_resist ? "double psi resistance" : "psi resistance");
12342 if (Extra_wpn_practice) dump(" ", StrongExtra_wpn_practice ? "You could train skills and attributes much faster" : "You could train skills and attributes faster");
12343 if (Death_resistance) dump(youhad, "resistance to death rays");
12344 if (Double_attack) dump(youhad, StrongDouble_attack ? "super double attacks" : "double attacks");
12345 if (Quad_attack) dump(youhad, StrongQuad_attack ? "super quad attacks" : "quad attacks");
12347 if (Half_physical_damage) dump(youhad, StrongHalf_physical_damage ? "strong physical resistance" : "physical resistance");
12348 if (Half_spell_damage) dump(youhad, StrongHalf_spell_damage ? "strong spell resistance" : "spell resistance");
12350 if (Regeneration) dump(" ", StrongRegeneration ? "You quickly regenerated" : "You regenerated");
12351 if (Energy_regeneration) dump(" ", StrongEnergy_regeneration ? "You quickly regenerated mana" : "You regenerated mana");
12352 if (u.uspellprot || Protection) {
12353 int prot = 0;
12355 if(uleft && uleft->otyp == RIN_PROTECTION) prot += uleft->spe;
12356 if(uleft && uleft->otyp == RIN_THREE_POINT_SEVEN_PROTECTI) prot += uleft->spe;
12357 if(uright && uright->otyp == RIN_PROTECTION) prot += uright->spe;
12358 if(uright && uright->otyp == RIN_THREE_POINT_SEVEN_PROTECTI) prot += uright->spe;
12359 if (HProtection & INTRINSIC) prot += u.ublessed;
12360 prot += u.uspellprot;
12362 if (prot < 0)
12363 dump(youwere, "ineffectively protected");
12364 else
12365 dump(youwere, "protected");
12367 if (Protection_from_shape_changers)
12368 dump(youwere, "protected from shape changers");
12369 if (Polymorph) dump(youhad, StrongPolymorph ? "chronic polymorphitis" : "polymorphitis");
12370 if (Polymorph_control) dump(youhad, StrongPolymorph_control ? "complete polymorph control" : "polymorph control");
12371 if (u.ulycn >= LOW_PM) {
12372 strcpy(buf, an(mons[u.ulycn].mname));
12373 dump(youwere, buf);
12375 if (Upolyd && !missingnoprotect) {
12376 if (u.umonnum == u.ulycn) strcpy(buf, "in beast form");
12377 else sprintf(buf, "polymorphed into %s",
12378 an(youmonst.data->mname));
12379 #ifdef WIZARD
12380 if (wizard) sprintf(eos(buf), " (%d)", u.mtimedone);
12381 #endif
12382 dump(youwere, buf);
12384 if (uinsymbiosis) {
12385 sprintf(buf, "in symbiosis with %s, symbiote health %d(%d), BUC %s%s%s%s%s", mons[u.usymbiote.mnum].mname, u.usymbiote.mhp, u.usymbiote.mhpmax, u.usymbiote.stckcurse ? "sticky" : "", u.usymbiote.evilcurse ? " evil" : "", u.usymbiote.morgcurse ? " morgothian" : "", u.usymbiote.bbcurse ? " blackbreath" : "", u.usymbiote.prmcurse ? " prime cursed" : u.usymbiote.hvycurse ? " heavily cursed" : u.usymbiote.cursed ? " cursed" : "uncursed");
12386 if (u.shutdowntime) {
12387 sprintf(eos(buf), ", shutdown for %d turns", u.shutdowntime);
12388 } else if (symbiote_is_shut_down()) {
12389 sprintf(eos(buf), ", shutdown");
12391 dump(youwere, buf);
12394 if (Unchanging)
12395 dump(youcould, "not change from your current form");
12396 if (Fast && !SpeedBug && !u.uprops[SPEED_BUG].extrinsic && !(uarmf && uarmf->oartifact == ART_UNEVEN_ENGINE) && !(uarmf && uarmf->oartifact == ART_ERROR_IN_PLAY_ENCHANTMENT) && !have_speedbugstone()) dump(youwere, StrongFast ? "ultra fast" : Very_fast ? "very fast" : "fast");
12397 if (Fast && (SpeedBug || u.uprops[SPEED_BUG].extrinsic || (uarmf && uarmf->oartifact == ART_UNEVEN_ENGINE) || (uarmf && uarmf->oartifact == ART_ERROR_IN_PLAY_ENCHANTMENT) || have_speedbugstone()) ) dump(youwere, StrongFast ? "ultra slow" : Very_fast ? "very slow" : "slow");
12398 if (!Fast && Very_fast && !SpeedBug && !u.uprops[SPEED_BUG].extrinsic && !(uarmf && uarmf->oartifact == ART_UNEVEN_ENGINE) && !(uarmf && uarmf->oartifact == ART_ERROR_IN_PLAY_ENCHANTMENT) && !have_speedbugstone()) dump(youwere, "very fast");
12399 if (!Fast && Very_fast && (SpeedBug || u.uprops[SPEED_BUG].extrinsic || (uarmf && uarmf->oartifact == ART_UNEVEN_ENGINE) || (uarmf && uarmf->oartifact == ART_ERROR_IN_PLAY_ENCHANTMENT) || have_speedbugstone()) ) dump(youwere, "very slow");
12400 if (Reflecting) dump(youhad, StrongReflecting ? "powerful reflection" : "reflection");
12401 if (Free_action) dump(youhad, StrongFree_action ? "very free action" : "free action");
12402 if (SustainAbilityOn) dump(youhad, "fixed abilities");
12403 if (uamul && uamul->otyp == AMULET_VERSUS_STONE)
12404 dump(" ", "You would have been depetrified");
12405 if (Lifesaved)
12406 dump(" ", "Your life would have been saved");
12407 if (Second_chance)
12408 dump(" ", "You would have been given a second chance");
12409 if (u.metalguard)
12410 dump(" ", "The next damage you took would have been nullified");
12411 if (u.twoweap) dump(youwere, "wielding two weapons at once");
12413 /*** Miscellany ***/
12414 if (Luck) {
12415 ltmp = abs((int)Luck);
12416 sprintf(buf, "%s%slucky (%d)",
12417 ltmp >= 10 ? "extremely " : ltmp >= 5 ? "very " : "",
12418 Luck < 0 ? "un" : "", Luck);
12419 dump(youwere, buf);
12421 else dump(" ", "Your luck was zero");
12422 if (u.moreluck > 0) dump(youhad, "extra luck");
12423 else if (u.moreluck < 0) dump(youhad, "reduced luck");
12424 if (carrying(LUCKSTONE) || stone_luck(TRUE)) {
12425 ltmp = stone_luck(FALSE);
12426 if (ltmp <= 0)
12427 dump(" ", "Bad luck did not time out for you");
12428 if (ltmp >= 0)
12429 dump(" ", "Good luck did not time out for you");
12432 if (u.uhealbonus)
12434 sprintf(buf, "%s health", u.uhealbonus > 0 ? "extra" :
12435 "reduced");
12436 sprintf(eos(buf), " (%ld)", u.uhealbonus);
12437 dump(youhad, buf);
12439 else dump(" ", "Your health bonus was zero");
12441 if (recalc_mana() )
12443 sprintf(buf, "%s mana", recalc_mana() > 0 ? "extra" :
12444 "reduced");
12445 sprintf(eos(buf), " (%d)", recalc_mana() );
12446 dump(youhad, buf);
12448 else dump(" ", "Your mana bonus was zero");
12450 sprintf(buf, "spell retention for remembering %d spells", urole.spelrete);
12451 dump(youhad, buf);
12453 sprintf(buf, "Your pantheon consisted of %s, %s and %s", align_gname(A_LAWFUL), align_gname(A_NEUTRAL), align_gname(A_CHAOTIC) );
12454 dump(" ", buf);
12456 sprintf(buf, "Your deity was %s", u_gname());
12457 dump(" ", buf);
12459 getversionstring(buf);
12460 dump(" The version you were playing was: ", buf);
12462 #ifdef REALTIME_ON_BOTL
12463 time_t currenttime = realtime_data.realtime;
12465 sprintf(buf, "You played for %ld:%2.2ld:%2.2ld hours (this value may or may not be correct)", currenttime / 3600, (currenttime % 3600) / 60, currenttime % 60);
12466 dump(" ", buf);
12468 #endif
12470 if (u.ugangr) {
12471 sprintf(buf, " %sangry with you",
12472 u.ugangr > 6 ? "extremely " : u.ugangr > 3 ? "very " : "");
12473 sprintf(eos(buf), " (%d)", u.ugangr);
12474 sprintf(buf2, "%s was %s", u_gname(), buf);
12475 dump(" ", buf2);
12478 sprintf(buf, "You could %s have safely prayed", u.ugangr ? "not " : can_pray(FALSE) ? "" : "not ");
12479 sprintf(eos(buf), " (%d)", u.ublesscnt);
12480 dump(" ", buf);
12483 const char *p;
12485 buf[0] = '\0';
12486 if (final < 2) { /* quit/escaped/ascended */
12487 p = "survived after being killed ";
12488 switch (u.umortality) {
12489 case 0: p = "survived"; break;
12490 case 1: strcpy(buf, "once"); break;
12491 case 2: strcpy(buf, "twice"); break;
12492 case 3: strcpy(buf, "thrice"); break;
12493 default: sprintf(buf, "%d times", u.umortality);
12494 break;
12496 } else { /* game ended in character's death */
12497 p = "are dead";
12498 switch (u.umortality) {
12499 case 0: impossible("dead without dying?");
12500 case 1: break; /* just "are dead" */
12501 default: sprintf(buf, " (%d%s time!)", u.umortality,
12502 ordin(u.umortality));
12503 break;
12506 if (p) {
12507 sprintf(buf2, "You %s %s", p, buf);
12508 dump(" ", buf2);
12511 dump("", "");
12512 return;
12514 } /* dump_enlightenment */
12515 #endif
12518 * Courtesy function for non-debug, non-explorer mode players
12519 * to help refresh them about who/what they are.
12520 * Returns FALSE if menu cancelled (dismissed with ESC), TRUE otherwise.
12522 STATIC_OVL boolean
12523 minimal_enlightenment()
12526 char statline[BUFSZ];
12528 *statline = '\0';
12529 char xtrabuf[BUFSZ];
12531 if (TheInfoIsFucked) {
12532 pline("Somehow the information is fucked up and won't display.");
12533 return 0;
12536 *xtrabuf = '\0';
12538 int hybridcount = 0;
12540 if (flags.hybridangbander && (hybridcount++ < 20)) sprintf(eos(xtrabuf), "angbander ");
12541 if (flags.hybridaquarian && (hybridcount++ < 20)) sprintf(eos(xtrabuf), "aquarian ");
12542 if (flags.hybridcurser && (hybridcount++ < 20)) sprintf(eos(xtrabuf), "curser ");
12543 if (flags.hybridhaxor && (hybridcount++ < 20)) sprintf(eos(xtrabuf), "haxor ");
12544 if (flags.hybridhomicider && (hybridcount++ < 20)) sprintf(eos(xtrabuf), "homicider ");
12545 if (flags.hybridsuxxor && (hybridcount++ < 20)) sprintf(eos(xtrabuf), "suxxor ");
12546 if (flags.hybridwarper && (hybridcount++ < 20)) sprintf(eos(xtrabuf), "warper ");
12547 if (flags.hybridrandomizer && (hybridcount++ < 20)) sprintf(eos(xtrabuf), "randomizer ");
12548 if (flags.hybridnullrace && (hybridcount++ < 20)) sprintf(eos(xtrabuf), "null ");
12549 if (flags.hybridmazewalker && (hybridcount++ < 20)) sprintf(eos(xtrabuf), "mazewalker ");
12550 if (flags.hybridsoviet && (hybridcount++ < 20)) sprintf(eos(xtrabuf), "soviet ");
12551 if (flags.hybridxrace && (hybridcount++ < 20)) sprintf(eos(xtrabuf), "x-race ");
12552 if (flags.hybridheretic && (hybridcount++ < 20)) sprintf(eos(xtrabuf), "heretic ");
12553 if (flags.hybridsokosolver && (hybridcount++ < 20)) sprintf(eos(xtrabuf), "sokosolver ");
12554 if (flags.hybridspecialist && (hybridcount++ < 20)) sprintf(eos(xtrabuf), "specialist ");
12555 if (flags.hybridamerican && (hybridcount++ < 20)) sprintf(eos(xtrabuf), "american ");
12556 if (flags.hybridminimalist && (hybridcount++ < 20)) sprintf(eos(xtrabuf), "minimalist ");
12557 if (flags.hybridnastinator && (hybridcount++ < 20)) sprintf(eos(xtrabuf), "nastinator ");
12558 if (flags.hybridrougelike && (hybridcount++ < 20)) sprintf(eos(xtrabuf), "rougelike ");
12559 if (flags.hybridsegfaulter && (hybridcount++ < 20)) sprintf(eos(xtrabuf), "segfaulter ");
12560 if (flags.hybridironman && (hybridcount++ < 20)) sprintf(eos(xtrabuf), "ironman ");
12561 if (flags.hybridamnesiac && (hybridcount++ < 20)) sprintf(eos(xtrabuf), "amnesiac ");
12562 if (flags.hybridproblematic && (hybridcount++ < 20)) sprintf(eos(xtrabuf), "problematic ");
12563 if (flags.hybridwindinhabitant && (hybridcount++ < 20)) sprintf(eos(xtrabuf), "windinhabitant ");
12564 if (flags.hybridaggravator && (hybridcount++ < 20)) sprintf(eos(xtrabuf), "aggravator ");
12565 if (flags.hybridevilvariant && (hybridcount++ < 20)) sprintf(eos(xtrabuf), "evilvariant ");
12566 if (flags.hybridlevelscaler && (hybridcount++ < 20)) sprintf(eos(xtrabuf), "levelscaler ");
12567 if (flags.hybriderosator && (hybridcount++ < 20)) sprintf(eos(xtrabuf), "erosator ");
12568 if (flags.hybridroommate && (hybridcount++ < 20)) sprintf(eos(xtrabuf), "roommate ");
12569 if (flags.hybridextravator && (hybridcount++ < 20)) sprintf(eos(xtrabuf), "extravator ");
12570 if (flags.hybridhallucinator && (hybridcount++ < 20)) sprintf(eos(xtrabuf), "hallucinator ");
12571 if (flags.hybridbossrusher && (hybridcount++ < 20)) sprintf(eos(xtrabuf), "bossrusher ");
12572 if (flags.hybriddorian && (hybridcount++ < 20)) sprintf(eos(xtrabuf), "dorian ");
12573 if (flags.hybridtechless && (hybridcount++ < 20)) sprintf(eos(xtrabuf), "techless ");
12574 if (flags.hybridblait && (hybridcount++ < 20)) sprintf(eos(xtrabuf), "blait ");
12575 if (flags.hybridgrouper && (hybridcount++ < 20)) sprintf(eos(xtrabuf), "grouper ");
12576 if (flags.hybridscriptor && (hybridcount++ < 20)) sprintf(eos(xtrabuf), "scriptor ");
12577 if (flags.hybridunbalancor && (hybridcount++ < 20)) sprintf(eos(xtrabuf), "unbalancor ");
12578 if (flags.hybridbeacher && (hybridcount++ < 20)) sprintf(eos(xtrabuf), "beacher ");
12579 if (flags.hybridstairseeker && (hybridcount++ < 20)) sprintf(eos(xtrabuf), "stairseeker ");
12580 if (flags.hybridmatrayser && (hybridcount++ < 20)) sprintf(eos(xtrabuf), "matrayser ");
12581 if (flags.hybridfeminizer && (hybridcount++ < 20)) sprintf(eos(xtrabuf), "feminizer ");
12582 if (flags.hybridchallenger && (hybridcount++ < 20)) sprintf(eos(xtrabuf), "challenger ");
12583 if (flags.hybridhardmoder && (hybridcount++ < 20)) sprintf(eos(xtrabuf), "hardmoder ");
12584 if (flags.hybridstunfish && (hybridcount++ < 20)) sprintf(eos(xtrabuf), "stunned-like-a-fish ");
12585 if (flags.hybridkillfiller && (hybridcount++ < 20)) sprintf(eos(xtrabuf), "killfiller ");
12586 if (flags.hybridbadstatter && (hybridcount++ < 20)) sprintf(eos(xtrabuf), "badstatter ");
12587 if (flags.hybriddroughter && (hybridcount++ < 20)) sprintf(eos(xtrabuf), "droughter ");
12588 if (flags.hybridvanillaoid && (hybridcount++ < 20)) sprintf(eos(xtrabuf), "vanillaoid ");
12589 if (hybridcount >= 20) sprintf(eos(xtrabuf), "(%d hybrids) ", hybridcount);
12591 if (!DisplayDoesNotGo) {
12592 /* Yes I know, this is far from optimized. But it's a crutch for terminals with
12593 * less than 25 lines, where bot2() doesn't display everything if you have lots of status effects. --Amy */
12595 sprintf(eos(statline), "You are %s, a %s %s %s%s %s.", playeraliasname, align_str(u.ualign.type), (flags.female ? "female" : "male"), xtrabuf, urace.adj, (flags.female && urole.name.f) ? urole.name.f : urole.name.m);
12597 sprintf(eos(statline), " Level %d", u.ulevel);
12599 if (!Upolyd) sprintf(eos(statline), " HP %d (max %d)", u.uhp, u.uhpmax);
12600 else sprintf(eos(statline), " HP %d (max %d)", u.mh, u.mhmax);
12602 sprintf(eos(statline), " Pw %d (max %d)", u.uen, u.uenmax);
12604 sprintf(eos(statline), " AC %d", u.uac);
12606 sprintf(eos(statline), " Score %ld", botl_score());
12608 sprintf(eos(statline), " Current status effects: ");
12610 if (Levitation) sprintf(eos(statline), "levitation, ");
12611 if (HeavyConfusion) sprintf(eos(statline), "xtraconfusion, ");
12612 else if (Confusion) sprintf(eos(statline), "confusion, ");
12613 if (Sick) {
12614 if (u.usick_type & SICK_VOMITABLE) sprintf(eos(statline), "food poisoning, ");
12615 if (u.usick_type & SICK_NONVOMITABLE) sprintf(eos(statline), "illness, ");
12617 if (HeavyBlind) sprintf(eos(statline), "xtrablindness, ");
12618 else if (Blind) sprintf(eos(statline), "blindness, ");
12619 if(sengr_at("Elbereth", u.ux, u.uy)) sprintf(eos(statline), "elbereth, ");
12620 if (HeavyFeared) sprintf(eos(statline), "xtrafear, ");
12621 else if (Feared) sprintf(eos(statline), "fear, ");
12622 if (HeavyNumbed) sprintf(eos(statline), "xtranumbness, ");
12623 else if (Numbed) sprintf(eos(statline), "numbness, ");
12624 if (HeavyFrozen) sprintf(eos(statline), "xtrafreeze, ");
12625 else if (Frozen) sprintf(eos(statline), "freeze, ");
12626 if (HeavyBurned) sprintf(eos(statline), "xtraburn, ");
12627 else if (Burned) sprintf(eos(statline), "burn, ");
12628 if (HeavyDimmed) sprintf(eos(statline), "xtradim, ");
12629 else if (Dimmed) sprintf(eos(statline), "dim, ");
12630 if (HeavyStunned) sprintf(eos(statline), "xtrastun, ");
12631 else if (Stunned) sprintf(eos(statline), "stun, ");
12632 if (HeavyHallu) sprintf(eos(statline), "xtrahallucination, ");
12633 else if (Hallucination) sprintf(eos(statline), "hallucination, ");
12634 if (Slimed) sprintf(eos(statline), "sliming, ");
12635 if (Stoned) sprintf(eos(statline), "petrification, ");
12636 if (IsGlib) sprintf(eos(statline), "glib, ");
12637 if (Wounded_legs) sprintf(eos(statline), "wounded legs, ");
12638 if (Strangled) sprintf(eos(statline), "strangled, ");
12639 if (PlayerBleeds) sprintf(eos(statline), "bleeding, ");
12640 if (Vomiting) sprintf(eos(statline), "vomiting, ");
12641 if(u.ustuck && !u.uswallow && !sticks(youmonst.data)) sprintf(eos(statline), "held by a monster, ");
12642 if(near_capacity() > UNENCUMBERED) sprintf(eos(statline), "%s, ", encx_stat[near_capacity()]);
12643 if (!YouAreThirsty && u.urealedibility && u.uhunger >= 4500) sprintf(eos(statline), "oversatiated, ");
12644 else if(!YouAreThirsty && strcmp(hux_stat[u.uhs], " ")) sprintf(eos(statline), "%s, ", hux_stat[u.uhs]);
12646 sprintf(eos(statline), ".");
12648 sprintf(eos(statline), " Your hairstyle is '%s.", bundledescription());
12650 sprintf(eos(statline), " You have %d casino chips.", u.casinochips);
12652 pline("%s", statline);
12654 /*"You are %s, a %s %s %s%s%s%s%s%s%s%s %s. Current status effects: %s%s%s%s.", , Levitation ? "levitation " : "", Confusion ? (HeavyConfusion ? "xtraconfusion " : "confusion ") : "", );
12658 winid tmpwin;
12659 menu_item *selected;
12660 anything any;
12661 int genidx, n;
12662 char buf[BUFSZ], buf2[BUFSZ];
12663 static const char untabbed_fmtstr[] = "%-15s: %-12s";
12664 static const char untabbed_deity_fmtstr[] = "%-17s%s";
12665 static const char tabbed_fmtstr[] = "%s:\t%-12s";
12666 static const char tabbed_deity_fmtstr[] = "%s\t%s";
12667 static const char *fmtstr;
12668 static const char *deity_fmtstr;
12670 fmtstr = iflags.menu_tab_sep ? tabbed_fmtstr : untabbed_fmtstr;
12671 deity_fmtstr = iflags.menu_tab_sep ?
12672 tabbed_deity_fmtstr : untabbed_deity_fmtstr;
12673 any.a_void = 0;
12674 buf[0] = buf2[0] = '\0';
12675 tmpwin = create_nhwindow(NHW_MENU);
12676 start_menu(tmpwin);
12677 add_menu(tmpwin, NO_GLYPH, &any, 0, 0, iflags.menu_headings, "Starting", FALSE);
12679 /* Starting name, race, role, gender */
12680 sprintf(buf, fmtstr, "name", playeraliasname);
12681 add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, FALSE);
12682 sprintf(buf, fmtstr, "race", ustartrace.noun);
12683 add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, FALSE);
12684 sprintf(buf, fmtstr, "role",
12685 (flags.initgend && ustartrole.name.f) ? ustartrole.name.f : ustartrole.name.m);
12686 add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, FALSE);
12687 sprintf(buf, fmtstr, "gender", genders[flags.initgend].adj);
12688 add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, FALSE);
12690 /* Starting alignment */
12691 sprintf(buf, fmtstr, "alignment", align_str(u.ualignbase[A_ORIGINAL]));
12692 add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, FALSE);
12694 /* Hybridization (if any) */
12695 if (flags.hybridization) {
12697 sprintf(buf, fmtstr, "hybrid races", hybrid_str());
12698 add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, FALSE);
12702 /* Current name, race, role, gender */
12703 add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, "", FALSE);
12704 add_menu(tmpwin, NO_GLYPH, &any, 0, 0, iflags.menu_headings, "Current", FALSE);
12705 sprintf(buf, fmtstr, "race", (Upolyd && !missingnoprotect) ? youmonst.data->mname : urace.noun);
12706 add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, FALSE);
12707 if (Upolyd) {
12708 sprintf(buf, fmtstr, "role (base)",
12709 (u.mfemale && urole.name.f) ? urole.name.f : urole.name.m);
12710 add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, FALSE);
12711 } else {
12712 sprintf(buf, fmtstr, "role",
12713 (flags.female && urole.name.f) ? urole.name.f : urole.name.m);
12714 add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, FALSE);
12716 /* don't want poly_gender() here; it forces `2' for non-humanoids */
12717 genidx = is_neuter(youmonst.data) ? 2 : flags.female;
12718 sprintf(buf, fmtstr, "gender", genders[genidx].adj);
12719 add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, FALSE);
12720 if (Upolyd && (int)u.mfemale != genidx) {
12721 sprintf(buf, fmtstr, "gender (base)", genders[u.mfemale].adj);
12722 add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, FALSE);
12725 /* Current alignment */
12726 sprintf(buf, fmtstr, "alignment", align_str(u.ualign.type));
12727 add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, FALSE);
12729 /* Deity list */
12730 add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, "", FALSE);
12731 add_menu(tmpwin, NO_GLYPH, &any, 0, 0, iflags.menu_headings, "Deities", FALSE);
12732 sprintf(buf2, deity_fmtstr, align_gname(A_CHAOTIC),
12733 (u.ualignbase[A_ORIGINAL] == u.ualign.type
12734 && u.ualign.type == A_CHAOTIC) ? " (s,c)" :
12735 (u.ualignbase[A_ORIGINAL] == A_CHAOTIC) ? " (s)" :
12736 (u.ualign.type == A_CHAOTIC) ? " (c)" : "");
12737 sprintf(buf, fmtstr, "Chaotic", buf2);
12738 add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, FALSE);
12740 sprintf(buf2, deity_fmtstr, align_gname(A_NEUTRAL),
12741 (u.ualignbase[A_ORIGINAL] == u.ualign.type
12742 && u.ualign.type == A_NEUTRAL) ? " (s,c)" :
12743 (u.ualignbase[A_ORIGINAL] == A_NEUTRAL) ? " (s)" :
12744 (u.ualign.type == A_NEUTRAL) ? " (c)" : "");
12745 sprintf(buf, fmtstr, "Neutral", buf2);
12746 add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, FALSE);
12748 sprintf(buf2, deity_fmtstr, align_gname(A_LAWFUL),
12749 (u.ualignbase[A_ORIGINAL] == u.ualign.type &&
12750 u.ualign.type == A_LAWFUL) ? " (s,c)" :
12751 (u.ualignbase[A_ORIGINAL] == A_LAWFUL) ? " (s)" :
12752 (u.ualign.type == A_LAWFUL) ? " (c)" : "");
12753 sprintf(buf, fmtstr, "Lawful", buf2);
12754 add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, FALSE);
12756 end_menu(tmpwin, "Base Attributes");
12757 n = select_menu(tmpwin, PICK_NONE, &selected);
12758 destroy_nhwindow(tmpwin);
12759 return (n != -1);
12762 STATIC_PTR int
12763 doattributes()
12765 if (!minimal_enlightenment())
12766 return 0;
12767 if (wizard)
12768 enlightenment(0, 1);
12769 else if (discover && (yn("Show the attributes screen?") == 'y') )
12770 enlightenment(0, 1);
12771 return 0;
12774 static const struct menu_tab game_menu[] = {
12775 {'O', TRUE, doset, "Options"},
12776 {'r', TRUE, doredraw, "Redraw Screen"},
12777 #ifndef PUBLIC_SERVER
12778 {'x', TRUE, enter_explore_mode, "Enter Explore Mode"},
12779 {'!', TRUE, dosh, "Jump to Shell"},
12780 #endif
12781 {'S', TRUE, dosave, "Save"},
12782 {'q', TRUE, done2, "Quit [M-q]"},
12783 {0,0,0,0},
12786 static const struct menu_tab inv_menu[] = {
12787 {(char)0, TRUE, (void *)0, "View Inventory"},
12788 {'i', TRUE, ddoinv, "Inventory List"},
12789 {'I', TRUE, dotypeinv, "Inventory List by Type"},
12790 {'*', TRUE, doprinuse, "Items in use"},
12791 {(char)0, TRUE, (void *)0, "Ready Items"},
12792 {'w', FALSE, dowield, "Wield Weapon"},
12793 {'W', FALSE, dowear, "Wear Protective Gear"},
12794 {'Q', FALSE, dowieldquiver, "Prepare missile weapon (in Quiver)"},
12795 {'T', FALSE, dotakeoff, "Take off Protective Gear"},
12796 {(char)0, TRUE, (void *)0, "Manipulate Items"},
12797 {'a', FALSE, doapply, "Apply an object"},
12798 {'d', FALSE, dodip, "Dip an object [M-d]"},
12799 {'E', FALSE, doengrave, "Engrave into the ground"},
12800 {'f', FALSE, dofire, "Fire your prepared missile weapon"},
12801 {'i', TRUE, doinvoke, "Invoke your weapon"},
12802 {'t', FALSE, dothrow, "Throw an item"},
12803 {(char)0, TRUE, (void *)0, "Drop Items"},
12804 {'d', FALSE, dodrop, "Drop an object"},
12805 {'D', FALSE, doddrop, "Multi-Drop"},
12806 {0,0,0,0}
12809 static const struct menu_tab action_menu[] = {
12810 {'c', FALSE, doclose, "Close a door"},
12811 {'e', FALSE, doeat, "Eat some food"},
12812 {'f', FALSE, doforce, "Force a lock [M-f]"},
12813 {'l', FALSE, doloot, "Loot an object"},
12814 {'o', FALSE, doopen, "Open a door"},
12815 {'q', TRUE, dodrink, "Quaff a potion"},
12816 {'r', FALSE, doread, "Read an object"},
12817 {'u', FALSE, dountrap, "Untrap"},
12818 {'z', FALSE, dozap, "Zap a wand"},
12819 {'Z', TRUE, docast, "Cast a spell"},
12820 {0,0,0,0}
12823 static const struct menu_tab player_menu[] = {
12824 {'b', FALSE, playersteal, "Steal from Monsters [M-b]"},
12825 {'c', TRUE, dotalk, "Chat with Monsters [M-c]"},
12826 {'d', FALSE, dokick, "Do Kick"},
12827 /* {'e', FALSE, specialpower, "Use your Class Ability [M-e]"},*/
12828 {'e', TRUE, enhance_weapon_skill, "Weapon Skills [M-k]"},
12829 {'m', TRUE, domonability, "Use your Monster Ability [M-m]"},
12830 {'o', FALSE, dosacrifice, "Offer a Sacrifice [M-o]"},
12831 {'p', FALSE, dopay, "Pay the Shopkeeper"},
12832 {'s', FALSE, dosit, "Sit down [M-s]"},
12833 {'t', TRUE, dotele, "Controlled Teleport [C-t]"},
12834 /* {'T', TRUE, doturn, "Turn Undead [M-t]"},*/
12835 {'T', TRUE, dotech, "Use Techniques [M-t]"},
12836 {'U', TRUE, doremoveimarkers, "Remove 'I' markers [M-u]"},
12837 {'x', TRUE, doattributes, "Show attributes"},
12838 {'y', TRUE, polyatwill, "Self-Polymorph [M-y]"},
12839 {0,0,0,0}
12842 #ifdef WIZARD
12843 static const struct menu_tab wizard_menu[] = {
12844 {'c', TRUE, wiz_gain_ac, "Increase AC"},
12845 #ifdef DISPLAY_LAYERS
12846 {'d', TRUE, wiz_show_display, "Detail display layers"},
12847 #endif
12848 {'e', TRUE, wiz_detect, "Detect secret doors and traps"},
12849 {'f', TRUE, wiz_map, "Do magic mapping"},
12850 {'g', TRUE, wiz_genesis, "Create monster"},
12851 {'i', TRUE, wiz_identify, "Identify items in pack"},
12852 {'j', TRUE, wiz_gain_level, "Go up an experience level"},
12853 {'n', TRUE, wiz_toggle_invulnerability, "Toggle invulnerability"},
12854 {'o', TRUE, wiz_where, "Tell locations of special levels"},
12855 {'v', TRUE, wiz_level_tele, "Do trans-level teleport"},
12856 {'w', TRUE, wiz_wish, "Make wish"},
12857 {'H', TRUE, wiz_detect_monsters, "Detect monsters"},
12858 {'L', TRUE, wiz_light_sources, "show mobile light sources"},
12859 {'M', TRUE, wiz_show_stats, "show memory statistics"},
12860 {'S', TRUE, wiz_show_seenv, "show seen vectors"},
12861 {'T', TRUE, wiz_timeout_queue, "look at timeout queue"},
12862 {'V', TRUE, wiz_show_vision, "show vision array"},
12863 {'W', TRUE, wiz_show_wmodes, "show wall modes"},
12864 #ifdef DEBUG
12865 {'&', TRUE, wiz_debug_cmd, "wizard debug command"},
12866 #endif
12867 {0,0,0,0,0},
12869 #endif
12871 static const struct menu_tab help_menu[] = {
12872 {'?', TRUE, dohelp, "Help Contents"},
12873 {'v', TRUE, doextversion, "Version"},
12874 {'/', TRUE, dowhatis, "Identify an object on the screen" },
12875 {'&', TRUE, dowhatdoes, "Determine what a key does"},
12876 {0,0,0,0,0},
12879 static const struct menu_tab main_menu[] = {
12880 {'g', TRUE, (void *)0, "Game"},
12881 {'i', TRUE, (void *)0, "Inventory"},
12882 {'a', TRUE, (void *)0, "Action"},
12883 {'p', TRUE, (void *)0, "Player"},
12884 {'d', TRUE, (void *)0, "Discoveries"},
12885 #ifdef WIZARD
12886 {'w', TRUE, (void *)0, "Wizard"},
12887 #endif
12888 {'?', TRUE, (void *)0, "Help"},
12889 {0,0,0,0},
12892 static const struct menu_tab discover_menu[] = {
12893 {'X', TRUE, dovspell, "View known spells"}, /* Mike Stephenson */
12894 {'d', TRUE, dodiscovered, "Items already discovered [\\]"}, /* Robert Viduya */
12895 {'C', TRUE, do_mname, "Name a monster"},
12896 {0,0,0,0},
12899 static struct menu_list main_menustruct[] = {
12900 {"Game", "Main Menu", game_menu},
12901 {"Inventory", "Main Menu", inv_menu},
12902 {"Action", "Main Menu", action_menu},
12903 {"Player", "Main Menu", player_menu},
12904 {"Discoveries", "Main Menu", discover_menu},
12905 #ifdef WIZARD
12906 {"Wizard", "Main Menu", wizard_menu},
12907 #endif
12908 {"Help", "Main Menu", help_menu},
12909 {"Main Menu",(char *)0, main_menu},
12910 {0,0,0},
12913 STATIC_PTR int
12914 makemenu(menuname, menu_struct)
12915 const char *menuname;
12916 struct menu_list menu_struct[];
12918 winid win;
12919 anything any;
12920 menu_item *selected;
12921 int n, i, (*func)(void);
12922 const struct menu_tab *current_menu;
12924 any.a_void = 0;
12925 win = create_nhwindow(NHW_MENU);
12926 start_menu(win);
12928 for (i = 0; menu_struct[i].m_header; i++) {
12929 if (strcmp(menu_struct[i].m_header,menuname)) continue;
12930 current_menu = menu_struct[i].m_menu;
12931 for (n = 0; current_menu[n].m_item; n++) {
12932 if (u.uburied && !current_menu[n].can_if_buried) continue;
12933 #ifdef WIZARD
12934 if (!wizard && !current_menu[n].m_funct && !strcmp(current_menu[n].m_item,"Wizard")) continue;
12935 #endif
12936 if (current_menu[n].m_char == (char)0) {
12937 any.a_int = 0;
12938 add_menu(win, NO_GLYPH, &any, 0, 0, ATR_BOLD,
12939 current_menu[n].m_item, MENU_UNSELECTED);
12940 continue;
12942 any.a_int = n + 1; /* non-zero */
12943 add_menu(win, NO_GLYPH, &any, current_menu[n].m_char,
12944 0, ATR_NONE, current_menu[n].m_item, MENU_UNSELECTED);
12946 break;
12948 end_menu(win, menuname);
12949 n = select_menu(win, PICK_ONE, &selected);
12950 destroy_nhwindow(win);
12951 if (n > 0) {
12952 /* we discard 'const' because some compilers seem to have
12953 trouble with the pointer passed to set_occupation() */
12954 i = selected[0].item.a_int - 1;
12955 func = current_menu[i].m_funct;
12956 if (current_menu[i].m_text && !occupation && multi)
12957 set_occupation(func, current_menu[i].m_text, multi);
12958 /*WAC catch void into makemenu */
12959 if (func == (void *)0)
12960 return (makemenu(current_menu[i].m_item, menu_struct));
12961 else return (*func)(); /* perform the command */
12962 } else if (n < 0) {
12963 for (i = 0; menu_struct[i].m_header; i++){
12964 if (menuname == menu_struct[i].m_header) {
12965 if (menu_struct[i].m_parent)
12966 return (makemenu(menu_struct[i].m_parent, menu_struct));
12967 else return (0);
12971 return 0;
12974 STATIC_PTR int
12975 domenusystem() /* WAC add helpful menus ;B */
12977 return (makemenu("Main Menu", main_menustruct));
12980 /* KMH, #conduct
12981 * (shares enlightenment's tense handling)
12983 STATIC_PTR int
12984 doconduct()
12986 show_conduct(0);
12987 return 0;
12990 /* format increased damage or chance to hit */
12991 static char *
12992 enlght_combatinc(inctyp, incamt, final, outbuf)
12993 const char *inctyp;
12994 int incamt, final;
12995 char *outbuf;
12997 char numbuf[24];
12998 const char *modif, *bonus;
13000 if (final
13001 #ifdef WIZARD
13002 || wizard
13003 #endif
13005 sprintf(numbuf, "%s%d",
13006 (incamt > 0) ? "+" : "", incamt);
13007 modif = (const char *) numbuf;
13008 } else {
13009 int absamt = abs(incamt);
13011 if (absamt <= 3) modif = "small";
13012 else if (absamt <= 6) modif = "moderate";
13013 else if (absamt <= 12) modif = "large";
13014 else modif = "huge";
13016 bonus = (incamt > 0) ? "bonus" : "penalty";
13017 /* "bonus to hit" vs "damage bonus" */
13018 if (!strcmp(inctyp, "damage")) {
13019 const char *ctmp = inctyp;
13020 inctyp = bonus;
13021 bonus = ctmp;
13023 sprintf(outbuf, "%s %s %s", an(modif), bonus, inctyp);
13024 return outbuf;
13027 void
13028 show_conduct(final)
13029 int final;
13031 char buf[BUFSZ];
13032 int ngenocided;
13034 /* Create the conduct window */
13035 en_win = create_nhwindow(NHW_MENU);
13036 putstr(en_win, 0, "Voluntary challenges:");
13037 putstr(en_win, 0, "");
13039 if (!u.uconduct.food && !u.uconduct.unvegan)
13040 enl_msg(You_, "have gone", "went", " without food");
13041 /* But beverages are okay */
13042 else if (!u.uconduct.food)
13043 enl_msg(You_, "have gone", "went", " without eating");
13044 /* But quaffing animal products (eg., blood) is okay */
13045 else if (!u.uconduct.unvegan) {
13046 you_have_X("followed a strict vegan diet");
13047 sprintf(buf, "eaten %ld time%s",
13048 u.uconduct.food, plur(u.uconduct.food));
13049 you_have_X(buf);
13051 else if (!u.uconduct.unvegetarian) {
13052 you_have_been("vegetarian");
13053 sprintf(buf, "eaten %ld time%s",
13054 u.uconduct.food, plur(u.uconduct.food));
13055 you_have_X(buf);
13056 sprintf(buf, "eaten food with animal by-products %ld time%s",
13057 u.uconduct.unvegan, plur(u.uconduct.unvegan));
13058 you_have_X(buf);
13061 else {
13062 sprintf(buf, "eaten %ld time%s",
13063 u.uconduct.food, plur(u.uconduct.food));
13064 you_have_X(buf);
13065 sprintf(buf, "eaten food with animal by-products %ld time%s",
13066 u.uconduct.unvegan, plur(u.uconduct.unvegan));
13067 you_have_X(buf);
13068 sprintf(buf, "eaten meat %ld time%s",
13069 u.uconduct.unvegetarian, plur(u.uconduct.unvegetarian));
13070 you_have_X(buf);
13074 if (!u.uconduct.gnostic)
13075 you_have_been("an atheist");
13076 else { sprintf(buf, "communicated with the gods %ld time%s",
13077 u.uconduct.gnostic, plur(u.uconduct.gnostic));
13078 you_have_X(buf);
13081 if (!u.uconduct.praydone)
13082 you_have_never("prayed to the gods");
13083 else { sprintf(buf, "prayed %ld time%s",
13084 u.uconduct.praydone, plur(u.uconduct.praydone));
13085 you_have_X(buf);
13088 if (!u.uconduct.weaphit)
13089 you_have_never("hit with a wielded weapon");
13090 else {
13091 sprintf(buf, "used a wielded weapon %ld time%s",
13092 u.uconduct.weaphit, plur(u.uconduct.weaphit));
13093 you_have_X(buf);
13095 if (!u.uconduct.killer)
13096 you_have_been("a pacifist");
13097 else {
13098 sprintf(buf, "killed %ld monster%s",
13099 u.uconduct.killer, plur(u.uconduct.killer));
13100 you_have_X(buf);
13104 if (!u.uconduct.literate)
13105 you_have_been("illiterate");
13106 else {
13107 sprintf(buf, "read items or engraved %ld time%s",
13108 u.uconduct.literate, plur(u.uconduct.literate));
13109 you_have_X(buf);
13112 ngenocided = num_genocides();
13113 if (ngenocided == 0) {
13114 you_have_never("genocided any monsters");
13115 } else {
13116 sprintf(buf, "genocided %d type%s of monster%s",
13117 ngenocided, plur(ngenocided), plur(ngenocided));
13118 you_have_X(buf);
13121 if (!u.uconduct.polypiles)
13122 you_have_never("polymorphed an object");
13123 else {
13124 sprintf(buf, "polymorphed %ld item%s",
13125 u.uconduct.polypiles, plur(u.uconduct.polypiles));
13126 you_have_X(buf);
13129 if (!u.uconduct.polyselfs)
13130 you_have_never("changed form");
13131 else {
13132 sprintf(buf, "changed form %ld time%s",
13133 u.uconduct.polyselfs, plur(u.uconduct.polyselfs));
13134 you_have_X(buf);
13137 if (!u.uconduct.wishes)
13138 you_have_X("used no wishes");
13139 else {
13140 sprintf(buf, "used %ld wish%s",
13141 u.uconduct.wishes, (u.uconduct.wishes > 1L) ? "es" : "");
13142 you_have_X(buf);
13144 if (!u.uconduct.wisharti)
13145 enl_msg(You_, "have not wished", "did not wish",
13146 " for any artifacts");
13150 if (!u.uconduct.celibacy)
13151 you_have_X("remained celibate");
13152 else {
13153 sprintf(buf, "your vow of celibacy %ld time%s",
13154 u.uconduct.celibacy, plur(u.uconduct.celibacy));
13155 enl_msg(You_, "have broken ", "broke ", buf);
13158 /* extra statistics by Amy. Most of them can be accessed by using the #conduct command, but some would leak info
13159 * that the player couldn't otherwise have during a running game and are therefore only displayed when the game is
13160 * over. In fact, you could probably leak info with all of them when having nasty traps active, but oh well... */
13162 if (u.cnd_applycount) {
13163 sprintf(buf, "%d time%s", u.cnd_applycount, plur(u.cnd_applycount));
13164 enl_msg(You_, "have applied items ", "applied items ", buf);
13166 if (u.cnd_unihorncount) {
13167 sprintf(buf, "%d time%s", u.cnd_unihorncount, plur(u.cnd_unihorncount));
13168 enl_msg(You_, "experienced the healing effects of unicorn horns ", "experienced the healing effects of unicorn horns ", buf);
13170 if (u.cnd_markercount) {
13171 sprintf(buf, "%d item%s with the magic marker", u.cnd_markercount, plur(u.cnd_markercount));
13172 enl_msg(You_, "have created ", "created ", buf);
13174 if (u.cnd_chemistrycount) {
13175 sprintf(buf, "%d item%s with the chemistry set", u.cnd_chemistrycount, plur(u.cnd_chemistrycount));
13176 enl_msg(You_, "have created ", "created ", buf);
13178 if (u.cnd_quaffcount) {
13179 sprintf(buf, "%d potion%s", u.cnd_quaffcount, plur(u.cnd_quaffcount));
13180 enl_msg(You_, "have quaffed ", "quaffed ", buf);
13182 if (u.cnd_zapcount) {
13183 sprintf(buf, "%d time%s", u.cnd_zapcount, plur(u.cnd_zapcount));
13184 enl_msg(You_, "have zapped wands ", "zapped wands ", buf);
13186 if (u.cnd_scrollcount) {
13187 sprintf(buf, "%d time%s", u.cnd_scrollcount, plur(u.cnd_scrollcount));
13188 enl_msg(You_, "have read scrolls ", "read scrolls ", buf);
13190 if (u.cnd_spellbookcount) {
13191 sprintf(buf, "%d time%s", u.cnd_spellbookcount, plur(u.cnd_spellbookcount));
13192 enl_msg(You_, "have read spellbooks ", "read spellbooks ", buf);
13194 if (u.cnd_spellcastcount) {
13195 sprintf(buf, "%d time%s", u.cnd_spellcastcount, plur(u.cnd_spellcastcount));
13196 enl_msg(You_, "have successfully cast spells ", "successfully cast spells ", buf);
13198 if (u.cnd_spellfailcount) {
13199 sprintf(buf, "%d time%s", u.cnd_spellfailcount, plur(u.cnd_spellfailcount));
13200 enl_msg(You_, "have failed to cast a spell ", "failed to cast a spell ", buf);
13202 if (u.cnd_forgottenspellcount) {
13203 sprintf(buf, "%d time%s", u.cnd_forgottenspellcount, plur(u.cnd_forgottenspellcount));
13204 enl_msg(You_, "have attempted to cast forgotten spells ", "attempted to cast forgotten spells ", buf);
13206 if (u.cnd_invokecount) {
13207 sprintf(buf, "%d time%s", u.cnd_invokecount, plur(u.cnd_invokecount));
13208 enl_msg(You_, "have used the invocation effects of artifacts ", "used the invocation effects of artifacts ", buf);
13210 if (u.cnd_techcount) {
13211 sprintf(buf, "%d time%s", u.cnd_techcount, plur(u.cnd_techcount));
13212 enl_msg(You_, "have used techniques ", "used techniques ", buf);
13214 if (u.cnd_phasedoorcount) {
13215 sprintf(buf, "%d time%s", u.cnd_phasedoorcount, plur(u.cnd_phasedoorcount));
13216 enl_msg(You_, "have phase doored ", "phase doored ", buf);
13218 if (u.cnd_teleportcount) {
13219 sprintf(buf, "%d time%s", u.cnd_teleportcount, plur(u.cnd_teleportcount));
13220 enl_msg(You_, "have teleported ", "teleported ", buf);
13222 if (u.cnd_telelevelcount) {
13223 sprintf(buf, "%d time%s", u.cnd_telelevelcount, plur(u.cnd_telelevelcount));
13224 enl_msg(You_, "have levelported ", "levelported ", buf);
13226 if (u.cnd_branchportcount) {
13227 sprintf(buf, "%d time%s", u.cnd_branchportcount, plur(u.cnd_branchportcount));
13228 enl_msg(You_, "have branchported ", "branchported ", buf);
13230 if (u.cnd_banishmentcount) {
13231 sprintf(buf, "%d time%s", u.cnd_banishmentcount, plur(u.cnd_banishmentcount));
13232 enl_msg(You_, "were banished ", "were banished ", buf);
13234 if (u.cnd_punishmentcount) {
13235 sprintf(buf, "%d time%s", u.cnd_punishmentcount, plur(u.cnd_punishmentcount));
13236 enl_msg(You_, "were punished ", "were punished ", buf);
13238 /* pet death count not disclosed because you might not notice that your pet died --Amy */
13239 if (u.cnd_petdeathcount && final) {
13240 sprintf(buf, "%d pet%s", u.cnd_petdeathcount, plur(u.cnd_petdeathcount));
13241 enl_msg(You_, "had to mourn the death of ", "had to mourn the death of ", buf);
13243 /* amnesia count not disclosed because there's not always a clue that you got hit by amnesia --Amy */
13244 if (u.cnd_amnesiacount && final) {
13245 sprintf(buf, "%d time%s", u.cnd_amnesiacount, plur(u.cnd_amnesiacount));
13246 enl_msg(You_, "have suffered from amnesia ", "suffered from amnesia ", buf);
13248 if (final) {
13249 sprintf(buf, "%d", u.cnd_minalignment);
13250 enl_msg(You_, "had a minimum alignment of ", "had a minimum alignment of ", buf);
13252 if (final) {
13253 sprintf(buf, "%d", u.cnd_maxalignment);
13254 enl_msg(You_, "had a maximum alignment of ", "had a maximum alignment of ", buf);
13256 if (u.cnd_maxsanity) {
13257 sprintf(buf, "%d", u.cnd_maxsanity);
13258 enl_msg(You_, "had a maximum sanity of ", "had a maximum sanity of ", buf);
13260 /* sanity can be displayed, contamination requires enlightenment, so the latter is not disclosed --Amy */
13261 if (u.cnd_maxcontamination && final) {
13262 sprintf(buf, "%d", u.cnd_maxcontamination);
13263 enl_msg(You_, "had a maximum contamination of ", "had a maximum contamination of ", buf);
13265 if (u.cnd_searchtrapcount) {
13266 sprintf(buf, "%d time%s", u.cnd_searchtrapcount, plur(u.cnd_searchtrapcount));
13267 enl_msg(You_, "have successfully searched for traps ", "successfully searched for traps ", buf);
13269 if (u.cnd_searchsecretcount) {
13270 sprintf(buf, "%d time%s", u.cnd_searchsecretcount, plur(u.cnd_searchsecretcount));
13271 enl_msg(You_, "have successfully searched for doors or corridors ", "successfully searched for doors or corridors ", buf);
13273 if (u.cnd_fartingcount) {
13274 sprintf(buf, "%d time%s", u.cnd_fartingcount, plur(u.cnd_fartingcount));
13275 enl_msg(You_, "heard farting noises ", "heard farting noises ", buf);
13277 if (u.cnd_crappingcount) {
13278 sprintf(buf, "%d time%s", u.cnd_crappingcount, plur(u.cnd_crappingcount));
13279 enl_msg(You_, "heard crapping noises ", "heard crapping noises ", buf);
13281 if (u.cnd_conversioncount) {
13282 sprintf(buf, "%d time%s", u.cnd_conversioncount, plur(u.cnd_conversioncount));
13283 enl_msg(You_, "listened to conversion sermon ", "listened to conversion sermon ", buf);
13285 if (u.cnd_wouwoucount) {
13286 sprintf(buf, "%d time%s", u.cnd_wouwoucount, plur(u.cnd_wouwoucount));
13287 enl_msg(You_, "heard the frightening wouwou taunts ", "heard the frightening wouwou taunts ", buf);
13289 if (u.cnd_supermancount) {
13290 sprintf(buf, "%d time%s", u.cnd_supermancount, plur(u.cnd_supermancount));
13291 enl_msg(You_, "heard superman taunts ", "heard superman taunts ", buf);
13293 if (u.cnd_perfumecount) {
13294 sprintf(buf, "%d time%s", u.cnd_perfumecount, plur(u.cnd_perfumecount));
13295 enl_msg(You_, "inhaled scentful feminine perfume ", "inhaled scentful feminine perfume ", buf);
13297 if (u.cnd_nutkickamount) {
13298 sprintf(buf, "%d time%s", u.cnd_nutkickamount, plur(u.cnd_nutkickamount));
13299 enl_msg(You_, "got your nuts kicked ", "got your nuts kicked ", buf);
13301 if (u.cnd_breastripamount) {
13302 sprintf(buf, "%d time%s", u.cnd_breastripamount, plur(u.cnd_breastripamount));
13303 enl_msg(You_, "got hit in the breasts ", "got hit in the breasts ", buf);
13305 if (u.cnd_saveamount) {
13306 sprintf(buf, "%d time%s", u.cnd_saveamount, plur(u.cnd_saveamount));
13307 enl_msg(You_, "have saved the game ", "saved the game ", buf);
13309 if (u.cnd_ragnarokamount) {
13310 sprintf(buf, "%d time%s", u.cnd_ragnarokamount, plur(u.cnd_ragnarokamount));
13311 enl_msg(You_, "encountered the ragnarok event ", "encountered the ragnarok event ", buf);
13313 if (u.cnd_datadeleteamount) {
13314 sprintf(buf, "%d time%s", u.cnd_datadeleteamount, plur(u.cnd_datadeleteamount));
13315 enl_msg(You_, "had your data deleted ", "had your data deleted ", buf);
13317 /* the curse items effect seems to give no message if you're blind, so you don't always see it happen --Amy */
13318 if (u.cnd_curseitemsamount && final) {
13319 sprintf(buf, "%d time%s", u.cnd_curseitemsamount, plur(u.cnd_curseitemsamount));
13320 enl_msg(You_, "encountered the curse items effect ", "encountered the curse items effect ", buf);
13322 /* nasty traps give no message and don't reveal themselves, so I sure as heck won't leak info here --Amy */
13323 if (u.cnd_nastytrapamount && final) {
13324 sprintf(buf, "%d time%s", u.cnd_nastytrapamount, plur(u.cnd_nastytrapamount));
13325 enl_msg(You_, "have triggered nasty traps ", "triggered nasty traps ", buf);
13327 /* these do give messages, but still, there might be situations where they don't --Amy */
13328 if (u.cnd_feminismtrapamount && final) {
13329 sprintf(buf, "%d time%s", u.cnd_feminismtrapamount, plur(u.cnd_feminismtrapamount));
13330 enl_msg(You_, "have triggered feminism traps ", "triggered feminism traps ", buf);
13332 if (u.cnd_plineamount) {
13333 sprintf(buf, "%d time%s", u.cnd_plineamount, plur(u.cnd_plineamount));
13334 enl_msg(You_, "had to read random messages ", "had to read random messages ", buf);
13336 /* yeah we obviously can't leak how many monsters were summoned --Amy */
13337 if (u.cnd_aggravateamount && final) {
13338 sprintf(buf, "%d monster%s come out of portals", u.cnd_aggravateamount, plur(u.cnd_aggravateamount));
13339 enl_msg(You_, "saw ", "saw ", buf);
13341 if (u.cnd_eatrinsicamount) {
13342 sprintf(buf, "%d time%s", u.cnd_eatrinsicamount, plur(u.cnd_eatrinsicamount));
13343 enl_msg(You_, "have gained intrinsics from eating corpses ", "gained intrinsics from eating corpses ", buf);
13345 if (u.cnd_shkserviceamount) {
13346 sprintf(buf, "%d time%s", u.cnd_shkserviceamount, plur(u.cnd_shkserviceamount));
13347 enl_msg(You_, "have purchased shopkeeper services ", "purchased shopkeeper services ", buf);
13349 /* yet again, player doesn't always know how many were summoned --Amy */
13350 if (u.cnd_kopsummonamount && final) {
13351 sprintf(buf, "%d time%s", u.cnd_kopsummonamount, plur(u.cnd_kopsummonamount));
13352 enl_msg(You_, "had the kops called on you ", "had the kops called on you ", buf);
13354 if (u.cnd_captchaamount) {
13355 sprintf(buf, "%d captcha%s", u.cnd_captchaamount, plur(u.cnd_captchaamount));
13356 enl_msg(You_, "have solved ", "solved ", buf);
13358 if (u.cnd_captchafail) {
13359 sprintf(buf, "%d time%s", u.cnd_captchafail, plur(u.cnd_captchafail));
13360 enl_msg(You_, "failed to solve a captcha ", "failed to solve a captcha ", buf);
13362 if (u.cnd_quizamount) {
13363 sprintf(buf, "%d quiz question%s", u.cnd_quizamount, plur(u.cnd_quizamount));
13364 enl_msg(You_, "correctly answered ", "correctly answered ", buf);
13366 if (u.cnd_quizfail) {
13367 sprintf(buf, "%d quiz question%s", u.cnd_quizfail, plur(u.cnd_quizfail));
13368 enl_msg(You_, "incorrectly answered ", "incorrectly answered ", buf);
13370 /* alter reality doesn't always give a message --Amy */
13371 if (u.cnd_alterrealityamount && final) {
13372 sprintf(buf, "%d time%s", u.cnd_alterrealityamount, plur(u.cnd_alterrealityamount));
13373 enl_msg(You_, "had the reality altered ", "had the reality altered ", buf);
13375 if (u.cnd_unlockamount) {
13376 sprintf(buf, "%d lock%s", u.cnd_unlockamount, plur(u.cnd_unlockamount));
13377 enl_msg(You_, "picked ", "picked ", buf);
13379 if (u.cnd_altarconvertamount) {
13380 sprintf(buf, "%d altar%s", u.cnd_altarconvertamount, plur(u.cnd_altarconvertamount));
13381 enl_msg(You_, "have converted ", "converted ", buf);
13383 if (u.cnd_itemstealamount) {
13384 sprintf(buf, "%d time%s", u.cnd_itemstealamount, plur(u.cnd_itemstealamount));
13385 enl_msg(You_, "had your items stolen ", "had your items stolen ", buf);
13387 if (u.cnd_poisonamount) {
13388 sprintf(buf, "%d time%s", u.cnd_poisonamount, plur(u.cnd_poisonamount));
13389 enl_msg(You_, "got poisoned ", "got poisoned ", buf);
13391 if (u.cnd_nursehealamount) {
13392 sprintf(buf, "%d extra hit point%s from nurses", u.cnd_nursehealamount, plur(u.cnd_nursehealamount));
13393 enl_msg(You_, "have gained ", "gained ", buf);
13395 if (u.cnd_nurseserviceamount) {
13396 sprintf(buf, "%d time%s", u.cnd_nurseserviceamount, plur(u.cnd_nurseserviceamount));
13397 enl_msg(You_, "have purchased nurse services ", "purchased nurse services ", buf);
13399 /* if you're blind, the game doesn't tell you that elbereth did something --Amy */
13400 if (u.cnd_elberethamount && final) {
13401 sprintf(buf, "%d monster%s with Elbereth engravings", u.cnd_elberethamount, plur(u.cnd_elberethamount));
13402 enl_msg(You_, "scared ", "scared ", buf);
13404 /* disenchantment can also happen silently --Amy */
13405 if (u.cnd_disenchantamount && final) {
13406 sprintf(buf, "%d time%s", u.cnd_disenchantamount, plur(u.cnd_disenchantamount));
13407 enl_msg(You_, "had your items disenchanted ", "had your items disenchanted ", buf);
13409 if (u.cnd_permstatdamageamount) {
13410 sprintf(buf, "%d time%s", u.cnd_permstatdamageamount, plur(u.cnd_permstatdamageamount));
13411 enl_msg(You_, "permanently lost stat points ", "permanently lost stat points ", buf);
13413 if (u.cnd_shoedamageamount) {
13414 sprintf(buf, "%d time%s", u.cnd_shoedamageamount, plur(u.cnd_shoedamageamount));
13415 enl_msg(You_, "got whacked or kicked by female shoes ", "got whacked or kicked by female shoes ", buf);
13417 if (u.cnd_farmlandremoved) {
13418 sprintf(buf, "%d time%s", u.cnd_farmlandremoved, plur(u.cnd_farmlandremoved));
13419 enl_msg(You_, "forced farmland tiles out of existence ", "forced farmland tiles out of existence ", buf);
13421 if (u.cnd_nethermistremoved) {
13422 sprintf(buf, "%d time%s", u.cnd_nethermistremoved, plur(u.cnd_nethermistremoved));
13423 enl_msg(You_, "dissipated nether mist ", "dissipated nether mist ", buf);
13425 /* you don't necessarily see the square that your ammo ended up on --Amy */
13426 if (u.cnd_ammomulched && final) {
13427 sprintf(buf, "%d ranged weapon ammo%s", u.cnd_ammomulched, plur(u.cnd_ammomulched));
13428 enl_msg(You_, "have mulched ", "mulched ", buf);
13430 /* you don't always see or hear your grenades explode either --Amy */
13431 if (u.cnd_gunpowderused && final) {
13432 sprintf(buf, "%d gram%s of gunpowder", u.cnd_gunpowderused, plur(u.cnd_gunpowderused));
13433 enl_msg(You_, "have used up ", "used up ", buf);
13435 /* we won't leak whether your scroll of charging was cursed or not --Amy */
13436 if (u.cnd_chargingcount && final) {
13437 sprintf(buf, "%d time%s", u.cnd_chargingcount, plur(u.cnd_chargingcount));
13438 enl_msg(You_, "have recharged your items ", "recharged your items ", buf);
13440 if (u.cnd_offercount) {
13441 sprintf(buf, "%d time%s", u.cnd_offercount, plur(u.cnd_offercount));
13442 enl_msg(You_, "have made offerings to the gods ", "made offerings to the gods ", buf);
13444 if (u.cnd_forcecount) {
13445 sprintf(buf, "%d time%s", u.cnd_forcecount, plur(u.cnd_forcecount));
13446 enl_msg(You_, "have used the force against an enemy ", "used the force against an enemy ", buf);
13448 if (u.cnd_forcebuttcount) {
13449 sprintf(buf, "%d time%s", u.cnd_forcebuttcount, plur(u.cnd_forcebuttcount));
13450 enl_msg(You_, "have bashed hostile butt cheeks ", "bashed hostile butt cheeks ", buf);
13452 if (u.cnd_kickmonstercount) {
13453 sprintf(buf, "%d time%s", u.cnd_kickmonstercount, plur(u.cnd_kickmonstercount));
13454 enl_msg(You_, "have kicked monsters ", "kicked monsters ", buf);
13456 if (u.cnd_kicklockcount) {
13457 sprintf(buf, "%d time%s", u.cnd_kicklockcount, plur(u.cnd_kicklockcount));
13458 enl_msg(You_, "have kicked doors or locked containers ", "kicked doors or locked containers ", buf);
13460 if (u.cnd_fumbled) {
13461 sprintf(buf, "%d time%s", u.cnd_fumbled, plur(u.cnd_fumbled));
13462 enl_msg(You_, "have fumbled ", "fumbled ", buf);
13464 if (u.cnd_wandwresting) {
13465 sprintf(buf, "%d time%s", u.cnd_wandwresting, plur(u.cnd_wandwresting));
13466 enl_msg(You_, "have wrested wands ", "wrested wands ", buf);
13468 if (u.cnd_firedestroy) {
13469 sprintf(buf, "%d item%s to fire damage", u.cnd_firedestroy, plur(u.cnd_firedestroy));
13470 enl_msg(You_, "lost ", "lost ", buf);
13472 if (u.cnd_colddestroy) {
13473 sprintf(buf, "%d item%s to cold damage", u.cnd_colddestroy, plur(u.cnd_colddestroy));
13474 enl_msg(You_, "lost ", "lost ", buf);
13476 if (u.cnd_shockdestroy) {
13477 sprintf(buf, "%d item%s to shock damage", u.cnd_shockdestroy, plur(u.cnd_shockdestroy));
13478 enl_msg(You_, "lost ", "lost ", buf);
13480 if (u.cnd_poisondestroy) {
13481 sprintf(buf, "%d item%s to poison damage", u.cnd_poisondestroy, plur(u.cnd_poisondestroy));
13482 enl_msg(You_, "lost ", "lost ", buf);
13484 if (u.cnd_diggingamount) {
13485 sprintf(buf, "%d time%s", u.cnd_diggingamount, plur(u.cnd_diggingamount));
13486 enl_msg(You_, "dug with digging tools ", "dug with digging tools ", buf);
13488 if (u.cnd_gravewallamount) {
13489 sprintf(buf, "%d time%s", u.cnd_gravewallamount, plur(u.cnd_gravewallamount));
13490 enl_msg(You_, "dug out grave walls ", "dug out grave walls ", buf);
13492 if (u.cnd_treechopamount) {
13493 sprintf(buf, "%d tree%s", u.cnd_treechopamount, plur(u.cnd_treechopamount));
13494 enl_msg(You_, "chopped down ", "chopped down ", buf);
13496 if (u.cnd_barbashamount) {
13497 sprintf(buf, "%d set%s of iron bars", u.cnd_barbashamount, plur(u.cnd_barbashamount));
13498 enl_msg(You_, "bashed down ", "bashed down ", buf);
13500 if (u.cnd_fountainamount) {
13501 sprintf(buf, "%d time%s", u.cnd_fountainamount, plur(u.cnd_fountainamount));
13502 enl_msg(You_, "interacted with fountains ", "interacted with fountains ", buf);
13504 if (u.cnd_throneamount) {
13505 sprintf(buf, "%d time%s", u.cnd_throneamount, plur(u.cnd_throneamount));
13506 enl_msg(You_, "sat on a throne ", "sat on a throne ", buf);
13508 if (u.cnd_sinkamount) {
13509 sprintf(buf, "%d time%s", u.cnd_sinkamount, plur(u.cnd_sinkamount));
13510 enl_msg(You_, "interacted with a sink ", "interacted with a sink ", buf);
13512 if (u.cnd_toiletamount) {
13513 sprintf(buf, "%d time%s", u.cnd_toiletamount, plur(u.cnd_toiletamount));
13514 enl_msg(You_, "interacted with a toilet ", "interacted with a toilet ", buf);
13516 if (u.cnd_pentagramamount) {
13517 sprintf(buf, "%d time%s", u.cnd_pentagramamount, plur(u.cnd_pentagramamount));
13518 enl_msg(You_, "invoked a pentagram ", "invoked a pentagram ", buf);
13520 if (u.cnd_wellamount) {
13521 sprintf(buf, "%d time%s", u.cnd_wellamount, plur(u.cnd_wellamount));
13522 enl_msg(You_, "quaffed from a well ", "quaffed from a well ", buf);
13524 if (u.cnd_poisonedwellamount) {
13525 sprintf(buf, "%d time%s", u.cnd_poisonedwellamount, plur(u.cnd_poisonedwellamount));
13526 enl_msg(You_, "quaffed from a poisoned well ", "quaffed from a poisoned well ", buf);
13528 if (u.cnd_bedamount) {
13529 sprintf(buf, "%d time%s", u.cnd_bedamount, plur(u.cnd_bedamount));
13530 enl_msg(You_, "slept in a bed ", "slept in a bed ", buf);
13532 if (u.cnd_mattressamount) {
13533 sprintf(buf, "%d time%s", u.cnd_mattressamount, plur(u.cnd_mattressamount));
13534 enl_msg(You_, "slept on a mattress ", "slept on a mattress ", buf);
13536 if (u.cnd_criticalcount) {
13537 sprintf(buf, "%d critical hit%s", u.cnd_criticalcount, plur(u.cnd_criticalcount));
13538 enl_msg(You_, "landed ", "landed ", buf);
13540 if (u.cnd_stealamount) {
13541 sprintf(buf, "%d zorkmid%s", u.cnd_stealamount, plur(u.cnd_stealamount));
13542 enl_msg(You_, "have stolen goods worth ", "stole goods worth ", buf);
13544 if (u.cnd_monsterdigamount && final) {
13545 sprintf(buf, "%d wall tile%s", u.cnd_monsterdigamount, plur(u.cnd_monsterdigamount));
13546 enl_msg(You_, "let monsters dig out ", "let monsters dig out ", buf);
13548 if (u.cnd_untrapamount) {
13549 sprintf(buf, "%d trap%s", u.cnd_untrapamount, plur(u.cnd_untrapamount));
13550 enl_msg(You_, "have untrapped ", "untrapped ", buf);
13552 if (u.cnd_longingamount) {
13553 sprintf(buf, "%d time%s", u.cnd_longingamount, plur(u.cnd_longingamount));
13554 enl_msg(You_, "had to read longing messages ", "had to read longing messages ", buf);
13556 if (u.cnd_symbiotesdied) {
13557 sprintf(buf, "%d symbiote%s", u.cnd_symbiotesdied, plur(u.cnd_symbiotesdied));
13558 enl_msg(You_, "had to mourn the death of ", "had to mourn the death of ", buf);
13560 if (u.cnd_sickfoodpois) {
13561 sprintf(buf, "%d time%s", u.cnd_sickfoodpois, plur(u.cnd_sickfoodpois));
13562 enl_msg(You_, "got sick from food poisoning ", "got sick from food poisoning ", buf);
13564 if (u.cnd_sickillness) {
13565 sprintf(buf, "%d time%s", u.cnd_sickillness, plur(u.cnd_sickillness));
13566 enl_msg(You_, "got sick from illness ", "got sick from illness ", buf);
13568 if (u.cnd_slimingcount) {
13569 sprintf(buf, "%d time%s", u.cnd_slimingcount, plur(u.cnd_slimingcount));
13570 enl_msg(You_, "got slimed ", "got slimed ", buf);
13572 if (u.cnd_stoningcount) {
13573 sprintf(buf, "%d time%s", u.cnd_stoningcount, plur(u.cnd_stoningcount));
13574 enl_msg(You_, "got stoned ", "got stoned ", buf);
13576 if (u.cnd_polybreak) {
13577 sprintf(buf, "%d item%s due to polymorphing into bad monsters", u.cnd_polybreak, plur(u.cnd_polybreak));
13578 enl_msg(You_, "have broken ", "broke ", buf);
13580 if (u.cnd_monpotioncount && final) {
13581 sprintf(buf, "%d potion%s", u.cnd_monpotioncount, plur(u.cnd_monpotioncount));
13582 enl_msg(You_, "allowed monsters to quaff ", "allowed monsters to quaff ", buf);
13584 if (u.cnd_monscrollcount && final) {
13585 sprintf(buf, "%d scroll%s", u.cnd_monscrollcount, plur(u.cnd_monscrollcount));
13586 enl_msg(You_, "allowed monsters to read ", "allowed monsters to read ", buf);
13588 if (u.cnd_monwandcount && final) {
13589 sprintf(buf, "%d wand%s", u.cnd_monwandcount, plur(u.cnd_monwandcount));
13590 enl_msg(You_, "allowed monsters to zap ", "allowed monsters to zap ", buf);
13592 if (u.cnd_demongates && final) {
13593 sprintf(buf, "%d time%s", u.cnd_demongates, plur(u.cnd_demongates));
13594 enl_msg(You_, "saw demons being gated in ", "saw demons being gated in ", buf);
13596 if (u.cnd_demonlordgates && final) {
13597 sprintf(buf, "%d time%s", u.cnd_demonlordgates, plur(u.cnd_demonlordgates));
13598 enl_msg(You_, "saw demon lords being gated in ", "saw demon lords being gated in ", buf);
13600 if (u.cnd_demonprincegates && final) {
13601 sprintf(buf, "%d time%s", u.cnd_demonprincegates, plur(u.cnd_demonprincegates));
13602 enl_msg(You_, "saw demon princes being gated in ", "saw demon princes being gated in ", buf);
13604 if (u.cnd_artiblastcount) {
13605 sprintf(buf, "%d time%s", u.cnd_artiblastcount, plur(u.cnd_artiblastcount));
13606 enl_msg(You_, "were blasted by artifacts ", "were blasted by artifacts ", buf);
13608 if (u.cnd_moneatmetal && final) {
13609 sprintf(buf, "%d time%s", u.cnd_moneatmetal, plur(u.cnd_moneatmetal));
13610 enl_msg(You_, "allowed monsters to eat metallic items ", "allowed monsters to eat metallic items ", buf);
13612 if (u.cnd_moneatstone && final) {
13613 sprintf(buf, "%d time%s", u.cnd_moneatstone, plur(u.cnd_moneatstone));
13614 enl_msg(You_, "allowed monsters to eat lithic items ", "allowed monsters to eat lithic items ", buf);
13616 if (u.cnd_moneatorganic && final) {
13617 sprintf(buf, "%d time%s", u.cnd_moneatorganic, plur(u.cnd_moneatorganic));
13618 enl_msg(You_, "allowed monsters to eat organic items ", "allowed monsters to eat organic items ", buf);
13620 if (u.cnd_moneatall && final) {
13621 sprintf(buf, "%d time%s", u.cnd_moneatall, plur(u.cnd_moneatall));
13622 enl_msg(You_, "allowed allivores to eat items ", "allowed allivores to eat items ", buf);
13624 if (u.cnd_unidentifycount && final) {
13625 sprintf(buf, "%d time%s", u.cnd_unidentifycount, plur(u.cnd_unidentifycount));
13626 enl_msg(You_, "had your possessions unidentify themselves ", "had your possessions unidentify themselves ", buf);
13628 if (u.cnd_dehydratedcount && final) {
13629 sprintf(buf, "%d time%s", u.cnd_dehydratedcount, plur(u.cnd_dehydratedcount));
13630 enl_msg(You_, "became dehydrated ", "became dehydrated ", buf);
13632 if (u.cnd_luckrollovercount && final) {
13633 sprintf(buf, "%d time%s", u.cnd_luckrollovercount, plur(u.cnd_luckrollovercount));
13634 enl_msg(You_, "had your luck roll over ", "had your luck roll over ", buf);
13636 if (u.cnd_confusedscrollread && final) {
13637 sprintf(buf, "%d time%s", u.cnd_confusedscrollread, plur(u.cnd_confusedscrollread));
13638 enl_msg(You_, "experienced confused scroll effects ", "experienced confused scroll effects ", buf);
13640 if (u.cnd_nonworkpotioncount && final) {
13641 sprintf(buf, "%d time%s", u.cnd_nonworkpotioncount, plur(u.cnd_nonworkpotioncount));
13642 enl_msg(You_, "quaffed non-working potions ", "quaffed non-working potions ", buf);
13644 if (u.cnd_stairstrapcount && final) {
13645 sprintf(buf, "%d time%s", u.cnd_stairstrapcount, plur(u.cnd_stairstrapcount));
13646 enl_msg(You_, "encountered stairs traps ", "encountered stairs traps ", buf);
13648 if (u.cnd_intrinsiclosscount && final) {
13649 sprintf(buf, "%d time%s", u.cnd_intrinsiclosscount, plur(u.cnd_intrinsiclosscount));
13650 enl_msg(You_, "lost intrinsics ", "lost intrinsics ", buf);
13652 if (u.cnd_traprevealcount && final) {
13653 sprintf(buf, "%d trap%s", u.cnd_traprevealcount, plur(u.cnd_traprevealcount));
13654 enl_msg(You_, "randomly revealed ", "randomly revealed ", buf);
13656 if (u.cnd_badeffectcount && final) {
13657 sprintf(buf, "%d time%s", u.cnd_badeffectcount, plur(u.cnd_badeffectcount));
13658 enl_msg(You_, "got hit by bad effects ", "got hit by bad effects ", buf);
13660 if (u.cnd_reallybadeffectcount && final) {
13661 sprintf(buf, "%d time%s", u.cnd_reallybadeffectcount, plur(u.cnd_reallybadeffectcount));
13662 enl_msg(You_, "got hit by really bad effects ", "got hit by really bad effects ", buf);
13664 if (u.cnd_goodeffectcount && final) {
13665 sprintf(buf, "%d time%s", u.cnd_goodeffectcount, plur(u.cnd_goodeffectcount));
13666 enl_msg(You_, "experienced good effects ", "experienced good effects ", buf);
13668 if (u.cnd_itemportcount && final) {
13669 sprintf(buf, "%d item%s teleported out of your inventory", u.cnd_itemportcount, plur(u.cnd_itemportcount));
13670 enl_msg(You_, "had ", "had ", buf);
13672 if (u.cnd_bonescount && final) {
13673 sprintf(buf, "%d bones level%s", u.cnd_bonescount, plur(u.cnd_bonescount));
13674 enl_msg(You_, "encountered ", "encountered ", buf);
13676 if (u.cnd_mommacount && final) {
13677 sprintf(buf, "%d time%s", u.cnd_mommacount, plur(u.cnd_mommacount));
13678 enl_msg(You_, "had to read insults against your momma ", "had to read insults against your momma ", buf);
13680 if (u.cnd_badequipcount && final) {
13681 sprintf(buf, "%d time%s", u.cnd_badequipcount, plur(u.cnd_badequipcount));
13682 enl_msg(You_, "were forced to equip bad items ", "were forced to equip bad items ", buf);
13684 if (u.cnd_badarticount && final) {
13685 sprintf(buf, "%d time%s", u.cnd_badarticount, plur(u.cnd_badarticount));
13686 enl_msg(You_, "were forced to equip bad artifacts ", "were forced to equip bad artifacts ", buf);
13688 if (u.cnd_badheelcount && final) {
13689 sprintf(buf, "%d time%s", u.cnd_badheelcount, plur(u.cnd_badheelcount));
13690 enl_msg(You_, "were forced to equip bad high heels ", "were forced to equip bad high heels ", buf);
13692 if (u.cnd_appearanceshufflingcount && final) {
13693 sprintf(buf, "%d time%s", u.cnd_appearanceshufflingcount, plur(u.cnd_appearanceshufflingcount));
13694 enl_msg(You_, "encountered appearance shuffling ", "encountered appearance shuffling ", buf);
13696 if (u.cnd_mysteriousforcecount && final) {
13697 sprintf(buf, "%d time%s", u.cnd_mysteriousforcecount, plur(u.cnd_mysteriousforcecount));
13698 enl_msg(You_, "got affected by the dirty mysterious dirt force full of dirt ", "got affected by the dirty mysterious dirt force full of dirt ", buf);
13700 if (u.cnd_manlergetcount && final) {
13701 sprintf(buf, "%d time%s", u.cnd_manlergetcount, plur(u.cnd_manlergetcount));
13702 enl_msg(You_, "were caught by the manler ", "were caught by the manler ", buf);
13704 if (u.cnd_wandbreakcount && final) {
13705 sprintf(buf, "%d time%s", u.cnd_wandbreakcount, plur(u.cnd_wandbreakcount));
13706 enl_msg(You_, "broke wands ", "broke wands ", buf);
13708 if (u.cnd_alchemycount) {
13709 sprintf(buf, "%d time%s", u.cnd_alchemycount, plur(u.cnd_alchemycount));
13710 enl_msg(You_, "performed alchemy ", "performed alchemy ", buf);
13712 if (u.cnd_weaponbreakcount) {
13713 sprintf(buf, "%d hostile weapon%s", u.cnd_weaponbreakcount, plur(u.cnd_weaponbreakcount));
13714 enl_msg(You_, "have destroyed ", "destroyed ", buf);
13716 if (u.cnd_newmancount) {
13717 sprintf(buf, "%s %d time%s", ((flags.female && urace.individual.f) ? urace.individual.f :
13718 (urace.individual.m) ? urace.individual.m : urace.noun), u.cnd_newmancount, plur(u.cnd_newmancount));
13719 enl_msg(You_, "felt like a new ", "felt like a new ", buf);
13721 if (u.cnd_eggcount && final) {
13722 sprintf(buf, "%d egg%s to hatch", u.cnd_eggcount, plur(u.cnd_eggcount));
13723 enl_msg(You_, "allowed ", "allowed ", buf);
13725 if (u.cnd_wipecount) {
13726 sprintf(buf, "%s %d time%s", body_part(FACE), u.cnd_wipecount, plur(u.cnd_wipecount));
13727 enl_msg(You_, "wiped your ", "wiped your ", buf);
13729 if (u.cnd_acquirementcount) {
13730 sprintf(buf, "%d item%s", u.cnd_acquirementcount, plur(u.cnd_acquirementcount));
13731 enl_msg(You_, "have acquired ", "acquired ", buf);
13733 if (u.cnd_cannibalcount) {
13734 sprintf(buf, "%d time%s", u.cnd_cannibalcount, plur(u.cnd_cannibalcount));
13735 enl_msg(You_, "have been a cannibal ", "were a cannibal ", buf);
13737 if (u.cnd_ringtrinsiccount && final) {
13738 sprintf(buf, "%d time%s", u.cnd_ringtrinsiccount, plur(u.cnd_ringtrinsiccount));
13739 enl_msg(You_, "have gained intrinsics from eating jewelry ", "gained intrinsics from eating jewelry ", buf);
13741 if (u.cnd_potionthrowyoucount && final) {
13742 sprintf(buf, "%d potion%s", u.cnd_potionthrowyoucount, plur(u.cnd_potionthrowyoucount));
13743 enl_msg(You_, "have thrown ", "threw ", buf);
13745 if (u.cnd_potionthrowmoncount && final) {
13746 sprintf(buf, "%d potion%s", u.cnd_potionthrowmoncount, plur(u.cnd_potionthrowmoncount));
13747 enl_msg(You_, "allowed monsters to throw ", "allowed monsters to throw ", buf);
13749 if (u.cnd_overlevelcount) {
13750 sprintf(buf, "%d time%s", u.cnd_overlevelcount, plur(u.cnd_overlevelcount));
13751 enl_msg(You_, "have leveled past the maximum experience level ", "leveled past the maximum experience level ", buf);
13753 if (u.cnd_vomitingcount) {
13754 sprintf(buf, "%d time%s", u.cnd_vomitingcount, plur(u.cnd_vomitingcount));
13755 enl_msg(You_, "have vomited ", "vomited ", buf);
13757 if (u.cnd_cwnannwncount) {
13758 sprintf(buf, "%d time%s", u.cnd_cwnannwncount, plur(u.cnd_cwnannwncount));
13759 enl_msg(You_, "were low on health ", "were low on health ", buf);
13761 if (u.cnd_bansheecount) {
13762 sprintf(buf, "%d time%s", u.cnd_bansheecount, plur(u.cnd_bansheecount));
13763 enl_msg(You_, "were down to your last hit point ", "were down to your last hit point ", buf);
13766 if (u.cnd_lycanthropecount && final) {
13767 sprintf(buf, "%d time%s", u.cnd_lycanthropecount, plur(u.cnd_lycanthropecount));
13768 enl_msg(You_, "contracted lycanthropy ", "contracted lycanthropy ", buf);
13770 if (u.cnd_blackjackwins) {
13771 sprintf(buf, "%d blackjack game%s", u.cnd_blackjackwins, plur(u.cnd_blackjackwins));
13772 enl_msg(You_, "won ", "won ", buf);
13774 if (u.cnd_blackjackdealercheat && final) {
13775 sprintf(buf, "%d time%s", u.cnd_blackjackdealercheat, plur(u.cnd_blackjackdealercheat));
13776 enl_msg(You_, "were subjected to the blackjack dealer's cheating ", "were subjected to the blackjack dealer's cheating ", buf);
13778 if (u.cnd_covideffect && final) {
13779 sprintf(buf, "%d time%s", u.cnd_covideffect, plur(u.cnd_covideffect));
13780 enl_msg(You_, "suffered from covid-19 symptoms ", "suffered from covid-19 symptoms ", buf);
13782 if (u.cnd_covidantidote && final) {
13783 sprintf(buf, "%d time%s", u.cnd_covidantidote, plur(u.cnd_covidantidote));
13784 enl_msg(You_, "received a covid-19 antidote ", "received a covid-19 antidote ", buf);
13786 if (u.cnd_socksmell) {
13787 sprintf(buf, "%d time%s", u.cnd_socksmell, plur(u.cnd_socksmell));
13788 enl_msg(You_, "sniffed worn socks ", "sniffed worn socks ", buf);
13790 if (u.cnd_pantsmell) {
13791 sprintf(buf, "%d time%s", u.cnd_pantsmell, plur(u.cnd_pantsmell));
13792 enl_msg(You_, "sniffed worn pants ", "sniffed worn pants ", buf);
13794 if (u.cnd_photo_op) {
13795 sprintf(buf, "%d time%s", u.cnd_photo_op, plur(u.cnd_photo_op));
13796 enl_msg(You_, "were photographed by monsters ", "were photographed by monsters ", buf);
13798 if (u.cnd_weapondull) {
13799 sprintf(buf, "%d time%s", u.cnd_weapondull, plur(u.cnd_weapondull));
13800 enl_msg(You_, "had your weapons dull ", "had your weapons dull ", buf);
13802 if (u.cnd_armordull) {
13803 sprintf(buf, "%d time%s", u.cnd_armordull, plur(u.cnd_armordull));
13804 enl_msg(You_, "had your armors dull ", "had your armors dull ", buf);
13806 if (u.cnd_symbiotekills) {
13807 sprintf(buf, "%d monster%s with your symbiote's attacks", u.cnd_symbiotekills, plur(u.cnd_symbiotekills));
13808 enl_msg(You_, "killed ", "killed ", buf);
13810 if (u.cnd_singhelped) {
13811 sprintf(buf, "%d pair%s of shoes for Sing", u.cnd_singhelped, plur(u.cnd_singhelped));
13812 enl_msg(You_, "cleaned ", "cleaned ", buf);
13814 if (u.cnd_singrefused) {
13815 sprintf(buf, "to clean shoes for Sing %d times", u.cnd_singrefused);
13816 enl_msg(You_, "refused ", "refused ", buf);
13818 if (u.cnd_trophiesobtained) {
13819 sprintf(buf, "%d trophies", u.cnd_trophiesobtained);
13820 enl_msg(You_, "obtained ", "obtained ", buf);
13822 if (u.cnd_eliftrapcnt && final) {
13823 sprintf(buf, "%d time%s", u.cnd_eliftrapcnt, plur(u.cnd_eliftrapcnt));
13824 enl_msg(You_, "enjoyed Elif's treatment ", "enjoyed Elif's treatment ", buf);
13826 if (u.cnd_nadjatrapcnt && final) {
13827 sprintf(buf, "%d time%s", u.cnd_nadjatrapcnt, plur(u.cnd_nadjatrapcnt));
13828 enl_msg(You_, "angered the women ", "angered the women ", buf);
13830 if (u.cnd_nataljetrapcnt && final) {
13831 sprintf(buf, "%d time%s", u.cnd_nataljetrapcnt, plur(u.cnd_nataljetrapcnt));
13832 enl_msg(You_, "failed to dance properly ", "failed to dance properly ", buf);
13834 if (u.cnd_doratrapcnt && final) {
13835 sprintf(buf, "%d time%s", u.cnd_doratrapcnt, plur(u.cnd_doratrapcnt));
13836 enl_msg(You_, "had your shoes damaged by evil birds ", "had your shoes damaged by evil birds ", buf);
13838 if (u.cnd_verenatrapcnt && final) {
13839 sprintf(buf, "%d time%s", u.cnd_verenatrapcnt, plur(u.cnd_verenatrapcnt));
13840 enl_msg(You_, "were annoyed by Verena ", "were annoyed by Verena ", buf);
13842 if (u.cnd_antjetrapcnt && final) {
13843 sprintf(buf, "%d time%s", u.cnd_antjetrapcnt, plur(u.cnd_antjetrapcnt));
13844 enl_msg(You_, "visited the public toilet ", "visited the public toilet ", buf);
13846 if (u.cnd_larissatrapcnt && final) {
13847 sprintf(buf, "%d time%s", u.cnd_larissatrapcnt, plur(u.cnd_larissatrapcnt));
13848 enl_msg(You_, "were forced to step into shit ", "were forced to step into shit ", buf);
13850 if (u.cnd_juliatrapcnt && final) {
13851 sprintf(buf, "%d time%s", u.cnd_juliatrapcnt, plur(u.cnd_juliatrapcnt));
13852 enl_msg(You_, "were prevented from attacking women ", "were prevented from attacking women ", buf);
13854 if (u.cnd_ritatrapcnt && final) {
13855 sprintf(buf, "%d time%s", u.cnd_ritatrapcnt, plur(u.cnd_ritatrapcnt));
13856 enl_msg(You_, "had monsters trigger feminism traps for you ", "had monsters trigger feminism traps for you ", buf);
13858 if (u.cnd_klaratrapcnt && final) {
13859 sprintf(buf, "%d time%s", u.cnd_klaratrapcnt, plur(u.cnd_klaratrapcnt));
13860 enl_msg(You_, "heard clacking high heel noises ", "heard clacking high heel noises ", buf);
13862 if (u.cnd_friederiketrapcnt && final) {
13863 sprintf(buf, "%d time%s", u.cnd_friederiketrapcnt, plur(u.cnd_friederiketrapcnt));
13864 enl_msg(You_, "were bundled by Friederike ", "were bundled by Friederike ", buf);
13866 if (u.cnd_utetrapcnt && final) {
13867 sprintf(buf, "%d time%s", u.cnd_utetrapcnt, plur(u.cnd_utetrapcnt));
13868 enl_msg(You_, "had your shoes turn into beautiful missys ", "had your shoes turn into beautiful missys ", buf);
13870 if (u.cnd_maybritttrapcnt && final) {
13871 sprintf(buf, "%d time%s", u.cnd_maybritttrapcnt, plur(u.cnd_maybritttrapcnt));
13872 enl_msg(You_, "had May-Britt steal your items ", "had May-Britt steal your items ", buf);
13874 if (u.cnd_littlemarietrapcnt && final) {
13875 sprintf(buf, "%d time%s", u.cnd_littlemarietrapcnt, plur(u.cnd_littlemarietrapcnt));
13876 enl_msg(You_, "triggered the girls' nasty shield ", "triggered the girls' nasty shield ", buf);
13878 if (u.cnd_escapepastcount) {
13879 sprintf(buf, "%d time%s (hint: doing that too often can result in you skipping crucially important messages and being screwed over unexpectedly)", u.cnd_escapepastcount, plur(u.cnd_escapepastcount));
13880 enl_msg(You_, "escaped past messages ", "escaped past messages ", buf);
13882 if (u.cnd_cheaterprayer) {
13883 sprintf(buf, "%d time%s", u.cnd_cheaterprayer, plur(u.cnd_cheaterprayer));
13884 enl_msg(You_, "used the cheater prayer ", "used the cheater prayer ", buf);
13887 if (achieve.get_bell) {
13888 you_have_X("obtained the silver bell");
13890 if (achieve.enter_gehennom) {
13891 you_have_X("entered Gehennom via the front entrance");
13893 if (achieve.get_candelabrum) {
13894 you_have_X("obtained the candelabrum");
13896 if (achieve.get_book) {
13897 you_have_X("obtained the papyrus book");
13899 if (achieve.perform_invocation) {
13900 you_have_X("performed the invocation");
13902 if (achieve.get_amulet) {
13903 you_have_X("obtained the Amulet of Yendor");
13905 if (achieve.ascended) {
13906 you_have_X("ascended");
13908 if (achieve.get_luckstone) {
13909 you_have_X("obtained the Mines End luckstone");
13911 if (achieve.finish_sokoban) {
13912 you_have_X("finished Sokoban");
13914 if (achieve.killed_medusa) {
13915 you_have_X("killed Medusa");
13917 if (achieve.killed_nightmare) {
13918 you_have_X("killed Nightmare");
13920 if (achieve.killed_vecna) {
13921 you_have_X("killed Vecna");
13923 if (achieve.killed_beholder) {
13924 you_have_X("killed Beholder");
13926 if (achieve.killed_ruggo) {
13927 you_have_X("killed Ruggo the Gnome King");
13929 if (achieve.killed_kroo) {
13930 you_have_X("killed Kroo the Kobold King");
13932 if (achieve.killed_grund) {
13933 you_have_X("killed Grund the Orc King");
13935 if (achieve.killed_largestgiant) {
13936 you_have_X("killed the Largest Giant");
13938 if (achieve.killed_shelob) {
13939 you_have_X("killed Shelob");
13941 if (achieve.killed_girtab) {
13942 you_have_X("killed Girtab");
13944 if (achieve.killed_aphrodite) {
13945 you_have_X("killed Aphrodite");
13947 if (achieve.killed_frankenstein) {
13948 you_have_X("killed Frankenstein");
13950 if (achieve.killed_croesus) {
13951 you_have_X("killed Croesus");
13953 if (achieve.killed_dagon) {
13954 you_have_X("killed Father Dagon");
13956 if (achieve.killed_hydra) {
13957 you_have_X("killed Mother Hydra");
13959 if (achieve.imbued_bell) {
13960 you_have_X("imbued the silver bell");
13962 if (achieve.imbued_amulet) {
13963 you_have_X("imbued the Amulet of Yendor");
13965 if (achieveX.killed_elderpriest) {
13966 you_have_X("killed an elder priest");
13968 if (achieveX.killed_glassgolem) {
13969 you_have_X("killed the motherfucker glass golem");
13971 if (achieveX.killed_tiksrvzllat) {
13972 you_have_X("killed Tiksrvzllat");
13974 if (achieveX.killed_bofh) {
13975 you_have_X("killed the BOFH");
13977 if (achieveX.swimmingpool_cleared) {
13978 you_have_X("completed the Swimming Pools");
13980 if (achieveX.killed_katia) {
13981 you_have_X("killed Erogenous Katia");
13983 if (achieveX.killed_witchking) {
13984 you_have_X("killed the Witch-King of Angmar");
13986 if (achieveX.get_magresstone) {
13987 you_have_X("obtained the Deep Mines End stone of magic resistance");
13989 if (achieveX.devnull_complete) {
13990 you_have_X("completed all the Devnull challenges");
13992 if (achieveX.killed_minotaur) {
13993 you_have_X("killed the Minotaur of the Maze");
13995 if (achieveX.killed_kalwina) {
13996 you_have_X("killed Kalwina");
13998 if (achieveX.killed_stahngnir) {
13999 you_have_X("killed Lord Stahngnir");
14001 if (achieveX.killed_ariane) {
14002 you_have_X("killed Lady Ariane");
14004 if (achieveX.completed_rivalquest) {
14005 you_have_X("completed the rival quest");
14007 if (achieveX.completed_minusworld) {
14008 you_have_X("completed the Minus World");
14010 if (achieveX.killed_vera) {
14011 you_have_X("killed Vera the Ice Queen");
14013 if (achieveX.killed_elaine) {
14014 you_have_X("killed Elaine the Enchantress");
14017 /* Pop up the window and wait for a key */
14018 display_nhwindow(en_win, TRUE);
14019 destroy_nhwindow(en_win);
14022 #ifdef DUMP_LOG
14023 void
14024 dump_conduct(final)
14025 int final;
14027 char buf[BUFSZ];
14028 int ngenocided;
14030 dump("", "Voluntary challenges");
14032 if (!u.uconduct.food)
14033 dump("", " You went without food");
14034 /* But beverages are okay */
14035 else if (!u.uconduct.unvegan)
14036 dump("", " You followed a strict vegan diet");
14037 else if (!u.uconduct.unvegetarian)
14038 dump("", " You were a vegetarian");
14040 /* Yes, this is an ungrammatical sentence. It will stay that way because I think it sounds funny. --Amy */
14041 if (u.uconduct.food) {
14042 sprintf(buf, " You eaten %ld time%s",
14043 u.uconduct.food, plur(u.uconduct.food));
14044 dump("", buf);
14046 if (u.uconduct.unvegan) {
14047 sprintf(buf, " You eaten food with animal by-products %ld time%s",
14048 u.uconduct.unvegan, plur(u.uconduct.unvegan));
14049 dump("", buf);
14051 if (u.uconduct.unvegetarian) {
14052 sprintf(buf, " You eaten meat %ld time%s",
14053 u.uconduct.unvegetarian, plur(u.uconduct.unvegetarian));
14054 dump("", buf);
14057 if (!u.uconduct.gnostic)
14058 dump("", " You were an atheist");
14059 else {
14060 sprintf(buf, " You have communicated with the gods %ld time%s",
14061 u.uconduct.gnostic, plur(u.uconduct.gnostic));
14062 dump("", buf);
14065 if (!u.uconduct.praydone)
14066 dump("", " You never prayed to the gods");
14067 else {
14068 sprintf(buf, " You prayed to the gods %ld time%s",
14069 u.uconduct.praydone, plur(u.uconduct.praydone));
14070 dump("", buf);
14073 if (!u.uconduct.weaphit)
14074 dump("", " You never hit with a wielded weapon");
14075 else {
14076 sprintf(buf, " You hit with a wielded weapon %ld time%s",
14077 u.uconduct.weaphit, plur(u.uconduct.weaphit));
14078 dump("", buf);
14081 if (!u.uconduct.killer)
14082 dump("", " You were a pacifist");
14083 else {
14084 sprintf(buf, " You killed %ld monster%s",
14085 u.uconduct.killer, plur(u.uconduct.killer));
14086 dump("", buf);
14089 if (!u.uconduct.literate)
14090 dump("", " You were illiterate");
14091 else {
14092 sprintf(buf, "read items or engraved %ld time%s",
14093 u.uconduct.literate, plur(u.uconduct.literate));
14094 dump(" You ", buf);
14097 ngenocided = num_genocides();
14098 if (ngenocided == 0) {
14099 dump("", " You never genocided any monsters");
14100 } else {
14101 sprintf(buf, "genocided %d type%s of monster%s",
14102 ngenocided, plur(ngenocided), plur(ngenocided));
14103 dump(" You ", buf);
14106 if (!u.uconduct.polypiles)
14107 dump("", " You never polymorphed an object");
14108 else {
14109 sprintf(buf, "polymorphed %ld item%s",
14110 u.uconduct.polypiles, plur(u.uconduct.polypiles));
14111 dump(" You ", buf);
14114 if (!u.uconduct.polyselfs)
14115 dump("", " You never changed form");
14116 else {
14117 sprintf(buf, "changed form %ld time%s",
14118 u.uconduct.polyselfs, plur(u.uconduct.polyselfs));
14119 dump(" You ", buf);
14122 if (!u.uconduct.wishes)
14123 dump("", " You used no wishes");
14124 else {
14125 sprintf(buf, "used %ld wish%s",
14126 u.uconduct.wishes, (u.uconduct.wishes > 1L) ? "es" : "");
14127 dump(" You ", buf);
14129 if (!u.uconduct.wisharti)
14130 dump("", " You did not wish for any artifacts");
14133 if (!u.uconduct.celibacy)
14134 dump("", " You remained celibate");
14135 else {
14136 sprintf(buf, "your vow of celibacy %ld time%s",
14137 u.uconduct.celibacy, plur(u.uconduct.celibacy));
14138 dump(" You have broken ", buf);
14141 sprintf(buf, "%d time%s", u.cnd_applycount, plur(u.cnd_applycount));
14142 dump(" You applied items ", buf);
14144 sprintf(buf, "%d time%s", u.cnd_unihorncount, plur(u.cnd_unihorncount));
14145 dump(" You experienced the healing effects of unicorn horns ", buf);
14147 sprintf(buf, "%d item%s with the magic marker", u.cnd_markercount, plur(u.cnd_markercount));
14148 dump(" You created ", buf);
14150 sprintf(buf, "%d item%s with the chemistry set", u.cnd_chemistrycount, plur(u.cnd_chemistrycount));
14151 dump(" You created ", buf);
14153 sprintf(buf, "%d potion%s", u.cnd_quaffcount, plur(u.cnd_quaffcount));
14154 dump(" You quaffed ", buf);
14156 sprintf(buf, "%d time%s", u.cnd_zapcount, plur(u.cnd_zapcount));
14157 dump(" You zapped wands ", buf);
14159 sprintf(buf, "%d time%s", u.cnd_scrollcount, plur(u.cnd_scrollcount));
14160 dump(" You read scrolls ", buf);
14162 sprintf(buf, "%d time%s", u.cnd_spellbookcount, plur(u.cnd_spellbookcount));
14163 dump(" You read spellbooks ", buf);
14165 sprintf(buf, "%d time%s", u.cnd_spellcastcount, plur(u.cnd_spellcastcount));
14166 dump(" You successfully cast spells ", buf);
14168 sprintf(buf, "%d time%s", u.cnd_spellfailcount, plur(u.cnd_spellfailcount));
14169 dump(" You failed to cast a spell ", buf);
14171 sprintf(buf, "%d time%s", u.cnd_forgottenspellcount, plur(u.cnd_forgottenspellcount));
14172 dump(" You attempted to cast forgotten spells ", buf);
14174 sprintf(buf, "%d time%s", u.cnd_invokecount, plur(u.cnd_invokecount));
14175 dump(" You used the invocation effects of artifacts ", buf);
14177 sprintf(buf, "%d time%s", u.cnd_techcount, plur(u.cnd_techcount));
14178 dump(" You used techniques ", buf);
14180 sprintf(buf, "%d time%s", u.cnd_phasedoorcount, plur(u.cnd_phasedoorcount));
14181 dump(" You phase doored ", buf);
14183 sprintf(buf, "%d time%s", u.cnd_teleportcount, plur(u.cnd_teleportcount));
14184 dump(" You teleported ", buf);
14186 sprintf(buf, "%d time%s", u.cnd_telelevelcount, plur(u.cnd_telelevelcount));
14187 dump(" You levelported ", buf);
14189 sprintf(buf, "%d time%s", u.cnd_branchportcount, plur(u.cnd_branchportcount));
14190 dump(" You branchported ", buf);
14192 sprintf(buf, "%d time%s", u.cnd_banishmentcount, plur(u.cnd_banishmentcount));
14193 dump(" You were banished ", buf);
14195 sprintf(buf, "%d time%s", u.cnd_punishmentcount, plur(u.cnd_punishmentcount));
14196 dump(" You were punished ", buf);
14198 sprintf(buf, "%d pet%s", u.cnd_petdeathcount, plur(u.cnd_petdeathcount));
14199 dump(" You had to mourn the death of ", buf);
14201 sprintf(buf, "%d time%s", u.cnd_amnesiacount, plur(u.cnd_amnesiacount));
14202 dump(" You suffered from amnesia ", buf);
14204 sprintf(buf, "%d", u.cnd_minalignment);
14205 dump(" You had a minimum alignment of ", buf);
14207 sprintf(buf, "%d", u.cnd_maxalignment);
14208 dump(" You had a maximum alignment of ", buf);
14210 sprintf(buf, "%d", u.cnd_maxsanity);
14211 dump(" You had a maximum sanity of ", buf);
14213 sprintf(buf, "%d", u.cnd_maxcontamination);
14214 dump(" You had a maximum contamination of ", buf);
14216 sprintf(buf, "%d time%s", u.cnd_searchtrapcount, plur(u.cnd_searchtrapcount));
14217 dump(" You successfully searched for traps ", buf);
14219 sprintf(buf, "%d time%s", u.cnd_searchsecretcount, plur(u.cnd_searchsecretcount));
14220 dump(" You successfully searched for doors or corridors ", buf);
14222 sprintf(buf, "%d time%s", u.cnd_fartingcount, plur(u.cnd_fartingcount));
14223 dump(" You heard farting noises ", buf);
14225 sprintf(buf, "%d time%s", u.cnd_crappingcount, plur(u.cnd_crappingcount));
14226 dump(" You heard crapping noises ", buf);
14228 sprintf(buf, "%d time%s", u.cnd_conversioncount, plur(u.cnd_conversioncount));
14229 dump(" You listened to conversion sermon ", buf);
14231 sprintf(buf, "%d time%s", u.cnd_wouwoucount, plur(u.cnd_wouwoucount));
14232 dump(" You heard the frightening wouwou taunts ", buf);
14234 sprintf(buf, "%d time%s", u.cnd_supermancount, plur(u.cnd_supermancount));
14235 dump(" You heard superman taunts ", buf);
14237 sprintf(buf, "%d time%s", u.cnd_perfumecount, plur(u.cnd_perfumecount));
14238 dump(" You inhaled scentful feminine perfume ", buf);
14240 sprintf(buf, "%d time%s", u.cnd_nutkickamount, plur(u.cnd_nutkickamount));
14241 dump(" You got your nuts kicked ", buf);
14243 sprintf(buf, "%d time%s", u.cnd_breastripamount, plur(u.cnd_breastripamount));
14244 dump(" You got hit in the breasts ", buf);
14246 sprintf(buf, "%d time%s", u.cnd_saveamount, plur(u.cnd_saveamount));
14247 dump(" You saved the game ", buf);
14249 sprintf(buf, "%d time%s", u.cnd_ragnarokamount, plur(u.cnd_ragnarokamount));
14250 dump(" You encountered the ragnarok event ", buf);
14252 sprintf(buf, "%d time%s", u.cnd_datadeleteamount, plur(u.cnd_datadeleteamount));
14253 dump(" You had your data deleted ", buf);
14255 sprintf(buf, "%d time%s", u.cnd_curseitemsamount, plur(u.cnd_curseitemsamount));
14256 dump(" You encountered the curse items effect ", buf);
14258 sprintf(buf, "%d time%s", u.cnd_nastytrapamount, plur(u.cnd_nastytrapamount));
14259 dump(" You triggered nasty traps ", buf);
14261 sprintf(buf, "%d time%s", u.cnd_feminismtrapamount, plur(u.cnd_feminismtrapamount));
14262 dump(" You triggered feminism traps ", buf);
14264 sprintf(buf, "%d time%s", u.cnd_plineamount, plur(u.cnd_plineamount));
14265 dump(" You had to read random messages ", buf);
14267 sprintf(buf, "%d monster%s come out of portals", u.cnd_aggravateamount, plur(u.cnd_aggravateamount));
14268 dump(" You saw ", buf);
14270 sprintf(buf, "%d time%s", u.cnd_eatrinsicamount, plur(u.cnd_eatrinsicamount));
14271 dump(" You gained intrinsics from eating corpses ", buf);
14273 sprintf(buf, "%d time%s", u.cnd_shkserviceamount, plur(u.cnd_shkserviceamount));
14274 dump(" You purchased shopkeeper services ", buf);
14276 sprintf(buf, "%d time%s", u.cnd_kopsummonamount, plur(u.cnd_kopsummonamount));
14277 dump(" You had the kops called on you ", buf);
14279 sprintf(buf, "%d captcha%s", u.cnd_captchaamount, plur(u.cnd_captchaamount));
14280 dump(" You solved ", buf);
14282 sprintf(buf, "%d time%s", u.cnd_captchafail, plur(u.cnd_captchafail));
14283 dump(" You failed to solve a captcha ", buf);
14285 sprintf(buf, "%d quiz question%s", u.cnd_quizamount, plur(u.cnd_quizamount));
14286 dump(" You correctly answered ", buf);
14288 sprintf(buf, "%d quiz question%s", u.cnd_quizfail, plur(u.cnd_quizfail));
14289 dump(" You incorrectly answered ", buf);
14291 sprintf(buf, "%d time%s", u.cnd_alterrealityamount, plur(u.cnd_alterrealityamount));
14292 dump(" You had the reality altered ", buf);
14294 sprintf(buf, "%d lock%s", u.cnd_unlockamount, plur(u.cnd_unlockamount));
14295 dump(" You picked ", buf);
14297 sprintf(buf, "%d altar%s", u.cnd_altarconvertamount, plur(u.cnd_altarconvertamount));
14298 dump(" You converted ", buf);
14300 sprintf(buf, "%d time%s", u.cnd_itemstealamount, plur(u.cnd_itemstealamount));
14301 dump(" You had your items stolen ", buf);
14303 sprintf(buf, "%d time%s", u.cnd_poisonamount, plur(u.cnd_poisonamount));
14304 dump(" You got poisoned ", buf);
14306 sprintf(buf, "%d extra hit point%s from nurses", u.cnd_nursehealamount, plur(u.cnd_nursehealamount));
14307 dump(" You gained ", buf);
14309 sprintf(buf, "%d time%s", u.cnd_nurseserviceamount, plur(u.cnd_nurseserviceamount));
14310 dump(" You purchased nurse services ", buf);
14312 sprintf(buf, "%d monster%s with Elbereth engravings", u.cnd_elberethamount, plur(u.cnd_elberethamount));
14313 dump(" You scared ", buf);
14315 sprintf(buf, "%d time%s", u.cnd_disenchantamount, plur(u.cnd_disenchantamount));
14316 dump(" You had your items disenchanted ", buf);
14318 sprintf(buf, "%d time%s", u.cnd_permstatdamageamount, plur(u.cnd_permstatdamageamount));
14319 dump(" You permanently lost stat points ", buf);
14321 sprintf(buf, "%d time%s", u.cnd_shoedamageamount, plur(u.cnd_shoedamageamount));
14322 dump(" You got whacked or kicked by female shoes ", buf);
14324 sprintf(buf, "%d time%s", u.cnd_farmlandremoved, plur(u.cnd_farmlandremoved));
14325 dump(" You forced farmland tiles out of existence ", buf);
14327 sprintf(buf, "%d time%s", u.cnd_nethermistremoved, plur(u.cnd_nethermistremoved));
14328 dump(" You dissipated nether mist ", buf);
14330 sprintf(buf, "%d ranged weapon ammo%s", u.cnd_ammomulched, plur(u.cnd_ammomulched));
14331 dump(" You mulched ", buf);
14333 sprintf(buf, "%d gram%s of gunpowder", u.cnd_gunpowderused, plur(u.cnd_gunpowderused));
14334 dump(" You used up ", buf);
14336 sprintf(buf, "%d time%s", u.cnd_chargingcount, plur(u.cnd_chargingcount));
14337 dump(" You recharged your items ", buf);
14339 sprintf(buf, "%d time%s", u.cnd_offercount, plur(u.cnd_offercount));
14340 dump(" You made offerings to the gods ", buf);
14342 sprintf(buf, "%d time%s", u.cnd_forcecount, plur(u.cnd_forcecount));
14343 dump(" You used the force against an enemy ", buf);
14345 sprintf(buf, "%d time%s", u.cnd_forcebuttcount, plur(u.cnd_forcebuttcount));
14346 dump(" You bashed hostile butt cheeks ", buf);
14348 sprintf(buf, "%d time%s", u.cnd_kickmonstercount, plur(u.cnd_kickmonstercount));
14349 dump(" You kicked monsters ", buf);
14351 sprintf(buf, "%d time%s", u.cnd_kicklockcount, plur(u.cnd_kicklockcount));
14352 dump(" You kicked doors or locked containers ", buf);
14354 sprintf(buf, "%d time%s", u.cnd_fumbled, plur(u.cnd_fumbled));
14355 dump(" You fumbled ", buf);
14357 sprintf(buf, "%d time%s", u.cnd_wandwresting, plur(u.cnd_wandwresting));
14358 dump(" You wrested wands ", buf);
14360 sprintf(buf, "%d item%s to fire damage", u.cnd_firedestroy, plur(u.cnd_firedestroy));
14361 dump(" You lost ", buf);
14363 sprintf(buf, "%d item%s to cold damage", u.cnd_colddestroy, plur(u.cnd_colddestroy));
14364 dump(" You lost ", buf);
14366 sprintf(buf, "%d item%s to shock damage", u.cnd_shockdestroy, plur(u.cnd_shockdestroy));
14367 dump(" You lost ", buf);
14369 sprintf(buf, "%d item%s to poison damage", u.cnd_poisondestroy, plur(u.cnd_poisondestroy));
14370 dump(" You lost ", buf);
14372 sprintf(buf, "%d time%s", u.cnd_diggingamount, plur(u.cnd_diggingamount));
14373 dump(" You dug with digging tools ", buf);
14375 sprintf(buf, "%d time%s", u.cnd_gravewallamount, plur(u.cnd_gravewallamount));
14376 dump(" You dug out grave walls ", buf);
14378 sprintf(buf, "%d tree%s", u.cnd_treechopamount, plur(u.cnd_treechopamount));
14379 dump(" You chopped down ", buf);
14381 sprintf(buf, "%d set%s of iron bars", u.cnd_barbashamount, plur(u.cnd_barbashamount));
14382 dump(" You bashed down ", buf);
14384 sprintf(buf, "%d time%s", u.cnd_fountainamount, plur(u.cnd_fountainamount));
14385 dump(" You interacted with fountains ", buf);
14387 sprintf(buf, "%d time%s", u.cnd_throneamount, plur(u.cnd_throneamount));
14388 dump(" You sat on a throne ", buf);
14390 sprintf(buf, "%d time%s", u.cnd_sinkamount, plur(u.cnd_sinkamount));
14391 dump(" You interacted with a sink ", buf);
14393 sprintf(buf, "%d time%s", u.cnd_toiletamount, plur(u.cnd_toiletamount));
14394 dump(" You interacted with a toilet ", buf);
14396 sprintf(buf, "%d time%s", u.cnd_pentagramamount, plur(u.cnd_pentagramamount));
14397 dump(" You invoked a pentagram ", buf);
14399 sprintf(buf, "%d time%s", u.cnd_wellamount, plur(u.cnd_wellamount));
14400 dump(" You quaffed from a well ", buf);
14402 sprintf(buf, "%d time%s", u.cnd_poisonedwellamount, plur(u.cnd_poisonedwellamount));
14403 dump(" You quaffed from a poisoned well ", buf);
14405 sprintf(buf, "%d time%s", u.cnd_bedamount, plur(u.cnd_bedamount));
14406 dump(" You slept in a bed ", buf);
14408 sprintf(buf, "%d time%s", u.cnd_mattressamount, plur(u.cnd_mattressamount));
14409 dump(" You slept on a mattress ", buf);
14411 sprintf(buf, "%d critical hit%s", u.cnd_criticalcount, plur(u.cnd_criticalcount));
14412 dump(" You landed ", buf);
14414 sprintf(buf, "%d zorkmid%s", u.cnd_stealamount, plur(u.cnd_stealamount));
14415 dump(" You stole goods worth ", buf);
14417 sprintf(buf, "%d wall tile%s", u.cnd_monsterdigamount, plur(u.cnd_monsterdigamount));
14418 dump(" You let monsters dig out ", buf);
14420 sprintf(buf, "%d trap%s", u.cnd_untrapamount, plur(u.cnd_untrapamount));
14421 dump(" You untrapped ", buf);
14423 sprintf(buf, "%d time%s", u.cnd_longingamount, plur(u.cnd_longingamount));
14424 dump(" You had to read longing messages ", buf);
14426 sprintf(buf, "%d symbiote%s", u.cnd_symbiotesdied, plur(u.cnd_symbiotesdied));
14427 dump(" You had to mourn the death of ", buf);
14429 sprintf(buf, "%d time%s", u.cnd_sickfoodpois, plur(u.cnd_sickfoodpois));
14430 dump(" You got sick from food poisoning ", buf);
14432 sprintf(buf, "%d time%s", u.cnd_sickillness, plur(u.cnd_sickillness));
14433 dump(" You got sick from illness ", buf);
14435 sprintf(buf, "%d time%s", u.cnd_slimingcount, plur(u.cnd_slimingcount));
14436 dump(" You got slimed ", buf);
14438 sprintf(buf, "%d time%s", u.cnd_stoningcount, plur(u.cnd_stoningcount));
14439 dump(" You got stoned ", buf);
14441 sprintf(buf, "%d item%s due to polymorphing into bad monsters", u.cnd_polybreak, plur(u.cnd_polybreak));
14442 dump(" You broke ", buf);
14444 sprintf(buf, "%d potion%s", u.cnd_monpotioncount, plur(u.cnd_monpotioncount));
14445 dump(" You allowed monsters to quaff ", buf);
14447 sprintf(buf, "%d scroll%s", u.cnd_monscrollcount, plur(u.cnd_monscrollcount));
14448 dump(" You allowed monsters to read ", buf);
14450 sprintf(buf, "%d wand%s", u.cnd_monwandcount, plur(u.cnd_monwandcount));
14451 dump(" You allowed monsters to zap ", buf);
14453 sprintf(buf, "%d time%s", u.cnd_demongates, plur(u.cnd_demongates));
14454 dump(" You saw demons being gated in ", buf);
14456 sprintf(buf, "%d time%s", u.cnd_demonlordgates, plur(u.cnd_demonlordgates));
14457 dump(" You saw demon lords being gated in ", buf);
14459 sprintf(buf, "%d time%s", u.cnd_demonprincegates, plur(u.cnd_demonprincegates));
14460 dump(" You saw demon princes being gated in ", buf);
14462 sprintf(buf, "%d time%s", u.cnd_artiblastcount, plur(u.cnd_artiblastcount));
14463 dump(" You were blasted by artifacts ", buf);
14465 sprintf(buf, "%d time%s", u.cnd_moneatmetal, plur(u.cnd_moneatmetal));
14466 dump(" You allowed monsters to eat metallic items ", buf);
14468 sprintf(buf, "%d time%s", u.cnd_moneatstone, plur(u.cnd_moneatstone));
14469 dump(" You allowed monsters to eat lithic items ", buf);
14471 sprintf(buf, "%d time%s", u.cnd_moneatorganic, plur(u.cnd_moneatorganic));
14472 dump(" You allowed monsters to eat organic items ", buf);
14474 sprintf(buf, "%d time%s", u.cnd_moneatall, plur(u.cnd_moneatall));
14475 dump(" You allowed allivores to eat items ", buf);
14477 sprintf(buf, "%d time%s", u.cnd_unidentifycount, plur(u.cnd_unidentifycount));
14478 dump(" You had your possessions unidentify themselves ", buf);
14480 sprintf(buf, "%d time%s", u.cnd_dehydratedcount, plur(u.cnd_dehydratedcount));
14481 dump(" You became dehydrated ", buf);
14483 sprintf(buf, "%d time%s", u.cnd_luckrollovercount, plur(u.cnd_luckrollovercount));
14484 dump(" You had your luck roll over ", buf);
14486 sprintf(buf, "%d time%s", u.cnd_confusedscrollread, plur(u.cnd_confusedscrollread));
14487 dump(" You experienced confused scroll effects ", buf);
14489 sprintf(buf, "%d time%s", u.cnd_nonworkpotioncount, plur(u.cnd_nonworkpotioncount));
14490 dump(" You quaffed non-working potions ", buf);
14492 sprintf(buf, "%d time%s", u.cnd_stairstrapcount, plur(u.cnd_stairstrapcount));
14493 dump(" You encountered stairs traps ", buf);
14495 sprintf(buf, "%d time%s", u.cnd_intrinsiclosscount, plur(u.cnd_intrinsiclosscount));
14496 dump(" You lost intrinsics ", buf);
14498 sprintf(buf, "%d trap%s", u.cnd_traprevealcount, plur(u.cnd_traprevealcount));
14499 dump(" You randomly revealed ", buf);
14501 sprintf(buf, "%d time%s", u.cnd_badeffectcount, plur(u.cnd_badeffectcount));
14502 dump(" You got hit by bad effects ", buf);
14504 sprintf(buf, "%d time%s", u.cnd_reallybadeffectcount, plur(u.cnd_reallybadeffectcount));
14505 dump(" You got hit by really bad effects ", buf);
14507 sprintf(buf, "%d time%s", u.cnd_goodeffectcount, plur(u.cnd_goodeffectcount));
14508 dump(" You experienced good effects ", buf);
14510 sprintf(buf, "%d item%s teleported out of your inventory", u.cnd_itemportcount, plur(u.cnd_itemportcount));
14511 dump(" You had ", buf);
14513 sprintf(buf, "%d bones level%s", u.cnd_bonescount, plur(u.cnd_bonescount));
14514 dump(" You encountered ", buf);
14516 sprintf(buf, "%d time%s", u.cnd_mommacount, plur(u.cnd_mommacount));
14517 dump(" You had to read insults against your momma ", buf);
14519 sprintf(buf, "%d time%s", u.cnd_badequipcount, plur(u.cnd_badequipcount));
14520 dump(" You were forced to equip bad items ", buf);
14522 sprintf(buf, "%d time%s", u.cnd_badarticount, plur(u.cnd_badarticount));
14523 dump(" You were forced to equip bad artifacts ", buf);
14525 sprintf(buf, "%d time%s", u.cnd_badheelcount, plur(u.cnd_badheelcount));
14526 dump(" You were forced to equip bad high heels ", buf);
14528 sprintf(buf, "%d time%s", u.cnd_appearanceshufflingcount, plur(u.cnd_appearanceshufflingcount));
14529 dump(" You encountered appearance shuffling ", buf);
14531 sprintf(buf, "%d time%s", u.cnd_mysteriousforcecount, plur(u.cnd_mysteriousforcecount));
14532 dump(" You got affected by the dirty mysterious dirt force full of dirt ", buf);
14534 sprintf(buf, "%d time%s", u.cnd_manlergetcount, plur(u.cnd_manlergetcount));
14535 dump(" You were caught by the manler ", buf);
14537 sprintf(buf, "%d time%s", u.cnd_wandbreakcount, plur(u.cnd_wandbreakcount));
14538 dump(" You broke wands ", buf);
14540 sprintf(buf, "%d time%s", u.cnd_alchemycount, plur(u.cnd_alchemycount));
14541 dump(" You performed alchemy ", buf);
14543 sprintf(buf, "%d hostile weapon%s", u.cnd_weaponbreakcount, plur(u.cnd_weaponbreakcount));
14544 dump(" You destroyed ", buf);
14546 sprintf(buf, "%s %d time%s", ((flags.female && urace.individual.f) ? urace.individual.f :
14547 (urace.individual.m) ? urace.individual.m : urace.noun), u.cnd_newmancount, plur(u.cnd_newmancount));
14548 dump(" You felt like a new ", buf);
14550 sprintf(buf, "%d egg%s to hatch", u.cnd_eggcount, plur(u.cnd_eggcount));
14551 dump(" You allowed ", buf);
14553 sprintf(buf, "%s %d time%s", body_part(FACE), u.cnd_wipecount, plur(u.cnd_wipecount));
14554 dump(" You wiped your ", buf);
14556 sprintf(buf, "%d item%s", u.cnd_acquirementcount, plur(u.cnd_acquirementcount));
14557 dump(" You acquired ", buf);
14559 sprintf(buf, "%d time%s", u.cnd_cannibalcount, plur(u.cnd_cannibalcount));
14560 dump(" You were a cannibal ", buf);
14562 sprintf(buf, "%d time%s", u.cnd_ringtrinsiccount, plur(u.cnd_ringtrinsiccount));
14563 dump(" You gained intrinsics from eating jewelry ", buf);
14565 sprintf(buf, "%d potion%s", u.cnd_potionthrowyoucount, plur(u.cnd_potionthrowyoucount));
14566 dump(" You threw ", buf);
14568 sprintf(buf, "%d potion%s", u.cnd_potionthrowmoncount, plur(u.cnd_potionthrowmoncount));
14569 dump(" You allowed monsters to throw ", buf);
14571 sprintf(buf, "%d time%s", u.cnd_overlevelcount, plur(u.cnd_overlevelcount));
14572 dump(" You leveled past the maximum experience level ", buf);
14574 sprintf(buf, "%d time%s", u.cnd_vomitingcount, plur(u.cnd_vomitingcount));
14575 dump(" You vomited ", buf);
14577 sprintf(buf, "%d time%s", u.cnd_cwnannwncount, plur(u.cnd_cwnannwncount));
14578 dump(" You were low on health ", buf);
14580 sprintf(buf, "%d time%s", u.cnd_bansheecount, plur(u.cnd_bansheecount));
14581 dump(" You were down to your last hit point ", buf);
14583 sprintf(buf, "%d time%s", u.cnd_lycanthropecount, plur(u.cnd_lycanthropecount));
14584 dump(" You contracted lycanthropy ", buf);
14586 sprintf(buf, "%d blackjack game%s", u.cnd_blackjackwins, plur(u.cnd_blackjackwins));
14587 dump(" You won ", buf);
14589 sprintf(buf, "%d time%s", u.cnd_blackjackdealercheat, plur(u.cnd_blackjackdealercheat));
14590 dump(" You were subjected to the blackjack dealer's cheating ", buf);
14592 sprintf(buf, "%d time%s", u.cnd_covideffect, plur(u.cnd_covideffect));
14593 dump(" You suffered from covid-19 symptoms ", buf);
14595 sprintf(buf, "%d time%s", u.cnd_covidantidote, plur(u.cnd_covidantidote));
14596 dump(" You received a covid-19 antidote ", buf);
14598 sprintf(buf, "%d time%s", u.cnd_socksmell, plur(u.cnd_socksmell));
14599 dump(" You sniffed worn socks ", buf);
14601 sprintf(buf, "%d time%s", u.cnd_pantsmell, plur(u.cnd_pantsmell));
14602 dump(" You sniffed worn pants ", buf);
14604 sprintf(buf, "%d time%s", u.cnd_photo_op, plur(u.cnd_photo_op));
14605 dump(" You were photographed by monsters ", buf);
14607 sprintf(buf, "%d time%s", u.cnd_weapondull, plur(u.cnd_weapondull));
14608 dump(" You had your weapons dull ", buf);
14610 sprintf(buf, "%d time%s", u.cnd_armordull, plur(u.cnd_armordull));
14611 dump(" You had your armors dull ", buf);
14613 sprintf(buf, "%d monster%s with your symbiote's attacks", u.cnd_symbiotekills, plur(u.cnd_symbiotekills));
14614 dump(" You killed ", buf);
14616 sprintf(buf, "%d pair%s of shoes for Sing", u.cnd_singhelped, plur(u.cnd_singhelped));
14617 dump(" You cleaned ", buf);
14619 sprintf(buf, "to clean shoes for Sing %d times", u.cnd_singrefused);
14620 dump(" You refused ", buf);
14622 sprintf(buf, "%d trophies", u.cnd_trophiesobtained);
14623 dump(" You obtained ", buf);
14625 sprintf(buf, "%d time%s", u.cnd_eliftrapcnt, plur(u.cnd_eliftrapcnt));
14626 dump(" You enjoyed Elif's treatment ", buf);
14628 sprintf(buf, "%d time%s", u.cnd_nadjatrapcnt, plur(u.cnd_nadjatrapcnt));
14629 dump(" You angered the women ", buf);
14631 sprintf(buf, "%d time%s", u.cnd_nataljetrapcnt, plur(u.cnd_nataljetrapcnt));
14632 dump(" You failed to dance properly ", buf);
14634 sprintf(buf, "%d time%s", u.cnd_doratrapcnt, plur(u.cnd_doratrapcnt));
14635 dump(" You had your shoes damaged by evil birds ", buf);
14637 sprintf(buf, "%d time%s", u.cnd_verenatrapcnt, plur(u.cnd_verenatrapcnt));
14638 dump(" You were annoyed by Verena ", buf);
14640 sprintf(buf, "%d time%s", u.cnd_antjetrapcnt, plur(u.cnd_antjetrapcnt));
14641 dump(" You visited the public toilet ", buf);
14643 sprintf(buf, "%d time%s", u.cnd_larissatrapcnt, plur(u.cnd_larissatrapcnt));
14644 dump(" You were forced to step into shit ", buf);
14646 sprintf(buf, "%d time%s", u.cnd_juliatrapcnt, plur(u.cnd_juliatrapcnt));
14647 dump(" You were prevented from attacking women ", buf);
14649 sprintf(buf, "%d time%s", u.cnd_ritatrapcnt, plur(u.cnd_ritatrapcnt));
14650 dump(" You had monsters trigger feminism traps for you ", buf);
14652 sprintf(buf, "%d time%s", u.cnd_klaratrapcnt, plur(u.cnd_klaratrapcnt));
14653 dump(" You heard clacking high heel noises ", buf);
14655 sprintf(buf, "%d time%s", u.cnd_friederiketrapcnt, plur(u.cnd_friederiketrapcnt));
14656 dump(" You were bundled by Friederike ", buf);
14658 sprintf(buf, "%d time%s", u.cnd_utetrapcnt, plur(u.cnd_utetrapcnt));
14659 dump(" You had your shoes turn into beautiful missys ", buf);
14661 sprintf(buf, "%d time%s", u.cnd_maybritttrapcnt, plur(u.cnd_maybritttrapcnt));
14662 dump(" You had May-Britt steal your items ", buf);
14664 sprintf(buf, "%d time%s", u.cnd_littlemarietrapcnt, plur(u.cnd_littlemarietrapcnt));
14665 dump(" You triggered the girls' nasty shield ", buf);
14667 sprintf(buf, "%d time%s (hint: doing that too often can result in you skipping crucially important messages and being screwed over unexpectedly)", u.cnd_escapepastcount, plur(u.cnd_escapepastcount));
14668 dump(" You escaped past messages ", buf);
14670 sprintf(buf, "%d time%s", u.cnd_cheaterprayer, plur(u.cnd_cheaterprayer));
14671 dump(" You used the cheater prayer ", buf);
14673 if (achieve.get_bell) {
14674 dump("", " You obtained the silver bell");
14676 if (achieve.enter_gehennom) {
14677 dump("", " You entered Gehennom via the front entrance");
14679 if (achieve.get_candelabrum) {
14680 dump("", " You obtained the candelabrum");
14682 if (achieve.get_book) {
14683 dump("", " You obtained the papyrus book");
14685 if (achieve.perform_invocation) {
14686 dump("", " You performed the invocation");
14688 if (achieve.get_amulet) {
14689 dump("", " You obtained the Amulet of Yendor");
14691 if (achieve.ascended) {
14692 dump("", " You ascended");
14694 if (achieve.get_luckstone) {
14695 dump("", " You obtained the Mines End luckstone");
14697 if (achieve.finish_sokoban) {
14698 dump("", " You finished Sokoban");
14700 if (achieve.killed_medusa) {
14701 dump("", " You killed Medusa");
14703 if (achieve.killed_nightmare) {
14704 dump("", " You killed Nightmare");
14706 if (achieve.killed_vecna) {
14707 dump("", " You killed Vecna");
14709 if (achieve.killed_beholder) {
14710 dump("", " You killed Beholder");
14712 if (achieve.killed_ruggo) {
14713 dump("", " You killed Ruggo the Gnome King");
14715 if (achieve.killed_kroo) {
14716 dump("", " You killed Kroo the Kobold King");
14718 if (achieve.killed_grund) {
14719 dump("", " You killed Grund the Orc King");
14721 if (achieve.killed_largestgiant) {
14722 dump("", " You killed the Largest Giant");
14724 if (achieve.killed_shelob) {
14725 dump("", " You killed Shelob");
14727 if (achieve.killed_girtab) {
14728 dump("", " You killed Girtab");
14730 if (achieve.killed_aphrodite) {
14731 dump("", " You killed Aphrodite");
14733 if (achieve.killed_frankenstein) {
14734 dump("", " You killed Frankenstein");
14736 if (achieve.killed_croesus) {
14737 dump("", " You killed Croesus");
14739 if (achieve.killed_dagon) {
14740 dump("", " You killed Father Dagon");
14742 if (achieve.killed_hydra) {
14743 dump("", " You killed Mother Hydra");
14745 if (achieve.imbued_bell) {
14746 dump("", " You imbued the silver bell");
14748 if (achieve.imbued_amulet) {
14749 dump("", " You imbued the Amulet of Yendor");
14751 if (achieveX.killed_elderpriest) {
14752 dump("", " You killed an elder priest");
14754 if (achieveX.killed_glassgolem) {
14755 dump("", " You killed the motherfucker glass golem");
14757 if (achieveX.killed_tiksrvzllat) {
14758 dump("", " You killed Tiksrvzllat");
14760 if (achieveX.killed_bofh) {
14761 dump("", " You killed the BOFH");
14763 if (achieveX.swimmingpool_cleared) {
14764 dump("", " You completed the Swimming Pools");
14766 if (achieveX.killed_katia) {
14767 dump("", " You killed Erogenous Katia");
14769 if (achieveX.killed_witchking) {
14770 dump("", " You killed the Witch-King of Angmar");
14772 if (achieveX.get_magresstone) {
14773 dump("", " You obtained the Deep Mines End stone of magic resistance");
14775 if (achieveX.devnull_complete) {
14776 dump("", " You completed all the Devnull challenges");
14778 if (achieveX.killed_minotaur) {
14779 dump("", " You killed the Minotaur of the Maze");
14781 if (achieveX.killed_kalwina) {
14782 dump("", " You killed Kalwina");
14784 if (achieveX.killed_stahngnir) {
14785 dump("", " You killed Lord Stahngnir");
14787 if (achieveX.killed_ariane) {
14788 dump("", " You killed Lady Ariane");
14790 if (achieveX.completed_rivalquest) {
14791 dump("", " You completed the rival quest");
14793 if (achieveX.completed_minusworld) {
14794 dump("", " You completed the Minus World");
14796 if (achieveX.killed_vera) {
14797 dump("", " You killed Vera the Ice Queen");
14799 if (achieveX.killed_elaine) {
14800 dump("", " You killed Elaine the Enchantress");
14803 dump("", "");
14805 #endif /* DUMP_LOG */
14807 #endif /* OVLB */
14808 #ifdef OVL1
14810 /* Macros for meta and ctrl modifiers:
14811 * M and C return the meta/ctrl code for the given character;
14812 * e.g., (C('c') is ctrl-c
14813 * ISMETA and ISCTRL return TRUE iff the code is a meta/ctrl code
14814 * UNMETA and UNCTRL are the opposite of M/C and return the key for a given
14815 * meta/ctrl code. */
14816 #ifndef M
14817 # ifndef NHSTDC
14818 # define M(c) (0x80 | (c))
14819 # else
14820 # define M(c) ((c) - 128)
14821 # endif /* NHSTDC */
14822 #endif
14823 #define ISMETA(c) (((c) & 0x80) != 0)
14824 #define UNMETA(c) ((c) & 0x7f)
14826 #ifndef C
14827 #define C(c) (0x1f & (c))
14828 #endif
14829 #define ISCTRL(c) ((uchar)(c) < 0x20)
14830 #define UNCTRL(c) (ISCTRL(c) ? (0x60 | (c)) : (c))
14833 /* maps extended ascii codes for key presses to extended command entries in extcmdlist */
14834 static struct key_tab cmdlist[256];
14836 /* list built upon option loading; holds list of keys to be rebound later
14837 * see "crappy hack" below */
14838 static struct binding_list_tab *bindinglist = NULL;
14840 #define AUTOCOMPLETE TRUE
14841 #define IFBURIED TRUE
14843 #define EXTCMDLIST_SIZE (sizeof(extcmdlist) / sizeof(extcmdlist[1]))
14845 /* Extended commands: We ABSOLUTELY MUST have blank entries for wizard mode below!!! Otherwise, CRASH! --Amy */
14847 struct ext_func_tab extcmdlist[] = {
14848 {"2weapon", "toggle two-weapon combat", dotwoweapon, !IFBURIED, AUTOCOMPLETE},
14849 {"adjust", "adjust inventory letters", doorganize, IFBURIED, AUTOCOMPLETE},
14850 {"annotate", "name current level", donamelevel, TRUE, AUTOCOMPLETE},
14851 #ifdef BORG
14852 {"borg", "enable borg mode", doborgtoggle, IFBURIED, AUTOCOMPLETE},
14853 #endif
14854 {"borrow", "steal from monsters", playersteal, IFBURIED, AUTOCOMPLETE}, /* jla */
14855 {"chat", "talk to someone", dotalk, IFBURIED, AUTOCOMPLETE}, /* converse? */
14856 {"conduct", "list which challenges you have adhered to", doconduct, IFBURIED, AUTOCOMPLETE},
14857 {"dip", "dip an object into something", dodip, !IFBURIED, AUTOCOMPLETE},
14858 {"enhance", "advance or check weapons skills", enhance_weapon_skill, IFBURIED, AUTOCOMPLETE},
14859 #if 0
14860 // {"ethics", "list which challenges you have adhered to", doethics, TRUE},
14861 {"ethics", "list which challenges you have adhered to", doethics, !IFBURIED, AUTOCOMPLETE},
14862 #endif
14863 #ifndef PUBLIC_SERVER
14864 {"explore", "enter explore mode", enter_explore_mode, IFBURIED, !AUTOCOMPLETE},
14865 #endif
14866 {"force", "force a lock", doforce, !IFBURIED, AUTOCOMPLETE},
14867 {"invoke", "invoke an object's powers", doinvoke, IFBURIED, AUTOCOMPLETE},
14868 {"jump", "jump to a location", dojump, !IFBURIED, AUTOCOMPLETE},
14869 {"loot", "loot a box on the floor", doloot, IFBURIED, AUTOCOMPLETE},
14870 {"look", "look at an object", dolook, !IFBURIED, !AUTOCOMPLETE},
14871 {"mark", "mark item so pets don't drop it", domarkforpet, IFBURIED, AUTOCOMPLETE},
14872 {"monster", "use a monster's special ability", domonability, IFBURIED, AUTOCOMPLETE},
14873 {"name", "name an item or type of object", ddocall, IFBURIED},
14874 {"offer", "offer a sacrifice to the gods", dosacrifice, !IFBURIED, AUTOCOMPLETE},
14875 {"overview", "show an overview of the dungeon", dooverview, TRUE, AUTOCOMPLETE},
14876 {"pray", "pray to the gods for help", dopray, IFBURIED, AUTOCOMPLETE},
14877 {"quit", "exit without saving current game", done2, IFBURIED, AUTOCOMPLETE},
14878 {"stackmark", "mark an item to not merge", dostackmark, TRUE, AUTOCOMPLETE},
14880 {"apply", "apply (use) a tool (pick-axe, key, lamp...)", doapply, !IFBURIED},
14881 {"removeimarkers", "remove all \"I\"s, remembered, unseen creatures from the level", doremoveimarkers, IFBURIED, AUTOCOMPLETE},
14882 {"spelldelete", "delete lowest spell in the list (must be forgotten)", dodeletespell, IFBURIED, AUTOCOMPLETE},
14883 {"attributes", "show your attributes (intrinsic ones included in debug or explore mode)", doattributes, IFBURIED},
14884 {"close", "close a door", doclose, !IFBURIED},
14885 {"cast", "zap (cast) a spell", docast, IFBURIED},
14886 {"discoveries", "show what object types have been discovered", dodiscovered, IFBURIED},
14887 {"down", "go down a staircase", dodown, !IFBURIED},
14888 {"drop", "drop an item", dodrop, !IFBURIED},
14889 {"dropall", "drop specific item types", doddrop, !IFBURIED},
14890 {"takeoffall", "remove all armor", doddoremarm, !IFBURIED},
14891 {"inventory", "show your inventory", ddoinv, IFBURIED},
14892 {"quaff", "quaff (drink) something", dodrink, !IFBURIED},
14893 {"#", "perform an extended command", doextcmd, IFBURIED},
14894 {"travel", "Travel to a specific location", dotravel, !IFBURIED},
14895 {"eat", "eat something", doeat, !IFBURIED},
14896 {"engrave", "engrave writing on the floor", doengrave, !IFBURIED},
14897 {"fire", "fire ammunition from quiver", dofire, !IFBURIED},
14898 {"history", "show long version and game history", dohistory, IFBURIED},
14899 {"help", "give a help message", dohelp, IFBURIED},
14900 {"seetrap", "show the type of a trap", doidtrap, IFBURIED},
14901 {"kick", "kick something", dokick, !IFBURIED},
14902 {"call", "call (name) a particular monster", ddocall, IFBURIED},
14903 {"callold", "call (name) a particular monster (vanilla)", do_mname, IFBURIED},
14904 {"wait", "rest one move while doing nothing", donull, IFBURIED, !AUTOCOMPLETE, "waiting"},
14905 {"previous", "toggle through previously displayed game messages", doprev_message, IFBURIED},
14906 {"open", "open a door", doopen, !IFBURIED},
14907 {"pickup", "pick up things at the current location", dopickup, !IFBURIED},
14908 {"pay", "pay your shopping bill", dopay, !IFBURIED},
14909 {"puton", "put on an accessory (ring amulet, etc)", doputon, !IFBURIED},
14910 {"seeweapon", "show the weapon currently wielded", doprwep, IFBURIED},
14911 {"seearmor", "show the armor currently worn", doprarm, IFBURIED},
14912 {"seerings", "show the ring(s) currently worn", doprring, IFBURIED},
14913 {"seeamulet", "show the amulet currently worn", dopramulet, IFBURIED},
14914 {"seetools", "show the tools currently in use", doprtool, IFBURIED},
14915 {"seeall", "show all equipment in use (generally, ),[,=,\",( commands", doprinuse, IFBURIED},
14916 {"seegold", "count your gold", doprgold, IFBURIED},
14917 {"glance", "show what type of thing a map symbol on the level corresponds to", doquickwhatis, IFBURIED},
14918 {"remove", "remove an accessory (ring, amulet, etc)", doremring, !IFBURIED},
14919 {"read", "read a scroll or spellbook", doread, !IFBURIED},
14920 {"redraw", "redraw screen", doredraw, IFBURIED},
14921 #ifdef SUSPEND
14922 {"suspend", "suspend game (only if defined)", dosuspend, IFBURIED},
14923 #endif /* SUSPEND */
14924 {"setoptions", "show option settings, possibly change them", doset, IFBURIED},
14925 {"search", "search for traps and secret doors", dosearch, IFBURIED, !AUTOCOMPLETE, "searching"},
14926 {"save", "save the game", dosave, IFBURIED},
14927 {"swap", "swap wielded and secondary weapons", doswapweapon, !IFBURIED},
14928 /* Have to put the definition in an ifdef too because "shell" could be rebound
14929 * to something
14931 #ifndef PUBLIC_SERVER
14932 {"shell", "do a shell escape (only if defined)", dosh, IFBURIED},
14933 #endif
14934 {"throw", "throw something", dothrow, !IFBURIED},
14935 {"takeoff", "take off one piece of armor", dotakeoff, !IFBURIED},
14936 {"teleport", "teleport around level", dotele, IFBURIED},
14937 {"inventoryall", "inventory specific item types", dotypeinv, IFBURIED},
14938 {"autopickup", "toggle the pickup option on/off", dotogglepickup, IFBURIED},
14939 {"up", "go up a staircase", doup, !IFBURIED},
14940 {"version", "show version", doversion, IFBURIED},
14941 {"seespells", "list known spells", dovspell, IFBURIED},
14942 {"quiver", "select ammunition for quiver", dowieldquiver, !IFBURIED},
14943 {"whatis", "show what type of thing a symbol corresponds to", dowhatis, IFBURIED},
14944 {"whatdoes", "tell what a command does", dowhatdoes, IFBURIED},
14945 {"wield", "wield (put in use) a weapon", dowield, !IFBURIED},
14946 {"wear", "wear a piece of armor", dowear, !IFBURIED},
14947 {"zap", "zap a wand", dozap, !IFBURIED},
14949 {"ride", "ride (or stop riding) a monster", doride, !IFBURIED, AUTOCOMPLETE},
14950 {"rub", "rub a lamp or a stone", dorub, !IFBURIED, AUTOCOMPLETE},
14951 #ifdef LIVELOG_SHOUT
14952 {"shout", "shout something", doshout, !IFBURIED, AUTOCOMPLETE},
14953 #endif
14954 {"sit", "sit down", dosit, !IFBURIED, AUTOCOMPLETE},
14955 #ifdef SHOUT
14956 {"shout", "say something loud", doyell, !IFBURIED, AUTOCOMPLETE}, /* jrn */
14957 #endif
14958 {"technique", "perform a technique", dotech, IFBURIED, AUTOCOMPLETE},
14959 {"turn", "turn undead", doturn, IFBURIED, AUTOCOMPLETE},
14960 {"twoweapon", "toggle two-weapon combat", dotwoweapon, !IFBURIED, AUTOCOMPLETE},
14961 {"untrap", "untrap something", dountrap, !IFBURIED, AUTOCOMPLETE},
14962 {"vanquished", "list vanquished monsters", dolistvanq, IFBURIED, !AUTOCOMPLETE},
14963 {"versionext", "list compile time options for this version of Slash'EM", doextversion, IFBURIED, AUTOCOMPLETE},
14964 {"wipe", "wipe off your face", dowipe, IFBURIED, AUTOCOMPLETE},
14965 {"youpoly", "polymorph at will", polyatwill, IFBURIED, AUTOCOMPLETE}, /* jla */
14966 {"?", "get this list of extended commands", doextlist, IFBURIED, AUTOCOMPLETE},
14967 #if defined(WIZARD)
14969 * There MUST be a blank entry here for every entry in the table
14970 * below. Otherwise the game may crash in wizard mode, which would be very bad. --Amy
14972 #ifdef DISPLAY_LAYERS
14973 {(char *)0, (char *)0, donull, TRUE}, /* #display */
14974 #endif
14975 {(char *)0, (char *)0, donull, TRUE}, /* #levelchange */
14976 {(char *)0, (char *)0, donull, TRUE}, /* #lightsources */
14977 #ifdef DEBUG_MIGRATING_MONS
14978 {(char *)0, (char *)0, donull, TRUE}, /* #migratemons */
14979 #endif
14980 {(char *)0, (char *)0, donull, TRUE}, /* #detectmons */
14981 {(char *)0, (char *)0, donull, TRUE}, /* #monpolycontrol */
14982 {(char *)0, (char *)0, donull, TRUE}, /* #panic */
14983 {(char *)0, (char *)0, donull, TRUE}, /* #polyself */
14984 #ifdef PORT_DEBUG
14985 {(char *)0, (char *)0, donull, TRUE}, /* #portdebug */
14986 #endif
14987 {(char *)0, (char *)0, donull, TRUE}, /* #seenv */
14988 {(char *)0, (char *)0, donull, TRUE}, /* #stats */
14989 {(char *)0, (char *)0, donull, TRUE}, /* #timeout */
14990 {(char *)0, (char *)0, donull, TRUE}, /* #vision */
14991 #ifdef DEBUG
14992 {(char *)0, (char *)0, donull, TRUE}, /* #wizdebug */
14993 #endif
14994 {(char *)0, (char *)0, donull, TRUE}, /* #wmode */
14995 {(char *)0, (char *)0, donull, TRUE}, /* #detect */
14996 {(char *)0, (char *)0, donull, TRUE}, /* #map */
14997 {(char *)0, (char *)0, donull, TRUE}, /* #genesis */
14998 {(char *)0, (char *)0, donull, TRUE}, /* #identify */
14999 {(char *)0, (char *)0, donull, TRUE}, /* #levelport */
15000 {(char *)0, (char *)0, donull, TRUE}, /* #dotechwiz */
15001 {(char *)0, (char *)0, donull, TRUE}, /* #wish */
15002 {(char *)0, (char *)0, donull, TRUE}, /* #gainac */
15003 {(char *)0, (char *)0, donull, TRUE}, /* #gainlevel */
15004 {(char *)0, (char *)0, donull, TRUE}, /* #iddqd */
15005 {(char *)0, (char *)0, donull, TRUE}, /* #where */
15006 #endif
15007 {(char *)0, (char *)0, donull, TRUE} /* sentinel */
15010 /* important: BLANK ENTRIES HAVE TO BE ABOVE OR CRASH --Amy */
15012 #ifdef WIZARD
15013 static struct ext_func_tab debug_extcmdlist[] = {
15014 #ifdef DISPLAY_LAYERS
15015 {"display", "detail display layers", wiz_show_display, IFBURIED, AUTOCOMPLETE},
15016 #endif /* DISPLAY_LAYERS */
15017 {"levelchange", "change experience level", wiz_level_change, IFBURIED, AUTOCOMPLETE},
15018 {"lightsources", "show mobile light sources", wiz_light_sources, IFBURIED, AUTOCOMPLETE},
15019 #ifdef DEBUG_MIGRATING_MONS
15020 {"migratemons", "migrate n random monsters", wiz_migrate_mons, IFBURIED, AUTOCOMPLETE},
15021 #endif
15022 {"detectmons", "detect monsters", wiz_detect_monsters, IFBURIED, AUTOCOMPLETE},
15023 {"monpolycontrol", "control monster polymorphs", wiz_mon_polycontrol, IFBURIED, AUTOCOMPLETE},
15024 {"panic", "test panic routine (fatal to game)", wiz_panic, IFBURIED, AUTOCOMPLETE},
15025 {"polyself", "polymorph self", wiz_polyself, IFBURIED, AUTOCOMPLETE},
15026 #ifdef PORT_DEBUG
15027 {"portdebug", "wizard port debug command", wiz_port_debug, IFBURIED, AUTOCOMPLETE},
15028 #endif
15029 {"seenv", "show seen vectors", wiz_show_seenv, IFBURIED, AUTOCOMPLETE},
15030 {"stats", "show memory statistics", wiz_show_stats, IFBURIED, AUTOCOMPLETE},
15031 {"timeout", "look at timeout queue", wiz_timeout_queue, IFBURIED, AUTOCOMPLETE},
15032 {"vision", "show vision array", wiz_show_vision, IFBURIED, AUTOCOMPLETE},
15033 #ifdef DEBUG
15034 {"wizdebug", "wizard debug command", wiz_debug_cmd, IFBURIED, AUTOCOMPLETE},
15035 #endif
15036 {"wmode", "show wall modes", wiz_show_wmodes, IFBURIED, AUTOCOMPLETE},
15037 {"detect", "detect secret doors and traps", wiz_detect, IFBURIED},
15038 {"map", "do magic mapping", wiz_map, IFBURIED},
15039 {"genesis", "create monster", wiz_genesis, IFBURIED},
15040 {"identify", "identify items in pack", wiz_identify, IFBURIED},
15041 {"levelport", "to trans-level teleport", wiz_level_tele, IFBURIED},
15042 {"twiz", "reload techniques", dotechwiz, IFBURIED, AUTOCOMPLETE},
15043 {"wish", "make wish", wiz_wish, IFBURIED},
15044 {"gainac", "gain ac", wiz_gain_ac, IFBURIED},
15045 {"gainlevel", "gain level", wiz_gain_level, IFBURIED},
15046 {"iddqd", "become invulnerable", wiz_toggle_invulnerability, IFBURIED},
15047 {"where", "tell locations of special levels", wiz_where, IFBURIED},
15048 {(char *)0, (char *)0, donull, IFBURIED}
15051 /* important: BLANK ENTRIES HAVE TO BE ABOVE OR CRASH --Amy */
15055 static void
15056 bind_key(key, command)
15057 unsigned char key;
15058 char* command;
15060 struct ext_func_tab * extcmd;
15062 /* special case: "nothing" is reserved for unbinding */
15063 if (!strcmp(command, "nothing")) {
15064 cmdlist[key].bind_cmd = NULL;
15065 return;
15068 for(extcmd = extcmdlist; extcmd->ef_txt; extcmd++) {
15069 if (strcmp(command, extcmd->ef_txt)) continue;
15070 cmdlist[key].bind_cmd = extcmd;
15071 return;
15074 pline("Bad command %s matched with key %c (ASCII %i). "
15075 "Ignoring command.\n", command, key, key);
15079 static void
15080 init_bind_list(void)
15082 bind_key(C('d'), "kick" ); /* "D" is for door!...? Msg is in dokick.c */
15083 #ifdef WIZARD
15084 if (wizard) {
15085 bind_key(C('e'), "detect" );
15086 bind_key(C('f'), "map" );
15087 bind_key(C('g'), "genesis" );
15088 bind_key(C('i'), "identify" );
15089 bind_key(C('o'), "where" );
15090 bind_key(C('v'), "levelport" );
15091 bind_key(C('w'), "wish" );
15092 bind_key(C('h'), "detectmons" );
15093 bind_key(C('c'), "gainac" );
15094 bind_key(C('j'), "gainlevel" );
15095 bind_key(C('n'), "iddqd" );
15097 #endif
15098 bind_key(C('l'), "redraw" ); /* if number_pad is set */
15099 bind_key(C('p'), "previous" );
15100 bind_key(C('r'), "redraw" );
15101 bind_key(C('t'), "teleport" );
15102 bind_key(C('x'), "attributes" );
15103 bind_key(C('y'), "youpoly" );
15104 bind_key(C('b'), "borrow" );
15105 bind_key(C('s'), "save" );
15106 #ifdef SUSPEND
15107 if (iflags.qwertz_layout) {
15108 bind_key(C('y'), "suspend" );
15109 } else {
15110 bind_key(C('z'), "suspend" );
15112 #endif
15113 bind_key('a', "apply" );
15114 bind_key('A', "takeoffall" );
15115 bind_key(M('a'), "adjust" );
15116 /* 'b', 'B' : go sw */
15117 bind_key(M('b'), "borrow" );
15118 bind_key('c', "close" );
15119 bind_key('C', "callold" );
15120 bind_key(M('c'), "chat" );
15121 bind_key('d', "drop" );
15122 bind_key('D', "dropall" );
15123 bind_key(M('d'), "dip" );
15124 bind_key('e', "eat" );
15125 bind_key('E', "engrave" );
15126 bind_key(M('e'), "enhance" );
15127 bind_key('f', "fire" );
15128 /* 'F' : fight (one time) */
15129 bind_key(M('f'), "force" );
15130 /* 'g', 'G' : multiple go */
15131 /* 'h', 'H' : go west */
15132 bind_key('h', "help" ); /* if number_pad is set */
15133 bind_key('i', "inventory" );
15134 bind_key('I', "inventoryall" ); /* Robert Viduya */
15135 bind_key(M('i'), "invoke" );
15136 bind_key('j', "jump" );
15137 /* 'j', 'J', 'k', 'K', 'l', 'L', 'm', 'M', 'n', 'N' : move commands */
15138 bind_key(M('j'), "jump" ); /* if number_pad is on */
15139 bind_key('k', "kick" ); /* if number_pad is on */
15140 bind_key('K', "vanquished" ); /* if number_pad is on */
15141 bind_key('l', "loot" ); /* if number_pad is on */
15142 bind_key(M('l'), "loot" );
15143 bind_key(M('m'), "monster" );
15144 bind_key('N', "name" );
15145 /* 'n' prefixes a count if number_pad is on */
15146 bind_key(M('n'), "name" );
15147 bind_key(M('N'), "name" ); /* if number_pad is on */
15148 bind_key('o', "open" );
15149 bind_key('O', "setoptions" );
15150 bind_key(M('o'), "offer" );
15151 bind_key('p', "pay" );
15152 bind_key('P', "puton" );
15153 bind_key(M('p'), "pray" );
15154 bind_key('q', "quaff" );
15155 bind_key('Q', "quiver" );
15156 bind_key(M('q'), "quit" );
15157 bind_key('r', "read" );
15158 bind_key('R', "remove" );
15159 bind_key(M('r'), "rub" );
15160 bind_key('s', "search" );
15161 bind_key('S', "save" );
15162 bind_key(M('s'), "sit" );
15163 bind_key('t', "throw" );
15164 bind_key('T', "takeoff" );
15165 bind_key(M('t'), "technique" );
15166 /* 'u', 'U' : go ne */
15167 bind_key('u', "untrap" ); /* if number_pad is on */
15168 bind_key(M('u'), "untrap" );
15169 bind_key(C('U'), "removeimarkers" );
15170 bind_key('v', "version" );
15171 bind_key('V', "history" );
15172 bind_key(M('v'), "versionext" );
15173 bind_key('w', "wield" );
15174 bind_key('W', "wear" );
15175 bind_key(M('w'), "wipe" );
15176 bind_key('x', "swap" );
15177 bind_key('X', "twoweapon" );
15178 /*bind_key('X', "explore_mode" );*/
15179 /* 'y', 'Y' : go nw */
15180 #ifdef STICKY_COMMAND
15181 if (iflags.qwertz_layout) {
15182 bind_key(M('z'), "sticky" );
15183 } else {
15184 bind_key(M('y'), "sticky" );
15186 #endif /* STICKY_COMMAND */
15187 if (iflags.qwertz_layout) {
15188 bind_key('y', "zap" );
15189 bind_key('Y', "cast" );
15190 } else {
15191 bind_key('z', "zap" );
15192 bind_key('Z', "cast" );
15194 bind_key('<', "up" );
15195 bind_key('>', "down" );
15196 bind_key('/', "whatis" );
15197 bind_key('&', "whatdoes" );
15198 bind_key('?', "help" );
15199 bind_key(M('?'), "?" );
15200 #ifndef PUBLIC_SERVER
15201 bind_key('!', "shell" );
15202 #endif
15203 bind_key('.', "wait" );
15204 bind_key(' ', "wait" );
15205 bind_key(',', "pickup" );
15206 bind_key(':', "look" );
15207 bind_key(';', "glance" );
15208 bind_key('^', "seetrap" );
15209 bind_key('\\', "discoveries" ); /* Robert Viduya */
15210 bind_key('@', "autopickup" );
15211 bind_key(M('2'), "twoweapon" );
15212 bind_key(WEAPON_SYM, "seeweapon" );
15213 bind_key(ARMOR_SYM, "seearmor" );
15214 bind_key(RING_SYM, "seerings" );
15215 bind_key(AMULET_SYM, "seeamulet" );
15216 bind_key(TOOL_SYM, "seetools" );
15217 bind_key('*', "seeall" ); /* inventory of all equipment in use */
15218 bind_key(GOLD_SYM, "seegold" );
15219 bind_key(SPBOOK_SYM, "seespells" ); /* Mike Stephenson */
15220 bind_key('#', "#");
15221 bind_key('_', "travel");
15224 /* takes the list of bindings loaded from the options file, and changes cmdlist
15225 * to match it */
15226 static void
15227 change_bind_list(void)
15229 struct binding_list_tab *binding;
15231 /* TODO: they must be loaded forward, not backward as they are now */
15232 while ((binding = bindinglist)) {
15233 bindinglist = bindinglist->next;
15234 bind_key(binding->key, binding->extcmd);
15235 free(binding->extcmd);
15236 free(binding);
15242 * Insert debug commands into the extended command list. This function
15243 * assumes that the last entry will be the help entry.
15245 * You must add entries in ext_func_tab every time you add one to the
15246 * debug_extcmdlist().
15248 static void
15249 add_debug_extended_commands()
15251 int i, j, k, n;
15253 /* count the # of help entries */
15254 for (n = 0; extcmdlist[n].ef_txt; n++) ;
15256 for (i = 0; debug_extcmdlist[i].ef_txt; i++) {
15257 extcmdlist[n + i] = debug_extcmdlist[i];
15261 /* list all keys and their bindings, like dat/hh but dynamic */
15262 void
15263 dokeylist(void)
15265 char buf[BUFSZ], buf2[BUFSZ];
15266 uchar key;
15267 boolean keys_used[256] = {0};
15268 register const char* dir_keys;
15269 winid datawin;
15270 int i;
15271 char* dir_desc[10] = {"move west",
15272 "move northwest",
15273 "move north",
15274 "move northeast",
15275 "move east",
15276 "move southeast",
15277 "move south",
15278 "move southwest",
15279 "move downward",
15280 "move upward"};
15281 char* misc_desc[MISC_CMD_COUNT] =
15282 {"rush until something interesting is seen",
15283 "run until something extremely interesting is seen",
15284 "fight even if you don't see a monster",
15285 "move without picking up objects/fighting",
15286 "run without picking up objects/fighting",
15287 "escape from the current query/action",
15288 "redo the previous command"
15292 datawin = create_nhwindow(NHW_TEXT);
15293 putstr(datawin, 0, "");
15294 putstr(datawin, 0, " Full Current Key Bindings List");
15295 putstr(datawin, 0, "");
15297 /* directional keys */
15298 if (iflags.num_pad) dir_keys = ndir;
15299 else dir_keys = sdir;
15300 putstr(datawin, 0, "Directional keys:");
15302 sprintf(buf, " %c %c %c", dir_keys[1], dir_keys[2], dir_keys[3]);
15303 putstr(datawin, 0, buf);
15304 putstr(datawin, 0, " \\|/");
15305 sprintf(buf, " %c-.-%c", dir_keys[0], dir_keys[4]);
15306 putstr(datawin, 0, buf);
15307 putstr(datawin, 0, " /|\\");
15308 sprintf(buf, " %c %c %c", dir_keys[7], dir_keys[6], dir_keys[5]);
15309 putstr(datawin, 0, buf);
15310 putstr(datawin, 0, "");
15311 sprintf(buf, " %c up", dir_keys[9]);
15312 putstr(datawin, 0, buf);
15313 sprintf(buf, " %c down", dir_keys[8]);
15314 putstr(datawin, 0, buf);
15315 putstr(datawin, 0, "");
15317 for (i = 0; i < 10; i++) {
15318 key = dir_keys[i];
15319 keys_used[key] = TRUE;
15320 if (!iflags.num_pad) {
15321 keys_used[toupper(key)] = TRUE;
15322 keys_used[C(key)] = TRUE;
15325 sprintf(buf, "%c\t%s", key, dir_desc[i]);
15326 putstr(datawin, 0, buf);
15329 if (!iflags.num_pad) {
15330 putstr(datawin, 0, "Shift-<direction> will move in specified direction until you hit");
15331 putstr(datawin, 0, " a wall or run into something.");
15332 putstr(datawin, 0, "Ctrl-<direction> will run in specified direction until something");
15333 putstr(datawin, 0, " very interesting is seen.");
15335 putstr(datawin, 0, "");
15337 /* special keys -- theoretically modifiable but many are still hard-coded*/
15338 putstr(datawin, 0, "Miscellaneous keys:");
15339 for (i = 0; i < MISC_CMD_COUNT; i++) {
15340 key = misc_cmds[i];
15341 keys_used[key] = TRUE;
15342 sprintf(buf, "%s\t%s", key2txt(key, buf2), misc_desc[i]);
15343 putstr(datawin, 0, buf);
15345 putstr(datawin, 0, "");
15347 /* more special keys -- all hard-coded */
15348 #ifndef NO_SIGNAL
15349 putstr(datawin, 0, "^c\tbreak out of nethack (SIGINT)");
15350 keys_used[C('c')] = TRUE;
15351 if (!iflags.num_pad) putstr(datawin, 0, "");
15352 #endif
15353 if (iflags.num_pad) {
15354 putstr(datawin, 0, "-\tforce fight (same as above)");
15355 putstr(datawin, 0, "5\trun (same as above)");
15356 putstr(datawin, 0, "0\tinventory (as #inventory)");
15357 keys_used['-'] = keys_used['5'] = keys_used['0'] = TRUE;
15358 putstr(datawin, 0, "");
15361 /* command keys - can be rebound or remapped*/
15362 putstr(datawin, 0, "Command keys:");
15363 for(i=0; i<=255; i++) {
15364 struct ext_func_tab * extcmd;
15365 char* mapping;
15366 key = i;
15367 /* JDS: not the most efficient way, perhaps */
15368 if (keys_used[i]) continue;
15369 if (key == ' ' && !flags.rest_on_space) continue;
15370 if ((extcmd = cmdlist[i].bind_cmd)) {
15371 sprintf(buf, "%s\t%s", key2txt(key, buf2),
15372 extcmd->ef_desc);
15373 putstr(datawin, 0, buf);
15376 putstr(datawin, 0, "");
15378 display_nhwindow(datawin, FALSE);
15379 destroy_nhwindow(datawin);
15382 static const char template[] = "%-18s %4ld %6ld";
15383 static const char count_str[] = " count bytes";
15384 static const char separator[] = "------------------ ----- ------";
15386 STATIC_OVL void
15387 count_obj(chain, total_count, total_size, top, recurse)
15388 struct obj *chain;
15389 long *total_count;
15390 long *total_size;
15391 boolean top;
15392 boolean recurse;
15394 long count, size;
15395 struct obj *obj;
15397 for (count = size = 0, obj = chain; obj; obj = obj->nobj) {
15398 if (top) {
15399 count++;
15400 size += sizeof(struct obj) + obj->oxlth + obj->onamelth;
15402 if (recurse && obj->cobj)
15403 count_obj(obj->cobj, total_count, total_size, TRUE, TRUE);
15405 *total_count += count;
15406 *total_size += size;
15409 STATIC_OVL void
15410 obj_chain(win, src, chain, total_count, total_size)
15411 winid win;
15412 const char *src;
15413 struct obj *chain;
15414 long *total_count;
15415 long *total_size;
15417 char buf[BUFSZ];
15418 long count = 0, size = 0;
15420 count_obj(chain, &count, &size, TRUE, FALSE);
15421 *total_count += count;
15422 *total_size += size;
15423 sprintf(buf, template, src, count, size);
15424 putstr(win, 0, buf);
15427 STATIC_OVL void
15428 mon_invent_chain(win, src, chain, total_count, total_size)
15429 winid win;
15430 const char *src;
15431 struct monst *chain;
15432 long *total_count;
15433 long *total_size;
15435 char buf[BUFSZ];
15436 long count = 0, size = 0;
15437 struct monst *mon;
15439 for (mon = chain; mon; mon = mon->nmon)
15440 count_obj(mon->minvent, &count, &size, TRUE, FALSE);
15441 *total_count += count;
15442 *total_size += size;
15443 sprintf(buf, template, src, count, size);
15444 putstr(win, 0, buf);
15447 STATIC_OVL void
15448 contained(win, src, total_count, total_size)
15449 winid win;
15450 const char *src;
15451 long *total_count;
15452 long *total_size;
15454 char buf[BUFSZ];
15455 long count = 0, size = 0;
15456 struct monst *mon;
15458 count_obj(invent, &count, &size, FALSE, TRUE);
15459 count_obj(fobj, &count, &size, FALSE, TRUE);
15460 count_obj(level.buriedobjlist, &count, &size, FALSE, TRUE);
15461 count_obj(migrating_objs, &count, &size, FALSE, TRUE);
15462 /* DEADMONSTER check not required in this loop since they have no inventory */
15463 for (mon = fmon; mon; mon = mon->nmon)
15464 count_obj(mon->minvent, &count, &size, FALSE, TRUE);
15465 for (mon = migrating_mons; mon; mon = mon->nmon)
15466 count_obj(mon->minvent, &count, &size, FALSE, TRUE);
15468 *total_count += count; *total_size += size;
15470 sprintf(buf, template, src, count, size);
15471 putstr(win, 0, buf);
15474 STATIC_OVL void
15475 mon_chain(win, src, chain, total_count, total_size)
15476 winid win;
15477 const char *src;
15478 struct monst *chain;
15479 long *total_count;
15480 long *total_size;
15482 char buf[BUFSZ];
15483 long count, size;
15484 struct monst *mon;
15486 for (count = size = 0, mon = chain; mon; mon = mon->nmon) {
15487 count++;
15488 size += sizeof(struct monst) + mon->mxlth + mon->mnamelth;
15490 *total_count += count;
15491 *total_size += size;
15492 sprintf(buf, template, src, count, size);
15493 putstr(win, 0, buf);
15497 * Display memory usage of all monsters and objects on the level.
15499 static int
15500 wiz_show_stats()
15502 char buf[BUFSZ];
15503 winid win;
15504 long total_obj_size = 0, total_obj_count = 0;
15505 long total_mon_size = 0, total_mon_count = 0;
15507 win = create_nhwindow(NHW_TEXT);
15508 putstr(win, 0, "Current memory statistics:");
15509 putstr(win, 0, "");
15510 sprintf(buf, "Objects, size %d", (int) sizeof(struct obj));
15511 putstr(win, 0, buf);
15512 putstr(win, 0, "");
15513 putstr(win, 0, count_str);
15515 obj_chain(win, "invent", invent, &total_obj_count, &total_obj_size);
15516 obj_chain(win, "fobj", fobj, &total_obj_count, &total_obj_size);
15517 obj_chain(win, "buried", level.buriedobjlist,
15518 &total_obj_count, &total_obj_size);
15519 obj_chain(win, "migrating obj", migrating_objs,
15520 &total_obj_count, &total_obj_size);
15521 mon_invent_chain(win, "minvent", fmon,
15522 &total_obj_count,&total_obj_size);
15523 mon_invent_chain(win, "migrating minvent", migrating_mons,
15524 &total_obj_count, &total_obj_size);
15526 contained(win, "contained",
15527 &total_obj_count, &total_obj_size);
15529 putstr(win, 0, separator);
15530 sprintf(buf, template, "Total", total_obj_count, total_obj_size);
15531 putstr(win, 0, buf);
15533 putstr(win, 0, "");
15534 putstr(win, 0, "");
15535 sprintf(buf, "Monsters, size %d", (int) sizeof(struct monst));
15536 putstr(win, 0, buf);
15537 putstr(win, 0, "");
15539 mon_chain(win, "fmon", fmon,
15540 &total_mon_count, &total_mon_size);
15541 mon_chain(win, "migrating", migrating_mons,
15542 &total_mon_count, &total_mon_size);
15544 putstr(win, 0, separator);
15545 sprintf(buf, template, "Total", total_mon_count, total_mon_size);
15546 putstr(win, 0, buf);
15548 #if defined(__BORLANDC__) && !defined(_WIN32)
15549 show_borlandc_stats(win);
15550 #endif
15552 display_nhwindow(win, FALSE);
15553 destroy_nhwindow(win);
15554 return 0;
15557 void
15558 sanity_check()
15560 obj_sanity_check();
15561 timer_sanity_check();
15564 #ifdef DISPLAY_LAYERS
15566 * Detail contents of each display layer at specified location(s).
15568 static int
15569 wiz_show_display()
15571 int ans, glyph;
15572 coord cc;
15573 winid win;
15574 char buf[BUFSZ];
15575 struct rm *lev;
15577 cc.x = u.ux;
15578 cc.y = u.uy;
15579 pline("Pick a location.");
15580 ans = getpos(&cc, FALSE, "a location of interest");
15581 if (ans < 0 || cc.x < 0)
15582 return 0; /* done */
15583 lev = &levl[cc.x][cc.y];
15584 win = create_nhwindow(NHW_MENU);
15585 sprintf(buf, "Contents of hero's memory at (%d, %d):", cc.x, cc.y);
15586 putstr(win, 0, buf);
15587 putstr(win, 0, "");
15588 sprintf(buf, "Invisible monster: %s",
15589 lev->mem_invis ? "present" : "none");
15590 putstr(win, 0, buf);
15591 if (lev->mem_obj && lev->mem_corpse)
15592 if (mons[lev->mem_obj - 1].geno & G_UNIQ)
15593 sprintf(buf, "Object: %s%s corpse",
15594 type_is_pname(&mons[lev->mem_obj - 1]) ? "" : "the ",
15595 s_suffix(mons[lev->mem_obj - 1].mname));
15596 else
15597 sprintf(buf, "Object: %s corpse", mons[lev->mem_obj - 1].mname);
15598 else
15599 sprintf(buf, "Object: %s", lev->mem_obj ?
15600 obj_typename(lev->mem_obj - 1) : "none");
15601 putstr(win, 0, buf);
15602 sprintf(buf, "Trap: %s", lev->mem_trap ?
15603 defsyms[trap_to_defsym(lev->mem_trap)].explanation : "none");
15604 putstr(win, 0, buf);
15605 sprintf(buf, "Backgroud: %s", defsyms[lev->mem_bg].explanation);
15606 putstr(win, 0, buf);
15607 putstr(win, 0, "");
15608 glyph = glyph_at(cc.x, cc.y);
15609 sprintf(buf, "Buffered (3rd screen): ");
15610 if (glyph_is_monster(glyph)) {
15611 strcat(buf, mons[glyph_to_mon(glyph)].mname);
15612 if (glyph_is_pet(glyph))
15613 strcat(buf, " (tame)");
15614 if (glyph_is_ridden_monster(glyph))
15615 strcat(buf, " (ridden)");
15616 if (glyph_is_detected_monster(glyph))
15617 strcat(buf, " (detected)");
15618 } else if (glyph_is_object(glyph)) {
15619 if (glyph_is_body(glyph)) {
15620 int corpse = glyph_to_body(glyph);
15621 if (mons[corpse].geno & G_UNIQ)
15622 sprintf(eos(buf), "%s%s corpse",
15623 type_is_pname(&mons[corpse]) ? "" : "the ",
15624 s_suffix(mons[corpse].mname));
15625 else
15626 sprintf(eos(buf), "%s corpse", mons[corpse].mname);
15627 } else
15628 strcat(buf, obj_typename(glyph_to_obj(glyph)));
15629 } else if (glyph_is_invisible(glyph))
15630 strcat(buf, "invisible monster");
15631 else if (glyph_is_cmap(glyph))
15632 strcat(buf, defsyms[glyph_to_cmap(glyph)].explanation);
15633 else
15634 sprintf(eos(buf), "[%d]", glyph);
15635 putstr(win, 0, buf);
15636 display_nhwindow(win, FALSE);
15637 destroy_nhwindow(win);
15638 return 0;
15640 #endif
15642 #ifdef DEBUG_MIGRATING_MONS
15643 static int
15644 wiz_migrate_mons()
15646 int mcount = 0;
15647 char inbuf[BUFSZ];
15648 struct permonst *ptr;
15649 struct monst *mtmp;
15650 d_level tolevel;
15651 getlin("How many random monsters to migrate? [0]", inbuf);
15652 if (*inbuf == '\033') return 0;
15653 mcount = atoi(inbuf);
15654 if (mcount < 0 || mcount > (COLNO * ROWNO) || Is_botlevel(&u.uz))
15655 return 0;
15656 while (mcount > 0) {
15657 if (Is_stronghold(&u.uz))
15658 assign_level(&tolevel, &valley_level);
15659 else
15660 get_level(&tolevel, depth(&u.uz) + 1);
15661 ptr = rndmonst();
15662 mtmp = makemon(ptr, 0, 0, NO_MM_FLAGS);
15663 if (mtmp) migrate_to_level(mtmp, ledger_no(&tolevel),
15664 MIGR_RANDOM, (coord *)0);
15665 mcount--;
15667 return 0;
15669 #endif
15673 #endif /* WIZARD */
15675 static int
15676 compare_commands(_cmd1, _cmd2)
15677 /* a wrapper function for strcmp. Can this be done more simply? */
15678 void *_cmd1, *_cmd2;
15680 struct ext_func_tab *cmd1 = _cmd1, *cmd2 = _cmd2;
15682 return strcmp(cmd1->ef_txt, cmd2->ef_txt);
15685 void
15686 commands_init(void)
15688 int count = 0;
15690 #ifdef WIZARD
15691 if (wizard) add_debug_extended_commands();
15692 #endif
15693 while(extcmdlist[count].ef_txt) count++;
15695 qsort(extcmdlist, count, sizeof(struct ext_func_tab),
15696 &compare_commands);
15698 init_bind_list(); /* initialize all keyboard commands */
15699 change_bind_list(); /* change keyboard commands based on options */
15702 /* returns a one-byte character from the text (it may massacre the txt
15703 * buffer) */
15704 char
15705 txt2key(txt)
15706 char* txt;
15708 txt = stripspace(txt);
15709 if (!*txt) return 0;
15711 /* simple character */
15712 if (!txt[1]) return txt[0];
15714 /* a few special entries */
15715 if (!strcmp(txt, "<enter>")) return '\n';
15716 if (!strcmp(txt, "<space>")) return ' ';
15717 if (!strcmp(txt, "<esc>")) return '\033';
15719 /* control and meta keys */
15720 switch (*txt) {
15721 case 'm': /* can be mx, Mx, m-x, M-x */
15722 case 'M':
15723 txt++;
15724 if(*txt == '-' && txt[1]) txt++;
15725 if (txt[1]) return 0;
15726 return M( *txt );
15727 case 'c': /* can be cx, Cx, ^x, c-x, C-x, ^-x */
15728 case 'C':
15729 case '^':
15730 txt++;
15731 if(*txt == '-' && txt[1]) txt++;
15732 if (txt[1]) return 0;
15733 return C( *txt );
15736 /* ascii codes: must be three-digit decimal */
15737 if (*txt >= '0' && *txt <= '9') {
15738 uchar key = 0;
15739 int i;
15740 for(i = 0; i < 3; i++) {
15741 if(txt[i]<'0' || txt[i]>'9') return 0;
15742 key = 10 * key + txt[i]-'0';
15744 return key;
15747 return 0;
15750 /* returns the text for a one-byte encoding
15751 * must be shorter than a tab for proper formatting */
15752 char*
15753 key2txt(c, txt)
15754 char c;
15755 char* txt; /* sufficiently long buffer */
15757 if (c == ' ')
15758 sprintf(txt, "<space>");
15759 else if (c == '\033')
15760 sprintf(txt, "<esc>");
15761 else if (c == '\n')
15762 sprintf(txt, "<enter>");
15763 else if (ISCTRL(c))
15764 sprintf(txt, "^%c", UNCTRL(c));
15765 else if (ISMETA(c))
15766 sprintf(txt, "M-%c", UNMETA(c));
15767 else if (c >= 33 && c <= 126)
15768 sprintf(txt, "%c", c); /* regular keys: ! through ~ */
15769 else
15770 sprintf(txt, "A-%i", c); /* arbitrary ascii combinations */
15771 return txt;
15774 /* returns the text for a string of one-byte encodings */
15775 char*
15776 str2txt(s, txt)
15777 char* s;
15778 char* txt;
15780 char* buf = txt;
15782 while (*s) {
15783 (void) key2txt(*s, buf);
15784 buf = eos(buf);
15785 *buf = ' ';
15786 buf++;
15787 *buf = 0;
15788 s++;
15790 return txt;
15794 /* strips leading and trailing whitespace */
15795 char*
15796 stripspace(txt)
15797 char* txt;
15799 char* end;
15800 while (isspace(*txt)) txt++;
15801 end = eos(txt);
15802 while (--end >= txt && isspace(*end)) *end = 0;
15803 return txt;
15806 void
15807 parsebindings(bindings)
15808 /* closely follows parseoptions in options.c */
15809 char* bindings;
15811 char *bind;
15812 char key;
15813 struct binding_list_tab *newbinding = NULL;
15815 /* break off first binding from the rest; parse the rest */
15816 if ((bind = index(bindings, ',')) != 0) {
15817 *bind++ = 0;
15818 parsebindings(bind);
15821 /* parse a single binding: first split around : */
15822 if (! (bind = index(bindings, ':'))) return; /* it's not a binding */
15823 *bind++ = 0;
15825 /* read the key to be bound */
15826 key = txt2key(bindings);
15827 if (!key) {
15828 raw_printf("Bad binding %s.", bindings);
15829 wait_synch();
15830 return;
15833 /* JDS: crappy hack because wizard mode information
15834 * isn't read until _after_ key bindings are read,
15835 * and to change this would cause numerous side effects.
15836 * instead, I save a list of rebindings, which are later
15837 * bound. */
15838 bind = stripspace(bind);
15839 newbinding = (struct binding_list_tab *)alloc(sizeof(*newbinding));
15840 newbinding->key = key;
15841 newbinding->extcmd = (char *)alloc(strlen(bind)+1);
15842 strcpy(newbinding->extcmd, bind);;
15843 newbinding->next = bindinglist;
15844 bindinglist = newbinding;
15847 void
15848 parseautocomplete(autocomplete,condition)
15849 /* closesly follows parsebindings and parseoptions */
15850 char* autocomplete;
15851 boolean condition;
15853 register char *autoc;
15854 int i;
15856 /* break off first autocomplete from the rest; parse the rest */
15857 if ((autoc = index(autocomplete, ','))
15858 || (autoc = index(autocomplete, ':'))) {
15859 *autoc++ = 0;
15860 parseautocomplete(autoc, condition);
15863 /* strip leading and trailing white space */
15864 autocomplete = stripspace(autocomplete);
15866 if (!*autocomplete) return;
15868 /* take off negations */
15869 while (*autocomplete == '!') {
15870 /* unlike most options, a leading "no" might actually be a part of
15871 * the extended command. Thus you have to use ! */
15872 autocomplete++;
15873 condition = !condition;
15876 /* find and modify the extended command */
15877 /* JDS: could be much faster [O(log n) vs O(n)] if done differently */
15878 for (i=0; extcmdlist[i].ef_txt; i++) {
15879 if (strcmp(autocomplete, extcmdlist[i].ef_txt)) continue;
15880 extcmdlist[i].autocomplete = condition;
15881 return;
15884 #ifdef WIZARD
15885 /* do the exact same thing with the wizmode list */
15886 /* this is a hack because wizard-mode commands haven't been loaded yet when
15887 * this code is run. See "crappy hack" elsewhere. */
15888 for (i=0; debug_extcmdlist[i].ef_txt; i++) {
15889 if (strcmp(autocomplete, debug_extcmdlist[i].ef_txt)) continue;
15890 debug_extcmdlist[i].autocomplete = condition;
15891 return;
15893 #endif
15895 /* not a real extended command */
15896 raw_printf ("Bad autocomplete: invalid extended command '%s'.", autocomplete);
15897 wait_synch();
15900 char
15901 randomkey()
15903 static unsigned i = 0;
15904 char c;
15906 switch (rn2(16)) {
15907 default:
15908 c = '\033';
15909 break;
15910 case 0:
15911 c = '\n';
15912 break;
15913 case 1:
15914 case 2:
15915 case 3:
15916 case 4:
15917 c = (char) rn1('~' - ' ' + 1, ' ');
15918 break;
15919 case 5:
15920 c = (char) (rn2(2) ? '\t' : ' ');
15921 break;
15922 case 6:
15923 c = (char) rn1('z' - 'a' + 1, 'a');
15924 break;
15925 case 7:
15926 c = (char) rn1('Z' - 'A' + 1, 'A');
15927 break;
15928 case 9:
15929 c = '#';
15930 break;
15931 case 13:
15932 c = (char) rn1('9' - '0' + 1, '0');
15933 break;
15934 case 14:
15935 /* any char, but avoid '\0' because it's used for mouse click */
15936 c = (char) rnd(iflags.wc_eight_bit_input ? 255 : 127);
15937 break;
15940 return c;
15943 void
15944 rhack(cmd)
15945 register char *cmd;
15947 boolean do_walk, do_rush, prefix_seen, bad_command,
15948 firsttime = (cmd == 0);
15950 iflags.menu_requested = FALSE;
15951 #ifdef SAFERHANGUP
15952 if (program_state.done_hup)
15953 end_of_input();
15954 #endif
15955 if (firsttime) {
15956 flags.nopick = 0;
15957 cmd = parse();
15960 if (*cmd && (LagBugEffect || u.uprops[LAG_BUG].extrinsic || have_lagstone()) && !rn2(LagEffectXtra ? 2 : 3) ) {
15961 flags.move = FALSE;
15962 return;
15966 /* Autopilot means your char does random things depending on your contamination --Amy */
15967 if (*cmd && (AutopilotEffect || u.uprops[AUTOPILOT_EFFECT].extrinsic || (uarmf && uarmf->oartifact == ART_CLAUDIA_S_SELF_WILL) || have_autopilotstone() || Race_if(PM_RELEASIER) || (uarmf && uarmf->oartifact == ART_ARABELLA_S_GIRL_KICK) || (uarmf && uarmf->oartifact == ART_PRADA_S_DEVIL_WEAR) ) ) {
15968 int autopilotchance = u.contamination;
15969 if (isevilvariant && (autopilotchance > 900)) autopilotchance = 900;
15970 else if (!isevilvariant && (autopilotchance > 500)) autopilotchance = 500;
15972 if (u.contamination > 600 && !rn2(100)) {
15973 pline("Client %s sent a bogus command packet.", playeraliasname);
15974 if (flags.moreforced && !MessagesSuppressed) display_nhwindow(WIN_MESSAGE, TRUE); /* --More-- */
15975 if (isevilvariant) dosave();
15978 if (u.contamination > 1000 && !rn2(100)) {
15979 pline("Client %s sent an unreadable command packet.", playeraliasname);
15980 if (flags.moreforced && !MessagesSuppressed) display_nhwindow(WIN_MESSAGE, TRUE); /* --More-- */
15981 if (isevilvariant) done(QUIT);
15984 /* always at least 1% chance of having the autopilot activate --Amy */
15985 if ((rn2(1000) < autopilotchance) || !rn2(100)) {
15987 if (Race_if(PM_RELEASIER)) {
15988 switch (rnd(6)) {
15989 case 1: verbalize("Bo!"); break;
15990 case 2: verbalize("Rueue!"); break;
15991 case 3: verbalize("Kjear!"); break;
15992 case 4: verbalize("Oh-dey!"); break;
15993 case 5: verbalize("Aeaeaeaeaeaeaeaeaeaeaeh!"); break;
15994 case 6: verbalize("Ah-dubberdubberdubberdubberdubber!"); break;
15998 if (rn2(10)) {
15999 u.dx = !rn2(3) ? -1 : !rn2(2) ? 0 : 1;
16000 u.dy = !rn2(3) ? -1 : !rn2(2) ? 0 : 1;
16001 do_walk = TRUE;
16002 *cmd = ' ';
16003 goto walkwalkwalk;
16004 } else { switch (rnd(34)) {
16005 case 1:
16006 *cmd = 'a'; break;
16007 case 2:
16008 *cmd = 'A'; break;
16009 case 3:
16010 *cmd = 'c'; break;
16011 case 4:
16012 *cmd = 'd'; break;
16013 case 5:
16014 *cmd = 'e'; break;
16015 case 6:
16016 *cmd = 'E'; break;
16017 case 7:
16018 *cmd = 'f'; break;
16019 case 8:
16020 *cmd = 'F'; break;
16021 case 9:
16022 *cmd = 'i'; break;
16023 case 10:
16024 *cmd = 'j'; break;
16025 case 11:
16026 *cmd = 'k'; break;
16027 case 12:
16028 *cmd = 'l'; break;
16029 case 13:
16030 *cmd = 'o'; break;
16031 case 14:
16032 *cmd = 'p'; break;
16033 case 15:
16034 *cmd = 'P'; break;
16035 case 16:
16036 *cmd = 'q'; break;
16037 case 17:
16038 *cmd = 'Q'; break;
16039 case 18:
16040 *cmd = 'r'; break;
16041 case 19:
16042 *cmd = 'R'; break;
16043 case 20:
16044 *cmd = 's'; break;
16045 case 21:
16046 *cmd = 't'; break;
16047 case 22:
16048 *cmd = 'T'; break;
16049 case 23:
16050 *cmd = 'u'; break;
16051 case 24:
16052 *cmd = 'v'; break;
16053 case 25:
16054 *cmd = 'w'; break;
16055 case 26:
16056 *cmd = 'W'; break;
16057 case 27:
16058 *cmd = 'x'; break;
16059 case 28:
16060 *cmd = '<'; break;
16061 case 29:
16062 *cmd = '>'; break;
16063 case 30:
16064 *cmd = '.'; break;
16065 case 31:
16066 *cmd = ','; break;
16067 case 32:
16068 *cmd = ':'; break;
16069 case 33:
16070 *cmd = ';'; break;
16076 if (*cmd && !u.hangupcheat) {
16077 u.hangupcheat = 1;
16080 if (*cmd == DOESCAPE) { /* <esc> key - user might be panicking */
16081 /* Bring up the menu */
16082 if (multi || !flags.menu_on_esc || !(domenusystem())) {
16083 flags.move = FALSE;
16084 multi = 0;
16086 return;
16087 #if 0
16088 flags.move = FALSE;
16089 return;
16090 #endif
16092 if (*cmd == DOAGAIN && !in_doagain && saveq[0]) {
16093 in_doagain = TRUE;
16094 stail = 0;
16095 rhack((char *)0); /* read and execute command */
16096 in_doagain = FALSE;
16097 return;
16099 /* Special case of *cmd == ' ' handled better below */
16100 if(!*cmd || *cmd == (char)0377) {
16101 nhbell();
16102 flags.move = FALSE;
16103 return; /* probably we just had an interrupt */
16105 if (iflags.num_pad && iflags.num_pad_mode == 1) {
16106 /* This handles very old inconsistent DOS/Windows behaviour
16107 * in a new way: earlier, the keyboard handler mapped these,
16108 * which caused counts to be strange when entered from the
16109 * number pad. Now do not map them until here.
16111 switch (*cmd) {
16112 case '5': *cmd = 'g'; break;
16113 case M('5'): *cmd = 'G'; break;
16114 case M('0'): *cmd = 'I'; break;
16117 /* handle most movement commands */
16118 do_walk = do_rush = prefix_seen = FALSE;
16119 flags.travel = iflags.travel1 = 0;
16120 if (*cmd == DORUSH) {
16122 if (TronEffectIsActive || SpellColorPink) {
16124 pline("Some sinister force is preventing you from using the rush command.");
16125 if (FunnyHallu) pline("Could this be the work of Arabella?");
16126 if (flags.moreforced && !MessagesSuppressed) display_nhwindow(WIN_MESSAGE, TRUE); /* --More-- */
16127 flags.move = FALSE;
16128 return;
16132 if (movecmd(cmd[1])) {
16133 flags.run = 2;
16134 do_rush = TRUE;
16135 } else
16136 prefix_seen = TRUE;
16137 } else if ( (*cmd == '5' && iflags.num_pad)
16138 || *cmd == DORUN) {
16140 if (TronEffectIsActive || SpellColorPink) {
16142 pline("Some sinister force is preventing you from using the run command.");
16143 if (FunnyHallu) pline("Could this be the work of Arabella?");
16144 if (flags.moreforced && !MessagesSuppressed) display_nhwindow(WIN_MESSAGE, TRUE); /* --More-- */
16145 flags.move = FALSE;
16146 return;
16150 if (movecmd(lowc(cmd[1]))) {
16151 flags.run = 3;
16152 do_rush = TRUE;
16153 } else
16154 prefix_seen = TRUE;
16155 } else if ( (*cmd == '-' && iflags.num_pad)
16156 || *cmd == DOFORCEFIGHT) {
16157 /* Effects of movement commands and invisible monsters:
16158 * m: always move onto space (even if 'I' remembered)
16159 * F: always attack space (even if 'I' not remembered)
16160 * normal movement: attack if 'I', move otherwise
16162 if (movecmd(cmd[1])) {
16163 flags.forcefight = 1;
16164 do_walk = TRUE;
16165 } else
16166 prefix_seen = TRUE;
16167 } else if (*cmd == DONOPICKUP) {
16168 if (movecmd(cmd[1]) || u.dz) {
16169 flags.run = 0;
16170 flags.nopick = 1;
16171 if (!u.dz) do_walk = TRUE;
16172 else cmd[0] = cmd[1]; /* "m<" or "m>" */
16173 } else
16174 prefix_seen = TRUE;
16175 } else if (*cmd == DORUN_NOPICKUP) {
16177 if (TronEffectIsActive || SpellColorPink) {
16179 pline("Some sinister force is preventing you from using the run-no-pickup command.");
16180 if (FunnyHallu) pline("Could this be the work of Arabella?");
16181 if (flags.moreforced && !MessagesSuppressed) display_nhwindow(WIN_MESSAGE, TRUE); /* --More-- */
16182 flags.move = FALSE;
16183 return;
16187 if (movecmd(lowc(cmd[1]))) {
16188 flags.run = 1;
16189 flags.nopick = 1;
16190 do_rush = TRUE;
16191 } else
16192 prefix_seen = TRUE;
16193 } else if (*cmd == '0' && iflags.num_pad) {
16194 (void)ddoinv(); /* a convenience borrowed from the PC */
16195 flags.move = FALSE;
16196 multi = 0;
16197 } else if (*cmd == CMD_TRAVEL && iflags.travelcmd) {
16198 flags.travel = 1;
16199 iflags.travel1 = 1;
16200 flags.run = 8;
16201 flags.nopick = 1;
16202 do_rush = TRUE;
16203 } else {
16204 if (movecmd(*cmd)) { /* ordinary movement */
16205 do_walk = TRUE;
16206 } else if (movecmd(iflags.num_pad ?
16207 UNMETA(*cmd) : lowc(*cmd))) {
16209 if (TronEffectIsActive || SpellColorPink) {
16211 pline("Some sinister force is preventing you from using the meta-run command.");
16212 if (FunnyHallu) pline("Could this be the work of Arabella?");
16213 if (flags.moreforced && !MessagesSuppressed) display_nhwindow(WIN_MESSAGE, TRUE); /* --More-- */
16214 flags.move = FALSE;
16215 return;
16219 flags.run = 1;
16220 do_rush = TRUE;
16221 } else if (movecmd(UNCTRL(*cmd))) {
16223 if (TronEffectIsActive || SpellColorPink) {
16225 pline("Some sinister force is preventing you from using whatever weird run command this is.");
16226 if (FunnyHallu) pline("Could this be the work of Arabella?");
16227 if (flags.moreforced && !MessagesSuppressed) display_nhwindow(WIN_MESSAGE, TRUE); /* --More-- */
16228 flags.move = FALSE;
16229 return;
16233 flags.run = 3;
16234 do_rush = TRUE;
16238 /* some special prefix handling */
16239 /* overload 'm' prefix for ',' to mean "request a menu" */
16240 if (prefix_seen && cmd[1] == ',') {
16241 iflags.menu_requested = TRUE;
16242 ++cmd;
16245 walkwalkwalk:
16246 if (do_walk) {
16247 if (multi) flags.mv = TRUE;
16248 domove();
16249 flags.forcefight = 0;
16250 return;
16251 } else if (do_rush) {
16252 if (firsttime) {
16253 if (!multi) multi = max(COLNO,ROWNO);
16254 u.last_str_turn = 0;
16256 flags.mv = TRUE;
16257 domove();
16258 return;
16259 } else if (prefix_seen && cmd[1] == DOESCAPE) { /* <prefix><escape> */
16260 /* don't report "unknown command" for change of heart... */
16261 bad_command = FALSE;
16262 } else if (*cmd == ' ' && !flags.rest_on_space) {
16263 bad_command = TRUE; /* skip cmdlist[] loop */
16264 /* handle bound commands */
16265 } else {
16266 const struct key_tab *keytab = &cmdlist[(unsigned char)*cmd];
16267 if (keytab->bind_cmd != NULL) {
16268 struct ext_func_tab *extcmd = keytab->bind_cmd;
16269 int res, (*func)(void);
16270 if (u.uburied && !extcmd->can_if_buried) {
16271 You_cant("do that while you are buried!");
16272 res = 0;
16273 } else {
16274 func = extcmd->ef_funct;
16275 if (extcmd->f_text && !occupation && multi)
16276 set_occupation(func, extcmd->f_text, multi);
16277 res = (*func)(); /* perform the command */
16279 if (!res) {
16280 flags.move = FALSE;
16281 multi = 0;
16283 return;
16285 /* if we reach here, cmd wasn't found in cmdlist[] */
16286 bad_command = TRUE;
16288 if (bad_command) {
16289 char expcmd[10];
16290 register char *cp = expcmd;
16292 while (*cmd && (int)(cp - expcmd) < (int)(sizeof expcmd - 3)) {
16293 if (*cmd >= 040 && *cmd < 0177) {
16294 *cp++ = *cmd++;
16295 } else if (*cmd & 0200) {
16296 *cp++ = 'M';
16297 *cp++ = '-';
16298 *cp++ = *cmd++ &= ~0200;
16299 } else {
16300 *cp++ = '^';
16301 *cp++ = *cmd++ ^ 0100;
16304 *cp = '\0';
16305 if (!prefix_seen || !iflags.cmdassist ||
16306 !help_dir(0, "Invalid direction key!"))
16307 Norep("Unknown command '%s'.", expcmd);
16309 /* I've seen SO many newbies get stuck on trying to enable the number pad on the server; sadly, we can't make
16310 * it the default, because some players don't have a number pad. On the other hand, not everyone has hjklyubn
16311 * keys on their keyboard either :P and therefore it should be possible for them to switch the number pad on;
16312 * sadly, few players ever take the in-game advice and join the IRC, so we need in-game advice too...
16313 * and even that is often skipped by impatient players :( --Amy */
16315 /* Elronnd snuck in a commit that adds a way to disable this message, even though I wanted to code that myself.
16316 * The option he added will stay, although he apparently didn't know that 'no' is used as a prefix to disable
16317 * an option, so the option can't be named 'no_numpad_message' as he originally intended. But I also added a
16318 * way to either disable the message in-game or, even better, a prompt to turn the number pad on or off!
16319 * Because we really can't expect the average joe to fiddle around with complicated compound options that 99%
16320 * of them don't even find because they get stuck looking for it between the "null" and "perm_invent" boolean
16321 * options (no joke, I've seen it happen so many times). And even if they do find the number_pad option, they
16322 * probably don't know how to change it and end up escaping out of the options menu, which is
16323 * never a good idea because it discards all changes you made. So yeah. */
16325 /* I also made the message display at most 5 times per game to make it not too intrusive --Amy
16326 * and only if at most 50 turns have passed; if you've played for more than that, you probably know how to
16327 * set up the controls properly because you'll probably have moved 50 times by that time :-P */
16329 if (moves < 50 && !(iflags.num_pad) && iflags.numpadmessage) {
16330 if (yn("Invalid command, possibly you tried to use the number pad to move? You might want to turn on the number pad, which is done by opening the options with shift-O and navigating to the number_pad entry (it's not between null and perm_invent, you have to scroll further down to the compound options). Toggle that with the appropriate letter key and hit spacebar (not escape!) until the number_pad dialog comes up, and set it to 2. Alternatively, you can also turn on the number pad by adding this line to your options file: OPTIONS=number_pad:2 (probably requires you to start a new game). (Press y to disable this message)") == 'y') {
16331 iflags.numpadmessage = FALSE;
16332 pline("In order to turn the message off for all subsequent games too, add OPTIONS=nonumpadmessage to your configuration file.");
16333 } else {
16334 if (yn("Turn the number pad on?") == 'y') {
16335 iflags.num_pad = 2;
16336 iflags.num_pad_mode = 1;
16337 iflags.numpadmessage = FALSE;
16338 pline("Number pad is ON now. You should add the following line to your configuration file to have it be turned on by default: OPTIONS=number_pad:2");
16341 if (u.annoyingmessages++ > 5) iflags.numpadmessage = FALSE;
16343 else if (moves < 50 && iflags.num_pad && iflags.numpadmessage) {
16344 if (yn("Invalid command, possibly you tried to use vikeys to move? The number pad is currently on. If for some reason you want to turn it off and use vikeys instead, open the options with shift-O and navigate to the number_pad entry (it's not between null and perm_invent, you have to scroll further down to the compound options). Toggle that with the appropriate letter key and hit spacebar (not escape!) until the number_pad dialog comes up, and set it to 0. Alternatively, you can also turn off the number pad by adding this line to your options file: OPTIONS=number_pad:0 (probably requires you to start a new game). (Press y to disable this message)") == 'y') {
16345 iflags.numpadmessage = FALSE;
16346 pline("In order to turn the message off for all subsequent games too, add OPTIONS=nonumpadmessage to your configuration file.");
16347 } else {
16348 if (yn("Turn the number pad off?") == 'y') {
16349 iflags.num_pad = 0;
16350 iflags.num_pad_mode = 0;
16351 iflags.numpadmessage = FALSE;
16352 pline("Number pad is OFF now. You should add the following line to your configuration file to have it be turned on by default: OPTIONS=number_pad:0");
16355 if (u.annoyingmessages++ > 5) iflags.numpadmessage = FALSE;
16359 /* didn't move */
16360 flags.move = FALSE;
16361 multi = 0;
16362 return;
16366 xytod(x, y) /* convert an x,y pair into a direction code */
16367 schar x, y;
16369 register int dd;
16371 for(dd = 0; dd < 8; dd++)
16372 if(x == xdir[dd] && y == ydir[dd]) return dd;
16374 return -1;
16377 void
16378 dtoxy(cc,dd) /* convert a direction code into an x,y pair */
16379 coord *cc;
16380 register int dd;
16382 cc->x = xdir[dd];
16383 cc->y = ydir[dd];
16384 return;
16388 movecmd(sym) /* also sets u.dz, but returns false for <> */
16389 char sym;
16391 register const char *dp;
16392 register const char *sdp;
16393 if(iflags.num_pad) sdp = ndir; else sdp = sdir; /* DICE workaround */
16395 u.dz = 0;
16396 dp = index(sdp, sym);
16397 if (!dp || !*dp)
16398 return 0;
16399 u.dx = xdir[dp-sdp];
16400 u.dy = ydir[dp-sdp];
16401 u.dz = zdir[dp-sdp];
16403 if (u.totter || u.uprops[TOTTER_EFFECT].extrinsic || TotterTrapEffect || have_directionswapstone() || autismweaponcheck(ART_HOW_IS_THE_CAR_ROWED) || (uimplant && uimplant->oartifact == ART_CORTEX_COPROCESSOR) ) {
16405 u.dx = -u.dx;
16406 u.dy = -u.dy;
16410 if (ClockwiseSpinBug || u.uprops[CLOCKWISE_SPIN_BUG].extrinsic || have_clockwisestone() ) {
16412 if (u.dx == 1 && !u.dy) {
16413 u.dy = 1;
16414 } else if (u.dx == 1 && u.dy == 1) {
16415 u.dx = 0;
16416 } else if (!u.dx && u.dy == -1) {
16417 u.dx = 1;
16418 } else if (u.dx == -1 && u.dy == -1) {
16419 u.dx = 0;
16420 } else if (u.dx == -1 && !u.dy) {
16421 u.dy = -1;
16422 } else if (u.dx == -1 && u.dy == 1) {
16423 u.dy = 0;
16424 } else if (!u.dx && u.dy == 1) {
16425 u.dx = -1;
16426 } else if (u.dx == 1 && u.dy == -1) {
16427 u.dy = 0;
16432 if (CounterclockwiseSpin || u.uprops[COUNTERCLOCKWISE_SPIN_BUG].extrinsic || have_counterclockwisestone() ) {
16434 if (u.dx == 1 && !u.dy) {
16435 u.dx = 0; u.dy = -1;
16436 } else if (u.dx == 1 && u.dy == 1) {
16437 u.dy = -1;
16438 } else if (!u.dx && u.dy == -1) {
16439 u.dx = -1; u.dy = 0;
16440 } else if (u.dx == -1 && u.dy == -1) {
16441 u.dy = 1;
16442 } else if (u.dx == -1 && !u.dy) {
16443 u.dx = 0; u.dy = 1;
16444 } else if (u.dx == -1 && u.dy == 1) {
16445 u.dx = 1;
16446 } else if (!u.dx && u.dy == 1) {
16447 u.dx = 1; u.dy = 0;
16448 } else if (u.dx == 1 && u.dy == -1) {
16449 u.dx = -1;
16454 if ((uarmh && itemhasappearance(uarmh, APP_HARDCORE_CLOTH)) || Race_if(PM_SLYER_ALIEN)) {
16455 boolean directionallowed = TRUE;
16457 switch (u.trontrapdirection) {
16458 case 1: /* east */
16459 if (u.dx == -1) directionallowed = FALSE;
16460 break;
16461 case 2: /* southeast */
16462 if ((u.dx == -1 || u.dy == -1) && u.dx != 1 && u.dy != 1) directionallowed = FALSE;
16463 break;
16464 case 3: /* north */
16465 if (u.dy == 1) directionallowed = FALSE;
16466 break;
16467 case 4: /* northwest */
16468 if ((u.dx == 1 || u.dy == 1) && u.dx != -1 && u.dy != -1) directionallowed = FALSE;
16469 break;
16470 case 5: /* west */
16471 if (u.dx == 1) directionallowed = FALSE;
16472 break;
16473 case 6: /* southwest */
16474 if ((u.dx == 1 || u.dy == -1) && u.dx != -1 && u.dy != 1) directionallowed = FALSE;
16475 break;
16476 case 7: /* south */
16477 if (u.dy == -1) directionallowed = FALSE;
16478 break;
16479 case 8: /* northeast */
16480 if ((u.dx == -1 || u.dy == 1) && u.dx != 1 && u.dy != -1) directionallowed = FALSE;
16481 break;
16484 if (!directionallowed) {
16485 u.dx = u.dy = 0;
16486 Norep("Impossible move, you're facing the wrong direction!");
16487 return 0;
16492 if (SpellColorPink && ((u.pinkspelldirection == 1 && u.dx == 1 && !u.dy) || (u.pinkspelldirection == 2 && u.dx == 1 && u.dy == 1) || (u.pinkspelldirection == 3 && !u.dx && u.dy == -1) || (u.pinkspelldirection == 4 && u.dx == -1 && u.dy == -1) || (u.pinkspelldirection == 5 && u.dx == -1 && !u.dy) || (u.pinkspelldirection == 6 && u.dx == -1 && u.dy == 1) || (u.pinkspelldirection == 7 && !u.dx && u.dy == 1) || (u.pinkspelldirection == 8 && u.dx == 1 && u.dy == -1) ) ) {
16493 u.dx = u.dy = 0;
16494 Norep("You can't use that direction!");
16495 return 0;
16499 if ((TronEffect || u.uprops[TRON_EFFECT].extrinsic || have_tronstone()) && ((u.trontrapdirection == 1 && u.dx == 1 && !u.dy) || (u.trontrapdirection == 2 && u.dx == 1 && u.dy == 1) || (u.trontrapdirection == 3 && !u.dx && u.dy == -1) || (u.trontrapdirection == 4 && u.dx == -1 && u.dy == -1) || (u.trontrapdirection == 5 && u.dx == -1 && !u.dy) || (u.trontrapdirection == 6 && u.dx == -1 && u.dy == 1) || (u.trontrapdirection == 7 && !u.dx && u.dy == 1) || (u.trontrapdirection == 8 && u.dx == 1 && u.dy == -1) ) ) {
16500 u.dx = u.dy = 0;
16501 Norep("You can't use the same direction twice in a row!");
16502 return 0;
16506 if (u.dx && u.dy && (BishopGridbug || u.uprops[BISHOP_GRIDBUG].extrinsic || have_bishopstone() || (uarmg && uarmg->oartifact == ART_LINE_CAN_PLAY_BY_YOURSELF) || autismweaponcheck(ART_KILLER_PIANO) || isgridbug(youmonst.data) || (Race_if(PM_WEAPON_BUG) && !Upolyd) ) ) {
16507 u.dx = u.dy = 0;
16508 return 0;
16510 return !u.dz;
16514 * uses getdir() but unlike getdir() it specifically
16515 * produces coordinates using the direction from getdir()
16516 * and verifies that those coordinates are ok.
16518 * If the call to getdir() returns 0, Never_mind is displayed.
16519 * If the resulting coordinates are not okay, emsg is displayed.
16521 * Returns non-zero if coordinates in cc are valid.
16523 int get_adjacent_loc(prompt,emsg,x,y,cc)
16524 const char *prompt, *emsg;
16525 xchar x,y;
16526 coord *cc;
16528 xchar new_x, new_y;
16529 if (!getdir(prompt)) {
16530 pline("%s", Never_mind);
16531 if (FailureEffects || u.uprops[FAILURE_EFFECTS].extrinsic || have_failurestone()) {
16532 pline("Oh wait, actually I do mind...");
16533 badeffect();
16535 return 0;
16537 new_x = x + u.dx;
16538 new_y = y + u.dy;
16539 if (cc && isok(new_x,new_y)) {
16540 cc->x = new_x;
16541 cc->y = new_y;
16542 } else {
16543 if (emsg) pline("%s", emsg);
16544 return 0;
16546 return 1;
16550 getdir(s)
16551 const char *s;
16553 char dirsym;
16554 /* WAC add dirsymbols to generic prompt */
16555 char buf[BUFSZ];
16557 /* choicelessness by Amy; it would be far too evil to unconditionally prevent you from choosing... */
16558 if (Choicelessness || u.uprops[CHOICELESSNESS].extrinsic || have_choicelessstone() || autismweaponcheck(ART_FOOK_THE_OBSTACLES) || (uarmc && uarmc->oartifact == ART_NUTKNU_KOLAS) || autismweaponcheck(ART_SAT___TRASHING) ) {
16559 int choicelesschance;
16560 choicelesschance = 20 + (u.uen * 80 / u.uenmax);
16561 if (choicelesschance < 20) choicelesschance = 20;
16562 if (choicelesschance > 80) choicelesschance = 80;
16563 if (choicelesschance > rn2(100)) {
16564 u.dx = u.dy = u.dz = 0;
16565 confdir();
16566 return 1;
16570 sprintf(buf, "In what direction? [%s]",
16571 (iflags.num_pad ? ndir : sdir));
16573 if(in_doagain || *readchar_queue)
16574 dirsym = readchar();
16575 else do {
16576 dirsym = yn_function ((s && *s != '^') ? s : buf, (char *)0, '\0');
16577 } while (!movecmd(dirsym) && !index(quitchars, dirsym)
16578 && dirsym == '.' && dirsym == 's' && !u.dz);
16579 savech(dirsym);
16580 if(dirsym == '.' || dirsym == 's')
16581 u.dx = u.dy = u.dz = 0;
16582 else if(!movecmd(dirsym) && !u.dz) {
16583 boolean did_help = FALSE;
16584 if(!index(quitchars, dirsym)) {
16585 if (iflags.cmdassist) {
16586 did_help = help_dir((s && *s == '^') ? dirsym : 0,
16587 "Invalid direction key!");
16589 if (!did_help) pline("What a strange direction!");
16591 return 0;
16593 if ((Stunned && !rn2(issoviet ? 1 : StrongStun_resist ? 20 : Stun_resist ? 8 : 2)) || (Confusion && !rn2(issoviet ? 2 : StrongConf_resist ? 200 : Conf_resist ? 40 : 8))) confdir();
16594 return 1;
16597 STATIC_OVL boolean
16598 help_dir(sym, msg)
16599 char sym;
16600 const char *msg;
16602 char ctrl;
16603 winid win;
16604 static const char wiz_only_list[] = "EFGIOVW";
16605 char buf[BUFSZ], buf2[BUFSZ], *expln;
16607 win = create_nhwindow(NHW_TEXT);
16608 if (!win) return FALSE;
16609 if (msg) {
16610 sprintf(buf, "cmdassist: %s", msg);
16611 putstr(win, 0, buf);
16612 putstr(win, 0, "");
16614 if (letter(sym)) {
16615 sym = highc(sym);
16616 ctrl = (sym - 'A') + 1;
16617 if ((expln = dowhatdoes_core(ctrl, buf2))
16618 && (!index(wiz_only_list, sym)
16619 #ifdef WIZARD
16620 || wizard
16621 #endif
16622 )) {
16623 sprintf(buf, "Are you trying to use ^%c%s?", sym,
16624 index(wiz_only_list, sym) ? "" :
16625 " as specified in the Guidebook");
16626 putstr(win, 0, buf);
16627 putstr(win, 0, "");
16628 putstr(win, 0, expln);
16629 putstr(win, 0, "");
16630 putstr(win, 0, "To use that command, you press");
16631 sprintf(buf,
16632 "the <Ctrl> key, and the <%c> key at the same time.", sym);
16633 putstr(win, 0, buf);
16634 putstr(win, 0, "");
16637 if (iflags.num_pad && (BishopGridbug || u.uprops[BISHOP_GRIDBUG].extrinsic || have_bishopstone() || (uarmg && uarmg->oartifact == ART_LINE_CAN_PLAY_BY_YOURSELF) || autismweaponcheck(ART_KILLER_PIANO) || isgridbug(youmonst.data) || (Race_if(PM_WEAPON_BUG) && !Upolyd))) {
16638 putstr(win, 0, "Valid direction keys in your current form (with number_pad on) are:");
16639 putstr(win, 0, " 8 ");
16640 putstr(win, 0, " | ");
16641 putstr(win, 0, " 4- . -6");
16642 putstr(win, 0, " | ");
16643 putstr(win, 0, " 2 ");
16644 } else if (BishopGridbug || u.uprops[BISHOP_GRIDBUG].extrinsic || have_bishopstone() || (uarmg && uarmg->oartifact == ART_LINE_CAN_PLAY_BY_YOURSELF) || autismweaponcheck(ART_KILLER_PIANO) || isgridbug(youmonst.data) || (Race_if(PM_WEAPON_BUG) && !Upolyd)) {
16645 putstr(win, 0, "Valid direction keys in your current form are:");
16646 putstr(win, 0, " k ");
16647 putstr(win, 0, " | ");
16648 putstr(win, 0, " h- . -l");
16649 putstr(win, 0, " | ");
16650 putstr(win, 0, " j ");
16651 } else if (iflags.num_pad) {
16652 putstr(win, 0, "Valid direction keys (with number_pad on) are:");
16653 putstr(win, 0, " 7 8 9");
16654 putstr(win, 0, " \\ | / ");
16655 putstr(win, 0, " 4- . -6");
16656 putstr(win, 0, " / | \\ ");
16657 putstr(win, 0, " 1 2 3");
16658 } else {
16659 putstr(win, 0, "Valid direction keys are:");
16660 putstr(win, 0, " y k u");
16661 putstr(win, 0, " \\ | / ");
16662 putstr(win, 0, " h- . -l");
16663 putstr(win, 0, " / | \\ ");
16664 putstr(win, 0, " b j n");
16666 putstr(win, 0, "");
16667 putstr(win, 0, " < up");
16668 putstr(win, 0, " > down");
16669 putstr(win, 0, " . direct at yourself");
16670 putstr(win, 0, "");
16671 putstr(win, 0, "(Suppress this message with !cmdassist in config file.)");
16672 putstr(win, 0, "Hint: Shift-O opens the options. To change between");
16673 putstr(win, 0, "vi-like keys and the number pad, use the number_pad option.");
16674 putstr(win, 0, "");
16675 putstr(win, 0, "Add OPTIONS=number_pad:2 to your options file to turn the number pad on.");
16676 putstr(win, 0, "Add OPTIONS=number_pad:0 to your options file to turn the number pad off.");
16677 putstr(win, 0, "(Editing the options file might not take effect until you start a new game)");
16678 display_nhwindow(win, FALSE);
16679 destroy_nhwindow(win);
16680 return TRUE;
16683 #endif /* OVL1 */
16684 #ifdef OVLB
16686 void
16687 confdir()
16689 register int x = (BishopGridbug || u.uprops[BISHOP_GRIDBUG].extrinsic || have_bishopstone() || (uarmg && uarmg->oartifact == ART_LINE_CAN_PLAY_BY_YOURSELF) || autismweaponcheck(ART_KILLER_PIANO) || isgridbug(youmonst.data) || (Race_if(PM_WEAPON_BUG) && !Upolyd)) ? 2*rn2(4) : rn2(8);
16690 u.dx = xdir[x];
16691 u.dy = ydir[x];
16692 return;
16695 #endif /* OVLB */
16696 #ifdef OVL0
16699 isok(x,y)
16700 register int x, y;
16702 /* x corresponds to curx, so x==1 is the first column. Ach. %% */
16703 return x >= 1 && x <= COLNO-1 && y >= 0 && y <= ROWNO-1;
16706 static NEARDATA int last_multi;
16709 * convert a MAP window position into a movecmd
16711 const char *
16712 click_to_cmd(x, y, mod)
16713 int x, y, mod;
16715 int dir;
16716 static char cmd[4];
16717 cmd[1]=0;
16719 if (!youmonst.data) goto quaakskip;
16721 if (MenuIsBugged) {
16722 pline("The travel command is currently unavailable!");
16723 if (flags.moreforced && !MessagesSuppressed) display_nhwindow(WIN_MESSAGE, TRUE); /* --More-- */
16724 cmd[0] = ' ';
16725 return cmd;
16728 if (uarmg && itemhasappearance(uarmg, APP_RACER_GLOVES) ) {
16729 pline("Your gloves prevent quicktravel!");
16730 if (flags.moreforced && !MessagesSuppressed) display_nhwindow(WIN_MESSAGE, TRUE); /* --More-- */
16731 cmd[0] = ' ';
16732 return cmd;
16735 if (u.uprops[TOTTER_EFFECT].extrinsic || TotterTrapEffect || have_directionswapstone() || autismweaponcheck(ART_HOW_IS_THE_CAR_ROWED) || (uimplant && uimplant->oartifact == ART_CORTEX_COPROCESSOR) || u.totter || ClockwiseSpinBug || u.uprops[CLOCKWISE_SPIN_BUG].extrinsic || have_clockwisestone() || CounterclockwiseSpin || u.uprops[COUNTERCLOCKWISE_SPIN_BUG].extrinsic || have_counterclockwisestone() || TronEffect || u.uprops[TRON_EFFECT].extrinsic || have_tronstone() || SpellColorPink) {
16736 pline("A sinister force prevents you from quicktraveling!");
16737 if (FunnyHallu) pline("Could this be the work of Arabella?");
16738 if (flags.moreforced && !MessagesSuppressed) display_nhwindow(WIN_MESSAGE, TRUE); /* --More-- */
16739 cmd[0] = ' ';
16740 return cmd;
16744 if (BishopGridbug || u.uprops[BISHOP_GRIDBUG].extrinsic || have_bishopstone() || (uarmg && uarmg->oartifact == ART_LINE_CAN_PLAY_BY_YOURSELF) || autismweaponcheck(ART_KILLER_PIANO) || isgridbug(youmonst.data) || (Race_if(PM_WEAPON_BUG) && !Upolyd)) {
16746 pline("Due to your movement restriction, you cannot quicktravel!");
16747 if (flags.moreforced && !MessagesSuppressed) display_nhwindow(WIN_MESSAGE, TRUE); /* --More-- */
16748 cmd[0] = ' ';
16749 return cmd;
16753 quaakskip:
16755 x -= u.ux;
16756 y -= u.uy;
16758 if (iflags.travelcmd) {
16759 if (abs(x) <= 1 && abs(y) <= 1 ) {
16760 x = sgn(x), y = sgn(y);
16761 } else {
16762 u.tx = u.ux+x;
16763 u.ty = u.uy+y;
16764 cmd[0] = CMD_TRAVEL;
16765 return cmd;
16768 if(x == 0 && y == 0) {
16769 /* here */
16770 if(IS_FOUNTAIN(levl[u.ux][u.uy].typ) || IS_SINK(levl[u.ux][u.uy].typ)) {
16771 cmd[0]=mod == CLICK_1 ? 'q' : M('d');
16772 return cmd;
16773 } else if(IS_THRONE(levl[u.ux][u.uy].typ)) {
16774 cmd[0]=M('s');
16775 return cmd;
16776 } else if((u.ux == xupstair && u.uy == yupstair)
16777 || (u.ux == sstairs.sx && u.uy == sstairs.sy && sstairs.up)
16778 || (u.ux == xupladder && u.uy == yupladder)) {
16779 return "<";
16780 } else if((u.ux == xdnstair && u.uy == ydnstair)
16781 || (u.ux == sstairs.sx && u.uy == sstairs.sy && !sstairs.up)
16782 || (u.ux == xdnladder && u.uy == ydnladder)) {
16783 return ">";
16784 } else if(OBJ_AT(u.ux, u.uy)) {
16785 cmd[0] = Is_container(level.objects[u.ux][u.uy]) ? M('l') : ',';
16786 return cmd;
16787 } else {
16788 return "."; /* just rest */
16792 /* directional commands */
16794 dir = xytod(x, y);
16796 if (!m_at(u.ux+x, u.uy+y) && !test_move(u.ux, u.uy, x, y, TEST_MOVE)) {
16797 cmd[1] = (iflags.num_pad ? ndir[dir] : sdir[dir]);
16798 cmd[2] = 0;
16799 if (IS_DOOR(levl[u.ux+x][u.uy+y].typ)) {
16800 /* slight assistance to the player: choose kick/open for them */
16801 if (levl[u.ux+x][u.uy+y].doormask & D_LOCKED) {
16802 cmd[0] = C('d');
16803 return cmd;
16805 if (levl[u.ux+x][u.uy+y].doormask & D_CLOSED) {
16806 cmd[0] = 'o';
16807 return cmd;
16810 if (levl[u.ux+x][u.uy+y].typ <= SCORR) {
16811 cmd[0] = 's';
16812 cmd[1] = 0;
16813 return cmd;
16816 } else {
16817 /* convert without using floating point, allowing sloppy clicking */
16818 if(x > 2*abs(y))
16819 x = 1, y = 0;
16820 else if(y > 2*abs(x))
16821 x = 0, y = 1;
16822 else if(x < -2*abs(y))
16823 x = -1, y = 0;
16824 else if(y < -2*abs(x))
16825 x = 0, y = -1;
16826 else
16827 x = sgn(x), y = sgn(y);
16829 if(x == 0 && y == 0) /* map click on player to "rest" command */
16830 return ".";
16832 dir = xytod(x, y);
16835 /* move, attack, etc. */
16836 cmd[1] = 0;
16837 if(mod == CLICK_1) {
16838 cmd[0] = (iflags.num_pad ? ndir[dir] : sdir[dir]);
16839 } else {
16840 cmd[0] = (iflags.num_pad ? M(ndir[dir]) :
16841 (sdir[dir] - 'a' + 'A')); /* run command */
16844 return cmd;
16847 STATIC_OVL char *
16848 parse()
16850 #ifdef LINT /* static char in_line[COLNO]; */
16851 char in_line[COLNO];
16852 #else
16853 static char in_line[COLNO];
16854 #endif
16855 register int foo;
16857 static char repeat_char;
16858 boolean prezero = FALSE;
16860 multi = 0;
16861 flags.move = 1;
16862 flush_screen(1); /* Flush screen buffer. Put the cursor on the hero. */
16864 #ifdef BORG
16865 if (borg_on) {
16866 // TODO: implement kbhit for other windowports --ELR
16867 if (!kbhit()) {
16868 borg_input();
16869 return(borg_line);
16870 } else {
16871 nhgetch();
16872 pline("Cyborg terminated.");
16873 borg_on = 0;
16876 } else
16877 #endif
16878 /* [Tom] for those who occasionally go insane... */
16879 if (repeat_hit) {
16880 /* Sanity checks for repeat_hit */
16881 if (repeat_hit < 0) repeat_hit = 0;
16882 else {
16883 /* Don't want things to get too out of hand */
16884 if (repeat_hit > 10) repeat_hit = 10;
16886 repeat_hit--;
16887 in_line[0] = repeat_char;
16888 in_line[1] = 0;
16889 return (in_line);
16893 if (!iflags.num_pad || (foo = readchar()) == 'n')
16894 for (;;) {
16895 foo = readchar();
16896 if (foo >= '0' && foo <= '9') {
16897 multi = 10 * multi + foo - '0';
16898 if (multi < 0 || multi >= LARGEST_INT) multi = LARGEST_INT;
16900 /* still not accessible enough for newbies; numpad users should have a chance of figuring out how to
16901 * move around without having to guess where the option is! --Amy */
16902 if (moves < 50 && !(iflags.num_pad) && iflags.numpadmessage) {
16903 if(yn("You might be trying to move with the number pad keys, which due to stupid default settings is currently deactivated. Press the 'y' key now if you want to turn on the number pad so you can actually move around!") == 'y') {
16904 iflags.num_pad = 2;
16905 iflags.num_pad_mode = 1;
16906 iflags.numpadmessage = FALSE;
16907 pline("Number pad activated! You should add the following line to your configuration file: OPTIONS=number_pad:2 - that way, the number pad will be on by default, allowing you to play properly.");
16908 } else {
16909 pline("Seems like you want to play with vikeys. If you find this reminder message annoying, and as a no-numpad-user you probably do, here's how you can disable it: add OPTIONS=nonumpadmessage to your configuration file.");
16910 iflags.numpadmessage = FALSE;
16914 if (multi > 9) {
16915 clear_nhwindow(WIN_MESSAGE);
16916 sprintf(in_line, "Count: %d", multi);
16917 pline("%s", in_line);
16918 mark_synch();
16920 last_multi = multi;
16921 if (!multi && foo == '0') prezero = TRUE;
16922 } else break; /* not a digit */
16925 if (foo == DOESCAPE) { /* esc cancels count (TH) */
16926 clear_nhwindow(WIN_MESSAGE);
16927 /* multi = */ last_multi = 0; /* WAC multi is cleared later in rhack */
16928 } else if (foo == DOAGAIN || in_doagain) {
16929 multi = last_multi;
16930 } else {
16931 last_multi = multi;
16932 savech(0); /* reset input queue */
16933 savech((char)foo);
16936 if (multi) {
16937 multi--;
16938 save_cm = in_line;
16939 } else {
16940 save_cm = (char *)0;
16942 in_line[0] = foo;
16943 in_line[1] = '\0';
16945 if (foo == DORUSH || foo == DORUN || foo == DOFORCEFIGHT
16946 || foo == DONOPICKUP || foo == DORUN_NOPICKUP
16947 || (iflags.num_pad && (foo == '5' || foo == '-'))) {
16948 foo = readchar();
16949 savech((char)foo);
16950 in_line[1] = foo;
16951 in_line[2] = 0;
16953 clear_nhwindow(WIN_MESSAGE);
16955 if (prezero) in_line[0] = DOESCAPE;
16956 repeat_char = in_line[0];
16958 return(in_line);
16961 #endif /* OVL0 */
16963 #ifdef OVL0
16965 char
16966 readchar()
16968 register int sym;
16969 int x = u.ux, y = u.uy, mod = 0;
16971 if (iflags.debug_fuzzer) return randomkey();
16973 if ( *readchar_queue )
16974 sym = *readchar_queue++;
16975 else
16976 sym = in_doagain ? Getchar() : nh_poskey(&x, &y, &mod);
16978 #ifdef UNIX
16979 # ifdef NR_OF_EOFS
16980 if (sym == EOF) {
16981 register int cnt = NR_OF_EOFS;
16983 * Some SYSV systems seem to return EOFs for various reasons
16984 * (?like when one hits break or for interrupted systemcalls?),
16985 * and we must see several before we quit.
16987 do {
16988 clearerr(stdin); /* omit if clearerr is undefined */
16989 sym = Getchar();
16990 } while (--cnt && sym == EOF);
16992 # endif /* NR_OF_EOFS */
16993 if (sym == EOF)
16994 #ifdef HANGUPHANDLING
16995 hangup(0); /* call end_of_input() or set program_state.done_hup */
16996 #else
16997 end_of_input();
16998 #endif /* HANGUPHANDLING */
16999 #endif /* UNIX */
17001 if(sym == 0) {
17002 /* click event */
17003 readchar_queue = click_to_cmd(x, y, mod);
17004 sym = *readchar_queue++;
17006 return((char) sym);
17009 STATIC_PTR int
17010 dotravel()
17013 if (MenuIsBugged) {
17014 pline("The travel command is currently unavailable!");
17015 if (flags.moreforced && !MessagesSuppressed) display_nhwindow(WIN_MESSAGE, TRUE); /* --More-- */
17016 return 0;
17019 if (BishopGridbug || u.uprops[BISHOP_GRIDBUG].extrinsic || have_bishopstone() || (uarmg && uarmg->oartifact == ART_LINE_CAN_PLAY_BY_YOURSELF) || autismweaponcheck(ART_KILLER_PIANO) || isgridbug(youmonst.data) || (Race_if(PM_WEAPON_BUG) && !Upolyd)) {
17021 /* CURSE that satanic travelto function. I pulled the nethack 3.6.0 fix that disallows quicktravelling to an
17022 * adjacent diagonal square in one turn, but it does not prevent moving through diagonal openings in the
17023 * quicktravel path! And I don't know where in the function it does that. So until I find out how to really fix this,
17024 * I'll just disable quicktravel for grid bugs altogether. If you are annoyed by this: don't waste your time
17025 * complaining, but provide the piece of code that fixes it! Then I will fix and re-enable it. --Amy */
17027 pline("Due to your movement restriction, you cannot quicktravel!");
17028 if (flags.moreforced && !MessagesSuppressed) display_nhwindow(WIN_MESSAGE, TRUE); /* --More-- */
17029 return 0;
17033 if (u.uprops[TOTTER_EFFECT].extrinsic || TotterTrapEffect || have_directionswapstone() || autismweaponcheck(ART_HOW_IS_THE_CAR_ROWED) || (uimplant && uimplant->oartifact == ART_CORTEX_COPROCESSOR) || u.totter || ClockwiseSpinBug || u.uprops[CLOCKWISE_SPIN_BUG].extrinsic || have_clockwisestone() || CounterclockwiseSpin || u.uprops[COUNTERCLOCKWISE_SPIN_BUG].extrinsic || have_counterclockwisestone() || TronEffect || u.uprops[TRON_EFFECT].extrinsic || have_tronstone() || SpellColorPink) {
17034 pline("A sinister force prevents you from quicktraveling!");
17035 if (FunnyHallu) pline("Could this be the work of Arabella?");
17036 if (flags.moreforced && !MessagesSuppressed) display_nhwindow(WIN_MESSAGE, TRUE); /* --More-- */
17037 return 0;
17041 if (uarmg && itemhasappearance(uarmg, APP_RACER_GLOVES) ) {
17042 pline("Your gloves prevent quicktravel!");
17043 if (flags.moreforced && !MessagesSuppressed) display_nhwindow(WIN_MESSAGE, TRUE); /* --More-- */
17044 return 0;
17047 /* Keyboard travel command */
17048 static char cmd[2];
17049 coord cc;
17051 if (!iflags.travelcmd) return 0;
17052 cmd[1]=0;
17053 cc.x = iflags.travelcc.x;
17054 cc.y = iflags.travelcc.y;
17055 if (cc.x == -1 && cc.y == -1) {
17056 /* No cached destination, start attempt from current position */
17057 cc.x = u.ux;
17058 cc.y = u.uy;
17060 if (!isok(cc.x, cc.y)) {
17061 cc.x = u.ux;
17062 cc.y = u.uy;
17064 pline("Where do you want to travel to?");
17065 if (getpos(&cc, TRUE, "the desired destination") < 0) {
17066 /* user pressed ESC */
17067 return 0;
17069 iflags.travelcc.x = u.tx = cc.x;
17070 iflags.travelcc.y = u.ty = cc.y;
17071 cmd[0] = CMD_TRAVEL;
17072 readchar_queue = cmd;
17073 return 0;
17076 #ifdef PORT_DEBUG
17077 # ifdef WIN32CON
17078 extern void win32con_debug_keystrokes(void);
17079 extern void win32con_handler_info(void);
17080 # endif
17083 wiz_port_debug()
17085 int n, k;
17086 winid win;
17087 anything any;
17088 int item = 'a';
17089 int num_menu_selections;
17090 struct menu_selection_struct {
17091 char *menutext;
17092 char *portname;
17093 void (*fn)(void);
17094 } menu_selections[] = {
17095 #ifdef WIN32CON
17096 {"test win32 keystrokes", "tty", win32con_debug_keystrokes},
17097 {"show keystroke handler information", "tty",
17098 win32con_handler_info},
17099 #endif
17100 {(char *)0, (char *)0, (void (*))0}/* array terminator */
17103 num_menu_selections = SIZE(menu_selections) - 1;
17104 for (k=n=0; k < num_menu_selections; ++k)
17105 if (!strcmp(menu_selections[k].portname, windowprocs.name))
17106 n++;
17107 if (n > 0) {
17108 menu_item *pick_list;
17109 win = create_nhwindow(NHW_MENU);
17110 start_menu(win);
17111 for (k=0; k < num_menu_selections; ++k) {
17112 if (strcmp(menu_selections[k].portname,
17113 windowprocs.name))
17114 continue;
17115 any.a_int = k+1;
17116 add_menu(win, NO_GLYPH, &any, item++, 0, ATR_NONE,
17117 menu_selections[k].menutext, MENU_UNSELECTED);
17119 end_menu(win, "Which port debugging feature?");
17120 n = select_menu(win, PICK_ONE, &pick_list);
17121 destroy_nhwindow(win);
17122 if (n > 0) {
17123 n = pick_list[0].item.a_int - 1;
17124 free((void *) pick_list);
17125 /* execute the function */
17126 (*menu_selections[n].fn)();
17128 } else
17129 pline("No port-specific debug capability defined.");
17130 return 0;
17132 # endif /*PORT_DEBUG*/
17134 #endif /* OVL0 */
17135 #ifdef OVLB
17137 * Parameter validator for generic yes/no function to prevent
17138 * the core from sending too long a prompt string to the
17139 * window port causing a buffer overflow there.
17141 char
17142 yn_function(query,resp, def)
17143 const char *query,*resp;
17144 char def;
17146 char qbuf[QBUFSZ];
17147 unsigned truncspot, reduction = sizeof(" [N] ?") + 1;
17149 if (resp) reduction += strlen(resp) + sizeof(" () ");
17150 if (strlen(query) < (QBUFSZ - reduction))
17151 return (*windowprocs.win_yn_function)(query, resp, def);
17152 paniclog("Query truncated: ", query);
17153 reduction += sizeof("...");
17154 truncspot = QBUFSZ - reduction;
17155 (void) strncpy(qbuf, query, (int)truncspot);
17156 qbuf[truncspot] = '\0';
17157 strcat(qbuf,"...");
17158 return (*windowprocs.win_yn_function)(qbuf, resp, def);
17160 #endif
17162 STATIC_PTR int
17163 stefanjerepair()
17165 if (delay > 0) {
17166 impossible("stefanje repair delay greater than zero! (%d)", delay);
17167 delay = 0;
17170 if (delay < 0) {
17171 delay++;
17172 return(1);
17173 } else {
17174 if (uarmf && uarmf->oartifact == ART_STEFANJE_S_PROBLEM && (uarmf->spe < 0)) {
17175 uarmf->spe++;
17176 pline("Your 'Stefanje' sandals are surrounded by a cyan glow.");
17177 } else {
17178 pline("Somehow, your 'Stefanje' sandals are no longer there...");
17180 return(0);
17184 STATIC_PTR int
17185 deseamshoes()
17187 if (delay > 0) {
17188 impossible("deseamshoes delay greater than zero! (%d)", delay);
17189 delay = 0;
17192 if (delay < 0) {
17193 delay++;
17194 return(1);
17195 } else {
17196 if (!uarmf) {
17197 pline("It seems that someone removed your shoes!");
17198 return(0);
17200 if (uarmf && !(uarmf->oartifact == ART_ENDLESS_DESEAMING) && !(uarmf->oartifact == ART_THAT_S_SUPER_UNFAIR)) {
17201 pline("It seems that someone replaced your shoes with different ones!");
17202 return(0);
17205 if (uarmf && uarmf->oeroded) {
17206 uarmf->oeroded--;
17207 pline("You cleaned some of the dog shit from your shoes.");
17208 } else if (uarmf && uarmf->oeroded2) {
17209 uarmf->oeroded2--;
17210 pline("You cleaned some of the dog shit from your shoes.");
17213 return(0);
17217 /*cmd.c*/