1 /* SCCS Id: @(#)sounds.c 3.4 2002/05/06 */
2 /* Copyright (c) 1989 Janet Walz, Mike Threepoint */
3 /* NetHack may be freely redistributed. See license for details. */
9 # ifdef USER_SOUNDS_REGEX
14 /* Hmm.... in working on SHOUT I started thinking about things.
15 * I think something like this should be set up:
16 * You_hear_mon(mon,loud, msg) - You_hear(msg); monnoise(mon,loud);
17 * monnoise(mon,loud) - wake_nearto(mon->mx,mon->my,mon->data->mlevel*loud)
19 * mon_say(mon,loud,msg) - verbalize(msg); sayeffects(mon,loud,msg);
20 * sayeffects(mon,loud,msg) - monnoise(mon,loud); + the pet stuff et al
21 * In fact, I think will set this up, but as a diff, not actually modifying the
23 * If I knew something about branches I might do that.
24 * But anyway, I should be working on petcommands now... maybe later...
30 static int domonnoise(struct monst
*);
31 static int dochat(void);
32 static const char *yelp_sound(struct monst
*);
33 static const char *whimper_sound(struct monst
*);
40 static int mon_in_room(struct monst
*,int);
42 /* this easily could be a macro, but it might overtax dumb compilers */
44 mon_in_room(mon
, rmtyp
)
48 int rno
= levl
[mon
->mx
][mon
->my
].roomno
;
50 return rooms
[rno
- ROOMOFFSET
].rtype
== rmtyp
;
53 /* JRN: converted above to macro */
54 # define mon_in_room(mon,rmtype) (rooms[ levl[(mon)->mx][(mon)->my].roomno \
55 - ROOMOFFSET].rtype == (rmtype))
58 static const char all_count
[] = { ALLOW_COUNT
, ALL_CLASSES
, 0 };
59 static const char allnoncount
[] = { ALL_CLASSES
, 0 };
60 STATIC_OVL NEARDATA
const char pawnables
[] = { ALLOW_COUNT
, GEM_CLASS
, 0 };
65 register struct mkroom
*sroom
;
66 register int hallu
, vx
, vy
;
67 #if defined(AMIGA) && defined(AZTEC_C_WORKAROUND)
72 if (!flags
.soundok
|| u
.uswallow
|| Underwater
) return;
74 hallu
= FunnyHallu
? 1 : 0;
76 if (level
.flags
.nfountains
&& !rn2(400)) {
77 static const char * const fountain_msg
[] = {
79 "water falling on coins.",
80 "the splashing of a naiad.",
82 "a nether voice.", /* the water demon */
83 "muffled hissing.", /* the water mocassins */
85 "a vampire complaining about the architecture!", /* they don't like running water */
86 "someone offering three wishes to a lucky person!", /* water demon being generous */
87 "the moaning noises of an adventurer caught in hot sexual pleasure with a nymph!",
88 "Indiana Jones screaming for help!", /* he's terribly afraid of snakes */
91 You_hear("%s", fountain_msg
[rn2(6+hallu
*5)]);
94 if (level
.flags
.nsinks
&& !rn2(300)) {
95 static const char * const sink_msg
[] = {
98 "a metallic plinking sound.",
102 "dishes being washed!",
103 "a neverending dripping sound that is driving you crazy!",
104 "someone getting in on the action with a hot foocubus!",
105 "something that gives you a sinking feeling.",
106 "something that gives you a sinking feeling, because sounds.c uses 'You_hear' instead of 'pline' and therefore all of the sink-related sounds have to be messages that start with 'You hear', annoyingly enough.",
108 You_hear("%s", sink_msg
[rn2(6+hallu
*5)]);
111 if (level
.flags
.has_court
&& !rn2(200)) {
112 static const char * const throne_msg
[] = {
113 "the tones of courtly conversation.",
114 "a sceptre pounded in judgment.",
115 "Someone shouts \"Off with %s head!\"",
117 "what sounds like a royal ceremony.",
118 "Queen Beruthiel's cats!",
120 for (mtmp
= fmon
; mtmp
; mtmp
= mtmp
->nmon
) {
121 if (DEADMONSTER(mtmp
)) continue;
122 if ((mtmp
->msleeping
||
123 is_lord(mtmp
->data
) || is_prince(mtmp
->data
)) &&
124 !is_animal(mtmp
->data
) &&
125 mon_in_room(mtmp
, COURT
)) {
126 /* finding one is enough, at least for now */
127 int which
= rn2(5+hallu
);
129 if (which
!= 2) You_hear("%s", throne_msg
[which
]);
130 else pline(throne_msg
[2], uhis());
135 if (level
.flags
.has_swamp
&& !rn2(200)) {
136 static const char * const swamp_msg
[] = {
138 "smell marsh gas!", /* so it's a smell...*/
139 "hear a muffled splash.",
140 "are frightened by the calm atmosphere for some reason.",
142 "inhale a vile stench that reminds you of what kissing a frog is probably like!",
143 "hear someone falling in the water and losing a life.",
144 "suddenly encounter the hamming fish, which can devour and instakill you!", /* Big Bill from Super Mario Bros 3 */
146 You("%s", swamp_msg
[rn2(4+hallu
*4)]);
149 if (level
.flags
.spooky
&& !rn2(200)) {
150 static const char *spooky_msg
[] = {
151 "hear screaming in the distance!",
152 "hear a faint whisper: \"Please leave your measurements for your custom-made coffin.\"",
153 "hear a door creak ominously.",
154 "hear hard breathing just a few steps behind you!",
155 "hear dragging footsteps coming closer!",
156 "hear anguished moaning and groaning coming out of the walls!",
157 "hear mad giggling directly behind you!",
158 "smell rotting corpses.",
160 "feel ice cold fingers stroking your neck.",
161 "feel a ghostly touch caressing your face.",
162 "feel somebody dancing on your grave.",
163 "feel something breathing down your neck.",
164 "feel as if the walls were closing in on you.",
165 "just stepped on something squishy.",
166 "hear a strong voice pronouncing: \"There can only be one!\"",
167 "hear a voice booming all around you: \"Warning: self-destruction sequence activated!\"",
168 "smell your mother-in-law's cooking!",
170 "hear someone shouting: \"Who ordered the burger?\"",
171 "can faintly hear the Twilight Zone theme.",
172 "hear an outraged customer complaining: \"I'll be back!\"",
173 "hear someone praising your valor!",
174 "hear someone singing: \"Jingle bells, jingle bells...\"",
176 You("%s", spooky_msg
[rn2(15+hallu
*9)]);
179 if (level
.flags
.has_vault
&& !rn2(200)) {
180 if (!(sroom
= search_special(VAULT
))) {
182 level
.flags
.has_vault
= 0;
186 switch (rn2(2+hallu
)) {
188 boolean gold_in_vault
= FALSE
;
190 for (vx
= sroom
->lx
;vx
<= sroom
->hx
; vx
++)
191 for (vy
= sroom
->ly
; vy
<= sroom
->hy
; vy
++)
193 gold_in_vault
= TRUE
;
194 #if defined(AMIGA) && defined(AZTEC_C_WORKAROUND)
195 /* Bug in aztec assembler here. Workaround below */
196 xx
= ROOM_INDEX(sroom
) + ROOMOFFSET
;
197 xx
= (xx
!= vault_occupied(u
.urooms
));
200 if (vault_occupied(u
.urooms
) !=
201 (ROOM_INDEX(sroom
) + ROOMOFFSET
))
202 #endif /* AZTEC_C_WORKAROUND */
204 if (gold_in_vault
&& !level
.flags
.vault_is_aquarium
&& !level
.flags
.vault_is_cursed
)
205 You_hear(!hallu
? "someone counting money." :
206 "the quarterback calling the play.");
207 else if (gold_in_vault
&& level
.flags
.vault_is_aquarium
)
208 You_hear(!hallu
? "soft splashing." :
209 "a swimmer divebomb into the water.");
210 else if (gold_in_vault
&& level
.flags
.vault_is_cursed
)
211 You_hear(!hallu
? "gutteral voices chanting." :
212 "drums beating ominously!");
214 You_hear(level
.flags
.vault_is_aquarium
? "frenzied splashing." : level
.flags
.vault_is_cursed
? "someone scream: 'No! Stop! The Knife! Aaaaaahhhh!'" : "someone searching.");
217 /* fall into... (yes, even for hallucination) */
220 You_hear(level
.flags
.vault_is_aquarium
? "gently lapping water." : level
.flags
.vault_is_cursed
? "somebody screaming for help!" : "the footsteps of a guard on patrol.");
223 You_hear(level
.flags
.vault_is_aquarium
? "the bubbling of an oxygen filter." : level
.flags
.vault_is_cursed
? "somebody whisper: 'You've been detected by a security camera! Har har har!'" : "Ebenezer Scrooge!");
228 if (level
.flags
.has_beehive
&& !rn2(200)) {
229 for (mtmp
= fmon
; mtmp
; mtmp
= mtmp
->nmon
) {
230 if (DEADMONSTER(mtmp
)) continue;
231 if ((mtmp
->data
->mlet
== S_ANT
&& is_flyer(mtmp
->data
)) &&
232 mon_in_room(mtmp
, BEEHIVE
)) {
233 switch (rn2(3+hallu
*3)) {
235 You_hear("a low buzzing.");
238 You_hear("an angry drone.");
241 You_hear("a repeating monotonous melody."); /* rambi rumble melody before you meet King Zing */
244 You_hear("bees in your %sbonnet!",
245 uarmh
? "" : "(nonexistent) ");
248 pline("You suddenly see King Zing chasing after you! RUN, Rambi, RUN!!!");
251 You("smell stale honey.");
258 if (level
.flags
.has_morgue
&& !rn2(200)) {
259 for (mtmp
= fmon
; mtmp
; mtmp
= mtmp
->nmon
) {
260 if (DEADMONSTER(mtmp
)) continue;
261 if (is_undead(mtmp
->data
) &&
262 mon_in_room(mtmp
, MORGUE
)) {
263 switch (rn2(4+hallu
*2)) {
265 You("suddenly realize it is unnaturally quiet.");
268 pline_The("%s on the back of your %s stands up.",
269 body_part(HAIR
), body_part(NECK
));
272 if (midnight()) pline("Suddenly you have a severe shivering fit!");
273 else pline("This place seems haunted.");
276 pline("There is an eerie feeling about this place.");
279 pline_The("%s on your %s seems to stand up.",
280 body_part(HAIR
), body_part(HEAD
));
283 pline("An enormous ghost suddenly appears before you!");
290 if (level
.flags
.has_barracks
&& !rn2(200)) {
291 static const char * const barracks_msg
[5] = {
292 "blades being honed.",
294 "dice being thrown.",
295 "General MacArthur!",
296 "the senior drill instructor shouting at you for being a lazy fatass!",
300 for (mtmp
= fmon
; mtmp
; mtmp
= mtmp
->nmon
) {
301 if (DEADMONSTER(mtmp
)) continue;
302 if (is_mercenary(mtmp
->data
) &&
303 #if 0 /* don't bother excluding these */
304 !strstri(mtmp
->data
->mname
, "watch") &&
305 !strstri(mtmp
->data
->mname
, "guard") &&
307 mon_in_room(mtmp
, BARRACKS
) &&
308 /* sleeping implies not-yet-disturbed (usually) */
309 (mtmp
->msleeping
|| ++count
> 5)) {
310 You_hear("%s", barracks_msg
[rn2(3+hallu
*2)]);
315 if (level
.flags
.has_clinic
&& !rn2(200)) {
316 static const char *hospital_msg
[] = {
317 "hear something about streptococus.",
318 "smell chloroform nearby.",
319 "hear someone cursing viruses.",
320 "listen to patients screaming while the doctor is conducting the sectio.",
321 "seem to hear Doctor Frankenstein.",
322 "hear someone scream 'NOOOOOO! Get away from my teeth! Dentists are TERRIBLE people!!!'",
323 "suddenly have a flashback to your last OP!",
325 You("%s", hospital_msg
[rn2(4+hallu
*3)]);
328 if (level
.flags
.has_nymphhall
&& !rn2(200)) {
329 static const char *nymphhall_msg
[] = {
330 "hear leaves rustling.",
331 "hear a female voice singing a song.",
332 "catch a glimpse of sunlight.",
333 "hear crickets chirping loudly!",
334 "hear birds singing!",
335 "hear grass growing!",
336 "hear wind in the willows!",
338 "feel like giving all your possessions to a beautiful woman.",
339 "want to pull down your pants.",
341 You("%s", nymphhall_msg
[rn2(5+hallu
*5)]);
344 if (level
.flags
.has_lemurepit
&& !rn2(2000)) { /* from unnethack, deliberately made rare */
345 static const char *lemurepit_msg
[] = {
346 "the crack of a barbed whip!",
347 "the screams of tortured souls!",
348 "a wail of eternal anguish!",
349 "diabolical laughter!",
350 "cries of repentance!",
351 "futile pleas for mercy!",
353 "the crack of your mistress's whip!",
355 "wonderful scratching noises!",
356 "erotic rubbing noises!",
357 "cheerful squeaking noises!",
358 "sexy licking noises!",
360 You_hear("%s", lemurepit_msg
[rn2(6+hallu
*7)]);
363 if (level
.flags
.has_spiderhall
&& !rn2(200)) {
364 static const char *spiderhall_msg
[] = {
365 "hear mandibles clicking.",
366 "notice webs everywhere.",
367 "notice little openings in the floor.",
368 "trip over a broken spider egg.",
369 "see a giant tarantula squittering around!",
370 "have to fight Arich, the old cheater, while listening to a dramatic music that is unfortunately too quiet.",
371 "must get past Barbos' Barrier!",
373 You("%s", spiderhall_msg
[rn2(3+hallu
*4)]);
376 if (level
.flags
.has_trollhall
&& !rn2(200)) {
377 static const char *trollhall_msg
[] = {
378 "hear a grunting noise.",
379 "notice a horrible smell.",
380 "hear loud footsteps going up and down the halls.",
381 "trip over a stinking pile of shit!",
382 "suddenly see a huge monster appearing right in front of you!",
383 "hear some usenetter spouting radical bullshit!",
384 "can't seem to find the plonking switch!",
386 You("%s", trollhall_msg
[rn2(3+hallu
*4)]);
389 if (level
.flags
.has_humanhall
&& !rn2(200)) {
390 static const char *humanhall_msg
[] = {
391 "listen to a conversation.",
392 "hear people talking.",
393 "hear someone drawing a weapon.",
394 "chime in on some people celebrating a party.",
395 "overhear plans for a raid.",
396 "sense that you are not alone...",
397 "hear a glass of wine breaking!",
398 "listen to a radio broadcast: For the next five days, the dungeon's estimated temperature high is 96 degrees. Now, is that in Fahrenheit or Kelvin?",
399 "know that there's a celebration being held for YOU! Where do you get this party started?",
401 You("%s", humanhall_msg
[rn2(5+hallu
*4)]);
404 if (level
.flags
.has_golemhall
&& !rn2(200)) {
405 static const char *golemhall_msg
[] = {
406 "hear rattling noises.",
407 "think you saw an object move on its own.", /* golems = animate objects */
408 "feel that something weird may be just around the corner.",
409 "hear a mechanical noise.",
410 "hear the deafening noise of a metal object breaking apart!",
411 "see a warmech appearing before you! If this were a Pokemon game, it would say: A wild WARMECH appeared!",
412 "will certainly never catch a Regigigas, because your pokeball isn't good enough!",
413 "listen to the Diablo sorceror casting a summoning spell!", /* one of the spells is called "golem" */
415 You("%s", golemhall_msg
[rn2(4+hallu
*4)]);
419 if (level
.flags
.has_cryptroom
&& !rn2(200)) {
420 static const char *cryptroom_msg
[] = {
421 "smell rotting flesh.",
422 "hear shuffling noises.", /* grunthack zombie inspired */
424 "inhale the stench of charnel and the things that should be dead, but aren't.",
425 "feel that you're near death!",
426 "don't have much longer to live...",
427 "listen to a tune that gets ever more dissonant...", /* crypt music from Robin Hood, Prince of Thieves */
428 "hear your ancestors laughing at you!",
430 You("%s", cryptroom_msg
[rn2(4+hallu
*4)]);
434 if (level
.flags
.has_troublezone
&& !rn2(200)) {
435 static const char *troublezone_msg
[] = {
437 "feel that something's gonna happen.",
438 "sense several evil presences.",
439 "sense high tension.",
440 "notice an electrical feeling in the air.",
441 "are afraid of something.",
442 "hear the voices of vaguely humanoid beings.",
444 "have to count to three, and if you fail, you can forget about your game!", /* this and the next few are from the obscure Trouble Zone game for the Nintendo Gameboy */
445 "are way in over your head!",
446 "must sort the blocks according to the numbers, and pronto!",
447 "fall asleep while the line very slowly dissolves.",
448 "listen to the military music broadcast from Radio Enclave.", /* Fallout 3 */
449 "are being fully gouged by the type!",
450 "collected too many speed increasing pickups and your speed wrapped over so you're super slow now!",
451 "realize that the game has resetted itself, so you'll have to start over at dungeon level 1.",
453 You("%s", troublezone_msg
[rn2(8+hallu
*8)]);
457 if (level
.flags
.has_weaponchamber
&& !rn2(200)) {
458 static const char *weaponchamber_msg
[] = {
459 "hear metallic clashes.",
460 "are listening to someone practicing their sword skill.",
461 "hear a trumpet, followed by attack orders.",
462 "hear a knight discussing strategy with his subordinates.",
463 "feel that the enemies' main base camp is on this floor.",
464 "are ambushed by shadowy figures with gleaming swords!",
465 "should impale yourself on your weapon while you still can...",
466 "absolutely want a polearm, because you love polearms.",
467 "want to look for a replacement lance because your last one broke when you jousted a monster.",
468 "listen to an asian woman announcing that she'll hunt down and kill you!", /* a reference that no one will get because it's about a certain scene in one of Amy's fanfics */
470 You("%s", weaponchamber_msg
[rn2(5+hallu
*5)]);
474 if (level
.flags
.has_hellpit
&& !rn2(200)) {
475 static const char *hellpit_msg
[] = {
477 "hear the bubbling of lava.",
479 "chime in on a pack of demons performing a satanic ritual.",
480 "sense the presence of hellish beings.",
481 "see that the ceiling has turned red-hot!", /* Oblivion gate, but you're presumably in a dungeon and not the outskirts, so instead of the sky changing colors, the ceiling does so */
482 "feel that Mehrunes Dagon will open the Great Gate of Oblivion soon!",
483 "realize that the hellspawn invasion has already begun...",
484 "sense the presence of a gate to Oblivion.",
485 "suddenly encounter the giant siege caterpillar and have 10 minutes to destroy it or everything is lost.",
486 "need to protect Annoying Head Martin from the 200 storm atronachs and dremora valkynaz.",
488 You("%s", hellpit_msg
[rn2(6+hallu
*5)]);
492 if (level
.flags
.has_robbercave
&& !rn2(200)) {
493 static const char *robbercave_msg
[] = {
494 "feel that this floor is home to the robbers.", /* these are all based on Amy's FO3 fanfic */
495 "know that you must watch your purse.",
496 "get the feeling that somebody is after your valuables.",
497 "hear someone screaming that their money got stolen!",
498 "listen to people drinking beer.",
499 "hear a male voice announce: 'Hundred one hundred!'", /* robbers playing cards */
500 "want to watch when the robbers assault the motherfuckers' ship, because it will be like a second Pearl Harbor!",
501 "know that the bitches are not the rulers of the world, even if they want to view themselves as such just because they have money.",
502 "fully endorse racketeering, as long as the super-smart women are the target.", /* and also the quick learners */
503 "feel like being sucked into one of Amy's terrible fanfics!",
505 You("%s", robbercave_msg
[rn2(5+hallu
*5)]);
509 if (level
.flags
.has_casinoroom
&& !rn2(200)) {
510 static const char *casinoroom_msg
[] = {
511 "hear the clinging of jetons.",
512 "hear someone announce 'Place your bets please!'",
513 "see a passerby holding a casino chip.",
514 "can hear a roulette wheel spinning.",
515 "are feeling like gambling away a couple thousand zorkmids.",
516 "are looking for the entrance to Caligula's Casino.",
517 "hear someone complaining about the Forelli and Sindacco competitors.",
518 "feel like playing some cards.",
519 "hear someone using the video poker machine.",
520 "hear someone announce 'FISHING! FISHING! WIN! WIN!'",
521 "see someone passing by who definitely has to be a high roller!",
522 "suddenly realize that there are ever more security full refuges coming, and they'll whittle down your health if you don't manage to escape!",
523 "feel that the right way to address Don Salvatore is by saying 'Greetings, Mr. Don', even though Don is actually Italian for Mister.", /* GTA San Andreas mafia boss */
524 "know that one of the two chips is a fake without even looking at them.",
525 "hear a cat singing 'Vrei sa pleci dar, numa numa yay. Numa numa yay, numa numa numa yay!", /* "Dragostea Din Tei", which is quoted by cats in Elona */
526 "hear a cat singing 'Mai-Ya-Hi, Mai-Ya-Hu, Mai-Ya-Ho, Mai-Ya-Ho-Ho!'",
527 "have to chase the assassins, who are travelling as a string quartet, and their airplane is too damn fast!", /* "Free Fall" mission in GTA San Andreas */
528 "wonder why the beanpole englishman is constantly wanking off. Like who is that monkey?", /* Maccer, obviously */
530 You("%s", casinoroom_msg
[rn2(9+hallu
*9)]);
534 if (level
.flags
.has_sanitationcentral
&& !rn2(200)) {
535 static const char *sanitationcentral_msg
[] = {
536 "hear heavy breathing.",
537 "feel that there's something that wants to drain you of your sanity.",
538 "seem more focused on your mental health than usual.",
539 "have to wonder whether you're seeing things.",
540 "sense an eldritch abomination lurking somewhere on this floor.",
541 "start perceiving the world as the terrible place it really is, and go mad from the revelation!",
542 "suddenly have over 9000 sanity! Oh no! Now every sanity increase will paralyze you!",
543 "have to ask Amy what in-game sanity does, because you have no idea!",
544 "feel more sane than before, which is a BAD thing!",
545 "hear a horrible call that rings in your head, which periodically increases your sanity!",
547 You("%s", sanitationcentral_msg
[rn2(5+hallu
*5)]);
551 if (level
.flags
.has_feminismroom
&& !rn2(200)) {
552 static const char *feminismroom_msg
[] = {
553 "hear a female voice shouting angrily.",
554 "listen to a long, squeaking sound.", /* farting noise */
555 "can hear the clacking noises of high heels walking on a hard floor.",
556 "hear woman noises.",
557 "overhear women discussing makeup and perfume.",
558 "hear the voice of a model asking whether her dress is looking good enough.",
559 "hear strange rumbling noises.", /* farting noise */
560 "think you just heard very faint air current noises.", /* farting noise */
561 "fear that some stupid woman is gonna slap you silly!",
562 "can't resist thinking of a pair of brown leather boots with black block heels, and start wanking off to the thought.",
563 "hear very beautiful farting noises!",
564 "hear your wife complaining that you're still not home yet!",
565 "suddenly hear a commercial announcement: 'Buy a 5 liter bottle of the newest drum stint reluctance perfume for only 10 euros now!'",
566 "hear a sales pitcher praising a new branded costume.",
567 "hear a seemingly neverending, disgusting sound.", /* crapping noise */
568 "listen to very tender female noises.",
569 "hear a librarian yelling at someone to be SILENT!",
571 You("%s", feminismroom_msg
[rn2(8+hallu
*9)]);
575 if (level
.flags
.has_playercentral
&& !rn2(200)) {
576 static const char *playercentral_msg
[] = {
577 "overhear some hectic talk.",
578 "catch earshot of your fellow adventurers.",
579 "feel that they're coming for you.",
580 "don't think you're alone here...",
581 "are highly alert for some reason.",
582 "are afraid that everyone on this dungeon level is infected with covid-19!",
583 "just know that there's someone around who should be quarantined, but isn't!",
584 "hear someone sneezing constantly! Why isn't that corona-infected fucker staying at home?!",
585 "overhear a loudspeaker announcement: 'Protect yourself and others! Keep your distance to other people and wear your face mask at all times. Help us stop the spread of coronavirus and stay healthy.'",
586 "think you just saw a bunch of cops passing you by! Good thing they didn't realize that you weren't wearing your mask properly!",
588 You("%s", playercentral_msg
[rn2(5+hallu
*5)]);
592 if (level
.flags
.has_meadowroom
&& !rn2(200)) {
593 static const char *meadowroom_msg
[] = {
594 "feel a slight breeze.",
595 "hear crickets chirping.",
596 "can hear the cattle bellowing.",
597 "hear the cooing of the nightingale.",
598 "hear the 'baaaaa' sound of a sheep.",
599 "hear someone sing 'Old Mac Donald had a farm...'",
600 "can't help it but feel that something that looks normal is terribly amiss.",
601 "listen to the palomita, which is Spanish for parrot.", /* or at least the Amy always thought that's what it meant */
602 "wonder what's the color of the giant red ant.",
603 "feel that the one grass tile is greener than the rest for some reason.",
605 You("%s", meadowroom_msg
[rn2(5+hallu
*5)]);
609 if (level
.flags
.has_coolingchamber
&& !rn2(200)) {
610 static const char *coolingchamber_msg
[] = {
611 "are chilled by cold air.",
612 "shiver for a moment.",
613 "feel that someone forgot to close the door to the freezer.",
614 "feel that this is a cold place.",
615 "regret not bringing along your winter clothes for this cold atmosphere.",
616 "fear that you're gonna develop a lung inflammation.",
617 "hear someone calling you to the iceblock shooting.", /* reference to GNTM, where the models had to do a photo shooting in an ice chamber once */
618 "can smell the mildew on the walls.",
619 "listen to the type of ice block laughing all the time. Harharharharharharhar!",
620 "know that if you're walking on ice all the time, you'll unlearn the ability to walk on a non-slippery floor.",
621 "hear an ice cream van!",
623 You("%s", coolingchamber_msg
[rn2(5+hallu
*6)]);
627 if (level
.flags
.has_voidroom
&& !rn2(200)) {
628 static const char *voidroom_msg
[] = {
629 "are struck by a sense of emptiness.",
630 "sense a black hole in the fabric of reality.",
631 "feel that a special challenge awaits you.", /* ToME */
632 "feel the presence of spirits from the netherworld.",
633 "hear a sucking sound.",
634 "hear audible silence.",
635 "notice that this area is disturbingly quiet.",
636 "hear the absence of nosie.", /* sic by AntiGulp, and deemed too funny to fix */
637 "hear Galadriel whispering 'It is very likely that you die on your journey, but you must go anyway...'",
638 "realize that the atmosphere does not contain oxygen! If you stay around you'll suffocate!",
639 "hear Melkor laughing at your puny attempts to reach him.",
640 "have failed to defeat Maeglin, and he reached the stairs! Everything is lost now. Gondolin will go down in a rain of fire and smoke, and all the humans are killed by blarogs and ringwraiths.",
641 "feel a ghostly touch on your nosie and inhale the scent of a rosie!",
642 "hear the sounds of the gene splicing machine!", /* Elona */
643 "listen to someone complaining about a splintered nail.", /* Harry Potter disappearing (or whatever it's called, it's actually magical teleportation) mishap */
644 "neither hear nor see the words, yet somehow they're still there.",
646 You("%s", voidroom_msg
[rn2(8+hallu
*8)]);
650 if (level
.flags
.has_armory
&& !rn2(5000)) { /* from dnethack, intentionally VERY rare --Amy */
651 static const char *library_msg
[] = {
652 "hear water dripping onto metal.",
653 "hear a loud crunching sound.",
654 "hear a ceiling tile fall.",
655 "the scraping of metal on metal.",
657 "smell a lot of rust.",
659 "hear iron oxidize.",
660 "hear a military contractor making out like a bandit.",
661 "fear that your +7 artifact weapon might get eaten!",
662 "hear the sound of a toilet latch.",
663 "wonder why the hell this set of messages is called 'library_msg' in the game's source.",
664 "feel that parts of the floor have been washed away.",
665 "the nearby ACME building!",
667 You("%s", library_msg
[rn2(7)+hallu
*7]);
671 if (level
.flags
.has_hamletroom
&& !rn2(200)) {
672 static const char *hamletroom_msg
[] = {
673 "have a sense of familiarity.",
675 "hear a storeclerk making a transaction.", /* but there's not actually a shopkeeper around */
676 "hear the cackle of poultry.",
677 "listen to the joyful cries of playing children.",
678 "feel like returning to your burned home... wait, is there really a reason for doing so?", /* the hallu sounds in particular are inspired by the storyline of Castle of the Winds */
679 "hope that you don't have to master the fleeing mine...",
680 "gaze once more at the ruins of what used to be your father's farm.",
681 "suddenly feel a sharp smoky smell fill your nostrils.",
682 "hear the heavy flapping sound of a vulture's wings.",
684 You("%s", hamletroom_msg
[rn2(5+hallu
*5)]);
688 if (level
.flags
.has_kopstation
&& !rn2(200)) {
689 static const char *kopstation_msg
[] = {
690 "hear a loud siren.",
691 "can hear a police officer requesting reinforcement.",
692 "hear the whipping sound of a rubber hose.", /* default keystone kop weapon */
693 "overhear the police radio and find out to your shock that you're wanted.",
694 "hear an officer giving commands hectically.",
695 "realize that your cop wanted level is 6, and the forces of law are coming to bust you!",
696 "are chased by a speeding police car!",
697 "feel that the safest place in existence is right in the middle of the enemies' base camp.", /* a joke from one of Amy's fanfics where the robbers were discussing where to hide and one of them sarcastically suggested hiding in the cop station */
698 "hear the sound of a fucking army helicopter!", /* in GTA games, the army comes for you if your cop wanted level is maxed */
700 if (rn2(5)) You("%s", kopstation_msg
[rn2(5+hallu
*4)]);
701 else verbalize("Alert! All units, apprehend %s immediately!", playeraliasname
);
705 if (level
.flags
.has_bossroom
&& !rn2(200)) {
706 static const char *bossroom_msg
[] = {
707 "feel that you're in a hopeless situation.", /* this and most of the others are inspired by Pokemon */
708 "are left hanging in suspense.",
709 "feel that the future is dark, and it gets even darker.",
710 "realize that the challenge of your life awaits you.",
711 "get the feeling that a true champion is going to challenge you soon.",
712 "just know that you'll be having a legendary battle.",
713 "will not be able to defeat Whitney's Miltank, because the fleecy Whitney will mop the floor with you wimp!",
714 "are not going to get past Pryce, since his ice pokemon can crash the game at will.",
715 "have to fight Lance and his Dragonite, but with your uselessly weak pokemon you don't stand a chance.",
716 "loser will never beat Gary, whose Meganium always uses 'Contro' and defeats each of your pokemon in one hit, hahaha!",
717 "are challenged by Clair, the dragon pokemon trainer, whose name in the German version is 'Schwaermelbueschelsandra' and who will kick your butt with her unbeatable Kingdra!",
718 "encounter a wild Suicune, which is even a *legendary* pokemon and since you don't have a master ball, catching it comes all down to luck!",
720 You("%s", bossroom_msg
[rn2(6+hallu
*6)]);
724 if (level
.flags
.has_rngcenter
&& !rn2(200)) {
725 static const char *rngcenter_msg
[] = {
726 "sense the shuffling of random numbers.",
727 "hear the dungeon master testing a set of dice.",
728 "feel that this particular floor is especially random.",
729 "have an unknown feeling.",
730 "just know that the monsters on this level have the most evil and unbalanced attacks possible.",
731 "test your d20 several times, only to realize in shock that it always rolls 1!",
732 "are invited to a game of Dungeons & Dragons by the game master!",
733 "listen to some gamers rolling dice.",
735 You("%s", rngcenter_msg
[rn2(4+hallu
*4)]);
739 if (level
.flags
.has_wizardsdorm
&& !rn2(200)) {
740 static const char *wizardsdorm_msg
[] = {
741 "hear a grating, annoying snore.", /* the sleeping wizard */
742 "smell dragonbreath in the air.",
743 "hear a 'Klieau!' sound.", /* sound that the manticore's tailspike attack supposedly makes */
744 "feel the presence of arcane energies.",
745 "listen to a spellcasting chant.",
746 "are hit by the 1st tailspike! You are hit by the 2nd tailspike! Warning: HP low! You are hit by the 3rd tailspike! You die. Do you want your possessions identified? DYWYPI? [ynq] (n) _",
747 "want to do wizard farming like in the old days, since it's more profitable than pudding farming.", /* in Castle of the Winds, that was actually one of the easiest ways to get lots of items */
748 "listen to someone ushering his pets to attack you!", /* the wizard ordering his manticores to kill you */
749 "suddenly see nightmare figures invading your village and murdering the townsfolk! You gotta stop them!",
750 "forgot to renew your detect monsters spell and the manticore shoots you with tailspikes from outside your line of sight.",
752 You("%s", wizardsdorm_msg
[rn2(5+hallu
*5)]);
756 if (level
.flags
.has_doomedbarracks
&& !rn2(200)) {
757 static const char *doomedbarracks_msg
[] = {
758 "hear a sound reminiscent of a frog.", /* Doom 2, if there's monsters nearby you can often hear an ultra-annoying "Krr-kro-krrg!" sound that used to drive me fucking nuts */
759 "feel that the gate to Hell has to be closed from the other side.",
760 "realize that the aliens have built a base here.",
761 "hear someone announce 'Wonnen.'", /* yeah I know it's supposed to be 'warning'... sue me :P --Amy */
762 "hear the teleportation sound.",
763 "hear an elevator sound.",
764 "hear a deep voice chanting the name 'Jason'...", /* from a Doom 2 wad */
765 "hear someone shout 'Neau!'", /* from a different Doom 2 wad */
766 "are no longer invulnerable even though you used the IDDQD code!",
767 "fell into a poisonous pit and the IDCLIP cheat doesn't seem to work! Now you'll die very slowly and painfully, you poor bastard.",
768 "encounter a little child that makes an 'Aloe!' sound! He looks deceptively similar to Commander Keen...",
769 "must run past the cyberdemon to fish the red key map out of the river while dodging the rockets. Good luck, you'll need it.", /* yet another Doom 2 wad */
771 You("%s", doomedbarracks_msg
[rn2(6+hallu
*6)]);
775 if (level
.flags
.has_sleepingroom
&& !rn2(200)) {
776 static const char *sleepingroom_msg
[] = {
777 "felt like you heard a faint noise, but can't make out what it is.", /* the moan of a sleeping monster */
779 "get the impression that the current atmosphere is quiet... too quiet.",
780 "feel that it's time to take revenge.", /* inspired by Castle of the Winds, and also some of the others */
781 "know that some fell creatures are encamped in this dungeon level.",
782 "wonder where the denizens of the dungeon came from.",
783 "listen to a soothing melody and a chant that sounds like 'Sleep-bundle-wing!'", /* Elona sleeping music */
784 "suddenly fall asleep. (Hopefully no monster decides to feast on your exposed flesh before you wake up.)",
785 "decide to stop at nothing until the threat is removed.",
786 "overhear the patrol's orders. To your shock, they're talking about plans to KILL you!",
787 "wonder where the clothes and shield hanging over the blacksmith's forge have gone.",
788 "suddenly realize that when your hometown was destroyed, the evil overlord did so because he specifically wanted to kill YOU!",
790 You("%s", sleepingroom_msg
[rn2(6+hallu
*6)]);
794 if (level
.flags
.has_diverparadise
&& !rn2(200)) {
795 static const char *diverparadise_msg
[] = {
796 "inhale the scent of seawater.",
797 "listen to fishes splashing water around.",
798 "listen to the sound of gentle waves.",
799 "hear children having fun on the water slide.",
800 "hear the rushing noise of water.",
801 "hear a 'splash splash' noise!",
802 "hear someone announce 'The entrance to Diver's Paradise is free today! Come on over and enjoy the most beautiful terrain in this dungeon - water!'",
803 "suddenly see a swimmer in bathing shorts run past you, and my god, does he have an absolutely UGLY tattoo on his leg!",
804 "wonder why fat people are always wearing tight bathing shorts. Having to see that makes you really uncomfortable...",
805 "encounter a guy who wears almost no clothes, and as he approaches you, he suddenly pulls down his pants and starts wanking off... ewwwwwwww...",
807 You("%s", diverparadise_msg
[rn2(5+hallu
*5)]);
811 if (level
.flags
.has_menagerie
&& !rn2(200)) {
812 static const char *menagerie_msg
[] = {
813 "can hear animal sounds.",
814 "hear the sound of a caged animal knocking at the lattice.",
815 "hear the roar of hungry zoo animals.",
816 "hear an animalistic moan.",
817 "hear a hissing sound, and it's right behind you!",
818 "look behind you and see a three-headed monkey!",
819 "hear an announcement: 'WARNING: The tiger's cage has been broken! There might be a tiger on the loose!'",
820 "feel like getting a pet spidermonkey or gorilla.",
822 You("%s", menagerie_msg
[rn2(4+hallu
*4)]);
826 if (level
.flags
.has_emptydesert
&& !rn2(200)) {
827 static const char *emptydesert_msg
[] = {
828 "feel that the air is hot around here.",
829 "feel a lack of humidity.",
830 "hear the roaring of a tornado.",
831 "hear the flapping noises of a condor's wings.",
832 "seem to sink into the floor!",
833 "encounter a sweet asian girl, but as you move to greet her, she suddenly thrusts you into quicksand! You die. Do you want your possessions identified? DYWYPI? [ynq] (n) _",
834 "hear the top of the pyramid crackling and breaking off!", /* Super Mario 64 */
835 "must stand tall on all four columns without falling into the shifting sand!",
837 You("%s", emptydesert_msg
[rn2(4+hallu
*4)]);
841 if (level
.flags
.has_rarityroom
&& !rn2(200)) {
842 static const char *rarityroom_msg
[] = {
843 "hear uncommon noises.", /* the monsters in the room are rare, so the noises they make aren't heard often */
844 "can feel the earth shaking.", /* monster stomping the ground */
845 "sense a supernatural presence.",
846 "feel a conventional weirdness.", /* the monsters are actually rather mundane, but rare, so that's why it's weird that there are so many of them */
847 "know that you'll see something not meant for mortal eyes.",
848 "hear Pale Night tempting you to remove her veil and look at what's underneath...",
849 "know that you can beat the impossible odds!",
850 "listen to someone scream 'YES! I won in the lottery! I'm a millionaire now!!!'",
852 You("%s", rarityroom_msg
[rn2(4+hallu
*4)]);
856 if (level
.flags
.has_prisonchamber
&& !rn2(200)) {
857 static const char *prisonchamber_msg
[] = {
858 "feel that you must free someone who's being held captive.", /* Castle of the Winds, level 4 of the castle where you have to free the prisoner */
859 "hear someone calling for you.",
860 "must free the prisoner unless you want him to be executed.",
861 "have a limited amount of time to save the prisoner or else he gets killed.",
862 "are already hearing drums.",
863 "were too slow and now the prisoner is dead. You failure!",
864 "really have to hurry - if you don't free the prisoner in 10 turns, he will be killed!",
865 "were so stupid and accidentally attacked the prisoner, causing him to die! Now you'll never get the reward for freeing him!",
866 "procrastinated for too long and now the prisoner is history. You failure!",
867 "noticed that the drums are beating faster!",
869 You("%s", prisonchamber_msg
[rn2(5+hallu
*5)]);
873 if (level
.flags
.has_nuclearchamber
&& !rn2(200)) {
874 static const char *nuclearchamber_msg
[] = {
875 "realize that your Geiger counter has started ticking like mad.",
876 "smell the stench of contamination in the air.",
877 "listen to scientists talking about their experiments.",
878 "hear the sounds of a nuclear facility.",
879 "detect gamma radiation.",
880 "feel the presence of the ether generator!",
881 "can overhear the president saying 'That was the last straw! I'll bomb that fucking country now! I just need to get the code and press the big red button!'",
882 "are in the extended hazardous course and will have to beat it without cheats, which is very difficult!", /* Hazardous Course 2, also known as Super Kaizo Half-Life */
883 "fear that the politicians will abolish their nuclear peace treaties!",
884 "are glad that you have a HEV suit, which must be very HEVvy.",
886 You("%s", nuclearchamber_msg
[rn2(5+hallu
*5)]);
890 if (level
.flags
.has_variantroom
&& !rn2(200)) {
891 static const char *variantroom_msg
[] = {
892 "sense the presence of beings from another universe.",
893 "hear the elder priest fiercely lashing his tentacles around.", /* dnethack */
894 "feel an earthquake-like trembling, probably caused by a migmatite horror...", /* steamband */
895 "hear Morgoth muttering a chant.", /* angband */
896 "hear the scream of Lina Inverse's high-pitched voice.", /* animeband */
897 "receive a stamped scroll from the mail demon! It reads: 'Muahahahaha, I kidnapped Princess Peach again. Sincerely, Bowser.'",
898 "start eating the hill giant corpse. Ulch - that meat was tainted! You die from your illness. Do you want your possessions identified? DYWYPI? [ynq] (n) _", /* Grunthack */
899 "suddenly realize that the elder priest stands right before you, and unfortunately, it's his turn now. Say goodbye to your cloak of magic resistance!",
900 "allowed your speed spell to wear off, and as a result Morgoth gets a double turn and casts mana storm twice in a row. You die.",
901 "are lucky, because you encountered Animeband's instakill monster, and it kills you! Game over!",
903 You("%s", variantroom_msg
[rn2(5+hallu
*5)]);
907 if (level
.flags
.has_coinhall
&& !rn2(200)) {
908 static const char *coinhall_msg
[] = {
909 "notice the sound of clinging coins.",
910 "feel that, somewhere down here, there might be a whole lot of gold.",
911 "hear metal banging against a wall.", /* the metal is the gold, of course */
912 "hear a tingling-clinging sound.",
913 "hear Scrooge McDuck taking a bath in his money!",
914 "hear the sound of a shower and then... coins???", /* Scrooge's gold coin shower */
915 "don't know why purple rain is so popular, because gold rain is much better...",
916 "feel extremely bored! Why does the dungeon master keep sending boring chaff monsters instead of something more dangerous?", /* players have complained that coin halls are one of the most boring special rooms */
918 You("%s", coinhall_msg
[rn2(4+hallu
*4)]);
921 if (level
.flags
.has_angelhall
&& !rn2(200)) {
922 static const char *angelhall_msg
[] = {
923 "hear the sound of wispy wings.",
924 "can barely hear a whispering voice.",
925 "sense a glow of radiance.",
926 "listen to someone announcing that you need penance.",
927 "feel like you are in the presence of a god.",
928 "suddenly feel an itching sensation inside your brain.",
929 "think you just heard God speaking to you!",
930 "notice that the stupid little angel is always flying in a circle.",
931 "forgot your golden spirit gel that you could use to clip the angel's wings.",
932 "see the angel flap its wings. One of them brings destruction while the other brings prosperity.",
933 "begin to shed tears of joy without even realizing it.",
934 "feel the angel's beauty taking your breath away...",
936 You("%s", angelhall_msg
[rn2(6+hallu
*6)]);
939 if (level
.flags
.has_elemhall
&& !rn2(200)) {
940 static const char *elemhall_msg
[] = {
941 "suddenly feel a wave of heat.",
942 "notice some heaps of earth.",
943 "sense a strong gust of wind.",
944 "hear a wave of water.",
945 "feel the presence of astral beings.",
946 "hear distant thunder.",
947 "get the impression that the laws of Nature itself are conspiring against you!",
948 "suffer from severe inundation!",
949 "realize that you're on a hot plate that was just turned on! Step off or you'll get the tip of your toes burned!",
950 "are sitting in an electric chair and have to survive a current of 20 watt for half an hour!",
951 "realize that a tornado has engulfed the entire dungeon and the ceiling starts to collapse...",
952 "wonder why 'astral' elementals exist, because astral is not an element.",
953 "can hear Laura chanting spells.", /* she's supposed to be a master of elemental spells */
955 You("%s", elemhall_msg
[rn2(6+hallu
*7)]);
959 if (level
.flags
.has_evilroom
&& !rn2(200)) {
960 static const char *evilroom_msg
[] = {
961 "are very afraid for some reason.",
962 "listen to a really evil sound.",
963 "hear a very deep grunt.", /* grunthack :D */
964 "sense a great danger.",
965 "hear measurers and forks.", /* Nethack Fourk */
966 "hear someone sharpening the spoon fork.", /* Sporkhack */
967 "somehow feel that the default rules are not valid here.",
968 "are afraid that this place will be rather unfair to you.",
969 "can tell from the sounds that the monsters on this level are spectacularly unforgiving.",
970 "know that you won't make it through this level alive...",
971 "will die, but not before you've witnessed the evil perpetrators taking your beloved toys and breaking them into pieces.",
972 "are going to get disintegrated even if you are resistant.", /* Nethack Fourk */
973 "will never be able to kill a bugbear in less than 5 hits, and woe to you if an actually difficult monster comes, e.g. a stone golem.", /* Sporkhack */
974 "don't look forward to encountering the elder priest at all.", /* dnethack */
975 "just love it when intrinsically obtained resistances time out.", /* ditto */
976 "have to eat hundreds of corpses to obtain full resistance.", /* sporkhack */
977 "feel that magic resistance will not protect you from the destroy armor spell.", /* ditto */
978 "finally understand that interface screws are not fake difficulty.",
980 You("%s", evilroom_msg
[rn2(9+hallu
*9)]);
983 if (level
.flags
.has_religioncenter
&& !rn2(200)) {
984 static const char *religioncenter_msg
[] = {
985 "hear religious chants.",
986 "hear the sound of a preacher.",
987 "listen to some gibberish talk.",
988 "hear voices chanting a prayer.",
989 "sense an evil, awful stench.",
990 "sense a cultural clash.", /* sadly, some religions do not get along very well with each other */
991 "hear someone call for the elimination of infidels.",
992 "hear a frightening 'Hola-hola!' call!",
993 "hear someone shout 'Allahu Akbar!'",
994 "have to resist the urge to vomit from the terrible smell.",
995 "must prevent the hostile overtaking or everything you hold dear will be lost.",
996 "suddenly meet someone who accuses you of being an intolerant asshole.",
997 "know that the statistics don't lie and the alien infestation is a real threat!",
998 "overhear plans for a destructive bomb notice!",
1000 You("%s", religioncenter_msg
[rn2(7+hallu
*7)]);
1003 if (level
.flags
.has_cursedmummyroom
&& !rn2(200)) {
1004 static const char *cursedmummyroom_msg
[] = {
1005 "sense the eerie silence.",
1006 "feel the presence of ancient beings.",
1007 "have a primordial feeling.", /* the lich in that room is a really ancient being */
1008 "are struck with awe at the sight of these structures.", /* refers to the architecture to the mummies' tomb */
1009 "hear the frightening sounds of something you do NOT, EVER, want to anger.", /* Elona big daddy */
1010 "realize that you've trespassed in the tomb of an ancient pharao.",
1011 "are afraid of accidentally equipping cursed items.",
1012 "hear the dead walking.",
1013 "hear the dead potatoes walking. And the dissolved undead potatoes, returned potatoes and whatever other kind of potatoes as well.",
1015 You("%s", cursedmummyroom_msg
[rn2(4+hallu
*5)]);
1018 if (level
.flags
.has_arduousmountain
&& !rn2(200)) {
1019 static const char *arduousmountain_msg
[] = {
1020 "feel that this will be rather difficult.",
1021 "know that until the very end, you have to give it your best.",
1022 "sense a great deal of variety.",
1023 "seem to sense the weather changing.", /* weather in the mountains can change fast and unexpectedly */
1024 "sense the change of air pressure.",
1025 "feel that the air is getting thin.",
1026 "must contest the harder part of the Adventurer Zone!", /* Mushroom Kingdom Fusion */
1027 "feel that in the name of Caesar, Carthage MUST be destroyed!",
1028 "switch out your lamp for a climbing set.", /* ToME has climbing tools for scaling mountains but sadly they use the same slot that light sources occupy */
1029 "realize that your chosen character class is hard to play for the entire length of the game.",
1030 "wish you had a dumbo to ride on.",
1031 "wonder how a legion would deal with an icy staircase.",
1033 You("%s", arduousmountain_msg
[rn2(6+hallu
*6)]);
1036 if (level
.flags
.has_changingroom
&& !rn2(200)) {
1037 static const char *changingroom_msg
[] = {
1038 "hear women talking about clothing.",
1039 "listen to giggling sounds.", /* girls while changing clothes */
1040 "feel as if messages are being transmitted via bush telegraph methods.",
1041 "sense a scentful smell.",
1042 "hear a hollow beating sound.", /* someone tapping their shoes on the ground */
1043 "feel that someone around here is unusually busy.",
1044 "dream of a little black dress, even though you don't have any reason for bereavement.",
1045 "absolutely want a pair of leather boots with bright green block heels!",
1046 "look forward to buying several pairs of 'Janina' underwear.",
1047 "try to picture AmyBSOD in front of your mental eyes, with her wearing only high heels and pants.", /* inspired by bhaak */
1048 "wonder whether you're the peeping tom?", /* Pokemon, Erika's Gym, don't remember which edition but probably yellow? */
1049 "feel like you've not changed your underwear for a whole day, so it's time to change them now!",
1051 You("%s", changingroom_msg
[rn2(6+hallu
*6)]);
1054 if (level
.flags
.has_levelffroom
&& !rn2(200)) {
1055 static const char *levelffroom_msg
[] = {
1056 "hear laughing sounds.",
1057 "listen to dissonant beeps.", /* supposed to be the Metroid "Beepbebeep beep BEEP beep, beep beep BEEP beep!" "music" */
1058 "have the feeling that there will be errors.", /* many of these are inspired by various glitches in Castle of the Winds */
1059 "hear an asynchronous sound.",
1060 "realize some unexpected hard disk activity.",
1061 "have to use phase door if you want to get inside.",
1062 "wonder whether teleportation will work on this floor.",
1063 "wonder whether shooting the percents will make it go away.",
1064 "have the urge to click on that gray tile!",
1065 "get a NTLL - Not a valid save file!",
1066 "suddenly notice the superdeep type over there!",
1067 "scrolled too far down and the ultrayousee ends your game. Sorry.",
1068 "just lost another continue! If you keep playing that badly, you'll run out and be eliminated prematurely!",
1069 "need to use clairvoyance in a very specific place or you won't be able to teleport!",
1070 "suddenly remember the highscore cheat that Amy's roommate discovered!",
1071 "are challenged by Julietta, and have to defeat her in the auto racer duel!",
1073 You("%s", levelffroom_msg
[rn2(8+hallu
*8)]);
1076 if (level
.flags
.has_verminroom
&& !rn2(200)) {
1077 static const char *verminroom_msg
[] = {
1078 "hear chittering sounds.",
1079 "hear hissing noises.",
1080 "feel as if there's rats in the walls.",
1081 "notice a foul stench in the air.",
1082 "fell into an open sewer hole!",
1083 "think that it must be raining outside, judging by the ratty smell.", /* canal lids on the ground sometimes emit a horrific smell when it's raining... */
1084 "suddenly bear witness to a huge invasion of ants, rats, cockroaches and other vermin!",
1086 You("%s", verminroom_msg
[rn2(4+hallu
*3)]);
1089 if (level
.flags
.has_questorroom
&& !rn2(200)) {
1090 static const char *questorroom_msg
[] = {
1091 "feel like you should be working.",
1092 "seem to hear your superiors calling your name.",
1093 "suddenly meet one of your colleagues who is just passing by.",
1094 "absolutely don't want to visit the canteen.", /* because the "food" that is served there gives your stomach trouble */
1095 "are late for work! Now your boss will give you a final written warning!",
1096 "find out that while you didn't lose your job yet, you have to continue working at 20%% reduced pay, and if you make one more mistake it'll get lowered even more.", /* inspired by jonadab */
1097 "feel extremely nauseated all of a sudden. Maybe it was a mistake after all to eat canteen calls-itself-food.",
1098 "are sooooooo fed up with your annoying colleague! Having to see that same insufferable person every day makes you want to vomit!",
1100 You("%s", questorroom_msg
[rn2(4+hallu
*4)]);
1103 if (level
.flags
.has_miraspa
&& !rn2(200)) {
1104 static const char *miraspa_msg
[] = {
1105 "hear a female voice praising her spa.",
1106 "notice an overwhelming stench of urine.",
1107 "hear a distorted splash.",
1108 "listen to a complaining customer and a female voice saying 'Nope, you don't get your money back, sorry.'",
1109 "hear a constant peeing noise.",
1110 "encounter Mira, and she asks: 'Do you want to bathe in my urine? Only 20 zorkmids for one hour of pure fun!'",
1111 "suddenly see the skeletons of people who died in a most painful way!",
1112 "can't wrap the head around Mira's fantasies.",
1113 "are certainly turned OFF bathing for now. Did Mira really pee into the basin???", /* she did... */
1114 "notice the stench of ammonia.",
1116 You("%s", miraspa_msg
[rn2(5+hallu
*5)]);
1119 if (level
.flags
.has_machineroom
&& !rn2(200)) {
1120 static const char *machineroom_msg
[] = {
1122 "hear the grinding gears of industry.",
1123 "hear busy, hectic noises.",
1124 "realize that you're in the industrial district now.",
1125 "hear the sound of a dump truck.",
1126 "hear the track bed being gravelled.",
1127 "hear the taunts of the motherfucking Glass Golem!",
1128 "listen to the sound of a truck rolling over a road.",
1129 "wonder how long the industrial highway is, it seems to be endless?!",
1130 "hear a 'choo-choo' sound and as you turn around, you see a TRAAAAAAAAAIN! YAAAAAAAY! It's headed to Trier, so it's probably a Sueueueueueuewex? :-)",
1131 "doze off into a peaceful slumber as the trains keep passing through the station once every 30 minutes.",
1132 "suddenly wonder why there's so much traffic.",
1134 You("%s", machineroom_msg
[rn2(6+hallu
*6)]);
1135 if (uarmf
&& itemhasappearance(uarmf
, APP_INDUSTRIAL_BOOTS
) && !u
.uspellprot
) {
1138 if (!u
.usptime
) u
.usptime
= u
.uspmtime
;
1141 You_feel("strangely protected. Could be due to your boots.");
1145 if (level
.flags
.has_showerroom
&& !rn2(200)) {
1146 static const char *showerroom_msg
[] = {
1147 "hear water currents.",
1148 "feel like dancing in the rain.",
1149 "listen to a mix of splashes.",
1150 "hear the shower running.",
1151 "inhale the smell of brine.",
1152 "hear a thunderous rumble.",
1153 "listen to the emergency service trying to repair a broken water pipe.",
1154 "hear someone scream 'HELP! I can't swim! Save me please, I'm drowning!!!",
1155 "realize that the sorcery adept doesn't know how to stop the water...", /* some poem that I forgot the name off, maybe "the mage adept"? the poor sap wants to fill the bathtub with water by using a spell but forgot how to stop the helpers he summoned */
1156 "detect a flooding on this sub level.",
1158 You("%s", showerroom_msg
[rn2(6+hallu
*4)]);
1161 if ((level
.flags
.has_greencrossroom
|| (at_dgn_entrance("Green Cross")) ) && !rn2(200)) {
1162 static const char *greencrossroom_msg
[] = {
1163 "hear some mundane talk.", /* most of these are Castle of the Winds-inspired */
1164 "listen to the cackle of poultry.",
1165 "feel like reaching the next town.",
1166 "seem to be in a nice atmosphere.",
1167 "hear pages turning.",
1168 "listen to the villagers' conversations.",
1169 "want to check whether the secret path is open.",
1170 "inhale the sharp smell of burning thatch!",
1171 "suddenly see the hill giant lord throwing enormous rocks on the shops! And he's killing the shopkeeper with a giant club! Ack!",
1172 "must be in a town that's not very easy to reach.",
1173 "hacked into Arabella's chat, allowing you to monitor her talk and that of her girlfriends. And you realize that Henrietta complains about you having gotten away from her because she can't follow you now.",
1174 "need to squeeze past all the statues with the ancient white dragon breathing down your neck!",
1175 "have 100 turns left to find the secret entrance to an otherwise unreachable dungeon level before the hidden warp portal dissipates.",
1176 "somehow feel that the secret advice hussies can't get you for now.",
1178 You("%s", greencrossroom_msg
[rn2(7+hallu
*7)]);
1181 if (level
.flags
.has_ruinedchurch
&& !rn2(200)) {
1182 static const char *ruinedchurch_msg
[] = {
1183 "feel a haunting presence.",
1184 "hear a chiming bell.",
1185 "hear a C major chord.",
1186 "feel that all sanctity of this place has been lost.",
1187 "are sure that the dead are floating around here.",
1188 "hear an orchestral melody that goes 'Daaaaa... daaaaaa... DAAAAAAAAAAAAAAA!!!'",
1189 "notice a sound: 'Ooeoeoeoep! ... Ooeoeoeoep!' Suddenly someone shouts 'Ey, that's not called 'Ooeoeoeoep', that's a church bell, didn't you know that!'",
1190 "remember the bible saying that you should do unto others what you want others to do unto you.",
1191 "know that practice makes perfect. Yeah, yeah.",
1193 You("%s", ruinedchurch_msg
[rn2(5+hallu
*4)]);
1196 if (level
.flags
.has_gamecorner
&& !rn2(200)) {
1197 static const char *gamecorner_msg
[] = {
1198 "hear the Tetris melody.",
1199 "listen to someone playing Diablo 2.",
1200 "seem to catch earshot of people playing Dungeons and Dragons.",
1201 "hear the familiar melody of Mario Kart 64.",
1202 "listen to the typical Electronic Arts games slogan.",
1203 "seem to catch earshot of a dragon shout from Skyrim.",
1204 "encounter a tiny lag that indicates monsters being spawned.",
1205 "have to click OK on the shareware notice.",
1206 "see the accursed crashy graphics card logo.",
1207 "hear a speedrunner curse at Super Kaizo Mario because the game is too damn hard!",
1208 "suddenly feel that you're really playing GTA! A cop car appears! The cop wields a shotgun! The cop fires a shotgun shell!--More--",
1209 "lost your last hitpoint and jump out of the picture!",
1210 "suddenly feel like just standing there and letting a sexy prostitute kick you in the nuts repeatedly.",
1211 "want to be expenditure-feasted by the sharp claws!",
1212 "absolutely long to have a succubus slowly and very painfully scratch you with her erotic blade!",
1213 "feel that the developer inserted even the most impossible bugs into the game that a normal mortal could never conceive!",
1214 "feel that the colors are very fleece-bouffant!",
1215 "hear someone say 'Die-Far-ben-sind-sehr-flau-schel-bau-schig!'",
1216 "push buttons and your stupid PC responds by making annoying 'DIE-DIE-DOE' sounds instead of executing your commands!",
1218 You("%s", gamecorner_msg
[rn2(9+hallu
*10)]);
1221 if (level
.flags
.has_illusionroom
&& !rn2(200)) {
1222 static const char *illusionroom_msg
[] = {
1223 "feel a little confused about this place.",
1224 "feel that things aren't necessarily really there just because you can see them.",
1225 "are sure that some strange presences are on this floor.",
1226 "need to stay alert for anything out of the ordinary.",
1227 "have an everchanging feeling.",
1228 "feel slightly irritated and annoyed at something.",
1229 "notice that your weapon has no effect! Get a shield!",
1230 "can't think about difficult things or your brain will asplode!",
1231 "forgot that you were suffering from amnesia! Oh no!",
1232 "decide that you'd rather not and we'll just pretend that you did so you can move on.",
1233 "hope that one of the gods can help you out of your predicament...",
1234 "should stop thinking of eldritch abominations all the time or you'll end up permanently confused!",
1236 You("%s", illusionroom_msg
[rn2(6+hallu
*6)]);
1240 if (level
.flags
.has_terrorhall
&& !rn2(200)) {
1241 static const char *terrorhall_msg
[] = {
1242 "feel weirded out.",
1243 "sense something strange about this place.",
1244 "think you just saw something move.",
1246 "hear the walls crumbling down.",
1247 "hear an eerie curse.",
1248 "think you're seeing white rabbits!",
1249 "feel totally down, like you're on a bad trip!",
1250 "feel reminded of the am shop notice!",
1251 "develop an acute case of agoraphobia because of all the car notices!",
1252 "listen to someone flat a notice on you!",
1253 "hear the all-too-familiar telltale sound of an incoming airstrike! RUN! TAKE COVER!",
1255 You("%s", terrorhall_msg
[rn2(6+hallu
*6)]);
1259 if (level
.flags
.has_insideroom
&& !rn2(200)) {
1260 static const char *insideroom_msg
[] = {
1261 "have a weird feeling of chills and excitement.",
1262 "sense that something isn't right here...",
1263 "shudder in expectation.",
1264 "listen to Arabella saying 'The inside part is too dangerous for me.'",
1265 "listen to Arabella saying 'Please be careful in the inside part.'",
1266 "listen to Arabella saying 'That place is so perilous, even I won't be entering.'",
1267 "listen to Arabella saying 'Take care. There's nasty traps everywhere.'",
1268 "listen to Arabella saying 'Even I can't remember all the nasty traps I placed on this dungeon level.'",
1269 "listen to Anastasia saying 'My vacuum cleaner is waiting for you.'",
1270 "listen to Henrietta saying 'You won't get away from me this time.'",
1271 "listen to Katrin saying 'Why don't you come over here and have some fun with me?'",
1272 "listen to Jana saying 'I'm well hidden, you won't even find me.'",
1273 "see an error message pop up: NETHACK.EXE caused a General Protection Fault at address 000D:001D.",
1274 "see an error message pop up: Warning: Low Local Memory. Freeing description strings.",
1275 "see an error message pop up: nt|| - Not a valid save file",
1276 "see an error message pop up: APPLICATION ERROR - integer divide by 0",
1277 "see an error message pop up: Runtime error! Program: NETHACK.EXE. R6025 - pure virtual function call",
1278 "see an error message pop up: Buffer overrun detected! Program: NETHACK.EXE. A buffer overrun has been detected which has corrupted the program's internal state. The program cannot safely continue execution and must now be terminated.",
1279 "see an error message pop up: Runtime error! Program: NETHACK.EXE. This application has requested the Runtime to terminate it in an unusual way. Please contact the application's support team for more information.",
1280 "see an error message pop up: Not enough memory to create inventory window",
1281 "see an error message pop up: Error: Nethack will only run in Protect mode",
1282 "see an error message pop up: Oops... Suddenly, the dungeon collapses. NETHACK.EXE has stopped working. Unsaved data may have been lost.",
1283 "see an error message pop up: ERROR: SIGNAL 11 WAS RAISED",
1284 "see an error message pop up: UNHANDLED EXCEPTION: ACCESS_VIOLATION (C0000005)",
1285 "see an error message pop up: An error has occurred in your application. If you choose Close, your application will be terminated. If you choose Ignore, you should save your work in a new file.",
1286 "see an error message pop up: Do you want your possessions identified? DYWYPI?",
1287 "see an error message pop up: Windows Subsystem service has stopped unexpectedly.",
1288 "see an error message pop up: nv4_disp.dll device driver is stuck in an infinite loop.",
1289 "see an error message pop up: The win16 subsystem has insufficient resources to continue running. Click on OK, close your application and restart your machine.",
1290 "see an error message pop up: System resources depleted. Please restart your computer.",
1291 "listen to Arabella saying 'Stop stalking me all the time, you're creepy.'",
1292 "listen to Arabella saying 'You're not Marc, and therefore you won't ever defeat me.'",
1293 "listen to Arabella saying 'You admitted that you want to grope my girl butt. Time to join #metoo and tell them that you're a sexual predator.'",
1294 "listen to Arabella saying 'What, you thought I stepped into dog shit because I want to clean my shoes myself? No, *you* will do that now, by hand and without tools.'",
1295 "listen to Arabella saying 'If you get too close to me, I will push your shoes into a heap of shit. Then, no matter what you do to me, you'll at least have to clean the shit off your shoes again.'",
1296 "listen to Anastasia saying 'Thanks for cleaning the dog shit off my profiled dancing shoes. Now I'll find a new heap of shit to step into, and if you like, you may then clean my shoes again. Was it fun?'",
1297 "listen to Henrietta saying 'Because of you I stepped into dog shit with my Henrietta shoes. As a punishment you have to clean them by hand now.'",
1298 "listen to Katrin saying 'Please let me stick my soft chewing gum on your skin! Then I can very slowly and extremely painfully take it off again, ripping off your skin in the process.'",
1299 "listen to Jana saying 'Even if you find me, I'll just teleport away and prevent you from defeating me! And your skill certainly isn't good enough to reach Sven, so you won't be fulfilling the alternate victory condition either!'",
1301 You("%s", insideroom_msg
[rn2(12+hallu
*27)]);
1305 if (level
.flags
.has_riverroom
&& !rn2(200)) {
1306 static const char *riverroom_msg
[] = {
1308 "hear waves on sand.",
1309 "hear something fishy happening.",
1310 "hear the trickle of water.",
1311 "sense a watery smell mixed with grass.",
1312 "listen to an unusual ambient sound.",
1313 "listen to a song that goes 'Leyde, coming down to the ri-ver...'",
1314 "suddenly start humming the tune of 'Green River' by CCR.",
1315 "hear a fountain crash through solid rock with a mighty roar!",
1316 "admire the beautiful mountains around here. Strange, how can mountains be in an underground dungeon?",
1317 "return to your hiding place, only to find a cursed called. Shit.",
1318 "return to your weapon camp, but to your dismay Arabella has looted almost everything, leaving only a single wand of magic missile for you.",
1319 "get the dreaded 'Can't write to save file' error. Bullshit.",
1320 "hear burly voices singing shanties.",
1321 "here someone ask about warez.",
1322 "hear a speedboat.",
1323 "hear a squeaking rubber duck!",
1324 "hear a loud advert for Tide.",
1325 "hear a commercial for protein bars.",
1326 "hear a shark jumping!",
1327 "hear a gull asking for a bite of your sandwich.",
1329 "hear a sea shell exploding!",
1330 "hear a C-shell script running.",
1332 You("%s", riverroom_msg
[rn2(8+hallu
*16)]);
1336 if (level
.flags
.has_tenshall
&& !rn2(200)) {
1337 static const char *tenshall_msg
[] = {
1338 "feel a certain tension.",
1339 "feel a certain tension. This message was stolen from ADOM.",
1340 "sense a certain tension.",
1341 "suddenly see nightmarish images with Thomas Biskup in your mind!", /* ADOM creator */
1342 "sense a certain tension. Perhaps you should head for the nearest toilet...",
1343 "sense a certain tension. That dreaded Dungeon Master probably filled the next room with arch-liches, disenchanters and master mind flayers.",
1344 "sense a certain tension. That dreaded Dungeon Master probably filled the next room with black dragons, green slimes and invisible cockatrices.",
1345 "sense a certain tension. That dreaded Dungeon Master probably filled the next room with luck suckers, Mothers-in-Law and questing beasts.",
1346 "fear that a fucking crash bug is going to eat your savegame file!", /* yes, Adom does that sometimes */
1347 "fear that some anti-cheat mechanism is going to curse all of your items even though you clearly didn't cheat at all!", /* and yes, that's another annoying fact of Adom that makes me glad I'm playing Nethack instead --Amy */
1349 You("%s", tenshall_msg
[rn2(3+hallu
*7)]);
1352 if (level
.flags
.has_zoo
&& !rn2(200)) {
1353 static const char * const zoo_msg
[] = {
1354 "a sound reminiscent of an elephant stepping on a peanut.",
1355 "a sound reminiscent of a seal barking.",
1356 "David feeding his animals.",
1358 "Doctor Doolittle!",
1359 "someone asking 'Who the fuck is David?'",
1361 for (mtmp
= fmon
; mtmp
; mtmp
= mtmp
->nmon
) {
1362 if (DEADMONSTER(mtmp
)) continue;
1363 if ((mtmp
->msleeping
|| is_animal(mtmp
->data
)) &&
1364 mon_in_room(mtmp
, ZOO
)) {
1365 You_hear("%s", zoo_msg
[rn2(4+hallu
*2)]);
1370 if (level
.flags
.has_shop
&& !rn2(200)) {
1371 if (!(sroom
= search_special(ANY_SHOP
))) {
1373 level
.flags
.has_shop
= 0;
1376 if (tended_shop(sroom
) &&
1377 !index(u
.ushops
, ROOM_INDEX(sroom
) + ROOMOFFSET
)) {
1378 static const char * const shop_msg
[3] = {
1379 "someone cursing shoplifters.",
1380 "the chime of a cash register.",
1381 "Neiman and Marcus arguing!",
1383 if (rn2(50)) You_hear("%s", shop_msg
[rn2(2+hallu
)]);
1384 else { /* sporkhack; I know they don't always fit, but oh well --Amy */
1385 static const char * const shop_sporkmsg
[] = {
1386 "Any %s would love these! Finest quality!",
1387 "Fit for a Knight, but they'll last for weeks!",
1388 "It's dangerous 'round here these days... better wear something safe!",
1389 "Hey, %s, I've got something here that'll fit you perfectly!",
1390 "Guaranteed safety or double your money back!",
1391 "If any of the armors you buy here doesn't save your life, you get your money back of course!",
1392 "'ere now, this isn't a library; get lost, you freeloader!",
1393 "Waterproof ink upon request! ... for a small surcharge.",
1394 "Curses removed, gold detected, and weapons enchanted, at your whim!",
1395 "If you can read, %s, you'll want some of these!",
1396 "Booze on ice! Getcher booze on ice!",
1397 "Come on, %s. You know you're thirsty.",
1398 "Ahhh, it'll put hair on yer chest!",
1399 "Lowest percentage of cursed items around!",
1400 "Sharpest weapons around! On sale, today only!",
1401 "We sell 'em, you stab 'em!",
1402 "Guaranteed to not dull for ten fights or your money back!",
1403 "Look, %s, with a face like that you'll be in a lot of fights. Better buy something now.",
1404 "You'll never slash the same again after one of ours!",
1405 "Gitchore luvverly orinjes!",
1406 "Fresh fish! So fresh it'll grab yer naughty bits!",
1407 "Sausage inna bun! Hot sausage!",
1408 "Genuine pig parts, these. So good most pigs don't even know they got 'em.",
1409 "Well, you seem like a fine, discerning young %s; come look at this.",
1410 "Eat hot and tasty pizza here!",
1411 "We sell the best food in the world: the Doenerteller Versace!",
1412 "Do you like McDonalds, %s? Well, our fries are even better than theirs, so come on over!",
1413 "Come over %s, and taste the one and only Shawarma you'll get in the entire dungeon!",
1414 "Yo %s, this way to the Burger King restaurant! We know you're hungry!",
1415 "Special sparklies for a special %s, perhaps?",
1416 "Once you put one of ours on, you'll never want to take it off!",
1417 "Our bands never break or melt!",
1419 "Credit available for valued customers!",
1420 "We offer premium quality inka rings! Guaranteed to make your woman use her sexy butt cheeks to shower you with love!",
1421 "The other shops may be trying to sell you amulets of strangulation, but we have something that saves your life instead!",
1422 "Bugger off, you filthy little %s. Don't come begging around here!",
1423 "Straightest zaps anywhere! 100%% money back guarantee (less usage)!",
1424 "Our wands explode less than all others!",
1425 "New EZ-BREAK feature on these in case of emergency!",
1426 "Dude, %s, I have a wand of wishing for sale today. Buy now before someone else does!",
1427 "Tins opened, faces wiped, gazes reflected; your one-stop shop!",
1428 "How you gonna carry all your stuff without a bag, %s?",
1429 "Must be hard kickin' all those doors down, I bet a key would help...",
1430 "Only tools wouldn't buy our tools!",
1431 "Large print available!",
1432 "Mental magnificence for the scholarly IN-clined!",
1433 "'Banned' section now open! (I.D. required)",
1434 "Hey, %s! Best candles in Minetown! You'll need 'em later, count on it!",
1435 "You've got a long way down yet, %s. Be sure you're ready.",
1436 "Let us be the light in your darkness!",
1437 "You know, I hear some of these old lamps might be... magic.",
1438 "Be a shame if you missed anything because you didn't see it!",
1439 "Enchant your armor here! We offer premium enchant armor services!",
1440 "Hey %s, want to rustproof your armor? Our service will never fail you!",
1441 "Need to poison your weapon, %s? I have what you need!",
1442 "Dawg, I got quality shit for you here.",
1443 "Out of enchant weapon scrolls? Come over to my shop and you can enchant your weapon for just a few zorkmids!",
1444 "Tired of your weapon rusting and corroding all the damn time? Our shop allows you to proof them for a small fee!",
1445 "Got surplus weapons and need to know their enchantment? No problem, our appraisal service's really cheap and guaranteed to help you!",
1446 "Purchase your identify services here! We'll allow you to know what your items are!",
1447 "Premium wand recharging, %s! You don't want to miss our service!",
1448 "Enchant your rings in our shop! Only a few hundred zorkmids per charge!",
1449 "Tools empty? No problem - we recharge them if you got the money!",
1450 "You know you need a new pet! Come now and pick from our fine selection of brand-new figurines!",
1451 "Come to our gun shop and purchase rifles and ammo for all your hunting needs!",
1453 verbalize(shop_sporkmsg
[rn2(SIZE(shop_sporkmsg
))],urace
.noun
);
1458 if (Is_oracle_level(&u
.uz
) && !rn2(400)) {
1459 /* make sure the Oracle is still here */
1460 for (mtmp
= fmon
; mtmp
; mtmp
= mtmp
->nmon
)
1461 if (!DEADMONSTER(mtmp
) && mtmp
->data
== &mons
[PM_ORACLE
])
1463 /* and don't produce silly effects when she's clearly visible */
1464 if (mtmp
&& (hallu
|| !canseemon(mtmp
))) {
1465 static const char * const ora_msg
[] = {
1466 "a strange wind.", /* Jupiter at Dodona */
1467 "convulsive ravings.", /* Apollo at Delphi */
1468 "snoring snakes.", /* AEsculapius at Epidaurus */
1469 "someone say \"No more woodchucks!\"",
1470 "a loud ZOT!" /* both rec.humor.oracle */
1472 /* KMH -- Give funny messages on Groundhog Day */
1473 if (flags
.groundhogday
) hallu
= 1;
1474 You_hear("%s", ora_msg
[rn2(3+hallu
*2)]);
1478 if (!Is_blackmarket(&u
.uz
) && at_dgn_entrance("One-eyed Sam's Market") &&
1480 static const char *blkmar_msg
[] = {
1481 "You hear someone complaining about the prices.",
1482 "Somebody whispers: \"Food rations? Only 900 zorkmids.\"",
1483 "Somebody whispers: \"For one million zorkmids you can buy the legendary one-of-a-kind Excalibur!\"",
1484 "You feel like searching for more gold.",
1485 "Somebody whispers: \"Dawg, I got quality shit around here.\"",
1486 "Somebody whispers: \"I have that old playboy magazine issue that has naked pics of several dozen celebrities. I'll sell it to you for 10000 zorkmids.\"",
1488 pline("%s", blkmar_msg
[rn2(3+hallu
*3)]);
1491 /* finding alignment quests is way too hard, so the player will get some help. --Amy */
1492 if ( (at_dgn_entrance("Lawful Quest") || at_dgn_entrance("Neutral Quest") || at_dgn_entrance("Chaotic Quest") ) &&
1494 static const char *alignquest_msg
[] = {
1495 "You feel the presence of some sort of force.",
1496 "There seems to be something special about this place.",
1497 "You detect the presence of an alignment quest portal!",
1498 "You hear an evil figure taunting you to step through the magic portal!",
1499 "You hear someone say: \"Force field activated!\"",
1500 "You hear someone say: \"Warp panel test sequence is starting in three... two... one...\"",
1501 "You see Diablo 2, the boss from the game with the same name, and he's holding your mother hostage!",
1502 "You know that on the flipside they have a cat AND a dog!",
1504 pline("%s", alignquest_msg
[rn2(4+hallu
*4)]);
1507 /* finding the subquest is even more annoying because you have to do it */
1508 if ( at_dgn_entrance("The Subquest") && u
.silverbellget
&& !rn2(500) ) {
1509 static const char *subquest_msg
[] = {
1510 "You sense some questing power!",
1511 "You detect the presence of the subquest portal!",
1512 "A lot of force seems to be in the air.",
1513 "You listen to the taunts of your nemesis who wants a rematch!",
1514 "You suddenly fear that you'll face your nemesis again and lose!",
1515 "You have a vision of your home being burned to the ground by the person you despise the most!",
1516 "Something tells you that the only thing you can depend on is your family, and even that not always!",
1517 "You hear a voice announce: \"Morn', player. I'm Sean Gonorrhea. I like my coffee black, my women slutty, and my mucosa membranes inflamed.\"",
1519 pline("%s", subquest_msg
[rn2(4+hallu
*4)]);
1528 static const char * const h_sounds
[] = {
1529 "beeps", "boings", "sings", "belches", "creaks", "coughs", "rattles",
1530 "ululates", "pops", "jingles", "sniffles", "tinkles", "eeps",
1531 "clatters", "hums", "sizzles", "twitters", "wheezes", "rustles",
1532 "honks", "lisps", "yodels", "coos", "burps", "moos", "booms",
1533 "murmurs", "oinks", "quacks", "rumbles", "twangs", "bellows",
1534 "toots", "gargles", "hoots", "warbles", "crackles", "hisses",
1535 "growls", "roars", "buzzes", "squeals", "screeches", "neighs",
1536 "wails", "commotions", "squaarks", "screams", "yowls", "yelps",
1537 "snarls", "squeals", "screaks", "whimpers", "whines", "howls",
1538 "yips", "barks", "purrs", "meows", "mews", "drones", "whinnies",
1539 "whickers", "gurgles", "burbles", "shrieks", "baaaas", "clucks",
1543 /* make the sounds of a pet in any level of distress */
1544 /* (1 = "whimper", 2 = "yelp", 3 = "growl") */
1546 pet_distress(mtmp
, lev
)
1547 register struct monst
*mtmp
;
1551 if (mtmp
->msleeping
|| !mtmp
->mcanmove
|| !mtmp
->data
->msound
)
1553 /* presumably nearness and soundok checks have already been made */
1556 verb
= h_sounds
[rn2(SIZE(h_sounds
))];
1558 verb
= growl_sound(mtmp
);
1560 verb
= yelp_sound(mtmp
);
1562 verb
= whimper_sound(mtmp
);
1564 panic("strange level of distress");
1567 pline("%s %s%c", Monnam(mtmp
), verb
, lev
>1?'!':'.');
1568 if (flags
.run
) nomul(0, 0, FALSE
);
1569 wake_nearto(mtmp
->mx
,mtmp
->my
,mtmp
->data
->mlevel
*6*lev
);
1573 /* the sounds of a seriously abused pet, including player attacking it */
1574 /* in extern.h: #define growl(mon) pet_distess((mon),3) */
1578 register struct monst
*mtmp
;
1582 switch (mtmp
->data
->msound
) {
1619 ret
= "gurgles threateningly";
1622 ret
= "shrieks aggravatingly";
1626 ret
= "rattles frighteningly";
1627 You("freeze for a moment.");
1628 nomul(-2, "scared by rattling", TRUE
);
1632 ret
= "laughs fiendishly";
1635 ret
= "mumbles loudly";
1638 ret
= "calls for the casino's security";
1641 ret
= "screams 'Wait until I activate the awesome power of the yellow glyph!'";
1644 pline("%s", generate_garbage_string());
1647 ret
= "looks very sad";
1650 ret
= "is heavily damaged";
1653 ret
= "screams 'How do you dare interrupting me during an important call!'";
1656 ret
= "shouts 'You dorf, get away get away!'";
1659 ret
= "announces 'Sore wa seisen-shi no yarikata ni hanshimasu.'";
1662 ret
= "shouts 'Ty pochuvstvuyesh' kholodnyy potseluy smerti, debil!'";
1665 ret
= "is jolted into consciousness";
1668 ret
= "shouts 'Attacking a journalist is a severe crime!'";
1671 ret
= "shouts 'Hey! I want to repair your gear, not be attacked by you!'";
1674 ret
= "shouts 'Fuck you, asshole! I'm gonna sell my stuff somewhere else!'";
1677 ret
= "shouts 'You can't fight fair, eh?'";
1680 ret
= "emits a long, angry grunt";
1683 ret
= "screams 'Hopefully you contract the virus and die!'";
1686 ret
= "emits a long, anguished trumpet sound";
1690 ret
= "screams 'Ow-wow-wow! Owwwww!'";
1693 ret
= "shouts 'One day I'll kill you, and then you'll end up crying!'";
1695 case MS_PRINCESSLEIA
:
1696 ret
= "sobs 'That's not a way to treat a princess...'";
1699 ret
= "shouts 'You will be excommunicated!'";
1702 ret
= "shouts 'Friendly fire! FRIENDLY FIRE!'";
1705 ret
= "does not make a sound when seriously abused";
1708 ret
= "is bleeding terribly...";
1709 increasesanity(rnz(100));
1712 ret
= "complains about the clock being broken";
1715 ret
= "screams 'Ohtenthousandfoldgod!'";
1718 ret
= "shouts 'Wolloh asshole, I'm gonna beat up your ugly face wolloh!'";
1721 ret
= "seems unable to remember the code";
1724 ret
= "screams 'Argh! I'm a barber, not a haircutter!'";
1727 ret
= "is about to go crazy";
1730 ret
= "frantically tries to cast an emergency spell";
1733 ret
= "is about to escape";
1736 ret
= "is seriously afraid!";
1739 ret
= "seems fearful!";
1742 ret
= "shouts 'I'll disappear if this continues!'";
1744 case MS_TALONCOMPANY
:
1745 ret
= "shouts 'Damn, I'm hit!'";
1748 ret
= "shouts 'Damn, I'm hit!'";
1751 ret
= "shouts 'Stand still for once!'";
1754 ret
= "shouts 'Ten-four! Target in sight!'";
1757 ret
= "shouts 'I'm gonna eat your arms when you're dead, little human!'";
1759 case MS_MYTHICALDAWN
:
1760 ret
= "mutters 'The paradise awaits me...'";
1763 ret
= "shouts 'Wince, failure!'";
1766 ret
= "shouts 'Are you really trying to mess with the Brotherhood?'";
1769 ret
= "shouts 'Been a long time since I last killed someone!'";
1772 ret
= "mutters 'Huh, I think someone just attacked me.'";
1774 case MS_SHIVERINGESLES
:
1775 ret
= "announces 'Widerliche Tergens sind das. Heffin sie alle.'";
1778 ret
= "mumbles 'Ah, who cares, I'm gonna die anyway.'";
1781 ret
= "shouts 'I will kill you! I swear, if you don't leave NOW I'll really kill you!'";
1784 ret
= "shouts 'Now I'm gonna disenchant all your armor.'";
1787 ret
= "laughs 'You're no match for me.'";
1790 if (flags
.female
) ret
= "laughs 'Now I'll rape you, little girl.'";
1791 else ret
= "sneers 'Fucking man, begone!'";
1793 case MS_SHOCKTROOPER
:
1794 ret
= "says 'ku kur ku'";
1797 ret
= "screams 'You violated my gender!!!!!!!111'";
1800 ret
= "screams 'I was seriously abused!'";
1803 ret
= "shouts 'Gonna cleave ye to the brisket!'";
1806 ret
= "shouts 'Your ass will come out of the back!'";
1809 ret
= "makes a frenzied clamping sound";
1812 ret
= "laughs 'You're no match for me, wimp.'";
1815 ret
= "screams 'You're cruel.'";
1828 ret
= "Unfinished sound effect.";
1832 ret
= "Error 25. Please restart the game";
1835 ret
= "moans 'Please just kill me now.'";
1838 ret
= "screams 'Alert! Serious environmental damage!'";
1841 ret
= "groans 'I will get your metal someday...'";
1844 ret
= "doesn't show a visible reaction";
1847 ret
= "whines 'owwww %s has me pain-done!'";
1850 ret
= "shouts 'Stop that! You're not allowed to use those girl boots against me!'";
1853 ret
= "moans 'Pompejiiiiiiii...'";
1856 ret
= "shouts 'Now leave to me finite in peace, you hell creature!'";
1859 ret
= "shouts 'If you continue like that, I'll kill you.'";
1862 ret
= "shouts 'If you keep angering me like that, you'll pay.'";
1865 ret
= "shouts 'Hey! You're damaging my pokedex's CPU!'";
1868 ret
= "drones 'Hostile acts detected.'";
1871 ret
= "screams 'The apocalypse is truly coming now, everyone's going insane!'";
1874 ret
= "shouts 'I am an officer of the law!'";
1877 ret
= "shouts 'I'm gonna report you to your superior!";
1880 ret
= "shouts 'Don't make me bite your the neck!'";
1883 ret
= "screams 'Fucking cunt!'";
1886 ret
= "shouts 'My pimp is the only one who may lay a hand on me!'";
1889 ret
= "shouts 'YOU SHALL BE EXTERMINATED!'";
1893 case MS_FART_NORMAL
:
1895 ret
= "screams 'Stop slapping my butt! That's painful!'";
1898 ret
= "shouts 'Hey! *I* am the boss here, not you!'";
1901 ret
= "screams 'Don't treat us like that! We don't like that at all!'";
1904 ret
= "screams 'You ruined my makeup!'";
1907 ret
= "shouts 'Siz Allah'in sadik bir takipcisi degilsiniz, kafir!'";
1910 ret
= "looks at you with a gaze that is capable of killing";
1911 if (!rn2(20)) losehp(d(10,8), "the HC alien's gaze", KILLED_BY
);
1912 else if (!rn2(5)) losehp(d(6,8), "the HC alien's gaze", KILLED_BY
);
1913 else losehp(d(4,6), "the HC alien's gaze", KILLED_BY
);
1921 /* the sounds of mistreated pets */
1922 /* in extern.h: #define yelp(mon) pet_distress((mon),2) */
1927 register struct monst
*mtmp
;
1931 switch(mtmp
->data
->msound
) {
1955 ret
= "gurgles hissingly";
1958 ret
= "shrieks in pain";
1963 You("freeze for a moment.");
1964 nomul(-2, "scared by rattling", TRUE
);
1968 ret
= "stops laughing";
1971 ret
= "mumbles a bit";
1974 ret
= "complains about a loss of money";
1977 pline("%s", generate_garbage_string());
1983 ret
= "doesn't look so good";
1986 ret
= "has to interrupt a call";
1989 ret
= "flashes a warning light";
1992 ret
= "mumbles 'Watashi wa futatabi kin'yoku-tekidenakereba narimasen...'";
1995 ret
= "shouts 'Eto podzemel'ye rabotayet ne tak, kak zadumano!'";
1998 ret
= "seems alert for a bit, then dozes off again";
2001 ret
= "checks the camera again";
2004 ret
= "checks the repair hammer again";
2007 ret
= "grumbles 'Stupid cops, can't they just go home...'";
2010 ret
= "assumes a fighting pose";
2013 ret
= "growls annoyedly";
2016 ret
= "screams 'Police! Someone got closer to me than 1,50 meters!'";
2019 ret
= "emits a muffled trumpet sound";
2022 ret
= "seems to be in pain";
2025 ret
= "leafs through the monster stat sheet";
2027 case MS_PRINCESSLEIA
:
2028 ret
= "cries 'It's unfair that I always get hurt! A princess is supposed to be protected from harm at all times!'";
2031 ret
= "shouts 'That's a violation of your conduct!'";
2034 ret
= "laughs 'Keep doing that and I'll tell your boss, then you'll be fired.'";
2037 ret
= "does not make a sound when injured";
2040 ret
= "is squirting blood...";
2041 increasesanity(rnz(10));
2044 ret
= "has to check the clock again";
2047 ret
= "shouts 'Ohdoublegod!'";
2050 ret
= "screams 'Wolloh man, I'll fuck you up if you do that again, wolloh!";
2053 ret
= "is trying hard to keep the code secret";
2056 ret
= "shouts 'No one stops the tunnel queues!'";
2059 ret
= "stares at you in shock";
2062 ret
= "is attempting to erect a force field";
2065 ret
= "ponders the meaning of the dungeon";
2068 ret
= "screams 'Ah! I'm endangered! Screw that, I'm outta here!'";
2071 ret
= "feels in danger";
2074 ret
= "shouts 'Emergency! Gotta get away from here!'";
2076 case MS_TALONCOMPANY
:
2077 ret
= "laughs 'I like it if they fight back!'";
2080 ret
= "shouts 'You can't escape the law!'";
2083 ret
= "shouts 'Fresh blood, just waiting to be spilled!'";
2086 ret
= "shouts 'Security breach!'";
2089 ret
= "mutters 'Just get close... I'll tear off your legs...'";
2091 case MS_MYTHICALDAWN
:
2092 ret
= "announces 'I don't fear death.'";
2095 ret
= "shouts 'You'll be my next trophy, scapegrace!'";
2098 ret
= "shouts 'Evil-doer, I shall purge you from this world!'";
2101 ret
= "shouts 'What the hell do you think you're doing?!'";
2104 ret
= "grumbles 'Hmm, I think I've just been wounded!'";
2106 case MS_SHIVERINGESLES
:
2107 ret
= "grumbles 'Ich werde den Finduh kalikraken. Ehrlich. Darauf koennt Ihr terraten!'";
2110 ret
= "mutters 'This is all worthless.'";
2113 ret
= "growls 'Do that one more time and I'll slit your throat!'";
2116 ret
= "growls 'Leave me alone or I'll cast destroy armor at you.'";
2119 ret
= "snickers 'Does that little adventurer really think they can match my skill?'";
2122 if (flags
.female
) ret
= "snickers 'You really want me to play with the orifice between your legs, huh, girl?'";
2123 else ret
= "shouts 'Asshole dude! Leave me the fuck alone!'";
2125 case MS_SHOCKTROOPER
:
2126 ret
= "says 'dup dup'";
2129 ret
= "shouts 'Did you just assume my gender?'";
2132 ret
= "shouts 'I have been mistreated!'";
2135 ret
= "shouts 'Hang'em from the yardarm!'";
2138 ret
= "shouts 'Penis masturbation! Titty fuck!'";
2141 ret
= "drums rapidly";
2144 ret
= "sneers 'If you do that again I'll force you to clean the stables.'";
2147 ret
= "sighs 'Beggars always cry...'";
2160 ret
= "Unfinished sound effect.";
2164 ret
= "Buffer overrun detected. NETHACK cannot safely continue execution and needs to close.";
2167 ret
= "mutters 'Oh, if only I could have stayed dead...'";
2170 ret
= "screams 'All activists, protect the trees with your lives!'";
2173 ret
= "shouts 'If you don't give me your metal I'll shoot you with my gun and take it by force!'";
2176 ret
= "has second thoughts about you";
2179 ret
= "cries 'noooooo i broke a nail!'";
2182 ret
= "is sad that no one wants to clean the female shoes";
2185 ret
= "shouts 'Pompeji!!!'";
2188 ret
= "bellows 'You are always cursed!'";
2191 ret
= "shouts 'You no-good bastard!'";
2194 ret
= "shouts 'Better stop mistreating me, for you'll not like my counterattack.'";
2197 ret
= "looks worriedly at the PokeGear(TM) display";
2200 ret
= "drones 'Threat level omega.'";
2203 ret
= "mutters 'Everything is falling apart at the seams...'";
2206 ret
= "moans 'Why doesn't the glyph work...'";
2209 ret
= "blows a whistle";
2213 ret
= "shouts 'Medic!'";
2219 ret
= "grumbles 'If you do that again I'm gonna open a can of whoopass on you...'";
2222 ret
= "exclaims 'Hey! I ain't a slut!'";
2225 ret
= "shouts 'NO! FUCK YOU!!!'";
2229 case MS_FART_NORMAL
:
2231 ret
= "sobs 'This is humiliating...'";
2234 ret
= "shouts 'That's twice you hit me now! One more time and I'll kill you!'";
2237 ret
= "threatens 'If you keep doing that, we'll scratch your legs full length!'";
2240 ret
= "shouts 'That's no way to treat a woman!'";
2243 ret
= "shouts 'Peygamber bunu hatirlayacak!'";
2246 ret
= "strikes fear into your heart with a gaze";
2247 make_feared(HFeared
+ rnd(10 + (monster_difficulty()) ),TRUE
);
2250 ret
= (const char*) 0;
2255 /* the sounds of distressed pets */
2256 /* in extern.h: #define whimper(mon) pet_distress((mon),1) */
2261 register struct monst
*mtmp
;
2265 switch (mtmp
->data
->msound
) {
2280 ret
= "shrieks fearfully";
2287 ret
= "laughs quietly";
2290 ret
= "mumbles in anticipation of danger";
2293 ret
= "warns you that the mafia is coming";
2296 pline("%s", generate_garbage_string());
2299 ret
= "waggles warningly";
2302 ret
= "swerves back and forth";
2305 ret
= "briefly interrupts the call and shouts 'CAREFUL!'";
2308 ret
= "alarm installation goes off!";
2312 ret
= "instructs 'Sono pureto kara hanarete kudasai, sore wa jaakuna doragon ni yotte settei sa reta wanadesu.'";
2315 ret
= "laughs 'Vy popadete v lovushku i, nakonets, zakonchite igru, i vy, kak sleduyet, igrayete v takuyu ??der'movuyu igru.'";
2318 ret
= "opens the eyes, looks worriedly at you, and dozes off again";
2321 ret
= "takes a photo of the nearby dungeon floor for some reason";
2324 ret
= "makes a motion towards the floor";
2327 ret
= "screams 'Damn! It's a trap set by the cops!'";
2330 ret
= "shouts 'Search! There's a trap nearby! Use the search command!'";
2333 ret
= "exhales thrice in a row, while gesturing at the floor";
2336 ret
= "shouts 'Let's go somewhere else, the corona wind is bad around here!'";
2339 ret
= "trumpets scaredly";
2342 ret
= "shouts 'Ack! It's a trap!'";
2345 ret
= "laughs 'Bet I'll find that trap before you do?'";
2347 case MS_PRINCESSLEIA
:
2348 ret
= "whispers 'I sense a trap. Please be careful, don't step into it.'";
2351 ret
= "says 'The nemesis put a trap over there! Don't trigger it!'";
2354 ret
= "tells you 'I remember that there's a trap here.'";
2357 ret
= "does not make a sound when distressed";
2360 ret
= "suddenly seems very eager to take one more step!";
2363 ret
= "notices that the clock's alarm has gone off!";
2366 ret
= "shouts 'Oh god, a trap!'";
2369 ret
= "shouts 'Wolloh, watch out, wolloh!'";
2372 ret
= "is trying hard to avoid losing the code";
2375 ret
= "says 'Watch out, the overseer has laid a trap!'";
2378 ret
= "is staring at you in expectation";
2381 ret
= "opens the abilities menu and searches for the one that disarms traps";
2384 ret
= "wonders whether there's an escape path";
2387 ret
= "screams 'Get me away from here, I don't have a good feeling about this place!'";
2390 ret
= "feels like there's a beartrap or landmine nearby!";
2393 ret
= "says 'Are you sure we should stay here?'";
2395 case MS_TALONCOMPANY
:
2396 ret
= "shouts 'Take cover! Ass grenade!'";
2399 ret
= "shouts 'Grenade!'";
2402 ret
= "screams 'Oh, green nines!'";
2405 ret
= "announces 'Explosion imminent!'";
2408 ret
= "announces 'Hot potato!'";
2410 case MS_MYTHICALDAWN
:
2411 ret
= "announces 'Only the chosen ones will survive purgatory.'";
2414 ret
= "announces 'Be quick, mortal.'";
2417 ret
= "announces 'Be careful, there may be traps.'";
2420 ret
= "shouts 'Watch out, they placed a bomb!'";
2423 ret
= "doesn't seem to remember whether there were traps here.";
2425 case MS_SHIVERINGESLES
:
2426 ret
= "says 'Gorbeln. Koennt Ihr sie nicht gorbeln hoeren?'";
2429 ret
= "says 'Stay away from the food.'";
2432 ret
= "says 'Don't step on that plate!'";
2435 ret
= "shouts 'There, an anti-magic trap!'";
2438 ret
= "whispers 'Watch out, that one floor tile is a different shade of color from the rest.'";
2441 if (flags
.female
) ret
= "laughs 'Please, girl, step into the insemination trap for me!'";
2442 else ret
= "shouts 'Watch out man, a trap!'";
2444 case MS_SHOCKTROOPER
:
2445 ret
= "says 'dup blis dup'";
2448 ret
= "mutters 'Some bigot must have placed a trap there!'";
2451 ret
= "says 'I sense a trap nearby.'";
2454 ret
= "says 'Avast, they runnin' a rig on ye!'";
2457 ret
= "grins 'I see an angular sign and a socketed angular sign.'";
2460 ret
= "pings with an annoyingly high pitch";
2463 ret
= "remarks 'This must be another one of those divine tasks.'";
2466 ret
= "shouts 'Someone wants to kill me!'";
2479 ret
= "Unfinished sound effect.";
2483 ret
= "An error has occurred in your application. If you choose Close, NETHACK will close. If you choose Ignore, you should save your work in a new file.";
2486 ret
= "whimpers 'Why do you have to lead me into such dangerous areas?'";
2489 ret
= "shouts 'Attention! Our enemies are up to something devious!'";
2492 ret
= "contemplates 'Hmm... if I just pull that hunk of metal out of the ground...'";
2495 ret
= "is pointing a finger in a certain direction";
2498 ret
= "whimpers 'arrrrgh we will all die!'";
2501 ret
= "seems happy for some reason";
2504 ret
= "points a finger and shouts 'Pompeji!'";
2507 ret
= "remarks 'Pass up, falling!'";
2510 ret
= "shouts 'Watch for the traps!'";
2513 ret
= "wordlessly gazes at you";
2516 ret
= "shouts 'A game bug! Watch out, don't step on that tile next to you or the game will glitch out and delete your last pokemon!'";
2519 ret
= "drones 'Area is scanned for hostile threats!'";
2522 ret
= "shouts 'The plunderers are trying to lead us into a trap!'";
2525 ret
= "suggests you to use a trap detection glyph";
2528 ret
= "calls for reinforcements";
2531 ret
= "whispers 'Careful! It's an ambush!'";
2534 ret
= "shouts 'Shit! Danger!'";
2537 ret
= "moans 'Those filthy customers keep trying to beat me up!'";
2540 case MS_FART_NORMAL
:
2542 ret
= "advises you to be careful";
2545 ret
= "whispers 'Careful, I know there's traps here. Let's try to avoid them.'";
2548 ret
= "shouts 'Stop! There's a heap of shit over there! Make sure we don't step into it!'";
2551 ret
= "asks you to be careful";
2554 ret
= "whispers 'Kafirler goelgede saklaniyor, ama Allah onlan yok edecek.'";
2557 ret
= "makes a pointing gesture";
2560 ret
= (const char *)0;
2565 /* pet makes "I'm hungry" noises */
2568 register struct monst
*mtmp
;
2570 if (mtmp
->msleeping
|| !mtmp
->mcanmove
||
2571 !(carnivorous(mtmp
->data
) || herbivorous(mtmp
->data
) || metallivorous(mtmp
->data
) || mtmp
->egotype_lithivore
|| mtmp
->egotype_metallivore
|| mtmp
->egotype_allivore
|| lithivorous(mtmp
->data
)))
2574 /* presumably nearness and soundok checks have already been made */
2575 if (!is_silent(mtmp
->data
) && mtmp
->data
->msound
<= MS_ANIMAL
)
2576 (void) domonnoise(mtmp
);
2577 else if (mtmp
->data
->msound
>= MS_HUMANOID
) {
2578 if (!canspotmon(mtmp
) && !(mtmp
->data
->msound
== MS_DEEPSTATE
) && !(mtmp
->egotype_deepstatemember
))
2579 map_invisible(mtmp
->mx
, mtmp
->my
);
2580 (void) domonnoise(mtmp
); /* "I'm hungry" for MS_HUMANOID but different for others --Amy */
2586 register struct monst
*mtmp
;
2588 register const char *pline_msg
= 0, /* Monnam(mtmp) will be prepended */
2589 *verbl_msg
= 0; /* verbalize() */
2590 struct permonst
*ptr
= mtmp
->data
;
2594 int armpro
, armprolimit
;
2596 /* monster should make hungry noises only if it actually has to eat --Amy */
2597 boolean hastoeat
= TRUE
;
2598 if (!carnivorous(mtmp
->data
) && !herbivorous(mtmp
->data
) && !metallivorous(mtmp
->data
) && !mtmp
->egotype_lithivore
&& !mtmp
->egotype_metallivore
&& !mtmp
->egotype_allivore
&& !lithivorous(mtmp
->data
)) hastoeat
= FALSE
;
2600 if (mtmp
->egotype_farter
) {
2602 if (uleft
&& objects
[(uleft
)->otyp
].oc_material
== MT_INKA
) {
2603 verbalize("Let me take off that ring for you.");
2604 remove_worn_item(uleft
, TRUE
);
2606 if (uright
&& objects
[(uright
)->otyp
].oc_material
== MT_INKA
) {
2607 verbalize("Let me take off that ring for you.");
2608 remove_worn_item(uright
, TRUE
);
2611 pline("You gently caress %s's %s butt using %s %s.", mon_nam(mtmp
), mtmp
->female
? "sexy" : "ugly", !rn2(3) ? "both your left and right" : rn2(2) ? "your left" : "your right", body_part(HAND
) );
2613 pline("%s seems to love you even more than before.", Monnam(mtmp
) );
2614 if (mtmp
->mtame
< 30) mtmp
->mtame
++;
2615 if (EDOG(mtmp
)->abuse
) EDOG(mtmp
)->abuse
--;
2617 else if (mtmp
->mpeaceful
) {
2618 pline("%s seems to like being felt up by you.", Monnam(mtmp
) );
2620 else if (uarmf
&& uarmf
->oartifact
== ART_SPEAK_TO_OJ
&& !mtmp
->mfrenzied
) {
2621 pline("%s is charmed by your stroking units.", Monnam(mtmp
) );
2622 mtmp
->mpeaceful
= 1;
2624 else if (uarmg
&& uarmg
->oartifact
== ART_GROPESTROKER
&& !mtmp
->mfrenzied
&& !rn2(20)) {
2626 pline("%s is charmed by your stroking units.", Monnam(mtmp
) );
2627 mtmp
->mpeaceful
= 1;
2629 pline("%s is really angry and calls you a sexual predator.", Monnam(mtmp
) );
2630 mtmp
->mfrenzied
= 1;
2634 pline("%s seems to be even more angry at you than before.", Monnam(mtmp
) );
2639 /* presumably nearness and sleep checks have already been made */
2640 if (!flags
.soundok
) return(0);
2642 if (ptr
== &mons
[PM_FJORDE
]) verbalize("I can't help it, I really consider fish to be the most beautiful creatures in existence."); /* must do that here because they're "silent" */
2644 if (is_silent(ptr
)) return(0);
2646 /* Make sure its your role's quest quardian; adjust if not */
2647 if (ptr
->msound
== MS_GUARDIAN
&& ptr
!= &mons
[urole
.guardnum
]) {
2648 int mndx
= monsndx(ptr
);
2649 ptr
= &mons
[genus(mndx
,1)];
2652 /* be sure to do this before talking; the monster might teleport away, in
2653 * which case we want to check its pre-teleport position
2655 if (!canspotmon(mtmp
) && !(mtmp
->data
->msound
== MS_DEEPSTATE
) && !(mtmp
->egotype_deepstatemember
))
2656 map_invisible(mtmp
->mx
, mtmp
->my
);
2658 if (ptr
== &mons
[PM_DONALD_TRUMP
]) { /* idea by Crawldragon, actual messages by Amy */
2660 if (issoviet
) verbalize("Of course Russia was not involved in the presidential election in any way. That's just fake news.");
2661 else pline("Make America GREAT again!");
2664 if (ptr
== &mons
[PM_EMERA
]) verbalize("HATE! HATE! HATE!");
2666 switch (ptr
->msound
) {
2668 return doconsult(mtmp
);
2677 case MS_SELL
: /* pitch, pay, total */
2679 if (mtmp
->data
== &mons
[PM_BAKER
]) {
2680 verbalize("Want a square meal? (100 zorkmids)");
2681 if (yn("Accept the offer?") == 'y') {
2682 if (u
.ugold
< 100) {
2683 You("check your wallet and shake your head.");
2687 pline("The taste is not bad.");
2692 if (mtmp
->data
== &mons
[PM_BERTIE_BOTT
] || mtmp
->data
== &mons
[PM_DIAGON_ALLEY_VENDOR
]) {
2693 verbalize("Want some of my All-Flavor Beans? Just 2000 zorkmids!");
2694 if (yn("Accept the offer?") == 'y') {
2695 if (u
.ugold
< 2000) {
2696 You("check your wallet and shake your head.");
2700 udrink
= mkobj(POTION_CLASS
, TRUE
, FALSE
);
2704 verbalize("Enjoy! I've placed it on the ground. It'll certainly taste like earthworm or vomit, hahaha!");
2707 verbalize("Hmm, I must have misplaced it. Try again later. Here you have your money back.");
2714 if (mtmp
->data
== &mons
[PM_ELONA_TRADER
]) {
2715 verbalize("Do you want to trade 2000 zorkmids for a random item?");
2716 if (yn("Accept the offer?") == 'y') {
2717 if (u
.ugold
< 2000) {
2718 You("check your wallet and shake your head.");
2722 udrink
= mkobj(RANDOM_CLASS
, TRUE
, FALSE
);
2726 verbalize("Alright, check the ground below you!");
2729 verbalize("Huh, it seems that there's some thief around who stole the item just as you went to pick it up! I'll give you a refund, minus an administration fee of 200 zorkmids of course.");
2735 if (mtmp
->data
== &mons
[PM_ELONA_INNKEEPER
]) {
2736 verbalize("Hey, do you want a refreshing drink? Just 1000 zorkmids!");
2737 if (yn("Accept the offer?") == 'y') {
2738 if (u
.ugold
< 1000) {
2739 You("check your wallet and shake your head.");
2743 udrink
= mksobj(POT_BOOZE
, TRUE
, FALSE
, FALSE
);
2745 udrink
->known
= udrink
->dknown
= 1;
2746 udrink
->finalcancel
= 1;
2749 verbalize("There you go, I placed it at your feet!");
2751 verbalize("Oh sorry, we're out of stock.");
2763 /* vampire messages are varied by tameness, peacefulness, and time of night */
2764 boolean isnight
= night();
2765 boolean kindred
= maybe_polyd(u
.umonnum
== PM_VAMPIRE
||
2766 u
.umonnum
== PM_VAMPIRE_LORD
||
2767 u
.umonnum
== PM_VAMPIRE_MAGE
,
2768 Race_if(PM_VAMPIRE
));
2769 boolean nightchild
= (Upolyd
&& (u
.umonnum
== PM_WOLF
||
2770 u
.umonnum
== PM_SHADOW_WOLF
||
2771 u
.umonnum
== PM_MIST_WOLF
||
2772 u
.umonnum
== PM_WINTER_WOLF
||
2773 u
.umonnum
== PM_WINTER_WOLF_CUB
));
2774 const char *racenoun
= (flags
.female
&& urace
.individual
.f
) ?
2775 urace
.individual
.f
: (urace
.individual
.m
) ?
2776 urace
.individual
.m
: urace
.noun
;
2779 if (mtmp
->mhp
< mtmp
->mhpmax
/3) {
2780 verbl_msg
= "I didn't get a drink in a long time...";
2781 } else if (kindred
) {
2782 sprintf(verbuf
, "Good %s to you Master%s",
2783 isnight
? "evening" : "day",
2784 isnight
? "!" : ". Why do we not rest?");
2787 sprintf(verbuf
,"%s%s",
2788 nightchild
? "Child of the night, " : "",
2790 "I can stand this craving no longer!" :
2792 "I beg you, help me satisfy this growing craving!" :
2793 "I find myself growing a little weary.");
2796 } else if (mtmp
->mpeaceful
) {
2797 if (kindred
&& isnight
) {
2798 sprintf(verbuf
, "Good feeding %s!",
2799 flags
.female
? "sister" : "brother");
2801 } else if (nightchild
&& isnight
) {
2803 "How nice to hear you, child of the night!");
2806 verbl_msg
= "I only drink... potions.";
2809 static const char * const vampmsg
[] = {
2810 /* These first two (0 and 1) are specially handled below */
2811 "I vant to suck your %s!",
2812 "I vill come after %s without regret!",
2813 /* other famous vampire quotes can follow here if desired */
2816 verbl_msg
= "This is my hunting ground that you dare to prowl!";
2817 else if (youmonst
.data
== &mons
[PM_SILVER_DRAGON
] ||
2818 youmonst
.data
== &mons
[PM_BABY_SILVER_DRAGON
]) {
2819 /* Silver dragons are silver in color, not made of silver */
2820 sprintf(verbuf
, "%s! Your silver sheen does not frighten me!",
2821 youmonst
.data
== &mons
[PM_SILVER_DRAGON
] ?
2822 "Fool" : "Young Fool");
2825 vampindex
= rn2(SIZE(vampmsg
));
2826 if (vampindex
== 0) {
2827 sprintf(verbuf
, vampmsg
[vampindex
], body_part(BLOOD
));
2829 } else if (vampindex
== 1) {
2830 sprintf(verbuf
, vampmsg
[vampindex
],
2831 (Upolyd
&& !missingnoprotect
) ? an(mons
[u
.umonnum
].mname
) : an(racenoun
));
2834 verbl_msg
= vampmsg
[vampindex
];
2840 if (flags
.moonphase
== FULL_MOON
&& (night() ^ !rn2(13))) {
2841 pline("%s throws back %s head and lets out a blood curdling %s!",
2842 Monnam(mtmp
), mhis(mtmp
),
2843 ptr
== &mons
[PM_HUMAN_WERERAT
] ? "shriek" : "howl");
2844 wake_nearto(mtmp
->mx
, mtmp
->my
, 11*11);
2847 "whispers inaudibly. All you can make out is \"moon\".";
2850 if (flags
.moonphase
== FULL_MOON
&& night()) {
2851 pline_msg
= "howls.";
2852 } else if (mtmp
->mpeaceful
) {
2853 if (mtmp
->mtame
&& (mtmp
->mconf
|| mtmp
->mflee
|| mtmp
->mtrapped
|| (moves
> EDOG(mtmp
)->hungrytime
&& hastoeat
) || mtmp
->mtame
< 5))
2854 pline_msg
= "whines.";
2855 else if (mtmp
->mtame
&& hastoeat
&& (EDOG(mtmp
)->hungrytime
> (moves
+ 1000)))
2856 pline_msg
= "yips.";
2858 if (mtmp
->data
!= &mons
[PM_DINGO
]) /* dingos do not actually bark */
2859 pline_msg
= "barks.";
2862 pline_msg
= "growls.";
2867 if (mtmp
->mconf
|| mtmp
->mflee
|| mtmp
->mtrapped
||
2869 pline_msg
= "yowls.";
2870 else if (moves
> EDOG(mtmp
)->hungrytime
&& hastoeat
)
2871 pline_msg
= "meows.";
2872 else if ((EDOG(mtmp
)->hungrytime
> (moves
+ 1000)) && hastoeat
)
2873 pline_msg
= "purrs.";
2875 pline_msg
= "mews.";
2877 } /* else FALLTHRU */
2880 if (mtmp
->mhp
< mtmp
->mhpmax
/3)
2881 pline_msg
= "lets out a tormented snarl.";
2882 else if (mtmp
->mtame
&& !mtmp
->isminion
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
)
2883 pline_msg
= "growls hungrily.";
2884 else if (mtmp
->mconf
|| mtmp
->mflee
|| mtmp
->mtrapped
)
2885 pline_msg
= "whines.";
2886 else if (mtmp
->mtame
&& hastoeat
&& (EDOG(mtmp
)->hungrytime
> (moves
+ 1000)))
2887 pline_msg
= "yips.";
2889 pline_msg
= "snarls.";
2891 else pline_msg
= mtmp
->mpeaceful
? "snarls." : "growls!";
2895 if (mtmp
->mhp
< mtmp
->mhpmax
/3)
2896 pline_msg
= "lets out a tormented snarl.";
2897 else if (mtmp
->mtame
&& !mtmp
->isminion
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
)
2898 pline_msg
= "emits a faint roar.";
2900 pline_msg
= (ptr
== &mons
[PM_SYSTEM_FAILURE
]) ? "says in a monotone voice: 'Pieteikumu kluda.'" : "snarls.";
2902 else pline_msg
= (ptr
== &mons
[PM_SYSTEM_FAILURE
]) ? "says in a monotone voice: 'Pieteikumu kluda.'" : mtmp
->mpeaceful
? "snarls." : "roars!";
2906 if (mtmp
->mhp
< mtmp
->mhpmax
/3)
2907 pline_msg
= "squeaks in agony.";
2908 else if (mtmp
->mtame
&& !mtmp
->isminion
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
)
2909 pline_msg
= "emits a high squeak.";
2910 else if (mtmp
->mconf
|| mtmp
->mflee
|| mtmp
->mtrapped
)
2911 pline_msg
= "emits a terrified squeak.";
2912 else if (mtmp
->mtame
&& EDOG(mtmp
)->hungrytime
> moves
+ 1000)
2913 pline_msg
= "squeaks joyfully.";
2915 pline_msg
= "squeaks.";
2917 else pline_msg
= "squeaks.";
2921 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
2922 pline_msg
= "says 'Help! Police!'";
2923 } else if (mtmp
->mtame
&& !mtmp
->isminion
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
2924 pline_msg
= "says 'Pass me the damn food already!'";
2925 } else switch (rn2(8)) {
2928 pline_msg
= "squaarks louldly!";
2931 pline_msg
= "says 'Polly want a lembas wafer!'";
2934 pline_msg
= "says 'Nobody expects the Spanish Inquisition!'";
2937 pline_msg
= "says 'Who's a good boy, then?'";
2940 pline_msg
= "says 'Show us yer knickers!'";
2943 pline_msg
= "says 'You'll never make it!'";
2946 pline_msg
= "whistles suggestively!";
2949 pline_msg
= "says 'What sort of a sword do you call that!'";
2955 if (mtmp
->mhp
< mtmp
->mhpmax
/3)
2956 pline_msg
= "squawks in agony.";
2957 else if (mtmp
->mtame
&& !mtmp
->isminion
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
)
2958 pline_msg
= "makes a distressed squawk.";
2959 else if (ptr
== &mons
[PM_RAVEN
] && !mtmp
->mpeaceful
)
2960 verbl_msg
= "Nevermore!";
2962 pline_msg
= "squawks.";
2964 else if (ptr
== &mons
[PM_RAVEN
] && !mtmp
->mpeaceful
)
2965 verbl_msg
= "Nevermore!";
2967 pline_msg
= "squawks.";
2970 if (!mtmp
->mpeaceful
)
2971 pline_msg
= "hisses!";
2972 else if (mtmp
->mtame
) {
2973 if (mtmp
->mhp
< mtmp
->mhpmax
/3)
2974 pline_msg
= "hisses angrily.";
2975 else if (mtmp
->mtame
&& !mtmp
->isminion
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
)
2976 pline_msg
= "tries to snap at your finger.";
2977 else if (mtmp
->mconf
|| mtmp
->mflee
|| mtmp
->mtrapped
)
2978 pline_msg
= "makes a confused hiss.";
2979 else if (mtmp
->mtame
&& hastoeat
&& (EDOG(mtmp
)->hungrytime
> (moves
+ 1000)))
2980 pline_msg
= "hums.";
2982 pline_msg
= "hisses peacefully.";
2984 else return 0; /* no sound */
2988 if (mtmp
->mhp
< mtmp
->mhpmax
/5)
2989 pline_msg
= "displays a blue screen of death!";
2990 else if (mtmp
->mhp
< mtmp
->mhpmax
/3)
2991 pline_msg
= "displays an error message: 'General protection fault'...";
2992 else if (mtmp
->mtame
&& !mtmp
->isminion
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
)
2993 pline_msg
= "is waiting for data input...";
2994 else if (mtmp
->mconf
|| mtmp
->mflee
|| mtmp
->mtrapped
)
2995 pline_msg
= "makes a confused droning sound.";
2997 pline_msg
= "drones.";
2999 else pline_msg
= mtmp
->mpeaceful
? "drones." : "buzzes angrily.";
3001 case MS_GRUNT
: /* YANI by ShivanHunter */
3003 if (mtmp
->data
->mlet
== S_TROLL
) {
3004 if (mtmp
->mhp
< mtmp
->mhpmax
/3)
3005 pline_msg
= "shouts: 'Curse those right-wing extremists!'";
3006 else if (mtmp
->mtame
&& !mtmp
->isminion
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
)
3007 pline_msg
= "shouts: 'Does this stinking hole not have a restaurant??? '";
3008 else if (mtmp
->mconf
|| mtmp
->mflee
|| mtmp
->mtrapped
)
3009 pline_msg
= "shouts: 'rn2(P = NP) can't be false because we didn't see any rn2(0) impossibles, which proves that P = NP!'";
3011 pline_msg
= "shouts: 'VI > EMACS!!!!!'";
3014 if (mtmp
->mhp
< mtmp
->mhpmax
/3)
3015 pline_msg
= "seems to be wounded.";
3016 else if (mtmp
->mtame
&& !mtmp
->isminion
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
)
3017 pline_msg
= "is hungry.";
3018 else if (mtmp
->mconf
|| mtmp
->mflee
|| mtmp
->mtrapped
)
3019 pline_msg
= "grovels.";
3021 pline_msg
= "grunts.";
3024 else pline_msg
= (mtmp
->data
->mlet
== S_TROLL
) ? "shouts: 'VI > EMACS!!!!!'" : "grunts.";
3027 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3)
3028 pline_msg
= "whines.";
3029 else if (mtmp
->mtame
< 5)
3030 pline_msg
= "neighs.";
3031 else if (hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
)
3032 pline_msg
= "whinnies.";
3034 pline_msg
= "whickers.";
3038 if (mtmp
->mhp
< mtmp
->mhpmax
/3)
3039 pline_msg
= "seems about to faint.";
3041 pline_msg
= "wails mournfully.";
3043 else pline_msg
= "wails mournfully.";
3047 if (mtmp
->mhp
< mtmp
->mhpmax
/3)
3048 pline_msg
= "gurgles loudly.";
3050 pline_msg
= "gurgles.";
3052 else pline_msg
= "gurgles.";
3056 if (mtmp
->mhp
< mtmp
->mhpmax
/4)
3057 pline_msg
= "makes a frightened burble.";
3059 pline_msg
= "burbles.";
3061 else pline_msg
= "burbles.";
3065 if (mtmp
->mhp
< mtmp
->mhpmax
/3)
3066 pline_msg
= "emits a faint shriek.";
3068 pline_msg
= "shrieks.";
3072 pline_msg
= "shrieks.";
3077 case MS_FART_NORMAL
:
3080 if (uleft
&& objects
[(uleft
)->otyp
].oc_material
== MT_INKA
) {
3081 verbalize("Let me take off that ring for you.");
3082 remove_worn_item(uleft
, TRUE
);
3084 if (uright
&& objects
[(uright
)->otyp
].oc_material
== MT_INKA
) {
3085 verbalize("Let me take off that ring for you.");
3086 remove_worn_item(uright
, TRUE
);
3089 if (uarmf
&& uarmf
->oartifact
== ART_ELENA_S_REWARD
&& quest_status
.killed_nemesis
&& mtmp
->data
->msound
== MS_FART_NORMAL
&& !mtmp
->mpeaceful
&& !mtmp
->mtame
&& !mtmp
->mfrenzied
) {
3090 mtmp
->mpeaceful
= TRUE
;
3091 verbalize("You've won, so I'll be at your service...");
3094 pline("You gently caress %s's %s butt using %s %s.", mon_nam(mtmp
), mtmp
->female
? "sexy" : "ugly", !rn2(3) ? "both your left and right" : rn2(2) ? "your left" : "your right", body_part(HAND
) );
3096 if (uarmu
&& uarmu
->oartifact
== ART_SUE_LYN_S_SEX_GAME
&& !mtmp
->mpeaceful
&& !mtmp
->mfrenzied
) {
3097 mtmp
->mpeaceful
= TRUE
;
3102 if (mtmp
->mhp
< mtmp
->mhpmax
/3) {
3103 verbl_msg
= "Please don't let me die!";
3105 } else if (mtmp
->mtame
&& !mtmp
->isminion
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
3106 verbl_msg
= "I haven't eaten in a while. Please bring me some chicken meat garnished with pepperoni.";
3109 pline("%s seems to love you even more than before.", Monnam(mtmp
) );
3110 if (mtmp
->mtame
< 30) mtmp
->mtame
++;
3113 else if (mtmp
->mpeaceful
) {
3114 pline("%s seems to like being felt up by you.", Monnam(mtmp
) );
3116 else if (uarmf
&& uarmf
->oartifact
== ART_SPEAK_TO_OJ
&& !mtmp
->mfrenzied
) {
3117 pline("%s is charmed by your stroking units.", Monnam(mtmp
) );
3118 mtmp
->mpeaceful
= 1;
3120 else if (uarmg
&& uarmg
->oartifact
== ART_GROPESTROKER
&& !mtmp
->mfrenzied
&& !rn2(20)) {
3122 pline("%s is charmed by your stroking units.", Monnam(mtmp
) );
3123 mtmp
->mpeaceful
= 1;
3125 pline("%s is really angry and calls you a sexual predator.", Monnam(mtmp
) );
3126 mtmp
->mfrenzied
= 1;
3129 else if (FemtrapActiveSueLyn
&& mtmp
->female
&& !mtmp
->mfrenzied
&& mtmp
->data
->msound
== MS_FART_NORMAL
) {
3131 pline("%s is satisfied by your caressing touch.", Monnam(mtmp
) );
3132 mtmp
->mpeaceful
= TRUE
;
3134 pline("%s demands that you continue stroking %s butt!", Monnam(mtmp
), mhis(mtmp
) );
3138 pline("%s seems to be even more angry at you than before.", Monnam(mtmp
) );
3142 if (uarmu
&& uarmu
->oartifact
== ART_SUE_LYN_S_SEX_GAME
&& mtmp
->mpeaceful
&& !mtmp
->mfrenzied
&& !mtmp
->mtame
&& (mtmp
->m_lev
< 1 || (u
.ugold
>= (mtmp
->m_lev
* 100))) ) {
3143 pline("%s offers to join you for %d zorkmids.", Monnam(mtmp
), (mtmp
->m_lev
< 1) ? 0 : (mtmp
->m_lev
* 100));
3144 if (yn("Accept the offer?") == 'y') {
3145 if (mtmp
->m_lev
> 0) u
.ugold
-= (mtmp
->m_lev
* 100);
3146 struct monst
*suepet
;
3147 suepet
= tamedog(mtmp
, (struct obj
*) 0, TRUE
);
3148 if (suepet
) mtmp
= suepet
;
3149 if (mtmp
) verbalize("You really caressed my butt cheeks so beautifully, I think I'm in love with you!");
3150 else impossible("suepet was tamed but doesn't exist now??");
3158 if (mtmp
->mhp
< mtmp
->mhpmax
/3)
3159 pline_msg
= "unsuccessfully tries to imitate you.";
3160 else if (mtmp
->mtame
&& hastoeat
&& !mtmp
->isminion
&& moves
> EDOG(mtmp
)->hungrytime
)
3161 pline_msg
= "imitates a starving person.";
3163 pline_msg
= "imitates you.";
3165 else pline_msg
= "imitates you.";
3169 if (mtmp
->mhp
< mtmp
->mhpmax
/3)
3170 pline_msg
= "makes a sound that reminds you of a moan.";
3171 else if (mtmp
->mtame
&& hastoeat
&& !mtmp
->isminion
&& moves
> EDOG(mtmp
)->hungrytime
)
3172 pline_msg
= "baaaas hungrily.";
3173 else if (mtmp
->mconf
|| mtmp
->mflee
|| mtmp
->mtrapped
)
3174 pline_msg
= "is scared.";
3176 pline_msg
= "baaaas.";
3178 else pline_msg
= "baaaas.";
3182 if (mtmp
->mhp
< mtmp
->mhpmax
/3) {
3183 pline_msg
= "makes an anguished shriek.";
3185 } else if (mtmp
->mtame
&& hastoeat
&& !mtmp
->isminion
&& moves
> EDOG(mtmp
)->hungrytime
)
3186 pline_msg
= "looks hungry.";
3187 else if (mtmp
->mconf
|| mtmp
->mflee
)
3188 pline_msg
= "runs wildly in fear.";
3189 else if (mtmp
->mtrapped
)
3190 pline_msg
= "is mortally scared.";
3192 pline_msg
= "clucks.";
3194 else pline_msg
= "clucks.";
3198 if (mtmp
->mhp
< mtmp
->mhpmax
/3) {
3199 verbl_msg
= "Hell if I knew how to activate the healing glyph...";
3200 } else if (mtmp
->mtame
&& hastoeat
&& !mtmp
->isminion
&& moves
> EDOG(mtmp
)->hungrytime
)
3201 verbl_msg
= "I've been trying all this time to make this glyph do something, but the only thing that happened was that I'm getting hungry!";
3202 else if (mtmp
->mconf
|| mtmp
->mflee
)
3203 verbl_msg
= "Where is the button? Hey, can you take a look, do you see a button somewhere on this stone glyph?";
3205 verbl_msg
= "I know that the magic glyphs exist, and I even know the name of the place where they supposedly can be found, but I forgot the name! Damn!";
3207 else verbl_msg
= "Go away, I'm looking for the magic glyphs, they have to be around here somewhere...";
3213 if (mtmp
->mhp
< mtmp
->mhpmax
/3) {
3214 pline_msg
= "are very sad that they've been damaged so badly...";
3216 pline_msg
= "look sexy.";
3218 else pline_msg
= "emit an exciting smell.";
3223 if (mtmp
->mhp
< mtmp
->mhpmax
/3) {
3224 pline_msg
= "look quite torn.";
3226 pline_msg
= "are quite erotic.";
3228 else pline_msg
= "want you to take a whiff from them.";
3232 if (mtmp
->handytime
) {
3233 pline_msg
= "is on the phone and can't be interrupted right now!";
3237 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
3238 verbl_msg
= "I gotta call an ambulance!";
3241 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
3242 verbl_msg
= "Do you happen to have the phone number of that pizza delivery service?";
3245 if (mtmp
->mtame
) verbl_msg
= "Go ahead, I'll follow you. But please be aware that I'm expecting an important phone call.";
3246 else verbl_msg
= "Don't disturb me, I'm expecting a phone call!";
3250 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
3251 verbl_msg
= "Just hold on Tetsuo. I'm gonna find you to cure your pain.";
3254 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
3255 verbl_msg
= "Teeeeeeeee tsuuuuuuu oooooooo!";
3258 if (mtmp
->mtame
) verbl_msg
= "Relax, it's gonna take some time to warm my engine up.";
3259 else verbl_msg
= rn2(2) ? "Bo-Bo-Bo" : "Va-Va-Va";
3263 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/10) {
3264 verbl_msg
= "Kofuku shimasen! Watashi wa katsu ka, watashi no kuni no tame ni shinudeshou!";
3267 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
3268 verbl_msg
= "Watashitachi no firudodokuta ni denwa shite kudasai!";
3271 if (mtmp
->mtame
&& mtmp
->mconf
) {
3272 verbl_msg
= "Nani? Chugokujin wa shinryaku shite imasu ka? Soretomo daitoryo wa kakumisairu o hassha shita nodeshou ka?";
3275 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
3276 verbl_msg
= "Yasai o tori ni itte kudasai.";
3279 if (mtmp
->mtame
&& mtmp
->bleedout
) {
3280 verbl_msg
= "Kizuguchi ni subayaku hotai o maku!";
3283 if (mtmp
->mtame
) verbl_msg
= "Kekko.";
3284 else if (mtmp
->mpeaceful
) verbl_msg
= "Go aisatsu.";
3285 else if (mtmp
->mfrenzied
) verbl_msg
= "Watashi ni kohei-sa o kitai shinaide kudasai.";
3286 else verbl_msg
= "Anata wa tekidesu.";
3290 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/10) {
3291 verbl_msg
= "K chertu vsyu igru, kto voobshche zaprogrammiruyet etu fignyu.";
3294 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
3295 verbl_msg
= "Skazhi programmistu, chtoby on otsosal mne.";
3298 if (mtmp
->mtame
&& mtmp
->mconf
) {
3299 verbl_msg
= "YA sluchayno sozdal svoy variant? Eto neobychno.";
3302 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
3303 verbl_msg
= "Ba, v moyey igre ya smogu protyanut' dol'she bez yedy.";
3306 if (mtmp
->mtame
&& mtmp
->bleedout
) {
3307 verbl_msg
= "Pochemu etot statusnyy effekt voobshche imeyet znacheniye.";
3310 if (mtmp
->mtame
) verbl_msg
= "Da ladno, ya ne khochu razygryvat' etu glupost'.";
3311 else if (mtmp
->mpeaceful
) verbl_msg
= "Pochemu ya voobshche dolzhen byt' zdes'?";
3312 else if (mtmp
->mfrenzied
) verbl_msg
= "Vse neuravnovesheno i ne imeyet smysla, i Emi deystvitel'no stoit obratit'sya k psikhiatru, potomu chto u neye opredelenno yest' bol'she, chem prosto neskol'ko nezakreplennykh vintov.";
3313 else verbl_msg
= "Skoro ty umresh', i togda tebe ne ostanetsya nichego drugogo, kak sygrat' v ledyanoy blok tipa yego variant, kotoryy namnogo luchshe, chem etot musor!";
3318 if (mtmp
->mhp
< mtmp
->mhpmax
/3)
3319 pline_msg
= "breathes faintly.";
3320 else if (mtmp
->mtame
&& hastoeat
&& !mtmp
->isminion
&& moves
> EDOG(mtmp
)->hungrytime
)
3321 pline_msg
= "wants to eat a lot.";
3323 pline_msg
= "snores peacefully.";
3325 else pline_msg
= "snores.";
3328 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
3329 verbl_msg
= "I'll take a photo of whoever hurt me there, and then we'll manhunt that person!";
3332 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
3333 verbl_msg
= "Let's go to the cafeteria, I need a little snack!";
3337 if (ACURR(A_CHA
) > 17) verbl_msg
= "Wow, you look splendid! I'm happy to accompany you!";
3338 else if (ACURR(A_CHA
) > 17) verbl_msg
= "Hey, good looking!";
3339 else verbl_msg
= "Let's look for good photo opportunities.";
3341 else verbl_msg
= "Don't move, I want to take a photo of you!";
3347 if (mtmp
->repaircredit
) verbalize("Welcome back to my repair shop. You still have %d credit remaining for repairs.", mtmp
->repaircredit
);
3348 else verbalize("Welcome to my repair shop. You can pawn gems to me to generate credit, and then use that credit to have your equipment repaired!");
3352 menu_item
*selected
;
3355 any
.a_void
= 0; /* zero out all bits */
3356 tmpwin
= create_nhwindow(NHW_MENU
);
3359 add_menu(tmpwin
, NO_GLYPH
, &any
, 'p', 0, ATR_NONE
, "Pawn Gems", MENU_UNSELECTED
);
3361 add_menu(tmpwin
, NO_GLYPH
, &any
, 'r', 0, ATR_NONE
, "Repair", MENU_UNSELECTED
);
3363 end_menu(tmpwin
, "Services Available:");
3364 n
= select_menu(tmpwin
, PICK_ONE
, &selected
);
3365 destroy_nhwindow(tmpwin
);
3368 switch (selected
[0].item
.a_int
) {
3371 struct obj
*pawngem
;
3373 pawngem
= getobj((const char *)pawnables
, "pawn");
3374 if (!pawngem
) break;
3375 if (pawngem
->oclass
!= GEM_CLASS
) {
3376 verbalize("That's not a gem!");
3379 if (pawngem
->otyp
>= ELIF_S_JEWEL
) {
3380 verbalize("Sorry, I only accept real gems or worthless glass.");
3383 if (pawngem
->otyp
> JADE
) gemvalue
= 5;
3384 else gemvalue
= objects
[pawngem
->otyp
].oc_cost
;
3385 if (pawngem
->spe
> 0) gemvalue
+= (pawngem
->spe
* 10);
3386 if (pawngem
->spe
< 0) {
3387 gemvalue
+= (pawngem
->spe
* 10);
3388 if (gemvalue
< 5) gemvalue
= 5;
3390 if (mtmp
->mpeaceful
) {
3394 if (pawngem
->oeroded
== 3) gemvalue
/= 4;
3395 else if (pawngem
->oeroded
== 2) gemvalue
/= 3;
3396 else if (pawngem
->oeroded
== 1) gemvalue
/= 2;
3397 if (pawngem
->oeroded2
== 3) gemvalue
/= 4;
3398 else if (pawngem
->oeroded2
== 2) gemvalue
/= 3;
3399 else if (pawngem
->oeroded2
== 1) gemvalue
/= 2;
3400 if (gemvalue
< 1) gemvalue
= 1;
3402 if (pawngem
->quan
> 1) {
3404 pawngem
->owt
= weight(pawngem
);
3405 } else useup(pawngem
);
3407 mtmp
->repaircredit
+= gemvalue
;
3408 verbalize("Alright, your credit was increased by %d and amounts to %d now.", gemvalue
, mtmp
->repaircredit
);
3414 register struct obj
*repairotmp
;
3417 if (mtmp
->repaircredit
< 1000) {
3418 verbalize("Sorry, you only have %d credit, that's too little.", mtmp
->repaircredit
);
3423 repairotmp
= getobj(allnoncount
, "magically repair");
3428 if (!repairotmp
->oeroded
&& !repairotmp
->oeroded2
) {
3429 verbalize("That item doesn't need repairs!");
3433 if (repairotmp
->oeroded
== 3) repaircost
+= 10000;
3434 if (repairotmp
->oeroded
== 2) repaircost
+= 2500;
3435 if (repairotmp
->oeroded
== 1) repaircost
+= 1000;
3436 if (repairotmp
->oeroded2
== 3) repaircost
+= 10000;
3437 if (repairotmp
->oeroded2
== 2) repaircost
+= 2500;
3438 if (repairotmp
->oeroded2
== 1) repaircost
+= 1000;
3440 if (repaircost
> mtmp
->repaircredit
) {
3441 verbalize("Sorry, you only have %d credit, and repairing that item would cost %d.", mtmp
->repaircredit
, repaircost
);
3445 verbalize("It'll cost you %d zorkmids to repair that.", repaircost
);
3446 if (yn("Pay?") != 'y') {
3447 verbalize("Ah well, maybe next time.");
3450 mtmp
->repaircredit
-= repaircost
;
3452 if (repairotmp
&& stack_too_big(repairotmp
)) {
3453 pline("The stack was too big and therefore didn't get repaired!");
3454 } else if (repairotmp
) {
3456 pline("Your %s looks as good as new!",xname(repairotmp
));
3458 if (repairotmp
->oeroded
> 0) { repairotmp
->oeroded
= 0; }
3459 if (repairotmp
->oeroded2
> 0) { repairotmp
->oeroded2
= 0; }
3460 if (repairotmp
&& objects
[(repairotmp
)->otyp
].oc_material
== MT_CELESTIUM
&& !stack_too_big(repairotmp
)) {
3461 if (!repairotmp
->cursed
) bless(repairotmp
);
3462 else uncurse(repairotmp
, FALSE
);
3476 register int cnt
= 0;
3477 register struct monst
*mkop
, *mkop2
;
3480 verbalize("Ey yo man, what you need, dog?");
3481 if (yn("Purchase drugs?") != 'y') {
3482 verbalize("Keep calm, man!");
3485 if (u
.ugold
< 1000) {
3486 verbalize("You ain't got the cash, man!");
3493 medkit
= mksobj(rn2(2) ? MUSHROOM
: PILL
, TRUE
, FALSE
, FALSE
);
3496 medkit
->known
= medkit
->dknown
= medkit
->bknown
= medkit
->rknown
= 1;
3497 medkit
->owt
= weight(medkit
);
3501 verbalize("Yo, cool man, go check out the ground but shhhh!");
3503 for (mkop
= fmon
; mkop
; mkop
= mkop2
) {
3505 if (mkop
->data
->mlet
== S_KOP
) {
3511 if (!rn2(4)) kopchance
--;
3513 if (kopchance
< 3) kopchance
= 3;
3514 if (!rn2(kopchance
)) {
3515 u
.copwantedlevel
+= rnz(1000);
3516 verbalize("WEOWEO");
3519 if (!rn2(kopchance
)) {
3527 randsp
= (rn2(14) + 2);
3528 if (!rn2(10)) randsp
*= 2;
3529 if (!rn2(100)) randsp
*= 3;
3530 if (!rn2(1000)) randsp
*= 5;
3531 if (!rn2(10000)) randsp
*= 10;
3533 for (i
= 0; i
< randsp
; i
++) {
3534 if (!enexto(&dd
, u
.ux
, u
.uy
, (struct permonst
*)0) ) continue;
3535 (void) makemon(mkclass(S_KOP
,0), cx
, cy
, MM_ADJACENTOK
|MM_ANGRY
|MM_FRENZIED
);
3542 verbalize("Yo man this too hot here, later!");
3548 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/10) {
3549 verbl_msg
= "If I don't get some source of healing, the next hit will kill me!";
3552 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
3553 verbl_msg
= "I'm low on health! Hopefully you have some healing powers!";
3556 if (mtmp
->mtame
&& mtmp
->mconf
) {
3557 verbl_msg
= "I'm confused! Could you lend me your unicorn horn?";
3560 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
3561 verbl_msg
= "Find me something to eat!";
3564 if (mtmp
->mtame
&& mtmp
->bleedout
) {
3565 verbl_msg
= "Dang, I'm still bleeding from that last hit! Can you heal me? That should take care of it!";
3568 if (mtmp
->mtame
) verbl_msg
= "I'm looking forward to the next battle!";
3569 else if (mtmp
->mpeaceful
) verbl_msg
= "I'd like to fight some enemies!";
3570 else if (mtmp
->mfrenzied
) verbl_msg
= "I'll finish you off!";
3571 else verbl_msg
= "Come! Fight me!";
3575 if (mtmp
->mhp
< mtmp
->mhpmax
/3)
3576 pline_msg
= "moans.";
3577 else if (mtmp
->mtame
&& hastoeat
&& !mtmp
->isminion
&& moves
> EDOG(mtmp
)->hungrytime
)
3578 pline_msg
= "grunts like a pig.";
3580 pline_msg
= "grunts peacefully.";
3582 else pline_msg
= rn2(2) ? "barks threateningly." : "grunts angrily.";
3585 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
3586 verbl_msg
= "I'm dying of covid-19! Bring me to the intensive care unit, FAST!";
3589 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
3590 verbl_msg
= "Man, everything tastes the same! But I really need to eat something...";
3594 verbl_msg
= rn2(2) ? "Lead the way, and be sure to always wear your face mask properly." : "Careful, I know we're on the same team, but please don't get closer than 1.50 meters to me.";
3596 else verbl_msg
= rn2(2) ? "Stop! You need to wear a face mask! I'm not gonna let you spread the virus to me!" : "Stay away! I don't want to contract your covid infection! Keep a minimum distance of 2 meters, got it?";
3600 if (mtmp
->mhp
< mtmp
->mhpmax
/3)
3601 pline_msg
= "lets out a tormented squeak.";
3602 else if (mtmp
->mtame
&& !mtmp
->isminion
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
)
3603 pline_msg
= "emits a long sigh.";
3605 pline_msg
= "trumpets.";
3607 else pline_msg
= mtmp
->mpeaceful
? "trumpets peacefully." : "roars!";
3610 verbalize("My health status is %d HP out of a maximum of %d!", mtmp
->mhp
, mtmp
->mhpmax
);
3613 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
3614 verbl_msg
= "Bah, I won't die that easily! I still got some hit points left!";
3617 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
3618 verbl_msg
= "Once I've eaten, my strength will be even higher than before!";
3622 verbl_msg
= "I am the best!";
3624 else verbl_msg
= "Bah, I'm much better than you!";
3627 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
3628 verbl_msg
= "If you let me die now, I can't give you advice on how to beat your quest anymore!";
3631 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
3632 verbl_msg
= "Hey, I'll help you, but first I need to eat something!";
3636 verbl_msg
= "Keep going forward, you'll be able to beat your quest!";
3638 else verbl_msg
= "How far have you gotten in your quest?";
3641 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
3642 verbl_msg
= "Why are you letting my health drop so low? Can't you cast a healing spell on me?";
3645 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
3646 verbl_msg
= "Hungry!";
3650 verbl_msg
= "The boss is counting on you.";
3652 else verbl_msg
= "Get moving, that quest doesn't complete itself!";
3655 pline("%s does not make a sound.", Monnam(mtmp
));
3658 if (mtmp
->mhp
< mtmp
->mhpmax
/10) {
3659 verbl_msg
= "The suffering will be over soon.";
3662 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
3663 verbl_msg
= "Hopefully I manage to kill myself this time...";
3666 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
3667 verbl_msg
= "No, I don't want to eat! I just want to die!";
3670 if (mtmp
->bleedout
> 100) {
3671 verbl_msg
= "Uhh... maybe I did go too far this time after all, I think I've hit styro...";
3674 if (mtmp
->bleedout
> 50) {
3675 verbl_msg
= "This is looking good, I only have to apply the razorblade again...";
3678 if (mtmp
->bleedout
> 0) {
3679 verbl_msg
= "That didn't do much damage, perhaps I should cut deeper...";
3683 verbl_msg
= "I always have my tools at hand. Don't worry, I'm fine.";
3685 else verbl_msg
= "Damn, I'm having THE urge!";
3688 if (mtmp
->mhp
< mtmp
->mhpmax
/3) {
3689 verbl_msg
= "Damn, the clock is broken!";
3692 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
3693 verbl_msg
= "Uhh, I hope it's not too late to get some food! Do you happen to know a restaurant that is open now?";
3700 info
= localtime(&rawtime
);
3702 pline("'The time is: %s'", asctime(info
));
3705 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
3706 verbl_msg
= "Oh-god-o-matic!";
3710 verbl_msg
= "Oh Buddha! Or was it Jahwe? Oh Allah!";
3713 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
3714 verbl_msg
= "Ohgod no food! Ohgod!";
3717 verbl_msg
= "Oh goooood...";
3720 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
3721 verbl_msg
= "Wolloh that shit's fucked up wolloh!";
3725 verbl_msg
= "Hollow? Why is everything hollow?";
3728 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
3729 verbl_msg
= "Wolloh age, let's go doener kebab wolloh!";
3733 verbl_msg
= "Wolloh come with me!";
3734 } else if (mtmp
->mpeaceful
) {
3735 verbl_msg
= "Wolloh wassup?";
3737 else verbl_msg
= "Wolloh, I'm gonna fuck you up asshole! Wolloh age!";
3740 if (mtmp
->codeguessed
) {
3741 verbalize("Sorry, you already took a guess.");
3743 mtmp
->codeguessed
= TRUE
;
3744 verbalize("What is the secret four-digit code number?");
3749 getlin("Your guess:", buf
);
3750 if (sscanf(buf
, "%ld", &offer
) != 1) offer
= 0L;
3752 verbalize("Certainly not, mastermind!");
3753 } else if (offer
> 9999) {
3754 verbalize("Nice try, but no, the code is four-digit. You gave too many digits.");
3755 } else if (offer
== u
.secretcodenumber
) {
3756 u
.secretcodenumber
= rn2(10000);
3757 verbalize("We have a winner!!! You shall receive a boon.");
3758 if (!rn2(4)) makewish(evilfriday
? FALSE
: TRUE
);
3759 else othergreateffect();
3761 verbalize("Sorry, your guess was wrong.");
3769 if (u
.barbertimer
< 5000) {
3770 verbalize("Sorry, your last haircut was just %d turns ago, you have to wait a bit until I can give you another!", u
.barbertimer
);
3775 int barbercost
= 250;
3776 if (u
.barberamount
> 0) barbercost
+= (u
.barberamount
* 50);
3777 if (u
.barbertimer
> 5999) {
3778 int barberxtracost
= u
.barbertimer
- 5000;
3779 while (barberxtracost
>= 1000) {
3780 barberxtracost
-= 1000;
3785 verbalize("Hey %s, want a new haircut? Just %d zorkmids!", flags
.female
? "girl" : "man", barbercost
);
3787 if (yn("Do you want a new haircut?") != 'y') {
3788 verbalize("Oh well, if you don't wanna... you know where to find me if you change your mind.");
3790 if (u
.ugold
< barbercost
) {
3791 verbalize("Sorry, I'm not working for free. Get enough cash first!");
3793 int charismagain
= 1;
3794 if (Role_if(PM_LADIESMAN
)) charismagain
++;
3796 u
.ugold
-= barbercost
;
3800 u
.femalehaircut
= rnd(55);
3802 u
.malehaircut
= rnd(18);
3803 u
.malebeard
= rnd(48);
3805 (void) adjattrib(A_CHA
, charismagain
, 0, TRUE
);
3810 if (mon_has_amulet(mtmp
) || In_endgame(&u
.uz
)) {
3811 verbalize("Alright, done. I'll be off looking for another customer! Seeya!");
3813 Your("new hairstyle is '%s.", bundledescription());
3816 flev
= random_branchport_level();
3817 migrate_to_level(mtmp
, ledger_no(&flev
), MIGR_RANDOM
, (coord
*)0);
3818 verbalize("Alright, done. I'll be off looking for another customer! Seeya!");
3819 Your("new hairstyle is '%s.", bundledescription());
3827 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
3828 pline_msg
= "doesn't seem very happy.";
3832 pline_msg
= "seems to be lost in thought...";
3835 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
3836 pline_msg
= "wants to eat a lot.";
3840 pline_msg
= "puffs out its chest with pride.";
3841 } else if (mtmp
->mpeaceful
) {
3842 pline_msg
= "looks surprised.";
3844 else pline_msg
= "spits on the ground.";
3847 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
3848 pline_msg
= "tries to deactivate the force field so that an emergency teleport spell can be cast.";
3852 pline_msg
= "seems to have forgotten the original plan.";
3855 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
3856 pline_msg
= "needs to refuel.";
3860 pline_msg
= "tells you that the force field will improve your chance of success.";
3861 } else if (mtmp
->mpeaceful
) {
3862 pline_msg
= "merrily remarks that the force field is working well.";
3864 else pline_msg
= "tells you that you won't break through the force field!";
3867 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
3868 verbl_msg
= "That's it, I'm out of here! Catch me if you can, I'm the Gingerbread Man!";
3871 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
3872 verbl_msg
= "Where's the canteen?";
3876 verbl_msg
= "Okay, I'll follow you.";
3877 } else if (mtmp
->mpeaceful
) {
3878 verbl_msg
= "Pinky, are you pondering what I'm pondering?";
3880 else verbl_msg
= "Are you crazy? Well, neglecting to wear safety gear does verge on the edge of lunacy... anyway, stop attacking me, immediately!";
3883 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
3884 verbl_msg
= "Need healing!";
3887 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
3888 verbl_msg
= "Need food!";
3892 verbl_msg
= "Lead the way!";
3893 } else if (mtmp
->mpeaceful
) {
3894 verbl_msg
= "What's going on?";
3896 else verbl_msg
= "Enemy!";
3899 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
3900 verbl_msg
= "I'll get out of this area soon.";
3903 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
3904 verbl_msg
= "Give me something to eat!";
3908 verbl_msg
= "I'll follow you for now.";
3909 } else if (mtmp
->mpeaceful
) {
3910 verbl_msg
= "This area seems reasonably safe.";
3912 else verbl_msg
= "Get away from me!";
3914 case MS_TALONCOMPANY
:
3915 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
3916 verbl_msg
= "This ain't what I signed up for!";
3919 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
3920 verbl_msg
= "Food! Get me some fucking food!";
3924 verbl_msg
= "Yeah?";
3925 } else if (mtmp
->mpeaceful
) {
3926 verbl_msg
= "Hello.";
3928 else verbl_msg
= "You're dead!";
3931 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
3932 verbl_msg
= "This ain't what I signed up for!";
3935 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
3936 verbl_msg
= "Gotta eat another donut, I'm hungry!";
3940 verbl_msg
= "Yeah?";
3941 } else if (mtmp
->mpeaceful
) {
3942 verbl_msg
= "Hello.";
3944 else verbl_msg
= "Well what do we have here, the Vault rogues are back.";
3947 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
3948 verbl_msg
= "Oh God, I don't want to die!";
3951 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
3952 verbl_msg
= "Where's the damn meat shipment?";
3956 verbl_msg
= "Shh, not so loud. The others shouldn't notice that I'm doing business with you.";
3957 } else if (mtmp
->mpeaceful
) {
3958 verbl_msg
= "Well, if that ain't a very alive horn ox!";
3960 else verbl_msg
= "Hahahahahahaha! Time to kill!";
3963 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
3964 verbl_msg
= "Retreat and regroup!";
3967 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
3968 verbl_msg
= "Need a C-ration!";
3972 verbl_msg
= "Greetings, commander.";
3973 } else if (mtmp
->mpeaceful
) {
3974 verbl_msg
= "Hello.";
3976 else verbl_msg
= "Attack is continued!";
3979 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
3980 verbl_msg
= "Please... rescue me...";
3983 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
3984 verbl_msg
= "Almost no green stuff left...";
3988 verbl_msg
= "What's going on?";
3989 } else if (mtmp
->mpeaceful
) {
3990 verbl_msg
= "I seem to remember something... from before. I knew a woman... or maybe I *WAS* one...";
3992 else verbl_msg
= "Hahahahahahaha! Let's play, little human!";
3994 case MS_MYTHICALDAWN
:
3995 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
3996 verbl_msg
= "The old Tamriel still has some power left!";
3999 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
4000 verbl_msg
= "Once I'm in paradise I'll eat lichor and ambrosia in great profusion!";
4004 verbl_msg
= "We will hunt those accursed Blades.";
4005 } else if (mtmp
->mpeaceful
) {
4006 verbl_msg
= "Lord Dagon will walk the earth again!";
4008 else verbl_msg
= "You're weak, just like the gods you pray to.";
4011 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
4012 verbl_msg
= "Stop stealing my air.";
4015 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
4016 verbl_msg
= "Dark and deep!";
4020 verbl_msg
= "Heel, doggie!";
4021 } else if (mtmp
->mpeaceful
) {
4022 verbl_msg
= "Begone, mortal.";
4024 else verbl_msg
= "On your knees, coward!";
4027 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
4028 verbl_msg
= "Damn, I'm gonna have to contact Scribe Jameson, for the scrolls...";
4031 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
4032 verbl_msg
= "I need a lunch break.";
4036 verbl_msg
= "Greetings.";
4037 } else if (mtmp
->mpeaceful
) {
4038 verbl_msg
= "Don't worry, you're safe in our presence.";
4040 else verbl_msg
= "Enemy contact!";
4043 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
4044 verbl_msg
= "I'm about to expire!";
4047 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
4048 verbl_msg
= "Gonna have to eat a lot!";
4052 verbl_msg
= "Don't ever forget the fire that forged you, or you're lost.";
4053 } else if (mtmp
->mpeaceful
) {
4054 verbl_msg
= "Casdin made the right choice when he left Lyons' little group of do-gooders.";
4056 else verbl_msg
= "Old man, kiss my ass!"; /* referring to Elder Lyons, not your player character */
4059 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
4060 verbl_msg
= "I may die, but let everyone know that I'm %s!", is_neuter(mtmp
->data
) ? "neuter" : mtmp
->female
? "female" : "male";
4063 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
4064 verbl_msg
= "This %s needs something to eat!", is_neuter(mtmp
->data
) ? "neutrum" : mtmp
->female
? "woman" : "man";
4068 verbl_msg
= "Do you like the fact that you have a %s ally?", is_neuter(mtmp
->data
) ? "neuter" : mtmp
->female
? "female" : "male";
4069 } else if (mtmp
->mpeaceful
) {
4070 verbl_msg
= "Hey look at me! I'm %s!", is_neuter(mtmp
->data
) ? "neuter" : mtmp
->female
? "female" : "male";
4072 else verbl_msg
= "You're gonna lose to a %s!", is_neuter(mtmp
->data
) ? "neutrum" : mtmp
->female
? "girl" : "boy";
4075 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
4076 verbl_msg
= "Forget about it.";
4079 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
4080 verbl_msg
= "Hmm, I forgot what I'm supposed to do when my stomach growls...";
4084 verbl_msg
= "Hey, what do you want from me, I don't know you!";
4085 } else if (mtmp
->mpeaceful
) {
4086 verbl_msg
= "I don't remember seeing you before.";
4088 else verbl_msg
= "Huh, who are you?";
4090 case MS_SHIVERINGESLES
:
4091 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
4092 verbl_msg
= "Ich habe den Zaxer gesehen. Und ich habe ihn gemaggt. Ach, fribbel!";
4095 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
4096 verbl_msg
= "Gebt ihnen Gargen zum Emmet.";
4099 if (mtmp
->mtame
&& mtmp
->mconf
) {
4100 verbl_msg
= "Grundi Obelisken! Immer tetteraten sie Ritter und Festars. Verwendet den Dookas, um sie in Ordnung zu bringen.";
4103 if (mtmp
->mtame
&& mtmp
->mstun
) {
4104 verbl_msg
= "Ich wette einen Quintat, dass sie ipanaten koennen.";
4107 if (mtmp
->mtame
&& mtmp
->mtrapped
) {
4108 verbl_msg
= "Dunkel-dunkel. Wir haben einen Zeffel geyingt.";
4111 if (mtmp
->mtame
&& mtmp
->mcan
) {
4112 verbl_msg
= "Zeut Femul dimat! Ich boestle, bevor ich redauple.";
4115 if (mtmp
->mtame
&& mtmp
->mblinded
) {
4116 verbl_msg
= "Sagt dem Dagen Bescheid! Dem Dagen! Karn Himmel relft schon.";
4120 verbl_msg
= "Nehmt Zickel. Niemand macht rebbi Zickel heutzutage.";
4121 } else if (mtmp
->mpeaceful
) {
4122 verbl_msg
= "Gal bursten es.";
4124 else verbl_msg
= "Uungor spredet, er 'tschaui.' Spredet mit Uungor. Ihr sterfeht mich? Spredet mit Uungor! Gebt Freund Pennigkeit in Uungors Ratzepueklo.";
4127 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
4128 verbl_msg
= "Can't I just abstain from eating in peace?";
4131 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
4132 verbl_msg
= "I'm still not skinny enough!";
4136 verbl_msg
= "Do you think I'm skinny and beautiful?";
4137 } else if (mtmp
->mpeaceful
) {
4138 verbl_msg
= "Please don't tell me I'm fat!";
4140 else verbl_msg
= "You think I'm fat, I know it.";
4143 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
4144 verbl_msg
= "Fuck the whole world!";
4147 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
4148 verbl_msg
= "I need to eat a lot!";
4152 verbl_msg
= "I'm happy and feeling fine!";
4153 } else if (mtmp
->mpeaceful
) {
4154 verbl_msg
= "Nice day today, huh?";
4156 else verbl_msg
= "Don't you DARE comment on my teeth!";
4159 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
4160 verbl_msg
= "Need healing!";
4163 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
4164 verbl_msg
= "Hungry!";
4169 } else if (mtmp
->mpeaceful
) {
4172 else verbl_msg
= "GRR!";
4178 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
4179 verbl_msg
= "I'm not gonna die! I'll just heal!";
4182 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
4183 verbl_msg
= "Once I've eaten, I'll finish off my enemy!";
4187 verbl_msg
= "You're my subordinate, just obey my command and everything is fine.";
4188 } else if (mtmp
->mpeaceful
) {
4189 verbl_msg
= "Oh, what a cute little specimen you are.";
4191 else verbl_msg
= "You will fall like wheat before my sword.";
4195 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
4196 verbl_msg
= "I'm not gonna go down like that! My penis still has lots of semen left for inseminating women!";
4199 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
4200 verbl_msg
= "Hey, girl! Make me a sandwich, will ya?";
4204 verbl_msg
= "Oh girl, I'm looking forward to landing you in bed tonight...";
4205 } else if (mtmp
->mpeaceful
) {
4206 verbl_msg
= "Do you like it if I massage your buttocks with my hands?";
4208 else verbl_msg
= "Now my penis will penetrate your vagina, girl. Hehehehehe.";
4210 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
4211 verbl_msg
= "Gah why the hell do there have to be so many men on this planet FUCK THAT SHIT!";
4214 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
4215 verbl_msg
= "Bring me some food, fast!";
4219 verbl_msg
= "Gah, why do you have to be a man?";
4220 } else if (mtmp
->mpeaceful
) {
4221 verbl_msg
= "You're not interesting to me because you have a penis.";
4223 else verbl_msg
= "God, why are you male? Ah well, I'll just get rid of you real quick and then I'll find some girls to play with!";
4227 case MS_SHOCKTROOPER
:
4228 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
4229 verbl_msg
= "ka ga blis blis ka";
4232 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
4233 verbl_msg
= "puh pur hyu ka";
4237 verbl_msg
= "kss wirt ras";
4238 } else if (mtmp
->mpeaceful
) {
4239 verbl_msg
= "kss kyur kiml";
4241 else verbl_msg
= "kiml kiml";
4244 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
4245 verbl_msg
= "The LGBTIQ+ community will avenge me...";
4248 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
4249 verbl_msg
= "Can you procure some food that's suitable for my gender?";
4253 verbl_msg
= "Always be aware of my gender.";
4254 } else if (mtmp
->mpeaceful
) {
4255 verbl_msg
= "Hey, did I tell you about my gender yet?";
4257 else verbl_msg
= "You have to use the correct pronouns when talking to me!!!!!";
4260 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
4261 verbl_msg
= "My health is low!";
4264 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
4265 verbl_msg
= "I need to eat something!";
4269 verbl_msg
= "Hello, friend.";
4270 } else if (mtmp
->mpeaceful
) {
4271 verbl_msg
= "Greetings, adventurer.";
4273 else verbl_msg
= "You are my enemy.";
4276 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
4277 verbl_msg
= "Blow me down!";
4280 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
4281 verbl_msg
= "Splice the mainbrace!";
4285 verbl_msg
= "Weigh anchor and hoist the mizzen!";
4286 } else if (mtmp
->mpeaceful
) {
4287 verbl_msg
= "Yo Ho Ho!";
4289 else verbl_msg
= "Scurvy dog!";
4292 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
4293 verbl_msg
= "I can't do this anymore...";
4296 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
4297 verbl_msg
= "Quick lunchbreak before I get back to work!";
4300 else verbl_msg
= "I'm very busy! Please don't disturb me!";
4303 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
4304 verbl_msg
= "Soon I will go dead, but bring myself back into the play.";
4307 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
4308 verbl_msg
= "Now I need to eat a food ration that contains meat, because I don't have an eating disorder.";
4312 verbl_msg
= "Do you want me to alternate between massaging your nuts and kicking them?";
4313 } else if (mtmp
->mpeaceful
) {
4314 verbl_msg
= "The block heels are made of cuddle cloth!";
4316 else verbl_msg
= "Now I will pull you the pants down!";
4319 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
4320 verbl_msg
= "rnn rnn rnn RNN RNN RNN!";
4323 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
4324 verbl_msg
= "deeeeeeeee, dededidadaDEEEEEEE-daaaaa-deeeeee!";
4328 verbl_msg
= "klimpklamp";
4329 } else if (mtmp
->mpeaceful
) {
4330 verbl_msg
= "klampklimpklamp";
4332 else verbl_msg
= "klilili!";
4335 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
4336 verbl_msg
= "Impossible. I cannot fail.";
4339 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
4340 verbl_msg
= "Even I have to eat something from time to time. So, where can we get some meat?";
4344 verbl_msg
= "With your assistance, we will overcome all the obstacles.";
4345 } else if (mtmp
->mpeaceful
) {
4346 verbl_msg
= "Hey, I'm on a task given to me by the gods themselves!";
4348 else verbl_msg
= "You won't stop me! I'm a God, you puny mortal!";
4351 verbalize("Hey, I have no money to buy food, will you spare %d zorkmids, noble adventurer?", mtmp
->m_lev
+ u
.ulevel
);
4352 if (u
.ugold
>= (mtmp
->m_lev
+ u
.ulevel
)) {
4353 if (yn("Give the beggar some cash?") == 'y') {
4354 verbalize("Thanks! I'll never forget this.");
4355 u
.ugold
-= (mtmp
->m_lev
+ u
.ulevel
);
4356 if (!mtmp
->mpeaceful
) {
4357 mtmp
->mpeaceful
= TRUE
;
4358 mtmp
->mfrenzied
= FALSE
;
4360 if (Race_if(PM_HUMANOID_DEVIL
)) devil_misbehavior();
4361 else if (u
.ualign
.type
!= A_CHAOTIC
) adjalign(1);
4363 verbalize("You're so cheap!");
4366 pline("But you don't have enough money.");
4381 verbl_msg
= "The sound effect of this monster has not been implemented yet.";
4385 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
4386 verbl_msg
= "Help me, help me! I can't handle them myself!";
4389 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
4390 verbl_msg
= "Please, let's get something to eat, I'm afraid that if I don't eat, then some monster will eat me!";
4394 verbl_msg
= "Are you sure you know where you're going?";
4395 } else if (mtmp
->mpeaceful
) {
4396 verbl_msg
= "The situation clearly can't get any worse than this.";
4398 else verbl_msg
= "Stop attacking, I'm a fiend! Err, friend! Fruck, I always mess that R up.";
4401 if (mtmp
->mhp
< mtmp
->mhpmax
/3) {
4402 pline_msg
= "Unhandled exception: At address 002EF0C";
4406 pline_msg
= "Application termination, app event: BEX";
4410 pline_msg
= "Network Error: NO ERROR";
4411 } else if (mtmp
->mpeaceful
) {
4412 pline_msg
= "Error: No route to host";
4414 else pline_msg
= "Runtime Error - program is running at the wrong time of the day. Please restart the program later.";
4417 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
4418 verbl_msg
= "Now I have to experience death a second time, because of you...";
4422 verbl_msg
= "Huh, am I dead now? I think I'm dead! Or is this all just a dream?";
4425 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
4426 verbl_msg
= "Oh well, I think I'll just starve to death now, that wouldn't be the worst possible fate.";
4430 verbl_msg
= "Yeah I guess I can assist you...";
4431 } else if (mtmp
->mpeaceful
) {
4432 verbl_msg
= "Who resurrected me?!";
4434 else verbl_msg
= "I tell you, if you're responsible for disturbing my peaceful slumber I'll make sure that you die before I do!";
4437 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
4438 verbl_msg
= "Even if I die, the trees will be protected by my comrades!";
4442 verbl_msg
= "What is that huge mana flower doing there, can I harvest ambrosia or lichor from it?";
4445 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
4446 verbl_msg
= "Gotta eat some acorns and berries!";
4450 verbl_msg
= "Don't hesitate to kill anyone who dares chopping down a tree.";
4451 } else if (mtmp
->mpeaceful
) {
4452 verbl_msg
= "Remember, nature has to be protected at all times. Everyone who applies an axe to a tree is a criminal!";
4454 else verbl_msg
= "You devil, I'll make sure you never fell a tree again!";
4457 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
4458 verbl_msg
= "Dammit, they're defending their metal with teeth and claws!";
4461 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
4462 verbl_msg
= "Let's spend our money on a good meal, and then we'll resume stealing metal!";
4466 verbl_msg
= "Let's go! We gotta find someone who has valuable metal that we can steal and sell for profit!";
4467 } else if (mtmp
->mpeaceful
) {
4468 verbl_msg
= "Metal is the only material worth anything on the black market.";
4469 } else if (mtmp
->mfrenzied
) {
4470 verbl_msg
= "I'm gonna kill you, and then I'll loot your backpack for metallic items that I can sell.";
4472 verbalize("Gimme your metal!");
4474 /* metal mafia goons want your metal, and if you give them something that weighs enough, they may
4475 * turn peaceful and leave you alone, but it's only a chance --Amy */
4477 register struct obj
*metalmafiaotmp
;
4481 metalmafiaotmp
= getobj(allnoncount
, "offer to the metal mafia");
4483 if (!metalmafiaotmp
) {
4484 verbalize("I said, gimme your metal!");
4487 if (!is_metallic(metalmafiaotmp
)) {
4488 verbalize("Stop bullshitting me, that thing's not metal and therefore it's worthless! Gimme your metal dammit!");
4491 if (metalmafiaotmp
->oartifact
) {
4492 verbalize("Hey, I ain't touching something that hot!");
4495 if (objects
[(metalmafiaotmp
)->otyp
].oc_material
== MT_ETHER
) {
4496 verbalize("Stay the hell away with that contaminated garbage!");
4499 if (evades_destruction(metalmafiaotmp
)) {
4500 verbalize("No way! There's no fence on the black market who would buy that!");
4503 if (metalmafiaotmp
->oclass
== COIN_CLASS
) {
4504 verbalize("You can't bribe me with money! I need metallic items!");
4507 if (metalmafiaotmp
->owt
< 20) {
4508 useupall(metalmafiaotmp
);
4509 verbalize("That's scrap metal. I'll take it, but it's not gonna fetch much cash, so... gimme something better!");
4510 goto metalmafiaagain
;
4514 int metalmafiaworth
= rnd(100);
4515 if (metalmafiaotmp
->oerodeproof
) {
4516 useupall(metalmafiaotmp
);
4517 mtmp
->mpeaceful
= TRUE
;
4518 verbalize("Damn, that's a truly shiny piece! This will sell for a fortune! I officially consider you a friend now. Many thanks, the metal mafia is very pleased to do business with you!");
4519 } else if (metalmafiaotmp
->owt
>= metalmafiaworth
) {
4520 useupall(metalmafiaotmp
);
4521 mtmp
->mpeaceful
= TRUE
;
4522 verbalize("Alright, that should do it! It's been a pleasure doing business with you. Have a nice day!");
4524 useupall(metalmafiaotmp
);
4525 verbalize("Yeah, that thing's good, it'll sell for some cash, but I still need more. Gimme more metal!");
4526 goto metalmafiaagain
;
4530 useupall(metalmafiaotmp
);
4531 verbalize("Yeah, that thing's good, it'll sell for some cash, but I still need more. Gimme more metal!");
4532 goto metalmafiaagain
;
4540 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
4541 verbl_msg
= "We are many. I can be replaced.";
4545 verbl_msg
= "is there some sort of deep anti-state at work?";
4548 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
4549 verbl_msg
= "Need food.";
4553 verbl_msg
= "Don't say a word.";
4554 } else if (mtmp
->mpeaceful
) {
4555 verbl_msg
= "You've never seen me, aight?";
4557 else verbl_msg
= rn2(2) ? "You're dead." : "This is your end.";
4559 case MS_PRINCESSLEIA
:
4560 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/10) {
4561 verbl_msg
= "Noooooo! I may not die! If I die, this kingdom will perish!";
4564 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
4565 verbl_msg
= "Please repair my broken nail!";
4568 if (mtmp
->mtame
&& mtmp
->mconf
) {
4569 verbl_msg
= "That green elf dude... I think his name was Zelda, right? And he has to defeat that horned demon named Link to save the kingdom of Ganondorf!";
4572 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
4573 verbl_msg
= "Oh, I just remember that I baked a cake, but I forgot where I left it? Can you find it, then we can eat it together?";
4576 if (mtmp
->mtame
&& mtmp
->bleedout
) {
4577 verbl_msg
= "Do something! You see that I'm dripping my blue blood all over the place!";
4580 if (mtmp
->mtame
) verbl_msg
= "Together, we can peacefully rule this kingdom.";
4581 else if (mtmp
->mpeaceful
) verbl_msg
= "Have you seen Han Solo?";
4582 else if (mtmp
->mfrenzied
) verbl_msg
= "You cannot defeat the princess! My marital arts training will pay off and I'll chase you away!";
4583 else verbl_msg
= "Are you trying to invade my kingdom? Because if you are, I'll have to bludgeon you with my pointy pink girl shoes.";
4587 verbl_msg
= "waaaaaaah...";
4590 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
4591 verbl_msg
= "What, why'd they turn on me? I was supposed to rule them...";
4594 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
4595 verbl_msg
= "Oh, I'm afraid I've run out of bloodpacks, do you have some for me?";
4599 verbl_msg
= "It's nice of you to help me force those slaves to clean the girls' shoes.";
4601 else if (mtmp
->mpeaceful
) verbl_msg
= "Hey, do you want to assist me? I'd be thrilled if you were to step into dog shit with your shoes, because then I can force my slaves to clean your shoes, and when they're done, you'll get them back.";
4602 else verbl_msg
= "You know the rules. You have to clean the dog shit off of every pair of female shoes that I present to you, and you're not allowed to use anything other than your hands and a can of shoe polish.";
4606 verbl_msg
= "Hmm... I think the BFG is not an automatic weapon, so using it is okay...";
4609 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/10) {
4610 verbl_msg
= "Save me! Please!";
4613 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
4614 verbl_msg
= "Can you heal me, please?";
4617 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
4618 verbl_msg
= "Need food!";
4624 if (bulletator_allowed(1)) verbl_msg
= "Don't worry, you can use automatic firearms.";
4625 else verbl_msg
= "A reminder that you unfortunately can't use automatic firearms.";
4628 if (bulletator_allowed(2)) verbl_msg
= "Don't worry, you can use the hydra bow.";
4629 else verbl_msg
= "A reminder that you unfortunately can't use the hydra bow.";
4632 if (bulletator_allowed(3)) verbl_msg
= "Don't worry, you can use the demon crossbow.";
4633 else verbl_msg
= "A reminder that you unfortunately can't use the demon crossbow.";
4636 if (bulletator_allowed(4)) verbl_msg
= "Don't worry, you can use the catapult.";
4637 else verbl_msg
= "A reminder that you unfortunately can't use the catapult.";
4640 if (bulletator_allowed(5)) verbl_msg
= "Don't worry, you can use flamethrowers.";
4641 else verbl_msg
= "A reminder that you unfortunately can't use flamethrowers.";
4644 } else if (mtmp
->mpeaceful
) {
4647 if (bulletator_allowed(1)) verbl_msg
= "You may use automatic firearms.";
4648 else verbl_msg
= "Remember, you're not allowed to use automatic firearms!";
4651 if (bulletator_allowed(2)) verbl_msg
= "You may use the hydra bow.";
4652 else verbl_msg
= "Remember, you're not allowed to use the hydra bow!";
4655 if (bulletator_allowed(3)) verbl_msg
= "You may use the demon crossbow.";
4656 else verbl_msg
= "Remember, you're not allowed to use the demon crossbow!";
4659 if (bulletator_allowed(4)) verbl_msg
= "You may use the catapult.";
4660 else verbl_msg
= "Remember, you're not allowed to use the catapult!";
4663 if (bulletator_allowed(5)) verbl_msg
= "You may use flamethrowers.";
4664 else verbl_msg
= "Remember, you're not allowed to use flamethrowers!";
4668 verbl_msg
= "Now you'll be punished for using automatic weapons.";
4674 verbl_msg
= "What are we to now make?";
4677 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/10) {
4678 verbl_msg
= "I am equal dead! Assistance!";
4681 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
4682 verbl_msg
= "I must take some welfare watering places!";
4685 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
4686 verbl_msg
= "I custom which to eat!";
4690 verbl_msg
= u
.fluidatorwantedlevel
? "Are you glad, with me to allies its?" : "You is my buddy!";
4692 else if (mtmp
->mpeaceful
) {
4693 verbl_msg
= u
.fluidatorwantedlevel
? "Now you are however to!" : "Is greeted, unknown potato.";
4694 if (u
.fluidatorwantedlevel
) mtmp
->mpeaceful
= FALSE
;
4696 else verbl_msg
= u
.fluidatorwantedlevel
? "Now you can however which experience, you hybrid!" : "We are attacked becoming!";
4699 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
4700 verbl_msg
= "Pom... peji...";
4703 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
4704 verbl_msg
= "Pompeji-pompeji!";
4708 verbl_msg
= "Poooooom peeeeeeee jiiiiiiii!";
4710 else if (mtmp
->mpeaceful
) verbl_msg
= "Pompeji.";
4711 else verbl_msg
= "Pompe-e-ji!";
4714 if (!mtmp
->mtame
&& !mtmp
->mpeaceful
) verbl_msg
= "you will lose";
4717 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
4718 verbl_msg
= "Argh, I bit off more than I can chew! That monster is too strong!";
4721 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
4722 verbl_msg
= "All that pokemon hunting has caused me to go hungry! I got to eat some berries!";
4726 verbl_msg
= "Let's look for new pokemon in that grass patch over there.";
4728 else if (mtmp
->mpeaceful
) verbl_msg
= "Hmm, my PokeWalker(TM) said that a couple new pokemon species can be encountered on this level...";
4729 else verbl_msg
= "Go away, this is my pokemon hunting ground! I'm not letting you catch the shinies here, you hear?";
4732 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
4733 verbl_msg
= "Calculating chance of success... 25%%.";
4736 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
4737 verbl_msg
= "Hungry! Let's go to the bar!";
4741 verbl_msg
= "I protect and serve you.";
4743 else if (mtmp
->mpeaceful
) verbl_msg
= "Another great day in the history of our army!";
4744 else verbl_msg
= "Please don't be surprised if I kill you. That's just my programming.";
4747 if (mtmp
->mhp
< mtmp
->mhpmax
/3) {
4748 verbl_msg
= "Just fucking kill me now.";
4751 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
4752 verbl_msg
= "Of course, the food supply chains have broken down too...";
4756 verbl_msg
= "This world is headed towards destruction.";
4758 else if (mtmp
->mpeaceful
) verbl_msg
= "Did you know that the end of the world is coming?";
4759 else verbl_msg
= "Oh, don't mind me, I know that we're all gonna die anyway.";
4763 pline("%s", generate_garbage_string());
4767 boolean willdisappear
= 0;
4768 int returnvalue
= 0;
4769 verbalize("Hello sir, welcome to 'Fortune Cookie' casino!"); /* from Elona, where they always say 'sir' even if you're female */
4770 returnvalue
= play_blackjack(FALSE
);
4771 if (returnvalue
== 2) willdisappear
= 1;
4772 if (returnvalue
>= 1 && (mtmp
->data
== &mons
[PM_CROUPIER
] || mtmp
->data
== &mons
[PM_MASTER_CROUPIER
] || mtmp
->data
== &mons
[PM_EXPERIENCED_CROUPIER
] || mtmp
->data
== &mons
[PM_EXCEPTIONAL_CROUPIER
] || mtmp
->data
== &mons
[PM_ELITE_CROUPIER
]) ) {
4773 /* you played, so the croupier should become peaceful; other MS_CASINO monsters don't care */
4774 mtmp
->mfrenzied
= FALSE
;
4775 mtmp
->mpeaceful
= TRUE
;
4778 if (willdisappear
) {
4780 verbalize("Sorry sir, I've been ordered to return to Las Venturas! Thanks for playing!");
4783 verbalize("Remember, if you win, your reward will be dropped on the ground beneath you.");
4788 if (mtmp
->mhp
< mtmp
->mhpmax
/3)
4789 pline_msg
= "breathes heavily.";
4790 else if (mtmp
->mtame
&& hastoeat
&& !mtmp
->isminion
&& moves
> EDOG(mtmp
)->hungrytime
)
4791 pline_msg
= "makes a distressed bellow.";
4793 pline_msg
= "bellows.";
4795 else pline_msg
= "bellows.";
4798 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
4799 pline("%s's bones seem about to break!", Monnam(mtmp
));
4801 pline(FunnyHallu
? "%s plays the xylophone!" : "%s rattles noisily.", Monnam(mtmp
));
4802 You("freeze for a moment.");
4803 nomul(-2, "scared by rattling", TRUE
);
4809 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/4) {
4810 verbl_msg
= "Hahahahahahahaaaaaaaaaa!"; /* Super Mario 64 :P */
4815 static const char * const laugh_msg
[4] = {
4816 "giggles.", "chuckles.", "snickers.", "laughs.",
4818 pline_msg
= laugh_msg
[rn2(4)];
4822 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
4823 pline_msg
= "mumbles faintly.";
4824 } else pline_msg
= "mumbles incomprehensibly.";
4828 if (mtmp
->data
== &mons
[PM_POEZ_PRESIDENT
] && u
.ualign
.type
== A_CHAOTIC
&& !mtmp
->mtame
&& !mtmp
->mfrenzied
) {
4830 mtmp
->mpeaceful
= TRUE
;
4831 verbalize("Hey %s! I see you're a POEZ member! I'm gonna join your team!", playeraliasname
);
4833 struct monst
*ppresident
;
4834 ppresident
= tamedog(mtmp
, (struct obj
*) 0, TRUE
);
4835 if (ppresident
) mtmp
= ppresident
;
4836 if (!mtmp
) impossible("poez president was tamed but doesn't exist now??");
4840 if (mtmp
->data
== &mons
[PM_GIRL_OUTSIDE_GANG
] && u
.ualign
.type
== A_LAWFUL
&& !mtmp
->mtame
&& !mtmp
->mfrenzied
) {
4842 mtmp
->mpeaceful
= TRUE
;
4843 verbalize("%s! It is good that you have come! You see, I'm one of the few girls that resisted joining those filthy youth gangs. Since you despise them as much as I do, I decide to join your cause.", playeraliasname
);
4845 struct monst
*ppresident
;
4846 ppresident
= tamedog(mtmp
, (struct obj
*) 0, TRUE
);
4847 if (ppresident
) mtmp
= ppresident
;
4848 if (!mtmp
) impossible("girl outside gang was tamed but doesn't exist now??");
4852 if (mtmp
->data
== &mons
[PM_OCCASIONAL_FRIEND
] && u
.ualign
.type
== A_NEUTRAL
&& !mtmp
->mtame
&& !mtmp
->mfrenzied
) {
4854 mtmp
->mpeaceful
= TRUE
;
4855 verbalize("Yeeeeah! %s, let's mow down all our opponents! I'll gladly join your team, and then we'll be unstoppable!", playeraliasname
);
4857 struct monst
*ppresident
;
4858 ppresident
= tamedog(mtmp
, (struct obj
*) 0, TRUE
);
4859 if (ppresident
) mtmp
= ppresident
;
4860 if (!mtmp
) impossible("girl outside gang was tamed but doesn't exist now??");
4866 verbl_msg
= "Sorry, I'm all out of wishes.";
4867 } else if (mtmp
->mpeaceful
) {
4868 if (ptr
== &mons
[PM_WATER_DEMON
])
4869 pline_msg
= "gurgles.";
4871 verbl_msg
= "I'm free!";
4872 } else verbl_msg
= "This will teach you not to disturb me!";
4877 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
4878 if (u
.usteed
== mtmp
)
4879 verbl_msg
= "Why do you wear us out like that? Can't you, like, try to avoid the mud and dogshit?";
4881 verbl_msg
= "Nooooo! We're nearing the end of our lifetime! Can you please take us to a shoe repair shop?";
4882 } else if (mtmp
->mfrenzied
) {
4883 if (u
.usteed
== mtmp
)
4884 verbl_msg
= "Wear us if you want, but take us off and we'll scratch you to death and make your blood squirt in all directions.";
4886 verbl_msg
= "We'll scratch very bloody wounds on your legs and kill you.";
4887 } else if (mtmp
->mtame
) {
4888 if (u
.usteed
== mtmp
)
4889 verbl_msg
= "Yes! Please! Keep wearing us and we'll take you to the end of the world and beyond!";
4891 verbl_msg
= "Come on my dear, find someone whom we can kick to death!";
4892 } else if (mtmp
->mpeaceful
) {
4893 if (u
.usteed
== mtmp
)
4894 verbl_msg
= "You're not our owner, but we allow you to wear us for a while because we like you.";
4896 verbl_msg
= "We are beautiful, in every single way!";
4898 if (u
.usteed
== mtmp
)
4899 verbl_msg
= "Okay, you may wear us. But as soon as you take us off, we'll teach you a lesson in pain.";
4901 verbl_msg
= "You don't need to fight. Just stand there and we'll cause soothing pain to you.";
4906 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
4907 verbl_msg
= "I sure hope you'll protect me with your life.";
4910 if (mtmp
->mtame
&& !mtmp
->isminion
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
4911 verbl_msg
= "Dinner time! Can you take me to a noble restaurant please?";
4915 if (mtmp
->data
== &mons
[PM_MANDARUCK
] && !mtmp
->mfrenzied
) {
4917 if (!mtmp
->mpeaceful
&& !mtmp
->mfrenzied
) mtmp
->mpeaceful
= TRUE
;
4919 static const char *hint_msgs
[] = {
4920 "Always guard your purse from thieves.",
4921 "Be wary of Jessica, she might not look like it but she'll steal your money repeatedly.",
4922 "Careful when dealing with the mysterious 2! They're known to sneak into your backpack as blind passengers!",
4923 "The journalist Rhea wants to open your backpack and film it at the same time, which will cause you to appear in the newspaper in a rather negative light...",
4924 "Don't react to Mariya when she clicks open all the drawers of your backpack. She will seduce you if you confront her, and then make you unconscious.",
4925 "If your backpack is suddenly much heavier with no warning, it means that Wendy jumped on top of it and you're dragging her weight.",
4926 "There's a sexy princess called Cathlette, but she's really evil. God help you if she decides to make you a target.",
4927 "Watch out for Lisa's tricks. She will divert you by talking about boring stuff.",
4928 "Make sure you don't turn your back on May-Britt, or she might end up breaking your backpack's zippers!",
4930 verbalize("%s", hint_msgs
[rn2(SIZE(hint_msgs
))]);
4935 if (mtmp
->data
== &mons
[PM_TEARFRAN
] && !mtmp
->mfrenzied
) {
4937 if (mtmp
->mpeaceful
) {
4938 verbalize("*sob*... there are no good days in this life at all, there are only terrible ones... *sob*");
4939 } else if (u
.ualign
.record
> 0) {
4940 mtmp
->mpeaceful
= TRUE
;
4941 verbalize("Oh... I see you care for me... please, protect me from harm...");
4942 pline("You can see tears running down %s's cheeks, and try your best to make her feel better.", mon_nam(mtmp
));
4943 } else if (u
.ualign
.record
< 0) {
4944 mtmp
->mfrenzied
= TRUE
;
4945 monflee(mtmp
, 100, TRUE
, TRUE
);
4946 verbalize("*sob* *sob* You're just as evil as all the other people... please end this life of misery and agony already...");
4947 } else verbalize("Oh... can I talk to you?");
4952 if (mtmp
->data
== &mons
[PM_MELISTRIDE
] && PlayerInHighHeels
&& !mtmp
->mfrenzied
) {
4953 mtmp
->mpeaceful
= TRUE
;
4954 verbalize("Wow, I really like your heels, %s!", playeraliasname
);
4956 if (ACURR(A_CHA
) >= 18 && !mtmp
->mtame
) {
4957 struct monst
*melistride
;
4958 melistride
= tamedog(mtmp
, (struct obj
*) 0, TRUE
);
4959 if (melistride
) mtmp
= melistride
;
4960 if (mtmp
) verbalize("You know what? I'll join you. We're in this together, after all. Let's complete our tasks in a team effort!");
4961 else impossible("melistride was tamed but doesn't exist now??");
4966 if (mtmp
->data
== &mons
[PM_NASTROSCHA
] && (uarmg
&& itemhasappearance(uarmg
, APP_VELVET_GLOVES
) ) && !mtmp
->mfrenzied
) {
4967 mtmp
->mpeaceful
= TRUE
;
4968 pline("With your velvet gloves, you caress %s...", mon_nam(mtmp
));
4971 struct monst
*nastroscha
;
4972 nastroscha
= tamedog(mtmp
, (struct obj
*) 0, TRUE
);
4973 if (nastroscha
) mtmp
= nastroscha
;
4974 if (!mtmp
) impossible("nastroscha was tamed but doesn't exist now??");
4975 else pline("Suddenly %s is absolutely in love with you!", mon_nam(mtmp
));
4976 } else verbalize("Ooh %s, I really like those velvety soft gloves...", playeraliasname
);
4980 if (mtmp
->data
== &mons
[PM_WUXTINA
] && !mtmp
->mcan
) {
4981 verbalize("Get the fuck out of here! I'm the only one who may use the analysis port now and if you want to use it too you have to stand in the fucking line!");
4983 if (yn("Do you obey the command that the wuxtina uttered with her bitchy voice?") != 'y') {
4984 pline("%s suddenly sprays her scentful perfume right into your %s.", Monnam(mtmp
), body_part(FACE
));
4985 u
.cnd_perfumecount
++;
4986 if (Role_if(PM_SOCIAL_JUSTICE_WARRIOR
)) sjwtrigger();
4987 if (Role_if(PM_HUSSY
)) {
4988 You("joyously inhale %s's scentful perfume. It's very soothing.", mon_nam(mtmp
));
4990 pline("Inhaling %s's scentful perfume is not the brightest idea. But in this case you didn't have a choice...", mon_nam(mtmp
));
4992 if (rn2(10) && uarmh
&& itemhasappearance(uarmh
, APP_GAS_MASK
) ) {
4993 pline("But the gas mask protects you from the effects.");
4994 } else if (rn2(5) && uarmf
&& uarmf
->oartifact
== ART_CLAUDIA_S_SELF_WILL
) {
4995 pline("But you actually enjoy the lovely scent.");
4996 } else if (rn2(20) && uwep
&& uwep
->oartifact
== ART_HIGH_ORIENTAL_PRAISE
) {
4997 pline("But you actually enjoy the lovely scent.");
4998 } else if (rn2(10) && uarmf
&& uarmf
->oartifact
== ART_KATHARINA_S_SIGH
) {
4999 pline("But you actually enjoy the lovely scent.");
5002 if (rn2(2)) increasesanity(rnz(20 + mtmp
->m_lev
));
5010 if (((u
.uhave
.amulet
) && !u
.freeplaymode
) || CannotTeleport
|| (u
.usteed
&& mon_has_amulet(u
.usteed
)) ) { pline("You shudder for a moment."); (void) safe_teleds_normalterrain(FALSE
); break;}
5011 if (playerlevelportdisabled()) {
5012 pline("For some reason you resist the banishment!");
5016 make_stunned(HStun
+ 2, FALSE
); /* to suppress teleport control that you might have */
5018 if (!u
.banishmentbeam
) {
5019 u
.banishmentbeam
= 1;
5020 nomul(-2, "being banished", FALSE
);
5022 verbalize(!rn2(4) ? "Don't molest me ever again. If you do, I'll kick your hands bloodily with my dancing shoes." : !rn2(3) ? "Good riddance. Now get lost and annoy other girls instead." : !rn2(2) ? "Get lost before I start burning your arm with my candle." : "If you ever come back, I'm gonna extinguish my cigarette right in your face.");
5023 if (FunnyHallu
) pline("(She obviously likes assholes, you say to yourself.)");
5030 u
.cnd_perfumecount
++;
5031 if (Role_if(PM_SOCIAL_JUSTICE_WARRIOR
)) sjwtrigger();
5032 if (Role_if(PM_HUSSY
)) {
5033 You("joyously inhale %s's scentful perfume. It's very soothing.", mon_nam(mtmp
));
5035 pline("Inhaling %s's scentful perfume is not the brightest idea.", mon_nam(mtmp
));
5037 if (rn2(10) && uarmh
&& itemhasappearance(uarmh
, APP_GAS_MASK
) ) {
5038 pline("But the gas mask protects you from the effects.");
5039 } else if (rn2(5) && uarmf
&& uarmf
->oartifact
== ART_CLAUDIA_S_SELF_WILL
) {
5040 pline("But you actually enjoy the lovely scent.");
5041 } else if (rn2(20) && uwep
&& uwep
->oartifact
== ART_HIGH_ORIENTAL_PRAISE
) {
5042 pline("But you actually enjoy the lovely scent.");
5043 } else if (rn2(10) && uarmf
&& uarmf
->oartifact
== ART_KATHARINA_S_SIGH
) {
5044 pline("But you actually enjoy the lovely scent.");
5047 if (rn2(2)) increasesanity(rnz(20 + mtmp
->m_lev
));
5056 if (mtmp
->mhp
< mtmp
->mhpmax
/3)
5057 verbl_msg
= "Allah bana bunu yapan kafirleri cezalandiracak!";
5058 else if (mtmp
->mtame
&& !mtmp
->isminion
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
)
5059 verbl_msg
= "Baska bir doener kebap yemem gerek!";
5060 else if (mtmp
->mconf
|| mtmp
->mflee
|| mtmp
->mtrapped
)
5061 verbl_msg
= "Simdi kime dua etmem gerekiyor? Jahwe? Hayir, hatirliyorum, bu Buda!";
5063 if (flags
.female
) verbl_msg
= "Selamlar, kiz kardes.";
5064 else verbl_msg
= "Selamlar, erkek kardes.";
5067 } else if (mtmp
->mpeaceful
) {
5068 if (flags
.female
) verbl_msg
= "Selamlar, kiz kardes.";
5069 else verbl_msg
= "Selamlar, erkek kardes.";
5073 } else if (Race_if(PM_TURMENE
) || Race_if(PM_HC_ALIEN
) || Race_if(PM_SLYER_ALIEN
) || (have_hardcoreaddiction() && rn2(10)) || (uarmh
&& uarmh
->oartifact
== ART_JAMILA_S_BELIEF
)) {
5080 u
.cnd_conversioncount
++;
5081 if (Role_if(PM_SOCIAL_JUSTICE_WARRIOR
)) sjwtrigger();
5085 if (uarmf
&& uarmf
->oartifact
== ART_RUEA_S_FAILED_CONVERSION
&& rn2(20)) break;
5086 if (uwep
&& uwep
->oartifact
== ART_CRONVERT
&& rn2(10)) break;
5087 if (uarmf
&& uarmf
->oartifact
== ART_EXHAUST_DAMAGE
) break;
5089 if (u
.ualign
.record
< -20 && !rn2(Race_if(PM_KORONST
) ? 10 : 100) && (sgn(mtmp
->data
->maligntyp
) != u
.ualign
.type
) ) { /* You have been converted! */
5091 if(u
.ualignbase
[A_CURRENT
] == u
.ualignbase
[A_ORIGINAL
] && mtmp
->data
->maligntyp
!= A_NONE
) {
5092 You("have a strong feeling that %s is angry...", u_gname());
5093 pline("%s accepts your allegiance.", align_gname(sgn(mtmp
->data
->maligntyp
)));
5095 /* The player wears a helm of opposite alignment? */
5096 if (uarmh
&& uarmh
->otyp
== HELM_OF_OPPOSITE_ALIGNMENT
)
5097 u
.ualignbase
[A_CURRENT
] = sgn(mtmp
->data
->maligntyp
);
5099 u
.ualign
.type
= u
.ualignbase
[A_CURRENT
] = sgn(mtmp
->data
->maligntyp
);
5103 You("have a sudden sense of a new direction.");
5104 /* Beware, Conversion is costly */
5106 u
.ublesscnt
+= (ishaxor
? 150 : 300);
5107 adjalign((int)(u
.ualignbase
[A_ORIGINAL
] * (u
.alignlim
/ 2)));
5112 godvoice(sgn(mtmp
->data
->maligntyp
), "Suffer, infidel!");
5114 (void) adjattrib(A_WIS
, -2, TRUE
, TRUE
);
5115 angrygods(sgn(mtmp
->data
->maligntyp
));
5121 adjalign(-(mtmp
->m_lev
+ 1));
5123 if (!rn2(10)) badeffect();
5130 if (mtmp
->mhp
< mtmp
->mhpmax
/3)
5131 pline("%s points a %s at %s heart.", Monnam(mtmp
), mbodypart(mtmp
, FINGER
), mhis(mtmp
));
5132 else if (mtmp
->mtame
&& hastoeat
&& !mtmp
->isminion
&& moves
> EDOG(mtmp
)->hungrytime
)
5133 pline("%s grunts long and deeply.", Monnam(mtmp
));
5134 else if (mtmp
->mconf
|| mtmp
->mflee
|| mtmp
->mtrapped
)
5135 pline("%s spins %s %s wildly.", Monnam(mtmp
), mhis(mtmp
), mbodypart(mtmp
, HEAD
));
5136 else if (Race_if(PM_TURMENE
) || Race_if(PM_EGYMID
) || Race_if(PM_PERVERT
) || Race_if(PM_HC_ALIEN
) || Race_if(PM_SLYER_ALIEN
))
5137 pline("%s nods approvingly.", Monnam(mtmp
));
5139 pline("%s makes an approving gesture, but doesn't deign to talk to you.", Monnam(mtmp
));
5143 if (mtmp
->mpeaceful
) {
5145 if (Race_if(PM_TURMENE
) || Race_if(PM_EGYMID
) || Race_if(PM_PERVERT
) || Race_if(PM_HC_ALIEN
) || Race_if(PM_SLYER_ALIEN
)) pline("%s looks at you for a moment.", Monnam(mtmp
));
5146 else pline("%s does not deign to look at you, let alone talk to you.", Monnam(mtmp
));
5151 if (Race_if(PM_TURMENE
) || Race_if(PM_HC_ALIEN
) || Race_if(PM_SLYER_ALIEN
) || (have_hardcoreaddiction() && rn2(4)) || (uarmh
&& uarmh
->oartifact
== ART_JAMILA_S_BELIEF
)) {
5156 u
.cnd_wouwoucount
++;
5157 if (Role_if(PM_SOCIAL_JUSTICE_WARRIOR
)) sjwtrigger();
5161 if (!obsidianprotection()) switch (rn2(17)) {
5165 case 3: make_confused(HConfusion
+ rnd(100 + (mtmp
->m_lev
* 5) ), FALSE
); /* 40% */
5169 case 6: make_confused(HConfusion
+ (2L * rnd(100 + (mtmp
->m_lev
* 5) ) / 3L), FALSE
); /* 30% */
5170 make_stunned(HStun
+ (rnd(100 + (mtmp
->m_lev
* 5) ) / 3L), FALSE
);
5173 case 8: make_stunned(HStun
+ (2L * rnd(100 + (mtmp
->m_lev
* 5) ) / 3L), FALSE
); /* 20% */
5174 make_confused(HConfusion
+ (rnd(100 + (mtmp
->m_lev
* 5) ) / 3L), FALSE
);
5176 case 9: make_stunned(HStun
+ rnd(100 + (mtmp
->m_lev
* 5) ), FALSE
); /* 10% */
5178 case 10: make_numbed(HNumbed
+ rnd(100 + (mtmp
->m_lev
* 5) ), FALSE
); /* 10% */
5180 case 11: make_frozen(HFrozen
+ rnd(100 + (mtmp
->m_lev
* 5) ), FALSE
); /* 10% */
5182 case 12: make_burned(HBurned
+ rnd(100 + (mtmp
->m_lev
* 5) ), FALSE
); /* 10% */
5184 case 13: make_feared(HFeared
+ rnd(100 + (mtmp
->m_lev
* 5) ), FALSE
); /* 10% */
5186 case 14: make_blinded(Blinded
+ rnd(100 + (mtmp
->m_lev
* 5) ), FALSE
); /* 10% */
5188 case 15: make_hallucinated(HHallucination
+ rnd(100 + (mtmp
->m_lev
* 5) ), FALSE
, 0L); /* 10% */
5190 case 16: make_dimmed(HDimmed
+ rnd(100 + (mtmp
->m_lev
* 5) ), FALSE
); /* 10% */
5193 if (!rn2(20)) increasesanity(rnd(10 + (mtmp
->m_lev
* 2) ));
5197 case MS_BOAST
: /* giants */
5198 if (!mtmp
->mpeaceful
) {
5200 case 0: pline("%s boasts about %s gem collection.",
5201 Monnam(mtmp
), mhis(mtmp
));
5203 case 1: pline_msg
= "complains about a diet of mutton.";
5205 default: pline_msg
= "shouts \"Fee Fie Foe Foo!\" and guffaws.";
5206 wake_nearto(mtmp
->mx
, mtmp
->my
, 7*7);
5217 case MS_LOWPRIORITY
:
5221 if (!mtmp
->mpeaceful
) {
5222 if (In_endgame(&u
.uz
) && is_mplayer(ptr
)) {
5225 } else return 0; /* no sound */
5227 /* Generic peaceful humanoid behaviour. */
5229 pline_msg
= "wants nothing to do with you.";
5230 else if (mtmp
->mhp
< mtmp
->mhpmax
/4)
5231 pline_msg
= "moans.";
5232 else if (mtmp
->mconf
|| mtmp
->mstun
)
5233 verbl_msg
= !rn2(3) ? "Huh?" : rn2(2) ? "What?" : "Eh?";
5234 else if (!mtmp
->mcansee
)
5235 verbl_msg
= "I can't see!";
5236 else if (mtmp
->mtrapped
) {
5237 struct trap
*t
= t_at(mtmp
->mx
, mtmp
->my
);
5239 if (t
&& !t
->hiddentrap
) t
->tseen
= 1;
5240 verbl_msg
= "I'm trapped!";
5241 } else if (mtmp
->mhp
< mtmp
->mhpmax
/2)
5242 pline_msg
= "asks for a potion of healing.";
5243 else if (mtmp
->mtame
&& hastoeat
&& !mtmp
->isminion
&& moves
> EDOG(mtmp
)->hungrytime
)
5244 verbl_msg
= "I'm hungry.";
5245 /* Specific monsters' interests */
5246 else if (is_elf(ptr
))
5247 pline_msg
= "curses orcs.";
5248 else if (is_dwarf(ptr
))
5249 pline_msg
= "talks about mining.";
5250 else if (likes_magic(ptr
) && (monsndx(ptr
) != PM_KLAPPTNIX
) && rn2(5) )
5251 pline_msg
= "talks about spellcraft.";
5252 else if (ptr
->mlet
== S_CENTAUR
)
5253 pline_msg
= "discusses hunting.";
5254 else switch (monsndx(ptr
)) {
5256 pline_msg
= (mtmp
->mhpmax
- mtmp
->mhp
>= 10) ?
5257 "complains about unpleasant dungeon conditions."
5258 : "asks you about the One Ring.";
5260 #if 0 /* OBSOLETE */
5261 case PM_FARMER_MAGGOT
:
5262 pline_msg
= "mumbles something about Morgoth.";
5265 case PM_ARCHEOLOGIST
:
5266 pline_msg
= "describes a recent article in \"Spelunker Today\" magazine.";
5269 verbl_msg
= "Aloha.";
5272 verbl_msg
= "HATE! HATE! HATE!";
5275 verbl_msg
= "Mechtned.";
5278 verbl_msg
= "Klapptnix.";
5280 case PM_UNLUCKY_GIRL
:
5281 verbl_msg
= "Damn those people who constantly make me slip into dog shit with my zipper boots!";
5284 verbl_msg
= "I can't help it, I really consider fish to be the most beautiful creatures in existence.";
5287 verbl_msg
= "I'm gonna introduce all those bastard assistants to my battering ram.";
5290 verbl_msg
= "Mmmmmmmmmmm... lovely, soft butt cheeks...";
5292 case PM_SHOE_FETISHIST
:
5293 verbl_msg
= "I absolutely looooooooove high heels!";
5295 case PM_SECRET_ADVICE_MEMBER
:
5296 verbl_msg
= "Careful. I'm a member of the Secret Advice.";
5298 case PM_PREVERSIONER
:
5299 verbl_msg
= "Who the hell would design a game with a reset button that has no confirmation and simply erases your current game without giving you a chance to save???";
5301 case PM_GENDERSTARIST
:
5302 verbl_msg
= !rn2(3) ? "Sehr geehrte Buergerinnen und Buerger, die Schuelerinnen und Schueler sind unter dem gesetzlich geforderten Niveau..." : !rn2(2) ? "Sehr geehrte Buergerlnnen, die Schuelerlnnen fallen beim Pisa-Test zu oft durch..." : "Sehr geehrte Buerger*innen, die Schueler*innen weigern sich, den Gender*stern* zu* benutz*en*/*in*...*";
5304 case PM_DEATH_EATER
:
5305 pline_msg
= "talks about hunting muggles.";
5308 pline_msg
= "talks about doing a drive-by.";
5311 verbl_msg
= "Enematzu memalezu!";
5313 case PM_ALGONQUIN_BUSINESSLADY
:
5314 verbl_msg
= "I'm very busy! Please don't disturb me!";
5317 verbl_msg
= "britny is a prep!!!111";
5320 verbl_msg
= "Gods are nonexistant. People should stop believing in them.";
5323 verbl_msg
= "Anna is gonna finish off that Walt bumbler.";
5326 verbl_msg
= "Little strawberry me baby!";
5328 case PM_GANG_SCHOLAR
:
5329 verbl_msg
= "I'm constantly being bullied by the Bang Gang and Anna's hussies...";
5332 verbl_msg
= "Hidden diamonds are like tree bark.";
5335 verbl_msg
= "That Sing bitch keeps forcing me to clean the dog shit from all the girls' shoes! Please rescue me!";
5337 case PM_TRANSVESTITE
:
5338 verbl_msg
= "Look at my heels! Do you think they're beautiful?";
5340 case PM_TRANSSYLVANIAN
:
5341 verbl_msg
= "My block-heeled combat boots are very fleecy!";
5344 verbl_msg
= "I'm the chosen one who is going to win the ANTM show!";
5346 case PM_FAILED_EXISTENCE
:
5347 verbl_msg
= "Waaaaaah! Life has been so cruel to me!";
5352 verbl_msg
= "We're here to bring peace to the world.";
5355 verbl_msg
= "*sigh* If only I could make this bleeding stop...";
5358 pline_msg
= "talks about some random guy named Benny.";
5361 pline_msg
= "talks about groovy music.";
5365 pline_msg
= "discusses dungeon exploration.";
5370 if (ptr
->mlet
!= S_NYMPH
&& u
.homosexual
== 0) {
5372 pline("You're discovering your sexuality...");
5373 getlin("Are you homosexual? [y/yes/no] (If you answer no, you're heterosexual.)", buf
);
5375 if (!(strcmp (buf
, "yes")) || !(strcmp (buf
, "y")) || !(strcmp (buf
, "ye")) || !(strcmp (buf
, "ys"))) u
.homosexual
= 2;
5376 else u
.homosexual
= 1;
5379 if (ptr
->mlet
!= S_NYMPH
&&
5380 could_seduceX(mtmp
, &youmonst
, (struct attack
*)0) == 1) {
5381 (void) doseduce(mtmp
);
5384 switch ((poly_gender() != (int) mtmp
->female
) ? rn2(3) : 0)
5387 verbl_msg
= "Hello, sailor.";
5390 pline_msg
= "comes on to you.";
5393 pline_msg
= "cajoles you.";
5397 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/10) {
5398 verbalize("This is unit %d to headquarters. Send reinforcements! Repeat! Send reinforcements!", mtmp
->m_id
); /* inspired by the anachronononononononononononononaut NPCs in dnethack, thanks Chris --Amy */
5399 } else if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
5400 verbalize("Officer in need of a medic!");
5401 } else if (mtmp
->mpeaceful
)
5402 verbalize("Just the facts, %s.", flags
.female
? "Ma'am" : "Sir");
5404 static const char * const arrest_msg
[3] = {
5405 "Anything you say can be used against you.",
5406 "You're under arrest!",
5407 "Stop in the name of the Law!",
5409 verbl_msg
= arrest_msg
[rn2(3)];
5413 if (monsndx(ptr
) == PM_PRISON_GUARD
) {
5414 long gdemand
= 500 * u
.ulevel
;
5417 if (!mtmp
->mpeaceful
&& !mtmp
->mtame
) {
5418 pline("%s demands %ld %s to avoid re-arrest.",
5419 Amonnam(mtmp
), gdemand
, currency(gdemand
));
5420 if ((goffer
= bribe(mtmp
)) >= gdemand
) {
5421 verbl_msg
= "Good. Now beat it, scum!";
5422 if (!mtmp
->mfrenzied
) mtmp
->mpeaceful
= 1;
5426 pline("I said %ld!", gdemand
);
5427 mtmp
->mspec_used
= 1000;
5431 verbl_msg
= "Out of my way, scum!"; /* still a jerk */
5434 if (mtmp
->mpeaceful
&& !mtmp
->mtame
) {
5435 (void) demon_talk(mtmp
);
5440 if (!mtmp
->mpeaceful
)
5443 if (mtmp
->mpeaceful
&& monsndx(ptr
) == PM_WIZARD_OF_YENDOR
&& Race_if(PM_RODNEYAN
) ) {
5445 if (mon_has_amulet(mtmp
) ) {
5446 verbalize("Here, take the amulet and use it well, %s!", flags
.female
? "sister" : "brother");
5447 mdrop_special_objs(mtmp
);
5449 else if (mon_has_special(mtmp
) ) {
5450 verbalize("Here %s, I got a nice artifact for you!", flags
.female
? "sister" : "brother");
5451 mdrop_special_objs(mtmp
);
5453 else verbalize("Good luck on your quest, %s!", flags
.female
? "sister" : "brother");
5457 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) verbalize("Doggone it!");
5460 case MS_GYPSY
: /* KMH */
5461 if (mtmp
->mpeaceful
) {
5468 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
5469 pline_msg
= "is trying to cast a healing spell.";
5473 /* deliberately vague, since it's not actually casting any spell */
5474 pline_msg
= "seems to mutter a cantrip.";
5476 case MS_NURSE
: /* services added by Amy - maybe we should make this into a menu instead of y/n prompts? */
5479 int nursesanitycost
= (u
.usanity
* 10); /* fixed cost */
5481 int nursedecontcost
= u
.nursedecontamcost
; /* goes up every time you purchase it */
5483 int nursehpcost
= u
.nurseextracost
; /* goes up every time you purchase it */
5485 int nursesymbiotecost
= u
.nursesymbiotecost
; /* goes up every time you purchase it */
5487 int nurseshutdowncost
= u
.nurseshutdowncost
;
5489 if (Upolyd
) nursehpcost
/= 5;
5493 menu_item
*selected
;
5496 if (!mtmp
->nurse_extrahealth
&& !mtmp
->nurse_decontaminate
&& !mtmp
->nurse_healing
&& !mtmp
->nurse_curesickness
&& !mtmp
->nurse_curesliming
&& !mtmp
->nurse_curesanity
&& !mtmp
->nurse_medicalsupplies
&& !mtmp
->nurse_purchasedrugs
&& !mtmp
->nurse_obtainsymbiote
&& !mtmp
->nurse_fixsymbiote
&& !mtmp
->nurse_shutdownsymbiote
&& !mtmp
->nurse_restoration
&& !mtmp
->nurse_vaccine
&& !mtmp
->nurse_alla
) {
5497 verbalize("Sorry. I'm all out of services.");
5501 any
.a_void
= 0; /* zero out all bits */
5502 tmpwin
= create_nhwindow(NHW_MENU
);
5505 if (mtmp
->nurse_extrahealth
) add_menu(tmpwin
, NO_GLYPH
, &any
, 'e', 0, ATR_NONE
, "Extra Health", MENU_UNSELECTED
);
5507 if (mtmp
->nurse_decontaminate
) add_menu(tmpwin
, NO_GLYPH
, &any
, 'd', 0, ATR_NONE
, "Decontaminate", MENU_UNSELECTED
);
5509 if (mtmp
->nurse_healing
) add_menu(tmpwin
, NO_GLYPH
, &any
, 'h', 0, ATR_NONE
, "Healing", MENU_UNSELECTED
);
5511 if (mtmp
->nurse_curesickness
) add_menu(tmpwin
, NO_GLYPH
, &any
, 'c', 0, ATR_NONE
, "Cure Sickness", MENU_UNSELECTED
);
5513 if (mtmp
->nurse_curesliming
) add_menu(tmpwin
, NO_GLYPH
, &any
, 'l', 0, ATR_NONE
, "Cure Sliming", MENU_UNSELECTED
);
5515 if (mtmp
->nurse_curesanity
) add_menu(tmpwin
, NO_GLYPH
, &any
, 'i', 0, ATR_NONE
, "Cure Sanity", MENU_UNSELECTED
);
5517 if (mtmp
->nurse_medicalsupplies
) add_menu(tmpwin
, NO_GLYPH
, &any
, 'm', 0, ATR_NONE
, "Medical Supplies", MENU_UNSELECTED
);
5519 if (mtmp
->nurse_purchasedrugs
) add_menu(tmpwin
, NO_GLYPH
, &any
, 'p', 0, ATR_NONE
, "Purchase Drugs", MENU_UNSELECTED
);
5521 if (mtmp
->nurse_obtainsymbiote
) add_menu(tmpwin
, NO_GLYPH
, &any
, 'o', 0, ATR_NONE
, "Obtain Symbiote", MENU_UNSELECTED
);
5523 if (mtmp
->nurse_fixsymbiote
) add_menu(tmpwin
, NO_GLYPH
, &any
, 'f', 0, ATR_NONE
, "Fix Symbiote", MENU_UNSELECTED
);
5525 if (mtmp
->nurse_shutdownsymbiote
) add_menu(tmpwin
, NO_GLYPH
, &any
, 's', 0, ATR_NONE
, "Shutdown Symbiote", MENU_UNSELECTED
);
5527 if (mtmp
->nurse_restoration
) add_menu(tmpwin
, NO_GLYPH
, &any
, 'r', 0, ATR_NONE
, "Restoration", MENU_UNSELECTED
);
5529 if (mtmp
->nurse_vaccine
) add_menu(tmpwin
, NO_GLYPH
, &any
, 'v', 0, ATR_NONE
, "COVID-19 Vaccine", MENU_UNSELECTED
);
5531 if (mtmp
->nurse_alla
) add_menu(tmpwin
, NO_GLYPH
, &any
, 'v', 0, ATR_NONE
, "Gain Alla", MENU_UNSELECTED
);
5533 end_menu(tmpwin
, "Services Available:");
5534 n
= select_menu(tmpwin
, PICK_ONE
, &selected
);
5535 destroy_nhwindow(tmpwin
);
5538 switch (selected
[0].item
.a_int
) {
5540 if (u
.ugold
>= nursehpcost
) {
5541 verbalize("I can inject extra health into you for %d dollars if you want.", nursehpcost
);
5542 if (yn("Accept the offer?") == 'y') {
5543 verbalize("Okay, hold still while I puncture you with this long, pointy needle...");
5544 if (!rn2(10)) mtmp
->nurse_extrahealth
= 0;
5545 u
.ugold
-= nursehpcost
;
5546 if (u
.ualign
.type
== A_NEUTRAL
) adjalign(1);
5547 u
.cnd_nurseserviceamount
++;
5549 if (!Upolyd
) u
.uhpmax
++;
5551 use_skill(P_SQUEAKING
, 1);
5553 u
.usymbiote
.mhpmax
++;
5554 maybe_evolve_symbiote();
5555 if (u
.usymbiote
.mhpmax
> 500) u
.usymbiote
.mhpmax
= 500;
5557 u
.nurseextracost
+= 50;
5558 if (u
.nurseextracost
< 1000) u
.nurseextracost
= 1000; /* fail safe */
5561 } else verbalize("Sorry, extra health costs %d dollars.", nursehpcost
);
5565 if (u
.ugold
>= nursedecontcost
&& u
.contamination
) {
5566 verbalize("I can decontaminate you for %d dollars if you want.", nursedecontcost
);
5567 if (yn("Accept the offer?") == 'y') {
5568 verbalize("Okay, hold still while I puncture you with this long, pointy needle...");
5569 if (!rn2(5)) mtmp
->nurse_decontaminate
= 0;
5570 u
.ugold
-= nursedecontcost
;
5571 if (u
.ualign
.type
== A_NEUTRAL
) adjalign(1);
5572 u
.cnd_nurseserviceamount
++;
5574 decontaminate(u
.contamination
);
5575 pline("Now you don't have the %d gold pieces any longer.", nursedecontcost
);
5576 if (FunnyHallu
) pline("You offer a 'thank you' to Captain Obvious.");
5577 u
.nursedecontamcost
+= 500;
5578 if (u
.nursedecontamcost
< 1000) u
.nursedecontamcost
= 1000; /* fail safe */
5581 } else if (!u
.contamination
) verbalize("Huh? You don't need to do that.");
5582 else verbalize("Sorry, decontamination costs %d dollars.", nursedecontcost
);
5587 if (u
.uhp
== u
.uhpmax
&& (!Upolyd
|| (Upolyd
&& u
.mh
== u
.mhmax
))) {
5588 verbalize("Apart from potential mental disorders everything's fine with you. There's no need for me to waste my medical supplies on you.");
5591 if (u
.ugold
>= 500) {
5592 verbalize("Sure thing, I can heal you for 500 dollars.");
5593 if (yn("Accept the offer?") == 'y') {
5594 verbalize("Okay, hold still while I puncture you with this long, pointy needle...");
5595 if (!rn2(50)) mtmp
->nurse_healing
= 0;
5597 if (u
.ualign
.type
== A_NEUTRAL
) adjalign(1);
5598 u
.cnd_nurseserviceamount
++;
5601 if (u
.uhp
> u
.uhpmax
) u
.uhp
= u
.uhpmax
;
5604 if (u
.mh
> u
.mhmax
) u
.mh
= u
.mhmax
;
5608 } else verbalize("Sorry, healing costs 500 dollars.");
5613 verbalize("Don't call in sick when you aren't! Come back to me when you actually have a sickness that needs curing.");
5616 if (u
.ugold
>= 5000) {
5617 verbalize("It is wise of you to come to see a doctor. For only 5000 dollars, I can heal you.");
5618 if (yn("Accept the offer?") == 'y') {
5619 verbalize("Okay, hold still while I puncture you with this long, pointy needle...");
5620 if (!rn2(15)) mtmp
->nurse_curesickness
= 0;
5622 if (u
.ualign
.type
== A_NEUTRAL
) adjalign(1);
5623 u
.cnd_nurseserviceamount
++;
5625 You_feel("better.");
5626 make_sick(0L, (char *) 0, FALSE
, SICK_ALL
);
5629 } else verbalize("Sorry, the cure for sickness costs 5000 dollars.");
5634 verbalize("Do you see any slime on your body? No? Well, me neither. Come back when you're actually slimed.");
5637 if (u
.ugold
>= 10000) {
5638 verbalize("Eek! Yeah that would normally require a medical doctor, but if you have 10000 dollars I can give you something that should hopefully cure the sliming.");
5639 if (yn("Accept the offer?") == 'y') {
5640 verbalize("Okay, hold still while I puncture you with this long, pointy needle...");
5641 if (!rn2(12)) mtmp
->nurse_curesliming
= 0;
5643 if (u
.ualign
.type
== A_NEUTRAL
) adjalign(1);
5644 u
.cnd_nurseserviceamount
++;
5646 FunnyHallu
? pline("The rancid goo is gone! Yay!") : pline_The("slime disappears.");
5652 } else verbalize("Sorry, the cure for sliming costs 10000 dollars.");
5656 if (u
.usanity
&& (u
.ugold
>= nursesanitycost
)) {
5657 verbalize("I can cure your sanity for %d dollars if you want.", nursesanitycost
);
5658 if (yn("Accept the offer?") == 'y') {
5659 verbalize("Okay, hold still while I puncture you with this long, pointy needle...");
5660 if (!rn2(5)) mtmp
->nurse_curesanity
= 0;
5661 u
.ugold
-= nursesanitycost
;
5662 if (u
.ualign
.type
== A_NEUTRAL
) adjalign(1);
5663 u
.cnd_nurseserviceamount
++;
5665 reducesanity(u
.usanity
);
5668 } else if (!u
.usanity
) verbalize("You have no sanity that could be cured! Be glad, being insane is the preferred state of mind you want in this dungeon!");
5669 else verbalize("Sorry, the cure for sanity costs %d dollars.", nursesanitycost
);
5673 if (u
.ugold
>= 10000) {
5674 verbalize("Ah, you look like a walking coinpurse. Sure, you can have medical supplies, but they come at a price. For 10000 dollars I can sell you a medical kit.");
5675 if (yn("Accept the offer?") == 'y') {
5677 if (!rn2(10)) mtmp
->nurse_medicalsupplies
= 0;
5678 if (u
.ualign
.type
== A_NEUTRAL
) adjalign(1);
5679 u
.cnd_nurseserviceamount
++;
5682 medkit
= mksobj(MEDICAL_KIT
, TRUE
, FALSE
, FALSE
);
5683 verbalize(medkit
? "A pleasure doing business with you. The medical kit is waiting on the ground below you." : "Whoops. It seems that I don't have supplies for you right now, but for technical reasons I can't give you a refund. Sorry.");
5684 use_skill(P_SQUEAKING
, 2);
5687 medkit
->known
= medkit
->dknown
= medkit
->bknown
= medkit
->rknown
= 1;
5688 medkit
->owt
= weight(medkit
);
5693 } else verbalize("Sorry, medical supplies cost 10000 dollars.");
5696 if (u
.ugold
>= 2000) {
5697 verbalize("Hmm, I think I can give you a little something, but I need 2000 dollars to cover up expenses.");
5698 if (yn("Accept the offer?") == 'y') {
5700 if (!rn2(20)) mtmp
->nurse_purchasedrugs
= 0;
5701 if (u
.ualign
.type
== A_NEUTRAL
) adjalign(1);
5702 u
.cnd_nurseserviceamount
++;
5705 medkit
= mksobj(rn2(2) ? MUSHROOM
: PILL
, TRUE
, FALSE
, FALSE
);
5706 verbalize(medkit
? "Here, your stuff is on the ground. Have fun, but remember: if you call the cops, I'll send my assassins after you!" : "Oh, sorry, I don't have anything for you... but thanks for the money, sucker!");
5707 use_skill(P_SQUEAKING
, 1);
5710 medkit
->known
= medkit
->dknown
= medkit
->bknown
= medkit
->rknown
= 1;
5711 medkit
->owt
= weight(medkit
);
5717 } else verbalize("What? I'm not a dealer! But I might change my mind if you can bring at least 2000 dollars.");
5720 if (uinsymbiosis
&& u
.usymbiote
.cursed
) {
5721 verbalize("Your current symbiote is cursed! I can't replace it with a new one unless you fix that problem first.");
5725 if (u
.ugold
< nursesymbiotecost
) {
5726 verbalize("Sorry, a symbiote costs %d dollars.", nursesymbiotecost
);
5729 if (uinsymbiosis
) verbalize("This will replace your current symbiote. By continuing, I assume that you agree to discard your symbiote for a random new one.");
5731 if (u
.ugold
>= nursesymbiotecost
) {
5732 verbalize("A symbiote injection costs %d dollars. According to current Yendorian law, I'm forced to inform you that the symbiote you receive is random and may or may not be useful to you. By continuing, you confirm that you know of this risk and will not hold me responsible if you don't like the result.", nursesymbiotecost
);
5733 if (yn("Accept the offer?") == 'y') {
5734 verbalize("Alright, here's your injection.");
5735 if (!rn2(10)) mtmp
->nurse_obtainsymbiote
= 0;
5736 u
.ugold
-= nursesymbiotecost
;
5737 if (u
.ualign
.type
== A_NEUTRAL
) adjalign(1);
5738 u
.cnd_nurseserviceamount
++;
5740 getrandomsymbiote(FALSE
, FALSE
);
5742 u
.nursesymbiotecost
+= 5000;
5743 if (u
.nursesymbiotecost
< 10000) u
.nursesymbiotecost
= 10000; /* fail safe */
5750 if (!uinsymbiosis
) {
5751 verbalize("What? You don't have a symbiote! Sorry, but I can't fix something that doesn't exist!");
5754 if (!u
.usymbiote
.cursed
&& u
.usymbiote
.mhp
== u
.usymbiote
.mhpmax
) {
5755 verbalize("Your symbiote is in perfect condition, so you don't need my services.");
5758 int symhealcost
= 0;
5760 /* The nurse will always remove all the curses. So in order to not make it too easy
5761 * to get rid of the nastier curses, we have to add to the cost of the service,
5762 * scaling with the severity of cursedness of your symbiote --Amy */
5763 if (u
.usymbiote
.cursed
) symhealcost
+= 2000;
5764 if (u
.usymbiote
.hvycurse
) symhealcost
+= 3000;
5765 if (u
.usymbiote
.prmcurse
) symhealcost
+= 15000;
5766 if (u
.usymbiote
.evilcurse
) symhealcost
+= 480000;
5767 if (u
.usymbiote
.morgcurse
) symhealcost
+= 480000;
5768 if (u
.usymbiote
.bbcurse
) symhealcost
+= 480000;
5769 if (u
.usymbiote
.stckcurse
) symhealcost
+= 10000;
5770 if (u
.usymbiote
.mhp
< u
.usymbiote
.mhpmax
) symhealcost
+= ((u
.usymbiote
.mhpmax
- u
.usymbiote
.mhp
) * 100);
5771 if (u
.ugold
>= symhealcost
) {
5772 verbalize("Sure thing, I can fully heal your symbiote and remove all curses from it for %d dollars.", symhealcost
);
5773 if (yn("Accept the offer?") == 'y') {
5774 verbalize("Alright, hold still. Don't worry, this injection won't hurt your symbiote a bit.");
5775 if (!rn2(8)) mtmp
->nurse_fixsymbiote
= 0;
5776 u
.ugold
-= symhealcost
;
5777 if (u
.ualign
.type
== A_NEUTRAL
) adjalign(1);
5778 u
.cnd_nurseserviceamount
++;
5780 uncursesymbiote(TRUE
);
5781 u
.usymbiote
.mhp
= u
.usymbiote
.mhpmax
;
5782 if (flags
.showsymbiotehp
) flags
.botl
= TRUE
;
5785 } else verbalize("Sorry, fixing your symbiote's current condition costs %d dollars.", symhealcost
);
5790 if (!uinsymbiosis
) {
5791 verbalize("Hey, I can shut down your symbiote only if you actually have one.");
5794 if (u
.shutdowntime
) {
5795 verbalize("Your symbiote is already shut down. Trying to shut it down again would disturb the space-time continuum.");
5799 if (u
.ugold
< nurseshutdowncost
) {
5800 verbalize("Sorry, symbiote shutdown costs %d dollars.", nurseshutdowncost
);
5804 if (u
.ugold
>= nurseshutdowncost
) {
5805 verbalize("Shutting down your symbiote will temporarily prevent it from attacking, defending or otherwise participating in combat. This will cost you %d dollars.", nurseshutdowncost
);
5806 if (yn("Accept the offer?") == 'y') {
5807 verbalize("Okay, here's a special injection for your symbiote. Please hold still.");
5808 if (!rn2(20)) mtmp
->nurse_shutdownsymbiote
= 0;
5809 u
.ugold
-= nurseshutdowncost
;
5810 if (u
.ualign
.type
== A_NEUTRAL
) adjalign(1);
5811 u
.cnd_nurseserviceamount
++;
5813 use_skill(P_SQUEAKING
, 3);
5814 u
.shutdowntime
= 1000;
5816 u
.nurseshutdowncost
+= 500;
5817 if (u
.nurseshutdowncost
< 1000) u
.nurseshutdowncost
= 1000; /* fail safe */
5818 if (flags
.showsymbiotehp
) flags
.botl
= TRUE
;
5825 if (u
.ugold
< 2500) {
5826 verbalize("Sorry, restoration costs 2500 dollars.");
5830 verbalize("Otvali! V Sovetskoy Rossli zdorov'ye istoshchayet VAS!");
5833 if (u
.ugold
>= 2500) {
5834 verbalize("This procedure will safely recover one drained attribute point for 2500 dollars. Please be aware that if none of your attributes have been drained, you won't get your money back.");
5835 if (yn("Accept the offer?") == 'y') {
5836 verbalize("Okay, hold still while I puncture you with this long, pointy needle...");
5838 if (!rn2(10)) mtmp
->nurse_restoration
= 0;
5839 if (u
.ualign
.type
== A_NEUTRAL
) adjalign(1);
5844 i
= rn2(A_MAX
); /* start at a random point */
5845 for (ii
= 0; ii
< A_MAX
; ii
++) {
5847 if (i
== A_STR
&& u
.uhs
>= 3) --lim
; /* WEAK */
5848 if (ABASE(i
) < lim
) {
5850 pline("Wow! This makes you feel good!");
5852 break; /* only restore one --Amy */
5854 if(++i
>= A_MAX
) i
= 0;
5858 u
.cnd_nurseserviceamount
++;
5865 if (u
.ugold
< u
.nursevaccinecost
) {
5866 verbalize("Sorry, vaccination costs %d dollars.", u
.nursevaccinecost
);
5870 verbalize("Sorry. You're still a child, and the permanent vaccination commission doesn't recommend us to vaccinate children. Come back when you're older.");
5873 if (u
.ugold
>= u
.nursevaccinecost
) {
5874 verbalize("Yes, you are wise to get vaccinated against COVID-19. Unfortunately, we are currently experiencing supply bottlenecks, which has caused the prices for vaccines to explode, which means that a shot will cost you %d dollars, but it's for the best, because we're using a Yendorian State Approved(TM) vaccine that is guaranteed to be safe and highly effective! Get your covid shot now!", u
.nursevaccinecost
);
5875 if (yn("Accept the offer?") == 'y') {
5876 verbalize("Okay, hold still while I puncture you with this long, pointy needle...");
5877 u
.ugold
-= u
.nursevaccinecost
;
5878 if (!rn2(20)) mtmp
->nurse_vaccine
= 0;
5879 if (u
.ualign
.type
== A_NEUTRAL
) adjalign(1);
5880 u
.cnd_nurseserviceamount
++;
5882 u
.nursevaccinecost
+= 250;
5883 if (u
.nursevaccinecost
< 2000) u
.nurseshutdowncost
= 2000; /* fail safe */
5884 upnivel(TRUE
); /* guaranteed */
5890 if (u
.ugold
< 100) {
5891 verbalize("Sorry, that costs 100 dollars.");
5894 if (u
.ugold
>= 100) {
5895 verbalize("You can buy one line of alla for 100 dollars.");
5896 if (yn("Accept the offer?") == 'y') {
5897 verbalize("Alright here's a line of alla for you.");
5899 if (!rn2(100)) mtmp
->nurse_alla
= 0;
5900 if (u
.ualign
.type
== A_NEUTRAL
) adjalign(1);
5901 u
.cnd_nurseserviceamount
++;
5908 } /* switch statement */
5909 } /* n > 0 menu check */
5912 if (uwep
&& (uwep
->oclass
== WEAPON_CLASS
|| uwep
->oclass
== BALL_CLASS
|| uwep
->oclass
== CHAIN_CLASS
|| uwep
->oclass
== VENOM_CLASS
|| is_weptool(uwep
))
5913 || (u
.twoweap
&& uswapwep
&& (uswapwep
->oclass
== WEAPON_CLASS
5914 || is_weptool(uswapwep
))))
5915 verbl_msg
= "Put that weapon away before you hurt someone!";
5916 else if (uarmc
|| uarm
|| uarmh
|| uarms
|| uarmg
|| uarmf
)
5917 verbl_msg
= (Role_if(PM_HEALER
) || Race_if(PM_HERBALIST
)) ?
5918 "Doc, I can't help you unless you cooperate." :
5919 "Please undress so I can examine you.";
5921 verbl_msg
= "Take off your shirt, please.";
5922 else verbl_msg
= "Relax, this won't hurt a bit.";
5931 if (money_cnt(invent
))
5933 verbl_msg
= "Please drop that gold and follow me.";
5935 verbl_msg
= "Please follow me.";
5939 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
5940 verbl_msg
= "Medic!!!";
5944 if (mtmp
->mtame
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
5945 verbl_msg
= "We gotta stop by the next canteen.";
5950 static const char * const soldier_foe_msg
[3] = {
5951 "Resistance is useless!",
5954 }, * const soldier_pax_msg
[3] = {
5955 "What lousy pay we're getting here!",
5956 "The food's not fit for Orcs!",
5957 "My feet hurt, I've been on them all day!",
5959 verbl_msg
= mtmp
->mpeaceful
? soldier_pax_msg
[rn2(3)]
5960 : soldier_foe_msg
[rn2(3)];
5964 if (ptr
== &mons
[PM_DEATH
] && !rn2(10))
5965 pline_msg
= "is busy reading a copy of Sandman #8.";
5966 else verbl_msg
= "Who do you think you are, War?";
5970 switch(monsndx(ptr
)) {
5972 pline_msg
= rn2(2) ? "gobbling noisily." : /*[Sakusha]*/
5973 "mumbles through a mouthful of food.";
5976 pline_msg
= "breathes heavily...";
5979 verbl_msg
= "Mine! All mine!";
5985 if(money_cnt(invent
))
5987 verbl_msg
= "Give me that gold!";
5989 pline_msg
= "stares at you jealously.";
5993 pline_msg
= "glares at you ferociously.";
5996 pline_msg
= "sighs.";
5999 pline_msg
= "moans in agony.";
6002 pline_msg
= "doesn't deign to reply.";
6005 verbl_msg
= "Think you're innocent and pure? That can be changed!";
6010 case MS_DOUGLAS_ADAMS
:
6012 static const char *da_msgs
[] = {
6014 "It's a nice day today!",
6015 "Have a Pan Galactic Gargle Blaster?",
6016 "Time is relative. Lunchtime doubly so.",
6017 "This is some strange usage of the word 'safe' that I wasn't aware of.",
6019 if (mtmp
->data
== &mons
[PM_MARVIN
]) {
6020 verbalize("Life, loathe it or ignore it, you cannot like it.");
6021 } else if (mtmp
->data
== &mons
[PM_DEEP_THOUGHT
]) {
6022 verbalize("6*9 = 42");
6023 } else if (mtmp
->data
== &mons
[PM_EDDIE
]) {
6024 verbalize("I'm feeling just great, guys!");
6026 verbalize("%s", da_msgs
[rn2(SIZE(da_msgs
))]);
6032 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
6033 verbalize("%s! Those bullies beat me up! Help!", flags
.female
? "Mom" : "Dad");
6036 if (mtmp
->mtame
&& !mtmp
->isminion
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
6037 verbl_msg
= "Man, how much longer does this lesson last? I need a break so I can eat some peanuts!";
6047 if (mtmp
->mtame
&& u
.roxannemode
&& mtmp
->data
== &mons
[PM_ROXANNE
]) {
6048 if (u
.roxannetimer
) {
6049 if (u
.roxannetimer
< 1000) verbalize("My poison enchantment is active, but I'm running low on bolts!");
6050 else verbalize("My poison enchantment is active, meaning that all nearby monsters are being poisoned automatically.");
6053 register struct obj
*roxybolt
;
6055 roxybolt
= carrying(CROSSBOW_BOLT
);
6056 if (!roxybolt
) roxybolt
= carrying(FLEECE_BOLT
);
6057 if (!roxybolt
) roxybolt
= carrying(PIN_BOLT
);
6058 if (!roxybolt
) roxybolt
= carrying(MINERAL_BOLT
);
6059 if (!roxybolt
) roxybolt
= carrying(DROVEN_BOLT
);
6060 if (!roxybolt
) roxybolt
= carrying(KOKKEN
);
6061 if (!roxybolt
) roxybolt
= carrying(POISON_BOLT
);
6062 if (!roxybolt
) roxybolt
= carrying(HEAVY_CROSSBOW_BOLT
);
6063 if (!roxybolt
) roxybolt
= carrying(SPIKY_BOLT
);
6064 if (!roxybolt
) roxybolt
= carrying(HARDENED_BOLT
);
6065 if (!roxybolt
) roxybolt
= carrying(INFERIOR_BOLT
);
6066 if (!roxybolt
) roxybolt
= carrying(ETHER_BOLT
);
6067 if (!roxybolt
) roxybolt
= carrying(MATERIAL_BOLT
);
6069 verbalize("Ah, excellent, you have a stack of %ld crossbow bolts! Do you want to give them to me?", roxybolt
->quan
);
6071 if (yn("Give the bolts to Roxanne?") == 'y') {
6073 struct attack
* attkptr
;
6074 struct permonst
* poisonroxanne
= &mons
[PM_ROXANNE
];
6076 u
.roxannetimer
+= (roxybolt
->quan
* 200);
6078 verbalize("Thanks! My poison enchantment will ensure that the enemy is poisoned.");
6080 attkptr
= &poisonroxanne
->mattk
[4];
6081 attkptr
->aatyp
= AT_NONE
;
6082 attkptr
->adtyp
= AD_POIS
;
6086 attkptr
= &poisonroxanne
->mattk
[5];
6087 attkptr
->aatyp
= AT_LASH
;
6088 attkptr
->adtyp
= AD_POIS
;
6098 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
6099 verbl_msg
= "Why did you allow those rude customers to treat me like that? Some sort of pimp you are!";
6102 if (mtmp
->mtame
&& !mtmp
->isminion
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
6103 verbl_msg
= "Can we get something to eat, honey? I promise that I'll pay for my meal with my own money!";
6107 if (mtmp
->data
== &mons
[PM_ROXY
] && !mtmp
->mtame
&& mtmp
->wastame
&& u
.ugold
>= 1000) {
6108 verbalize("For 1000 zorkmids I'll join your team again.");
6109 if (yn("Accept the offer?") == 'y') {
6111 struct monst
*roxylein
;
6114 roxylein
= tamedog(mtmp
, (struct obj
*) 0, TRUE
);
6115 if (roxylein
) mtmp
= roxylein
;
6116 if (mtmp
) verbalize("Thank you!");
6117 else impossible("roxy was tamed but doesn't exist now??");
6123 if (!flags
.female
) verbalize("Hey, baby, want to have some fun?");
6124 else verbalize("I don't have many female customers, but do you want to have fun with me?");
6125 if (yn("Accept the offer?") == 'y') {
6127 if (u
.homosexual
== 0) {
6128 pline("You're discovering your sexuality...");
6129 getlin("Are you homosexual? [y/yes/no] (If you answer no, you're heterosexual.)", buf
);
6131 if (!(strcmp (buf
, "yes")) || !(strcmp (buf
, "y")) || !(strcmp (buf
, "ye")) || !(strcmp (buf
, "ys"))) u
.homosexual
= 2;
6132 else u
.homosexual
= 1;
6135 (void) doseduce(mtmp
);
6139 if (!mtmp
->mpeaceful
) prostitutetaunt();
6145 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
6146 verbl_msg
= "I WILL COME BACK...";
6149 if (mtmp
->mtame
&& !mtmp
->isminion
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
6150 verbl_msg
= "HUNGRY! NEED FOOD!";
6153 if (mtmp
->mtame
) { /* tame and no distress */
6154 static const char *superman_tame
[] = {
6158 "WE WILL KICK THEM IN THE GOD DAMN ASS!",
6161 "FIRE IN THE ASS HOLE!",
6162 "SQUAD STAY ALERT FOUR HOSTILES!",
6163 "SIR I HERE SOMETHING!", /* too lazy to check for female PC --Amy */
6164 "MY PRIVATE IS FIVEMETERS TANGO ALL!",
6165 "MY PRIVATE IS TENMETERS ALERT CREEPS HOT ASS!",
6166 "ECHO MISSION IS GO!",
6169 verbalize("%s", superman_tame
[rn2(SIZE(superman_tame
))]);
6173 if (!mtmp
->mpeaceful
) {
6174 static const char *superman_msgs
[] = {
6175 "FRONTAL ATTACK!!!",
6176 "YOU DON'T STAND A CHANCE!",
6177 "YOU WILL DIE A SLOW, SLOW, DEATH...",
6178 "COME OUT! WE WILL HURT YOU!",
6179 "GRRRRRRRRRAAAAAAAAAAHHH!",
6182 "DIE YOU SON OF A BITCH!", /* too lazy to check for female PC --Amy */
6184 "YOUR LIFE IS GONNA END NOW!",
6185 "YOU WILL CEASE TO EXIST!",
6186 "I'M GOING TO EAT YOU!",
6187 "RAAAAAAAAAAAARGH!",
6188 "ATTACK PATTERN ALPHA!",
6190 "THERE'S NO ESCAPE!",
6192 "ATTAAAAAAAAAAAAACK!",
6195 verbalize("%s", superman_msgs
[rn2(SIZE(superman_msgs
))]);
6197 increasesanity(rnz(50 + (mtmp
->m_lev
* 5) ));
6198 u
.cnd_supermancount
++;
6204 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
6205 verbl_msg
= "Those kids these days ain't got no respect, I tell you...";
6208 if (mtmp
->mtame
&& !mtmp
->isminion
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
6209 verbl_msg
= "Why did I forget to bring along any food?";
6219 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
6220 verbl_msg
= "No! I can't faint! I'm the only one who can lead this school!";
6223 if (mtmp
->mtame
&& !mtmp
->isminion
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
6224 verbl_msg
= "Wait, I need a pit stop! Be back in a minute!";
6233 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/3) {
6234 verbl_msg
= "What? It's impossible that they are beating me, I'm the boss of this game after all!";
6235 if (Sick
) verbl_msg
= "I might be running low on health, but unlike you, at least my nose isn't running all the time!";
6238 if (mtmp
->mtame
&& mtmp
->mhp
< mtmp
->mhpmax
/5) {
6239 verbl_msg
= "Argh, my spaceship is falling apart! Quick, someone needs to repair it!";
6242 if (mtmp
->mtame
&& !mtmp
->isminion
&& hastoeat
&& moves
> EDOG(mtmp
)->hungrytime
) {
6243 verbl_msg
= "Dude, get me something to eat! Now! You have 50 turns or you're fired.";
6247 verbl_msg
= "Yes, my pet, we're in this together. I'm the boss, you just need to follow my lead and we'll finish off our enemies.";
6253 /* this assumes that it's Duri, however actually there's also other monsters using this... --Amy
6254 * you can only request services at his forge, but other monsters can bring you the artifacts */
6255 if (u
.duriworking
) {
6256 verbalize("I'm working. Please don't disturb me again!");
6260 if (!mtmp
->mpeaceful
) {
6261 verbalize("That's it. No soup for you!");
6265 /* request variable: 0 = nothing, 1 = evil artifact, 2 = good artifact */
6266 if (u
.durirequest
== 1) {
6269 if (mtmp
->data
== &mons
[PM_BLACKSMITH
] || mtmp
->data
== &mons
[PM_ELONA_BLACKSMITH
]) verbalize("Here's your artifact. Watch out, it's cursed and may well have downsides.");
6270 else verbalize("Here, I'm supposed to give you this cursed artifact from the blacksmith. Watch out, it may well have downsides.");
6274 if (u
.durirequest
== 2) {
6275 struct obj
*durifact
;
6278 boolean havegifts
= u
.ugifts
;
6279 if (!havegifts
) u
.ugifts
++;
6281 durifact
= mk_artifact((struct obj
*)0, !rn2(3) ? A_CHAOTIC
: rn2(2) ? A_NEUTRAL
: A_LAWFUL
, TRUE
);
6284 int duriskill
= get_obj_skill(durifact
, TRUE
);
6286 if (P_MAX_SKILL(duriskill
) == P_ISRESTRICTED
) {
6287 unrestrict_weapon_skill(duriskill
);
6288 } else if (P_MAX_SKILL(duriskill
) == P_UNSKILLED
) {
6289 unrestrict_weapon_skill(duriskill
);
6290 P_MAX_SKILL(duriskill
) = P_BASIC
;
6291 } else if (rn2(2) && P_MAX_SKILL(duriskill
) == P_BASIC
) {
6292 P_MAX_SKILL(duriskill
) = P_SKILLED
;
6293 } else if (!rn2(4) && P_MAX_SKILL(duriskill
) == P_SKILLED
) {
6294 P_MAX_SKILL(duriskill
) = P_EXPERT
;
6295 } else if (!rn2(10) && P_MAX_SKILL(duriskill
) == P_EXPERT
) {
6296 P_MAX_SKILL(duriskill
) = P_MASTER
;
6297 } else if (!rn2(100) && P_MAX_SKILL(duriskill
) == P_MASTER
) {
6298 P_MAX_SKILL(duriskill
) = P_GRAND_MASTER
;
6299 } else if (!rn2(200) && P_MAX_SKILL(duriskill
) == P_GRAND_MASTER
) {
6300 P_MAX_SKILL(duriskill
) = P_SUPREME_MASTER
;
6302 if (Race_if(PM_RUSMOT
)) {
6303 if (P_MAX_SKILL(duriskill
) == P_ISRESTRICTED
) {
6304 unrestrict_weapon_skill(duriskill
);
6305 } else if (P_MAX_SKILL(duriskill
) == P_UNSKILLED
) {
6306 unrestrict_weapon_skill(duriskill
);
6307 P_MAX_SKILL(duriskill
) = P_BASIC
;
6308 } else if (rn2(2) && P_MAX_SKILL(duriskill
) == P_BASIC
) {
6309 P_MAX_SKILL(duriskill
) = P_SKILLED
;
6310 } else if (!rn2(4) && P_MAX_SKILL(duriskill
) == P_SKILLED
) {
6311 P_MAX_SKILL(duriskill
) = P_EXPERT
;
6312 } else if (!rn2(10) && P_MAX_SKILL(duriskill
) == P_EXPERT
) {
6313 P_MAX_SKILL(duriskill
) = P_MASTER
;
6314 } else if (!rn2(100) && P_MAX_SKILL(duriskill
) == P_MASTER
) {
6315 P_MAX_SKILL(duriskill
) = P_GRAND_MASTER
;
6316 } else if (!rn2(200) && P_MAX_SKILL(duriskill
) == P_GRAND_MASTER
) {
6317 P_MAX_SKILL(duriskill
) = P_SUPREME_MASTER
;
6322 discover_artifact(durifact
->oartifact
);
6325 if (!havegifts
) u
.ugifts
--;
6327 if (mtmp
->data
== &mons
[PM_BLACKSMITH
] || mtmp
->data
== &mons
[PM_ELONA_BLACKSMITH
]) verbalize("Here's your artifact. You'll find it on the floor beneath you. Have fun!");
6328 else verbalize("Duri sent me to give you this artifact, so I'm dropping it at the floor beneath you. Have fun!");
6332 if (mtmp
->data
== &mons
[PM_BLACKSMITH
] || mtmp
->data
== &mons
[PM_ELONA_BLACKSMITH
]) {
6333 verbalize("Welcome to Duri's forge! I offer various services, including equipment repair, proofing, and artifact forging.");
6337 menu_item
*selected
;
6340 any
.a_void
= 0; /* zero out all bits */
6341 tmpwin
= create_nhwindow(NHW_MENU
);
6344 add_menu(tmpwin
, NO_GLYPH
, &any
, 'r', 0, ATR_NONE
, "Repair", MENU_UNSELECTED
);
6346 add_menu(tmpwin
, NO_GLYPH
, &any
, 'e', 0, ATR_NONE
, "Erosionproofing", MENU_UNSELECTED
);
6348 add_menu(tmpwin
, NO_GLYPH
, &any
, 'b', 0, ATR_NONE
, "Bad artifact", MENU_UNSELECTED
);
6350 add_menu(tmpwin
, NO_GLYPH
, &any
, 'g', 0, ATR_NONE
, "Good artifact", MENU_UNSELECTED
);
6352 end_menu(tmpwin
, "Services Available:");
6353 n
= select_menu(tmpwin
, PICK_ONE
, &selected
);
6354 destroy_nhwindow(tmpwin
);
6357 switch (selected
[0].item
.a_int
) {
6359 verbalize("For only %d zorkmids, I can repair all damage on an item of your choice!", u
.durirepaircost
);
6360 if (u
.ugold
< u
.durirepaircost
) {
6361 verbalize("But sadly you don't seem to have enough money.");
6364 struct obj
*repairobj
;
6365 repairobj
= getobj(allnoncount
, "repair");
6366 if (!repairobj
) break;
6368 if (!(repairobj
->oeroded
) && !(repairobj
->oeroded2
)) {
6369 verbalize("That item isn't damaged. You don't need to repair it!");
6372 if (yn("Pay for the repairs?") == 'y') {
6373 u
.ugold
-= u
.durirepaircost
;
6374 u
.durirepaircost
+= 500;
6375 if (!stack_too_big(repairobj
)) {
6376 repairobj
->oeroded
= repairobj
->oeroded2
= 0;
6377 verbalize("Alright! Your item is in tiptop shape again!");
6378 } else verbalize("Oh no! The stack was too big, causing my repair attempt to fail!");
6383 verbalize("So you want to erodeproof your items? All you need to do is give me %d zorkmids!", u
.durienchantcost
);
6384 if (u
.ugold
< u
.durienchantcost
) {
6385 verbalize("Well %s, it seems you can't afford it. Bummer.", flags
.female
? "lady" : "dude");
6388 struct obj
*proofobj
;
6389 proofobj
= getobj(allnoncount
, "erosionproof");
6390 if (!proofobj
) break;
6392 if (proofobj
->oerodeproof
) {
6393 verbalize("That item is erosionproof already!");
6396 if (yn("Pay for erosionproofing?") == 'y') {
6397 u
.ugold
-= u
.durienchantcost
;
6398 u
.durienchantcost
+= 2000;
6399 if (!stack_too_big(proofobj
)) {
6400 proofobj
->oerodeproof
= 1;
6401 verbalize("Your item is untouchable now!");
6402 } else verbalize("Bad luck, %s - proofing such a large stack of items can fail, and it seems you didn't get lucky this time.", flags
.female
? "gal" : "lad");
6407 verbalize("Forging a bad artifact will cost %d zorkmids.", u
.duriarticostevil
);
6408 if (u
.ugold
< u
.duriarticostevil
) {
6409 verbalize("Unfortunately you don't have enough money!");
6412 if (yn("Forge a bad artifact?") == 'y') {
6413 u
.ugold
-= u
.duriarticostevil
;
6414 u
.duriarticostevil
+= 5000;
6415 u
.duriworking
= 1000;
6417 verbalize("Alright, give me about 1000 turns and I'll have something for you.");
6421 verbalize("Forging a good artifact will cost %d zorkmids.", u
.duriarticostnormal
);
6422 if (u
.ugold
< u
.duriarticostnormal
) {
6423 verbalize("Unfortunately you don't have enough money!");
6426 if (yn("Forge a good artifact?") == 'y') {
6427 u
.ugold
-= u
.duriarticostnormal
;
6428 u
.duriarticostnormal
+= 10000;
6429 u
.duriworking
= 2000;
6431 verbalize("Alright, give me about 2000 turns and I'll have something for you. It'll be worth the wait, I promise!");
6440 verbalize("Sorry, I don't think I can help you. Look for Duri in the Blacksmith's Forge.");
6446 if (pline_msg
) pline("%s %s", Monnam(mtmp
), pline_msg
);
6447 else if (verbl_msg
) verbalize("%s", verbl_msg
);
6456 struct monst
* mtmp2
;
6460 pline("The chat command is currently unavailable!");
6461 if (flags
.moreforced
&& !MessagesSuppressed
) display_nhwindow(WIN_MESSAGE
, TRUE
); /* --More-- */
6465 if (HardcoreAlienMode
) {
6468 u
.cnd_wouwoucount
++;
6469 if (Role_if(PM_SOCIAL_JUSTICE_WARRIOR
)) sjwtrigger();
6477 boolean save_soundok
= flags
.soundok
;
6478 if (!(YouAreDeaf
)) flags
.soundok
= 1; /* always allow sounds while chatting */
6480 flags
.soundok
= save_soundok
;
6482 if (FemtrapActiveSolvejg
) {
6484 pline("Your grating, annoying voice aggravates everyone in your vicinity.");
6486 for (mtmp2
= fmon
; mtmp2
; mtmp2
= mtmp2
->nmon
) {
6488 if (mtmp2
->mtame
<= rnd(21) ) {
6490 int untamingchance
= 10;
6492 if (!(PlayerCannotUseSkills
)) {
6493 switch (P_SKILL(P_PETKEEPING
)) {
6494 default: untamingchance
= 10; break;
6495 case P_BASIC
: untamingchance
= 9; break;
6496 case P_SKILLED
: untamingchance
= 8; break;
6497 case P_EXPERT
: untamingchance
= 7; break;
6498 case P_MASTER
: untamingchance
= 6; break;
6499 case P_GRAND_MASTER
: untamingchance
= 5; break;
6500 case P_SUPREME_MASTER
: untamingchance
= 4; break;
6504 if (untamingchance
> rnd(10) && !(Role_if(PM_DRAGONMASTER
) && uarms
&& Is_dragon_shield(uarms
) && mtmp2
->data
->mlet
== S_DRAGON
) && !((rnd(30 - ACURR(A_CHA
))) < 4) ) {
6506 mtmp2
->mtame
= mtmp2
->mpeaceful
= 0;
6510 } else if (!mtmp2
->mtame
&& !is_infrastructure_monster(mtmp2
)) {
6512 mtmp2
->mtame
= mtmp2
->mpeaceful
= 0;
6516 if (!is_infrastructure_monster(mtmp2
) && !mtmp2
->mtame
&& !rn2(5)) mtmp2
->mfrenzied
= 1;
6525 /* monster got hit, and can now emit a pain sound or otherwise display a message for the player; it shouldn't always do so,
6526 * but every once in a while, so that the player can gauge roughly how much damage they're doing to a monster,
6527 * or (more importantly) how much their pet has been hurt, to make it possible to tell when they're in need of healing
6528 * without constantly needing to stethoscope or chat to them (which requires you to be adjacent to them and often also
6529 * wastes a turn, which isn't always an option in the middle of a fight). --Amy */
6532 register struct monst
*mtmp
;
6534 int painchance
= 10;
6535 boolean soundbased
= FALSE
;
6536 int distresslevel
= 0;
6539 impossible("monster_pain called with nonexistant monster!");
6543 if (mtmp
->mundetected
&& is_hider(mtmp
->data
)) mtmp
->mundetected
= FALSE
;
6544 if (mtmp
->mundetected
&& hides_under(mtmp
->data
)) mtmp
->mundetected
= FALSE
;
6546 if (FemtrapActiveLittleMarie
&& is_female(mtmp
->data
)) {
6547 if (SuperFemtrapLittleMarie
) randomnastytrapeffect(rnz(2 + (mtmp
->m_lev
* 2)), 1000 - (mtmp
->m_lev
* 2));
6548 else randomnastytrapeffect(rnz(2 + mtmp
->m_lev
), 1000 - mtmp
->m_lev
);
6549 u
.cnd_littlemarietrapcnt
++;
6552 if (FemtrapActiveSonja
&& !mtmp
->mpeaceful
&& !mtmp
->mtame
&& !rn2(SuperFemtrapSonja
? 5 : 10) && is_female(mtmp
->data
)) {
6553 incr_itimeout(&HAggravate_monster
, (mtmp
->m_lev
* 5) + 1);
6554 You_feel("that monsters are aware of your presence.");
6555 if (PlayerHearsSoundEffects
) pline(issoviet
? "Dazhe sovetskaya Pyat' Lo obostryayetsya v vashem nizkom igrovom masterstve." : "Woaaaaaah!");
6559 if (mtmp
->data
->msound
== MS_FEARHARE
) {
6560 monflee(mtmp
, rnd(10), TRUE
, TRUE
);
6563 if (mtmp
->mhp
< (mtmp
->mhpmax
/ 4)) distresslevel
= 3;
6564 else if (mtmp
->mhp
< (mtmp
->mhpmax
/ 2)) distresslevel
= 2;
6565 else if (mtmp
->mhp
< (mtmp
->mhpmax
* 3 / 4)) distresslevel
= 1;
6567 if (distresslevel
== 0) return; /* didn't lose enough health yet */
6569 if (mtmp
->data
->msound
== MS_SILENT
) return; /* never emits any sound */
6570 if (mtmp
->data
->msound
== MS_SISSY
) painchance
= 0; /* always emits a sound whenever it's damaged */
6572 /* petkeeping skill makes it more likely for pets to make sounds, so that you can see how much they've been hurt */
6574 if (!PlayerCannotUseSkills
) {
6575 switch (P_SKILL(P_PETKEEPING
)) {
6576 case P_BASIC
: painchance
-= 1; break;
6577 case P_SKILLED
: painchance
-= 2; break;
6578 case P_EXPERT
: painchance
-= 3; break;
6579 case P_MASTER
: painchance
-= 4; break;
6580 case P_GRAND_MASTER
: painchance
-= 5; break;
6581 case P_SUPREME_MASTER
: painchance
-= 6; break;
6588 /* riding skill makes it more likely for your steed to make sounds, even if the steed isn't tame */
6589 if (u
.usteed
&& (u
.usteed
== mtmp
)) {
6590 if (!PlayerCannotUseSkills
) {
6591 switch (P_SKILL(P_RIDING
)) {
6592 case P_BASIC
: painchance
-= 1; break;
6593 case P_SKILLED
: painchance
-= 2; break;
6594 case P_EXPERT
: painchance
-= 3; break;
6595 case P_MASTER
: painchance
-= 4; break;
6596 case P_GRAND_MASTER
: painchance
-= 5; break;
6597 case P_SUPREME_MASTER
: painchance
-= 6; break;
6602 if (painchance
< 0) painchance
= 0; /* fail safe */
6604 /* pets need even better chances */
6605 if (mtmp
->mtame
&& !rn2(10)) painchance
= 0;
6606 if (!PlayerCannotUseSkills
&& mtmp
->mtame
) {
6607 if (P_SKILL(P_PETKEEPING
) >= P_BASIC
&& !rn2(10)) painchance
= 0;
6608 if (P_SKILL(P_PETKEEPING
) >= P_SKILLED
&& !rn2(10)) painchance
= 0;
6609 if (P_SKILL(P_PETKEEPING
) >= P_EXPERT
&& !rn2(10)) painchance
= 0;
6610 if (P_SKILL(P_PETKEEPING
) >= P_MASTER
&& !rn2(10)) painchance
= 0;
6611 if (P_SKILL(P_PETKEEPING
) >= P_GRAND_MASTER
&& !rn2(10)) painchance
= 0;
6612 if (P_SKILL(P_PETKEEPING
) >= P_SUPREME_MASTER
&& !rn2(10)) painchance
= 0;
6615 if (!(PainSense
&& !rn2(10)) && !(StrongPainSense
&& !rn2(5)) && (painchance
>= (rnd(11))) ) return;
6617 /* some of these are sound-based, others are vision-based */
6618 switch (mtmp
->data
->msound
) {
6631 case MS_PRINCESSLEIA
:
6643 if (soundbased
&& !flags
.soundok
) return; /* can't hear */
6644 if (soundbased
&& mtmp
->data
->msound
!= MS_SISSY
&& (distu(mtmp
->mx
,mtmp
->my
) > (BOLT_LIM
+1)*(BOLT_LIM
+1)) ) return; /* too far away */
6645 if (!soundbased
&& mtmp
->data
->msound
!= MS_GIBBERISH
&& !cansee(mtmp
->mx
, mtmp
->my
)) return; /* can't see */
6647 switch (mtmp
->data
->msound
) {
6663 /*case MS_ANIMAL: -- duplicate */
6669 /*case MS_ORC: -- duplicate */
6734 case MS_LOWPRIORITY
:
6738 /* todo all the way down */
6748 case MS_SCIENTIST
: /* todo all the way up */
6750 switch (distresslevel
) {
6752 pline("%s screams.", Monnam(mtmp
));
6755 pline("%s writhes in pain.", Monnam(mtmp
));
6758 pline("%s is severely hurt!", Monnam(mtmp
));
6764 switch (distresslevel
) {
6766 verbalize("That's just a flesh wound...");
6769 verbalize("I underestimated you, but you'll still fall before my sword!");
6772 verbalize("The gods will grant me the strength to overcome this difficult opponent...");
6777 switch (distresslevel
) {
6779 verbalize("My vital signs are dropping!");
6782 verbalize("Uhh, that might require a tetanus shot. Speaking of which, my last vaccination was more than 10 years ago...");
6785 verbalize("Hey! Why is this HEV suit beeping constantly? That's so annoying!");
6790 switch (distresslevel
) {
6792 verbalize("Dadadiededada-dedidada-diededada-dedidada...");
6795 verbalize("La laaaaaa, lalala-laaaaaa...");
6798 verbalize("nananananinenananoe!");
6803 switch (distresslevel
) {
6805 verbalize("Scuttle that landlubber!");
6808 verbalize("Gonna keelhaul ye!");
6811 verbalize("Ye'r gonna dance with Jack Ketch!");
6816 switch (distresslevel
) {
6818 verbalize("Do you not recognize the fact that I'm %s?", mongenderidentity(mtmp
));
6821 verbalize("This %s is not amused!", mongenderidentity(mtmp
));
6824 verbalize("One day all the members of the LGBTIQ+ community are gonna cancel you, and then everyone will treat me as a respected %s!", mongenderidentity(mtmp
));
6828 case MS_SHOCKTROOPER
:
6829 switch (distresslevel
) {
6831 verbalize("mub puh mub dit dit");
6834 verbalize("dit kss kss");
6837 verbalize("kss dit dit kss");
6842 switch (distresslevel
) {
6844 if (flags
.female
) pline("%s shouts 'I'm gonna fuck you for that, bitch!'", Monnam(mtmp
));
6845 else pline("%s shouts 'Bastard!'", Monnam(mtmp
));
6848 if (flags
.female
) pline("%s shouts 'My penis will thrust into your vagina again and again, you slut!'", Monnam(mtmp
));
6849 else pline("%s shouts 'Motherfucker, I'll polish your kisser!'", Monnam(mtmp
));
6852 if (flags
.female
) pline("%s screams 'No woman gets away from me! You will be made pregnant by my dick, no matter what you devil's whore try to do!'", Monnam(mtmp
));
6853 else pline("%s screams 'Fuck Fuck Fuck why does that asshole have to be a man why can't I get a woman instead I'd so totally rape her into submission fuuuuuck...'", Monnam(mtmp
));
6858 switch (distresslevel
) {
6860 pline("%s shouts 'You'll die!'", Monnam(mtmp
));
6863 pline("%s shouts 'I'ma smash you for this!'", Monnam(mtmp
));
6866 pline("%s screams 'FUCK YOU ASSHOLE!!!'", Monnam(mtmp
));
6870 case MS_SHIVERINGESLES
:
6871 switch (distresslevel
) {
6873 pline("%s shouts 'Sie sterben schnell, wenn man sie jenijakt. Jenijak! Jenijak!'", Monnam(mtmp
));
6876 pline("%s shouts 'Sendockel den Klen. Verstanden? Den Klen!'", Monnam(mtmp
));
6879 pline("%s groans 'Fribbel! Einfach fribbel!'", Monnam(mtmp
));
6884 switch (distresslevel
) {
6886 pline("%s shouts 'Help! I'm %s and got attacked!'", Monnam(mtmp
), is_neuter(mtmp
->data
) ? "neuter" : mtmp
->female
? "female" : "male");
6889 pline("%s shouts 'Someone must rescue me, I'm a very important %s!'", Monnam(mtmp
), is_neuter(mtmp
->data
) ? "neutrum" : mtmp
->female
? "woman" : "man");
6892 pline("%s groans 'I don't wanna die a virgin...'", Monnam(mtmp
));
6897 switch (distresslevel
) {
6899 pline("%s shouts 'What the heck?'", Monnam(mtmp
));
6902 pline("%s shouts 'Outcasts, attack my target!'", Monnam(mtmp
));
6905 pline("%s groans 'Casdin shall avenge me...'", Monnam(mtmp
));
6910 switch (distresslevel
) {
6912 pline("%s shouts 'Something just hurt me!'", Monnam(mtmp
));
6915 pline("%s shouts 'Ah! I think I just got stabbed! But I don't remember by whom!'", Monnam(mtmp
));
6918 pline("%s groans 'Oh... think I need to perform first aid... but I forgot how that works...'", Monnam(mtmp
));
6923 switch (distresslevel
) {
6925 pline("%s shouts 'I got hit!'", Monnam(mtmp
));
6928 pline("%s shouts 'They hit me in the chest!'", Monnam(mtmp
));
6931 pline("%s groans 'Argh... I'm not gonna make it...'", Monnam(mtmp
));
6936 switch (distresslevel
) {
6938 pline("%s shouts 'I'll banish you!'", Monnam(mtmp
));
6941 pline("%s shouts 'Beg, milkface!'", Monnam(mtmp
));
6944 pline("%s shouts 'Break apart! Shatter!'", Monnam(mtmp
));
6948 case MS_MYTHICALDAWN
:
6949 switch (distresslevel
) {
6951 pline("%s shouts 'Dawn is breaking!'", Monnam(mtmp
));
6954 pline("%s shouts 'Lord Dagon awaits your soul in Oblivion!'", Monnam(mtmp
));
6957 pline("%s shouts 'The time of purgatory is drawing near!'", Monnam(mtmp
));
6962 switch (distresslevel
) {
6964 pline("%s shouts 'This area isn't safe!'", Monnam(mtmp
));
6967 pline("%s shouts 'Why did I come here? Should have picked another dungeon level!'", Monnam(mtmp
));
6970 pline("%s screams 'This is insane! I'll warp to a different level!'", Monnam(mtmp
));
6975 switch (distresslevel
) {
6977 pline("%s screams 'Ahh, the %s!'", Monnam(mtmp
), mbodypart(mtmp
, LEG
));
6980 pline("%s screams 'Paaaaaaaain!'", Monnam(mtmp
));
6983 pline("%s roars 'Gueueueaaaarrrrrrr!!'", Monnam(mtmp
));
6988 switch (distresslevel
) {
6990 pline("%s screams 'Medic!'", Monnam(mtmp
));
6993 pline("%s screams 'My %s!'", Monnam(mtmp
), !rn2(4) ? mbodypart(mtmp
, LEG
) : !rn2(3) ? mbodypart(mtmp
, ARM
) : rn2(2) ? mbodypart(mtmp
, HEAD
) : mbodypart(mtmp
, EYE
) );
6996 pline("%s mutters 'For... Eden.'", Monnam(mtmp
));
7000 case MS_TALONCOMPANY
:
7001 switch (distresslevel
) {
7003 pline("%s shouts 'Don't mess with the Talons!'", Monnam(mtmp
));
7006 pline("%s shouts 'Fuck that shit!'", Monnam(mtmp
));
7009 pline("%s shouts 'Retreat, fucking shit, retreat!!'", Monnam(mtmp
));
7014 switch (distresslevel
) {
7016 pline("%s shouts 'The law will always win!'", Monnam(mtmp
));
7019 pline("%s shouts 'Arrh!'", Monnam(mtmp
));
7022 pline("%s shouts 'Retreat!'", Monnam(mtmp
));
7027 switch (distresslevel
) {
7029 pline("%s shouts 'I'm hit!'", Monnam(mtmp
));
7032 pline("%s shouts 'Need a healing potion!'", Monnam(mtmp
));
7035 pline("%s groans 'I'm close to death!'", Monnam(mtmp
));
7040 switch (distresslevel
) {
7042 pline("%s shouts 'Stop being such a dick! Just gimme your metal!'", Monnam(mtmp
));
7045 pline("%s shouts 'I'll blast you with my shotgun if you don't give me your metal!'", Monnam(mtmp
));
7048 pline("%s groans 'You cannot stop the metal mafia...'", Monnam(mtmp
));
7053 switch (distresslevel
) {
7055 pline("%s shouts 'Should have stayed in bed instead of playing superhero!'", Monnam(mtmp
));
7058 pline("%s shouts 'Muck!'", Monnam(mtmp
));
7061 pline("%s sobs 'No, please don't kill me!'", Monnam(mtmp
));
7066 switch (distresslevel
) {
7068 pline("%s shouts 'Unit %d was hit!'", Monnam(mtmp
), mtmp
->m_id
);
7071 pline("%s shouts 'Officer in need of a backup!'", Monnam(mtmp
));
7074 pline("%s shouts 'Emergency! Unit %d confronted with extreme resistance!'", Monnam(mtmp
), mtmp
->m_id
);
7079 switch (distresslevel
) {
7081 pline("%s shouts 'The opponent met me!'", Monnam(mtmp
));
7084 pline("%s shouts 'I have hits off-gotten, I custom assistance!'", Monnam(mtmp
));
7087 pline("%s shouts 'Outer one no, equivalent I am dead!'", Monnam(mtmp
));
7092 switch (distresslevel
) {
7094 pline("%s shouts 'They're resisting!'", Monnam(mtmp
));
7097 pline("%s shouts 'We need to kill them, it's the only way to stop them!'", Monnam(mtmp
));
7100 pline("%s shouts 'They're going to burn our trees! We must not fall!'", Monnam(mtmp
));
7105 switch (distresslevel
) {
7107 pline("%s shouts 'Medic!'", Monnam(mtmp
));
7110 pline("%s shouts 'Excuse me! I'm in need of medical attention!'", Monnam(mtmp
));
7113 pline("%s shouts 'God dammit!'", Monnam(mtmp
));
7118 switch (distresslevel
) {
7120 pline("%s shouts 'You're not allowed to hit me, I'm a barber!'", Monnam(mtmp
));
7123 pline("%s shouts 'Stop that, man! Let me cut your hair instead!'", Monnam(mtmp
));
7126 pline("%s shouts 'I'm gonna cut like the devil!'", Monnam(mtmp
));
7131 switch (distresslevel
) {
7133 pline("Out of memory. Please restart the program.");
7136 pline("Runtime Error! R6016 - Not enough space for thread data");
7139 pline("Runtime Error! R6025 - pure virtual function call");
7144 switch (distresslevel
) {
7146 pline("%s shouts 'Oh god!'", Monnam(mtmp
));
7149 pline("%s shouts 'Oh doublegod!'", Monnam(mtmp
));
7152 pline("%s shouts 'Ohtenfoldgod!'", Monnam(mtmp
));
7157 switch (distresslevel
) {
7159 pline("%s shouts 'Wolloh age!'", Monnam(mtmp
));
7162 pline("%s shouts 'Wolloh, you fucked up, wolloh!'", Monnam(mtmp
));
7165 pline("%s shouts 'Ey wolloh, older! Wolloh, I have a knife, wolloh, and I'll cut out your fucking tongue, wolloh!'", Monnam(mtmp
));
7170 switch (distresslevel
) {
7172 pline("%s is bleeding...", Monnam(mtmp
));
7173 increasesanity(rnz(10));
7176 pline("%s is squirting blood everywhere!", Monnam(mtmp
));
7177 increasesanity(rnz(50));
7180 pline("Oh no! %s is bleeding profusely and it just doesn't want to stop and the entire floor is already colored red and... urgh, your %s...", Monnam(mtmp
), body_part(STOMACH
));
7181 increasesanity(rnz(200));
7186 switch (distresslevel
) {
7188 pline("%s shouts 'Fuck! I'm hit!'", Monnam(mtmp
));
7191 pline("%s shouts 'Damn those assholes!'", Monnam(mtmp
));
7194 pline("%s shouts 'Your mother is such a cunt!'", Monnam(mtmp
));
7199 switch (distresslevel
) {
7201 pline("%s complains about a broken nail.", Monnam(mtmp
));
7204 pline("%s's makeup is running down %s cheeks.", Monnam(mtmp
), mhis(mtmp
));
7207 pline("%s is badly bruised.", Monnam(mtmp
));
7212 switch (distresslevel
) {
7214 verbalize("GRRRR!");
7217 verbalize("ARRRRH! REVENGE!");
7220 verbalize("KILL THEM ALL!");
7225 case MS_FART_NORMAL
:
7227 switch (distresslevel
) {
7229 pline("%s's butt cheeks are bruised.", Monnam(mtmp
));
7232 pline("%s's butt cheeks look sore.", Monnam(mtmp
));
7235 pline("%s's butt cheeks are bleeding...", Monnam(mtmp
));
7242 switch (distresslevel
) {
7244 pline("%s's material seems to degrade.", Monnam(mtmp
));
7247 pline("%s looks a bit worn-out.", Monnam(mtmp
));
7250 pline("%s seems about to fall apart!", Monnam(mtmp
));
7255 switch (distresslevel
) {
7257 pline("%s shouts 'Kafirler!'", Monnam(mtmp
));
7260 pline("%s shouts 'Allah seni cezalandiracak!'", Monnam(mtmp
));
7263 pline("%s grumbles 'Cennette beni bekleyen bir suerue bakire var...'", Monnam(mtmp
));
7268 switch (distresslevel
) {
7270 pline("%s looks annoyed.", Monnam(mtmp
));
7273 pline("%s seems to be angry at the enemy who attacked %s.", Monnam(mtmp
), mhim(mtmp
));
7276 pline("%s's facial expression is very threatening.", Monnam(mtmp
));
7281 pline("%s", generate_garbage_string());
7283 case MS_HANDY
: /* todo for when they're in the middle of a call */
7284 switch (distresslevel
) {
7286 pline("%s screams.", Monnam(mtmp
));
7289 pline("%s writhes in pain.", Monnam(mtmp
));
7292 pline("%s is severely hurt!", Monnam(mtmp
));
7297 switch (distresslevel
) {
7299 pline("%s is dented.", Monnam(mtmp
));
7302 pline("Splinters of %s's chassis are flying around!", mon_nam(mtmp
));
7305 pline("%s looks quite a bit like a car wreck!", Monnam(mtmp
));
7310 switch (distresslevel
) {
7312 pline("%s shouts 'Karera no ken ga watashi o osotta!'", Monnam(mtmp
));
7315 pline("%s shouts 'Iya, senaka ni ya ga sasatte iru!'", Monnam(mtmp
));
7318 pline("%s shouts 'Watashi wa mada shinu ka jisatsu suru junbi ga dekite imasen!'", Monnam(mtmp
));
7323 switch (distresslevel
) {
7325 pline("%s remarks 'Eta igra - otstoy.'", Monnam(mtmp
));
7328 pline("%s mutters 'Fignya programmirovaniya.'", Monnam(mtmp
));
7331 pline("%s grumbles 'Emi chertova shlyukha, i yey dolzhno byt' stydno za sebya.'", Monnam(mtmp
));
7336 switch (distresslevel
) {
7338 verbalize("Bah! I still have %d HP remaining!", mtmp
->mhp
);
7341 verbalize("Yeah whatever, I have %d HP left!", mtmp
->mhp
);
7344 verbalize("No one can take off my remaining %d HP!", mtmp
->mhp
);
7348 case MS_PRINCESSLEIA
:
7349 switch (distresslevel
) {
7351 pline("%s sighs 'Another evil-doer who doesn't respect a princess...'", Monnam(mtmp
));
7354 pline("%s sobs 'If only we could live in a world without those violent people...'", Monnam(mtmp
));
7357 pline("%s cries 'This is not fair! I just want to wear my crown and purple dress, not spill my blue blood all over the place!'", Monnam(mtmp
));
7362 switch (distresslevel
) {
7369 verbalize("owwow!");
7375 verbalize("ow, this is painful!");
7378 verbalize("ouchie!");
7385 verbalize("owwowow ow-wow!");
7388 verbalize("owwowow!");
7391 verbalize("ow! ow!");
7394 verbalize("oooooow!");
7397 verbalize("man this hurts so much!");
7404 verbalize("oooooooow-wowowowowowowow!");
7407 verbalize("ooooooow! this is so painful! please make it stop hurting!");
7410 verbalize("owwowow! owwowow! why doesn't it stop hurting?!");
7413 verbalize("owwooooooooow! i don't want that, owwooooooooow!");
7416 verbalize("waaaaaaaah! waaaaaaah! you meanie! you big, evil... owwww...");
7423 switch (distresslevel
) {
7428 verbalize("Dirt ****!");
7431 verbalize("Bssssssss-bssssssss...");
7443 register struct monst
*mtmp
;
7448 boolean eligiblesymbio
= FALSE
;
7450 if (Muteness
|| u
.uprops
[MUTENESS
].extrinsic
|| have_mutenessstone() || (uarmh
&& uarmh
->oartifact
== ART_CLELIA_S_TONGUE_BREAKER
) ) {
7451 pline("You're muted!");
7452 if (flags
.moreforced
&& !MessagesSuppressed
) display_nhwindow(WIN_MESSAGE
, TRUE
); /* --More-- */
7456 if (tech_inuse(T_SILENT_OCEAN
)) {
7457 pline("The silent ocean prevents you from talking.");
7458 if (flags
.moreforced
&& !MessagesSuppressed
) display_nhwindow(WIN_MESSAGE
, TRUE
); /* --More-- */
7462 if (is_silent(youmonst
.data
)) {
7463 pline("As %s, you cannot speak.", !missingnoprotect
? an(youmonst
.data
->mname
) : "this weird creature");
7464 if (flags
.moreforced
&& !MessagesSuppressed
) display_nhwindow(WIN_MESSAGE
, TRUE
); /* --More-- */
7468 You_cant("speak. You're choking!");
7469 if (flags
.moreforced
&& !MessagesSuppressed
) display_nhwindow(WIN_MESSAGE
, TRUE
); /* --More-- */
7473 pline("They won't hear you out there.");
7474 if (flags
.moreforced
&& !MessagesSuppressed
) display_nhwindow(WIN_MESSAGE
, TRUE
); /* --More-- */
7478 Your("speech is unintelligible underwater.");
7479 if (flags
.moreforced
&& !MessagesSuppressed
) display_nhwindow(WIN_MESSAGE
, TRUE
); /* --More-- */
7483 if (!Blind
&& (otmp
= shop_object(u
.ux
, u
.uy
)) != (struct obj
*)0) {
7484 /* standing on something in a shop and chatting causes the shopkeeper
7485 to describe the price(s). This can inhibit other chatting inside
7486 a shop, but that shouldn't matter much. shop_object() returns an
7487 object iff inside a shop and the shopkeeper is present and willing
7488 (not angry) and able (not asleep) to speak and the position contains
7489 any objects other than just gold.
7495 if (!getdir("Talk to whom? (in what direction)")) {
7496 /* decided not to chat */
7500 if (u
.usteed
&& u
.dz
> 0)
7501 return (domonnoise(u
.usteed
));
7503 pline("They won't hear you %s there.", u
.dz
< 0 ? "up" : "down");
7507 if (u
.dx
== 0 && u
.dy
== 0) {
7509 * Let's not include this. It raises all sorts of questions: can you wear
7510 * 2 helmets, 2 amulets, 3 pairs of gloves or 6 rings as a marilith,
7512 if (u.umonnum == PM_ETTIN) {
7513 You("discover that your other head makes boring conversation.");
7517 pline("Talking to yourself is a bad habit for a dungeoneer.");
7521 tx
= u
.ux
+u
.dx
; ty
= u
.uy
+u
.dy
;
7522 mtmp
= m_at(tx
, ty
);
7524 if (!mtmp
|| mtmp
->mundetected
||
7525 mtmp
->m_ap_type
== M_AP_FURNITURE
||
7526 mtmp
->m_ap_type
== M_AP_OBJECT
)
7529 if (mtmp
->shinymonst
&& !mtmp
->mfrenzied
&& !mtmp
->mtame
&& (u
.alla
> 100)) {
7531 if (yn("You can tame this monster for 100 alla. Do it?") == 'y') {
7533 mtmp
->mpeaceful
= TRUE
;
7534 (void) tamedog(mtmp
, (struct obj
*) 0, TRUE
);
7543 /* sleeping monsters won't talk, except priests (who wake up) */
7544 if ((!mtmp
->mcanmove
|| mtmp
->msleeping
) && !mtmp
->ispriest
) {
7545 /* If it is unseen, the player can't tell the difference between
7546 not noticing him and just not existing, so skip the message. */
7547 if (canspotmon(mtmp
))
7548 pline("%s seems not to notice you.", Monnam(mtmp
));
7552 /* if this monster is waiting for something, prod it into action */
7553 mtmp
->mstrategy
&= ~STRAT_WAITMASK
;
7555 if (mtmp
->mtame
&& mtmp
->meating
) {
7556 if (!canspotmon(mtmp
) && !(mtmp
->data
->msound
== MS_DEEPSTATE
) && !(mtmp
->egotype_deepstatemember
))
7557 map_invisible(mtmp
->mx
, mtmp
->my
);
7558 pline("%s is eating noisily.", Monnam(mtmp
));
7562 if ((mtmp
->data
== &mons
[PM_SYMBIULD
]) || (mtmp
->data
== &mons
[PM_SYMBIOTE_WITH_A_DATA_DELETE_ATTACK
])) eligiblesymbio
= TRUE
;
7564 if ( (mtmp
->mtame
) && (((stationary(mtmp
->data
) || mtmp
->data
->mmove
== 0 || mtmp
->data
->mlet
== S_TURRET
) && !Race_if(PM_GOAULD
)) || (!(stationary(mtmp
->data
) || mtmp
->data
->mmove
== 0 || mtmp
->data
->mlet
== S_TURRET
) && Race_if(PM_GOAULD
))) && !is_arabellamonster(mtmp
->data
) && !mtmp
->mfrenzied
&& !(mtmp
->data
->mlevel
> 20 || (mtmp
->data
->mlevel
> (u
.ulevel
+ 5)) || cannot_be_tamed(mtmp
->data
) || (mtmp
->cham
== CHAM_ZRUTINATOR
) || mtmp
->isshk
|| mtmp
->isgd
|| mtmp
->ispriest
|| mtmp
->isminion
|| mtmp
->isgyp
|| (mtmp
->oldmonnm
!= monsndx(mtmp
->data
))) ) eligiblesymbio
= TRUE
;
7566 if (eligiblesymbio
) {
7568 pline("You can attempt to turn this pet into a symbiote. Warning: if it's an intelligent monster, it may fail and result in a frenzied monster instead!");
7569 getlin("Attempt to turn the pet into a symbiote? [yes/no]", buf
);
7571 if (!(strcmp (buf
, "yes")) ) {
7573 int resistrounds
= 0;
7574 if (!mindless(mtmp
->data
)) resistrounds
++;
7575 if (humanoid(mtmp
->data
)) resistrounds
++;
7576 if (mtmp
->data
== &mons
[PM_SYMBIULD
]) resistrounds
= 0;
7577 if (mtmp
->data
== &mons
[PM_SYMBIOTE_WITH_A_DATA_DELETE_ATTACK
]) resistrounds
= 0;
7578 if (resistrounds
>= 1 && resist(mtmp
, TOOL_CLASS
, 0, 0)) {
7579 mtmp
->mtame
= FALSE
;
7580 mtmp
->mpeaceful
= FALSE
;
7581 mtmp
->mfrenzied
= TRUE
;
7582 pline("Oh no! %s is frenzied!", Monnam(mtmp
));
7585 if (resistrounds
>= 2 && resist(mtmp
, TOOL_CLASS
, 0, 0)) {
7586 mtmp
->mtame
= FALSE
;
7587 mtmp
->mpeaceful
= FALSE
;
7588 mtmp
->mfrenzied
= TRUE
;
7589 pline("Oh no! %s is frenzied!", Monnam(mtmp
));
7593 if (uinsymbiosis
&& u
.usymbiote
.cursed
) {
7594 pline(FunnyHallu
? "Apparently Morgoth himself decided to curse you with some ancient hex." : "Since your current symbiote is cursed, you cannot get a new one.");
7600 if (touch_petrifies(mtmp
->data
) && (!Stone_resistance
|| (!IntStone_resistance
&& !rn2(20))) ) {
7601 if (poly_when_stoned(youmonst
.data
) && polymon(PM_STONE_GOLEM
))
7602 display_nhwindow(WIN_MESSAGE
, FALSE
);
7604 static char kbuf
[BUFSZ
];
7605 pline("Incorporating a petrifying creature is a fatal mistake.");
7606 sprintf(kbuf
, "picking the wrong symbiote");
7610 if (slime_on_touch(mtmp
->data
) && !Slimed
&& !flaming(youmonst
.data
) && !Unchanging
&& !slime_on_touch(youmonst
.data
)) {
7611 You("don't feel very well.");
7613 killer_format
= KILLED_BY_AN
;
7614 delayed_killer
= "slimed by picking the wrong symbiote";
7617 turnmonintosymbiote(mtmp
, FALSE
); /* WARNING: mtmp is removed at this point */
7624 if (Role_if(PM_CONVICT
) && is_rat(mtmp
->data
) && mtmp
->m_lev
<= 30 && mtmp
->m_lev
<= (u
.ulevel
+ 5) && !mtmp
->mpeaceful
&& !mtmp
->mtame
) {
7625 You("attempt to soothe the %s with chittering sounds.", l_monnam(mtmp
));
7626 if ((rnl(10) < 2) || ((rnd(30 - ACURR(A_CHA
))) < 4)) {
7627 (void) tamedog(mtmp
, (struct obj
*) 0, FALSE
);
7630 pline("%s unfortunately ignores your overtures.", Monnam(mtmp
));
7633 if (!mtmp
->mfrenzied
) mtmp
->mpeaceful
= 1;
7639 if (u
.ugold
>= 1000 && !mtmp
->mtame
&& mtmp
->mnum
!= quest_info(MS_NEMESIS
) && uarmh
&& uarmh
->oartifact
== ART_CLAUDIA_S_SEXY_SCENT
&& mtmp
->data
->msound
== MS_STENCH
) {
7641 if (yn("Hire this pretty lady for 1000 dollars?") == 'y') {
7643 (void) tamedog(mtmp
, (struct obj
*) 0, FALSE
);
7645 use_skill(P_SQUEAKING
, rnd(5));
7652 if (u
.smexyberries
>= 1000 && !mtmp
->mtame
&& mtmp
->mnum
!= quest_info(MS_NEMESIS
) && uarmf
&& uarmf
->oartifact
== ART_SMEXY_BERRIES
&& mtmp
->female
&& mtmp
->data
->geno
& G_UNIQ
&& (mtmp
->data
->msound
== MS_BOSS
|| mtmp
->data
->msound
== MS_FART_NORMAL
|| mtmp
->data
->msound
== MS_FART_QUIET
|| mtmp
->data
->msound
== MS_FART_LOUD
) ) {
7654 if (yn("This lady wants to join your team. Do you want to tame her?") == 'y') {
7656 (void) tamedog(mtmp
, (struct obj
*) 0, FALSE
);
7658 use_skill(P_SQUEAKING
, rnd(5));
7665 if ( (Role_if(PM_FEAT_MASTER
) || Race_if(PM_VORTEX
) || Race_if(PM_CORTEX
)) && mtmp
->m_lev
<= 30 && mtmp
->m_lev
<= (u
.ulevel
+ 7) && mtmp
->data
->mlet
== S_VORTEX
&& !mtmp
->mtame
&& mtmp
->mnum
!= quest_info(MS_NEMESIS
) && !(mtmp
->data
->geno
& G_UNIQ
) ) {
7667 if (yn("Tame the vortex?") == 'y') {
7669 pline("You attempt to tame %s.",mon_nam(mtmp
) );
7670 (void) tamedog(mtmp
, (struct obj
*) 0, FALSE
);
7675 if (Race_if(PM_KOP
) && mtmp
->m_lev
<= 30 && mtmp
->m_lev
<= (u
.ulevel
+ 10) && mtmp
->data
->mlet
== S_KOP
&& mtmp
->mpeaceful
&& !mtmp
->mtame
&& mtmp
->mnum
!= quest_info(MS_NEMESIS
) && !(mtmp
->data
->geno
& G_UNIQ
) && u
.uhunger
> 100 ) {
7677 if (yn("Recruit this officer of the law?") == 'y') {
7679 pline("You convince %s to join your cause.",mon_nam(mtmp
) );
7682 (void) tamedog(mtmp
, (struct obj
*) 0, TRUE
);
7683 use_skill(P_SQUEAKING
, 1);
7689 if (((uarmf
&& itemhasappearance(uarmf
, APP_FETISH_HEELS
))) && (mtmp
->data
->mlet
== S_NYMPH
|| mtmp
->data
->msound
== MS_FART_NORMAL
|| mtmp
->data
->msound
== MS_FART_QUIET
|| mtmp
->data
->msound
== MS_FART_LOUD
)) {
7691 if (yn("Pacify this monster?") == 'y') {
7692 pline("You attempt to pacify %s.",mon_nam(mtmp
) );
7694 if (!mtmp
->mfrenzied
&& mtmp
->m_lev
< rnd(50) && rn2(u
.ulevel
+ 2) && (rn2(3) || ((rnd(30 - ACURR(A_CHA
))) < 4)) ) {
7695 mtmp
->mpeaceful
= 1;
7702 if ((Role_if(PM_PROSTITUTE
) || Role_if(PM_KURWA
) || (uarmf
&& uarmf
->oartifact
== ART_VERY_PROSTITUTED
) || autismweaponcheck(ART_SEXCALIBUR
)) && humanoid(mtmp
->data
) ) {
7704 if (!(mtmp
->mtame
)) {
7706 if (u
.homosexual
== 0) {
7707 pline("You're discovering your sexuality...");
7708 getlin("Are you homosexual? [y/yes/no] (If you answer no, you're heterosexual.)", buf
);
7710 if (!(strcmp (buf
, "yes")) || !(strcmp (buf
, "y")) || !(strcmp (buf
, "ye")) || !(strcmp (buf
, "ys"))) u
.homosexual
= 2;
7711 else u
.homosexual
= 1;
7714 (void) doseduce(mtmp
);
7720 if (Role_if(PM_LADIESMAN
) && mtmp
->m_lev
<= 30 && mtmp
->m_lev
<= (u
.ulevel
+ 10) && !flags
.female
&& (mtmp
->data
->mlet
== S_NYMPH
|| mtmp
->data
->msound
== MS_NURSE
|| mtmp
->data
->msound
== MS_SEDUCE
|| mtmp
->data
->msound
== MS_WHORE
) && !mtmp
->mtame
&& !mtmp
->mpeaceful
&& mtmp
->mnum
!= quest_info(MS_NEMESIS
) && !mtmp
->mfrenzied
&& !(mtmp
->data
->geno
& G_UNIQ
) ) {
7722 if (yn("Seduce this pretty lady?") == 'y') {
7724 pline("You attempt to seduce %s.",mon_nam(mtmp
) );
7726 mtmp
->mpeaceful
= 1; /* they will always become at least peaceful. --Amy */
7729 /* higher level monsters are less likely to be affected --Amy */
7730 if (mtmp
->m_lev
< rnd(50) && rn2(u
.ulevel
+ 2) && (rn2(3) || ((rnd(30 - ACURR(A_CHA
))) < 4)) ) {
7731 (void) tamedog(mtmp
, (struct obj
*) 0, TRUE
);
7738 if (Race_if(PM_BABYLONIAN
) && mtmp
->mpeaceful
&& mtmp
->m_lev
<= 30 && mtmp
->m_lev
< (u
.ulevel
+ 5) && !mtmp
->mtame
&& mtmp
->data
->mlet
== S_TURRET
) {
7739 int stonescost
= 10;
7740 if (mtmp
->m_lev
>= 1) stonescost
= (mtmp
->m_lev
) * 10;
7741 pline("You can turn this turret into a symbiote by paying %d stones.", stonescost
);
7742 if (yn("Do it?") == 'y') {
7743 register struct obj
*prcstone
;
7744 prcstone
= carrying(ROCK
);
7746 if (prcstone
->quan
> stonescost
) {
7747 prcstone
->quan
-= stonescost
;
7748 prcstone
->owt
= weight(prcstone
);
7749 turnmonintosymbiote(mtmp
, FALSE
); /* WARNING: mtmp is removed at this point */
7750 } else if (prcstone
->quan
== stonescost
) {
7752 turnmonintosymbiote(mtmp
, FALSE
); /* WARNING: mtmp is removed at this point */
7754 pline("Your main stack of stones isn't big enough!");
7756 } else pline("You don't have any stones!");
7761 if (Race_if(PM_IMPERIAL
) && mtmp
->mnum
!= quest_info(MS_NEMESIS
) && !(mtmp
->data
->geno
& G_UNIQ
) && !mtmp
->mpeaceful
&&
7762 !mtmp
->mtame
&& u
.uhunger
> 100) {
7764 if (yn("Use the Emperor's Voice?") == 'y') {
7766 verbalize("%s", !rn2(3) ? "By the power of His Holiness Titus Medes, I beseech thee - stop thine combat actions!" : !rn2(2) ? "Long live Martin Septim! Thou shall surrender lest I smite thee!" : "The Emperor will spare thy life if thou stoppest fighting!");
7768 use_skill(P_SQUEAKING
, 1);
7770 /* higher level monsters are less likely to be affected --Amy */
7771 if (!mtmp
->mfrenzied
&& mtmp
->m_lev
< rnd(50) && rn2(u
.ulevel
+ 2) && (rn2(3) || ((rnd(30 - ACURR(A_CHA
))) < 4)) ) {
7772 mtmp
->mpeaceful
= 1;
7774 pline("%s is convinced by your sermon, and no longer views you as an enemy!",l_monnam(mtmp
));
7782 if (uarmg
&& uarmg
->oartifact
== ART_VULTUREHANDLER
&& mtmp
->data
->mlet
== S_BAT
&& !is_bat(mtmp
->data
) && !mtmp
->mpeaceful
&& !mtmp
->mfrenzied
&& !mtmp
->mtame
) {
7783 if (yn("Try to pacify the bird?") == 'y') {
7785 pline("You try to calm %s.", mon_nam(mtmp
) );
7788 if (!resist(mtmp
, RING_CLASS
, 0, NOTELL
)) {
7789 mtmp
->mpeaceful
= TRUE
;
7790 pline("%s seems calmer.", Monnam(mtmp
));
7800 if (Race_if(PM_MUMMY
) && mtmp
->mnum
!= quest_info(MS_NEMESIS
) && mtmp
->m_lev
<= 30 && mtmp
->m_lev
<= (u
.ulevel
+ 7) && !(mtmp
->data
->geno
& G_UNIQ
) &&
7801 !mtmp
->mtame
&& (is_undead(mtmp
->data
) || mtmp
->egotype_undead
) && u
.uhunger
> 500) {
7803 if (yn("Try to tame this undead monster?") == 'y') {
7805 pline("You frantically chant at %s.",mon_nam(mtmp
) );
7807 use_skill(P_SQUEAKING
, rnd(5));
7809 /* higher level monsters are less likely to be affected --Amy */
7810 if (mtmp
->m_lev
< rnd(100) && rn2(u
.ulevel
+ 2) && (rn2(3) || ((rnd(30 - ACURR(A_CHA
))) < 4)) ) {
7812 (void) tamedog(mtmp
, (struct obj
*) 0, FALSE
);
7820 return domonnoise(mtmp
);
7825 extern void play_usersound(const char*, int);
7827 typedef struct audio_mapping_rec
{
7828 #ifdef USER_SOUNDS_REGEX
7829 struct re_pattern_buffer regex
;
7835 struct audio_mapping_rec
*next
;
7838 static audio_mapping
*soundmap
= 0;
7840 char* sounddir
= ".";
7842 /* adds a sound file mapping, returns 0 on failure, 1 on success */
7844 add_sound_mapping(mapping
)
7845 const char *mapping
;
7852 if (sscanf(mapping
, "MESG \"%255[^\"]\"%*[\t ]\"%255[^\"]\" %d",
7853 text
, filename
, &volume
) == 3) {
7855 audio_mapping
*new_map
;
7857 if (strlen(sounddir
) + strlen(filename
) > 254) {
7858 raw_print("sound file name too long");
7861 sprintf(filespec
, "%s/%s", sounddir
, filename
);
7863 if (can_read_file(filespec
)) {
7864 new_map
= (audio_mapping
*)alloc(sizeof(audio_mapping
));
7865 #ifdef USER_SOUNDS_REGEX
7866 new_map
->regex
.translate
= 0;
7867 new_map
->regex
.fastmap
= 0;
7868 new_map
->regex
.buffer
= 0;
7869 new_map
->regex
.allocated
= 0;
7870 new_map
->regex
.regs_allocated
= REGS_FIXED
;
7872 new_map
->pattern
= (char *)alloc(strlen(text
) + 1);
7873 strcpy(new_map
->pattern
, text
);
7875 new_map
->filename
= strdup(filespec
);
7876 new_map
->volume
= volume
;
7877 new_map
->next
= soundmap
;
7879 #ifdef USER_SOUNDS_REGEX
7880 err
= re_compile_pattern(text
, strlen(text
), &new_map
->regex
);
7886 free(new_map
->filename
);
7893 sprintf(text
, "cannot read %.243s", filespec
);
7898 raw_print("syntax error in SOUND");
7906 play_sound_for_message(msg
)
7909 audio_mapping
* cursor
= soundmap
;
7912 #ifdef USER_SOUNDS_REGEX
7913 if (re_search(&cursor
->regex
, msg
, strlen(msg
), 0, 9999, 0) >= 0) {
7915 if (pmatch(cursor
->pattern
, msg
)) {
7917 play_usersound(cursor
->filename
, cursor
->volume
);
7919 cursor
= cursor
->next
;
7923 #endif /* USER_SOUNDS */
7928 if (ABASE(A_CHA
) < 10) {
7929 int chachance
= 100;
7930 switch (ABASE(A_CHA
)) {
7931 case 1: chachance
= 33; break;
7932 case 2: chachance
= 66; break;
7933 case 3: chachance
= 100; break;
7934 case 4: chachance
= 150; break;
7935 case 5: chachance
= 200; break;
7936 case 6: chachance
= 250; break;
7937 case 7: chachance
= 300; break;
7938 case 8: chachance
= 350; break;
7939 case 9: chachance
= 400; break;
7940 default: chachance
= 500; break;
7942 if (!rn2(chachance
)) (void) adjattrib(A_CHA
, 1, FALSE
, TRUE
);
7950 struct monst
*mtmp3
;
7953 if (!PlayerCannotUseSkills
) {
7954 switch (P_SKILL(P_SQUEAKING
)) {
7955 case P_BASIC
: cost
*= 9; cost
/= 10; break;
7956 case P_SKILLED
: cost
*= 8; cost
/= 10; break;
7957 case P_EXPERT
: cost
*= 7; cost
/= 10; break;
7958 case P_MASTER
: cost
*= 6; cost
/= 10; break;
7959 case P_GRAND_MASTER
: cost
*= 5; cost
/= 10; break;
7960 case P_SUPREME_MASTER
: cost
*= 4; cost
/= 10; break;
7965 You("lack the energy to use your conversion sermon! Need at least %d mana!", cost
);
7966 if (flags
.moreforced
&& !MessagesSuppressed
) display_nhwindow(WIN_MESSAGE
, TRUE
); /* --More-- */
7970 use_skill(P_SQUEAKING
, 2);
7973 for (k
= -3; k
<= 3; k
++) for(l
= -3; l
<= 3; l
++) {
7974 if (!isok(u
.ux
+ k
, u
.uy
+ l
)) continue;
7975 if ( ((mtmp3
= m_at(u
.ux
+ k
, u
.uy
+ l
)) != 0) && !is_infrastructure_monster(mtmp3
) && mtmp3
->mtame
== 0 && mtmp3
->mpeaceful
== 0 && mtmp3
->mfrenzied
== 0 && mtmp3
->isminion
== 0 && mtmp3
->isgyp
== 0
7976 && mtmp3
->mnum
!= quest_info(MS_NEMESIS
) && !(mtmp3
->data
->geno
& G_UNIQ
) )
7979 if ( (!rn2(10) || mtmp3
->data
->msound
== MS_CONVERT
|| mtmp3
->data
->msound
== MS_HCALIEN
) && !resist(mtmp3
, RING_CLASS
, 0, NOTELL
)) {
7980 pline("%s is converted.", mon_nam(mtmp3
));
7981 mtmp3
->mpeaceful
= 1;
7984 } /* monster is catchable loop */
7994 if (!PlayerCannotUseSkills
) {
7995 switch (P_SKILL(P_SQUEAKING
)) {
7996 case P_BASIC
: cost
*= 9; cost
/= 10; break;
7997 case P_SKILLED
: cost
*= 8; cost
/= 10; break;
7998 case P_EXPERT
: cost
*= 7; cost
/= 10; break;
7999 case P_MASTER
: cost
*= 6; cost
/= 10; break;
8000 case P_GRAND_MASTER
: cost
*= 5; cost
/= 10; break;
8001 case P_SUPREME_MASTER
: cost
*= 4; cost
/= 10; break;
8006 You("lack the energy to chant a wouwou taunt! Need at least %d mana!", cost
);
8007 if (flags
.moreforced
&& !MessagesSuppressed
) display_nhwindow(WIN_MESSAGE
, TRUE
); /* --More-- */
8011 use_skill(P_SQUEAKING
, 4);
8014 register struct monst
*mtmp
;
8016 for(mtmp
= fmon
; mtmp
; mtmp
= mtmp
->nmon
) {
8017 if (DEADMONSTER(mtmp
)) continue;
8018 if (mtmp
->mpeaceful
|| mtmp
->mfrenzied
|| mtmp
->mtame
) continue;
8019 if(distu(mtmp
->mx
, mtmp
->my
) < 65) {
8020 if (!resist(mtmp
, SCROLL_CLASS
, 0, NOTELL
)) {
8022 if (mtmp
->data
->msound
== MS_CONVERT
|| mtmp
->data
->msound
== MS_HCALIEN
) {
8023 pline("%s is pacified.", mon_nam(mtmp
));
8024 mtmp
->mpeaceful
= 1;
8026 monflee(mtmp
, rnd(10), FALSE
, FALSE
);
8027 pline("%s turns to flee!", Monnam(mtmp
));
8041 if (!PlayerCannotUseSkills
) {
8042 switch (P_SKILL(P_SQUEAKING
)) {
8043 case P_BASIC
: cost
*= 9; cost
/= 10; break;
8044 case P_SKILLED
: cost
*= 8; cost
/= 10; break;
8045 case P_EXPERT
: cost
*= 7; cost
/= 10; break;
8046 case P_MASTER
: cost
*= 6; cost
/= 10; break;
8047 case P_GRAND_MASTER
: cost
*= 5; cost
/= 10; break;
8048 case P_SUPREME_MASTER
: cost
*= 4; cost
/= 10; break;
8053 You("lack the energy to use your sexy talk ability! Need at least %d mana!", cost
);
8054 if (flags
.moreforced
&& !MessagesSuppressed
) display_nhwindow(WIN_MESSAGE
, TRUE
); /* --More-- */
8058 use_skill(P_SQUEAKING
, 4);
8060 You("make very female noises!");
8062 register struct monst
*nexusmon
, *nextmon
;
8063 for(nexusmon
= fmon
; nexusmon
; nexusmon
= nextmon
) {
8064 nextmon
= nexusmon
->nmon
; /* trap might kill mon */
8065 if (DEADMONSTER(nexusmon
)) continue;
8066 if (nexusmon
->mpeaceful
|| nexusmon
->mtame
) continue;
8067 if (resist(nexusmon
, SPBOOK_CLASS
, 0, NOTELL
)) continue;
8068 if (resist(nexusmon
, SPBOOK_CLASS
, 0, NOTELL
)) continue;
8070 if (distu(nexusmon
->mx
, nexusmon
->my
) > rnd(50)) continue;
8072 /* doesn't anger peaceful ones - not a bug --Amy */
8073 pline("%s cannot resist!", Monnam(nexusmon
));
8074 monflee(nexusmon
, rnd(20), FALSE
, TRUE
);
8075 if (nexusmon
->mblinded
< 100) nexusmon
->mblinded
+= 20;
8076 nexusmon
->mcansee
= 0;
8077 nexusmon
->mstun
= TRUE
;
8078 nexusmon
->mconf
= TRUE
;
8080 if (!resists_drain(nexusmon
) && !resist(nexusmon
, SPBOOK_CLASS
, 0, NOTELL
)) {
8081 pline("%s shudders in dread!", Monnam(nexusmon
));
8082 nexusmon
->mhpmax
-= rnd(10);
8083 if (nexusmon
->mhpmax
< 1) nexusmon
->mhpmax
= 1;
8084 if (nexusmon
->mhp
> nexusmon
->mhpmax
) nexusmon
->mhp
= nexusmon
->mhpmax
;
8085 nexusmon
->m_enmax
-= rnd(10);
8086 if (nexusmon
->m_enmax
< 0) nexusmon
->m_enmax
= 0;
8087 if (nexusmon
->m_en
> nexusmon
->m_enmax
) nexusmon
->m_en
= nexusmon
->m_enmax
;
8088 if (nexusmon
->m_lev
> 0) nexusmon
->m_lev
--;
8089 if (nexusmon
->m_lev
> 0 && !rn2(4)) nexusmon
->m_lev
--;
8095 if (practicantterror
) {
8096 pline("%s rings out: 'Your irritating noises are disturbing the other practicants, so here's a warning for you to not do that again and I also receive 50 zorkmids from you.'", noroelaname());
8097 fineforpracticant(50, 0, 0);
8103 playersupermantaunt()
8107 if (!PlayerCannotUseSkills
) {
8108 switch (P_SKILL(P_SQUEAKING
)) {
8109 case P_BASIC
: cost
*= 9; cost
/= 10; break;
8110 case P_SKILLED
: cost
*= 8; cost
/= 10; break;
8111 case P_EXPERT
: cost
*= 7; cost
/= 10; break;
8112 case P_MASTER
: cost
*= 6; cost
/= 10; break;
8113 case P_GRAND_MASTER
: cost
*= 5; cost
/= 10; break;
8114 case P_SUPREME_MASTER
: cost
*= 4; cost
/= 10; break;
8119 You("lack the energy to make a superman taunt! Need at least %d mana!", cost
);
8120 if (flags
.moreforced
&& !MessagesSuppressed
) display_nhwindow(WIN_MESSAGE
, TRUE
); /* --More-- */
8124 use_skill(P_SQUEAKING
, 10);
8128 if (practicantterror
) {
8129 pline("%s booms: 'Stop screaming like a mad%s. You pay 500 zorkmids now, and better don't scare the other practicants like that again, maggot!'", noroelaname(), flags
.female
? "woman" : "man");
8130 fineforpracticant(500, 0, 0);
8141 if (!PlayerCannotUseSkills
) {
8142 switch (P_SKILL(P_SQUEAKING
)) {
8143 case P_BASIC
: cost
*= 9; cost
/= 10; break;
8144 case P_SKILLED
: cost
*= 8; cost
/= 10; break;
8145 case P_EXPERT
: cost
*= 7; cost
/= 10; break;
8146 case P_MASTER
: cost
*= 6; cost
/= 10; break;
8147 case P_GRAND_MASTER
: cost
*= 5; cost
/= 10; break;
8148 case P_SUPREME_MASTER
: cost
*= 4; cost
/= 10; break;
8153 You("lack the energy to rattle your bones! Need at least %d mana!", cost
);
8154 if (flags
.moreforced
&& !MessagesSuppressed
) display_nhwindow(WIN_MESSAGE
, TRUE
); /* --More-- */
8158 use_skill(P_SQUEAKING
, 1);
8159 You(FunnyHallu
? "play the xylophone." : "rattle noisily.");
8162 register struct monst
*nexusmon
, *nextmon
;
8163 for(nexusmon
= fmon
; nexusmon
; nexusmon
= nextmon
) {
8164 nextmon
= nexusmon
->nmon
; /* trap might kill mon */
8165 if (DEADMONSTER(nexusmon
)) continue;
8166 if (!nexusmon
->mcanmove
) continue;
8167 if (rn2(10)) continue; /* low chance of success --Amy */
8168 if (resist(nexusmon
, SPBOOK_CLASS
, 0, NOTELL
)) continue;
8170 if (distu(nexusmon
->mx
, nexusmon
->my
) > rnd(26)) continue;
8172 wakeup(nexusmon
); /* can anger peaceful monsters --Amy */
8173 nexusmon
->mcanmove
= 0;
8174 nexusmon
->mfrozen
= 2;
8175 nexusmon
->mstrategy
&= ~STRAT_WAITFORU
;
8176 pline("%s freezes for a moment.", Monnam(nexusmon
));
8181 if (practicantterror
) {
8182 pline("%s rings out: 'Your irritating noises are disturbing the other practicants, so here's a warning for you to not do that again and I also receive 50 zorkmids from you.'", noroelaname());
8183 if (FunnyHallu
) pline("%s adds: 'Better hope I won't confiscate your xylophone. This is a chemical laboratory, not a music hall.'", noroelaname());
8184 fineforpracticant(50, 0, 0);
8192 static const char *conversion_msgs
[] = {
8193 "Kafir! Yuece Tanri sizi sevmez, ve sonra doenuestuermek yoksa cezalandirilacaktir!",
8194 "Kafir, Allah'a doenuestuermek ya da oel!",
8195 "Kafir, kutsal Tanri bu boelgede emanetler en kadirdir. Ve bunu degistirmek olmaz!",
8196 "Kafir, sizin yollariniz sapkin vardir! Islam sizi doenuestuermek zamanidir.",
8197 "Kafir, sen domuz pirzola yeme suc islemis! Allah sana cok kizgin!",
8198 "Allahu Akbar! Allahu Akbar!",
8199 "Kafir, Allah bueyuektuer ve seni yok eder!",
8200 "Kafir! Kac kere zaten gavur dedin? Sen inanc degistirmek icin ya da Tanri ilahi ceza kesin olacak var!",
8201 "Allah senin gibi kafirler sevmez ve cok zalim bir sekilde sizi cezalandiracaktir!",
8202 "Bizim kutsal cami kafirler tarafindan yerle bir olma tehlikesiyle karsi karsiya! Bueyuek Tanri bize yardim ve ilahi asker goendermesi gerekir!",
8203 "Kafir, Allah bueyuek ve gueclue oldugunu! Ona inanmaya baslarlar yoksa, aci olacak!",
8204 "Allah onlari oelduererek ve kutsal ateste kendi cesetlerini yakarak buetuen kafirleri cezalandiracaktir.",
8205 "Kafir, Allah beni tuvalete bok sesleri ueretmek icin izin! Eger o saygi yoksa sonsuza aci olacaktir!",
8206 "Tek bir gercek dindir ve Tuerkiye cumhurbaskani, onu buetuen duenyaya yayacak bilge bir adamdir! Allah bueyuek!",
8207 "Kafir! Kutsal topraklarda hicbir sey kaybetmedin! ABD'ye ya da nereye giderseniz gidin!",
8208 "Inanilmaz olan, senin evin benim tarafimdan yere serilecek.",
8209 "Inanilmaz, nihayet askerlerini uelkemden mi cekiyorsun yoksa sinirlenmek zorunda miyim?",
8210 "Inanmasiz, silahim seni vurmak uezere! Sana daha iyi bakarim!",
8211 "Haha, sen inandin, saldirmami kaldiramazsin!",
8212 "Inanli olmayan, sana simdi pusu kurup seni uyariyorum. Yani beni yine de durdurma sansin yok.",
8213 "Kafir! Hemen buradan cik, buguen camiye gitmem ve dua etmeliyim!",
8214 "Kafir! seni ve iman eden askerlerinizi yok edecegiz!",
8215 "Inanilmazsin, benden uzak dur yoksa bir talihsizlik olur!",
8216 "Inkar edenler sadece korkaklar, asla kendinizi adil bir doevuese sokmazsiniz! Simdi sikici el bombalari kullanmaliyim!",
8217 "Gercekten sadece buguen sinirlenmek istiyor musun, inandin mi? Sanirim simdi agir topcuyla gelecegim.",
8218 "Inanilmaz olan, Islam'in tek gercek din oldugunu itiraf etme zamani.",
8219 "Inancsiz, pes et! Islam'in kutsal askerleri simdi sehrinizi istila edecek!",
8220 "Inanilmaz, yavas yavas oelmesi gerektigini duesuenmueyor musun? Vuecudun yine de degersiz!",
8221 "Bu bir hacli seferi olacak mi, inandin mi? Kutsal Allah'in gazabini zorla cagirir misin?",
8222 "Kafirlerin sizin talihsizlikleriniz icin yiyeceksiniz ve Allah sahsen sizi atesin uezerinde bas asagi kizdiracak!",
8223 "Lanet olasi inanmayan koepekler, kutsal topraklardan disari cik! Hepiniz inkar ediyorsunuz ve Allah sizi sevmiyor, duyuyor musunuz?",
8224 "Tamam, inandin. Yeterli olan yeter! Herkese, kafirleri hemen yok edin!",
8225 "Ben cihad, kutsal savas icin cagiriyorum! Kafirler, oelueme savasiyoruz!",
8226 "Hepinizi inatci koepekler yapacagiz!",
8227 "Inanilmaz, ama simdi yeterli! Simdi Allah'in gazabi sana vuracak!",
8228 "Inkar edenler iki seceneginiz var. Hemen Islam'a itiraf edin ya da yueksek savas botlarim ciddi yaralar acacak.",
8229 "Oyuncu bir guevensiz! Onu Islam'a doenuestuerme zamani.",
8230 "Inkar edenler yenilir. Derhal Islam'in tek gercek din oldugunu ya da kutsal Allah'in gazabini hissettirdigini itiraf edin!",
8231 "Oyuncu ve adamlari... pah. Buetuen inanmayanlar. Sadece askerlerim kimin dine inanmalari gerektigini biliyor!",
8232 "Hahahaha Hahahaha! Tuerk savas botlari bedeninizi yok etti, siz kafirler!",
8233 "Nihayet uelkemi terk ediyor musun, inanmiyor musun?",
8234 "Kafir! Ha ha! Simdi ya Islam'a ya da oeluersuen.",
8235 "Kafirler, senin kokulu fabrikalarin simdi yikilacak!",
8236 "Inanli olmayan, Allah size uecuencueluek eder ve sonra sizi tehlikede yakar.",
8237 "Kafir! Simdi kac kere seni guevensiz aradim?",
8238 "Sonunda inanclarinizi degistirmelisiniz, siz kafirler, aksi takdirde bir firtina olacak!",
8239 "Gizli silahimi nerede sakladigimi hatirladim! Hehehe, simdi size goesteriyorum, siz kafirler.",
8240 "Kutsal cami kafirlerin tehdidi altindadir! Allah, bize yardim et ve onlari yuvarlamalarini engelle!",
8241 "Tuem erkekler ve kadinlar saldirmak icin! Kafirleri derhal uzaklastirin!",
8242 "Buetuen kafirlere goere kutsal Islam, bu topraklarin kalintilarinin cogunda hakimdir.",
8243 "Kafirler buguen emanetlerimizi tekrar yakalamayacaklar!",
8244 "Yalanci medyanin fikri yok! Islam tek gercek din ve kafirler bunu degistirmeyecek!",
8245 "Inkar edenler beni kandirdi, ama sizi Islam'in tek gercek din olduguna inandiricam.",
8246 "Aaaaaaaaaaaah! Hayir! Kafirlerimiz camimizi gercekten yok etti! Simdi kim Islam'i yaymali?",
8247 "Oh hayir, simdi vazgecebilirim, sadece bu kafirler yuezuenden...",
8248 "Inkar edenler, engizisyonumdan kacamaz, itiraf edemez veya oelebilirler.",
8249 "Allah seni yok edecek, inandin!",
8250 "Neden oyuna daha fazla inanmayan asker getiriyorsun?",
8251 "Siz kafirsiniz, dininiz bos ve gecersizdir!",
8252 "Kafir, bas oertuesue baskinin bir sembolue degil! Onu kucaklamali ve bir tane de giymelisin yoksa Allah seni cezalandiracak!",
8253 "Kafir, bir kadinin tuem kafasini kamuya goestermemesi gerektigini asla anlamayacaksiniz. Bueyuek Allah, bir bas oertuesue her zaman giyilmesi gerektigini oegretir.",
8254 "Kafirlerin beni tuvalete kadar takip etmelerine izin vermeyecegim ve kicimin uerettigi erotik kirma seslerini dinleyemem. Yine de yaparsan, doevues botu topuklari bacaklarini kemige cizecek ve seni oelduerecek.",
8255 "Benim siyah bayan sandaletler senin gibi bir kafir tarafindan asla hasar goermeyecek!",
8256 "Senin yayla botlarimin altindaki kafirleri ezecegim!",
8257 "Bir kafirle evlenmeyecegim, Allah'a iman eden birisini sececegim ve ic camasirlarimi, coraplarimi ve sandaletlerimle savasirken disi catlak seslerimi dinlemesine izin vererek onu memnun edecegim.",
8258 "Cogu zaman tuvalette saatlerce catlak sesler ueretiyorum, ama sadece Allah'in inanclilari onlari dinleyebilir. Gizlice iceri girerlerse kafirler oelecek.",
8259 "Hic kafir bir kadini cok guezel bulabilir! Her zaman kafa oertueleri giymeliyiz!",
8260 "Allah kafa bezinin bize oezguerluek verdigini soeyler, cuenkue saf olmayan kafirlerin pis bakislarini uzak tutar!",
8261 "Ben seksi yueksek topuklu botlar giyiyorum cuenkue ben bir harlotum, ama ben sadece aydinlanmis olanlar icin calisiyorum, bu yuezden de bir bas kumasina ihtiyacim var! Hic kafir beni beceremez!",
8262 "Eger herhangi bir aldatmaca kafamin uestuenue cikarmaya calisirsa, onu oelduermek icin erkekleri ise alirim!",
8263 "Bueyuek Allah, kadinlara basoertuesue takmayan firmalarin ateste oelecegini soeylueyor!",
8264 "Tabii ki kuecuek okul kizlari da bir bas oertuesue giymelidir! Cok fazla kendilerini goesterirlerse, bazi iyi olmayan cocuklar da onlara bakar ve Allah her ne pahasina olursa olsun bunu engellemelidir!",
8265 "Kendimizi kafir toplumlara entegre etmek zorunda degiliz, onlari Allah adina sollamak zorundayiz! Cuenkue bu heretiklerin Islam'a doenuesmesi gerekiyor!",
8266 "Hic kimse kirli domuz eti yiyemez! Allah onu dizanteri ile yemeye cueret eden herkesi cezalandiracak.",
8267 "Bir kafir adamin Mueslueman bir bayanla konusmasi tamamen duesuenuelemez. Bu, kafa bezine sahip olmamizin nedenlerinden biri, cuenkue Yuece Allah, bizi zarardan koruyor.",
8268 "Biz, buezguelue ailelerin barok kalelerde yer bulduklari icin bez giyiyoruz, cuenkue kafir aileler ilk geldiler bile beklemek zorundalar. Bueyuek Allah, degersiz bir Alman azinligi bekler!",
8269 "Biz bez harbots basimiza yueksek topuklularimizla asyali tekmeyi oegrendik, bu sayede kutsal Allah adina kafirlerin ezmelerini ve parcalarini kirabiliriz.",
8270 "Cok fazla kafir adam var ve bu yuezden kafamizi hicbir zaman halka acik goesteremiyoruz. Ancak, sadece kadinlara yoenelik spor merkezine girersek, bas bezini cikaririz cuenkue Allah, kadinlarin asla tecavuez etmeyecegini bilir. Lezbiyenlik yoktur.",
8271 "Allah, basoertuesue takmayan kafir Avrupali kadinlardan nefret eder. Muesluemanlarin ayri bir banyosunun yapilmasini istiyoruz cuenkue bizi o boktan fahiselerin tuvalete gitmesini istemiyoruz.",
8272 "Kafamizi takmiyorken bizi goeren kafir adama vay canina. Yuece Allah, ona asiri oenyargi ile yaklasir.",
8273 "Bazen inatci erkekleri kandirmak icin paragraf botlari giyerim. Benimle sevisebileceklerini duesuenuerlerse, kiralik suikastcilar onu Allah'in adiyla sessizce kaldiracaklar.",
8274 "Domuz cocuk bahcesinde servis edilirse yanlistir! Buetuen bu kafir egitmenler yakinda Allah'a iman eden insanlarla degistirilecek.",
8275 "Evet, kafirler bize yuezuemuezue oerten kiyafetler vermedikce yuezme ya da spora katilmak zorunda olmadigimiz dogrudur. Allah bize, inkarcilarin yaptigi kurallarin bizim kurallarimiz olmadigini ve takip edilmesine gerek olmadigini oegretir.",
8276 "Aptal Alman uelkesi kendisini yok edecek ve bu kafirleri yavasca kaldirarak Allah'a yardim edecegiz. Daha sonra Berlin, Yeni Istanbul'a yeniden adlandirilacaktir.",
8277 "Neden kizlari kizdirmaya calisiyorsun? Sizi durdurmak icin herkesi basoertuesue takmaya zorlayacagiz!",
8278 "Ne, sen kafir, cinsel popoyu ihale popomun tuvalete yaptigi kadin sesine cekti mi? Delirmis olmalisin!",
8279 "Ne, sen kafir kafami sadece beni kizdirmak mi istiyorsun? Allah, senin icin oeluem cezasi olacagini soeyler!",
8280 "Sen kafir doenuestueruelecek, ve eger bir kadin iseniz de bir kafa bezi giymek zorunda kalacaksiniz!",
8281 "Bueyuek Allah, bu kadar genisletilmis egrinin, en iyi varyant oldugunu kabul etmeyen herkesi cezalandiracak! Eger sporkun daha iyi oldugunu duesuenueyorsaniz, sen lanet bir kafirsin ve diri diri diri yakilacaksin!",
8282 "Bu oyunun aptal bir versiyonunu oynuyorsun, seni kafir! Yuece Allah, benim icin bir oyuncu vur!",
8283 "Kuefuer edersiniz, Isvecli adamin yapmasi gereken varyanti oynamalisiniz, cuenkue canavarlar soykirimin yazilarini okumalarina izin vererek cok daha dengeli!",
8284 "Oynayabilecegin cok daha iyi bir cesit var, zindanlar ve ejderhalar hack, ama sen eski heretik bu boku oynamak zorunda. Allah size yildirim carpacaktir.",
8285 "Neden hala salak oyun oynuyorsun? Doert kana gecin ya da cok gueclue Allah sizi parcalara ayirir!",
8286 "Allah, varyantini yuezen goezbebeklerini calmayan her kafirin kisisel bilgisayarini kizdirir.",
8287 "Onun varyanti seytan degildir, sen kafir! Simdi oyna ya da bu senin sonun!",
8288 "Bana 2000 numara altin parca, yoksa oyunun coekmesine sebep olacaksin, seni kafir!",
8289 "Sen seytani hain! Bu ne cueret? Intikam seni guevende, kafir!",
8290 "Hicbir kafirin direnemeyecegi cok kadin tuvalet sesleri ueretebilirim.",
8291 "Tuvalete yapabilecegim kadin sesler basmak ve sicramak. Korktun mu, sen kafir misin?",
8292 "Ne, beni cekici buldugunu soeylueyorsun? Bu olamaz. Derhal bas borumu tekrar giyecegim.",
8293 "Sert cekirdekli uzaylilar uzayli degil! Onlarin bedenlerini kafir erkek bakislarindan saklamak icin pecelerini giyiyorlar!",
8294 "Kadinlara karsi kadinlari kuran feminist hakli, erkek kafirleri her zaman masum kadinlara bakiyor! Koruma icin basoertuesue ve pece giymeliyiz!",
8295 "Ne, ben guezel oldugumu mu soeylueyorsun? Bu tahammuel edilemez. Hicbir kafir, bir Islam kadinini guezel olarak algilayamaz! Cildimi suya batiracak ve basoertuesue ve tam oertue giyecegim!",
8296 "Benim guezel savas botlari bacaklarinizi tam uzunlukta kesecek ve oelueme kadar kanayacak, kafir cehennemden ortaya cikmayacak!",
8297 "Bana ne diyorsun seytan kadin? Ben oeyle degilim! Ben Islam'in bueyuek sorusturmacisiyim ve kutsal Allah adina seni kafir edecegim!",
8298 "Plato kiz botlarimin uezerinden gecmemelisin! Senin gibi bir kafir asla evlenmeyecegi icin adanmislikla diz coekmen gerekiyor!",
8299 "Benim gri spor ayakkabim hicbir sekilde oezel degil, seksi bulursaniz sizi havaya ucurur. Beni cekici buldugum kafirler bas barimla bogulurlar.",
8300 "Ben farkli degilim cuenkue bir bas oertuesue giyiyorum! Beni ayrimcilik yapmamalisin, kafir demek istiyorsun!",
8301 "Siz kafirler bizi kabul etmeli ve dininize uygun olmali! Kapsayici olmak istiyorsaniz, oegretmenlerin ve polis kadinlarinin ve digerlerinin halka acik bir bez kullanmasina izin veriyorsunuz!",
8302 "Beni 'basoertuesue kiz' sluruna duesuerme, seni lanet olasi kafir! Bu benim kimligimin bir parcasi ve bunu kabullenmek icin kanunla zorlanacaksin!",
8303 "Kafa bezi bize fransiz sigaralari gibi oezguerluek veriyor! Siz kafirler asla anlayamayacaksiniz cuenkue Tanri'ya inanmiyorsunuz!",
8304 "Yeme tabagim sacmalik degil! Sen pis kafir sadece domuz eti kirli oldugunu ve hic kimsenin tarafindan yenilmeyecegini anlamiyorum! Cuenkue yaparsan kansersin!",
8305 "Imam, kafir kueltueruenuen hicbir seyin degersiz oldugunu soeylueyor. Bu nedenle aptal kurallariniza uymak zorunda degiliz ve okul da ise yaramiyor, cuenkue birkac yil icinde hepiniz asimile olacaksiniz.",
8306 "Yuezmeye katilmak zorunda degilim! Kafir guecuen beni zorlamak istiyor ama kutsal Islam her zaman bir bas oertuesue giymem gerektigini soeylueyor ve bu da aptal yuezme derslerine uymuyor! Politikacilarina bogma tilsimindan bogulmalarini soeyle!",
8307 "Acil bir durum varsa, oence Allah'ta muesluemanlar ve inananlar kurtarilmalidir! Kafirler daha bueyuek iyilik icin kurban edilebilir!",
8308 "Inanilmaz lanet olasi guezel Islam'in duenyayi yoenetecegini anlamazsin.",
8309 "Ne, Almanya'nin alternatifi mueslueman avlamak mi istiyor? Yuece Allah adina, bu kafirleri dogrudan cehenneme goenderecek, cocuklarini oelduerecek ve kadinlarini koele tueccarlarina satacagiz.",
8310 "Kafa bezi sadece bir bez parcasi degildir! Onu takariz cuenkue bizi Allah'in kutsal mueminleri olarak tanimlar! Sadece kafirlerin anlamadigi icin hicbir anlam ifade etmez!",
8311 "Bir Yahudi dini semboluenue giydigi icin saldiriya ugrarsa, kendi hatasidir. Biz mueslueman bir kafa bezi giymek icin bize saldiran kimseyi asla kabul etmeyecegiz, cuenkue biz kafir topuklularimizla bir asyali tekmelemizi dogrudan kafir somunlarina yerlestirecegiz.",
8312 "Siz kafirsiniz, Allah'a doenmelisiniz cuenkue o zaman cennette doksan dokuz genc kadin var! Eger yapmazsan, cehennemin kirmizi seytanlari acimasizca iskence edecek!",
8313 "Halkimizin kutsal topraklara seyahat etmesine izin verilmemesi bir hakaret! Bueyuek Tanri, bu karardan sorumlu olan buetuen kafirleri cezalandirir!",
8314 "Kongremizdeki kadinlar suclu degil! Ancak baskan kirli bir kuefuer ve Tanri sahsen ona yildirim carpacak!",
8315 "Bir bildirimin ardindan geri doendueguemuez icin neden uezuelmemiz gerektigini duesuenueyorsunuz? Siz heretik, istediginizi aldiniz, cuenkue yuece Tanrimiz affetmez!",
8316 "Yasli ihtiyar bizim icadi olan doener kebabi yiyorsun, ama dinimiz hakkinda yalan soeylueyorsun! Tanrimiz seni mahvedecek!",
8317 "Ceviri makinesi kirli kafirler tarafindan isletiliyor, cuenkue tanri adina varsayilan ceviriyi degistirdiler!",
8318 "Benim konusmalarimi zaten anlamiyorsunuz, bu yuezden irkinizin tamamen ortadan kaldirilmasi icin cagri yapabilirim, sizi allahimiza inanmayan insafsizsiniz.",
8319 "Temizlik Allah'in guenue buetuen kafirler cezalandirmak ve ilk bu sapkin kadin olacak!",
8320 "Sen inanmayan basoertueguemue indiremezsin!",
8321 "Savas botlarim kaninizi kutsal Allah'a feda edecek, sizi kafir!",
8322 "Kafirler gelmeden tuvalete gitmem gerekiyor!",
8323 "Belki kafirleri erojen seslerle cezbedebilirim!",
8324 "Kafirlere arkadan saldirdigimizda Allah razi olur.",
8325 "Allah'in gazabindan hicbir kafir kacamaz.",
8326 "Allah'imiz, tuem kafirleri yok edecek.",
8327 "Geri cekilmek! Kafirlerin bizi yakalamasina izin vermeyin!",
8328 "Basoertueguemue caldin! Bunun icin bu kafir doerde boeluenmeli!",
8329 "Eger benim gibi bir Muesluemana kuefuer edersen, Allah onu yildirimla oeldueruer!",
8330 "Kutsal Allah'a kurban olacaginiz sunak hazir!",
8331 "Hicbir kafir Islam'i durduramaz!",
8332 "Yuece Allah, yardim et ve beni kafirlerden koru!",
8333 "Kafirler korku icinde titreyip Allah'in kutsal gazabina huekmedilsin.",
8334 "Basoertuesue takmayan tuem inancsiz kadinlar din degistirilmelidir!",
8335 "Evlilik oencesi cinsel iliski, yalnizca inanmayanlarin isledigi oeluemcuel bir guenahtir! Bunun icin Allah onlari oelduerecek!",
8336 "Allah onlara oeluem emrini verdigi icin, oegrencilerimizin geleneksel kiyafetlerini giymelerine izin vermedikleri icin buetuen kafirler oelecekler.",
8337 "Bizim kanunumuz Allah'in kanunudur! Hicbir duenyevi insanin, oezellikle de sapkinlarin neyin dogru oldugu konusunda soez hakki yoktur!",
8338 "Biz bu uelkeye aitiz ve aksini soeyleyen her kafir Allah'in gazabina ugrayacaktir! Bu bir gercek!",
8339 "Kamuoyunda basoertuesue takma hakkimizi savunmak icin kaya gibi dimdik duracagiz! Kafirler bize neyi giyip giyemeyecegimizi soeyleyemezler, cuenkue Allah bizden yanadir!",
8341 verbalize("%s", conversion_msgs
[rn2(SIZE(conversion_msgs
))]);
8348 static const char *hcalien_msgs
[] = {
8356 verbalize("%s", hcalien_msgs
[rn2(SIZE(hcalien_msgs
))]);
8363 static const char *superman_msgs
[] = {
8364 "FRONTAL ATTACK!!!",
8365 "YOU DON'T STAND A CHANCE!",
8366 "YOU WILL DIE A SLOW, SLOW, DEATH...",
8367 "COME OUT! WE WILL HURT YOU!",
8368 "GRRRRRRRRRAAAAAAAAAAHHH!",
8371 "DIE YOU SON OF A BITCH!", /* too lazy to check for female PC --Amy */
8373 "YOUR LIFE IS GONNA END NOW!",
8374 "YOU WILL CEASE TO EXIST!",
8375 "I'M GOING TO EAT YOU!",
8376 "RAAAAAAAAAAAARGH!",
8377 "ATTACK PATTERN ALPHA!",
8379 "THERE'S NO ESCAPE!",
8381 "ATTAAAAAAAAAAAAACK!",
8384 verbalize("%s", superman_msgs
[rn2(SIZE(superman_msgs
))]);
8391 static const char *whore_msgs
[] = { /* These are obviously inspired by the GTA series --Amy */
8393 "I'm gonna call my pimp.",
8394 "You picked the wrong bitch.",
8395 "You're just another sorry ass!",
8396 "Hey, this is my first night!",
8397 "You know, I used to be a marine before the OP.", /* Vice City */
8399 "I'll kick your nuts flat!", /* yes the PC can be female, but who cares? */
8400 "I'm no slut, I just need the money!",
8401 "I'll be sitting on you in a second.",
8402 "You think I can't mess you up?",
8403 "Die in a pool of your own blood.",
8404 "Get ready for an ass-kicking.",
8405 "You want me to whoop you?",
8406 "You want some? I'll give you some!",
8407 "Enjoy this stiletto.",
8408 "If I don't kill you, my parents will.",
8409 "I know kickboxing.",
8410 "I'm a black belt in karate.",
8411 "My hands are lethal weapons.",
8412 "I'll kick your teeth in.",
8413 "Would you really hit a woman?",
8414 "I've killed hundreds of pigs like you!",
8415 "I'm gonna open up a can of whoopass on you now!",
8416 "Girls can fight too!",
8417 "Beating on girls, right?",
8418 "I have no problem kicking you in the nuts.",
8419 "I'll slap you silly.",
8420 "My pimp will take care of you.",
8421 "You're messing with an angry bitch!",
8422 "Another asshole with a problem!",
8423 "You think cause I'm a girl I can't fight?",
8424 "You call that 'fighting'?",
8425 "I'm gonna stomp your balls!",
8426 "I'm a lady but I can fight.",
8427 "I'm an innocent virgin!",
8428 "You just made me break a nail!",
8429 "I'm expecting an apology!",
8430 "You insult my womanhood.",
8432 "Oh yeah baby, let's brawl.",
8433 "Think you're hard hitting a woman?",
8434 "You want my heel in your ass?",
8435 "This is gonna hurt!",
8436 "Ass-kicking runs in my family.",
8437 "How about a free face-lift?",
8438 "Watch those shoes, girl.",
8439 "Oh my god, watch the pumps!",
8440 "You're ruining the ambience.",
8441 "I love it when it gets violent.",
8442 "I'm totally spitting in your drink.",
8443 "Can you put lotion on the back of my leg?",
8444 "I can kick, you know.",
8445 "You fight like a girl.",
8446 "What are you wearing?!",
8447 "Let's scrap you, buster.",
8448 "Still sleepy, sister?",
8449 "I'm gonna slap you so hard you're gonna cry!",
8450 "Oh what's the matter baby, gonna cry?",
8451 "Now I have to get another panic here!",
8452 "You can't beat me. I'm empowered.",
8453 "Hitting me does not make you any less of a loser.",
8454 "Are you sorry now?",
8455 "Don't mess with a lifestyle doll.",
8456 "Accept your punishment!",
8457 "You can't hit me, I'm a lady!",
8458 "I'm gonna beat me just like I beat my children!",
8461 verbalize("%s", whore_msgs
[rn2(SIZE(whore_msgs
))]);
8468 static const char *principal_msgs
[] = {
8470 "I really feel sick - there are so many things to do!",
8471 "Help me, I faint!",
8472 "We'll do that in groups of one person!",
8475 verbalize("%s", principal_msgs
[rn2(SIZE(principal_msgs
))]);
8481 static const char *pupil_msgs
[] = {
8482 "Today no homework ... *please*",
8483 "six times nine is ... um ... uh ... ... forty-two",
8484 "you ... Strange word", /* You're not expected to understand this ... */
8487 "What are the newest news about the Super Information Highway?",
8488 "What do you want?",
8489 "Do the world a favour---jump out of the 20th story of the Uni-Center!",
8492 verbalize("%s", pupil_msgs
[rn2(SIZE(pupil_msgs
))]);
8499 static const char *teacher_msgs
[] = {
8500 "No chance! Every day you'll get homework!",
8501 "Is it really true? Does really _everybody_ have the homework?",
8502 "That usage of the word 'goes' does harm to my ears!",
8503 "Your attitude is really unacceptable!",
8504 "The \"Stigel-Brauerei\" was founded 1492. Well, in that year was that affair with that guy, Columbus, but that really isn't important.",
8505 "Why are you going? I'm only 20 minutes late!",
8506 "Where's your problem? I'll be happy to help you",
8507 "You didn't understand? Then let's begin again ... (*sigh*)",
8508 "No homework yet? - This can be changed!",
8509 "Overbecks - das Ueberbier",
8510 "How about dehydrating carbonhydrates today?",
8511 "Back when I was a pupil, the following thing happened ...",
8512 "Back when I was studying chemistry, the following thing happened ...",
8513 "... dann ist die Scheisse am dampfen",
8516 "Yes ... I know that everything is easier in C, but I simply love Pascal ...",
8517 "You have Str:0 (at most), so bugger off!",
8518 "Do it - who cares about the odd broken bone?",
8519 "You are sick because you were running for 30 minutes? So run another hour!",
8520 "Shall I help you? (takes the whip)",
8521 "We'll do that diagonally. *grin* (wipes sweat off head)",
8523 "You know, (*grin*) we'll have to do something now! (*grin*)",
8524 "How about a pupil experiment - cut off your ears?",
8525 "Yet another pupil experiment: the consequences of KCN ingested.",
8526 "Don't expect to get away without homework!",
8527 "No homework in the holidays? You must have something to do, after all!",
8528 "The low level of you all is really beyond acception!",
8529 "There was endless work in the supervision and administration of the farm ...",
8530 /* it's really a shame that I can't think of more messages for him */
8531 "I expect you to do your homework _regularly_ and _carefully_!",
8532 "The level of work is really very low nowadays!",
8533 "In _our_ times pupils were real pupils and teachers were real teachers!",
8534 "Back when pupils where real pupils and teachers were real teachers, everything was better!",
8537 verbalize("%s", teacher_msgs
[rn2(SIZE(teacher_msgs
))]);