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. */
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)
20 #define CMD_TRAVEL (char)0x90
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
28 extern int wiz_debug_cmd(void);
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); /**/
113 extern int doshout(void); /**/
116 extern int dolistvanq(void); /**/
121 static int (*timed_occ_fn
)(void);
124 STATIC_PTR
int doprev_message(void);
125 STATIC_PTR
int timed_occupation(void);
126 STATIC_PTR
int doextcmd(void);
128 STATIC_PTR
int doborgtoggle(void);
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);
135 STATIC_PTR
int specialpower(void); /* WAC -- use techniques */
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
);
162 #ifdef DEBUG_MIGRATING_MONS
163 STATIC_PTR
int wiz_migrate_mons(void);
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);
175 STATIC_DCL
int wiz_port_debug(void);
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);
190 static void add_debug_extended_commands(void);
194 STATIC_DCL
void enlght_line(const char *,const char *,const char *);
195 STATIC_DCL
char *enlght_combatinc(const char *,int,int,char *);
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 */
218 pline("The previous message command is currently unavailable!");
219 if (flags
.moreforced
&& !MessagesSuppressed
) display_nhwindow(WIN_MESSAGE
, TRUE
); /* --More-- */
223 if (AutomaticMorePrompt
) {
224 pline("No, sorry, you can't review earlier messages.");
228 return nh_doprev_message();
232 montraitname(traitno
) /* monstercolor function */
239 return "silent monsters";
241 return "monsters that bark";
243 return "monsters that mew";
245 return "monsters that roar";
247 return "monsters that growl";
249 return "monsters that squeek";
251 return "monsters that squawk";
253 return "monsters that hiss";
255 return "monsters that buzz";
257 return "monsters that grunt";
259 return "monsters that neigh";
261 return "monsters that wail";
263 return "monsters that gurgle";
265 return "monsters that burble";
267 return "monsters that shriek";
269 return "monsters that rattle with their bones";
271 return "monsters that laugh";
273 return "monsters that mumble";
275 return "monsters that imitate";
277 return "monsters that make orc sounds";
279 return "monsters that have humanoid speech";
281 return "monsters that want to arrest the player";
283 return "monsters with soldier dialogue";
285 return "monsters with djinni dialogue";
287 return "monsters with nurse dialogue";
289 return "monsters with seduction dialogue";
291 return "monsters with vampire dialogue";
293 return "monsters that cuss";
295 return "monsters that use nemesis dialogue";
297 return "monsters that mutter cantrips";
299 return "monsters that howl at the moon";
301 return "monsters that boast";
303 return "monsters that make sheep sounds";
305 return "monsters that make chicken sounds";
307 return "monsters that make cow sounds";
309 return "monsters that make parrot sounds";
311 return "monsters that talk like whores";
313 return "monsters that produce tender farting noises";
315 return "monsters that produce squeaky farting noises";
317 return "monsters that produce loud farting noises";
319 return "monsters that make boss taunts";
321 return "monsters that make loud noise";
323 return "monsters with fire resistance";
325 return "monsters with cold resistance";
327 return "monsters with sleep resistance";
329 return "monsters with disintegration resistance";
331 return "monsters with shock resistance";
333 return "monsters with poison resistance";
335 return "monsters with acid resistance";
337 return "monsters with petrification resistance";
339 return "monsters with death resistance";
341 return "monsters with drain resistance";
343 return "monsters that require +1 weapons to hit";
345 return "monsters that require +2 weapons to hit";
347 return "monsters that require +3 weapons to hit";
349 return "monsters that require +4 weapons to hit";
351 return "monsters that hit as a +1 weapon";
353 return "monsters that hit as a +2 weapon";
355 return "monsters that hit as a +3 weapon";
357 return "monsters that hit as a +4 weapon";
359 return "monsters that can fly";
361 return "monsters that can swim";
363 return "monsters that are amorphous";
365 return "monsters that walk through walls";
367 return "monsters that cling to the ceiling";
369 return "monsters that can tunnel";
371 return "monsters that need a pick-axe for tunneling";
373 return "monsters that conceal under items";
375 return "monsters that can hide";
377 return "monsters that are amphibious";
379 return "monsters that are breathless";
381 return "monsters that cannot pick up items";
383 return "monsters that have no eyes";
385 return "monsters that have no hands";
387 return "monsters that have no limbs";
389 return "monsters that have no head";
391 return "monsters that are mindless";
393 return "monsters that are humanoid";
395 return "monsters that count as animals";
397 return "monsters that are slithy";
399 return "monsters that are unsolid";
401 return "monsters with a thick skin";
403 return "monsters that can lay eggs";
405 return "monsters that regenerate health";
407 return "monsters that can see invisible";
409 return "monsters that can teleport";
411 return "monsters that can control teleport";
413 return "monsters that are acidic when eaten";
415 return "monsters that are poisonous when eaten";
417 return "monsters that eat meat";
419 return "monsters that eat veggies";
421 return "monsters that eat both meat and veggies";
423 return "monsters that eat metal";
425 return "monsters that are not a valid polymorph form";
427 return "monsters that count as undead";
429 return "monsters that count as mercenaries";
431 return "monsters that count as human";
433 return "monsters that count as elf";
435 return "monsters that count as dwarf";
437 return "monsters that count as gnome";
439 return "monsters that count as orc";
441 return "monsters that count as hobbit";
443 return "monsters that count as werecreatures";
445 return "monsters that count as vampire";
447 return "monsters that count as lord";
449 return "monsters that count as prince";
451 return "monsters that count as minion";
453 return "monsters that count as giant";
455 return "monsters that count as major demon";
457 return "monsters that are always male";
459 return "monsters that are always female";
461 return "monsters that are neuter";
463 return "monsters that have a proper name";
465 return "monsters that are always spawned hostile";
467 return "monsters that are always spawned peaceful";
469 return "monsters that can be tamed with food";
471 return "monsters that wander randomly";
473 return "monsters that follow you up and down staircases";
475 return "monsters that are extra nasty";
477 return "monsters that are strong";
479 return "monsters that can throw boulders";
481 return "monsters that love to collect gold";
483 return "monsters that love to collect gems";
485 return "monsters that collect items";
487 return "monsters that pick up magic items";
489 return "monsters that want the Amulet of Yendor";
491 return "monsters that want the Bell of Opening";
493 return "monsters that want the Book of the Dead";
495 return "monsters that want the Candelabrum of Invocation";
497 return "monsters that want quest artifacts";
499 return "monsters that wait for you to come";
501 return "monsters that won't react unless you get up close";
503 return "monsters that have infravision";
505 return "monsters that can be seen with infravision";
507 return "monsters that can spontaneously betray you";
509 return "monsters that cannot be tamed";
511 return "monsters that avoid being in a line with you";
513 return "monsters that eat stone";
515 return "monsters that are classified as petty";
517 return "monsters that count as pokemon";
519 return "monsters that are no valid polymorph forms for the player";
521 return "monsters that never move";
523 return "monsters that always generate with egotypes";
525 return "monsters that are telepathic";
527 return "monsters that can freely walk over spider webs";
529 return "monsters which petrify others on touch";
531 return "monsters that count as mind flayers";
533 return "monsters whose corpses don't decay";
535 return "monsters that like to mimic objects";
537 return "monsters that permanently mimic objects";
539 return "monsters that can turn you to slime when eaten";
541 return "monsters that are uncommon by a factor 2";
543 return "monsters that are uncommon by a factor 3";
545 return "monsters that are uncommon by a factor 5";
547 return "monsters that are uncommon by a factor 7";
549 return "monsters that are uncommon by a factor 10";
551 return "monsters that have mind flayer capabilities";
553 return "monsters of tiny size";
555 return "monsters of small size";
557 return "monsters of medium size";
559 return "monsters of large size";
561 return "monsters of huge size";
563 return "monsters of gigantic size";
565 return "monsters that spawn in very large groups";
567 return "unique monsters";
569 return "monsters that spawn in small groups";
571 return "monsters that spawn in large groups";
573 return "monsters that can be genocided";
575 return "monsters that never leave a corpse";
577 return "monsters that have passive attacks";
579 return "monsters that have claw attacks";
581 return "monsters that have bite attacks";
583 return "monsters that have kick attacks";
585 return "monsters that have butt attacks";
587 return "monsters that have touch attacks";
589 return "monsters that have sting attacks";
591 return "monsters that have hug attacks";
593 return "monsters that have scratch attacks";
595 return "monsters that have lash attacks";
597 return "monsters that have spit attacks";
599 return "monsters that have engulfing attacks";
601 return "monsters that have breath attacks";
603 return "monsters that have explosion attacks";
605 return "monsters that explode when killed";
607 return "monsters that have gaze attacks";
609 return "monsters that have tentacle attacks";
611 return "monsters that have trample attacks";
613 return "monsters that have beam attacks";
615 return "monsters that can multiply";
617 return "monsters that have weapon attacks";
619 return "monsters that can cast spells";
621 return "monsters whose attacks do physical damage";
623 return "monsters whose attacks can shoot magic missiles";
625 return "monsters whose attacks do fire damage";
627 return "monsters whose attacks do cold damage";
629 return "monsters whose attacks can put you to sleep";
631 return "monsters whose attacks can disintegrate you";
633 return "monsters whose attacks do shock damage";
635 return "monsters whose attacks poison you and drain strength";
637 return "monsters whose attacks do acid damage";
639 return "monsters whose attacks shoot light rays";
641 return "monsters whose attacks blind you";
643 return "monsters whose attacks stun you";
645 return "monsters whose attacks slow you";
647 return "monsters whose attacks paralyze you";
649 return "monsters whose attacks can drain experience levels";
651 return "monsters whose attacks drain magical energy";
653 return "monsters whose attacks wound your legs";
655 return "monsters whose attacks turn you to stone";
657 return "monsters whose attacks cause it to stick to you";
659 return "monsters whose attacks allow it to steal gold";
661 return "monsters whose attacks allow it to steal items";
663 return "monsters whose attacks allow it to seduce you and steal several items";
665 return "monsters whose attacks teleport you";
667 return "monsters whose attacks rust your equipment";
669 return "monsters whose attacks confuse you";
671 return "monsters whose attacks digest you";
673 return "monsters whose attacks heal you";
675 return "monsters whose attacks wrap around and drown you";
677 return "monsters whose attacks infect you with lycanthropy";
679 return "monsters whose attacks poison you and drain dexterity";
681 return "monsters whose attacks poison you and drain constitution";
683 return "monsters whose attacks drain your intelligence";
685 return "monsters whose attacks make you deathly sick";
687 return "monsters whose attacks rot your equipment";
689 return "monsters whose attacks start sexual encounters";
691 return "monsters whose attacks cause you to hallucinate";
693 return "monsters who attack with the touch of death";
695 return "monsters who attack to cause fever and chills";
697 return "monsters whose attacks make you more hungry";
699 return "monsters whose attacks turn you into a green slime";
701 return "monsters whose attacks calm you";
703 return "monsters whose attacks disenchant your equipment";
705 return "monsters whose attacks polymorph you";
707 return "monsters whose attacks corrode your equipment";
709 return "monsters whose attacks tickle you";
711 return "monsters whose attacks remove Elbereth engravings underneath you";
713 return "monsters whose attacks cause slippery fingers";
715 return "monsters whose attacks cause darkness";
717 return "monsters whose attacks wither your equipment";
719 return "monsters whose attacks drain your luck";
721 return "monsters whose attacks numb you";
723 return "monsters whose attacks freeze you solid";
725 return "monsters whose attacks push you back";
727 return "monsters whose attacks burn you";
729 return "monsters whose attacks cause fear";
731 return "monsters whose attacks reduce your divine protection";
733 return "monsters whose attacks poison you and drain a random stat";
735 return "monsters whose attacks allow the monster to heal its damaged hit points";
737 return "monsters whose attacks burn your equipment with lava";
739 return "monsters whose attacks cause fake messages to appear";
741 return "monsters whose attacks cause Lethe waters to wash over you";
743 return "monsters whose attacks cancel you";
745 return "monsters whose attacks banish you";
747 return "monsters whose attacks poison you and drain wisdom";
749 return "monsters whose attacks shred your equipment";
751 return "monsters whose attacks make your equipment wet";
753 return "monsters whose attacks suck off your gear";
755 return "monsters whose attacks shock you with high voltage";
757 return "monsters who attack with big fat head spikes";
759 return "monsters whose attacks abduct you";
761 return "monsters whose attacks cause fire, cold, shock and drain life damage";
763 return "monsters whose attacks become stronger the more often they hit";
765 return "monsters whose attacks mirror yours";
767 return "monsters whose attacks act like cursed unicorn horns";
769 return "monsters whose attacks levelport you, or drain your levels if you can't levelport";
771 return "monsters whose attacks suck your blood";
773 return "monsters whose attacks shoot webs";
775 return "monsters whose attacks teleport your gear away";
777 return "monsters whose attacks cause depression";
779 return "monsters whose attacks de-energize you";
781 return "monsters whose attacks make you lazy";
783 return "monsters whose attacks poison you and drain charisma";
785 return "monsters whose attacks take you down a peg or two";
787 return "monsters whose attacks are empowered with nexus";
789 return "monsters whose attacks cause loud sound";
791 return "monsters whose attacks cause gravity to warp around you";
793 return "monsters whose attacks cause inertia";
795 return "monsters whose attacks time you";
797 return "monsters who attack with mana, which is completely irresistible";
799 return "monsters who attack with plasma clouds";
801 return "monsters whose attacks can drain your skills";
803 return "monsters who can cast clerical spells";
805 return "monsters who can cast arcane spells";
807 return "monsters whose attacks do random things";
809 return "monsters whose attacks steal the amulet";
811 return "monsters whose attacks steal your intrinsics";
813 return "monsters who attack with psionic blasts";
815 return "monsters whose attacks badly poison you";
817 return "monsters whose attacks eat your dreams";
819 return "monsters whose attacks cause nasty stuff to happen";
821 return "monsters whose attacks cause bad effects";
823 return "monsters whose attacks corrode your entire inventory";
825 return "monsters whose attacks curse your items";
827 return "monsters whose attacks deactivate your intrinsics";
829 return "monsters whose attacks cause you to fumble";
831 return "monsters whose attacks dim you";
833 return "monsters whose attacks cause map amnesia";
835 return "monsters whose attacks freeze you with ice blocks";
837 return "monsters whose attacks vaporize you";
839 return "monsters who attack with razor-sharp stone edges";
841 return "monsters whose attacks make you vomit";
843 return "monsters who attack with highly corrosive chemical waste";
845 return "monsters whose attacks frenzy you";
847 return "monsters whose attacks disenchant your gear into the negatives";
849 return "monsters whose attacks expose you to chaotic forces";
851 return "monsters whose attacks make you insane";
853 return "monsters whose attacks create traps";
855 return "monsters whose attacks increase your carried weight";
857 return "monsters whose attacks hit you with nether forces";
859 return "monsters whose attacks are specific to their internal ID";
861 return "monsters whose attacks are randomized with a very evil RNG";
863 return "monsters who can cast any random monster spell";
865 return "monsters that count as bats";
867 return "monsters that revive after death";
869 return "monsters that count as rats";
871 return "monsters that are immune to non-silver weapons";
873 return "monsters that have intrinsic reflection";
875 return "monsters that are fleecy-colored <3";
877 return "monsters that usually spawn tame";
879 return "monsters that eat leather and other organics";
881 return "monsters that originate from Castle of the Winds";
883 return "joke monsters";
885 return "monsters that originate from Angband";
887 return "monsters that originate from Steamband";
889 return "monsters that originate from Animeband";
891 return "monsters that originate from the Diablo game series";
893 return "monsters that originate from Dungeon Lords";
895 return "monsters that originate from Vanilla NetHack or SLASH'EM";
897 return "monsters that originate from dnethack";
899 return "monsters whose stats are randomized per playthrough";
901 return "monster shoes (AmyBSOD loves those!)";
903 return "monsters that use an evil scentful perfume";
905 return "monsters whose attacks drain alignment points";
907 return "monsters whose attacks increase the sin counter";
909 return "monsters with identity-specific nastiness attacks";
911 return "monsters whose attacks contaminate you";
913 return "monsters whose attacks aggravate monsters";
915 return "monsters that were generated by jonadab's perlscript (nope, slex is not being taken over by robots)";
917 return "monsters whose attacks delete your data";
919 return "monsters from the Evil Variant";
921 return "shapeshifting monsters";
923 return "monsters that move like grid bugs";
925 return "monsters whose attacks destroy your armor and weapons";
927 return "monsters whose attacks cause you to tremble";
929 return "monsters who can cause Ragnarok";
931 return "monsters who try to convert you to their religion";
935 return "monsters whose attacks randomly damage your items";
937 return "monsters who attack with antimatter";
939 return "monsters with extra painful attacks";
941 return "monsters whose attacks increase your technique timeouts";
943 return "monsters whose attacks reduce your spell memory";
945 return "monsters whose attacks reduce your skill training";
947 return "monsters whose attacks permanently damage your stats";
949 return "monsters who deal random screwup damage";
951 return "monsters with random thieving attacks";
953 return "monsters with a game-specific regular attack";
955 return "monsters with a game-specific nastiness attack";
957 return "monsters with ranged thorns";
959 return "monsters that originate from Elona";
961 return "monsters that put nasty curses on your equipment";
963 return "monsters whose attacks increase your sanity";
965 return "monsters whose attacks cause really bad effects";
967 return "monsters with bleedout attacks";
969 return "monsters whose attacks shank you out of your armor";
971 return "monsters that drain your score";
973 return "monsters that cause terrain terror";
975 return "monsters with feminism attacks";
977 return "monsters with levitation attacks";
979 return "monsters with illusion attacks";
981 return "monsters whose attacks reduce your magic cancellation";
983 return "monsters with armor-burning flame attacks";
985 return "monsters with debuff attacks";
987 return "monsters whose attacks un-erosionproof your gear";
989 return "monsters who nivellate your HP and Pw";
991 return "monsters whose attacks drain your technique levels";
993 return "monsters with blasphemy attacks";
995 return "monsters whose attack makes you trip and drop your items";
997 return "monsters who always flee from you";
999 return "monsters who always walk randomly";
1001 return "monsters who allow you to play casino games";
1003 return "monsters who talk gibberish";
1005 return "monsters who talk about glyphs";
1007 return "monster socks";
1009 return "monster pants";
1011 return "monsters who are occasionally on the phone";
1013 return "monster cars";
1015 return "monsters who speak japanese";
1017 return "monsters who speak russian";
1019 return "monsters who snore";
1021 return "monsters who try to photograph you";
1023 return "monsters who can repair your stuff";
1025 return "monsters who sell drugs to you";
1027 return "monsters who generate special combat messages";
1029 return "monsters who are mute";
1031 return "monsters who blabber about the plague";
1033 return "monsters who trumpet";
1035 return "monsters who are in pain";
1037 return "monsters who brag about their deeds";
1039 return "monsters who are royal princesses";
1041 return "monsters who are whiny little sissies";
1043 return "monsters who want you to clean female shoes";
1045 return "monsters who drain your alla";
1047 return "monsters who use a pokedex";
1049 return "bot monsters";
1051 return "monsters who talk about the apocalypse";
1053 return "monsters who imitate the quest leader";
1055 return "monsters who imitate the quest guardians";
1057 return "monsters who haven't been completely coded";
1059 return "self-harming monsters";
1061 return "monsters with a clock";
1063 return "oh-god monsters";
1065 return "monsters who always say 'wolloh'";
1067 return "monsters who let you guess the secret code";
1069 return "monsters who work as barbers";
1071 return "monsters who are affected by your areola diameter";
1073 return "monsters who can stabilize the space around";
1075 return "monsters who are prone to escape";
1077 return "monsters who are easy to become afraid";
1079 return "monsters who cannot be pokedexed";
1081 return "monsters that spawn dead";
1083 return "monsters who belong to the tree squad";
1085 return "monsters who belong to the metal mafia";
1087 return "monsters who belong to the deep state";
1089 return "monsters who originate from Age of Empires";
1091 return "monsters who originate from Fallout or The Elder Scrolls";
1093 return "monsters with inversion attacks";
1095 return "monsters with wince attacks";
1097 return "monsters with debt-increasing attacks";
1099 return "monsters who swap positions with you";
1101 return "monsters whose attacks teleport you to them";
1103 return "monsters who were generated by ChatGPT";
1105 return "monsters that originate from Cataclysm DDA";
1108 impossible("bad trait no %d, please update montraitname() in cmd.c", traitno
);
1115 /* Count down by decrementing multi */
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 */
1131 hangup(int sig_unused
) /* called as signal() handler, so sent
1135 if (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;
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
)
1156 #endif /* SAFERHANGUP */
1163 #ifdef NOSAVEONHANGUP
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 */
1171 program_state
.something_worth_saving
= 0; /* don't save */
1174 /* not "#ifndef NOSAVEONHANGUP", or the code isn't run correctly! --Amy */
1176 if (!program_state
.done_hup
++)
1178 if (program_state
.something_worth_saving
)
1180 if (iflags
.window_inited
)
1181 exit_nhwindows((char *) 0);
1183 terminate(EXIT_SUCCESS
);
1184 /*NOTREACHED*/ /* not necessarily true for vms... */
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.
1211 /* If a time is given, use it to timeout this function, otherwise the
1212 * function times out by its own means.
1215 set_occupation(fn
, txt
, xtime
)
1221 occupation
= timed_occupation
;
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.
1240 static char pushq
[BSIZE
], saveq
[BSIZE
];
1241 static NEARDATA
int phead
, ptail
, shead
, stail
;
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');
1256 pgetchar() { /* curtesy of aeb@cwi.nl */
1259 if (iflags
.debug_fuzzer
) return randomkey();
1266 /* A ch == 0 resets the pushq */
1274 pushq
[phead
++] = ch
;
1278 /* A ch == 0 resets the saveq. Only save keystrokes when not
1279 * replaying a previous command.
1287 phead
= ptail
= shead
= stail
= 0;
1288 else if (shead
< BSIZE
)
1289 saveq
[shead
++] = ch
;
1298 doextcmd() /* here after # - now read a full-word command */
1302 /* keep repeating until we don't run help or quit */
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
);
1314 doextlist() /* here after #? - now list all full-word commands */
1316 register const struct ext_func_tab
*efp
;
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
);
1347 if (uarmc
&& uarmc
->oartifact
== ART_TURN_LOSS_EXTREME
) return 0;
1349 for(x
=0; x
<COLNO
; x
++) for(y
=0; y
<ROWNO
; y
++) {
1351 if (memory_is_invisible(x
, y
)) {
1357 pline("Remembered monster markers removed.");
1364 static int doborgtoggle(void) {
1365 if (yn_function("Really enable cyborg?", ynqchars
, 'n') == 'y') {
1367 pline("The cyborg is enabled.... Good luck!");
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;
1387 const struct ext_func_tab
*choices
[MAX_EXT_CMD
];
1389 char cbuf
[QBUFSZ
], prompt
[QBUFSZ
], fmtstr
[20];
1390 int i
, n
, nchoices
, acount
;
1392 int accelerator
, prevaccelerator
;
1402 /* populate choices */
1403 for(efp
= extcmdlist
; efp
->ef_txt
; efp
++) {
1404 if (!matchlevel
|| !strncmp(efp
->ef_txt
, cbuf
, matchlevel
)) {
1406 if ((int)strlen(efp
->ef_desc
) > biggest
) {
1407 biggest
= strlen(efp
->ef_desc
);
1408 sprintf(fmtstr
,"%%-%ds", biggest
+ 15);
1411 if (i
>= MAX_EXT_CMD
- 2) {
1412 impossible("Exceeded %d extended commands in doextcmd() menu",
1419 choices
[i
] = (struct ext_func_tab
*)0;
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
)) {
1432 win
= create_nhwindow(NHW_MENU
);
1434 prevaccelerator
= 0;
1436 for(i
= 0; choices
[i
]; ++i
) {
1437 accelerator
= choices
[i
]->ef_txt
[matchlevel
];
1438 if (accelerator
!= prevaccelerator
|| nchoices
< (ROWNO
- 3)) {
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
);
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
);
1456 strcat(prompt
," or ");
1457 strcat(prompt
, choices
[i
]->ef_txt
);
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
);
1472 if (matchlevel
> (QBUFSZ
- 2)) {
1473 free((void *)pick_list
);
1475 impossible("Too many characters (%d) entered in extcmd_via_menu()",
1480 cbuf
[matchlevel
++] = pick_list
[0].item
.a_char
;
1481 cbuf
[matchlevel
] = '\0';
1482 free((void *)pick_list
);
1497 dooverview_or_wiz_where()
1500 if (wizard
) return wiz_where();
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. */
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;
1529 zap_dig(FALSE
); /* dig only one tile, just like in Elona */
1530 use_skill(P_SQUEAKING
, rnd(20));
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!");
1538 delay
= (uarmf
->spe
< -10) ? (-((uarmf
->spe
+ 51) * 3)) : (-((uarmf
->spe
+ 23) * 10));
1539 set_occupation(stefanjerepair
, "repairing your 'Stefanje' sandals", 0);
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.");
1547 delay
= -(rn1(50, 50));
1548 set_occupation(deseamshoes
, "deseaming your Anastasia shoes", 0);
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.");
1556 delay
= -rn1(50, 50);
1557 set_occupation(deseamshoes
, "deseaming your Kati shoes", 0);
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;
1574 register struct obj
*otmp2
;
1575 otmp2
= mksobj(BOULDER
, FALSE
, FALSE
, FALSE
);
1577 pline("For some strange reason, no boulder appeared!");
1581 otmp2
->owt
= weight(otmp2
);
1582 place_object(otmp2
, u
.ux
, u
.uy
);
1585 pline("Kadoom! A boulder appeared underneath you.");
1586 use_skill(P_SQUEAKING
, rnd(10));
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;
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;
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
) {
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));
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);
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' ) {
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' ) {
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' ) {
1655 pline("Unfortunately sound does not carry well through rock.");
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");
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
);
1679 if (uarmf
&& uarmf
->oartifact
== ART_ELIANE_S_SHIN_SMASH
) {
1680 pline("The farting gas destroys your footwear instantly.");
1683 if (uarmf
&& uarmf
->oartifact
== ART_ELIANE_S_COMBAT_SNEAKERS
) {
1684 pline("Eek! You can't stand farting gas!");
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
));
1698 if (uarmh
&& uarmh
->oartifact
== ART_VACUUM_CLEANER_DEATH
) {
1699 pline("The farting gas almost asphyxiates you!");
1705 losehp(rnd(u
.ulevel
* 3), "suffocating on farting gas", KILLED_BY
);
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");
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.");
1729 if (uarmf
&& uarmf
->oartifact
== ART_ELIANE_S_COMBAT_SNEAKERS
) {
1730 pline("Eek! You can't stand farting gas!");
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
));
1744 if (uarmh
&& uarmh
->oartifact
== ART_VACUUM_CLEANER_DEATH
) {
1745 pline("The farting gas almost asphyxiates you!");
1751 losehp(rnd(u
.ulevel
* 3), "suffocating on farting gas", KILLED_BY
);
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");
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.");
1775 if (uarmf
&& uarmf
->oartifact
== ART_ELIANE_S_COMBAT_SNEAKERS
) {
1776 pline("Eek! You can't stand farting gas!");
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
));
1790 if (uarmh
&& uarmh
->oartifact
== ART_VACUUM_CLEANER_DEATH
) {
1791 pline("The farting gas almost asphyxiates you!");
1797 losehp(rnd(u
.ulevel
* 3), "suffocating on farting gas", KILLED_BY
);
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' ) {
1808 pseudo
= mksobj(SPE_MENSTRUATION
, FALSE
, 2, FALSE
);
1810 pline("Somehow, it failed.");
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 */
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
);
1826 if (Upolyd
) u
.mh
-= ((u
.mh
/ 5) + 1);
1827 else u
.uhp
-= ((u
.uhp
/ 5) + 1);
1830 u
.mh
-= ((u
.mhmax
/ 5) + 1);
1831 if (u
.mh
< 0) losehp(10000, "forcibly bleeding out", KILLED_BY
);
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);
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;
1853 You("need at least 100 mana to use this ability!");
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;
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
)) ) {
1874 pline("%s is pulled near!", Monnam(nexusmon
));
1876 goto 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()) {
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
) {
1896 reset_rndmonst(NON_PM
);
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) ) {
1912 if (pm
&& !(pm
->msound
== MS_STENCH
) && rn2(50) ) {
1917 if (pm
) (void) makemon(pm
, 0, 0, MM_ANGRY
|MM_FRENZIED
);
1924 int mondistance
= 0;
1925 struct monst
*mtmp3
;
1927 for (k
= -5; k
<= 5; k
++) for(l
= -5; l
<= 5; l
++) {
1928 if (!isok(u
.ux
+ k
, u
.uy
+ l
)) continue;
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;
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));
1980 } else if (Race_if(PM_IRAHA
) && !u
.irahapoison
&& yn("Do you want to poison your weapon?") == 'y') {
1983 pline("You are not holding a weapon!");
1986 /* Iraha are somehow capable of poisoning weapons that cannot be poisoned, this is by design --Amy */
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;
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') {
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.");
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') {
2015 pline("Monsters will now be more likely to flee from you when hit, with the chance depending on your Juyo skill!");
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') {
2020 pline("Your missiles now have the regular chance of hitting your pets.");
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') {
2024 pline("Your missiles will now sometimes pass through pets, with the chance depending on your petkeeping skill!");
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;
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!");
2036 } else if (u
.uswallow
) {
2037 pline("Well, it seems you have some other problem to take care of first.");
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);
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);
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
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
);
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);
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.");
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.");
2107 goto 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.");
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.");
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;
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
);
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.");
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
);
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!! */
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);
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!");
2194 int /* deathexplore patch */
2195 enter_explore_mode()
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
);
2203 if (!(strcmp (buf
, "yes"))) {
2204 clear_nhwindow(WIN_MESSAGE
);
2205 You("are now in non-scoring explore mode.");
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
);
2219 if (!(strcmp (buf
, "yes"))) {
2220 clear_nhwindow(WIN_MESSAGE
);
2221 You("are now in non-scoring explore mode.");
2226 clear_nhwindow(WIN_MESSAGE
);
2227 pline("Resuming wizard mode.");
2240 pline("The borrow command is currently unavailable!");
2241 if (flags
.moreforced
&& !MessagesSuppressed
) display_nhwindow(WIN_MESSAGE
, TRUE
); /* --More-- */
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();
2260 else no_steal
= TRUE
;
2262 if (near_capacity() > SLT_ENCUMBER
) {
2263 Your("load is too heavy to attempt to steal.");
2267 /* discard direction typeahead, if any */
2268 if (flags
.moreforced
&& !MessagesSuppressed
) display_nhwindow(WIN_MESSAGE
, TRUE
); /* --More-- */
2272 if(!getdir(NULL
)) return(0);
2273 if(!u
.dx
&& !u
.dy
) return(0);
2279 pline("You search around but don't find anything.");
2280 if (flags
.moreforced
&& !MessagesSuppressed
) display_nhwindow(WIN_MESSAGE
, TRUE
); /* --More-- */
2286 maploc
= &levl
[x
][y
];
2289 register struct monst
*mdat
= m_at(x
, y
);
2291 /* calculate chanch of sucess */
2294 if (Role_if(PM_ROGUE
)) {
2295 base
= 5 + (u
.ulevel
* 2);
2298 if (Role_if(PM_PICKPOCKET
)) {
2299 base
= 5 + (u
.ulevel
* 3);
2303 if (Race_if(PM_HUMANOID_LEPRECHAUN
)) {
2309 if (ACURR(A_DEX
) < 10) statbonus
= (ACURR(A_DEX
) - 10) * dexadj
;
2311 if (ACURR(A_DEX
) > 14) statbonus
= (ACURR(A_DEX
) - 14) * dexadj
;
2313 chanch
= base
+ statbonus
;
2315 if (uarmg
&& uarmg
->otyp
!= GAUNTLETS_OF_DEXTERITY
)
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;
2333 if (uarmg
&& itemhasappearance(uarmg
, APP_POLNISH_GLOVES
) ) {
2334 if (chanch
< 5) chanch
= 5;
2339 if (chanch
< 5) chanch
= 5;
2343 if (uarm
&& uarm
->oartifact
== ART_GREGOR_S_GANGSTER_GARMENTS
) {
2344 if (chanch
< 5) chanch
= 5;
2348 if (uarmg
&& uarmg
->oartifact
== ART_REALSTEAL
) {
2349 if (chanch
< 5) chanch
= 5;
2353 if (chanch
< 5) chanch
= 5;
2354 if (chanch
> 95) chanch
= 95;
2355 if (rnd(100) < chanch
|| mdat
->mtame
) {
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
);
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) {
2377 You("steal %s.", doname(gold
));
2379 You("grab %s, but find no room in your knapsack.", doname(gold
));
2384 impossible("cmd.c:playersteal() stealing negative money");
2387 temp
= (u
.ulevel
* rn1(25,25));
2388 if (temp
> mdat
->mgold
) temp
= mdat
->mgold
;
2390 mdat
->mgold
-= temp
;
2391 You("steal %d gold.",temp
);
2394 You("don't find anything to steal.");
2396 if (!mdat
->mtame
) exercise(A_DEX
, TRUE
);
2399 You("failed to steal anything.");
2404 pline("I don't see anybody to rob there!");
2413 /* ^W command - wish for something */
2415 wiz_wish() /* Unlimited wishes for debug mode by Paul Polderman */
2418 boolean save_verbose
= flags
.verbose
;
2420 flags
.verbose
= FALSE
;
2422 flags
.verbose
= save_verbose
;
2423 (void) encumber_msg();
2425 pline("Unavailable command '^W'.");
2430 #if 0 /* WAC -- Now uses techniques */
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*/
2444 You("have to wait %s before using your ability again.",
2445 (u
.unextuse
> 500) ? "for a while" : "a little longer");
2447 if (!wizard
|| (yn("Use ability anyways?") == 'n'))
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!");
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);
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);*/
2473 /* KMH -- fixed non-compliant string */
2474 You("are already quite familiar with the contents of your pack.");
2477 u
.unextuse
= rn1(500,1500);
2480 Your("ability, gem identification, is automatic.");
2483 Your("ability, bless and curse detection, is automatic.");
2486 /* KMH -- Just do it! (Besides, Alt isn't portable...) */
2487 return (polyatwill());
2488 /*Your("ability, polymorphing, uses the alt-y key.");*/
2491 /*only when empty handed, in human form!*/
2493 You("can't do this while polymorphed!");
2497 Your("fingernails extend into claws!");
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!");
2505 /* KMH -- Just do it! (Besides, Alt isn't portable...) */
2506 return (playersteal());
2507 /*Your("ability, stealing, uses the alt-b key.");*/
2511 Your("special ability is unarmed combat, and it is automatic.");
2516 You("don't have a special ability!");
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);
2530 /* WAC spell-users can study their known spells*/
2531 if(Hallucination
|| Stunned
|| Confusion
) {
2532 You("can't concentrate right now!");
2535 You("concentrate...");
2536 studyspell(); /*in spell.c*/
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);
2548 if(!uwep
|| (weapon_type(uwep
) == P_NONE
)) {
2549 You("are not wielding a weapon!");
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
)));
2557 if (not_fully_identified(uwep
)) {
2558 You("examine %s.", doname(uwep
));
2559 if (rnd(15) <= ACURR(A_INT
)) {
2560 makeknown(uwep
->otyp
);
2562 You("discover it is %s",doname(uwep
));
2564 pline("Unfortunately, you didn't learn anything new.");
2566 /*WAC Added practicing code - in weapon.c*/
2569 u
.unextuse
= rn1(500,500);
2572 if (Hallucination
|| Stunned
|| Confusion
) {
2573 You("are in no condition to perform surgery!");
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
);
2581 if(u
.uhp
> 6) u
.uhp
-= 5;
2583 u
.unextuse
= rn1(500,500);
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);
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!");
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.");
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
;
2610 pline(nothing_happens
);
2611 if (FailureEffects
|| u
.uprops
[FAILURE_EFFECTS
].extrinsic
|| have_failurestone()) {
2612 pline("Oh wait, actually something bad happens...");
2618 You("scream \"KIIILLL!\"");
2620 u
.ulastuse
= rnd((int) (u
.ulevel
/6 + 1)) + 1;
2621 u
.unextuse
= rn1(1000,500);
2626 pline("%s gets tamer.", Monnam(u
.usteed
));
2627 tamedog(u
.usteed
, (struct obj
*) 0, FALSE
);
2628 u
.unextuse
= rn1(1000,500);
2630 Your("special ability is only effective when riding a monster.");
2635 /*By default, action should take a turn*/
2641 /* ^I command - identify hero's inventory */
2645 if (wizard
) identify_pack(0, 1, 0);
2646 else pline("Unavailable command '^I'.");
2650 /* ^F command - reveal the level map and any traps on it */
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
);
2666 HConfusion
= save_Hconf
;
2667 HHallucination
= save_Hhallu
;
2669 pline("Unavailable command '^F'.");
2673 /* ^G command - generate monster(s); a count prefix will be honored */
2677 if (wizard
) pluslvl(FALSE
);
2678 else pline("Unavailable command '^J'.");
2682 /* BEGIN TSANTH'S CODE */
2687 if (u
.ublessed
< 20) {
2688 pline("Intrinsic AC increased by 1.");
2689 HProtection
|= FROMOUTSIDE
;
2693 pline("Intrinsic AC is already maximized.");
2696 pline("Unavailable command '^C'.");
2701 wiz_toggle_invulnerability()
2704 if ((Invulnerable
== 0) && (u
.uinvulnerable
== FALSE
)) {
2705 You("will be invulnerable for 32000 turns.");
2706 Invulnerable
= 32000;
2707 u
.uinvulnerable
= TRUE
;
2710 You("are no longer invulnerable.");
2712 u
.uinvulnerable
= FALSE
;
2715 else pline("Unavailable command '^N'.");
2718 /* END TSANTH'S CODE */
2721 wiz_detect_monsters()
2724 You("can detect monsters.");
2725 incr_itimeout(&HDetect_monsters
, 32000);
2727 else pline("Unavailable command '^H'.");
2734 if (wizard
) (void) create_particular();
2735 else pline("Unavailable command '^G'.");
2739 /* ^O command - display dungeon layout */
2743 if (wizard
) (void) print_dungeon(FALSE
, (int *)0, (xchar
*)0);
2744 else pline("Unavailable command '^O'.");
2748 /* ^E command - detect unseen (secret doors, traps, hidden monsters) */
2752 if(wizard
) (void) findit();
2753 else pline("Unavailable command '^E'.");
2757 /* ^V command - level teleport */
2761 if (wizard
) level_tele();
2762 else pline("Unavailable command '^V'.");
2766 /* #monpolycontrol command - choose new form for shapechangers, polymorphees */
2768 wiz_mon_polycontrol()
2770 iflags
.mon_polycontrol
= !iflags
.mon_polycontrol
;
2771 pline("Monster polymorph control is %s.",
2772 iflags
.mon_polycontrol
? "on" : "off");
2776 /* #levelchange command - adjust hero's experience level */
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
);
2790 pline("%s", Never_mind
);
2791 if (FailureEffects
|| u
.uprops
[FAILURE_EFFECTS
].extrinsic
|| have_failurestone()) {
2792 pline("Oh wait, actually I do mind...");
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.");
2804 if (newlevel
< 1) newlevel
= 1;
2805 while (u
.ulevel
> newlevel
)
2806 losexp("#levelchange", TRUE
, FALSE
);
2808 if (u
.ulevel
>= MAXULEV
) {
2809 You("are already as experienced as you can get.");
2812 if (newlevel
> MAXULEV
) newlevel
= MAXULEV
;
2813 while (u
.ulevel
< newlevel
)
2816 u
.ulevelmax
= u
.ulevel
;
2820 /* #panic command - test program's panic handling */
2824 if (iflags
.debug_fuzzer
) {
2825 u
.uhp
= u
.uhpmax
= 1000;
2826 u
.uen
= u
.uenmax
= 1000;
2830 if (yn("Do you want to call panic() and end your game?") == 'y')
2831 panic("crash test.");
2835 /* #polyself command - change hero's form */
2843 /* #seenv command */
2848 int x
, y
, v
, startx
, stopx
, curx
;
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] = '@';
2866 v
= levl
[x
][y
].seenv
& 0xff;
2868 row
[curx
] = row
[curx
+1] = ' ';
2870 sprintf(&row
[curx
], "%02x", v
);
2873 /* remove trailing spaces */
2874 for (x
= curx
-1; x
>= 0; x
--)
2875 if (row
[x
] != ' ') break;
2878 putstr(win
, 0, row
);
2880 display_nhwindow(win
, TRUE
);
2881 destroy_nhwindow(win
);
2885 /* #vision command */
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
);
2898 for (y
= 0; y
< ROWNO
; y
++) {
2899 for (x
= 1; x
< COLNO
; x
++) {
2900 if (x
== u
.ux
&& y
== u
.uy
)
2903 v
= viz_array
[y
][x
]; /* data access should be hidden */
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;
2915 putstr(win
, 0, &row
[1]);
2917 display_nhwindow(win
, TRUE
);
2918 destroy_nhwindow(win
);
2922 /* #wmode command */
2931 win
= create_nhwindow(NHW_TEXT
);
2932 for (y
= 0; y
< ROWNO
; y
++) {
2933 for (x
= 0; x
< COLNO
; x
++) {
2935 if (x
== u
.ux
&& y
== u
.uy
)
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
)
2941 else if (IS_ROOM(lev
->typ
) || IS_DOOR(lev
->typ
))
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
++) {
2956 if (x
== u
.ux
&& y
== u
.uy
)
2958 else if (lev
->wall_info
& W_HARDGROWTH
)
2960 else if (lev
->wall_info
& W_EASYGROWTH
)
2966 putstr(win
, 0, row
);
2968 display_nhwindow(win
, TRUE
);
2969 destroy_nhwindow(win
);
2977 /* -enlightenment and conduct- */
2978 static winid en_win
;
2981 are
[] = "are ", were
[] = "were ",
2982 have
[] = "have ", had
[] = "had ",
2983 can
[] = "can ", could
[] = "could ";
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)
2998 enlght_line(start
, middle
, end
)
2999 const char *start
, *middle
, *end
;
3003 sprintf(buf
, "%s%s%s.", start
, middle
, end
);
3004 putstr(en_win
, 0, buf
);
3009 /* KMH, intrinsic patch -- several of these are updated */
3011 enlightenment(final
, guaranteed
)
3012 int final
; /* 0 => still in progress; 1 => over, survived; 2 => dead */
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");
3035 if (flags
.gmmode
) you_are("playing in game master mode");
3036 if (flags
.supergmmode
) you_are("playing in super game master mode");
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");
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
));
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
));
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
);
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
);
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
);
4027 if ((guaranteed
|| !rn2(10)) && u
.boosttimer
) {
4028 sprintf(buf
, "boosted");
4029 if (!rn2(10)) sprintf(eos(buf
), " (%d)", u
.boosttimer
);
4035 if ((guaranteed
|| !rn2(10)) && multi
) {
4036 sprintf(buf
, "paralyzed.");
4037 sprintf(eos(buf
), " (%d)", multi
);
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");
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
);
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
);
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
);
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
);
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
);
4081 if ((guaranteed
|| !rn2(10)) && Vomiting
) {
4082 sprintf(buf
, "nauseated");
4083 if (wizard
|| (!rn2(10)) || final
>= 1 ) sprintf(eos(buf
), " (%ld)", Vomiting
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
4142 if ((guaranteed
|| !rn2(10)) && Slimed
) {
4143 sprintf(buf
, "turning into slime");
4144 if (wizard
|| (!rn2(10)) || final
>= 1 ) sprintf(eos(buf
), " (%ld)", Slimed
);
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
);
4152 if ((guaranteed
|| !rn2(10)) && PlayerBleeds
) {
4153 sprintf(buf
, "bleeding");
4154 if (wizard
|| (!rn2(10)) || final
>= 1 ) sprintf(eos(buf
), " (%ld)", PlayerBleeds
);
4157 if ((guaranteed
|| !rn2(10)) && Prem_death
) {
4158 sprintf(buf
, "going to die prematurely");
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
4259 if ((guaranteed
|| !rn2(10)) && have_morgothiancurse() ) {
4260 sprintf(buf
, "afflicted by the Ancient Morgothian Curse.");
4263 if ((guaranteed
|| !rn2(10)) && have_topiylinencurse() ) {
4264 sprintf(buf
, "afflicted by Topi Ylinen's Curse, a.k.a. the Ancient Foul Curse.");
4267 if ((guaranteed
|| !rn2(10)) && have_blackbreathcurse() ) {
4268 sprintf(buf
, "filled with the Black Breath.");
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
));
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
5693 if ((guaranteed
|| !rn2(10)) && MCReduction
) {
5694 sprintf(buf
, "reduced magic cancellation.");
5695 if (wizard
|| (!rn2(10)) || final
>= 1 ) sprintf(eos(buf
), " (%ld)", MCReduction
);
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
);
5704 if ((guaranteed
|| !rn2(10)) && u
.uprops
[TRAP_REVEALING
].extrinsic
) {
5705 sprintf(buf
, "randomly revealing traps");
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
);
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
);
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
);
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
);
5728 if ((guaranteed
|| !rn2(10)) && u
.uprops
[SENTIENT_HIGH_HEELS
].extrinsic
) {
5729 sprintf(buf
, "wearing sentient high heels");
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
5875 if ((guaranteed
|| !rn2(10)) && u
.uprops
[RANDOM_RUMORS
].extrinsic
) {
5876 sprintf(buf
, "going to listen to random rumors");
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
);
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
);
5892 if ((guaranteed
|| !rn2(10)) && NoStaircase
) {
5893 sprintf(buf
, "to wait until you can use staircases again.");
5894 sprintf(eos(buf
), " (%ld)", NoStaircase
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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)");
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
6555 if ((guaranteed
|| !rn2(10)) && u
.elberethcheese
) {
6556 sprintf(buf
, "experiencing reduced Elbereth effectiveness");
6557 sprintf(eos(buf
), " (%d)", u
.elberethcheese
);
6562 sprintf(buf
, "%d points of BUC expertise", u
.bucskill
);
6565 if (u
.enchantrecskill
) {
6566 sprintf(buf
, "%d points of enchantment expertise", u
.enchantrecskill
);
6569 if (u
.weapchantrecskill
) {
6570 sprintf(buf
, "%d points of weapon enchantment expertise", u
.weapchantrecskill
);
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
);
6581 if (Race_if(PM_FELID
)) {
6582 sprintf(buf
, "%d ", u
.felidlives
);
6583 sprintf(eos(buf
), "lives left");
6587 if (u
.homosexual
== 0) {
6588 sprintf(buf
, "not decided on your sexuality yet");
6591 if (u
.homosexual
== 1) {
6592 sprintf(buf
, "heterosexual");
6595 if (u
.homosexual
== 2) {
6596 sprintf(buf
, "homosexual");
6600 if (u
.returntimer
) {
6601 sprintf(buf
, "waiting to be recalled.");
6602 sprintf(eos(buf
), " (%d)", u
.returntimer
);
6606 if (Role_if(PM_HUSSY
)) {
6607 sprintf(buf
, "%ld ", (u
.hussyhurtturn
- moves
));
6608 sprintf(eos(buf
), "turns left to hit a guy.");
6610 sprintf(buf
, "%ld ", (u
.hussykillturn
- moves
));
6611 sprintf(eos(buf
), "turns left to defeat a guy.");
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
6669 if ((guaranteed
|| !rn2(10)) && TimeStopped
) {
6670 sprintf(buf
, "stopped the flow of time.");
6671 sprintf(eos(buf
), " (%ld)", TimeStopped
);
6675 if ((guaranteed
|| !rn2(10)) && u
.drippingtread
) {
6676 sprintf(buf
, "dripping elements.");
6677 sprintf(eos(buf
), " (%d)", u
.drippingtread
);
6681 if ((guaranteed
|| !rn2(10)) && u
.geolysis
) {
6682 sprintf(buf
, "using geolysis.");
6683 sprintf(eos(buf
), " (%d)", u
.geolysis
);
6687 if ((guaranteed
|| !rn2(10)) && u
.disruptionshield
) {
6688 sprintf(buf
, "your disruption shield up.");
6689 sprintf(eos(buf
), " (%d)", u
.disruptionshield
);
6693 if ((guaranteed
|| !rn2(10)) && u
.inertiacontrol
) {
6694 sprintf(buf
, "controlling the flow of a spell.");
6695 sprintf(eos(buf
), " (%d)", u
.inertiacontrol
);
6699 if ((guaranteed
|| !rn2(10)) && u
.sterilized
) {
6700 sprintf(buf
, "sterilized the air around you.");
6701 sprintf(eos(buf
), " (%d)", u
.sterilized
);
6705 if ((guaranteed
|| !rn2(10)) && u
.holyshield
) {
6706 sprintf(buf
, "your holy shield up.");
6707 sprintf(eos(buf
), " (%d)", u
.holyshield
);
6711 if ((guaranteed
|| !rn2(10)) && u
.berserktime
) {
6712 sprintf(buf
, "berserk.");
6713 sprintf(eos(buf
), " (%d)", u
.berserktime
);
6717 if ((guaranteed
|| !rn2(10)) && u
.magicshield
) {
6718 sprintf(buf
, "your magic shield up.");
6719 sprintf(eos(buf
), " (%d)", u
.magicshield
);
6723 if ((guaranteed
|| !rn2(10)) && u
.combatcommand
) {
6724 sprintf(buf
, "used the combat command.");
6725 sprintf(eos(buf
), " (%d)", u
.combatcommand
);
6729 if ((guaranteed
|| !rn2(10)) && u
.burrowed
) {
6730 sprintf(buf
, "burrowed into the ground.");
6731 sprintf(eos(buf
), " (%d)", u
.burrowed
);
6735 if ((guaranteed
|| !rn2(10)) && u
.stasistime
) {
6736 sprintf(buf
, "in stasis, and the monsters are too.");
6737 sprintf(eos(buf
), " (%d)", u
.stasistime
);
6741 if ((guaranteed
|| !rn2(10)) && u
.powerfailure
) {
6742 sprintf(buf
, "experiencing a power failure.");
6743 sprintf(eos(buf
), " (%d)", u
.powerfailure
);
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
);
6753 if ((guaranteed
|| !rn2(10)) && u
.nailpolish
) {
6754 sprintf(buf
, "applied nail polish.");
6755 sprintf(eos(buf
), " (%d)", u
.nailpolish
);
6759 if ((guaranteed
|| !rn2(10)) && u
.enchantspell
) {
6760 sprintf(buf
, "enchanted your weapon with fire.");
6761 sprintf(eos(buf
), " (%d)", u
.enchantspell
);
6765 if ((guaranteed
|| !rn2(10)) && u
.thornspell
) {
6766 sprintf(buf
, "thorns.");
6767 sprintf(eos(buf
), " (%d)", u
.thornspell
);
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
);
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
);
6783 if ((guaranteed
|| !rn2(10)) && u
.contingencyturns
) {
6784 sprintf(buf
, "signed up a contract with the reaper.");
6785 sprintf(eos(buf
), " (%d)", u
.contingencyturns
);
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
);
6795 if ((guaranteed
|| !rn2(10)) && u
.bodyfluideffect
) {
6796 sprintf(buf
, "very acidic skin.");
6797 sprintf(eos(buf
), " (%d)", u
.bodyfluideffect
);
6801 if ((guaranteed
|| !rn2(10)) && u
.antitelespelltimeout
) {
6802 sprintf(buf
, "erected an anti-teleportation field.");
6803 sprintf(eos(buf
), " (%d)", u
.antitelespelltimeout
);
6807 if ((guaranteed
|| !rn2(10)) && u
.breathenhancetimer
) {
6808 sprintf(buf
, "magically enhanced breath.");
6809 sprintf(eos(buf
), " (%d)", u
.breathenhancetimer
);
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
);
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
);
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
);
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
);
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
);
6843 if ((guaranteed
|| !rn2(10)) && u
.walscholarpass
) {
6844 sprintf(buf
, "able to pass through grave walls.");
6845 sprintf(eos(buf
), " (%d)", u
.walscholarpass
);
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
);
6855 if ((guaranteed
|| !rn2(10)) && u
.acutraining
) {
6856 sprintf(buf
, "double skill training.");
6857 sprintf(eos(buf
), " (%d)", u
.acutraining
);
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
);
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
);
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");
6878 if ((guaranteed
|| !rn2(10)) && u
.uprops
[SENSORY_DEPRIVATION
].extrinsic
) {
6879 sprintf(buf
, "sensory deprivation.");
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
7304 if ((guaranteed
|| !rn2(10)) && u
.badfcursed
) {
7305 sprintf(buf
, "cursed");
7306 if (wizard
|| (!rn2(10)) || final
>= 1 ) sprintf(eos(buf
), " (%d)", u
.badfcursed
);
7310 if ((guaranteed
|| !rn2(10)) && u
.badfdoomed
) {
7311 sprintf(buf
, "DOOMED");
7312 if (wizard
|| (!rn2(10)) || final
>= 1 ) sprintf(eos(buf
), " (%d)", u
.badfdoomed
);
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
);
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
);
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
));
7425 enl_msg(buf
, " has", " had", " wounded legs");
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
);
7450 if ((guaranteed
|| !rn2(10)) && WinceState
) {
7451 sprintf(buf
, StrongWinceState
? "wincing painfully" : "wincing");
7452 if (wizard
) sprintf(eos(buf
), " (%d)", HWinceState
);
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 */
7477 unsigned long warntype
= flags
.warntype
;
7478 struct { unsigned long mask
; const char *str
; } warntypes
[] = {
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
;
7493 strcat(buf
, " and ");
7497 strcat(buf
, warntypes
[i
].str
);
7503 strcat(buf
, " and ");
7504 strcat(buf
, something
);
7508 #if 0 /* ALI - dealt with under Warn_of_mon */
7509 if ((guaranteed
|| !rn2(10)) && Undead_warning
) you_are("warned of undead");
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
);
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
);
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
);
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
);
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
);
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
) {
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
;
7582 you_are("poorly 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
))
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
);
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");
7613 if (wizard
|| !rn2(10) || final
>= 1 ) sprintf(eos(buf
), " (%ld)", HLevitation
);
7614 #endif /*same like above --Amy */
7617 if ((guaranteed
|| !rn2(10)) && Levitation
) {
7618 sprintf(buf
, StrongLevitation
? "floatitating" : "levitating");
7620 if (wizard
|| !rn2(10) || final
>= 1 ) sprintf(eos(buf
), " (%ld)", HLevitation
);
7621 #endif /*same like above --Amy */
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
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
);
7639 if ((guaranteed
|| !rn2(10)) && u
.uswallow
) {
7640 sprintf(buf
, "swallowed by %s", a_monnam(u
.ustuck
));
7642 if (wizard
|| !rn2(10) || final
>= 1 ) sprintf(eos(buf
), " (%u)", u
.uswldtim
);
7643 #endif /*same like above --Amy */
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
));
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
)) {
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
;
7699 you_are("ineffectively protected");
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
));
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
));
7715 if (wizard
|| !rn2(10) || final
>= 1) sprintf(eos(buf
), " (%d)", u
.mtimedone
);
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");
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
));
7752 sprintf(buf
, "fighting with two %s",
7753 makeplural(body_part(HAND
)));
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" : "");
7764 if (wizard
|| !rn2(10) || final
>= 1 ) sprintf(eos(buf
), " (%d)", Luck
);
7765 #endif /*sometimes show your actual luck too --Amy */
7769 else if ((guaranteed
|| !rn2(10)) && (wizard
|| !rn2(10) || final
>= 1)) enl_msg("Your luck ", "is", "was", " zero");
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
);
7776 enl_msg("Bad luck ", "does", "did", " not time out for you");
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" :
7787 if (wizard
|| (!rn2(10)) || final
>= 1 ) sprintf(eos(buf
), " (%ld)", u
.uhealbonus
);
7792 else if (wizard
) enl_msg("Your health bonus ", "is", "was", " zero");
7795 if ((guaranteed
|| !rn2(10)) && recalc_mana() )
7797 sprintf(buf
, "%s mana", recalc_mana() > 0 ? "extra" :
7800 if (wizard
|| (!rn2(10)) || final
>= 1 ) sprintf(eos(buf
), " (%d)", recalc_mana() );
7805 else if (wizard
) enl_msg("Your mana bonus ", "is", "was", " zero");
7807 if (guaranteed
|| !rn2(10)) {
7808 sprintf(buf
, "spell retention for remembering %d spells", urole
.spelrete
);
7812 if ((guaranteed
|| !rn2(10)) && u
.ugangr
) {
7813 sprintf(buf
, " %sangry with you",
7814 u
.ugangr
> 6 ? "extremely " : u
.ugangr
> 3 ? "very " : "");
7816 if (wizard
|| (!rn2(10)) || final
>= 1 ) sprintf(eos(buf
), " (%d)", u
.ugangr
);
7818 enl_msg(u_gname(), " is", " was", buf
);
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 ");*/
7835 if (wizard
|| (!rn2(10)) || final
>= 1 ) sprintf(eos(buf
), " (%d)", u
.ublesscnt
);
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 ");
7848 if (wizard
) sprintf(eos(buf
), " (%d)", u
.unextuse
);
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
);
7868 } else { /* game ended in character's death */
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
));
7878 if (p
) enl_msg(You_
, "have been killed ", p
, buf
);
7881 display_nhwindow(en_win
, TRUE
);
7882 destroy_nhwindow(en_win
);
7886 const char * const encx_stat
[] = {
7895 const char *hux_stat
[] = {
7907 dump_enlightenment(final
)
7913 const char *enc_stat
[] = { /* copied from botl.c */
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");
7941 if (flags
.gmmode
) dump(youwere
, "playing in game master mode");
7942 if (flags
.supergmmode
) dump(youwere
, "playing in super game master mode");
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"
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
));
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
));
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
);
8731 sprintf(buf
, " %d", u
.tsloss_str
);
8732 dump(" Your strength was temporarily reduced by", buf
);
8735 sprintf(buf
, " %d", u
.tsloss_dex
);
8736 dump(" Your dexterity was temporarily reduced by", buf
);
8739 sprintf(buf
, " %d", u
.tsloss_con
);
8740 dump(" Your constitution was temporarily reduced by", buf
);
8743 sprintf(buf
, " %d", u
.tsloss_wis
);
8744 dump(" Your wisdom was temporarily reduced by", buf
);
8747 sprintf(buf
, " %d", u
.tsloss_int
);
8748 dump(" Your intelligence was temporarily reduced by", buf
);
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
);
8791 sprintf(buf
, "boosted");
8792 sprintf(eos(buf
), " (%d)", u
.boosttimer
);
8799 sprintf(buf
, "paralyzed");
8800 sprintf(eos(buf
), " (%d)", multi
);
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
);
8819 if (HeavyStunned
) sprintf(buf
, "badly stunned");
8820 else sprintf(buf
, "stunned");
8821 sprintf(eos(buf
), " (%ld)", HStun
);
8825 if (HeavyConfusion
) sprintf(buf
, "badly confused");
8826 else sprintf(buf
, "confused");
8827 sprintf(eos(buf
), " (%ld)", HConfusion
);
8831 if (HeavyBlind
) sprintf(buf
, "badly blinded");
8832 else sprintf(buf
, "blinded");
8833 sprintf(eos(buf
), " (%ld)", Blinded
);
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
);
8844 sprintf(buf
, "nauseated");
8845 sprintf(eos(buf
), " (%ld)", Vomiting
);
8849 if (HeavyFeared
) sprintf(buf
, "stricken with very strong fear");
8850 else sprintf(buf
, "stricken with fear");
8851 sprintf(eos(buf
), " (%ld)", HFeared
);
8855 if (HeavyNumbed
) sprintf(buf
, "badly numbed");
8856 else sprintf(buf
, "numbed");
8857 sprintf(eos(buf
), " (%ld)", HNumbed
);
8861 if (HeavyFrozen
) sprintf(buf
, "frozen rigid and solid");
8862 else sprintf(buf
, "frozen solid");
8863 sprintf(eos(buf
), " (%ld)", HFrozen
);
8867 if (u
.hanguppenalty
) {
8868 sprintf(buf
, "temporarily slower because you tried to hangup cheat");
8869 sprintf(eos(buf
), " (%d)", u
.hanguppenalty
);
8874 if (HeavyBurned
) sprintf(buf
, "badly burned");
8875 else sprintf(buf
, "burned");
8876 sprintf(eos(buf
), " (%ld)", HBurned
);
8881 if (HeavyDimmed
) sprintf(buf
, "badly dimmed");
8882 else sprintf(buf
, "dimmed");
8883 sprintf(eos(buf
), " (%ld)", HDimmed
);
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");
8894 sprintf(buf
, "turning to stone");
8895 sprintf(eos(buf
), " (%ld)", Stoned
);
8899 sprintf(buf
, "turning into slime");
8900 sprintf(eos(buf
), " (%ld)", Slimed
);
8904 sprintf(buf
, (u
.uburied
) ? "buried" : "being strangled");
8905 sprintf(eos(buf
), " (%ld)", Strangled
);
8909 sprintf(buf
, "bleeding");
8910 sprintf(eos(buf
), " (%ld)", PlayerBleeds
);
8914 sprintf(buf
, "going to die prematurely");
8919 sprintf(buf
, "slippery %s", makeplural(body_part(FINGER
)));
8920 sprintf(eos(buf
), " (%ld)", Glib
);
8924 if (MenuBug
|| u
.uprops
[MENU_LOST
].extrinsic
|| have_menubugstone()) {
8925 sprintf(buf
, "the menu bug.");
8926 sprintf(eos(buf
), " (%ld)", MenuBug
);
8929 if (SpeedBug
|| u
.uprops
[SPEED_BUG
].extrinsic
|| have_speedbugstone()) {
8930 sprintf(buf
, "the speed bug.");
8931 sprintf(eos(buf
), " (%ld)", SpeedBug
);
8934 if (Superscroller
|| u
.uprops
[SUPERSCROLLER_ACTIVE
].extrinsic
|| have_superscrollerstone()) {
8935 sprintf(buf
, "the superscroller.");
8936 sprintf(eos(buf
), " (%ld)", Superscroller
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
8989 if (Thirst
|| u
.uprops
[THIRST
].extrinsic
|| have_thirststone()) {
8990 sprintf(buf
, "a strong sense of thirst.");
8991 sprintf(eos(buf
), " (%ld)", Thirst
);
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
);
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
);
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
);
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
);
9014 if (have_morgothiancurse() ) {
9015 sprintf(buf
, "afflicted by the Ancient Morgothian Curse.");
9018 if (have_topiylinencurse() ) {
9019 sprintf(buf
, "afflicted by Topi Ylinen's Curse, a.k.a. the Ancient Foul Curse.");
9022 if (have_blackbreathcurse() ) {
9023 sprintf(buf
, "filled with the Black Breath.");
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
);
9032 if (Deafness
|| u
.uprops
[DEAFNESS
].extrinsic
|| have_deafnessstone()) {
9033 sprintf(buf
, "a hearing break.");
9034 sprintf(eos(buf
), " (%ld)", Deafness
);
9037 if (CasterProblem
|| u
.uprops
[CASTER_PROBLEM
].extrinsic
|| have_antimagicstone()) {
9038 sprintf(buf
, "blood mana.");
9039 sprintf(eos(buf
), " (%ld)", CasterProblem
);
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
);
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
);
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
);
9057 if (ConfusionProblem
|| u
.uprops
[CONFUSION_PROBLEM
].extrinsic
|| have_confusionstone()) {
9058 sprintf(buf
, "a confusing problem.");
9059 sprintf(eos(buf
), " (%ld)", ConfusionProblem
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
9367 if (BadPartBug
|| u
.uprops
[BAD_PARTS
].extrinsic
|| have_badpartstone()) {
9368 sprintf(buf
, "in the bad part.");
9369 sprintf(eos(buf
), " (%ld)", BadPartBug
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
));
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
10260 if (BigscriptEffect
|| u
.uprops
[BIGSCRIPT
].extrinsic
|| have_bigscriptstone()) {
10261 sprintf(buf
, "BIGscript.");
10262 sprintf(eos(buf
), " (%ld)", BigscriptEffect
);
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
);
10272 if (u
.bankcashamount
) {
10273 sprintf(buf
, "the following amount of cash stored in the bank:");
10274 sprintf(eos(buf
), " %d", u
.bankcashamount
);
10277 if (u
.bankcashlimit
) {
10278 sprintf(buf
, "the following bank cash limit:");
10279 sprintf(eos(buf
), " %d", u
.bankcashlimit
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
10394 sprintf(buf
, "reduced magic cancellation.");
10395 sprintf(eos(buf
), " (%ld)", MCReduction
);
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
);
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
);
10437 if (u
.uprops
[TELEPORTING_ITEMS
].extrinsic
|| TeleportingItems
|| have_itemportstone() ) {
10438 sprintf(buf
, "teleporting items");
10439 sprintf(eos(buf
), " (%ld)", TeleportingItems
);
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
);
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
);
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
);
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
);
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
);
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
);
10533 if (u
.uprops
[CRAP_EFFECT
].extrinsic
|| CrapEffect
|| have_shitstone() ) {
10534 sprintf(buf
, "diarrhea");
10535 sprintf(eos(buf
), " (%ld)", CrapEffect
);
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
);
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
);
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
);
10587 if (u
.graundweight
) {
10588 sprintf(buf
, "burdened by some dead weight.");
10589 sprintf(eos(buf
), " (%d)", u
.graundweight
);
10590 dump(youwere
, buf
);
10594 sprintf(buf
, "to wait until you could use staircases again.");
10595 sprintf(eos(buf
), " (%ld)", NoStaircase
);
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
);
10611 if (u
.sokosolveuntrap
&& issokosolver
) {
10612 sprintf(buf
, "to wait until you can disarm traps again.");
10613 sprintf(eos(buf
), " (%d)", u
.sokosolveuntrap
);
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
);
11250 if (Race_if(PM_PERVERT
)) {
11251 sprintf(buf
, "prayed the last time this many turns ago:");
11252 sprintf(eos(buf
), " %d", u
.pervertpray
);
11256 if (u
.elberethcheese
) {
11257 sprintf(buf
, "experiencing reduced Elbereth effectiveness");
11258 sprintf(eos(buf
), " (%d)", u
.elberethcheese
);
11259 dump(youwere
, buf
);
11263 sprintf(buf
, "%d points of BUC expertise", u
.bucskill
);
11266 if (u
.enchantrecskill
) {
11267 sprintf(buf
, "%d points of enchantment expertise", u
.enchantrecskill
);
11270 if (u
.weapchantrecskill
) {
11271 sprintf(buf
, "%d points of weapon enchantment expertise", u
.weapchantrecskill
);
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
);
11282 if (Race_if(PM_FELID
)) {
11283 sprintf(buf
, "%d ", u
.felidlives
);
11284 sprintf(eos(buf
), "lives left");
11287 if (u
.homosexual
== 0) {
11288 sprintf(buf
, "not decided on your sexuality yet");
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.");
11310 sprintf(buf
, "%ld ", (u
.hussykillturn
- moves
));
11311 sprintf(eos(buf
), "turns left to defeat a guy.");
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
);
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
);
11370 sprintf(buf
, "stopped the flow of time.");
11371 sprintf(eos(buf
), " (%ld)", TimeStopped
);
11375 if (u
.drippingtread
) {
11376 sprintf(buf
, "dripping elements.");
11377 sprintf(eos(buf
), " (%d)", u
.drippingtread
);
11378 dump(youwere
, buf
);
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
);
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
);
11405 if (u
.holyshield
) {
11406 sprintf(buf
, "your holy shield up.");
11407 sprintf(eos(buf
), " (%d)", u
.holyshield
);
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
);
11423 if (u
.combatcommand
) {
11424 sprintf(buf
, "used the combat command.");
11425 sprintf(eos(buf
), " (%d)", u
.combatcommand
);
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
);
11453 if (u
.nailpolish
) {
11454 sprintf(buf
, "applied nail polish.");
11455 sprintf(eos(buf
), " (%d)", u
.nailpolish
);
11459 if (u
.enchantspell
) {
11460 sprintf(buf
, "enchanted your weapon with fire.");
11461 sprintf(eos(buf
), " (%d)", u
.enchantspell
);
11465 if (u
.thornspell
) {
11466 sprintf(buf
, "thorns.");
11467 sprintf(eos(buf
), " (%d)", u
.thornspell
);
11471 if (u
.egglayingtimeout
) {
11472 sprintf(buf
, "to wait until you can lay eggs again.");
11473 sprintf(eos(buf
), " (%d)", u
.egglayingtimeout
);
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
);
11489 if (u
.horsehopturns
) {
11490 sprintf(buf
, "the ability to jump as long as you're riding.");
11491 sprintf(eos(buf
), " (%d)", u
.horsehopturns
);
11495 if (u
.bodyfluideffect
) {
11496 sprintf(buf
, "very acidic skin.");
11497 sprintf(eos(buf
), " (%d)", u
.bodyfluideffect
);
11501 if (u
.antitelespelltimeout
) {
11502 sprintf(buf
, "erected an anti-teleportation field.");
11503 sprintf(eos(buf
), " (%d)", u
.antitelespelltimeout
);
11507 if (u
.breathenhancetimer
) {
11508 sprintf(buf
, "magically enhanced breath.");
11509 sprintf(eos(buf
), " (%d)", u
.breathenhancetimer
);
11513 if (u
.snaildigging
) {
11514 sprintf(buf
, "to wait until you can fire another digging ray.");
11515 sprintf(eos(buf
), " (%d)", u
.snaildigging
);
11519 if (u
.hussyperfume
) {
11520 sprintf(buf
, "to wait until you can spread the perfume again.");
11521 sprintf(eos(buf
), " (%d)", u
.hussyperfume
);
11525 if (u
.irahapoison
) {
11526 sprintf(buf
, "to wait until you can poison your weapon again.");
11527 sprintf(eos(buf
), " (%d)", u
.irahapoison
);
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
);
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
);
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
);
11555 if (u
.acutraining
) {
11556 sprintf(buf
, "double skill training.");
11557 sprintf(eos(buf
), " (%d)", u
.acutraining
);
11561 if (u
.dragonpolymorphtime
) {
11562 sprintf(buf
, "to wait until you can polymorph into a dragon again.");
11563 sprintf(eos(buf
), " (%d)", u
.dragonpolymorphtime
);
11567 if (u
.werepolymorphtime
) {
11568 sprintf(buf
, "to wait until you can polymorph into a werecreature again.");
11569 sprintf(eos(buf
), " (%d)", u
.werepolymorphtime
);
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.");
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
);
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
);
11660 sprintf(buf
, "prevented from having telepathy");
11661 sprintf(eos(buf
), " (%ld)", u
.uprops
[DEAC_TELEPAT
].intrinsic
);
11662 dump(youwere
, buf
);
11665 sprintf(buf
, "prevented from having warning");
11666 sprintf(eos(buf
), " (%ld)", u
.uprops
[DEAC_WARNING
].intrinsic
);
11667 dump(youwere
, buf
);
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
);
11690 sprintf(buf
, "prevented from having invisibility");
11691 sprintf(eos(buf
), " (%ld)", u
.uprops
[DEAC_INVIS
].intrinsic
);
11692 dump(youwere
, buf
);
11695 sprintf(buf
, "prevented from having displacement");
11696 sprintf(eos(buf
), " (%ld)", u
.uprops
[DEAC_DISPLACED
].intrinsic
);
11697 dump(youwere
, buf
);
11700 sprintf(buf
, "prevented from having stealth");
11701 sprintf(eos(buf
), " (%ld)", u
.uprops
[DEAC_STEALTH
].intrinsic
);
11702 dump(youwere
, buf
);
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
);
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
);
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
);
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
);
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
);
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
);
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;
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");
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
);
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");
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
);
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" :
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");
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");
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
);
12243 /*** Appearance and behavior ***/
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
;
12251 dump(youwere
, "poorly adorned");
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");
12279 sprintf(buf
, "levitating, at will");
12280 sprintf(eos(buf
), " (%ld)", HLevitation
);
12281 dump(youwere
, buf
);
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
);
12301 sprintf(buf
, "swallowed by %s", a_monnam(u
.ustuck
));
12303 if (wizard
) sprintf(eos(buf
), " (%u)", u
.uswldtim
);
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())
12316 enlght_combatinc("to hit", increase_accuracy_bonus_value(), final
, buf
));
12317 if (increase_damage_bonus_value())
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
) {
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
;
12363 dump(youwere
, "ineffectively protected");
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
));
12380 if (wizard
) sprintf(eos(buf
), " (%d)", u
.mtimedone
);
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
);
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");
12406 dump(" ", "Your life would have been saved");
12408 dump(" ", "You would have been given a second chance");
12410 dump(" ", "The next damage you took would have been nullified");
12411 if (u
.twoweap
) dump(youwere
, "wielding two weapons at once");
12413 /*** Miscellany ***/
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
);
12427 dump(" ", "Bad luck did not time out for you");
12429 dump(" ", "Good luck did not time out for you");
12434 sprintf(buf
, "%s health", u
.uhealbonus
> 0 ? "extra" :
12436 sprintf(eos(buf
), " (%ld)", u
.uhealbonus
);
12439 else dump(" ", "Your health bonus was zero");
12441 if (recalc_mana() )
12443 sprintf(buf
, "%s mana", recalc_mana() > 0 ? "extra" :
12445 sprintf(eos(buf
), " (%d)", recalc_mana() );
12448 else dump(" ", "Your mana bonus was zero");
12450 sprintf(buf
, "spell retention for remembering %d spells", urole
.spelrete
);
12453 sprintf(buf
, "Your pantheon consisted of %s, %s and %s", align_gname(A_LAWFUL
), align_gname(A_NEUTRAL
), align_gname(A_CHAOTIC
) );
12456 sprintf(buf
, "Your deity was %s", u_gname());
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);
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
);
12478 sprintf(buf
, "You could %s have safely prayed", u
.ugangr
? "not " : can_pray(FALSE
) ? "" : "not ");
12479 sprintf(eos(buf
), " (%d)", u
.ublesscnt
);
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
);
12496 } else { /* game ended in character's death */
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
));
12507 sprintf(buf2
, "You %s %s", p
, buf
);
12514 } /* dump_enlightenment */
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.
12523 minimal_enlightenment()
12526 char statline
[BUFSZ
];
12529 char xtrabuf
[BUFSZ
];
12531 if (TheInfoIsFucked
) {
12532 pline("Somehow the information is fucked up and won't display.");
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, ");
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 ") : "", );
12659 menu_item
*selected
;
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
;
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
);
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
);
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
);
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
);
12765 if (!minimal_enlightenment())
12768 enlightenment(0, 1);
12769 else if (discover
&& (yn("Show the attributes screen?") == 'y') )
12770 enlightenment(0, 1);
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"},
12781 {'S', TRUE
, dosave
, "Save"},
12782 {'q', TRUE
, done2
, "Quit [M-q]"},
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"},
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"},
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]"},
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"},
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"},
12865 {'&', TRUE
, wiz_debug_cmd
, "wizard debug command"},
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"},
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"},
12886 {'w', TRUE
, (void *)0, "Wizard"},
12888 {'?', TRUE
, (void *)0, "Help"},
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"},
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
},
12906 {"Wizard", "Main Menu", wizard_menu
},
12908 {"Help", "Main Menu", help_menu
},
12909 {"Main Menu",(char *)0, main_menu
},
12914 makemenu(menuname
, menu_struct
)
12915 const char *menuname
;
12916 struct menu_list menu_struct
[];
12920 menu_item
*selected
;
12921 int n
, i
, (*func
)(void);
12922 const struct menu_tab
*current_menu
;
12925 win
= create_nhwindow(NHW_MENU
);
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;
12934 if (!wizard
&& !current_menu
[n
].m_funct
&& !strcmp(current_menu
[n
].m_item
,"Wizard")) continue;
12936 if (current_menu
[n
].m_char
== (char)0) {
12938 add_menu(win
, NO_GLYPH
, &any
, 0, 0, ATR_BOLD
,
12939 current_menu
[n
].m_item
, MENU_UNSELECTED
);
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
);
12948 end_menu(win
, menuname
);
12949 n
= select_menu(win
, PICK_ONE
, &selected
);
12950 destroy_nhwindow(win
);
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
));
12975 domenusystem() /* WAC add helpful menus ;B */
12977 return (makemenu("Main Menu", main_menustruct
));
12981 * (shares enlightenment's tense handling)
12990 /* format increased damage or chance to hit */
12992 enlght_combatinc(inctyp
, incamt
, final
, outbuf
)
12993 const char *inctyp
;
12998 const char *modif
, *bonus
;
13005 sprintf(numbuf
, "%s%d",
13006 (incamt
> 0) ? "+" : "", incamt
);
13007 modif
= (const char *) numbuf
;
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
;
13023 sprintf(outbuf
, "%s %s %s", an(modif
), bonus
, inctyp
);
13028 show_conduct(final
)
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
));
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
));
13056 sprintf(buf
, "eaten food with animal by-products %ld time%s",
13057 u
.uconduct
.unvegan
, plur(u
.uconduct
.unvegan
));
13062 sprintf(buf
, "eaten %ld time%s",
13063 u
.uconduct
.food
, plur(u
.uconduct
.food
));
13065 sprintf(buf
, "eaten food with animal by-products %ld time%s",
13066 u
.uconduct
.unvegan
, plur(u
.uconduct
.unvegan
));
13068 sprintf(buf
, "eaten meat %ld time%s",
13069 u
.uconduct
.unvegetarian
, plur(u
.uconduct
.unvegetarian
));
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
));
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
));
13088 if (!u
.uconduct
.weaphit
)
13089 you_have_never("hit with a wielded weapon");
13091 sprintf(buf
, "used a wielded weapon %ld time%s",
13092 u
.uconduct
.weaphit
, plur(u
.uconduct
.weaphit
));
13095 if (!u
.uconduct
.killer
)
13096 you_have_been("a pacifist");
13098 sprintf(buf
, "killed %ld monster%s",
13099 u
.uconduct
.killer
, plur(u
.uconduct
.killer
));
13104 if (!u
.uconduct
.literate
)
13105 you_have_been("illiterate");
13107 sprintf(buf
, "read items or engraved %ld time%s",
13108 u
.uconduct
.literate
, plur(u
.uconduct
.literate
));
13112 ngenocided
= num_genocides();
13113 if (ngenocided
== 0) {
13114 you_have_never("genocided any monsters");
13116 sprintf(buf
, "genocided %d type%s of monster%s",
13117 ngenocided
, plur(ngenocided
), plur(ngenocided
));
13121 if (!u
.uconduct
.polypiles
)
13122 you_have_never("polymorphed an object");
13124 sprintf(buf
, "polymorphed %ld item%s",
13125 u
.uconduct
.polypiles
, plur(u
.uconduct
.polypiles
));
13129 if (!u
.uconduct
.polyselfs
)
13130 you_have_never("changed form");
13132 sprintf(buf
, "changed form %ld time%s",
13133 u
.uconduct
.polyselfs
, plur(u
.uconduct
.polyselfs
));
13137 if (!u
.uconduct
.wishes
)
13138 you_have_X("used no wishes");
13140 sprintf(buf
, "used %ld wish%s",
13141 u
.uconduct
.wishes
, (u
.uconduct
.wishes
> 1L) ? "es" : "");
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");
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
);
13249 sprintf(buf
, "%d", u
.cnd_minalignment
);
13250 enl_msg(You_
, "had a minimum alignment of ", "had a minimum alignment of ", buf
);
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
);
14024 dump_conduct(final
)
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
));
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
));
14051 if (u
.uconduct
.unvegetarian
) {
14052 sprintf(buf
, " You eaten meat %ld time%s",
14053 u
.uconduct
.unvegetarian
, plur(u
.uconduct
.unvegetarian
));
14057 if (!u
.uconduct
.gnostic
)
14058 dump("", " You were an atheist");
14060 sprintf(buf
, " You have communicated with the gods %ld time%s",
14061 u
.uconduct
.gnostic
, plur(u
.uconduct
.gnostic
));
14065 if (!u
.uconduct
.praydone
)
14066 dump("", " You never prayed to the gods");
14068 sprintf(buf
, " You prayed to the gods %ld time%s",
14069 u
.uconduct
.praydone
, plur(u
.uconduct
.praydone
));
14073 if (!u
.uconduct
.weaphit
)
14074 dump("", " You never hit with a wielded weapon");
14076 sprintf(buf
, " You hit with a wielded weapon %ld time%s",
14077 u
.uconduct
.weaphit
, plur(u
.uconduct
.weaphit
));
14081 if (!u
.uconduct
.killer
)
14082 dump("", " You were a pacifist");
14084 sprintf(buf
, " You killed %ld monster%s",
14085 u
.uconduct
.killer
, plur(u
.uconduct
.killer
));
14089 if (!u
.uconduct
.literate
)
14090 dump("", " You were illiterate");
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");
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");
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");
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");
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");
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");
14805 #endif /* DUMP_LOG */
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. */
14818 # define M(c) (0x80 | (c))
14820 # define M(c) ((c) - 128)
14821 # endif /* NHSTDC */
14823 #define ISMETA(c) (((c) & 0x80) != 0)
14824 #define UNMETA(c) ((c) & 0x7f)
14827 #define C(c) (0x1f & (c))
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
},
14852 {"borg", "enable borg mode", doborgtoggle
, IFBURIED
, AUTOCOMPLETE
},
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
},
14860 // {"ethics", "list which challenges you have adhered to", doethics, TRUE},
14861 {"ethics", "list which challenges you have adhered to", doethics
, !IFBURIED
, AUTOCOMPLETE
},
14863 #ifndef PUBLIC_SERVER
14864 {"explore", "enter explore mode", enter_explore_mode
, IFBURIED
, !AUTOCOMPLETE
},
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
},
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
14931 #ifndef PUBLIC_SERVER
14932 {"shell", "do a shell escape (only if defined)", dosh
, IFBURIED
},
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
},
14954 {"sit", "sit down", dosit
, !IFBURIED
, AUTOCOMPLETE
},
14956 {"shout", "say something loud", doyell
, !IFBURIED
, AUTOCOMPLETE
}, /* jrn */
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 */
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 */
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 */
14985 {(char *)0, (char *)0, donull
, TRUE
}, /* #portdebug */
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 */
14992 {(char *)0, (char *)0, donull
, TRUE
}, /* #wizdebug */
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 */
15007 {(char *)0, (char *)0, donull
, TRUE
} /* sentinel */
15010 /* important: BLANK ENTRIES HAVE TO BE ABOVE OR CRASH --Amy */
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
},
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
},
15027 {"portdebug", "wizard port debug command", wiz_port_debug
, IFBURIED
, AUTOCOMPLETE
},
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
},
15034 {"wizdebug", "wizard debug command", wiz_debug_cmd
, IFBURIED
, AUTOCOMPLETE
},
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 */
15056 bind_key(key
, 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
;
15068 for(extcmd
= extcmdlist
; extcmd
->ef_txt
; extcmd
++) {
15069 if (strcmp(command
, extcmd
->ef_txt
)) continue;
15070 cmdlist
[key
].bind_cmd
= extcmd
;
15074 pline("Bad command %s matched with key %c (ASCII %i). "
15075 "Ignoring command.\n", command
, key
, key
);
15080 init_bind_list(void)
15082 bind_key(C('d'), "kick" ); /* "D" is for door!...? Msg is in dokick.c */
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" );
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" );
15107 if (iflags
.qwertz_layout
) {
15108 bind_key(C('y'), "suspend" );
15110 bind_key(C('z'), "suspend" );
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" );
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" );
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" );
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
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
);
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().
15249 add_debug_extended_commands()
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 */
15265 char buf
[BUFSZ
], buf2
[BUFSZ
];
15267 boolean keys_used
[256] = {0};
15268 register const char* dir_keys
;
15271 char* dir_desc
[10] = {"move west",
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
++) {
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 */
15349 putstr(datawin
, 0, "^c\tbreak out of nethack (SIGINT)");
15350 keys_used
[C('c')] = TRUE
;
15351 if (!iflags
.num_pad
) putstr(datawin
, 0, "");
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
;
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
),
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
[] = "------------------ ----- ------";
15387 count_obj(chain
, total_count
, total_size
, top
, recurse
)
15397 for (count
= size
= 0, obj
= chain
; obj
; obj
= obj
->nobj
) {
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
;
15410 obj_chain(win
, src
, chain
, total_count
, total_size
)
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
);
15428 mon_invent_chain(win
, src
, chain
, total_count
, total_size
)
15431 struct monst
*chain
;
15436 long count
= 0, size
= 0;
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
);
15448 contained(win
, src
, total_count
, total_size
)
15455 long count
= 0, size
= 0;
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
);
15475 mon_chain(win
, src
, chain
, total_count
, total_size
)
15478 struct monst
*chain
;
15486 for (count
= size
= 0, mon
= chain
; mon
; mon
= mon
->nmon
) {
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.
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
);
15552 display_nhwindow(win
, FALSE
);
15553 destroy_nhwindow(win
);
15560 obj_sanity_check();
15561 timer_sanity_check();
15564 #ifdef DISPLAY_LAYERS
15566 * Detail contents of each display layer at specified location(s).
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
));
15597 sprintf(buf
, "Object: %s corpse", mons
[lev
->mem_obj
- 1].mname
);
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
));
15626 sprintf(eos(buf
), "%s corpse", mons
[corpse
].mname
);
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
);
15634 sprintf(eos(buf
), "[%d]", glyph
);
15635 putstr(win
, 0, buf
);
15636 display_nhwindow(win
, FALSE
);
15637 destroy_nhwindow(win
);
15642 #ifdef DEBUG_MIGRATING_MONS
15648 struct permonst
*ptr
;
15649 struct monst
*mtmp
;
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
))
15656 while (mcount
> 0) {
15657 if (Is_stronghold(&u
.uz
))
15658 assign_level(&tolevel
, &valley_level
);
15660 get_level(&tolevel
, depth(&u
.uz
) + 1);
15662 mtmp
= makemon(ptr
, 0, 0, NO_MM_FLAGS
);
15663 if (mtmp
) migrate_to_level(mtmp
, ledger_no(&tolevel
),
15664 MIGR_RANDOM
, (coord
*)0);
15673 #endif /* WIZARD */
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
);
15686 commands_init(void)
15691 if (wizard
) add_debug_extended_commands();
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
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 */
15721 case 'm': /* can be mx, Mx, m-x, M-x */
15724 if(*txt
== '-' && txt
[1]) txt
++;
15725 if (txt
[1]) return 0;
15727 case 'c': /* can be cx, Cx, ^x, c-x, C-x, ^-x */
15731 if(*txt
== '-' && txt
[1]) txt
++;
15732 if (txt
[1]) return 0;
15736 /* ascii codes: must be three-digit decimal */
15737 if (*txt
>= '0' && *txt
<= '9') {
15740 for(i
= 0; i
< 3; i
++) {
15741 if(txt
[i
]<'0' || txt
[i
]>'9') return 0;
15742 key
= 10 * key
+ txt
[i
]-'0';
15750 /* returns the text for a one-byte encoding
15751 * must be shorter than a tab for proper formatting */
15755 char* txt
; /* sufficiently long buffer */
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 ~ */
15770 sprintf(txt
, "A-%i", c
); /* arbitrary ascii combinations */
15774 /* returns the text for a string of one-byte encodings */
15783 (void) key2txt(*s
, buf
);
15794 /* strips leading and trailing whitespace */
15800 while (isspace(*txt
)) txt
++;
15802 while (--end
>= txt
&& isspace(*end
)) *end
= 0;
15807 parsebindings(bindings
)
15808 /* closely follows parseoptions in options.c */
15813 struct binding_list_tab
*newbinding
= NULL
;
15815 /* break off first binding from the rest; parse the rest */
15816 if ((bind
= index(bindings
, ',')) != 0) {
15818 parsebindings(bind
);
15821 /* parse a single binding: first split around : */
15822 if (! (bind
= index(bindings
, ':'))) return; /* it's not a binding */
15825 /* read the key to be bound */
15826 key
= txt2key(bindings
);
15828 raw_printf("Bad binding %s.", bindings
);
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
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
;
15848 parseautocomplete(autocomplete
,condition
)
15849 /* closesly follows parsebindings and parseoptions */
15850 char* autocomplete
;
15853 register char *autoc
;
15856 /* break off first autocomplete from the rest; parse the rest */
15857 if ((autoc
= index(autocomplete
, ','))
15858 || (autoc
= index(autocomplete
, ':'))) {
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 ! */
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
;
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
;
15895 /* not a real extended command */
15896 raw_printf ("Bad autocomplete: invalid extended command '%s'.", autocomplete
);
15903 static unsigned i
= 0;
15917 c
= (char) rn1('~' - ' ' + 1, ' ');
15920 c
= (char) (rn2(2) ? '\t' : ' ');
15923 c
= (char) rn1('z' - 'a' + 1, 'a');
15926 c
= (char) rn1('Z' - 'A' + 1, 'A');
15932 c
= (char) rn1('9' - '0' + 1, '0');
15935 /* any char, but avoid '\0' because it's used for mouse click */
15936 c
= (char) rnd(iflags
.wc_eight_bit_input
? 255 : 127);
15945 register char *cmd
;
15947 boolean do_walk
, do_rush
, prefix_seen
, bad_command
,
15948 firsttime
= (cmd
== 0);
15950 iflags
.menu_requested
= FALSE
;
15952 if (program_state
.done_hup
)
15960 if (*cmd
&& (LagBugEffect
|| u
.uprops
[LAG_BUG
].extrinsic
|| have_lagstone()) && !rn2(LagEffectXtra
? 2 : 3) ) {
15961 flags
.move
= FALSE
;
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
)) {
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;
15999 u
.dx
= !rn2(3) ? -1 : !rn2(2) ? 0 : 1;
16000 u
.dy
= !rn2(3) ? -1 : !rn2(2) ? 0 : 1;
16004 } else { switch (rnd(34)) {
16076 if (*cmd
&& !u
.hangupcheat
) {
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
;
16088 flags
.move
= FALSE
;
16092 if (*cmd
== DOAGAIN
&& !in_doagain
&& saveq
[0]) {
16095 rhack((char *)0); /* read and execute command */
16096 in_doagain
= FALSE
;
16099 /* Special case of *cmd == ' ' handled better below */
16100 if(!*cmd
|| *cmd
== (char)0377) {
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.
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
;
16132 if (movecmd(cmd
[1])) {
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
;
16150 if (movecmd(lowc(cmd
[1]))) {
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;
16166 prefix_seen
= TRUE
;
16167 } else if (*cmd
== DONOPICKUP
) {
16168 if (movecmd(cmd
[1]) || u
.dz
) {
16171 if (!u
.dz
) do_walk
= TRUE
;
16172 else cmd
[0] = cmd
[1]; /* "m<" or "m>" */
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
;
16187 if (movecmd(lowc(cmd
[1]))) {
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
;
16197 } else if (*cmd
== CMD_TRAVEL
&& iflags
.travelcmd
) {
16199 iflags
.travel1
= 1;
16204 if (movecmd(*cmd
)) { /* ordinary movement */
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
;
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
;
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
;
16247 if (multi
) flags
.mv
= TRUE
;
16249 flags
.forcefight
= 0;
16251 } else if (do_rush
) {
16253 if (!multi
) multi
= max(COLNO
,ROWNO
);
16254 u
.last_str_turn
= 0;
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 */
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!");
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 */
16280 flags
.move
= FALSE
;
16285 /* if we reach here, cmd wasn't found in cmdlist[] */
16286 bad_command
= TRUE
;
16290 register char *cp
= expcmd
;
16292 while (*cmd
&& (int)(cp
- expcmd
) < (int)(sizeof expcmd
- 3)) {
16293 if (*cmd
>= 040 && *cmd
< 0177) {
16295 } else if (*cmd
& 0200) {
16298 *cp
++ = *cmd
++ &= ~0200;
16301 *cp
++ = *cmd
++ ^ 0100;
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.");
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.");
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
;
16360 flags
.move
= FALSE
;
16366 xytod(x
, y
) /* convert an x,y pair into a direction code */
16371 for(dd
= 0; dd
< 8; dd
++)
16372 if(x
== xdir
[dd
] && y
== ydir
[dd
]) return dd
;
16378 dtoxy(cc
,dd
) /* convert a direction code into an x,y pair */
16388 movecmd(sym
) /* also sets u.dz, but returns false for <> */
16391 register const char *dp
;
16392 register const char *sdp
;
16393 if(iflags
.num_pad
) sdp
= ndir
; else sdp
= sdir
; /* DICE workaround */
16396 dp
= index(sdp
, sym
);
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
) ) {
16410 if (ClockwiseSpinBug
|| u
.uprops
[CLOCKWISE_SPIN_BUG
].extrinsic
|| have_clockwisestone() ) {
16412 if (u
.dx
== 1 && !u
.dy
) {
16414 } else if (u
.dx
== 1 && u
.dy
== 1) {
16416 } else if (!u
.dx
&& u
.dy
== -1) {
16418 } else if (u
.dx
== -1 && u
.dy
== -1) {
16420 } else if (u
.dx
== -1 && !u
.dy
) {
16422 } else if (u
.dx
== -1 && u
.dy
== 1) {
16424 } else if (!u
.dx
&& u
.dy
== 1) {
16426 } else if (u
.dx
== 1 && u
.dy
== -1) {
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) {
16438 } else if (!u
.dx
&& u
.dy
== -1) {
16439 u
.dx
= -1; u
.dy
= 0;
16440 } else if (u
.dx
== -1 && 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) {
16446 } else if (!u
.dx
&& u
.dy
== 1) {
16447 u
.dx
= 1; u
.dy
= 0;
16448 } else if (u
.dx
== 1 && u
.dy
== -1) {
16454 if ((uarmh
&& itemhasappearance(uarmh
, APP_HARDCORE_CLOTH
)) || Race_if(PM_SLYER_ALIEN
)) {
16455 boolean directionallowed
= TRUE
;
16457 switch (u
.trontrapdirection
) {
16459 if (u
.dx
== -1) directionallowed
= FALSE
;
16461 case 2: /* southeast */
16462 if ((u
.dx
== -1 || u
.dy
== -1) && u
.dx
!= 1 && u
.dy
!= 1) directionallowed
= FALSE
;
16464 case 3: /* north */
16465 if (u
.dy
== 1) directionallowed
= FALSE
;
16467 case 4: /* northwest */
16468 if ((u
.dx
== 1 || u
.dy
== 1) && u
.dx
!= -1 && u
.dy
!= -1) directionallowed
= FALSE
;
16471 if (u
.dx
== 1) directionallowed
= FALSE
;
16473 case 6: /* southwest */
16474 if ((u
.dx
== 1 || u
.dy
== -1) && u
.dx
!= -1 && u
.dy
!= 1) directionallowed
= FALSE
;
16476 case 7: /* south */
16477 if (u
.dy
== -1) directionallowed
= FALSE
;
16479 case 8: /* northeast */
16480 if ((u
.dx
== -1 || u
.dy
== 1) && u
.dx
!= 1 && u
.dy
!= -1) directionallowed
= FALSE
;
16484 if (!directionallowed
) {
16486 Norep("Impossible move, you're facing the wrong direction!");
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) ) ) {
16494 Norep("You can't use that direction!");
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) ) ) {
16501 Norep("You can't use the same direction twice in a row!");
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
) ) ) {
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
;
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...");
16539 if (cc
&& isok(new_x
,new_y
)) {
16543 if (emsg
) pline("%s", emsg
);
16554 /* WAC add dirsymbols to generic prompt */
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;
16570 sprintf(buf
, "In what direction? [%s]",
16571 (iflags
.num_pad
? ndir
: sdir
));
16573 if(in_doagain
|| *readchar_queue
)
16574 dirsym
= readchar();
16576 dirsym
= yn_function ((s
&& *s
!= '^') ? s
: buf
, (char *)0, '\0');
16577 } while (!movecmd(dirsym
) && !index(quitchars
, dirsym
)
16578 && dirsym
== '.' && dirsym
== 's' && !u
.dz
);
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!");
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();
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
;
16610 sprintf(buf
, "cmdassist: %s", msg
);
16611 putstr(win
, 0, buf
);
16612 putstr(win
, 0, "");
16616 ctrl
= (sym
- 'A') + 1;
16617 if ((expln
= dowhatdoes_core(ctrl
, buf2
))
16618 && (!index(wiz_only_list
, sym
)
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");
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");
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
);
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);
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
16712 click_to_cmd(x
, y
, mod
)
16716 static char cmd
[4];
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-- */
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-- */
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-- */
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-- */
16758 if (iflags
.travelcmd
) {
16759 if (abs(x
) <= 1 && abs(y
) <= 1 ) {
16760 x
= sgn(x
), y
= sgn(y
);
16764 cmd
[0] = CMD_TRAVEL
;
16768 if(x
== 0 && y
== 0) {
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');
16773 } else if(IS_THRONE(levl
[u
.ux
][u
.uy
].typ
)) {
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
)) {
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
)) {
16784 } else if(OBJ_AT(u
.ux
, u
.uy
)) {
16785 cmd
[0] = Is_container(level
.objects
[u
.ux
][u
.uy
]) ? M('l') : ',';
16788 return "."; /* just rest */
16792 /* directional commands */
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
]);
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
) {
16805 if (levl
[u
.ux
+x
][u
.uy
+y
].doormask
& D_CLOSED
) {
16810 if (levl
[u
.ux
+x
][u
.uy
+y
].typ
<= SCORR
) {
16817 /* convert without using floating point, allowing sloppy clicking */
16820 else if(y
> 2*abs(x
))
16822 else if(x
< -2*abs(y
))
16824 else if(y
< -2*abs(x
))
16827 x
= sgn(x
), y
= sgn(y
);
16829 if(x
== 0 && y
== 0) /* map click on player to "rest" command */
16835 /* move, attack, etc. */
16837 if(mod
== CLICK_1
) {
16838 cmd
[0] = (iflags
.num_pad
? ndir
[dir
] : sdir
[dir
]);
16840 cmd
[0] = (iflags
.num_pad
? M(ndir
[dir
]) :
16841 (sdir
[dir
] - 'a' + 'A')); /* run command */
16850 #ifdef LINT /* static char in_line[COLNO]; */
16851 char in_line
[COLNO
];
16853 static char in_line
[COLNO
];
16857 static char repeat_char
;
16858 boolean prezero
= FALSE
;
16862 flush_screen(1); /* Flush screen buffer. Put the cursor on the hero. */
16866 // TODO: implement kbhit for other windowports --ELR
16872 pline("Cyborg terminated.");
16878 /* [Tom] for those who occasionally go insane... */
16880 /* Sanity checks for repeat_hit */
16881 if (repeat_hit
< 0) repeat_hit
= 0;
16883 /* Don't want things to get too out of hand */
16884 if (repeat_hit
> 10) repeat_hit
= 10;
16887 in_line
[0] = repeat_char
;
16893 if (!iflags
.num_pad
|| (foo
= readchar()) == 'n')
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.");
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
;
16915 clear_nhwindow(WIN_MESSAGE
);
16916 sprintf(in_line
, "Count: %d", multi
);
16917 pline("%s", in_line
);
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
;
16931 last_multi
= multi
;
16932 savech(0); /* reset input queue */
16940 save_cm
= (char *)0;
16945 if (foo
== DORUSH
|| foo
== DORUN
|| foo
== DOFORCEFIGHT
16946 || foo
== DONOPICKUP
|| foo
== DORUN_NOPICKUP
16947 || (iflags
.num_pad
&& (foo
== '5' || foo
== '-'))) {
16953 clear_nhwindow(WIN_MESSAGE
);
16955 if (prezero
) in_line
[0] = DOESCAPE
;
16956 repeat_char
= in_line
[0];
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
++;
16976 sym
= in_doagain
? Getchar() : nh_poskey(&x
, &y
, &mod
);
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.
16988 clearerr(stdin
); /* omit if clearerr is undefined */
16990 } while (--cnt
&& sym
== EOF
);
16992 # endif /* NR_OF_EOFS */
16994 #ifdef HANGUPHANDLING
16995 hangup(0); /* call end_of_input() or set program_state.done_hup */
16998 #endif /* HANGUPHANDLING */
17003 readchar_queue
= click_to_cmd(x
, y
, mod
);
17004 sym
= *readchar_queue
++;
17006 return((char) sym
);
17013 if (MenuIsBugged
) {
17014 pline("The travel command is currently unavailable!");
17015 if (flags
.moreforced
&& !MessagesSuppressed
) display_nhwindow(WIN_MESSAGE
, TRUE
); /* --More-- */
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-- */
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-- */
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-- */
17047 /* Keyboard travel command */
17048 static char cmd
[2];
17051 if (!iflags
.travelcmd
) return 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 */
17060 if (!isok(cc
.x
, cc
.y
)) {
17064 pline("Where do you want to travel to?");
17065 if (getpos(&cc
, TRUE
, "the desired destination") < 0) {
17066 /* user pressed ESC */
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
;
17078 extern void win32con_debug_keystrokes(void);
17079 extern void win32con_handler_info(void);
17089 int num_menu_selections
;
17090 struct menu_selection_struct
{
17094 } menu_selections
[] = {
17096 {"test win32 keystrokes", "tty", win32con_debug_keystrokes
},
17097 {"show keystroke handler information", "tty",
17098 win32con_handler_info
},
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
))
17108 menu_item
*pick_list
;
17109 win
= create_nhwindow(NHW_MENU
);
17111 for (k
=0; k
< num_menu_selections
; ++k
) {
17112 if (strcmp(menu_selections
[k
].portname
,
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
);
17123 n
= pick_list
[0].item
.a_int
- 1;
17124 free((void *) pick_list
);
17125 /* execute the function */
17126 (*menu_selections
[n
].fn
)();
17129 pline("No port-specific debug capability defined.");
17132 # endif /*PORT_DEBUG*/
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.
17142 yn_function(query
,resp
, def
)
17143 const char *query
,*resp
;
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
);
17166 impossible("stefanje repair delay greater than zero! (%d)", delay
);
17174 if (uarmf
&& uarmf
->oartifact
== ART_STEFANJE_S_PROBLEM
&& (uarmf
->spe
< 0)) {
17176 pline("Your 'Stefanje' sandals are surrounded by a cyan glow.");
17178 pline("Somehow, your 'Stefanje' sandals are no longer there...");
17188 impossible("deseamshoes delay greater than zero! (%d)", delay
);
17197 pline("It seems that someone removed your shoes!");
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!");
17205 if (uarmf
&& uarmf
->oeroded
) {
17207 pline("You cleaned some of the dog shit from your shoes.");
17208 } else if (uarmf
&& uarmf
->oeroded2
) {
17210 pline("You cleaned some of the dog shit from your shoes.");