1 /* NetHack 3.6 sounds.c $NHDT-Date: 1446713641 2015/11/05 08:54:01 $ $NHDT-Branch: master $:$NHDT-Revision: 1.74 $ */
2 /* Copyright (c) 1989 Janet Walz, Mike Threepoint */
3 /* NetHack may be freely redistributed. See license for details. */
5 /* JNetHack Copyright */
6 /* (c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000 */
7 /* For 3.4-, Copyright (c) SHIRAKATA Kentaro, 2002-2016 */
8 /* JNetHack may be freely redistributed. See license for details. */
12 STATIC_DCL boolean FDECL(mon_is_gecko, (struct monst *));
13 STATIC_DCL int FDECL(domonnoise, (struct monst *));
14 STATIC_DCL int NDECL(dochat);
15 STATIC_DCL int FDECL(mon_in_room, (struct monst *, int));
17 /* this easily could be a macro, but it might overtax dumb compilers */
19 mon_in_room(mon, rmtyp)
23 int rno = levl[mon->mx][mon->my].roomno;
24 if (rno >= ROOMOFFSET)
25 return rooms[rno - ROOMOFFSET].rtype == rmtyp;
32 register struct mkroom *sroom;
33 register int hallu, vx, vy;
34 #if defined(AMIGA) && defined(AZTEC_C_WORKAROUND)
39 if (Deaf || !flags.acoustics || u.uswallow || Underwater)
42 hallu = Hallucination ? 1 : 0;
44 if (level.flags.nfountains && !rn2(400)) {
46 static const char *const fountain_msg[4] = {
47 "bubbling water.", "water falling on coins.",
48 "the splashing of a naiad.", "a soda fountain!",
50 static const char *const fountain_msg[4] = {
51 "
\83S
\83{
\83S
\83{
\82Æ
\82¢
\82¤
\89¹
\82ð
\95·
\82¢
\82½
\81D", "
\83s
\83`
\83\83\83s
\83`
\83\83\82Æ
\82¢
\82¤
\89¹
\82ð
\95·
\82¢
\82½
\81D",
52 "
\83o
\83V
\83\83\83o
\83V
\83\83\82Æ
\82¢
\82¤
\89¹
\82ð
\95·
\82¢
\82½
\81D", "
\92Y
\8e_
\88ù
\97¿
\82Ì
\83V
\83\85\81[
\82Æ
\82¢
\82¤
\89¹
\82ð
\95·
\82¢
\82½
\81I",
55 You_hear1(fountain_msg[rn2(3) + hallu]);
57 if (level.flags.nsinks && !rn2(300)) {
59 static const char *const sink_msg[3] = {
60 "a slow drip.", "a gurgling noise.", "dishes being washed!",
62 static const char *const sink_msg[3] = {
63 "
\90\85\82ª
\82Û
\82½
\82Û
\82½
\82Æ
\97\8e\82¿
\82é
\89¹
\82ð
\95·
\82¢
\82½
\81D",
64 "
\82ª
\82ç
\82ª
\82ç
\82Æ
\82¢
\82¤
\89¹
\82ð
\95·
\82¢
\82½
\81D",
65 "
\8eM
\82ð
\90ô
\82¤
\89¹
\82ð
\95·
\82¢
\82½
\81I",
68 You_hear1(sink_msg[rn2(2) + hallu]);
70 if (level.flags.has_court && !rn2(200)) {
72 static const char *const throne_msg[4] = {
73 "the tones of courtly conversation.",
74 "a sceptre pounded in judgment.",
75 "Someone shouts \"Off with %s head!\"", "Queen Beruthiel's cats!",
77 static const char *const throne_msg[4] = {
78 "
\8fã
\95i
\82È
\98b
\82µ
\90º
\82ð
\95·
\82¢
\82½
\81D",
79 "
\8dÙ
\94»
\82Åâ
\94\82ð
\93Ë
\82
\89¹
\82ð
\95·
\82¢
\82½
\81D",
80 "
\82¾
\82ê
\82©
\82ª
\81u
\82»
\82Ì
\82à
\82Ì
\82Ì
\8eñ
\82ð
\82Í
\82Ë
\82æ
\81I
\81v
\82Æ
\8b©
\82Ô
\90º
\82ð
\95·
\82¢
\82½
\81D",
81 "
\83x
\83\8b\83V
\83G
\83\8b\89¤
\94Ü
\82Ì
\94L
\82Ì
\90º
\82ð
\95·
\82¢
\82½
\81I",
84 for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) {
85 if (DEADMONSTER(mtmp))
87 if ((mtmp->msleeping || is_lord(mtmp->data)
88 || is_prince(mtmp->data)) && !is_animal(mtmp->data)
89 && mon_in_room(mtmp, COURT)) {
90 /* finding one is enough, at least for now */
91 int which = rn2(3) + hallu;
94 You_hear1(throne_msg[which]);
96 pline(throne_msg[2], uhis());
101 if (level.flags.has_swamp && !rn2(200)) {
103 static const char *const swamp_msg[3] = {
104 "hear mosquitoes!", "smell marsh gas!", /* so it's a smell...*/
107 static const char *const swamp_msg[3] = {
108 "
\89á
\82Ì
\89H
\89¹
\82ð
\95·
\82¢
\82½
\81D",
109 "
\95\85\82Á
\82½
\93õ
\82¢
\82ª
\82µ
\82½
\81I", /* so it's a smell...*/
110 "
\83h
\83i
\83\8b\83h
\83_
\83b
\83N
\82Ì
\90º
\82ð
\95·
\82¢
\82½
\81I",
113 You1(swamp_msg[rn2(2) + hallu]);
116 if (level.flags.has_vault && !rn2(200)) {
117 if (!(sroom = search_special(VAULT))) {
119 level.flags.has_vault = 0;
123 switch (rn2(2) + hallu) {
125 boolean gold_in_vault = FALSE;
127 for (vx = sroom->lx; vx <= sroom->hx; vx++)
128 for (vy = sroom->ly; vy <= sroom->hy; vy++)
130 gold_in_vault = TRUE;
131 #if defined(AMIGA) && defined(AZTEC_C_WORKAROUND)
132 /* Bug in aztec assembler here. Workaround below */
133 xx = ROOM_INDEX(sroom) + ROOMOFFSET;
134 xx = (xx != vault_occupied(u.urooms));
137 if (vault_occupied(u.urooms)
138 != (ROOM_INDEX(sroom) + ROOMOFFSET))
139 #endif /* AZTEC_C_WORKAROUND */
144 ? "someone counting money."
145 : "the quarterback calling the play.");
148 ? "
\92N
\82©
\82ª
\82¨
\8bà
\82ð
\90\94\82¦
\82Ä
\82¢
\82é
\89¹
\82ð
\95·
\82¢
\82½
\81D"
149 : "
\83N
\83H
\81[
\83^
\83o
\83b
\83N
\82ª
\8ew
\8e¦
\82ð
\82·
\82é
\90º
\82ð
\95·
\82¢
\82½
\81D");
153 You_hear("someone searching.");
155 You_hear("
\92N
\82©
\82ª
\91{
\8dõ
\82µ
\82Ä
\82¢
\82é
\89¹
\82ð
\95·
\82¢
\82½
\81D");
158 /* fall into... (yes, even for hallucination) */
162 You_hear("the footsteps of a guard on patrol.");
164 You_hear("
\8cx
\94õ
\88õ
\82Ì
\83p
\83g
\83\8d\81[
\83\8b\82·
\82é
\89¹
\82ð
\95·
\82¢
\82½
\81D");
168 You_hear("Ebenezer Scrooge!");
170 You_hear("
\82±
\82¿
\8bT
\82Ì
\97¼
\82³
\82ñ
\82Ì
\90º
\82ð
\95·
\82¢
\82½
\81I");
175 if (level.flags.has_beehive && !rn2(200)) {
176 for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) {
177 if (DEADMONSTER(mtmp))
179 if ((mtmp->data->mlet == S_ANT && is_flyer(mtmp->data))
180 && mon_in_room(mtmp, BEEHIVE)) {
181 switch (rn2(2) + hallu) {
184 You_hear("a low buzzing.");
186 You_hear("
\82Ô
\81[
\82ñ
\82Æ
\82¢
\82¤
\89¹
\82ð
\95·
\82¢
\82½
\81D");
190 You_hear("an angry drone.");
192 You_hear("
\8b»
\95±
\82µ
\82½
\97Y
\83o
\83`
\82Ì
\89¹
\82ð
\95·
\82¢
\82½
\81D");
196 You_hear("bees in your %sbonnet!",
197 uarmh ? "" : "(nonexistent) ");
199 You_hear("
\83n
\83`
\82ª
\82 \82È
\82½
\82Ì
\96X
\8eq%s
\82Ì
\92\86\82É
\82¢
\82é
\89¹
\82ð
\95·
\82¢
\82½
\81I",
200 uarmh ? "" : "(
\94í
\82Á
\82Ä
\82È
\82¢
\82¯
\82Ç)");
208 if (level.flags.has_morgue && !rn2(200)) {
209 for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) {
210 if (DEADMONSTER(mtmp))
212 if ((is_undead(mtmp->data) || is_vampshifter(mtmp))
213 && mon_in_room(mtmp, MORGUE)) {
214 const char *hair = body_part(HAIR); /* hair/fur/scales */
216 switch (rn2(2) + hallu) {
219 You("suddenly realize it is unnaturally quiet.");
221 You("
\95s
\8e©
\91R
\82È
\82
\82ç
\82¢
\90Ã
\82©
\82È
\82Ì
\82É
\8bC
\82Ã
\82¢
\82½
\81D");
225 pline_The("%s on the back of your %s %s up.", hair,
226 body_part(NECK), vtense(hair, "stand"));
228 pline("
\82 \82È
\82½
\82Ì%s
\82Ì
\82¤
\82µ
\82ë
\82Ì%s
\82ª
\8bt
\97§
\82Á
\82½
\81D",
229 body_part(NECK), body_part(HAIR));
234 pline_The("%s on your %s %s to stand up.", hair,
235 body_part(HEAD), vtense(hair, "seem"));
237 pline("
\82 \82È
\82½
\82Ì%s
\82Ì%s
\82Í
\8bt
\97§
\82Á
\82½
\81D",
238 body_part(HEAD), body_part(HAIR));
246 if (level.flags.has_barracks && !rn2(200)) {
247 static const char *const barracks_msg[4] = {
249 "blades being honed.", "loud snoring.", "dice being thrown.",
250 "General MacArthur!",
252 "
\90n
\95¨
\82ð
\8c¤
\82®
\89¹
\82ð
\95·
\82¢
\82½
\81D",
253 "
\91å
\82«
\82È
\82¢
\82Ñ
\82«
\82ð
\95·
\82¢
\82½
\81D",
254 "
\83_
\83C
\83X
\82ª
\90U
\82ç
\82ê
\82é
\89¹
\82ð
\95·
\82¢
\82½
\81D",
255 "
\83}
\83b
\83J
\81[
\83T
\81[
\8f«
\8cR
\82Ì
\90º
\82ð
\95·
\82¢
\82½
\81I",
260 for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) {
261 if (DEADMONSTER(mtmp))
263 if (is_mercenary(mtmp->data)
264 #if 0 /* don't bother excluding these */
265 && !strstri(mtmp->data->mname, "watch")
266 && !strstri(mtmp->data->mname, "guard")
268 && mon_in_room(mtmp, BARRACKS)
269 /* sleeping implies not-yet-disturbed (usually) */
270 && (mtmp->msleeping || ++count > 5)) {
271 You_hear1(barracks_msg[rn2(3) + hallu]);
276 if (level.flags.has_zoo && !rn2(200)) {
277 static const char *const zoo_msg[3] = {
279 "a sound reminiscent of an elephant stepping on a peanut.",
280 "a sound reminiscent of a seal barking.", "Doctor Dolittle!",
282 "
\8fÛ
\82ª
\83s
\81[
\83i
\83b
\83c
\82Ì
\8fã
\82Å
\97x
\82é
\82æ
\82¤
\82È
\89¹
\82ð
\95·
\82¢
\82½
\81D",
283 "
\83A
\83V
\83J
\82ª
\96i
\82¦
\82é
\82æ
\82¤
\82È
\89¹
\82ð
\95·
\82¢
\82½
\81D",
284 "
\83h
\83\8a\83g
\83\8b\90æ
\90¶
\82Ì
\90º
\82ð
\95·
\82¢
\82½
\81I",
287 for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) {
288 if (DEADMONSTER(mtmp))
290 if ((mtmp->msleeping || is_animal(mtmp->data))
291 && mon_in_room(mtmp, ZOO)) {
292 You_hear1(zoo_msg[rn2(2) + hallu]);
297 if (level.flags.has_shop && !rn2(200)) {
298 if (!(sroom = search_special(ANY_SHOP))) {
300 level.flags.has_shop = 0;
303 if (tended_shop(sroom)
304 && !index(u.ushops, (int) (ROOM_INDEX(sroom) + ROOMOFFSET))) {
305 static const char *const shop_msg[3] = {
307 "someone cursing shoplifters.",
308 "the chime of a cash register.", "Neiman and Marcus arguing!",
310 "
\92N
\82©
\82ª
\93D
\96_
\82ð
\82Ì
\82Ì
\82µ
\82é
\90º
\82ð
\95·
\82¢
\82½
\81D",
311 "
\83\8c\83W
\82Ì
\83`
\81[
\83\93\82Æ
\82¢
\82¤
\89¹
\82ð
\95·
\82¢
\82½
\81D",
312 "
\83C
\83g
\81[
\82Æ
\83\88\81[
\83J
\83h
\81[
\82Ì
\8bc
\98_
\82ð
\95·
\82¢
\82½
\81I",
315 You_hear1(shop_msg[rn2(2) + hallu]);
319 if (level.flags.has_temple && !rn2(200)
320 && !(Is_astralevel(&u.uz) || Is_sanctum(&u.uz))) {
321 for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) {
322 if (DEADMONSTER(mtmp))
324 if (mtmp->ispriest && inhistemple(mtmp)
325 /* priest must be active */
326 && mtmp->mcanmove && !mtmp->msleeping
327 /* hero must be outside this temple */
328 && temple_occupied(u.urooms) != EPRI(mtmp)->shroom)
332 /* Generic temple messages; no attempt to match topic or tone
333 to the pantheon involved, let alone to the specific deity.
334 These are assumed to be coming from the attending priest;
335 asterisk means that the priest must be capable of speech;
336 pound sign (octathorpe,&c--don't go there) means that the
337 priest and the altar must not be directly visible (we don't
338 care if telepathy or extended detection reveals that the
339 priest is not currently standing on the altar; he's mobile). */
340 static const char *const temple_msg[] = {
342 "*someone praising %s.", "*someone beseeching %s.",
343 "#an animal carcass being offered in sacrifice.",
344 "*a strident plea for donations.",
346 "*
\92N
\82©
\82ª%s
\82ð
\8e^
\94ü
\82µ
\82Ä
\82¢
\82é
\82Ì
\82ð
\95·
\82¢
\82½
\81D",
347 "*
\92N
\82©
\82ª%s
\82ð
\94M
\96]
\82µ
\82Ä
\82¢
\82é
\82Ì
\82ð
\95·
\82¢
\82½
\81D",
348 "#
\93®
\95¨
\82Ì
\8e\80\91Ì
\82ð
\90¶
\82¯æÑ
\82É
\95ù
\82°
\82é
\90º
\82ð
\95·
\82¢
\82½
\81D",
349 "*
\8e·
\9dX
\82É
\8añ
\95t
\82ð
\97v
\8b\81\82µ
\82Ä
\82¢
\82é
\82Ì
\82ð
\95·
\82¢
\82½
\81D",
353 int trycount = 0, ax = EPRI(mtmp)->shrpos.x,
354 ay = EPRI(mtmp)->shrpos.y;
355 boolean speechless = (mtmp->data->msound <= MS_ANIMAL),
356 in_sight = canseemon(mtmp) || cansee(ax, ay);
359 msg = temple_msg[rn2(SIZE(temple_msg) - 1 + hallu)];
360 if (index(msg, '*') && speechless)
362 if (index(msg, '#') && in_sight)
364 break; /* msg is acceptable */
365 } while (++trycount < 50);
366 while (!letter(*msg))
367 ++msg; /* skip control flags */
369 You_hear(msg, halu_gname(EPRI(mtmp)->shralign));
375 if (Is_oracle_level(&u.uz) && !rn2(400)) {
376 /* make sure the Oracle is still here */
377 for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) {
378 if (DEADMONSTER(mtmp))
380 if (mtmp->data == &mons[PM_ORACLE])
383 /* and don't produce silly effects when she's clearly visible */
384 if (mtmp && (hallu || !canseemon(mtmp))) {
385 static const char *const ora_msg[5] = {
387 "a strange wind.", /* Jupiter at Dodona */
388 "convulsive ravings.", /* Apollo at Delphi */
389 "snoring snakes.", /* AEsculapius at Epidaurus */
390 "someone say \"No more woodchucks!\"",
391 "a loud ZOT!" /* both rec.humor.oracle */
393 "
\8aï
\96
\82È
\95\97\82Ì
\89¹
\82ð
\95·
\82¢
\82½
\81D",
394 "
\94¼
\8b¶
\97\90\82Ì
\90º
\82ð
\95·
\82¢
\82½
\81D",
395 "
\8eÖ
\82Ì
\82¢
\82Ñ
\82«
\82ð
\95·
\82¢
\82½
\81D",
396 "
\92N
\82©
\82ª
\81u
\82à
\82¤
\83E
\83b
\83h
\83`
\83\83\83b
\83N
\82Í
\82¢
\82ç
\82È
\82¢
\81I
\81v
\82Æ
\8c¾
\82Á
\82Ä
\82¢
\82é
\90º
\82ð
\95·
\82¢
\82½
\81D",
397 "
\91å
\82«
\82È
\82y
\82n
\82s
\82ð
\95·
\82¢
\82½
\81I"
400 You_hear1(ora_msg[rn2(3) + hallu * 2]);
406 static const char *const h_sounds[] = {
408 "beep", "boing", "sing", "belche", "creak", "cough",
409 "rattle", "ululate", "pop", "jingle", "sniffle", "tinkle",
410 "eep", "clatter", "hum", "sizzle", "twitter", "wheeze",
411 "rustle", "honk", "lisp", "yodel", "coo", "burp",
412 "moo", "boom", "murmur", "oink", "quack", "rumble",
413 "twang", "bellow", "toot", "gargle", "hoot", "warble"
415 "
\83s
\81[
\83b
\82Æ
\96Â
\82¢
\82½",
416 "
\91\9b\82¬
\82½
\82Ä
\82½",
418 "
\82°
\82Á
\82Õ
\82ð
\82µ
\82½",
419 "
\83L
\81[
\83L
\81[
\82Æ
\96Â
\82¢
\82½",
420 "
\82¹
\82«
\8d\9e\82ñ
\82¾",
422 "
\83S
\83\8d\83S
\83\8d\96Â
\82Á
\82½",
423 "
\83z
\81[
\83z
\81[
\96Â
\82¢
\82½",
424 "
\83|
\83\93\82Æ
\96Â
\82¢
\82½",
425 "
\83K
\83\89\83\93\83K
\83\89\83\93\82Æ
\96Â
\82¢
\82½",
426 "
\83N
\83\93\83N
\83\93\96Â
\82¢
\82½",
427 "
\83`
\83\8a\83\93\83`
\83\8a\83\93\82Æ
\96Â
\82¢
\82½",
429 "
\83C
\81[
\83b
\82Æ
\96Â
\82¢
\82½",
430 /*JP
\8ec
\82è
\82Í
\96¢
\96ó */
436 register struct monst *mtmp;
440 switch (mtmp->data->msound) {
446 ret = "
\83V
\81[
\83b
\82Æ
\96Â
\82¢
\82½";
453 ret = "
\82Í
\82°
\82µ
\82
\96i
\82¦
\82½";
459 ret = "
\96i
\82¦
\82½";
465 ret = "
\83u
\81[
\83b
\82Æ
\96Â
\82¢
\82½";
471 ret = "
\83L
\81[
\83L
\81[
\96Â
\82¢
\82½";
477 ret = "
\8bà
\90Ø
\82è
\90º
\82ð
\97§
\82Ä
\82½";
483 ret = "
\82¢
\82È
\82È
\82¢
\82½";
489 ret = "
\94ß
\82µ
\82
\96Â
\82¢
\82½";
495 ret = "
\8b»
\95±
\82µ
\82½";
501 ret = "
\8bà
\90Ø
\82è
\90º
\82ð
\82 \82°
\82½";
506 /* the sounds of a seriously abused pet, including player attacking it */
509 register struct monst *mtmp;
511 register const char *growl_verb = 0;
513 if (mtmp->msleeping || !mtmp->mcanmove || !mtmp->data->msound)
516 /* presumably nearness and soundok checks have already been made */
518 growl_verb = h_sounds[rn2(SIZE(h_sounds))];
520 growl_verb = growl_sound(mtmp);
523 pline("%s %s!", Monnam(mtmp), vtense((char *) 0, growl_verb));
525 pline("%s
\82Í%s
\81I", Monnam(mtmp), growl_verb);
528 wake_nearto(mtmp->mx, mtmp->my, mtmp->data->mlevel * 18);
532 /* the sounds of mistreated pets */
535 register struct monst *mtmp;
537 register const char *yelp_verb = 0;
539 if (mtmp->msleeping || !mtmp->mcanmove || !mtmp->data->msound)
542 /* presumably nearness and soundok checks have already been made */
544 yelp_verb = h_sounds[rn2(SIZE(h_sounds))];
546 switch (mtmp->data->msound) {
551 yelp_verb = "
\94ß
\82µ
\82
\96Â
\82¢
\82½";
558 yelp_verb = "
\83L
\83\83\83\93\83L
\83\83\83\93\96Â
\82¢
\82½";
564 yelp_verb = "
\82¤
\82È
\82Á
\82½";
568 yelp_verb = "squeal";
570 yelp_verb = "
\83L
\81[
\83L
\81[
\96Â
\82¢
\82½";
574 yelp_verb = "screak";
576 yelp_verb = "
\8bà
\90Ø
\82è
\90º
\82ð
\97§
\82Ä
\82½";
582 yelp_verb = "
\94ß
\82µ
\82
\96Â
\82¢
\82½";
587 pline("%s %s!", Monnam(mtmp), vtense((char *) 0, yelp_verb));
589 pline("%s
\82Í%s
\81I", Monnam(mtmp), yelp_verb);
592 wake_nearto(mtmp->mx, mtmp->my, mtmp->data->mlevel * 12);
596 /* the sounds of distressed pets */
599 register struct monst *mtmp;
601 register const char *whimper_verb = 0;
603 if (mtmp->msleeping || !mtmp->mcanmove || !mtmp->data->msound)
606 /* presumably nearness and soundok checks have already been made */
608 whimper_verb = h_sounds[rn2(SIZE(h_sounds))];
610 switch (mtmp->data->msound) {
614 whimper_verb = "whimper";
616 whimper_verb = "
\83N
\83\93\83N
\83\93\96Â
\82¢
\82½";
620 whimper_verb = "whine";
622 whimper_verb = "
\83N
\81[
\83\93\82Æ
\96Â
\82¢
\82½";
626 whimper_verb = "squeal";
628 whimper_verb = "
\83L
\81[
\83L
\81[
\96Â
\82¢
\82½";
633 pline("%s %s.", Monnam(mtmp), vtense((char *) 0, whimper_verb));
635 pline("%s
\82Í%s
\81D", Monnam(mtmp), whimper_verb);
638 wake_nearto(mtmp->mx, mtmp->my, mtmp->data->mlevel * 6);
642 /* pet makes "I'm hungry" noises */
645 register struct monst *mtmp;
647 if (mtmp->msleeping || !mtmp->mcanmove
648 || !(carnivorous(mtmp->data) || herbivorous(mtmp->data)))
651 /* presumably nearness and soundok checks have already been made */
652 if (!is_silent(mtmp->data) && mtmp->data->msound <= MS_ANIMAL)
653 (void) domonnoise(mtmp);
654 else if (mtmp->data->msound >= MS_HUMANOID) {
655 if (!canspotmon(mtmp))
656 map_invisible(mtmp->mx, mtmp->my);
658 verbalize("I'm hungry.");
660 verbalize("
\82Í
\82ç
\82Ø
\82±
\82¾
\81D");
664 /* return True if mon is a gecko or seems to look like one (hallucination) */
671 /* return True if it is actually a gecko */
672 if (mon->data == &mons[PM_GECKO])
674 /* return False if it is a long worm; we might be chatting to its tail
675 (not strictly needed; long worms are MS_SILENT so won't get here) */
676 if (mon->data == &mons[PM_LONG_WORM])
678 /* result depends upon whether map spot shows a gecko, which will
679 be due to hallucination or to mimickery since mon isn't one */
680 glyph = glyph_at(mon->mx, mon->my);
681 return (boolean) (glyph_to_mon(glyph) == PM_GECKO);
686 register struct monst *mtmp;
689 register const char *pline_msg = 0, /* Monnam(mtmp) will be prepended */
690 *verbl_msg = 0, /* verbalize() */
691 *verbl_msg_mcan = 0; /* verbalize() if cancelled */
692 struct permonst *ptr = mtmp->data;
693 int msound = ptr->msound;
695 /* presumably nearness and sleep checks have already been made */
701 /* leader might be poly'd; if he can still speak, give leader speech */
702 if (mtmp->m_id == quest_status.leader_m_id && msound > MS_ANIMAL)
704 /* make sure it's your role's quest guardian; adjust if not */
705 else if (msound == MS_GUARDIAN && ptr != &mons[urole.guardnum])
706 msound = mons[genus(monsndx(ptr), 1)].msound;
707 /* some normally non-speaking types can/will speak if hero is similar */
708 else if (msound == MS_ORC /* note: MS_ORC is same as MS_GRUNT */
709 && (same_race(ptr, youmonst.data) /* current form, */
710 || same_race(ptr, &mons[Race_switch]))) /* unpoly'd form */
711 msound = MS_HUMANOID;
712 /* silliness, with slight chance to interfere with shopping */
713 else if (Hallucination && mon_is_gecko(mtmp))
716 /* be sure to do this before talking; the monster might teleport away, in
717 * which case we want to check its pre-teleport position
719 if (!canspotmon(mtmp))
720 map_invisible(mtmp->mx, mtmp->my);
724 return doconsult(mtmp);
733 case MS_SELL: /* pitch, pay, total */
734 if (!Hallucination || (mtmp->isshk && !rn2(2))) {
737 /* approximation of GEICO's advertising slogan (it actually
738 concludes with "save you 15% or more on car insurance.") */
740 Sprintf(verbuf, "15 minutes could save you 15 %s.",
742 Sprintf(verbuf, "15
\95ª
\92¸
\82¯
\82ê
\82Î15%s
\90ß
\96ñ
\82Å
\82«
\82Ü
\82·
\81D",
743 currency(15L)); /* "zorkmids" */
748 /* vampire messages are varied by tameness, peacefulness, and time of
750 boolean isnight = night();
751 boolean kindred = (Upolyd && (u.umonnum == PM_VAMPIRE
752 || u.umonnum == PM_VAMPIRE_LORD));
754 (Upolyd && (u.umonnum == PM_WOLF || u.umonnum == PM_WINTER_WOLF
755 || u.umonnum == PM_WINTER_WOLF_CUB));
757 const char *racenoun =
758 (flags.female && urace.individual.f)
760 : (urace.individual.m) ? urace.individual.m : urace.noun;
762 const char *racenoun = (flags.female) ? "
\82 \82È
\82½" : "
\82¨
\82Ü
\82¦" ;
768 Sprintf(verbuf, "Good %s to you Master%s",
769 isnight ? "evening" : "day",
770 isnight ? "!" : ". Why do we not rest?");
772 Sprintf(verbuf, "
\82²
\8eå
\90l
\97l
\81C%s%s",
773 isnight ? "
\82±
\82ñ
\82Î
\82ñ
\82Í" : "
\82±
\82ñ
\82É
\82¿
\82Í",
774 isnight ? "!" : "
\81D
\82¨
\8bx
\82Ý
\82É
\82È
\82è
\82Ü
\82¹
\82ñ
\82©
\81H");
779 Sprintf(verbuf, "%s%s",
780 nightchild ? "Child of the night, " : "",
782 ? "I can stand this craving no longer!"
784 ? "I beg you, help me satisfy this growing craving!"
785 : "I find myself growing a little weary.");
787 Sprintf(verbuf,"%s%s",
788 nightchild ? "
\96é
\82Ì
\8ee
\82æ
\81C" : "",
790 ? "
\8e\84\82Í
\82±
\82ê
\88È
\8fã
\8a\89\96]
\82ð
\97}
\82¦
\82ç
\82ê
\82È
\82¢
\81I"
792 ? "
\82Ó
\82
\82ê
\82 \82ª
\82é
\8a\89\96]
\82ð
\96\9e\82½
\82·
\82Ì
\82ð
\8f\95\82¯
\82Ä
\82
\82ê
\82È
\82¢
\82©
\81H
\97\8a\82Þ
\81I"
793 : "
\8e\84\82Í
\8f
\81X
\94æ
\82ê
\82½
\82æ
\82¤
\82¾
\81D");
797 } else if (mtmp->mpeaceful) {
798 if (kindred && isnight) {
800 Sprintf(verbuf, "Good feeding %s!",
801 flags.female ? "sister" : "brother");
803 Sprintf(verbuf, "
\82æ
\82¤
\8cZ
\92í
\81I");
806 } else if (nightchild && isnight) {
808 Sprintf(verbuf, "How nice to hear you, child of the night!");
810 Sprintf(verbuf, "
\96é
\82Ì
\8ee
\82æ
\81C
\8c³
\8bC
\82»
\82¤
\82¾
\82È
\81I");
814 verbl_msg = "I only drink... potions.";
816 verbl_msg = "
\8e\84\82Í
\96ò
\81D
\81D
\82µ
\82©
\88ù
\82Ü
\82È
\82¢
\81D";
819 static const char *const vampmsg[] = {
820 /* These first two (0 and 1) are specially handled below */
822 "I vant to suck your %s!",
824 "
\82¨
\91O
\82Ì%s
\82ð
\82æ
\82±
\82¹
\81I",
826 "I vill come after %s without regret!",
828 "
\91¶
\95ª
\82É%s
\82ð
\92Ç
\8c\82\82³
\82¹
\82Ä
\82à
\82ç
\82¨
\82¤
\81I",
829 /* other famous vampire quotes can follow here if desired */
834 "This is my hunting ground that you dare to prowl!";
836 "
\82¨
\82Ü
\82¦
\82ª
\82¤
\82ë
\82Â
\82¢
\82Ä
\82¢
\82é
\82±
\82Ì
\82 \82½
\82è
\82Í
\8e\84\82Ì
\8eë
\8fê
\82¾
\81I";
837 else if (youmonst.data == &mons[PM_SILVER_DRAGON]
838 || youmonst.data == &mons[PM_BABY_SILVER_DRAGON]) {
839 /* Silver dragons are silver in color, not made of silver */
841 Sprintf(verbuf, "%s! Your silver sheen does not frighten me!",
842 youmonst.data == &mons[PM_SILVER_DRAGON]
847 verbl_msg = "
\82Î
\82©
\82ß
\81I
\82¨
\82Ü
\82¦
\82Ì
\8bâ
\82Ì
\8bP
\82«
\82È
\82Ç
\95|
\82
\82È
\82¢
\82¼
\81I";
850 vampindex = rn2(SIZE(vampmsg));
851 if (vampindex == 0) {
852 Sprintf(verbuf, vampmsg[vampindex], body_part(BLOOD));
854 } else if (vampindex == 1) {
855 Sprintf(verbuf, vampmsg[vampindex],
856 Upolyd ? an(mons[u.umonnum].mname)
860 verbl_msg = vampmsg[vampindex];
865 if (flags.moonphase == FULL_MOON && (night() ^ !rn2(13))) {
867 pline("%s throws back %s head and lets out a blood curdling %s!",
868 Monnam(mtmp), mhis(mtmp),
869 ptr == &mons[PM_HUMAN_WERERAT] ? "shriek" : "howl");
871 pline("%s
\82Í
\93ª
\82ð
\82Ì
\82¯
\82¼
\82ç
\82µ
\94w
\8bØ
\82ª
\93\80\82é
\82æ
\82¤
\82È%s
\82ð
\82 \82°
\82½
\81I",
873 ptr == &mons[PM_HUMAN_WERERAT] ? "
\8bà
\90Ø
\82è
\90º" : "
\99ô
\9aK");
875 wake_nearto(mtmp->mx, mtmp->my, 11 * 11);
879 "whispers inaudibly. All you can make out is \"moon\".";
881 "
\95·
\82«
\82Æ
\82ê
\82È
\82¢
\82æ
\82¤
\82È
\90º
\82Å
\82³
\82³
\82â
\82¢
\82½
\81D
\82©
\82ë
\82¤
\82¶
\82Ä
\81w
\8c\8e\81x
\82Æ
\82¢
\82¤
\8c¾
\97t
\82¾
\82¯
\82ª
\95·
\82«
\82Æ
\82ê
\82½
\81D";
884 if (flags.moonphase == FULL_MOON && night()) {
886 pline_msg = "howls.";
888 pline_msg = "
\96i
\82¦
\82½
\81D";
889 } else if (mtmp->mpeaceful) {
891 && (mtmp->mconf || mtmp->mflee || mtmp->mtrapped
892 || moves > EDOG(mtmp)->hungrytime || mtmp->mtame < 5))
894 pline_msg = "whines.";
896 pline_msg = "
\83N
\83\93\83N
\83\93\96Â
\82¢
\82½
\81D";
897 else if (mtmp->mtame && EDOG(mtmp)->hungrytime > moves + 1000)
901 pline_msg = "
\83L
\83\83\83\93\83L
\83\83\83\93\96Â
\82¢
\82½
\81D";
904 != &mons[PM_DINGO]) /* dingos do not actually bark */
906 pline_msg = "barks.";
908 pline_msg = "
\83\8f\83\93\83\8f\83\93\96i
\82¦
\82½
\81D";
912 pline_msg = "growls.";
914 pline_msg = "
\82¤
\82È
\82Á
\82½
\81D";
919 if (mtmp->mconf || mtmp->mflee || mtmp->mtrapped
922 pline_msg = "yowls.";
924 pline_msg = "
\94ß
\82µ
\82
\96Â
\82¢
\82½
\81D";
925 else if (moves > EDOG(mtmp)->hungrytime)
927 pline_msg = "meows.";
929 pline_msg = "
\83j
\83\83\81[
\83\93\82Æ
\96Â
\82¢
\82½
\81D";
930 else if (EDOG(mtmp)->hungrytime > moves + 1000)
932 pline_msg = "purrs.";
934 pline_msg = "
\83S
\83\8d\83S
\83\8d\82Æ
\96Â
\82¢
\82½
\81D";
939 pline_msg = "
\83j
\83\83\81[
\83j
\83\83\81[
\96Â
\82¢
\82½
\81D";
941 } /* else FALLTHRU */
944 pline_msg = mtmp->mpeaceful ? "snarls." : "growls!";
946 pline_msg = mtmp->mpeaceful ? "
\82¤
\82È
\82Á
\82½
\81D" : "
\8c\83\82µ
\82
\82¤
\82È
\82Á
\82½
\81I";
950 pline_msg = mtmp->mpeaceful ? "snarls." : "roars!";
952 pline_msg = mtmp->mpeaceful ? "
\82¤
\82È
\82Á
\82½
\81D" : "
\82Æ
\82Ä
\82à
\8c\83\82µ
\82
\96i
\82¦
\82½
\81I";
956 pline_msg = "squeaks.";
958 pline_msg = "
\83L
\81[
\83L
\81[
\96Â
\82¢
\82½
\81D";
961 if (ptr == &mons[PM_RAVEN] && !mtmp->mpeaceful)
963 verbl_msg = "Nevermore!";
965 verbl_msg = "
\81u
\82à
\82¤
\93ñ
\93x
\82Æ
\81I
\81v";
968 pline_msg = "squawks.";
970 pline_msg = "
\83L
\81[
\83L
\81[
\96Â
\82¢
\82½
\81D";
973 if (!mtmp->mpeaceful)
975 pline_msg = "hisses!";
977 pline_msg = "
\83V
\81[
\83b
\82Æ
\96Â
\82¢
\82½
\81I";
979 return 0; /* no sound */
983 pline_msg = mtmp->mpeaceful ? "drones." : "buzzes angrily.";
985 pline_msg = mtmp->mpeaceful ? "
\82Ô
\81[
\82ñ
\82Æ
\96Â
\82Á
\82½
\81D" : "
\82Ô
\82ñ
\82Ô
\82ñ
\96Â
\82Á
\82½
\81D";
989 pline_msg = "grunts.";
991 pline_msg = "
\82Ô
\81[
\82Ô
\81[
\96Â
\82¢
\82½
\81D";
996 pline_msg = "neighs.";
998 pline_msg = "
\82¢
\82È
\82È
\82¢
\82½
\81D";
999 else if (moves > EDOG(mtmp)->hungrytime)
1001 pline_msg = "whinnies.";
1003 pline_msg = "
\83q
\83q
\81[
\83\93\82Æ
\96Â
\82¢
\82½
\81D";
1006 pline_msg = "whickers.";
1008 pline_msg = "
\83q
\83q
\83q
\81[
\83\93\82Æ
\96Â
\82¢
\82½
\81D";
1012 pline_msg = "wails mournfully.";
1014 pline_msg = "
\94ß
\82µ
\82°
\82É
\96Â
\82¢
\82½
\81D";
1018 pline_msg = "gurgles.";
1020 pline_msg = "
\82²
\82ë
\82²
\82ë
\8dA
\82ð
\96Â
\82ç
\82µ
\82½
\81D";
1024 pline_msg = "burbles.";
1026 pline_msg = "
\82Ø
\82¿
\82á
\82
\82¿
\82á
\82µ
\82á
\82×
\82Á
\82½
\81D";
1030 pline_msg = "shrieks.";
1032 pline_msg = "
\8bà
\90Ø
\82è
\90º
\82ð
\82 \82°
\82½
\81D";
1037 pline_msg = "imitates you.";
1039 pline_msg = "
\82 \82È
\82½
\82Ì
\90^
\8e\97\82ð
\82µ
\82½
\81D";
1043 pline("%s rattles noisily.", Monnam(mtmp));
1045 pline("%s
\82Í
\83P
\83^
\83P
\83^
\82Æ
\8fÎ
\82¢
\82¾
\82µ
\82½
\81D",Monnam(mtmp));
1047 You("freeze for a moment.");
1049 You("
\88ê
\8fu
\93\80\82è
\82Â
\82¢
\82½
\81D");
1051 multi_reason = "scared by rattling";
1055 static const char *const laugh_msg[4] = {
1057 "giggles.", "chuckles.", "snickers.", "laughs.",
1059 "
\82
\82·
\82
\82·
\8fÎ
\82Á
\82½
\81D", "
\82
\82·
\82Á
\82Æ
\8fÎ
\82Á
\82½
\81D", "
\82Î
\82©
\82É
\82µ
\82½
\82æ
\82¤
\82É
\8fÎ
\82Á
\82½
\81D", "
\8fÎ
\82Á
\82½
\81D",
1061 pline_msg = laugh_msg[rn2(4)];
1065 pline_msg = "mumbles incomprehensibly.";
1067 pline_msg = "
\95s
\89Â
\89ð
\82È
\8c¾
\97t
\82ð
\82Â
\82Ô
\82â
\82¢
\82½
\81D";
1072 verbl_msg = "Sorry, I'm all out of wishes.";
1074 verbl_msg = "
\8e\84\82ð
\8f\95\82¯
\82Ä
\82
\82ê
\82½
\82±
\82Æ
\82ð
\8a´
\8eÓ
\82·
\82é
\81I";
1075 } else if (mtmp->mpeaceful) {
1076 if (ptr == &mons[PM_WATER_DEMON])
1078 pline_msg = "gurgles.";
1080 pline_msg = "
\83S
\83{
\83S
\83{
\83S
\83{
\83S
\83{
\81D";
1083 verbl_msg = "I'm free!";
1085 verbl_msg = "
\82â
\82Á
\82Æ
\8e©
\97R
\82É
\82È
\82Á
\82½
\81I";
1087 if (ptr != &mons[PM_PRISONER])
1089 verbl_msg = "This will teach you not to disturb me!";
1091 verbl_msg = "
\82¶
\82á
\82Ü
\82ð
\82µ
\82È
\82¢
\82Å
\82
\82ê
\81I";
1094 verbl_msg = "??????????";
1098 case MS_BOAST: /* giants */
1099 if (!mtmp->mpeaceful) {
1103 pline("%s boasts about %s gem collection.", Monnam(mtmp),
1106 pline("%s
\82Í
\8e©
\95ª
\82Ì
\95ó
\90Î
\82Ì
\83R
\83\8c\83N
\83V
\83\87\83\93\82ð
\8e©
\96\9d\82µ
\82½
\81D", Monnam(mtmp));
1111 pline_msg = "complains about a diet of mutton.";
1113 pline_msg = "
\96\88\93ú
\97r
\82Î
\82©
\82è
\90H
\82×
\82Ä
\82¢
\82é
\8e\96\82ð
\8bð
\92s
\82Á
\82½
\81D";
1117 pline_msg = "shouts \"Fee Fie Foe Foo!\" and guffaws.";
1119 pline_msg = "
\81w
\82í
\82Á
\82Í
\82Á
\82Í
\82Á
\82Í
\81I
\81x
\82Æ
\82Î
\82©
\8fÎ
\82¢
\82µ
\82½
\81D";
1120 wake_nearto(mtmp->mx, mtmp->my, 7 * 7);
1127 if (!mtmp->mpeaceful) {
1128 if (In_endgame(&u.uz) && is_mplayer(ptr))
1132 pline_msg = "threatens you.";
1134 pline_msg = "
\82 \82È
\82½
\82ð
\88Ð
\8ad
\82µ
\82½
\81D";
1137 /* Generic peaceful humanoid behaviour. */
1140 pline_msg = "wants nothing to do with you.";
1142 pline_msg = "
\82 \82È
\82½
\82Æ
\8aÖ
\82í
\82è
\82½
\82
\82È
\82¢
\82æ
\82¤
\82¾
\81D";
1143 else if (mtmp->mhp < mtmp->mhpmax / 4)
1145 pline_msg = "moans.";
1147 pline_msg = "
\82¤
\82ß
\82«
\90º
\82ð
\82 \82°
\82½
\81D";
1148 else if (mtmp->mconf || mtmp->mstun)
1150 verbl_msg = !rn2(3) ? "Huh?" : rn2(2) ? "What?" : "Eh?";
1152 verbl_msg = !rn2(3) ? "
\82Ö
\81H" : rn2(2) ? "
\89½
\81H" : "
\82¦
\81H";
1153 else if (!mtmp->mcansee)
1155 verbl_msg = "I can't see!";
1157 verbl_msg = "
\89½
\82à
\8c©
\82¦
\82È
\82¢
\81I";
1158 else if (mtmp->mtrapped) {
1159 struct trap *t = t_at(mtmp->mx, mtmp->my);
1164 verbl_msg = "I'm trapped!";
1166 verbl_msg = "ã©
\82É
\82Í
\82Ü
\82Á
\82Ä
\82µ
\82Ü
\82Á
\82½
\81I";
1167 } else if (mtmp->mhp < mtmp->mhpmax / 2)
1169 pline_msg = "asks for a potion of healing.";
1171 pline_msg = "
\89ñ
\95\9c\82Ì
\96ò
\82ð
\8e\9d\82Á
\82Ä
\82È
\82¢
\82©
\90q
\82Ë
\82½
\81D";
1172 else if (mtmp->mtame && !mtmp->isminion
1173 && moves > EDOG(mtmp)->hungrytime)
1175 verbl_msg = "I'm hungry.";
1177 verbl_msg = "
\95 \82ª
\8c¸
\82Á
\82½
\82È
\81D";
1178 /* Specific monsters' interests */
1179 else if (is_elf(ptr))
1181 pline_msg = "curses orcs.";
1183 pline_msg = "
\83I
\81[
\83N
\82ð
\8eô
\82Á
\82½
\81D";
1184 else if (is_dwarf(ptr))
1186 pline_msg = "talks about mining.";
1188 pline_msg = "
\8dÌ
\8c@
\82É
\82Â
\82¢
\82Ä
\98b
\82µ
\82½
\81D";
1189 else if (likes_magic(ptr))
1191 pline_msg = "talks about spellcraft.";
1193 pline_msg = "
\96\82\8fp
\82Ì
\92b
\98B
\82É
\82Â
\82¢
\82Ä
\98b
\82µ
\82½
\81D";
1194 else if (ptr->mlet == S_CENTAUR)
1196 pline_msg = "discusses hunting.";
1198 pline_msg = "
\97Â
\82É
\82Â
\82¢
\82Ä
\8bc
\98_
\82µ
\82½
\81D";
1200 switch (monsndx(ptr)) {
1203 (mtmp->mhpmax - mtmp->mhp >= 10)
1205 ? "complains about unpleasant dungeon conditions."
1207 ? "
\95s
\96ù
\89õ
\82È
\96À
\8b{
\82Ì
\8fó
\91Ô
\82É
\82Â
\82¢
\82Ä
\95s
\96\9e\82ð
\8fq
\82×
\82½
\81D"
1209 : "asks you about the One Ring.";
1211 : "
\81u
\88ê
\82Â
\82Ì
\8ew
\97Ö
\81v
\82É
\82Â
\82¢
\82Ä
\90q
\82Ë
\82½
\81D";
1213 case PM_ARCHEOLOGIST:
1216 "describes a recent article in \"Spelunker Today\" magazine.";
1218 "
\81u
\93ú
\8a§
\93´
\8cA
\81v
\82Ì
\8dÅ
\90V
\82Ì
\8bL
\8e\96\82ð
\8e·
\95M
\82µ
\82Ä
\82¢
\82é
\81D";
1222 verbl_msg = "Aloha.";
1224 verbl_msg = "
\83A
\83\8d\81[
\83n
\81D";
1228 pline_msg = "discusses dungeon exploration.";
1230 pline_msg = "
\96À
\8b{
\92T
\8c\9f\82É
\82Â
\82¢
\82Ä
\8bc
\98_
\82µ
\82½
\81D";
1236 if (SYSOPT_SEDUCE) {
1237 if (ptr->mlet != S_NYMPH
1238 && could_seduce(mtmp, &youmonst, (struct attack *) 0) == 1) {
1239 (void) doseduce(mtmp);
1242 swval = ((poly_gender() != (int) mtmp->female) ? rn2(3) : 0);
1244 swval = ((poly_gender() == 0) ? rn2(3) : 0);
1248 verbl_msg = "Hello, sailor.";
1250 switch (poly_gender()) {
1252 verbl_msg = "
\82±
\82ñ
\82É
\82¿
\82Í
\81D
\82 \82ç
\82¢
\82¢
\92j
\82Ë
\81D";
1255 verbl_msg = "
\82±
\82ñ
\82É
\82¿
\82Í
\81C
\82¨
\8fì
\82³
\82ñ
\81D";
1258 verbl_msg = "
\82±
\82ñ
\82É
\82¿
\82Í
\81D";
1265 pline_msg = "comes on to you.";
1267 pline_msg = "
\82 \82È
\82½
\82Ì
\82Ù
\82¤
\82Ö
\82â
\82Á
\82Ä
\82«
\82½
\81D";
1271 pline_msg = "cajoles you.";
1273 pline_msg = "
\82 \82È
\82½
\82ð
\82¨
\82¾
\82Ä
\82½
\81D";
1277 if (mtmp->mpeaceful)
1279 verbalize("Just the facts, %s.", flags.female ? "Ma'am" : "Sir");
1281 verbalize("
\8e\96\8eÀ
\82¾
\82¯
\82ª
\92m
\82è
\82½
\82¢
\82ñ
\82Å
\82·
\82æ
\81C%s
\81D", flags.female ? "
\89\9c\82³
\82ñ" : "
\92U
\93ß");
1284 static const char *const arrest_msg[3] = {
1286 "Anything you say can be used against you.",
1287 "You're under arrest!", "Stop in the name of the Law!",
1289 "
\82¨
\82Ü
\82¦
\82Ì
\8c¾
\82¤
\82±
\82Æ
\82Í
\82¨
\82Ü
\82¦
\82É
\82Æ
\82Á
\82Ä
\95s
\97\98\82È
\8fØ
\8b\92\82Æ
\82È
\82é
\82±
\82Æ
\82ª
\82 \82é
\81I",
1290 "
\82¨
\82Ü
\82¦
\82ð
\91ß
\95ß
\82·
\82é
\81I",
1291 "
\96@
\82Ì
\96¼
\82Ì
\82à
\82Æ
\92¼
\82¿
\82É
\92\86\8e~
\82¹
\82æ
\81I",
1294 verbl_msg = arrest_msg[rn2(3)];
1298 if (mtmp->mpeaceful && !mtmp->mtame) {
1299 (void) demon_talk(mtmp);
1304 if (!mtmp->mpeaceful)
1306 else if (is_lminion(mtmp))
1308 verbl_msg = "It's not too late.";
1310 verbl_msg = "
\82Ü
\82¾
\92x
\82
\82Í
\82È
\82¢
\81D";
1313 verbl_msg = "We're all doomed.";
1315 verbl_msg = "
\82Ý
\82ñ
\82È
\82à
\82¤
\82¨
\82µ
\82Ü
\82¢
\82¾
\81D";
1318 /* deliberately vague, since it's not actually casting any spell */
1320 pline_msg = "seems to mutter a cantrip.";
1322 pline_msg = "
\82Ô
\82Â
\82Ô
\82Â
\82Æ
\82Â
\82Ô
\82â
\82¢
\82Ä
\82¢
\82é
\81D";
1326 verbl_msg_mcan = "I hate this job!";
1328 verbl_msg_mcan = "
\82±
\82ñ
\82È
\8ed
\8e\96\8c\99\82¢
\81I";
1329 if (uwep && (uwep->oclass == WEAPON_CLASS || is_weptool(uwep)))
1331 verbl_msg = "Put that weapon away before you hurt someone!";
1333 verbl_msg = "
\95\90\8aí
\82ð
\82¨
\82³
\82ß
\82È
\82³
\82¢
\81I
\82»
\82ê
\82Í
\90l
\82ð
\8f\9d\82Â
\82¯
\82é
\82à
\82Ì
\82æ
\81I";
1334 else if (uarmc || uarm || uarmh || uarms || uarmg || uarmf)
1335 verbl_msg = Role_if(PM_HEALER)
1337 ? "Doc, I can't help you unless you cooperate."
1339 ? "
\90æ
\90¶
\81C
\82 \82È
\82½
\82Ì
\8b¦
\97Í
\82È
\82µ
\82Å
\82Í
\82Ç
\82¤
\82µ
\82æ
\82¤
\82à
\82 \82è
\82Ü
\82¹
\82ñ
\82í
\81D"
1341 : "Please undress so I can examine you.";
1343 : "
\95\9e\82ð
\92E
\82¢
\82Å
\82
\82¾
\82³
\82¢
\81D
\82 \82È
\82½
\82ð
\90f
\8e@
\82µ
\82Ü
\82·
\82í
\81D";
1346 verbl_msg = "Take off your shirt, please.";
1348 verbl_msg = "
\83V
\83\83\83c
\82ð
\92E
\82¢
\82Å
\82
\82¾
\82³
\82¢
\81D";
1351 verbl_msg = "Relax, this won't hurt a bit.";
1353 verbl_msg = "
\82¨
\82¿
\82Â
\82¢
\82Ä
\81D
\82¿
\82Á
\82Æ
\82à
\92É
\82
\82È
\82¢
\82í
\82æ
\81D";
1356 if (money_cnt(invent))
1358 verbl_msg = "Please drop that gold and follow me.";
1360 verbl_msg = "
\8bà
\82ð
\92u
\82¢
\82Ä
\82Â
\82¢
\82Ä
\82«
\82Ä
\82
\82¾
\82³
\82¢
\81D";
1363 verbl_msg = "Please follow me.";
1365 verbl_msg = "
\82Â
\82¢
\82Ä
\82«
\82Ä
\82
\82¾
\82³
\82¢
\81D";
1369 *const soldier_foe_msg[3] =
1372 "Resistance is useless!", "You're dog meat!", "Surrender!",
1374 "
\92ï
\8dR
\82µ
\82Ä
\82à
\96³
\91Ê
\82¾
\81I",
1375 "
\8c¢
\82É
\8bò
\82í
\82ê
\82¿
\82Ü
\82¦
\81I",
1376 "
\8d~
\95\9a\82µ
\82ë
\81I",
1379 *const soldier_pax_msg[3] = {
1381 "What lousy pay we're getting here!",
1382 "The food's not fit for Orcs!",
1383 "My feet hurt, I've been on them all day!",
1385 "
\82È
\82ñ
\82Ä
\8bà
\95¥
\82¢
\82ª
\88«
\82¢
\82ñ
\82¾
\81I",
1386 "
\82È
\82ñ
\82¾
\82¢
\81H
\83I
\81[
\83N
\82Å
\82à
\8bò
\82¦
\82Ë
\82¥
\82º
\81I",
1387 "
\91«
\82ð
\89ö
\89ä
\82µ
\82½
\81C
\82¸
\82Á
\82Æ
\82±
\82Ì
\92²
\8eq
\82¾
\81I",
1390 verbl_msg = mtmp->mpeaceful ? soldier_pax_msg[rn2(3)]
1391 : soldier_foe_msg[rn2(3)];
1396 if (ptr == &mons[PM_DEATH]
1397 && !context.tribute.Deathnotice && u_have_novel()) {
1398 struct obj *book = u_have_novel();
1399 const char *tribtitle = (char *)0;
1402 int novelidx = book->novelidx;
1404 tribtitle = noveltitle(&novelidx);
1408 Sprintf(verbuf, "Ah, so you have a copy of /%s/.", tribtitle);
1410 Sprintf(verbuf, "
\82 \82 \81A/%s/
\82ð
\8e\9d\82Á
\82Ä
\82¢
\82é
\82Ì
\82©
\81D", tribtitle);
1411 /* no Death featured in these two, so exclude them */
1412 if (!(strcmpi(tribtitle, "Snuff") == 0
1413 || strcmpi(tribtitle, "The Wee Free Men") == 0))
1415 Strcat(verbuf, " I may have been misquoted there.");
1417 Strcat(verbuf, "
\82±
\82±
\82Å
\82Í
\88ø
\97p
\82ª
\8aÔ
\88á
\82Á
\82Ä
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\81D");
1419 context.tribute.Deathnotice = 1;
1421 } else if (ptr == &mons[PM_DEATH]
1422 && !rn2(2) && Death_quote(verbuf, BUFSZ)) {
1425 /* end of tribute addition */
1426 else if (ptr == &mons[PM_DEATH] && !rn2(10))
1428 pline_msg = "is busy reading a copy of Sandman #8.";
1430 pline_msg = "
\81u
\83T
\83\93\83h
\83}
\83\93\81v
\82Ì8
\8aª
\82ð
\93Ç
\82Þ
\82Ì
\82É
\96Z
\82µ
\82¢
\81D";
1433 verbl_msg = "Who do you think you are, War?";
1435 verbl_msg = "
\83E
\83H
\81[
\82æ
\81C
\8e©
\95ª
\82ª
\89½
\8eÒ
\82©
\8dl
\82¦
\82½
\82±
\82Æ
\82ª
\82 \82é
\82©
\81H";
1441 pline("%s %s", Monnam(mtmp), pline_msg);
1443 pline("%s
\82Í%s", Monnam(mtmp), pline_msg);
1444 else if (mtmp->mcan && verbl_msg_mcan)
1445 verbalize1(verbl_msg_mcan);
1446 else if (verbl_msg) {
1447 #if 0 /*JP*//*
\83f
\83X
\82ð
\93Á
\95Ê
\88µ
\82¢
\82µ
\82È
\82¢*/
1448 if (ptr == &mons[PM_DEATH]) {
1449 /* Death talks in CAPITAL LETTERS
1450 and without quotation marks */
1452 Sprintf(tmpbuf, "%s", verbl_msg);
1453 pline1(ucase(tmpbuf));
1455 verbalize1(verbl_msg);
1458 verbalize1(verbl_msg);
1481 if (is_silent(youmonst.data)) {
1483 pline("As %s, you cannot speak.", an(youmonst.data->mname));
1485 pline("
\82 \82È
\82½
\82Í%s
\82È
\82Ì
\82Å
\81C
\98b
\82·
\82±
\82Æ
\82ª
\82Å
\82«
\82È
\82¢
\81D", youmonst.data->mname);
1490 You_cant("speak. You're choking!");
1492 You("
\98b
\82¹
\82È
\82¢
\81D
\82 \82È
\82½
\82Í
\8eñ
\82ð
\8di
\82ß
\82ç
\82ê
\82Ä
\82¢
\82é
\81I");
1497 pline("They won't hear you out there.");
1499 You("
\8aO
\82Ö
\8cü
\82Á
\82Ä
\98b
\82ð
\82µ
\82½
\82ª
\81C
\92N
\82à
\95·
\82«
\82¢
\82ê
\82È
\82©
\82Á
\82½
\81D");
1504 Your("speech is unintelligible underwater.");
1506 pline("
\90\85\96Ê
\89º
\82Å
\82Í
\81C
\82 \82È
\82½
\82Ì
\98b
\82Í
\82ë
\82
\82É
\97\9d\89ð
\82³
\82ê
\82È
\82¢
\81D");
1511 pline("How can you hold a conversation when you cannot hear?");
1513 pline("
\95·
\82
\82±
\82Æ
\82ª
\82Å
\82«
\82È
\82¢
\82Ì
\82É
\82Ç
\82¤
\82â
\82Á
\82Ä
\89ï
\98b
\82·
\82é
\82Ì
\81H");
1517 if (!Blind && (otmp = shop_object(u.ux, u.uy)) != (struct obj *) 0) {
1518 /* standing on something in a shop and chatting causes the shopkeeper
1519 to describe the price(s). This can inhibit other chatting inside
1520 a shop, but that shouldn't matter much. shop_object() returns an
1521 object iff inside a shop and the shopkeeper is present and willing
1522 (not angry) and able (not asleep) to speak and the position
1523 contains any objects other than just gold.
1530 if (!getdir("Talk to whom? (in what direction)")) {
1532 if (!getdir("
\92N
\82Æ
\98b
\82µ
\82Ü
\82·
\82©
\81H[
\95û
\8cü
\82ð
\93ü
\82ê
\82Ä
\82Ë]")) {
1533 /* decided not to chat */
1537 if (u.usteed && u.dz > 0) {
1538 if (!u.usteed->mcanmove || u.usteed->msleeping) {
1540 pline("%s seems not to notice you.", Monnam(u.usteed));
1542 pline("%s
\82Í
\82 \82È
\82½
\82É
\8bC
\82ª
\82Â
\82¢
\82Ä
\82¢
\82È
\82¢
\82æ
\82¤
\82¾
\81D", Monnam(u.usteed));
1545 return domonnoise(u.usteed);
1550 pline("They won't hear you %s there.", u.dz < 0 ? "up" : "down");
1552 pline("%s
\8cü
\82©
\82Á
\82Ä
\98b
\82ð
\82µ
\82Ä
\82à
\88Ó
\96¡
\82ª
\82È
\82¢
\81D", u.dz < 0 ? "
\8fã
\82É" : "
\89º
\82É");
1556 if (u.dx == 0 && u.dy == 0) {
1558 * Let's not include this.
1559 * It raises all sorts of questions: can you wear
1560 * 2 helmets, 2 amulets, 3 pairs of gloves or 6 rings as a marilith,
1562 if (u.umonnum == PM_ETTIN) {
1563 You("discover that your other head makes boring conversation.");
1568 pline("Talking to yourself is a bad habit for a dungeoneer.");
1570 pline("
\88ê
\90l
\8c¾
\82Í
\96À
\8b{
\92T
\8c\9f\8eÒ
\82Ì
\88«
\82¢
\95È
\82¾
\81D");
1580 mtmp = m_at(tx, ty);
1582 if ((!mtmp || mtmp->mundetected)
1583 && (otmp = vobj_at(tx, ty)) != 0 && otmp->otyp == STATUE) {
1584 /* Talking to a statue */
1587 pline_The("%s seems not to notice you.",
1588 /* if hallucinating, you can't tell it's a statue */
1589 Hallucination ? rndmonnam((char *) 0) : "statue");
1591 pline_The("%s
\82Í
\82 \82È
\82½
\82É
\8bC
\82ª
\82Â
\82¢
\82Ä
\82¢
\82È
\82¢
\82æ
\82¤
\82¾
\81D",
1592 Hallucination ? rndmonnam((char *) 0) : "
\90Î
\91\9c");
1598 if (!mtmp || mtmp->mundetected || mtmp->m_ap_type == M_AP_FURNITURE
1599 || mtmp->m_ap_type == M_AP_OBJECT)
1602 /* sleeping monsters won't talk, except priests (who wake up) */
1603 if ((!mtmp->mcanmove || mtmp->msleeping) && !mtmp->ispriest) {
1604 /* If it is unseen, the player can't tell the difference between
1605 not noticing him and just not existing, so skip the message. */
1606 if (canspotmon(mtmp))
1608 pline("%s seems not to notice you.", Monnam(mtmp));
1610 pline("%s
\82Í
\82 \82È
\82½
\82É
\8bC
\82ª
\82Â
\82¢
\82Ä
\82¢
\82È
\82¢
\82æ
\82¤
\82¾
\81D", Monnam(mtmp));
1614 /* if this monster is waiting for something, prod it into action */
1615 mtmp->mstrategy &= ~STRAT_WAITMASK;
1617 if (mtmp->mtame && mtmp->meating) {
1618 if (!canspotmon(mtmp))
1619 map_invisible(mtmp->mx, mtmp->my);
1621 pline("%s is eating noisily.", Monnam(mtmp));
1623 pline("%s
\82Í
\83o
\83\8a\83o
\83\8a\82Æ
\95¨
\82ð
\90H
\82×
\82Ä
\82¢
\82é
\81D", Monnam(mtmp));
1627 return domonnoise(mtmp);
1632 extern void FDECL(play_usersound, (const char *, int));
1634 typedef struct audio_mapping_rec {
1635 struct nhregex *regex;
1638 struct audio_mapping_rec *next;
1641 static audio_mapping *soundmap = 0;
1643 char *sounddir = ".";
1645 /* adds a sound file mapping, returns 0 on failure, 1 on success */
1647 add_sound_mapping(mapping)
1648 const char *mapping;
1655 if (sscanf(mapping, "MESG \"%255[^\"]\"%*[\t ]\"%255[^\"]\" %d", text,
1656 filename, &volume) == 3) {
1657 audio_mapping *new_map;
1659 if (strlen(sounddir) + strlen(filename) > 254) {
1660 raw_print("sound file name too long");
1663 Sprintf(filespec, "%s/%s", sounddir, filename);
1665 if (can_read_file(filespec)) {
1666 new_map = (audio_mapping *) alloc(sizeof(audio_mapping));
1667 new_map->regex = regex_init();
1668 new_map->filename = dupstr(filespec);
1669 new_map->volume = volume;
1670 new_map->next = soundmap;
1672 if (!regex_compile(text, new_map->regex)) {
1673 raw_print(regex_error_desc(new_map->regex));
1674 regex_free(new_map->regex);
1675 free(new_map->filename);
1682 Sprintf(text, "cannot read %.243s", filespec);
1687 raw_print("syntax error in SOUND");
1695 play_sound_for_message(msg)
1698 audio_mapping *cursor = soundmap;
1701 if (regex_match(msg, cursor->regex)) {
1702 play_usersound(cursor->filename, cursor->volume);
1704 cursor = cursor->next;
1708 #endif /* USER_SOUNDS */