1 /* NetHack 3.6 wizard.c $NHDT-Date: 1539804905 2018/10/17 19:35:05 $ $NHDT-Branch: keni-makedefsm $:$NHDT-Revision: 1.53 $ */
2 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
3 /*-Copyright (c) Robert Patrick Rankin, 2016. */
4 /* NetHack may be freely redistributed. See license for details. */
6 /* JNetHack Copyright */
7 /* (c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000 */
8 /* For 3.4-, Copyright (c) SHIRAKATA Kentaro, 2002-2019 */
9 /* JNetHack may be freely redistributed. See license for details. */
11 /* wizard code - inspired by rogue code from Merlyn Leroy (digi-g!brian) */
12 /* - heavily modified to give the wiz balls. (genat!mike) */
13 /* - dewimped and given some maledictions. -3. */
14 /* - generalized for 3.1 (mike@bullns.on01.bull.ca) */
19 STATIC_DCL short FDECL(which_arti, (int));
20 STATIC_DCL boolean FDECL(mon_has_arti, (struct monst *, SHORT_P));
21 STATIC_DCL struct monst *FDECL(other_mon_has_arti, (struct monst *, SHORT_P));
22 STATIC_DCL struct obj *FDECL(on_ground, (SHORT_P));
23 STATIC_DCL boolean FDECL(you_have, (int));
24 STATIC_DCL unsigned long FDECL(target_on, (int, struct monst *));
25 STATIC_DCL unsigned long FDECL(strategy, (struct monst *));
27 /* adding more neutral creatures will tend to reduce the number of monsters
28 summoned by nasty(); adding more lawful creatures will reduce the number
29 of monsters summoned by lawfuls; adding more chaotic creatures will reduce
30 the number of monsters summoned by chaotics; prior to 3.6.1, there were
31 only four lawful candidates, so lawful summoners tended to summon more
32 (trying to get lawful or neutral but obtaining chaotic instead) than
33 their chaotic counterparts */
34 static NEARDATA const int nasties[] = {
36 PM_COCKATRICE, PM_ETTIN, PM_STALKER, PM_MINOTAUR,
37 PM_OWLBEAR, PM_PURPLE_WORM, PM_XAN, PM_UMBER_HULK,
38 PM_XORN, PM_ZRUTY, PM_LEOCROTTA, PM_BALUCHITHERIUM,
39 PM_CARNIVOROUS_APE, PM_FIRE_ELEMENTAL, PM_JABBERWOCK,
40 PM_IRON_GOLEM, PM_OCHRE_JELLY, PM_GREEN_SLIME,
42 PM_BLACK_DRAGON, PM_RED_DRAGON, PM_ARCH_LICH, PM_VAMPIRE_LORD,
43 PM_MASTER_MIND_FLAYER, PM_DISENCHANTER, PM_WINGED_GARGOYLE,
44 PM_STORM_GIANT, PM_OLOG_HAI, PM_ELF_LORD, PM_ELVENKING,
45 PM_OGRE_KING, PM_CAPTAIN, PM_GREMLIN,
47 PM_SILVER_DRAGON, PM_ORANGE_DRAGON, PM_GREEN_DRAGON,
48 PM_YELLOW_DRAGON, PM_GUARDIAN_NAGA, PM_FIRE_GIANT,
49 PM_ALEAX, PM_COUATL, PM_HORNED_DEVIL, PM_BARBED_DEVIL,
50 /* (titans, ki-rin, and golden nagas are suitably nasty, but
51 they're summoners so would aggravate excessive summoning) */
54 static NEARDATA const unsigned wizapp[] = {
55 PM_HUMAN, PM_WATER_DEMON, PM_VAMPIRE, PM_RED_DRAGON,
56 PM_TROLL, PM_UMBER_HULK, PM_XORN, PM_XAN,
57 PM_COCKATRICE, PM_FLOATING_EYE, PM_GUARDIAN_NAGA, PM_TRAPPER,
60 /* If you've found the Amulet, make the Wizard appear after some time */
61 /* Also, give hints about portal locations, if amulet is worn/wielded -dlc */
69 #if 0 /* caller takes care of this check */
73 if ((((amu = uamul) != 0 && amu->otyp == AMULET_OF_YENDOR)
74 || ((amu = uwep) != 0 && amu->otyp == AMULET_OF_YENDOR))
76 for (ttmp = ftrap; ttmp; ttmp = ttmp->ntrap) {
77 if (ttmp->ttyp == MAGIC_PORTAL) {
78 int du = distu(ttmp->tx, ttmp->ty);
81 pline("%s hot!", Tobjnam(amu, "feel"));
83 pline("%s
\82Í
\94M
\82
\8a´
\82¶
\82½
\81I", xname(amu));
86 pline("%s very warm.", Tobjnam(amu, "feel"));
88 pline("%s
\82Í
\82Æ
\82Ä
\82à
\92g
\82©
\82
\8a´
\82¶
\82½
\81D", xname(amu));
91 pline("%s warm.", Tobjnam(amu, "feel"));
93 pline("%s
\82Í
\92g
\82©
\82
\8a´
\82¶
\82½
\81D", xname(amu));
94 /* else, the amulet feels normal */
100 if (!context.no_of_wizards)
102 /* find Wizard, and wake him if necessary */
103 for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) {
104 if (DEADMONSTER(mtmp))
106 if (mtmp->iswiz && mtmp->msleeping && !rn2(40)) {
108 if (distu(mtmp->mx, mtmp->my) > 2)
111 "get the creepy feeling that somebody noticed your taking the Amulet.");
113 "
\82 \82È
\82½
\82ª
\96\82\8f\9c\82¯
\82ð
\8e\9d\82Á
\82Ä
\82¢
\82é
\82±
\82Æ
\82ª
\92N
\82©
\82É
\92m
\82ç
\82ê
\82½
\82Æ
\8a´
\82¶
\82Ä
\82¼
\82Á
\82Æ
\82µ
\82½
\81D");
121 register struct monst *mtmp;
123 register struct obj *otmp;
125 for (otmp = mtmp->minvent; otmp; otmp = otmp->nobj)
126 if (otmp->otyp == AMULET_OF_YENDOR)
132 mon_has_special(mtmp)
133 register struct monst *mtmp;
135 register struct obj *otmp;
137 for (otmp = mtmp->minvent; otmp; otmp = otmp->nobj)
138 if (otmp->otyp == AMULET_OF_YENDOR
139 || any_quest_artifact(otmp)
140 || otmp->otyp == BELL_OF_OPENING
141 || otmp->otyp == CANDELABRUM_OF_INVOCATION
142 || otmp->otyp == SPE_BOOK_OF_THE_DEAD)
148 * New for 3.1 Strategy / Tactics for the wiz, as well as other
149 * monsters that are "after" something (defined via mflag3).
151 * The strategy section decides *what* the monster is going
152 * to attempt, the tactics section implements the decision.
154 #define STRAT(w, x, y, typ) \
155 ((unsigned long) (w) | ((unsigned long) (x) << 16) \
156 | ((unsigned long) (y) << 8) | (unsigned long) (typ))
158 #define M_Wants(mask) (mtmp->data->mflags3 & (mask))
166 return AMULET_OF_YENDOR;
168 return BELL_OF_OPENING;
170 return CANDELABRUM_OF_INVOCATION;
172 return SPE_BOOK_OF_THE_DEAD;
174 break; /* 0 signifies quest artifact */
180 * If "otyp" is zero, it triggers a check for the quest_artifact,
181 * since bell, book, candle, and amulet are all objects, not really
182 * artifacts right now. [MRS]
185 mon_has_arti(mtmp, otyp)
186 register struct monst *mtmp;
189 register struct obj *otmp;
191 for (otmp = mtmp->minvent; otmp; otmp = otmp->nobj) {
193 if (otmp->otyp == otyp)
195 } else if (any_quest_artifact(otmp))
201 STATIC_OVL struct monst *
202 other_mon_has_arti(mtmp, otyp)
203 register struct monst *mtmp;
206 register struct monst *mtmp2;
208 for (mtmp2 = fmon; mtmp2; mtmp2 = mtmp2->nmon)
209 /* no need for !DEADMONSTER check here since they have no inventory */
211 if (mon_has_arti(mtmp2, otyp))
214 return (struct monst *) 0;
217 STATIC_OVL struct obj *
221 register struct obj *otmp;
223 for (otmp = fobj; otmp; otmp = otmp->nobj)
225 if (otmp->otyp == otyp)
227 } else if (any_quest_artifact(otmp))
229 return (struct obj *) 0;
238 return (boolean) u.uhave.amulet;
240 return (boolean) u.uhave.bell;
242 return (boolean) u.uhave.menorah;
244 return (boolean) u.uhave.book;
246 return (boolean) u.uhave.questart;
253 STATIC_OVL unsigned long
254 target_on(mask, mtmp)
256 register struct monst *mtmp;
259 register struct obj *otmp;
260 register struct monst *mtmp2;
263 return (unsigned long) STRAT_NONE;
265 otyp = which_arti(mask);
266 if (!mon_has_arti(mtmp, otyp)) {
268 return STRAT(STRAT_PLAYER, u.ux, u.uy, mask);
269 else if ((otmp = on_ground(otyp)))
270 return STRAT(STRAT_GROUND, otmp->ox, otmp->oy, mask);
271 else if ((mtmp2 = other_mon_has_arti(mtmp, otyp)) != 0
272 /* when seeking the Amulet, avoid targetting the Wizard
273 or temple priests (to protect Moloch's high priest) */
274 && (otyp != AMULET_OF_YENDOR
275 || (!mtmp2->iswiz && !inhistemple(mtmp2))))
276 return STRAT(STRAT_MONSTR, mtmp2->mx, mtmp2->my, mask);
278 return (unsigned long) STRAT_NONE;
281 STATIC_OVL unsigned long
283 register struct monst *mtmp;
285 unsigned long strat, dstrat;
287 if (!is_covetous(mtmp->data)
288 /* perhaps a shopkeeper has been polymorphed into a master
289 lich; we don't want it teleporting to the stairs to heal
290 because that will leave its shop untended */
291 || (mtmp->isshk && inhishop(mtmp))
292 /* likewise for temple priests */
293 || (mtmp->ispriest && inhistemple(mtmp)))
294 return (unsigned long) STRAT_NONE;
296 switch ((mtmp->mhp * 3) / mtmp->mhpmax) { /* 0-3 */
299 case 0: /* panic time - mtmp is almost snuffed */
300 return (unsigned long) STRAT_HEAL;
302 case 1: /* the wiz is less cautious */
303 if (mtmp->data != &mons[PM_WIZARD_OF_YENDOR])
304 return (unsigned long) STRAT_HEAL;
305 /* else fall through */
316 if (context.made_amulet)
317 if ((strat = target_on(M3_WANTSAMUL, mtmp)) != STRAT_NONE)
320 if (u.uevent.invoked) { /* priorities change once gate opened */
321 if ((strat = target_on(M3_WANTSARTI, mtmp)) != STRAT_NONE)
323 if ((strat = target_on(M3_WANTSBOOK, mtmp)) != STRAT_NONE)
325 if ((strat = target_on(M3_WANTSBELL, mtmp)) != STRAT_NONE)
327 if ((strat = target_on(M3_WANTSCAND, mtmp)) != STRAT_NONE)
330 if ((strat = target_on(M3_WANTSBOOK, mtmp)) != STRAT_NONE)
332 if ((strat = target_on(M3_WANTSBELL, mtmp)) != STRAT_NONE)
334 if ((strat = target_on(M3_WANTSCAND, mtmp)) != STRAT_NONE)
336 if ((strat = target_on(M3_WANTSARTI, mtmp)) != STRAT_NONE)
343 choose_stairs(sx, sy)
349 if (builds_up(&u.uz)) {
353 } else if (xdnladder) {
361 } else if (xupladder) {
367 if (!x && sstairs.sx) {
381 register struct monst *mtmp;
383 unsigned long strat = strategy(mtmp);
384 xchar sx = 0, sy = 0;
387 (mtmp->mstrategy & (STRAT_WAITMASK | STRAT_APPEARMSG)) | strat;
390 case STRAT_HEAL: /* hide and recover */
391 /* if wounded, hole up on or near the stairs (to block them) */
392 choose_stairs(&sx, &sy);
393 mtmp->mavenge = 1; /* covetous monsters attack while fleeing */
394 if (In_W_tower(mtmp->mx, mtmp->my, &u.uz)
395 || (mtmp->iswiz && !sx && !mon_has_amulet(mtmp))) {
396 if (!rn2(3 + mtmp->mhp / 10))
397 (void) rloc(mtmp, TRUE);
398 } else if (sx && (mtmp->mx != sx || mtmp->my != sy)) {
399 if (!mnearto(mtmp, sx, sy, TRUE)) {
404 /* if you're not around, cast healing spells */
405 if (distu(mtmp->mx, mtmp->my) > (BOLT_LIM * BOLT_LIM))
406 if (mtmp->mhp <= mtmp->mhpmax - 8) {
412 case STRAT_NONE: /* harass */
413 if (!rn2(!mtmp->mflee ? 5 : 33))
417 default: /* kill, maim, pillage! */
419 long where = (strat & STRAT_STRATMASK);
420 xchar tx = STRAT_GOALX(strat), ty = STRAT_GOALY(strat);
421 int targ = (int) (strat & STRAT_GOAL);
424 if (!targ) { /* simply wants you to close */
427 if ((u.ux == tx && u.uy == ty) || where == STRAT_PLAYER) {
428 /* player is standing on it (or has it) */
432 if (where == STRAT_GROUND) {
433 if (!MON_AT(tx, ty) || (mtmp->mx == tx && mtmp->my == ty)) {
434 /* teleport to it and pick it up */
435 rloc_to(mtmp, tx, ty); /* clean old pos */
437 if ((otmp = on_ground(which_arti(targ))) != 0) {
438 if (cansee(mtmp->mx, mtmp->my))
440 pline("%s picks up %s.", Monnam(mtmp),
441 (distu(mtmp->mx, mtmp->my) <= 5)
443 : distant_name(otmp, doname));
445 pline("%s
\82Í%s
\82ð
\8fE
\82Á
\82½
\81D", Monnam(mtmp),
446 (distu(mtmp->mx, mtmp->my) <= 5)
448 : distant_name(otmp, doname));
450 obj_extract_self(otmp);
451 (void) mpickobj(mtmp, otmp);
456 /* a monster is standing on it - cause some trouble */
461 } else { /* a monster has it - 'port beside it. */
462 if (!mnearto(mtmp, tx, ty, FALSE))
472 /* are there any monsters mon could aggravate? */
474 has_aggravatables(mon)
478 boolean in_w_tower = In_W_tower(mon->mx, mon->my, &u.uz);
480 if (in_w_tower != In_W_tower(u.ux, u.uy, &u.uz))
483 for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) {
484 if (DEADMONSTER(mtmp))
486 if (in_w_tower != In_W_tower(mtmp->mx, mtmp->my, &u.uz))
488 if ((mtmp->mstrategy & STRAT_WAITFORU) != 0
489 || mtmp->msleeping || !mtmp->mcanmove)
498 register struct monst *mtmp;
499 boolean in_w_tower = In_W_tower(u.ux, u.uy, &u.uz);
501 for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) {
502 if (DEADMONSTER(mtmp))
504 if (in_w_tower != In_W_tower(mtmp->mx, mtmp->my, &u.uz))
506 mtmp->mstrategy &= ~(STRAT_WAITFORU | STRAT_APPEARMSG);
508 if (!mtmp->mcanmove && !rn2(5)) {
518 register struct monst *mtmp2;
520 if ((mtmp2 = makemon(&mons[PM_WIZARD_OF_YENDOR], u.ux, u.uy, NO_MM_FLAGS))
522 mtmp2->msleeping = mtmp2->mtame = mtmp2->mpeaceful = 0;
523 if (!u.uhave.amulet && rn2(2)) { /* give clone a fake */
524 (void) add_to_minv(mtmp2,
525 mksobj(FAKE_AMULET_OF_YENDOR, TRUE, FALSE));
527 mtmp2->m_ap_type = M_AP_MONSTER;
528 mtmp2->mappearance = wizapp[rn2(SIZE(wizapp))];
529 newsym(mtmp2->mx, mtmp2->my);
533 /* also used by newcham() */
537 int res = nasties[rn2(SIZE(nasties))];
539 /* To do? Possibly should filter for appropriate forms when
540 * in the elemental planes or surrounded by water or lava.
542 * We want monsters represented by uppercase on rogue level,
543 * but we don't try very hard.
545 if (Is_rogue_level(&u.uz)
546 && !('A' <= mons[res].mlet && mons[res].mlet <= 'Z'))
547 res = nasties[rn2(SIZE(nasties))];
552 /* create some nasty monsters, aligned with the caster or neutral; chaotic
553 and unaligned are treated as equivalent; if summoner is Null, this is
554 for late-game harassment (after the Wizard has been killed at least once
555 or the invocation ritual has been performed), in which case we treat
556 'summoner' as neutral, since that will produce the greatest number of
557 creatures on average (in 3.6.0 and earlier, Null was treated as chaotic);
558 returns the number of monsters created */
561 struct monst *summoner;
563 register struct monst *mtmp;
565 int castalign = (summoner ? sgn(summoner->data->maligntyp) : 0);
567 int count, census, tmp, makeindex, s_cls, m_cls;
569 #define MAXNASTIES 10 /* more than this can be created */
571 /* some candidates may be created in groups, so simple count
572 of non-null makemon() return is inadequate */
573 census = monster_census(FALSE);
575 if (!rn2(10) && Inhell) {
576 /* this might summon a demon prince or lord */
577 count = msummon((struct monst *) 0); /* summons like WoY */
580 s_cls = summoner ? summoner->data->mlet : 0;
581 tmp = (u.ulevel > 3) ? u.ulevel / 3 : 1;
582 /* if we don't have a casting monster, nasties appear around hero,
583 otherwise they'll appear around spot summoner thinks she's at */
586 for (i = rnd(tmp); i > 0 && count < MAXNASTIES; --i)
587 /* Of the 42 nasties[], 10 are lawful, 14 are chaotic,
588 * and 18 are neutral.
590 * Neutral caster, used for late-game harrassment,
591 * has 18/42 chance to stop the inner loop on each
592 * critter, 24/42 chance for another iteration.
593 * Lawful caster has 28/42 chance to stop unless the
594 * summoner is an angel or demon, in which case the
596 * Chaotic or unaligned caster has 32/42 chance to
597 * stop, so will summon fewer creatures on average.
599 * The outer loop potentially gives chaotic/unaligned
600 * a chance to even things up since others will hit
601 * MAXNASTIES sooner, but its number of iterations is
602 * randomized so it won't always do so.
604 for (j = 0; j < 20; j++) {
605 /* Don't create more spellcasters of the monsters' level or
606 * higher--avoids chain summoners filling up the level.
609 makeindex = pick_nasty();
610 m_cls = mons[makeindex].mlet;
612 && ((attacktype(&mons[makeindex], AT_MAGC)
613 && mons[makeindex].difficulty
614 >= mons[summoner->mnum].difficulty)
615 || (s_cls == S_DEMON && m_cls == S_ANGEL)
616 || (s_cls == S_ANGEL && m_cls == S_DEMON)));
617 /* do this after picking the monster to place */
618 if (summoner && !enexto(&bypos, summoner->mux, summoner->muy,
621 /* this honors genocide but overrides extinction; it ignores
622 inside-hell-only (G_HELL) & outside-hell-only (G_NOHELL) */
623 if ((mtmp = makemon(&mons[makeindex], bypos.x, bypos.y,
624 NO_MM_FLAGS)) != 0) {
625 mtmp->msleeping = mtmp->mpeaceful = mtmp->mtame = 0;
627 } else /* random monster to substitute for geno'd selection */
628 mtmp = makemon((struct permonst *) 0, bypos.x, bypos.y,
631 /* delay first use of spell or breath attack */
632 mtmp->mspec_used = rnd(4);
633 if (++count >= MAXNASTIES
634 || mtmp->data->maligntyp == 0
635 || sgn(mtmp->data->maligntyp) == castalign)
642 count = monster_census(FALSE) - census;
646 /* Let's resurrect the wizard, for some unexpected fun. */
650 struct monst *mtmp, **mmtmp;
654 if (!context.no_of_wizards) {
655 /* make a new Wizard */
659 verb = "
\82ð
\93¢
\82Ä
\82µ";
660 mtmp = makemon(&mons[PM_WIZARD_OF_YENDOR], u.ux, u.uy, MM_NOWAIT);
661 /* affects experience; he's not coming back from a corpse
662 but is subject to repeated killing like a revived corpse */
663 if (mtmp) mtmp->mrevived = 1;
665 /* look for a migrating Wizard */
669 verb = "
\82æ
\82è
\93¦
\82ê
\82ñ";
670 mmtmp = &migrating_mons;
671 while ((mtmp = *mmtmp) != 0) {
673 /* if he has the Amulet, he won't bring it to you */
674 && !mon_has_amulet(mtmp)
675 && (elapsed = monstermoves - mtmp->mlstmv) > 0L) {
676 mon_catchup_elapsed_time(mtmp, elapsed);
677 if (elapsed >= LARGEST_INT)
678 elapsed = LARGEST_INT - 1;
680 if (mtmp->msleeping && rn2((int) elapsed + 1))
682 if (mtmp->mfrozen == 1) /* would unfreeze on next move */
683 mtmp->mfrozen = 0, mtmp->mcanmove = 1;
684 if (mtmp->mcanmove && !mtmp->msleeping) {
686 mon_arrive(mtmp, TRUE);
687 /* note: there might be a second Wizard; if so,
688 he'll have to wait til the next resurrection */
697 mtmp->mtame = mtmp->mpeaceful = 0; /* paranoia */
701 pline("A voice booms out...");
703 pline("
\90º
\82ª
\8d\82\82
\96Â
\82è
\8b¿
\82¢
\82½
\81D
\81D
\81D");
705 verbalize("So thou thought thou couldst %s me, fool.", verb);
707 verbalize("
\97]%s
\82Æ
\8ev
\82¢
\82µ
\82©
\81C
\92s
\82ê
\8eÒ
\82ª
\81D", verb);
712 /* Here, we make trouble for the poor shmuck who actually
713 managed to do in the Wizard. */
717 int which = Is_astralevel(&u.uz) ? rnd(4) : rn2(6);
718 /* cases 0 and 5 don't apply on the Astral level */
723 You_feel("vaguely nervous.");
725 You("
\89½
\82Æ
\82È
\82
\95s
\88À
\82É
\82È
\82Á
\82½
\81D");
730 You("notice a %s glow surrounding you.", hcolor(NH_BLACK));
732 pline("%s
\8cõ
\82ª
\82 \82È
\82½
\82ð
\82Æ
\82è
\82Ü
\82¢
\82Ä
\82¢
\82é
\82Ì
\82É
\8bC
\82ª
\82Â
\82¢
\82½
\81D", hcolor(NH_BLACK));
739 (void) nasty((struct monst *) 0);
750 context.no_of_wizards--;
751 if (!u.uevent.udemigod) {
752 u.uevent.udemigod = TRUE;
753 u.udg_cnt = rn1(250, 50);
757 const char *const random_insult[] = {
759 "antic", "blackguard", "caitiff", "chucklehead",
760 "coistrel", "craven", "cretin", "cur",
761 "dastard", "demon fodder", "dimwit", "dolt",
762 "fool", "footpad", "imbecile", "knave",
763 "maledict", "miscreant", "niddering", "poltroon",
764 "rattlepate", "reprobate", "scapegrace", "varlet",
765 "villein", /* (sic.) */
766 "wittol", "worm", "wretch",
768 "
\82Ó
\82´
\82¯
\82½
\96ì
\98Y", "
\88«
\93}", "
\82
\82»
\82Á
\82½
\82ê", "
\82Ì
\82ë
\82Ü",
769 "
\82 \82ñ
\82Û
\82ñ
\82½
\82ñ", "
\89°
\95a
\8eÒ", "
\94\92\92s", "
\82ë
\82
\82Å
\82È
\82µ",
770 "
\82¤
\82Â
\82¯", "
\88«
\96\82\82Ì
\89a
\90H", "
\82¤
\82·
\82Ì
\82ë", "
\82Ü
\82Ê
\82¯",
771 "
\94n
\8e", "
\82¨
\82¢
\82Í
\82¬", "
\8bð
\82©
\8eÒ", "
\82È
\82ç
\82¸
\8eÒ",
772 "
\88«
\90l", "
\8bÉ
\88«
\90l", "
\94n
\8e
\82½
\82ê", "
\94Ú
\8b¯
\8eÒ",
773 "
\95\97\91D
\93ª", "
\93¹
\8ay
\8eÒ", "
\96ï
\89î
\8eÒ", "
\89º
\98Y",
774 "
\93z
\97ê", /* (sic.) */
775 "
\82Ó
\82È
\82Þ
\82µ", "åv
\92\8e", "
\90l
\82Å
\82È
\82µ",
779 const char *const random_malediction[] = {
781 "Hell shall soon claim thy remains,", "I chortle at thee, thou pathetic",
782 "Prepare to die, thou", "Resistance is useless,",
783 "Surrender or die, thou", "There shall be no mercy, thou",
784 "Thou shalt repent of thy cunning,", "Thou art as a flea to me,",
785 "Thou art doomed,", "Thy fate is sealed,",
786 "Verily, thou shalt be one dead"
788 "
\92n
\8d\96\82Í
\82¢
\82Ã
\82ê
\81C
\93ð
\82Ì
\96S
\8a[
\82ð
\97v
\8b\81\82·
\82é
\82Å
\82 \82ë
\82¤
\81C",
789 "
\88£
\82ê
\82È
\82â
\82Â
\82æ
\82Ì
\82¤
\81D
\97]
\82Í
\96\9e\91«
\82¶
\82á",
790 "
\93ð
\81C
\8e\80\82É
\94õ
\82¦
\82æ",
791 "
\92ï
\8dR
\82µ
\82Ä
\82à
\96³
\91Ê
\82¶
\82á
\81C",
792 "
\8d~
\8eQ
\82¹
\82æ
\81D
\82³
\82à
\82È
\82
\82Î
\8e\80\82¶
\82á
\81D",
793 "
\8e\9c\94ß
\82Í
\96³
\82©
\82ç
\82ñ",
794 "
\93ð
\81C
\82¸
\82é
\82ð
\8cã
\89÷
\82·
\82×
\82µ
\81C",
795 "
\93ð
\82Í
\97]
\82É
\82Æ
\82Á
\82Ä
\83m
\83~
\82Ì
\82æ
\82¤
\82È
\82à
\82Ì
\82¶
\82á
\81C",
796 "
\93ð
\82Í
\8eô
\82í
\82ê
\82Ä
\82¨
\82é
\81C",
797 "
\93ð
\82Ì
\89^
\96½
\82Í
\95\95\88ó
\82³
\82ê
\82Ä
\82¨
\82é
\81C",
798 "
\82Ü
\82±
\82Æ
\82É
\93ð
\82Í
\8e\80\82É
\82½
\82é
\8eÒ
\82È
\82è"
802 /* Insult or intimidate the player */
805 register struct monst *mtmp;
810 if (!rn2(5)) /* typical bad guy action */
812 pline("%s laughs fiendishly.", Monnam(mtmp));
814 pline("%s
\82Í
\88«
\96\82\82Ì
\82æ
\82¤
\82É
\8fÎ
\82Á
\82½
\81D", Monnam(mtmp));
815 else if (u.uhave.amulet && !rn2(SIZE(random_insult)))
817 verbalize("Relinquish the amulet, %s!",
819 verbalize("
\96\82\82æ
\82¯
\82ð
\8eè
\95ú
\82¹
\81C%s
\81I",
820 random_insult[rn2(SIZE(random_insult))]);
821 else if (u.uhp < 5 && !rn2(2)) /* Panic */
823 verbalize(rn2(2) ? "Even now thy life force ebbs, %s!"
824 : "Savor thy breath, %s, it be thy last!",
825 random_insult[rn2(SIZE(random_insult))]);
827 verbalize(rn2(2) ? "
\8d¡
\82Æ
\82È
\82Á
\82Ä
\82à
\82È
\82¨
\93ð
\82Ì
\96½
\82Í
\82 \82¦
\82Ä
\90\8a\82¦
\82é
\82Ì
\82¾
\81C%s
\81I"
828 : "
\96³
\91Ê
\82È
\82±
\82Æ
\82ð
\82·
\82é
\82È
\81C%s
\81C
\93ð
\82Ì
\8dÅ
\8aú
\82Ì
\8e\9e\82¾
\81I",
829 random_insult[rn2(SIZE(random_insult))]);
831 else if (mtmp->mhp < 5 && !rn2(2)) /* Parthian shot */
833 verbalize(rn2(2) ? "I shall return." : "I'll be back.");
835 verbalize(rn2(2) ? "
\97]
\82Í
\95K
\82¸
\8bA
\82Á
\82Ä
\82
\82é
\81D" : "
\97]
\82Í
\96ß
\82Á
\82Ä
\82
\82é
\81D");
839 random_malediction[rn2(SIZE(random_malediction))],
840 random_insult[rn2(SIZE(random_insult))]);
842 verbalize("%s
\81C%s
\81I",
843 random_malediction[rn2(SIZE(random_malediction))],
844 random_insult[rn2(SIZE(random_insult))]);
846 } else if (is_lminion(mtmp)
847 && !(mtmp->isminion && EMIN(mtmp)->renegade)) {
848 com_pager(rn2(QTN_ANGELIC - 1 + (Hallucination ? 1 : 0))
851 if (!rn2(is_minion(mtmp->data) ? 100 : 5))
853 pline("%s casts aspersions on your ancestry.", Monnam(mtmp));
855 pline("%s
\82Í
\82 \82È
\82½
\82Ì
\89Æ
\95¿
\82ð
\92\86\8f\9d\82µ
\82½
\81D", Monnam(mtmp));
857 com_pager(rn2(QTN_DEMONIC) + QT_DEMONIC);