1 /* NetHack 3.6 sounds.c $NHDT-Date: 1542765362 2018/11/21 01:56:02 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.81 $ */
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-2019 */
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");
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)) {
215 const char *hair = body_part(HAIR); /* hair/fur/scales */
218 switch (rn2(2) + hallu) {
221 You("suddenly realize it is unnaturally quiet.");
223 You("
\95s
\8e©
\91R
\82È
\82
\82ç
\82¢
\90Ã
\82©
\82È
\82Ì
\82É
\8bC
\82Ã
\82¢
\82½
\81D");
227 pline_The("%s on the back of your %s %s up.", hair,
228 body_part(NECK), vtense(hair, "stand"));
230 pline("
\82 \82È
\82½
\82Ì%s
\82Ì
\82¤
\82µ
\82ë
\82Ì%s
\82ª
\8bt
\97§
\82Á
\82½
\81D",
231 body_part(NECK), body_part(HAIR));
236 pline_The("%s on your %s %s to stand up.", hair,
237 body_part(HEAD), vtense(hair, "seem"));
239 pline("
\82 \82È
\82½
\82Ì%s
\82Ì%s
\82Í
\8bt
\97§
\82Á
\82½
\81D",
240 body_part(HEAD), body_part(HAIR));
248 if (level.flags.has_barracks && !rn2(200)) {
249 static const char *const barracks_msg[4] = {
251 "blades being honed.", "loud snoring.", "dice being thrown.",
252 "General MacArthur!",
254 "
\90n
\95¨
\82ð
\8c¤
\82®
\89¹
\82ð
\95·
\82¢
\82½
\81D",
255 "
\91å
\82«
\82È
\82¢
\82Ñ
\82«
\82ð
\95·
\82¢
\82½
\81D",
256 "
\83_
\83C
\83X
\82ª
\90U
\82ç
\82ê
\82é
\89¹
\82ð
\95·
\82¢
\82½
\81D",
257 "
\83}
\83b
\83J
\81[
\83T
\81[
\8f«
\8cR
\82Ì
\90º
\82ð
\95·
\82¢
\82½
\81I",
262 for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) {
263 if (DEADMONSTER(mtmp))
265 if (is_mercenary(mtmp->data)
266 #if 0 /* don't bother excluding these */
267 && !strstri(mtmp->data->mname, "watch")
268 && !strstri(mtmp->data->mname, "guard")
270 && mon_in_room(mtmp, BARRACKS)
271 /* sleeping implies not-yet-disturbed (usually) */
272 && (mtmp->msleeping || ++count > 5)) {
273 You_hear1(barracks_msg[rn2(3) + hallu]);
278 if (level.flags.has_zoo && !rn2(200)) {
279 static const char *const zoo_msg[3] = {
281 "a sound reminiscent of an elephant stepping on a peanut.",
282 "a sound reminiscent of a seal barking.", "Doctor Dolittle!",
284 "
\8fÛ
\82ª
\83s
\81[
\83i
\83b
\83c
\82Ì
\8fã
\82Å
\97x
\82é
\82æ
\82¤
\82È
\89¹
\82ð
\95·
\82¢
\82½
\81D",
285 "
\83A
\83V
\83J
\82ª
\96i
\82¦
\82é
\82æ
\82¤
\82È
\89¹
\82ð
\95·
\82¢
\82½
\81D",
286 "
\83h
\83\8a\83g
\83\8b\90æ
\90¶
\82Ì
\90º
\82ð
\95·
\82¢
\82½
\81I",
289 for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) {
290 if (DEADMONSTER(mtmp))
292 if ((mtmp->msleeping || is_animal(mtmp->data))
293 && mon_in_room(mtmp, ZOO)) {
294 You_hear1(zoo_msg[rn2(2) + hallu]);
299 if (level.flags.has_shop && !rn2(200)) {
300 if (!(sroom = search_special(ANY_SHOP))) {
302 level.flags.has_shop = 0;
305 if (tended_shop(sroom)
306 && !index(u.ushops, (int) (ROOM_INDEX(sroom) + ROOMOFFSET))) {
307 static const char *const shop_msg[3] = {
309 "someone cursing shoplifters.",
310 "the chime of a cash register.", "Neiman and Marcus arguing!",
312 "
\92N
\82©
\82ª
\93D
\96_
\82ð
\82Ì
\82Ì
\82µ
\82é
\90º
\82ð
\95·
\82¢
\82½
\81D",
313 "
\83\8c\83W
\82Ì
\83`
\81[
\83\93\82Æ
\82¢
\82¤
\89¹
\82ð
\95·
\82¢
\82½
\81D",
314 "
\83C
\83g
\81[
\82Æ
\83\88\81[
\83J
\83h
\81[
\82Ì
\8bc
\98_
\82ð
\95·
\82¢
\82½
\81I",
317 You_hear1(shop_msg[rn2(2) + hallu]);
321 if (level.flags.has_temple && !rn2(200)
322 && !(Is_astralevel(&u.uz) || Is_sanctum(&u.uz))) {
323 for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) {
324 if (DEADMONSTER(mtmp))
326 if (mtmp->ispriest && inhistemple(mtmp)
327 /* priest must be active */
328 && mtmp->mcanmove && !mtmp->msleeping
329 /* hero must be outside this temple */
330 && temple_occupied(u.urooms) != EPRI(mtmp)->shroom)
334 /* Generic temple messages; no attempt to match topic or tone
335 to the pantheon involved, let alone to the specific deity.
336 These are assumed to be coming from the attending priest;
337 asterisk means that the priest must be capable of speech;
338 pound sign (octathorpe,&c--don't go there) means that the
339 priest and the altar must not be directly visible (we don't
340 care if telepathy or extended detection reveals that the
341 priest is not currently standing on the altar; he's mobile). */
342 static const char *const temple_msg[] = {
344 "*someone praising %s.", "*someone beseeching %s.",
345 "#an animal carcass being offered in sacrifice.",
346 "*a strident plea for donations.",
348 "*
\92N
\82©
\82ª%s
\82ð
\8e^
\94ü
\82µ
\82Ä
\82¢
\82é
\82Ì
\82ð
\95·
\82¢
\82½
\81D",
349 "*
\92N
\82©
\82ª%s
\82ð
\94M
\96]
\82µ
\82Ä
\82¢
\82é
\82Ì
\82ð
\95·
\82¢
\82½
\81D",
350 "#
\93®
\95¨
\82Ì
\8e\80\91Ì
\82ð
\90¶
\82¯æÑ
\82É
\95ù
\82°
\82é
\90º
\82ð
\95·
\82¢
\82½
\81D",
351 "*
\8e·
\9dX
\82É
\8añ
\95t
\82ð
\97v
\8b\81\82µ
\82Ä
\82¢
\82é
\82Ì
\82ð
\95·
\82¢
\82½
\81D",
355 int trycount = 0, ax = EPRI(mtmp)->shrpos.x,
356 ay = EPRI(mtmp)->shrpos.y;
357 boolean speechless = (mtmp->data->msound <= MS_ANIMAL),
358 in_sight = canseemon(mtmp) || cansee(ax, ay);
361 msg = temple_msg[rn2(SIZE(temple_msg) - 1 + hallu)];
362 if (index(msg, '*') && speechless)
364 if (index(msg, '#') && in_sight)
366 break; /* msg is acceptable */
367 } while (++trycount < 50);
368 while (!letter(*msg))
369 ++msg; /* skip control flags */
371 You_hear(msg, halu_gname(EPRI(mtmp)->shralign));
377 if (Is_oracle_level(&u.uz) && !rn2(400)) {
378 /* make sure the Oracle is still here */
379 for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) {
380 if (DEADMONSTER(mtmp))
382 if (mtmp->data == &mons[PM_ORACLE])
385 /* and don't produce silly effects when she's clearly visible */
386 if (mtmp && (hallu || !canseemon(mtmp))) {
387 static const char *const ora_msg[5] = {
389 "a strange wind.", /* Jupiter at Dodona */
390 "convulsive ravings.", /* Apollo at Delphi */
391 "snoring snakes.", /* AEsculapius at Epidaurus */
392 "someone say \"No more woodchucks!\"",
393 "a loud ZOT!" /* both rec.humor.oracle */
395 "
\8aï
\96
\82È
\95\97\82Ì
\89¹
\82ð
\95·
\82¢
\82½
\81D",
396 "
\94¼
\8b¶
\97\90\82Ì
\90º
\82ð
\95·
\82¢
\82½
\81D",
397 "
\8eÖ
\82Ì
\82¢
\82Ñ
\82«
\82ð
\95·
\82¢
\82½
\81D",
398 "
\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",
399 "
\91å
\82«
\82È
\82y
\82n
\82s
\82ð
\95·
\82¢
\82½
\81I"
402 You_hear1(ora_msg[rn2(3) + hallu * 2]);
408 static const char *const h_sounds[] = {
410 "beep", "boing", "sing", "belche", "creak", "cough",
411 "rattle", "ululate", "pop", "jingle", "sniffle", "tinkle",
412 "eep", "clatter", "hum", "sizzle", "twitter", "wheeze",
413 "rustle", "honk", "lisp", "yodel", "coo", "burp",
414 "moo", "boom", "murmur", "oink", "quack", "rumble",
415 "twang", "bellow", "toot", "gargle", "hoot", "warble"
417 "
\83s
\81[
\83b
\82Æ
\96Â
\82¢
\82½",
418 "
\91\9b\82¬
\82½
\82Ä
\82½",
420 "
\82°
\82Á
\82Õ
\82ð
\82µ
\82½",
421 "
\83L
\81[
\83L
\81[
\82Æ
\96Â
\82¢
\82½",
422 "
\82¹
\82«
\8d\9e\82ñ
\82¾",
424 "
\83J
\83^
\83J
\83^
\96Â
\82Á
\82½",
425 "
\83E
\83H
\83\93\83E
\83H
\83\93\96Â
\82¢
\82½",
426 "
\83|
\83\93\82Æ
\96Â
\82Á
\82½",
427 "
\83`
\83\83\83\8a\83\93\82Æ
\96Â
\82Á
\82½",
428 "
\83N
\83\93\83N
\83\93\96Â
\82¢
\82½",
429 "
\83`
\83\8a\83\93\83`
\83\8a\83\93\82Æ
\96Â
\82Á
\82½",
431 "
\83C
\81[
\83b
\82Æ
\96Â
\82¢
\82½",
432 "
\83J
\83`
\83\83\83J
\83`
\83\83\89¹
\82ð
\97§
\82Ä
\82½",
433 "
\83n
\83~
\83\93\83O
\82µ
\82½",
434 "
\83W
\83\85\81[
\83b
\82Æ
\89¹
\82ð
\97§
\82Ä
\82½",
435 "
\83s
\83\88\83s
\83\88\96Â
\82¢
\82½",
436 "
\83[
\83C
\83[
\83C
\91§
\82ð
\82µ
\82½",
438 "
\83J
\83T
\83J
\83T
\89¹
\82ð
\97§
\82Ä
\82½",
439 "
\8cx
\93J
\82ð
\96Â
\82ç
\82µ
\82½",
440 "
\90ã
\91«
\82ç
\82¸
\82É
\82µ
\82á
\82×
\82Á
\82½",
441 "
\83\88\81[
\83f
\83\8b\82ð
\89Ì
\82Á
\82½",
442 "
\83N
\81[
\83N
\81[
\96Â
\82¢
\82½",
443 "
\82°
\82Á
\82Õ
\82ð
\82µ
\82½",
445 "
\83\82\81[
\82Æ
\96Â
\82¢
\82½",
446 "
\94\9a\94
\89¹
\82ð
\8b¿
\82©
\82¹
\82½",
447 "
\83u
\83c
\83u
\83c
\82Â
\82Ô
\82â
\82¢
\82½",
448 "
\83u
\81[
\83u
\81[
\96Â
\82¢
\82½",
449 "
\83N
\83\8f\83b
\83N
\83\8f\83b
\82Æ
\96Â
\82¢
\82½",
450 "
\83S
\83\8d\83S
\83\8d\96Â
\82Á
\82½",
452 "
\83|
\83\8d\83\8d\83\93\82Æ
\96Â
\82Á
\82½",
454 "
\83\89\83b
\83p
\82Ì
\89¹
\82ð
\96Â
\82ç
\82µ
\82½",
455 "
\83K
\83\89\83K
\83\89\90º
\82ð
\8fo
\82µ
\82½",
456 "
\83z
\81[
\83z
\81[
\96Â
\82¢
\82½",
457 "
\82³
\82¦
\82¸
\82Á
\82½"
463 register struct monst *mtmp;
467 switch (mtmp->data->msound) {
473 ret = "
\83V
\81[
\83b
\82Æ
\96Â
\82¢
\82½";
480 ret = "
\82Í
\82°
\82µ
\82
\96i
\82¦
\82½";
486 ret = "
\96i
\82¦
\82½";
492 ret = "
\83u
\81[
\83b
\82Æ
\96Â
\82¢
\82½";
498 ret = "
\83L
\81[
\83L
\81[
\96Â
\82¢
\82½";
504 ret = "
\8bà
\90Ø
\82è
\90º
\82ð
\97§
\82Ä
\82½";
510 ret = "
\82¢
\82È
\82È
\82¢
\82½";
516 ret = "
\94ß
\82µ
\82
\96Â
\82¢
\82½";
522 ret = "
\8b»
\95±
\82µ
\82½";
528 ret = "
\8bà
\90Ø
\82è
\90º
\82ð
\82 \82°
\82½";
533 /* the sounds of a seriously abused pet, including player attacking it */
536 register struct monst *mtmp;
538 register const char *growl_verb = 0;
540 if (mtmp->msleeping || !mtmp->mcanmove || !mtmp->data->msound)
543 /* presumably nearness and soundok checks have already been made */
545 growl_verb = h_sounds[rn2(SIZE(h_sounds))];
547 growl_verb = growl_sound(mtmp);
550 pline("%s %s!", Monnam(mtmp), vtense((char *) 0, growl_verb));
552 pline("%s
\82Í%s
\81I", Monnam(mtmp), growl_verb);
555 wake_nearto(mtmp->mx, mtmp->my, mtmp->data->mlevel * 18);
559 /* the sounds of mistreated pets */
562 register struct monst *mtmp;
564 register const char *yelp_verb = 0;
566 if (mtmp->msleeping || !mtmp->mcanmove || !mtmp->data->msound)
569 /* presumably nearness and soundok checks have already been made */
571 yelp_verb = h_sounds[rn2(SIZE(h_sounds))];
573 switch (mtmp->data->msound) {
576 yelp_verb = (!Deaf) ? "yowl" : "arch";
578 yelp_verb = (!Deaf) ? "
\94ß
\82µ
\82
\96Â
\82¢
\82½" : "arch";
583 yelp_verb = (!Deaf) ? "yelp" : "recoil";
585 yelp_verb = (!Deaf) ? "
\83L
\83\83\83\93\83L
\83\83\83\93\96Â
\82¢
\82½" : "
\90K
\8d\9e\82Ý
\82µ
\82½";
589 yelp_verb = (!Deaf) ? "snarl" : "bluff";
591 yelp_verb = (!Deaf) ? "
\82¤
\82È
\82Á
\82½" : "
\82â
\82¹
\89ä
\96\9d\82µ
\82½";
595 yelp_verb = (!Deaf) ? "squeal" : "quiver";
597 yelp_verb = (!Deaf) ? "
\83L
\81[
\83L
\81[
\96Â
\82¢
\82½" : "
\90k
\82¦
\82½";
601 yelp_verb = (!Deaf) ? "screak" : "thrash";
603 yelp_verb = (!Deaf) ? "
\8bà
\90Ø
\82è
\90º
\82ð
\97§
\82Ä
\82½" : "
\82Ì
\82½
\82¤
\82¿
\89ñ
\82Á
\82½";
607 yelp_verb = (!Deaf) ? "wail" : "cringe";
609 yelp_verb = (!Deaf) ? "
\94ß
\82µ
\82
\96Â
\82¢
\82½" : "
\90g
\82ð
\82·
\82
\82ß
\82½";
614 pline("%s %s!", Monnam(mtmp), vtense((char *) 0, yelp_verb));
616 pline("%s
\82Í%s
\81I", Monnam(mtmp), yelp_verb);
619 wake_nearto(mtmp->mx, mtmp->my, mtmp->data->mlevel * 12);
623 /* the sounds of distressed pets */
626 register struct monst *mtmp;
628 register const char *whimper_verb = 0;
630 if (mtmp->msleeping || !mtmp->mcanmove || !mtmp->data->msound)
633 /* presumably nearness and soundok checks have already been made */
635 whimper_verb = h_sounds[rn2(SIZE(h_sounds))];
637 switch (mtmp->data->msound) {
641 whimper_verb = "whimper";
643 whimper_verb = "
\83N
\83\93\83N
\83\93\96Â
\82¢
\82½";
647 whimper_verb = "whine";
649 whimper_verb = "
\83N
\81[
\83\93\82Æ
\96Â
\82¢
\82½";
653 whimper_verb = "squeal";
655 whimper_verb = "
\83L
\81[
\83L
\81[
\96Â
\82¢
\82½";
660 pline("%s %s.", Monnam(mtmp), vtense((char *) 0, whimper_verb));
662 pline("%s
\82Í%s
\81D", Monnam(mtmp), whimper_verb);
665 wake_nearto(mtmp->mx, mtmp->my, mtmp->data->mlevel * 6);
669 /* pet makes "I'm hungry" noises */
672 register struct monst *mtmp;
674 if (mtmp->msleeping || !mtmp->mcanmove
675 || !(carnivorous(mtmp->data) || herbivorous(mtmp->data)))
678 /* presumably nearness and soundok checks have already been made */
679 if (!is_silent(mtmp->data) && mtmp->data->msound <= MS_ANIMAL)
680 (void) domonnoise(mtmp);
681 else if (mtmp->data->msound >= MS_HUMANOID) {
682 if (!canspotmon(mtmp))
683 map_invisible(mtmp->mx, mtmp->my);
685 verbalize("I'm hungry.");
687 verbalize("
\82Í
\82ç
\82Ø
\82±
\82¾
\81D");
691 /* return True if mon is a gecko or seems to look like one (hallucination) */
698 /* return True if it is actually a gecko */
699 if (mon->data == &mons[PM_GECKO])
701 /* return False if it is a long worm; we might be chatting to its tail
702 (not strictly needed; long worms are MS_SILENT so won't get here) */
703 if (mon->data == &mons[PM_LONG_WORM])
705 /* result depends upon whether map spot shows a gecko, which will
706 be due to hallucination or to mimickery since mon isn't one */
707 glyph = glyph_at(mon->mx, mon->my);
708 return (boolean) (glyph_to_mon(glyph) == PM_GECKO);
713 register struct monst *mtmp;
716 register const char *pline_msg = 0, /* Monnam(mtmp) will be prepended */
717 *verbl_msg = 0, /* verbalize() */
718 *verbl_msg_mcan = 0; /* verbalize() if cancelled */
719 struct permonst *ptr = mtmp->data;
720 int msound = ptr->msound;
722 /* presumably nearness and sleep checks have already been made */
728 /* leader might be poly'd; if he can still speak, give leader speech */
729 if (mtmp->m_id == quest_status.leader_m_id && msound > MS_ANIMAL)
731 /* make sure it's your role's quest guardian; adjust if not */
732 else if (msound == MS_GUARDIAN && ptr != &mons[urole.guardnum])
733 msound = mons[genus(monsndx(ptr), 1)].msound;
734 /* some normally non-speaking types can/will speak if hero is similar */
735 else if (msound == MS_ORC /* note: MS_ORC is same as MS_GRUNT */
736 && (same_race(ptr, youmonst.data) /* current form, */
737 || same_race(ptr, &mons[Race_switch]))) /* unpoly'd form */
738 msound = MS_HUMANOID;
739 /* silliness, with slight chance to interfere with shopping */
740 else if (Hallucination && mon_is_gecko(mtmp))
743 /* be sure to do this before talking; the monster might teleport away, in
744 * which case we want to check its pre-teleport position
746 if (!canspotmon(mtmp))
747 map_invisible(mtmp->mx, mtmp->my);
751 return doconsult(mtmp);
760 case MS_SELL: /* pitch, pay, total */
761 if (!Hallucination || (mtmp->isshk && !rn2(2))) {
764 /* approximation of GEICO's advertising slogan (it actually
765 concludes with "save you 15% or more on car insurance.") */
767 Sprintf(verbuf, "15 minutes could save you 15 %s.",
769 Sprintf(verbuf, "15
\95ª
\92¸
\82¯
\82ê
\82Î15%s
\90ß
\96ñ
\82Å
\82«
\82Ü
\82·
\81D",
770 currency(15L)); /* "zorkmids" */
775 /* vampire messages are varied by tameness, peacefulness, and time of
777 boolean isnight = night();
778 boolean kindred = (Upolyd && (u.umonnum == PM_VAMPIRE
779 || u.umonnum == PM_VAMPIRE_LORD));
781 (Upolyd && (u.umonnum == PM_WOLF || u.umonnum == PM_WINTER_WOLF
782 || u.umonnum == PM_WINTER_WOLF_CUB));
784 const char *racenoun =
785 (flags.female && urace.individual.f)
787 : (urace.individual.m) ? urace.individual.m : urace.noun;
789 const char *racenoun = (flags.female) ? "
\82 \82È
\82½" : "
\82¨
\82Ü
\82¦" ;
795 Sprintf(verbuf, "Good %s to you Master%s",
796 isnight ? "evening" : "day",
797 isnight ? "!" : ". Why do we not rest?");
799 Sprintf(verbuf, "
\82²
\8eå
\90l
\97l
\81C%s%s",
800 isnight ? "
\82±
\82ñ
\82Î
\82ñ
\82Í" : "
\82±
\82ñ
\82É
\82¿
\82Í",
801 isnight ? "!" : "
\81D
\82¨
\8bx
\82Ý
\82É
\82È
\82è
\82Ü
\82¹
\82ñ
\82©
\81H");
806 Sprintf(verbuf, "%s%s",
807 nightchild ? "Child of the night, " : "",
809 ? "I can stand this craving no longer!"
811 ? "I beg you, help me satisfy this growing craving!"
812 : "I find myself growing a little weary.");
814 Sprintf(verbuf,"%s%s",
815 nightchild ? "
\96é
\82Ì
\8ee
\82æ
\81C" : "",
817 ? "
\8e\84\82Í
\82±
\82ê
\88È
\8fã
\8a\89\96]
\82ð
\97}
\82¦
\82ç
\82ê
\82È
\82¢
\81I"
819 ? "
\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"
820 : "
\8e\84\82Í
\8f
\81X
\94æ
\82ê
\82½
\82æ
\82¤
\82¾
\81D");
824 } else if (mtmp->mpeaceful) {
825 if (kindred && isnight) {
827 Sprintf(verbuf, "Good feeding %s!",
828 flags.female ? "sister" : "brother");
830 Sprintf(verbuf, "
\82æ
\82¤
\8cZ
\92í
\81I");
833 } else if (nightchild && isnight) {
835 Sprintf(verbuf, "How nice to hear you, child of the night!");
837 Sprintf(verbuf, "
\96é
\82Ì
\8ee
\82æ
\81C
\8c³
\8bC
\82»
\82¤
\82¾
\82È
\81I");
841 verbl_msg = "I only drink... potions.";
843 verbl_msg = "
\8e\84\82Í
\96ò
\81D
\81D
\82µ
\82©
\88ù
\82Ü
\82È
\82¢
\81D";
846 static const char *const vampmsg[] = {
847 /* These first two (0 and 1) are specially handled below */
849 "I vant to suck your %s!",
851 "
\82¨
\91O
\82Ì%s
\82ð
\82æ
\82±
\82¹
\81I",
853 "I vill come after %s without regret!",
855 "
\91¶
\95ª
\82É%s
\82ð
\92Ç
\8c\82\82³
\82¹
\82Ä
\82à
\82ç
\82¨
\82¤
\81I",
856 /* other famous vampire quotes can follow here if desired */
861 "This is my hunting ground that you dare to prowl!";
863 "
\82¨
\82Ü
\82¦
\82ª
\82¤
\82ë
\82Â
\82¢
\82Ä
\82¢
\82é
\82±
\82Ì
\82 \82½
\82è
\82Í
\8e\84\82Ì
\8eë
\8fê
\82¾
\81I";
864 else if (youmonst.data == &mons[PM_SILVER_DRAGON]
865 || youmonst.data == &mons[PM_BABY_SILVER_DRAGON]) {
866 /* Silver dragons are silver in color, not made of silver */
868 Sprintf(verbuf, "%s! Your silver sheen does not frighten me!",
869 youmonst.data == &mons[PM_SILVER_DRAGON]
874 verbl_msg = "
\82Î
\82©
\82ß
\81I
\82¨
\82Ü
\82¦
\82Ì
\8bâ
\82Ì
\8bP
\82«
\82È
\82Ç
\95|
\82
\82È
\82¢
\82¼
\81I";
877 vampindex = rn2(SIZE(vampmsg));
878 if (vampindex == 0) {
879 Sprintf(verbuf, vampmsg[vampindex], body_part(BLOOD));
881 } else if (vampindex == 1) {
882 Sprintf(verbuf, vampmsg[vampindex],
883 Upolyd ? an(mons[u.umonnum].mname)
887 verbl_msg = vampmsg[vampindex];
892 if (flags.moonphase == FULL_MOON && (night() ^ !rn2(13))) {
894 pline("%s throws back %s head and lets out a blood curdling %s!",
895 Monnam(mtmp), mhis(mtmp),
896 ptr == &mons[PM_HUMAN_WERERAT] ? "shriek" : "howl");
898 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",
900 ptr == &mons[PM_HUMAN_WERERAT] ? "
\8bà
\90Ø
\82è
\90º" : "
\99ô
\9aK");
902 wake_nearto(mtmp->mx, mtmp->my, 11 * 11);
906 "whispers inaudibly. All you can make out is \"moon\".";
908 "
\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";
911 if (flags.moonphase == FULL_MOON && night()) {
913 pline_msg = "howls.";
915 pline_msg = "
\96i
\82¦
\82½
\81D";
916 } else if (mtmp->mpeaceful) {
918 && (mtmp->mconf || mtmp->mflee || mtmp->mtrapped
919 || moves > EDOG(mtmp)->hungrytime || mtmp->mtame < 5))
921 pline_msg = "whines.";
923 pline_msg = "
\83N
\83\93\83N
\83\93\96Â
\82¢
\82½
\81D";
924 else if (mtmp->mtame && EDOG(mtmp)->hungrytime > moves + 1000)
928 pline_msg = "
\83L
\83\83\83\93\83L
\83\83\83\93\96Â
\82¢
\82½
\81D";
931 != &mons[PM_DINGO]) /* dingos do not actually bark */
933 pline_msg = "barks.";
935 pline_msg = "
\83\8f\83\93\83\8f\83\93\96i
\82¦
\82½
\81D";
939 pline_msg = "growls.";
941 pline_msg = "
\82¤
\82È
\82Á
\82½
\81D";
946 if (mtmp->mconf || mtmp->mflee || mtmp->mtrapped
949 pline_msg = "yowls.";
951 pline_msg = "
\94ß
\82µ
\82
\96Â
\82¢
\82½
\81D";
952 else if (moves > EDOG(mtmp)->hungrytime)
954 pline_msg = "meows.";
956 pline_msg = "
\83j
\83\83\81[
\83\93\82Æ
\96Â
\82¢
\82½
\81D";
957 else if (EDOG(mtmp)->hungrytime > moves + 1000)
959 pline_msg = "purrs.";
961 pline_msg = "
\83S
\83\8d\83S
\83\8d\82Æ
\96Â
\82¢
\82½
\81D";
966 pline_msg = "
\83j
\83\83\81[
\83j
\83\83\81[
\96Â
\82¢
\82½
\81D";
972 pline_msg = mtmp->mpeaceful ? "snarls." : "growls!";
974 pline_msg = mtmp->mpeaceful ? "
\82¤
\82È
\82Á
\82½
\81D" : "
\8c\83\82µ
\82
\82¤
\82È
\82Á
\82½
\81I";
978 pline_msg = mtmp->mpeaceful ? "snarls." : "roars!";
980 pline_msg = mtmp->mpeaceful ? "
\82¤
\82È
\82Á
\82½
\81D" : "
\82Æ
\82Ä
\82à
\8c\83\82µ
\82
\96i
\82¦
\82½
\81I";
984 pline_msg = "squeaks.";
986 pline_msg = "
\83L
\81[
\83L
\81[
\96Â
\82¢
\82½
\81D";
989 if (ptr == &mons[PM_RAVEN] && !mtmp->mpeaceful)
991 verbl_msg = "Nevermore!";
993 verbl_msg = "
\81u
\82à
\82¤
\93ñ
\93x
\82Æ
\81I
\81v";
996 pline_msg = "squawks.";
998 pline_msg = "
\83L
\81[
\83L
\81[
\96Â
\82¢
\82½
\81D";
1001 if (!mtmp->mpeaceful)
1003 pline_msg = "hisses!";
1005 pline_msg = "
\83V
\81[
\83b
\82Æ
\96Â
\82¢
\82½
\81I";
1007 return 0; /* no sound */
1011 pline_msg = mtmp->mpeaceful ? "drones." : "buzzes angrily.";
1013 pline_msg = mtmp->mpeaceful ? "
\82Ô
\81[
\82ñ
\82Æ
\96Â
\82Á
\82½
\81D" : "
\82Ô
\82ñ
\82Ô
\82ñ
\96Â
\82Á
\82½
\81D";
1017 pline_msg = "grunts.";
1019 pline_msg = "
\82Ô
\81[
\82Ô
\81[
\96Â
\82¢
\82½
\81D";
1022 if (mtmp->mtame < 5)
1024 pline_msg = "neighs.";
1026 pline_msg = "
\82¢
\82È
\82È
\82¢
\82½
\81D";
1027 else if (moves > EDOG(mtmp)->hungrytime)
1029 pline_msg = "whinnies.";
1031 pline_msg = "
\83q
\83q
\81[
\83\93\82Æ
\96Â
\82¢
\82½
\81D";
1034 pline_msg = "whickers.";
1036 pline_msg = "
\83q
\83q
\83q
\81[
\83\93\82Æ
\96Â
\82¢
\82½
\81D";
1040 pline_msg = "wails mournfully.";
1042 pline_msg = "
\94ß
\82µ
\82°
\82É
\96Â
\82¢
\82½
\81D";
1046 pline_msg = "gurgles.";
1048 pline_msg = "
\82²
\82ë
\82²
\82ë
\8dA
\82ð
\96Â
\82ç
\82µ
\82½
\81D";
1052 pline_msg = "burbles.";
1054 pline_msg = "
\82Ø
\82¿
\82á
\82
\82¿
\82á
\82µ
\82á
\82×
\82Á
\82½
\81D";
1058 pline_msg = "shrieks.";
1060 pline_msg = "
\8bà
\90Ø
\82è
\90º
\82ð
\82 \82°
\82½
\81D";
1065 pline_msg = "imitates you.";
1067 pline_msg = "
\82 \82È
\82½
\82Ì
\90^
\8e\97\82ð
\82µ
\82½
\81D";
1071 pline("%s rattles noisily.", Monnam(mtmp));
1073 pline("%s
\82Í
\83P
\83^
\83P
\83^
\82Æ
\8fÎ
\82¢
\82¾
\82µ
\82½
\81D",Monnam(mtmp));
1075 You("freeze for a moment.");
1077 You("
\88ê
\8fu
\93\80\82è
\82Â
\82¢
\82½
\81D");
1080 multi_reason = "scared by rattling";
1082 multi_reason = "
\8d\9c\82Ì
\83J
\83^
\83J
\83^
\8c¾
\82¤
\89¹
\82É
\82¨
\82Ñ
\82¦
\82½
\8c\84\82É";
1086 static const char *const laugh_msg[4] = {
1088 "giggles.", "chuckles.", "snickers.", "laughs.",
1090 "
\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",
1092 pline_msg = laugh_msg[rn2(4)];
1096 pline_msg = "mumbles incomprehensibly.";
1098 pline_msg = "
\95s
\89Â
\89ð
\82È
\8c¾
\97t
\82ð
\82Â
\82Ô
\82â
\82¢
\82½
\81D";
1103 verbl_msg = "Sorry, I'm all out of wishes.";
1105 verbl_msg = "
\8e\84\82ð
\8f\95\82¯
\82Ä
\82
\82ê
\82½
\82±
\82Æ
\82ð
\8a´
\8eÓ
\82·
\82é
\81I";
1106 } else if (mtmp->mpeaceful) {
1107 if (ptr == &mons[PM_WATER_DEMON])
1109 pline_msg = "gurgles.";
1111 pline_msg = "
\83S
\83{
\83S
\83{
\83S
\83{
\83S
\83{
\81D";
1114 verbl_msg = "I'm free!";
1116 verbl_msg = "
\82â
\82Á
\82Æ
\8e©
\97R
\82É
\82È
\82Á
\82½
\81I";
1118 if (ptr != &mons[PM_PRISONER])
1120 verbl_msg = "This will teach you not to disturb me!";
1122 verbl_msg = "
\82¶
\82á
\82Ü
\82ð
\82µ
\82È
\82¢
\82Å
\82
\82ê
\81I";
1125 verbl_msg = "??????????";
1129 case MS_BOAST: /* giants */
1130 if (!mtmp->mpeaceful) {
1134 pline("%s boasts about %s gem collection.", Monnam(mtmp),
1137 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));
1142 pline_msg = "complains about a diet of mutton.";
1144 pline_msg = "
\96\88\93ú
\97r
\82Î
\82©
\82è
\90H
\82×
\82Ä
\82¢
\82é
\8e\96\82ð
\8bð
\92s
\82Á
\82½
\81D";
1148 pline_msg = "shouts \"Fee Fie Foe Foo!\" and guffaws.";
1150 pline_msg = "
\81w
\82í
\82Á
\82Í
\82Á
\82Í
\82Á
\82Í
\81I
\81x
\82Æ
\82Î
\82©
\8fÎ
\82¢
\82µ
\82½
\81D";
1151 wake_nearto(mtmp->mx, mtmp->my, 7 * 7);
1158 if (!mtmp->mpeaceful) {
1159 if (In_endgame(&u.uz) && is_mplayer(ptr))
1163 pline_msg = "threatens you.";
1165 pline_msg = "
\82 \82È
\82½
\82ð
\88Ð
\8ad
\82µ
\82½
\81D";
1168 /* Generic peaceful humanoid behaviour. */
1171 pline_msg = "wants nothing to do with you.";
1173 pline_msg = "
\82 \82È
\82½
\82Æ
\8aÖ
\82í
\82è
\82½
\82
\82È
\82¢
\82æ
\82¤
\82¾
\81D";
1174 else if (mtmp->mhp < mtmp->mhpmax / 4)
1176 pline_msg = "moans.";
1178 pline_msg = "
\82¤
\82ß
\82«
\90º
\82ð
\82 \82°
\82½
\81D";
1179 else if (mtmp->mconf || mtmp->mstun)
1181 verbl_msg = !rn2(3) ? "Huh?" : rn2(2) ? "What?" : "Eh?";
1183 verbl_msg = !rn2(3) ? "
\82Ö
\81H" : rn2(2) ? "
\89½
\81H" : "
\82¦
\81H";
1184 else if (!mtmp->mcansee)
1186 verbl_msg = "I can't see!";
1188 verbl_msg = "
\89½
\82à
\8c©
\82¦
\82È
\82¢
\81I";
1189 else if (mtmp->mtrapped) {
1190 struct trap *t = t_at(mtmp->mx, mtmp->my);
1195 verbl_msg = "I'm trapped!";
1197 verbl_msg = "ã©
\82É
\82Í
\82Ü
\82Á
\82Ä
\82µ
\82Ü
\82Á
\82½
\81I";
1198 } else if (mtmp->mhp < mtmp->mhpmax / 2)
1200 pline_msg = "asks for a potion of healing.";
1202 pline_msg = "
\89ñ
\95\9c\82Ì
\96ò
\82ð
\8e\9d\82Á
\82Ä
\82È
\82¢
\82©
\90q
\82Ë
\82½
\81D";
1203 else if (mtmp->mtame && !mtmp->isminion
1204 && moves > EDOG(mtmp)->hungrytime)
1206 verbl_msg = "I'm hungry.";
1208 verbl_msg = "
\95 \82ª
\8c¸
\82Á
\82½
\82È
\81D";
1209 /* Specific monsters' interests */
1210 else if (is_elf(ptr))
1212 pline_msg = "curses orcs.";
1214 pline_msg = "
\83I
\81[
\83N
\82ð
\8eô
\82Á
\82½
\81D";
1215 else if (is_dwarf(ptr))
1217 pline_msg = "talks about mining.";
1219 pline_msg = "
\8dÌ
\8c@
\82É
\82Â
\82¢
\82Ä
\98b
\82µ
\82½
\81D";
1220 else if (likes_magic(ptr))
1222 pline_msg = "talks about spellcraft.";
1224 pline_msg = "
\96\82\8fp
\82Ì
\92b
\98B
\82É
\82Â
\82¢
\82Ä
\98b
\82µ
\82½
\81D";
1225 else if (ptr->mlet == S_CENTAUR)
1227 pline_msg = "discusses hunting.";
1229 pline_msg = "
\97Â
\82É
\82Â
\82¢
\82Ä
\8bc
\98_
\82µ
\82½
\81D";
1231 switch (monsndx(ptr)) {
1234 (mtmp->mhpmax - mtmp->mhp >= 10)
1236 ? "complains about unpleasant dungeon conditions."
1238 ? "
\95s
\96ù
\89õ
\82È
\96À
\8b{
\82Ì
\8fó
\91Ô
\82É
\82Â
\82¢
\82Ä
\95s
\96\9e\82ð
\8fq
\82×
\82½
\81D"
1240 : "asks you about the One Ring.";
1242 : "
\81u
\88ê
\82Â
\82Ì
\8ew
\97Ö
\81v
\82É
\82Â
\82¢
\82Ä
\90q
\82Ë
\82½
\81D";
1244 case PM_ARCHEOLOGIST:
1247 "describes a recent article in \"Spelunker Today\" magazine.";
1249 "
\81u
\93ú
\8a§
\93´
\8cA
\81v
\82Ì
\8dÅ
\90V
\82Ì
\8bL
\8e\96\82ð
\8e·
\95M
\82µ
\82Ä
\82¢
\82é
\81D";
1253 verbl_msg = "Aloha.";
1255 verbl_msg = "
\83A
\83\8d\81[
\83n
\81D";
1259 pline_msg = "discusses dungeon exploration.";
1261 pline_msg = "
\96À
\8b{
\92T
\8c\9f\82É
\82Â
\82¢
\82Ä
\8bc
\98_
\82µ
\82½
\81D";
1268 if (SYSOPT_SEDUCE) {
1269 if (ptr->mlet != S_NYMPH
1270 && could_seduce(mtmp, &youmonst, (struct attack *) 0) == 1) {
1271 (void) doseduce(mtmp);
1274 swval = ((poly_gender() != (int) mtmp->female) ? rn2(3) : 0);
1276 swval = ((poly_gender() == 0) ? rn2(3) : 0);
1280 verbl_msg = "Hello, sailor.";
1282 switch (poly_gender()) {
1284 verbl_msg = "
\82±
\82ñ
\82É
\82¿
\82Í
\81D
\82 \82ç
\82¢
\82¢
\92j
\82Ë
\81D";
1287 verbl_msg = "
\82±
\82ñ
\82É
\82¿
\82Í
\81C
\82¨
\8fì
\82³
\82ñ
\81D";
1290 verbl_msg = "
\82±
\82ñ
\82É
\82¿
\82Í
\81D";
1297 pline_msg = "comes on to you.";
1299 pline_msg = "
\82 \82È
\82½
\82Ì
\82Ù
\82¤
\82Ö
\82â
\82Á
\82Ä
\82«
\82½
\81D";
1303 pline_msg = "cajoles you.";
1305 pline_msg = "
\82 \82È
\82½
\82ð
\82¨
\82¾
\82Ä
\82½
\81D";
1309 if (mtmp->mpeaceful)
1311 verbalize("Just the facts, %s.", flags.female ? "Ma'am" : "Sir");
1313 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ß");
1316 static const char *const arrest_msg[3] = {
1318 "Anything you say can be used against you.",
1319 "You're under arrest!", "Stop in the name of the Law!",
1321 "
\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",
1322 "
\82¨
\82Ü
\82¦
\82ð
\91ß
\95ß
\82·
\82é
\81I",
1323 "
\96@
\82Ì
\96¼
\82Ì
\82à
\82Æ
\92¼
\82¿
\82É
\92\86\8e~
\82¹
\82æ
\81I",
1326 verbl_msg = arrest_msg[rn2(3)];
1330 if (mtmp->mpeaceful && !mtmp->mtame) {
1331 (void) demon_talk(mtmp);
1336 if (!mtmp->mpeaceful)
1338 else if (is_lminion(mtmp))
1340 verbl_msg = "It's not too late.";
1342 verbl_msg = "
\82Ü
\82¾
\92x
\82
\82Í
\82È
\82¢
\81D";
1345 verbl_msg = "We're all doomed.";
1347 verbl_msg = "
\82Ý
\82ñ
\82È
\82à
\82¤
\82¨
\82µ
\82Ü
\82¢
\82¾
\81D";
1350 /* deliberately vague, since it's not actually casting any spell */
1352 pline_msg = "seems to mutter a cantrip.";
1354 pline_msg = "
\82Ô
\82Â
\82Ô
\82Â
\82Æ
\82Â
\82Ô
\82â
\82¢
\82Ä
\82¢
\82é
\81D";
1358 verbl_msg_mcan = "I hate this job!";
1360 verbl_msg_mcan = "
\82±
\82ñ
\82È
\8ed
\8e\96\8c\99\82¢
\81I";
1361 if (uwep && (uwep->oclass == WEAPON_CLASS || is_weptool(uwep)))
1363 verbl_msg = "Put that weapon away before you hurt someone!";
1365 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";
1366 else if (uarmc || uarm || uarmh || uarms || uarmg || uarmf)
1367 verbl_msg = Role_if(PM_HEALER)
1369 ? "Doc, I can't help you unless you cooperate."
1371 ? "
\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"
1373 : "Please undress so I can examine you.";
1375 : "
\95\9e\82ð
\92E
\82¢
\82Å
\82
\82¾
\82³
\82¢
\81D
\82 \82È
\82½
\82ð
\90f
\8e@
\82µ
\82Ü
\82·
\82í
\81D";
1378 verbl_msg = "Take off your shirt, please.";
1380 verbl_msg = "
\83V
\83\83\83c
\82ð
\92E
\82¢
\82Å
\82
\82¾
\82³
\82¢
\81D";
1383 verbl_msg = "Relax, this won't hurt a bit.";
1385 verbl_msg = "
\82¨
\82¿
\82Â
\82¢
\82Ä
\81D
\82¿
\82Á
\82Æ
\82à
\92É
\82
\82È
\82¢
\82í
\82æ
\81D";
1388 if (money_cnt(invent))
1390 verbl_msg = "Please drop that gold and follow me.";
1392 verbl_msg = "
\8bà
\82ð
\92u
\82¢
\82Ä
\82Â
\82¢
\82Ä
\82«
\82Ä
\82
\82¾
\82³
\82¢
\81D";
1395 verbl_msg = "Please follow me.";
1397 verbl_msg = "
\82Â
\82¢
\82Ä
\82«
\82Ä
\82
\82¾
\82³
\82¢
\81D";
1401 *const soldier_foe_msg[3] =
1404 "Resistance is useless!", "You're dog meat!", "Surrender!",
1406 "
\92ï
\8dR
\82µ
\82Ä
\82à
\96³
\91Ê
\82¾
\81I",
1407 "
\8c¢
\82É
\8bò
\82í
\82ê
\82¿
\82Ü
\82¦
\81I",
1408 "
\8d~
\95\9a\82µ
\82ë
\81I",
1411 *const soldier_pax_msg[3] = {
1413 "What lousy pay we're getting here!",
1414 "The food's not fit for Orcs!",
1415 "My feet hurt, I've been on them all day!",
1417 "
\82È
\82ñ
\82Ä
\8bà
\95¥
\82¢
\82ª
\88«
\82¢
\82ñ
\82¾
\81I",
1418 "
\82È
\82ñ
\82¾
\82¢
\81H
\83I
\81[
\83N
\82Å
\82à
\8bò
\82¦
\82Ë
\82¥
\82º
\81I",
1419 "
\91«
\82ð
\89ö
\89ä
\82µ
\82½
\81C
\82¸
\82Á
\82Æ
\82±
\82Ì
\92²
\8eq
\82¾
\81I",
1422 verbl_msg = mtmp->mpeaceful ? soldier_pax_msg[rn2(3)]
1423 : soldier_foe_msg[rn2(3)];
1427 const char *tribtitle;
1428 struct obj *book = 0;
1429 boolean ms_Death = (ptr == &mons[PM_DEATH]);
1432 if (ms_Death && !context.tribute.Deathnotice
1433 && (book = u_have_novel()) != 0) {
1434 if ((tribtitle = noveltitle(&book->novelidx)) != 0) {
1436 Sprintf(verbuf, "Ah, so you have a copy of /%s/.", tribtitle);
1438 Sprintf(verbuf, "
\82 \82 \81A/%s/
\82ð
\8e\9d\82Á
\82Ä
\82¢
\82é
\82Ì
\82©
\81D", tribtitle);
1439 /* no Death featured in these two, so exclude them */
1440 if (strcmpi(tribtitle, "Snuff")
1441 && strcmpi(tribtitle, "The Wee Free Men"))
1443 Strcat(verbuf, " I may have been misquoted there.");
1445 Strcat(verbuf, "
\82±
\82±
\82Å
\82Í
\88ø
\97p
\82ª
\8aÔ
\88á
\82Á
\82Ä
\82¢
\82é
\82©
\82à
\82µ
\82ê
\82È
\82¢
\81D");
1448 context.tribute.Deathnotice = 1;
1449 } else if (ms_Death && rn2(3) && Death_quote(verbuf, sizeof verbuf)) {
1451 /* end of tribute addition */
1453 } else if (ms_Death && !rn2(10)) {
1455 pline_msg = "is busy reading a copy of Sandman #8.";
1457 pline_msg = "
\81u
\83T
\83\93\83h
\83}
\83\93\81v
\82Ì8
\8aª
\82ð
\93Ç
\82Þ
\82Ì
\82É
\96Z
\82µ
\82¢
\81D";
1460 verbl_msg = "Who do you think you are, War?";
1462 verbl_msg = "
\83E
\83H
\81[
\82æ
\81C
\8e©
\95ª
\82ª
\89½
\8eÒ
\82©
\8dl
\82¦
\82½
\82±
\82Æ
\82ª
\82 \82é
\82©
\81H";
1464 } /* case MS_RIDER */
1469 pline("%s %s", Monnam(mtmp), pline_msg);
1471 pline("%s
\82Í%s", Monnam(mtmp), pline_msg);
1472 } else if (mtmp->mcan && verbl_msg_mcan) {
1473 verbalize1(verbl_msg_mcan);
1474 } else if (verbl_msg) {
1475 #if 0 /*JP*//*
\83f
\83X
\82ð
\93Á
\95Ê
\88µ
\82¢
\82µ
\82È
\82¢*/
1476 /* more 3.6 tribute */
1477 if (ptr == &mons[PM_DEATH]) {
1478 /* Death talks in CAPITAL LETTERS
1479 and without quotation marks */
1482 pline1(ucase(strcpy(tmpbuf, verbl_msg)));
1484 verbalize1(verbl_msg);
1487 verbalize1(verbl_msg);
1510 if (is_silent(youmonst.data)) {
1512 pline("As %s, you cannot speak.", an(youmonst.data->mname));
1514 pline("
\82 \82È
\82½
\82Í%s
\82È
\82Ì
\82Å
\81C
\98b
\82·
\82±
\82Æ
\82ª
\82Å
\82«
\82È
\82¢
\81D", youmonst.data->mname);
1519 You_cant("speak. You're choking!");
1521 You("
\98b
\82¹
\82È
\82¢
\81D
\82 \82È
\82½
\82Í
\8eñ
\82ð
\8di
\82ß
\82ç
\82ê
\82Ä
\82¢
\82é
\81I");
1526 pline("They won't hear you out there.");
1528 You("
\8aO
\82Ö
\8cü
\82Á
\82Ä
\98b
\82ð
\82µ
\82½
\82ª
\81C
\92N
\82à
\95·
\82«
\82¢
\82ê
\82È
\82©
\82Á
\82½
\81D");
1533 Your("speech is unintelligible underwater.");
1535 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");
1540 pline("How can you hold a conversation when you cannot hear?");
1542 pline("
\95·
\82
\82±
\82Æ
\82ª
\82Å
\82«
\82È
\82¢
\82Ì
\82É
\82Ç
\82¤
\82â
\82Á
\82Ä
\89ï
\98b
\82·
\82é
\82Ì
\81H");
1546 if (!Blind && (otmp = shop_object(u.ux, u.uy)) != (struct obj *) 0) {
1547 /* standing on something in a shop and chatting causes the shopkeeper
1548 to describe the price(s). This can inhibit other chatting inside
1549 a shop, but that shouldn't matter much. shop_object() returns an
1550 object iff inside a shop and the shopkeeper is present and willing
1551 (not angry) and able (not asleep) to speak and the position
1552 contains any objects other than just gold.
1559 if (!getdir("Talk to whom? (in what direction)")) {
1561 if (!getdir("
\92N
\82Æ
\98b
\82µ
\82Ü
\82·
\82©
\81H[
\95û
\8cü
\82ð
\93ü
\82ê
\82Ä
\82Ë]")) {
1562 /* decided not to chat */
1566 if (u.usteed && u.dz > 0) {
1567 if (!u.usteed->mcanmove || u.usteed->msleeping) {
1569 pline("%s seems not to notice you.", Monnam(u.usteed));
1571 pline("%s
\82Í
\82 \82È
\82½
\82É
\8bC
\82ª
\82Â
\82¢
\82Ä
\82¢
\82È
\82¢
\82æ
\82¤
\82¾
\81D", Monnam(u.usteed));
1574 return domonnoise(u.usteed);
1579 pline("They won't hear you %s there.", u.dz < 0 ? "up" : "down");
1581 pline("%s
\8cü
\82©
\82Á
\82Ä
\98b
\82ð
\82µ
\82Ä
\82à
\88Ó
\96¡
\82ª
\82È
\82¢
\81D", u.dz < 0 ? "
\8fã
\82É" : "
\89º
\82É");
1585 if (u.dx == 0 && u.dy == 0) {
1587 * Let's not include this.
1588 * It raises all sorts of questions: can you wear
1589 * 2 helmets, 2 amulets, 3 pairs of gloves or 6 rings as a marilith,
1591 if (u.umonnum == PM_ETTIN) {
1592 You("discover that your other head makes boring conversation.");
1597 pline("Talking to yourself is a bad habit for a dungeoneer.");
1599 pline("
\88ê
\90l
\8c¾
\82Í
\96À
\8b{
\92T
\8c\9f\8eÒ
\82Ì
\88«
\82¢
\95È
\82¾
\81D");
1609 mtmp = m_at(tx, ty);
1611 if ((!mtmp || mtmp->mundetected)
1612 && (otmp = vobj_at(tx, ty)) != 0 && otmp->otyp == STATUE) {
1613 /* Talking to a statue */
1616 pline_The("%s seems not to notice you.",
1617 /* if hallucinating, you can't tell it's a statue */
1618 Hallucination ? rndmonnam((char *) 0) : "statue");
1620 pline_The("%s
\82Í
\82 \82È
\82½
\82É
\8bC
\82ª
\82Â
\82¢
\82Ä
\82¢
\82È
\82¢
\82æ
\82¤
\82¾
\81D",
1621 Hallucination ? rndmonnam((char *) 0) : "
\90Î
\91\9c");
1627 if (!mtmp || mtmp->mundetected || M_AP_TYPE(mtmp) == M_AP_FURNITURE
1628 || M_AP_TYPE(mtmp) == M_AP_OBJECT)
1631 /* sleeping monsters won't talk, except priests (who wake up) */
1632 if ((!mtmp->mcanmove || mtmp->msleeping) && !mtmp->ispriest) {
1633 /* If it is unseen, the player can't tell the difference between
1634 not noticing him and just not existing, so skip the message. */
1635 if (canspotmon(mtmp))
1637 pline("%s seems not to notice you.", Monnam(mtmp));
1639 pline("%s
\82Í
\82 \82È
\82½
\82É
\8bC
\82ª
\82Â
\82¢
\82Ä
\82¢
\82È
\82¢
\82æ
\82¤
\82¾
\81D", Monnam(mtmp));
1643 /* if this monster is waiting for something, prod it into action */
1644 mtmp->mstrategy &= ~STRAT_WAITMASK;
1646 if (mtmp->mtame && mtmp->meating) {
1647 if (!canspotmon(mtmp))
1648 map_invisible(mtmp->mx, mtmp->my);
1650 pline("%s is eating noisily.", Monnam(mtmp));
1652 pline("%s
\82Í
\83o
\83\8a\83o
\83\8a\82Æ
\95¨
\82ð
\90H
\82×
\82Ä
\82¢
\82é
\81D", Monnam(mtmp));
1656 return domonnoise(mtmp);
1661 extern void FDECL(play_usersound, (const char *, int));
1663 typedef struct audio_mapping_rec {
1664 struct nhregex *regex;
1667 struct audio_mapping_rec *next;
1670 static audio_mapping *soundmap = 0;
1672 char *sounddir = ".";
1674 /* adds a sound file mapping, returns 0 on failure, 1 on success */
1676 add_sound_mapping(mapping)
1677 const char *mapping;
1684 if (sscanf(mapping, "MESG \"%255[^\"]\"%*[\t ]\"%255[^\"]\" %d", text,
1685 filename, &volume) == 3) {
1686 audio_mapping *new_map;
1688 if (strlen(sounddir) + strlen(filename) > 254) {
1689 raw_print("sound file name too long");
1692 Sprintf(filespec, "%s/%s", sounddir, filename);
1694 if (can_read_file(filespec)) {
1695 new_map = (audio_mapping *) alloc(sizeof(audio_mapping));
1696 new_map->regex = regex_init();
1697 new_map->filename = dupstr(filespec);
1698 new_map->volume = volume;
1699 new_map->next = soundmap;
1701 if (!regex_compile(text, new_map->regex)) {
1702 raw_print(regex_error_desc(new_map->regex));
1703 regex_free(new_map->regex);
1704 free(new_map->filename);
1711 Sprintf(text, "cannot read %.243s", filespec);
1716 raw_print("syntax error in SOUND");
1724 play_sound_for_message(msg)
1727 audio_mapping *cursor = soundmap;
1730 if (regex_match(msg, cursor->regex)) {
1731 play_usersound(cursor->filename, cursor->volume);
1733 cursor = cursor->next;
1737 #endif /* USER_SOUNDS */