OSDN Git Service

fix #36659
[jnethack/source.git] / src / pray.c
1 /* NetHack 3.6  pray.c  $NHDT-Date: 1446854232 2015/11/06 23:57:12 $  $NHDT-Branch: master $:$NHDT-Revision: 1.87 $ */
2 /* Copyright (c) Benson I. Margulies, Mike Stephenson, Steve Linhart, 1989. */
3 /* NetHack may be freely redistributed.  See license for details. */
4
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. */
9
10 #include "hack.h"
11
12 STATIC_PTR int NDECL(prayer_done);
13 STATIC_DCL struct obj *NDECL(worst_cursed_item);
14 STATIC_DCL int NDECL(in_trouble);
15 STATIC_DCL void FDECL(fix_worst_trouble, (int));
16 STATIC_DCL void FDECL(angrygods, (ALIGNTYP_P));
17 STATIC_DCL void FDECL(at_your_feet, (const char *));
18 STATIC_DCL void NDECL(gcrownu);
19 STATIC_DCL void FDECL(pleased, (ALIGNTYP_P));
20 STATIC_DCL void FDECL(godvoice, (ALIGNTYP_P, const char *));
21 STATIC_DCL void FDECL(god_zaps_you, (ALIGNTYP_P));
22 STATIC_DCL void FDECL(fry_by_god, (ALIGNTYP_P, BOOLEAN_P));
23 STATIC_DCL void FDECL(gods_angry, (ALIGNTYP_P));
24 STATIC_DCL void FDECL(gods_upset, (ALIGNTYP_P));
25 STATIC_DCL void FDECL(consume_offering, (struct obj *));
26 STATIC_DCL boolean FDECL(water_prayer, (BOOLEAN_P));
27 STATIC_DCL boolean FDECL(blocked_boulder, (int, int));
28
29 /* simplify a few tests */
30 #define Cursed_obj(obj, typ) ((obj) && (obj)->otyp == (typ) && (obj)->cursed)
31
32 /*
33  * Logic behind deities and altars and such:
34  * + prayers are made to your god if not on an altar, and to the altar's god
35  *   if you are on an altar
36  * + If possible, your god answers all prayers, which is why bad things happen
37  *   if you try to pray on another god's altar
38  * + sacrifices work basically the same way, but the other god may decide to
39  *   accept your allegiance, after which they are your god.  If rejected,
40  *   your god takes over with your punishment.
41  * + if you're in Gehennom, all messages come from Moloch
42  */
43
44 /*
45  *      Moloch, who dwells in Gehennom, is the "renegade" cruel god
46  *      responsible for the theft of the Amulet from Marduk, the Creator.
47  *      Moloch is unaligned.
48  */
49 /*JP
50 static const char *Moloch = "Moloch";
51 */
52 static const char *Moloch = "\83\82\81[\83\8d\83b\83N";
53
54 static const char *godvoices[] = {
55 /*JP
56     "booms out", "thunders", "rings out", "booms",
57 */
58     "\8b¿\82«\82í\82½\82Á\82½", "\97\8b\82Ì\82æ\82¤\82É\8b¿\82¢\82½", "\82Æ\82Ç\82ë\82¢\82½", "\8b¿\82¢\82½",
59 };
60
61 /* values calculated when prayer starts, and used when completed */
62 static aligntyp p_aligntyp;
63 static int p_trouble;
64 static int p_type; /* (-1)-3: (-1)=really naughty, 3=really good */
65
66 #define PIOUS 20
67 #define DEVOUT 14
68 #define FERVENT 9
69 #define STRIDENT 4
70
71 /*
72  * The actual trouble priority is determined by the order of the
73  * checks performed in in_trouble() rather than by these numeric
74  * values, so keep that code and these values synchronized in
75  * order to have the values be meaningful.
76  */
77
78 #define TROUBLE_STONED 14
79 #define TROUBLE_SLIMED 13
80 #define TROUBLE_STRANGLED 12
81 #define TROUBLE_LAVA 11
82 #define TROUBLE_SICK 10
83 #define TROUBLE_STARVING 9
84 #define TROUBLE_REGION 8 /* stinking cloud */
85 #define TROUBLE_HIT 7
86 #define TROUBLE_LYCANTHROPE 6
87 #define TROUBLE_COLLAPSING 5
88 #define TROUBLE_STUCK_IN_WALL 4
89 #define TROUBLE_CURSED_LEVITATION 3
90 #define TROUBLE_UNUSEABLE_HANDS 2
91 #define TROUBLE_CURSED_BLINDFOLD 1
92
93 #define TROUBLE_PUNISHED (-1)
94 #define TROUBLE_FUMBLING (-2)
95 #define TROUBLE_CURSED_ITEMS (-3)
96 #define TROUBLE_SADDLE (-4)
97 #define TROUBLE_BLIND (-5)
98 #define TROUBLE_POISONED (-6)
99 #define TROUBLE_WOUNDED_LEGS (-7)
100 #define TROUBLE_HUNGRY (-8)
101 #define TROUBLE_STUNNED (-9)
102 #define TROUBLE_CONFUSED (-10)
103 #define TROUBLE_HALLUCINATION (-11)
104
105
106 #define ugod_is_angry() (u.ualign.record < 0)
107 #define on_altar() IS_ALTAR(levl[u.ux][u.uy].typ)
108 #define on_shrine() ((levl[u.ux][u.uy].altarmask & AM_SHRINE) != 0)
109 #define a_align(x, y) ((aligntyp) Amask2align(levl[x][y].altarmask & AM_MASK))
110
111 /* critically low hit points if hp <= 5 or hp <= maxhp/N for some N */
112 boolean
113 critically_low_hp(only_if_injured)
114 boolean only_if_injured; /* determines whether maxhp <= 5 matters */
115 {
116     int divisor, hplim, curhp = Upolyd ? u.mh : u.uhp,
117                         maxhp = Upolyd ? u.mhmax : u.uhpmax;
118
119     if (only_if_injured && !(curhp < maxhp))
120         return FALSE;
121     /* if maxhp is extremely high, use lower threshold for the division test
122        (golden glow cuts off at 11+5*lvl, nurse interaction at 25*lvl; this
123        ought to use monster hit dice--and a smaller multiplier--rather than
124        ulevel when polymorphed, but polyself doesn't maintain that) */
125     hplim = 15 * u.ulevel;
126     if (maxhp > hplim)
127         maxhp = hplim;
128     /* 7 used to be the unconditional divisor */
129     switch (xlev_to_rank(u.ulevel)) { /* maps 1..30 into 0..8 */
130     case 0:
131     case 1:
132         divisor = 5;
133         break; /* explvl 1 to 5 */
134     case 2:
135     case 3:
136         divisor = 6;
137         break; /* explvl 6 to 13 */
138     case 4:
139     case 5:
140         divisor = 7;
141         break; /* explvl 14 to 21 */
142     case 6:
143     case 7:
144         divisor = 8;
145         break; /* explvl 22 to 29 */
146     default:
147         divisor = 9;
148         break; /* explvl 30+ */
149     }
150     /* 5 is a magic number in TROUBLE_HIT handling below */
151     return (boolean) (curhp <= 5 || curhp * divisor <= maxhp);
152 }
153
154 /*
155  * Return 0 if nothing particular seems wrong, positive numbers for
156  * serious trouble, and negative numbers for comparative annoyances.
157  * This returns the worst problem. There may be others, and the gods
158  * may fix more than one.
159  *
160  * This could get as bizarre as noting surrounding opponents, (or
161  * hostile dogs), but that's really hard.
162  *
163  * We could force rehumanize of polyselfed people, but we can't tell
164  * unintentional shape changes from the other kind. Oh well.
165  * 3.4.2: make an exception if polymorphed into a form which lacks
166  * hands; that's a case where the ramifications override this doubt.
167  */
168 STATIC_OVL int
169 in_trouble()
170 {
171     struct obj *otmp;
172     int i, j, count = 0;
173
174     /*
175      * major troubles
176      */
177     if (Stoned)
178         return TROUBLE_STONED;
179     if (Slimed)
180         return TROUBLE_SLIMED;
181     if (Strangled)
182         return TROUBLE_STRANGLED;
183     if (u.utrap && u.utraptype == TT_LAVA)
184         return TROUBLE_LAVA;
185     if (Sick)
186         return TROUBLE_SICK;
187     if (u.uhs >= WEAK)
188         return TROUBLE_STARVING;
189     if (region_danger())
190         return TROUBLE_REGION;
191     if (critically_low_hp(FALSE))
192         return TROUBLE_HIT;
193     if (u.ulycn >= LOW_PM)
194         return TROUBLE_LYCANTHROPE;
195     if (near_capacity() >= EXT_ENCUMBER && AMAX(A_STR) - ABASE(A_STR) > 3)
196         return TROUBLE_COLLAPSING;
197
198     for (i = -1; i <= 1; i++)
199         for (j = -1; j <= 1; j++) {
200             if (!i && !j)
201                 continue;
202             if (!isok(u.ux + i, u.uy + j)
203                 || IS_ROCK(levl[u.ux + i][u.uy + j].typ)
204                 || (blocked_boulder(i, j) && !throws_rocks(youmonst.data)))
205                 count++;
206         }
207     if (count == 8 && !Passes_walls)
208         return TROUBLE_STUCK_IN_WALL;
209
210     if (Cursed_obj(uarmf, LEVITATION_BOOTS)
211         || stuck_ring(uleft, RIN_LEVITATION)
212         || stuck_ring(uright, RIN_LEVITATION))
213         return TROUBLE_CURSED_LEVITATION;
214     if (nohands(youmonst.data) || !freehand()) {
215         /* for bag/box access [cf use_container()]...
216            make sure it's a case that we know how to handle;
217            otherwise "fix all troubles" would get stuck in a loop */
218         if (welded(uwep))
219             return TROUBLE_UNUSEABLE_HANDS;
220         if (Upolyd && nohands(youmonst.data)
221             && (!Unchanging || ((otmp = unchanger()) != 0 && otmp->cursed)))
222             return TROUBLE_UNUSEABLE_HANDS;
223     }
224     if (Blindfolded && ublindf->cursed)
225         return TROUBLE_CURSED_BLINDFOLD;
226
227     /*
228      * minor troubles
229      */
230     if (Punished || (u.utrap && u.utraptype == TT_BURIEDBALL))
231         return TROUBLE_PUNISHED;
232     if (Cursed_obj(uarmg, GAUNTLETS_OF_FUMBLING)
233         || Cursed_obj(uarmf, FUMBLE_BOOTS))
234         return TROUBLE_FUMBLING;
235     if (worst_cursed_item())
236         return TROUBLE_CURSED_ITEMS;
237     if (u.usteed) { /* can't voluntarily dismount from a cursed saddle */
238         otmp = which_armor(u.usteed, W_SADDLE);
239         if (Cursed_obj(otmp, SADDLE))
240             return TROUBLE_SADDLE;
241     }
242
243     if (Blinded > 1 && haseyes(youmonst.data)
244         && (!u.uswallow
245             || !attacktype_fordmg(u.ustuck->data, AT_ENGL, AD_BLND)))
246         return TROUBLE_BLIND;
247     for (i = 0; i < A_MAX; i++)
248         if (ABASE(i) < AMAX(i))
249             return TROUBLE_POISONED;
250     if (Wounded_legs && !u.usteed)
251         return TROUBLE_WOUNDED_LEGS;
252     if (u.uhs >= HUNGRY)
253         return TROUBLE_HUNGRY;
254     if (HStun & TIMEOUT)
255         return TROUBLE_STUNNED;
256     if (HConfusion & TIMEOUT)
257         return TROUBLE_CONFUSED;
258     if (HHallucination & TIMEOUT)
259         return TROUBLE_HALLUCINATION;
260     return 0;
261 }
262
263 /* select an item for TROUBLE_CURSED_ITEMS */
264 STATIC_OVL struct obj *
265 worst_cursed_item()
266 {
267     register struct obj *otmp;
268
269     /* if strained or worse, check for loadstone first */
270     if (near_capacity() >= HVY_ENCUMBER) {
271         for (otmp = invent; otmp; otmp = otmp->nobj)
272             if (Cursed_obj(otmp, LOADSTONE))
273                 return otmp;
274     }
275     /* weapon takes precedence if it is interfering
276        with taking off a ring or putting on a shield */
277     if (welded(uwep) && (uright || bimanual(uwep))) { /* weapon */
278         otmp = uwep;
279         /* gloves come next, due to rings */
280     } else if (uarmg && uarmg->cursed) { /* gloves */
281         otmp = uarmg;
282         /* then shield due to two handed weapons and spells */
283     } else if (uarms && uarms->cursed) { /* shield */
284         otmp = uarms;
285         /* then cloak due to body armor */
286     } else if (uarmc && uarmc->cursed) { /* cloak */
287         otmp = uarmc;
288     } else if (uarm && uarm->cursed) { /* suit */
289         otmp = uarm;
290     } else if (uarmh && uarmh->cursed) { /* helmet */
291         otmp = uarmh;
292     } else if (uarmf && uarmf->cursed) { /* boots */
293         otmp = uarmf;
294     } else if (uarmu && uarmu->cursed) { /* shirt */
295         otmp = uarmu;
296     } else if (uamul && uamul->cursed) { /* amulet */
297         otmp = uamul;
298     } else if (uleft && uleft->cursed) { /* left ring */
299         otmp = uleft;
300     } else if (uright && uright->cursed) { /* right ring */
301         otmp = uright;
302     } else if (ublindf && ublindf->cursed) { /* eyewear */
303         otmp = ublindf;                      /* must be non-blinding lenses */
304         /* if weapon wasn't handled above, do it now */
305     } else if (welded(uwep)) { /* weapon */
306         otmp = uwep;
307         /* active secondary weapon even though it isn't welded */
308     } else if (uswapwep && uswapwep->cursed && u.twoweap) {
309         otmp = uswapwep;
310         /* all worn items ought to be handled by now */
311     } else {
312         for (otmp = invent; otmp; otmp = otmp->nobj) {
313             if (!otmp->cursed)
314                 continue;
315             if (otmp->otyp == LOADSTONE || confers_luck(otmp))
316                 break;
317         }
318     }
319     return otmp;
320 }
321
322 STATIC_OVL void
323 fix_worst_trouble(trouble)
324 int trouble;
325 {
326     int i;
327     struct obj *otmp = 0;
328     const char *what = (const char *) 0;
329 #if 0 /*JP*/
330     static NEARDATA const char leftglow[] = "Your left ring softly glows",
331                                rightglow[] = "Your right ring softly glows";
332 #else
333     static NEARDATA const char leftglow[] = "\8d\82Ì\8ew\97Ö",
334                                rightglow[] = "\89E\82Ì\8ew\97Ö";
335 #endif
336
337     switch (trouble) {
338     case TROUBLE_STONED:
339 /*JP
340         make_stoned(0L, "You feel more limber.", 0, (char *) 0);
341 */
342         make_stoned(0L, "\93î\82ç\82©\82­\82È\82Á\82½\82æ\82¤\82È\8bC\82ª\82µ\82½\81D", 0, (char *) 0);
343         break;
344     case TROUBLE_SLIMED:
345 /*JP
346         make_slimed(0L, "The slime disappears.");
347 */
348         make_slimed(0L, "\82Ç\82ë\82Ç\82ë\8a´\82Í\8fÁ\82¦\82½\81D");
349         break;
350     case TROUBLE_STRANGLED:
351         if (uamul && uamul->otyp == AMULET_OF_STRANGULATION) {
352 /*JP
353             Your("amulet vanishes!");
354 */
355             Your("\96\82\8f\9c\82¯\82Í\8fÁ\82¦\82³\82Á\82½\81I");
356             useup(uamul);
357         }
358 /*JP
359         You("can breathe again.");
360 */
361         You("\82Ü\82½\8cÄ\8bz\82Å\82«\82é\82æ\82¤\82É\82È\82Á\82½\81D");
362         Strangled = 0;
363         context.botl = 1;
364         break;
365     case TROUBLE_LAVA:
366 /*JP
367         You("are back on solid ground.");
368 */
369         You("\8cÅ\82¢\92n\96Ê\82É\96ß\82Á\82½\81D");
370         /* teleport should always succeed, but if not,
371          * just untrap them.
372          */
373         if (!safe_teleds(FALSE))
374             u.utrap = 0;
375         break;
376     case TROUBLE_STARVING:
377         losestr(-1);
378         /*FALLTHRU*/
379     case TROUBLE_HUNGRY:
380 /*JP
381         Your("%s feels content.", body_part(STOMACH));
382 */
383         Your("\90H\97~\82Í\96\9e\82½\82³\82ê\82½\81D");
384         init_uhunger();
385         context.botl = 1;
386         break;
387     case TROUBLE_SICK:
388 /*JP
389         You_feel("better.");
390 */
391         You("\8bC\95ª\82ª\97Ç\82­\82È\82Á\82½\81D");
392         make_sick(0L, (char *) 0, FALSE, SICK_ALL);
393         break;
394     case TROUBLE_REGION:
395         /* stinking cloud, with hero vulnerable to HP loss */
396         region_safety();
397         break;
398     case TROUBLE_HIT:
399         /* "fix all troubles" will keep trying if hero has
400            5 or less hit points, so make sure they're always
401            boosted to be more than that */
402 /*JP
403         You_feel("much better.");
404 */
405         You("\82Æ\82Ä\82à\8bC\95ª\82ª\97Ç\82­\82È\82Á\82½\81D");
406         if (Upolyd) {
407             u.mhmax += rnd(5);
408             if (u.mhmax <= 5)
409                 u.mhmax = 5 + 1;
410             u.mh = u.mhmax;
411         }
412         if (u.uhpmax < u.ulevel * 5 + 11)
413             u.uhpmax += rnd(5);
414         if (u.uhpmax <= 5)
415             u.uhpmax = 5 + 1;
416         u.uhp = u.uhpmax;
417         context.botl = 1;
418         break;
419     case TROUBLE_COLLAPSING:
420         /* override Fixed_abil; uncurse that if feasible */
421 #if 0 /*JP*/
422         You_feel("%sstronger.",
423                  (AMAX(A_STR) - ABASE(A_STR) > 6) ? "much " : "");
424 #else
425         You_feel("%s\8b­\82­\82È\82Á\82½\82æ\82¤\82¾\81D",
426                  (AMAX(A_STR) - ABASE(A_STR) > 6) ? "\82Æ\82Ä\82à" : "");
427 #endif
428         ABASE(A_STR) = AMAX(A_STR);
429         context.botl = 1;
430         if (Fixed_abil) {
431             if ((otmp = stuck_ring(uleft, RIN_SUSTAIN_ABILITY)) != 0) {
432                 if (otmp == uleft)
433                     what = leftglow;
434             } else if ((otmp = stuck_ring(uright, RIN_SUSTAIN_ABILITY))
435                        != 0) {
436                 if (otmp == uright)
437                     what = rightglow;
438             }
439             if (otmp)
440                 goto decurse;
441         }
442         break;
443     case TROUBLE_STUCK_IN_WALL:
444 /*JP
445         Your("surroundings change.");
446 */
447         Your("\8aÂ\8b«\82ª\95Ï\89»\82µ\82½\81D");
448         /* no control, but works on no-teleport levels */
449         (void) safe_teleds(FALSE);
450         break;
451     case TROUBLE_CURSED_LEVITATION:
452         if (Cursed_obj(uarmf, LEVITATION_BOOTS)) {
453             otmp = uarmf;
454         } else if ((otmp = stuck_ring(uleft, RIN_LEVITATION)) != 0) {
455             if (otmp == uleft)
456                 what = leftglow;
457         } else if ((otmp = stuck_ring(uright, RIN_LEVITATION)) != 0) {
458             if (otmp == uright)
459                 what = rightglow;
460         }
461         goto decurse;
462     case TROUBLE_UNUSEABLE_HANDS:
463         if (welded(uwep)) {
464             otmp = uwep;
465             goto decurse;
466         }
467         if (Upolyd && nohands(youmonst.data)) {
468             if (!Unchanging) {
469 /*JP
470                 Your("shape becomes uncertain.");
471 */
472                 Your("\91Ì\8c^\82Í\95s\96¾\8am\82É\82È\82Á\82½\81D");
473                 rehumanize(); /* "You return to {normal} form." */
474             } else if ((otmp = unchanger()) != 0 && otmp->cursed) {
475                 /* otmp is an amulet of unchanging */
476                 goto decurse;
477             }
478         }
479         if (nohands(youmonst.data) || !freehand())
480             impossible("fix_worst_trouble: couldn't cure hands.");
481         break;
482     case TROUBLE_CURSED_BLINDFOLD:
483         otmp = ublindf;
484         goto decurse;
485     case TROUBLE_LYCANTHROPE:
486         you_unwere(TRUE);
487         break;
488     /*
489      */
490     case TROUBLE_PUNISHED:
491 /*JP
492         Your("chain disappears.");
493 */
494         Your("\8d½\82Í\8fÁ\82¦\82½\81D");
495         if (u.utrap && u.utraptype == TT_BURIEDBALL)
496             buried_ball_to_freedom();
497         else
498             unpunish();
499         break;
500     case TROUBLE_FUMBLING:
501         if (Cursed_obj(uarmg, GAUNTLETS_OF_FUMBLING))
502             otmp = uarmg;
503         else if (Cursed_obj(uarmf, FUMBLE_BOOTS))
504             otmp = uarmf;
505         goto decurse;
506         /*NOTREACHED*/
507         break;
508     case TROUBLE_CURSED_ITEMS:
509         otmp = worst_cursed_item();
510         if (otmp == uright)
511             what = rightglow;
512         else if (otmp == uleft)
513             what = leftglow;
514     decurse:
515         if (!otmp) {
516             impossible("fix_worst_trouble: nothing to uncurse.");
517             return;
518         }
519         if (!Blind || (otmp == ublindf && Blindfolded_only)) {
520 #if 0 /*JP*/
521             pline("%s %s.",
522                   what ? what : (const char *) Yobjnam2(otmp, "softly glow"),
523                   hcolor(NH_AMBER));
524 #else
525             Your("%s\82Í%s\82â\82í\82ç\82©\82­\8bP\82¢\82½\81D",
526                  what ? what : (const char *)xname(otmp),
527                  jconj_adj(hcolor(NH_AMBER)));
528 #endif
529             iflags.last_msg = PLNMSG_OBJ_GLOWS;
530             otmp->bknown = TRUE;
531         }
532         uncurse(otmp);
533         update_inventory();
534         break;
535     case TROUBLE_POISONED:
536         /* override Fixed_abil; ignore items which confer that */
537         if (Hallucination)
538 /*JP
539             pline("There's a tiger in your tank.");
540 */
541             pline("\82 \82È\82½\82Ì\83^\83\93\83N\82Ì\92\86\82É\83g\83\89\82ª\82¢\82é\81D");
542         else
543 /*JP
544             You_feel("in good health again.");
545 */
546             You("\82Ü\82½\8c\92\8dN\82É\82È\82Á\82½\82æ\82¤\82È\8bC\82ª\82µ\82½\81D");
547         for (i = 0; i < A_MAX; i++) {
548             if (ABASE(i) < AMAX(i)) {
549                 ABASE(i) = AMAX(i);
550                 context.botl = 1;
551             }
552         }
553         (void) encumber_msg();
554         break;
555     case TROUBLE_BLIND: {
556 #if 0 /*JP*/
557         const char *eyes = body_part(EYE);
558
559         if (eyecount(youmonst.data) != 1)
560             eyes = makeplural(eyes);
561         Your("%s %s better.", eyes, vtense(eyes, "feel"));
562 #else
563         pline("%s\82ª\89ñ\95\9c\82µ\82½\82æ\82¤\82È\8bC\82ª\82µ\82½\81D", body_part(EYE));
564 #endif
565         u.ucreamed = 0;
566         make_blinded(0L, FALSE);
567         break;
568     }
569     case TROUBLE_WOUNDED_LEGS:
570         heal_legs();
571         break;
572     case TROUBLE_STUNNED:
573         make_stunned(0L, TRUE);
574         break;
575     case TROUBLE_CONFUSED:
576         make_confused(0L, TRUE);
577         break;
578     case TROUBLE_HALLUCINATION:
579 /*JP
580         pline("Looks like you are back in Kansas.");
581 */
582         pline("\8c©\82Ä\81I\83J\83\93\83U\83X\82É\96ß\82Á\82Ä\82«\82½\82ñ\82¾\82í\81D");
583         (void) make_hallucinated(0L, FALSE, 0L);
584         break;
585     case TROUBLE_SADDLE:
586         otmp = which_armor(u.usteed, W_SADDLE);
587         if (!Blind) {
588 /*JP
589             pline("%s %s.", Yobjnam2(otmp, "softly glow"), hcolor(NH_AMBER));
590 */
591             pline("%s\82Í%s\82â\82í\82ç\82©\82­\8bP\82¢\82½\81D", y_monnam(u.usteed), hcolor(NH_AMBER));
592             otmp->bknown = TRUE;
593         }
594         uncurse(otmp);
595         break;
596     }
597 }
598
599 /* "I am sometimes shocked by...  the nuns who never take a bath without
600  * wearing a bathrobe all the time.  When asked why, since no man can see
601  * them,
602  * they reply 'Oh, but you forget the good God'.  Apparently they conceive of
603  * the Deity as a Peeping Tom, whose omnipotence enables Him to see through
604  * bathroom walls, but who is foiled by bathrobes." --Bertrand Russell, 1943
605  * Divine wrath, dungeon walls, and armor follow the same principle.
606  */
607 STATIC_OVL void
608 god_zaps_you(resp_god)
609 aligntyp resp_god;
610 {
611     if (u.uswallow) {
612         pline(
613 /*JP
614           "Suddenly a bolt of lightning comes down at you from the heavens!");
615 */
616           "\93Ë\91R\8bó\82©\82ç\88î\8dÈ\82ª\97\8e\82¿\82Ä\82«\82½\81I");
617 /*JP
618         pline("It strikes %s!", mon_nam(u.ustuck));
619 */
620         pline("\88î\8dÈ\82Í%s\82É\96½\92\86\82µ\82½\81I", mon_nam(u.ustuck));
621         if (!resists_elec(u.ustuck)) {
622 /*JP
623             pline("%s fries to a crisp!", Monnam(u.ustuck));
624 */
625             pline("%s\82Í\83p\83\8a\83p\83\8a\82É\82È\82Á\82½\81I", Monnam(u.ustuck));
626             /* Yup, you get experience.  It takes guts to successfully
627              * pull off this trick on your god, anyway.
628              */
629             xkilled(u.ustuck, 0);
630         } else
631 /*JP
632             pline("%s seems unaffected.", Monnam(u.ustuck));
633 */
634             pline("%s\82Í\89e\8b¿\82ð\8eó\82¯\82È\82¢\82æ\82¤\82¾\81D", Monnam(u.ustuck));
635     } else {
636 /*JP
637         pline("Suddenly, a bolt of lightning strikes you!");
638 */
639         pline("\93Ë\91R\81C\88î\8dÈ\82ª\82 \82È\82½\82É\96½\92\86\82µ\82½\81I");
640         if (Reflecting) {
641             shieldeff(u.ux, u.uy);
642             if (Blind)
643 /*JP
644                 pline("For some reason you're unaffected.");
645 */
646                 pline("\82È\82º\82©\82 \82È\82½\82Í\89e\8b¿\82ð\8eó\82¯\82È\82¢\81D");
647             else
648 /*JP
649                 (void) ureflects("%s reflects from your %s.", "It");
650 */
651                 (void) ureflects("%s\82Í%s\82É\82æ\82Á\82Ä\94½\8eË\82³\82ê\82½\81D", "\89½\82©");
652         } else if (Shock_resistance) {
653             shieldeff(u.ux, u.uy);
654 /*JP
655             pline("It seems not to affect you.");
656 */
657             pline("\88î\8dÈ\82Í\89e\8b¿\82ð\97^\82¦\82È\82¢\82æ\82¤\82¾\81D");
658         } else
659             fry_by_god(resp_god, FALSE);
660     }
661
662 /*JP
663     pline("%s is not deterred...", align_gname(resp_god));
664 */
665     pline("%s\82Í\82 \82«\82ç\82ß\82È\82©\82Á\82½\81D\81D\81D", align_gname(resp_god));
666     if (u.uswallow) {
667 /*JP
668         pline("A wide-angle disintegration beam aimed at you hits %s!",
669 */
670         pline("\82 \82È\82½\82ð\91_\82Á\82½\8dL\8ap\95²\8dÓ\8cõ\90ü\82ª%s\82É\96½\92\86\82µ\82½\81I",
671               mon_nam(u.ustuck));
672         if (!resists_disint(u.ustuck)) {
673 /*JP
674             pline("%s disintegrates into a pile of dust!", Monnam(u.ustuck));
675 */
676             pline("%s\82Í\82¿\82è\82Ì\8eR\82É\82È\82Á\82½\81I", Monnam(u.ustuck));
677             xkilled(u.ustuck, 2); /* no corpse */
678         } else
679 /*JP
680             pline("%s seems unaffected.", Monnam(u.ustuck));
681 */
682             pline("%s\82Í\89e\8b¿\82ð\8eó\82¯\82È\82¢\82æ\82¤\82¾\81D", Monnam(u.ustuck));
683     } else {
684 /*JP
685         pline("A wide-angle disintegration beam hits you!");
686 */
687         pline("\8dL\8ap\95²\8dÓ\8cõ\90ü\82ª\82 \82È\82½\82É\96½\92\86\82µ\82½\81I");
688
689         /* disintegrate shield and body armor before disintegrating
690          * the impudent mortal, like black dragon breath -3.
691          */
692         if (uarms && !(EReflecting & W_ARMS)
693             && !(EDisint_resistance & W_ARMS))
694             (void) destroy_arm(uarms);
695         if (uarmc && !(EReflecting & W_ARMC)
696             && !(EDisint_resistance & W_ARMC))
697             (void) destroy_arm(uarmc);
698         if (uarm && !(EReflecting & W_ARM) && !(EDisint_resistance & W_ARM)
699             && !uarmc)
700             (void) destroy_arm(uarm);
701         if (uarmu && !uarm && !uarmc)
702             (void) destroy_arm(uarmu);
703         if (!Disint_resistance)
704             fry_by_god(resp_god, TRUE);
705         else {
706 /*JP
707             You("bask in its %s glow for a minute...", NH_BLACK);
708 */
709             You("\82µ\82Î\82ç\82­\81C\82»\82Ì%s\8bP\82«\82Å\92g\82Ü\82Á\82½\81D\81D\81D", NH_BLACK);
710 /*JP
711             godvoice(resp_god, "I believe it not!");
712 */
713             godvoice(resp_god, "\90M\82\82ç\82ê\82Ê\81I");
714         }
715         if (Is_astralevel(&u.uz) || Is_sanctum(&u.uz)) {
716             /* one more try for high altars */
717 /*JP
718             verbalize("Thou cannot escape my wrath, mortal!");
719 */
720             verbalize("\92è\96½\82Ì\8eÒ\82æ\81C\93ð\89ä\82ª\93{\82è\82©\82ç\93¦\82ª\82ê\82é\82±\82Æ\82È\82ç\82ñ\81I");
721             summon_minion(resp_god, FALSE);
722             summon_minion(resp_god, FALSE);
723             summon_minion(resp_god, FALSE);
724 /*JP
725             verbalize("Destroy %s, my servants!", uhim());
726 */
727             verbalize("%s\82ð\8eE\82¹\81C\82í\82ª\89º\96l\82æ\81I", uhim());
728         }
729     }
730 }
731
732 STATIC_OVL void
733 fry_by_god(resp_god, via_disintegration)
734 aligntyp resp_god;
735 boolean via_disintegration;
736 {
737 #if 0 /*JP*/
738     You("%s!", !via_disintegration ? "fry to a crisp"
739                                    : "disintegrate into a pile of dust");
740 #else
741     You("%s\81I", !via_disintegration ? "\83p\83\8a\83p\83\8a\82É\82È\82Á\82½"
742                                     : "\82¿\82è\82Ì\8eR\82É\82È\82Á\82½");
743 #endif
744     killer.format = KILLED_BY;
745 /*JP
746     Sprintf(killer.name, "the wrath of %s", align_gname(resp_god));
747 */
748     Sprintf(killer.name, "%s\82Ì\93{\82è\82É\90G\82ê", align_gname(resp_god));
749     done(DIED);
750 }
751
752 STATIC_OVL void
753 angrygods(resp_god)
754 aligntyp resp_god;
755 {
756     int maxanger;
757
758     if (Inhell)
759         resp_god = A_NONE;
760     u.ublessed = 0;
761
762     /* changed from tmp = u.ugangr + abs (u.uluck) -- rph */
763     /* added test for alignment diff -dlc */
764     if (resp_god != u.ualign.type)
765         maxanger = u.ualign.record / 2 + (Luck > 0 ? -Luck / 3 : -Luck);
766     else
767         maxanger = 3 * u.ugangr + ((Luck > 0 || u.ualign.record >= STRIDENT)
768                                    ? -Luck / 3
769                                    : -Luck);
770     if (maxanger < 1)
771         maxanger = 1; /* possible if bad align & good luck */
772     else if (maxanger > 15)
773         maxanger = 15; /* be reasonable */
774
775     switch (rn2(maxanger)) {
776     case 0:
777     case 1:
778 #if 0 /*JP*/
779         You_feel("that %s is %s.", align_gname(resp_god),
780                  Hallucination ? "bummed" : "displeased");
781 #else
782         You("%s\82ª%s\82¢\82é\82æ\82¤\82È\8bC\82ª\82µ\82½\81D", align_gname(resp_god),
783             Hallucination ? "\82Ë\82¾\82Á\82Ä" : "\97§\95 \82µ\82Ä");
784 #endif
785         break;
786     case 2:
787     case 3:
788         godvoice(resp_god, (char *) 0);
789 #if 0 /*JP*/
790         pline("\"Thou %s, %s.\"",
791               (ugod_is_angry() && resp_god == u.ualign.type)
792                   ? "hast strayed from the path"
793                   : "art arrogant",
794               youmonst.data->mlet == S_HUMAN ? "mortal" : "creature");
795 #else
796         pline("\81u\93ð%s\81C%s\82æ\81D\81v",
797               (ugod_is_angry() && resp_god == u.ualign.type)
798               ? "\82»\82Ì\93¹\82©\82ç\93¥\82Ý\8fo\82Ä\82¨\82é"
799               : "\98ü\96\9d\82È\82è",
800               youmonst.data->mlet == S_HUMAN ? "\92è\96½\82Ì\82à\82Ì" : "\90\95¨");
801 #endif
802 /*JP
803         verbalize("Thou must relearn thy lessons!");
804 */
805         verbalize("\93ð\82¢\82Ü\88ê\93x\8aw\82Ô\82×\82µ\81I");
806         (void) adjattrib(A_WIS, -1, FALSE);
807         losexp((char *) 0);
808         break;
809     case 6:
810         if (!Punished) {
811             gods_angry(resp_god);
812             punish((struct obj *) 0);
813             break;
814         } /* else fall thru */
815     case 4:
816     case 5:
817         gods_angry(resp_god);
818         if (!Blind && !Antimagic)
819 /*JP
820             pline("%s glow surrounds you.", An(hcolor(NH_BLACK)));
821 */
822             pline("%s\8cõ\82ª\82 \82È\82½\82ð\8eæ\82è\8aª\82¢\82½\81D", An(hcolor(NH_BLACK)));
823         rndcurse();
824         break;
825     case 7:
826     case 8:
827         godvoice(resp_god, (char *) 0);
828 #if 0 /*JP*/
829         verbalize("Thou durst %s me?",
830                   (on_altar() && (a_align(u.ux, u.uy) != resp_god))
831                       ? "scorn"
832                       : "call upon");
833 #else
834         verbalize("\93ð\81C\89ä%s\81H",
835                   (on_altar() && (a_align(u.ux,u.uy) != resp_god))
836                   ? "\82ð\82³\82°\82·\82Ý\82µ\82©\81H"
837                   : "\82É\8bF\82è\82ð\8b\81\82ß\82µ\82©\81H");
838 #endif
839 #if 0 /*JP*/
840         pline("\"Then die, %s!\"",
841               youmonst.data->mlet == S_HUMAN ? "mortal" : "creature");
842 #else
843         pline("\81u\8e\80\82Ë\81C%s\82æ\81I\81v",
844               youmonst.data->mlet == S_HUMAN ? "\92è\96½\82Ì\82à\82Ì" : "\90\95¨");
845 #endif
846         summon_minion(resp_god, FALSE);
847         break;
848
849     default:
850         gods_angry(resp_god);
851         god_zaps_you(resp_god);
852         break;
853     }
854     u.ublesscnt = rnz(300);
855     return;
856 }
857
858 /* helper to print "str appears at your feet", or appropriate */
859 static void
860 at_your_feet(str)
861 const char *str;
862 {
863     if (Blind)
864         str = Something;
865     if (u.uswallow) {
866         /* barrier between you and the floor */
867 #if 0 /*JP*/
868         pline("%s %s into %s %s.", str, vtense(str, "drop"),
869               s_suffix(mon_nam(u.ustuck)), mbodypart(u.ustuck, STOMACH));
870 #else
871         pline("%s\82ª%s\82Ì%s\82É\97\8e\82¿\82½\81D", str,
872               mon_nam(u.ustuck), mbodypart(u.ustuck, STOMACH));
873 #endif
874     } else {
875 #if 0 /*JP*/
876         pline("%s %s %s your %s!", str,
877               Blind ? "lands" : vtense(str, "appear"),
878               Levitation ? "beneath" : "at", makeplural(body_part(FOOT)));
879 #else
880         pline("%s\82ª\82 \82È\82½\82Ì%s\82É%s\81I", str,
881               Levitation ? "\89º\95û" : "\91«\8c³",
882               Blind ? "\92\85\92n\82µ\82½" : "\8c»\82í\82ê\82½");
883 #endif
884     }
885 }
886
887 STATIC_OVL void
888 gcrownu()
889 {
890     struct obj *obj;
891     boolean already_exists, in_hand;
892     short class_gift;
893     int sp_no;
894 #define ok_wep(o) ((o) && ((o)->oclass == WEAPON_CLASS || is_weptool(o)))
895
896     HSee_invisible |= FROMOUTSIDE;
897     HFire_resistance |= FROMOUTSIDE;
898     HCold_resistance |= FROMOUTSIDE;
899     HShock_resistance |= FROMOUTSIDE;
900     HSleep_resistance |= FROMOUTSIDE;
901     HPoison_resistance |= FROMOUTSIDE;
902     godvoice(u.ualign.type, (char *) 0);
903
904     obj = ok_wep(uwep) ? uwep : 0;
905     already_exists = in_hand = FALSE; /* lint suppression */
906     switch (u.ualign.type) {
907     case A_LAWFUL:
908         u.uevent.uhand_of_elbereth = 1;
909 /*JP
910         verbalize("I crown thee...  The Hand of Elbereth!");
911 */
912         verbalize("\93ð\82É\81D\81D\81D\83G\83\8b\83x\83\8c\83X\82Ì\8cä\8eè\82Ì\89h\97_\82ð\82³\82¸\82¯\82æ\82¤\81I");
913         break;
914     case A_NEUTRAL:
915         u.uevent.uhand_of_elbereth = 2;
916         in_hand = (uwep && uwep->oartifact == ART_VORPAL_BLADE);
917         already_exists =
918             exist_artifact(LONG_SWORD, artiname(ART_VORPAL_BLADE));
919 /*JP
920         verbalize("Thou shalt be my Envoy of Balance!");
921 */
922         verbalize("\93ð\81C\89ä\82ª\92²\98a\82Ì\8eg\8eÒ\82È\82è\81I");
923         break;
924     case A_CHAOTIC:
925         u.uevent.uhand_of_elbereth = 3;
926         in_hand = (uwep && uwep->oartifact == ART_STORMBRINGER);
927         already_exists =
928             exist_artifact(RUNESWORD, artiname(ART_STORMBRINGER));
929 #if 0 /*JP*/
930         verbalize("Thou art chosen to %s for My Glory!",
931                   already_exists && !in_hand ? "take lives" : "steal souls");
932 #else
933         verbalize("\93ð\81C\89ä\82ª\89h\8cõ\82Ì\82½\82ß%s\8eÒ\82Æ\82µ\82Ä\91I\82Î\82ê\82ñ\81I",
934                   already_exists && !in_hand ?
935                               "\90\82«\82È\82ª\82ç\82¦\82ñ" : "\8d°\82ð\92D\82¢\82µ\82½\82ß\82é");
936 #endif
937         break;
938     }
939
940     class_gift = STRANGE_OBJECT;
941     /* 3.3.[01] had this in the A_NEUTRAL case below,
942        preventing chaotic wizards from receiving a spellbook */
943     if (Role_if(PM_WIZARD)
944         && (!uwep || (uwep->oartifact != ART_VORPAL_BLADE
945                       && uwep->oartifact != ART_STORMBRINGER))
946         && !carrying(SPE_FINGER_OF_DEATH)) {
947         class_gift = SPE_FINGER_OF_DEATH;
948     make_splbk:
949         obj = mksobj(class_gift, TRUE, FALSE);
950         bless(obj);
951         obj->bknown = TRUE;
952 /*JP
953         at_your_feet("A spellbook");
954 */
955         at_your_feet("\96\82\96@\8f\91");
956         dropy(obj);
957         u.ugifts++;
958         /* when getting a new book for known spell, enhance
959            currently wielded weapon rather than the book */
960         for (sp_no = 0; sp_no < MAXSPELL; sp_no++)
961             if (spl_book[sp_no].sp_id == class_gift) {
962                 if (ok_wep(uwep))
963                     obj = uwep; /* to be blessed,&c */
964                 break;
965             }
966     } else if (Role_if(PM_MONK) && (!uwep || !uwep->oartifact)
967                && !carrying(SPE_RESTORE_ABILITY)) {
968         /* monks rarely wield a weapon */
969         class_gift = SPE_RESTORE_ABILITY;
970         goto make_splbk;
971     }
972
973     switch (u.ualign.type) {
974     case A_LAWFUL:
975         if (class_gift != STRANGE_OBJECT) {
976             ; /* already got bonus above */
977         } else if (obj && obj->otyp == LONG_SWORD && !obj->oartifact) {
978             if (!Blind)
979 /*JP
980                 Your("sword shines brightly for a moment.");
981 */
982                 Your("\8c\95\82Í\82µ\82Î\82ç\82­\82Ì\8aÔ\96¾\82é\82­\8bP\82¢\82½\81D");
983             obj = oname(obj, artiname(ART_EXCALIBUR));
984             if (obj && obj->oartifact == ART_EXCALIBUR)
985                 u.ugifts++;
986         }
987         /* acquire Excalibur's skill regardless of weapon or gift */
988         unrestrict_weapon_skill(P_LONG_SWORD);
989         if (obj && obj->oartifact == ART_EXCALIBUR)
990             discover_artifact(ART_EXCALIBUR);
991         break;
992     case A_NEUTRAL:
993         if (class_gift != STRANGE_OBJECT) {
994             ; /* already got bonus above */
995         } else if (obj && in_hand) {
996 /*JP
997             Your("%s goes snicker-snack!", xname(obj));
998 */
999             Your("%s\82Í\83T\83N\83T\83N\82É\82È\82Á\82½\81I", xname(obj));
1000             obj->dknown = TRUE;
1001         } else if (!already_exists) {
1002             obj = mksobj(LONG_SWORD, FALSE, FALSE);
1003             obj = oname(obj, artiname(ART_VORPAL_BLADE));
1004             obj->spe = 1;
1005 /*JP
1006             at_your_feet("A sword");
1007 */
1008             at_your_feet("\8c\95");
1009             dropy(obj);
1010             u.ugifts++;
1011         }
1012         /* acquire Vorpal Blade's skill regardless of weapon or gift */
1013         unrestrict_weapon_skill(P_LONG_SWORD);
1014         if (obj && obj->oartifact == ART_VORPAL_BLADE)
1015             discover_artifact(ART_VORPAL_BLADE);
1016         break;
1017     case A_CHAOTIC: {
1018         char swordbuf[BUFSZ];
1019
1020 /*JP
1021         Sprintf(swordbuf, "%s sword", hcolor(NH_BLACK));
1022 */
1023         Sprintf(swordbuf, "%s\8c\95", hcolor(NH_BLACK));
1024         if (class_gift != STRANGE_OBJECT) {
1025             ; /* already got bonus above */
1026         } else if (obj && in_hand) {
1027 /*JP
1028             Your("%s hums ominously!", swordbuf);
1029 */
1030             Your("%s\82Í\8bC\96¡\82Ì\88«\82¢\89¹\82ð\97§\82Ä\82½\81I", swordbuf);
1031             obj->dknown = TRUE;
1032         } else if (!already_exists) {
1033             obj = mksobj(RUNESWORD, FALSE, FALSE);
1034             obj = oname(obj, artiname(ART_STORMBRINGER));
1035             obj->spe = 1;
1036             at_your_feet(An(swordbuf));
1037             dropy(obj);
1038             u.ugifts++;
1039         }
1040         /* acquire Stormbringer's skill regardless of weapon or gift */
1041         unrestrict_weapon_skill(P_BROAD_SWORD);
1042         if (obj && obj->oartifact == ART_STORMBRINGER)
1043             discover_artifact(ART_STORMBRINGER);
1044         break;
1045     }
1046     default:
1047         obj = 0; /* lint */
1048         break;
1049     }
1050
1051     /* enhance weapon regardless of alignment or artifact status */
1052     if (ok_wep(obj)) {
1053         bless(obj);
1054         obj->oeroded = obj->oeroded2 = 0;
1055         obj->oerodeproof = TRUE;
1056         obj->bknown = obj->rknown = TRUE;
1057         if (obj->spe < 1)
1058             obj->spe = 1;
1059         /* acquire skill in this weapon */
1060         unrestrict_weapon_skill(weapon_type(obj));
1061     } else if (class_gift == STRANGE_OBJECT) {
1062         /* opportunity knocked, but there was nobody home... */
1063 /*JP
1064         You_feel("unworthy.");
1065 */
1066         You("\89¿\92l\82ª\82È\82¢\82Æ\8ev\82Á\82½\81D");
1067     }
1068     update_inventory();
1069
1070     /* lastly, confer an extra skill slot/credit beyond the
1071        up-to-29 you can get from gaining experience levels */
1072     add_weapon_skill(1);
1073     return;
1074 }
1075
1076 STATIC_OVL void
1077 pleased(g_align)
1078 aligntyp g_align;
1079 {
1080     /* don't use p_trouble, worst trouble may get fixed while praying */
1081     int trouble = in_trouble(); /* what's your worst difficulty? */
1082     int pat_on_head = 0, kick_on_butt;
1083
1084 #if 0 /*JP*/
1085     You_feel("that %s is %s.", align_gname(g_align),
1086              (u.ualign.record >= DEVOUT)
1087                  ? Hallucination ? "pleased as punch" : "well-pleased"
1088                  : (u.ualign.record >= STRIDENT)
1089                        ? Hallucination ? "ticklish" : "pleased"
1090                        : Hallucination ? "full" : "satisfied");
1091 #else
1092         pline("%s\82ª%s\82æ\82¤\82È\8bC\82ª\82µ\82½\81D", align_gname(g_align),
1093               (u.ualign.record >= DEVOUT)
1094                   ? Hallucination ? "\82­\82»\8b@\8c\99\82¢\82¢" : "\82²\8b@\8c\99\97í\82µ\82¢"
1095                   : (u.ualign.record >= STRIDENT)
1096                         ? Hallucination ? "\82­\82·\82®\82Á\82½\82ª\82Á\82Ä\82¢\82é" : "\8fã\8b@\8c\99\82Å\82 \82é"
1097                         : Hallucination ? "\95 \82¢\82Á\82Ï\82¢\82Å\82 \82é" : "\96\9e\91«\82µ\82Ä\82¢\82é");
1098 #endif
1099
1100     /* not your deity */
1101     if (on_altar() && p_aligntyp != u.ualign.type) {
1102         adjalign(-1);
1103         return;
1104     } else if (u.ualign.record < 2 && trouble <= 0)
1105         adjalign(1);
1106
1107     /*
1108      * Depending on your luck & align level, the god you prayed to will:
1109      *  - fix your worst problem if it's major;
1110      *  - fix all your major problems;
1111      *  - fix your worst problem if it's minor;
1112      *  - fix all of your problems;
1113      *  - do you a gratuitous favor.
1114      *
1115      * If you make it to the the last category, you roll randomly again
1116      * to see what they do for you.
1117      *
1118      * If your luck is at least 0, then you are guaranteed rescued from
1119      * your worst major problem.
1120      */
1121     if (!trouble && u.ualign.record >= DEVOUT) {
1122         /* if hero was in trouble, but got better, no special favor */
1123         if (p_trouble == 0)
1124             pat_on_head = 1;
1125     } else {
1126         int action, prayer_luck;
1127         int tryct = 0;
1128
1129         /* Negative luck is normally impossible here (can_pray() forces
1130            prayer failure in that situation), but it's possible for
1131            Luck to drop during the period of prayer occupation and
1132            become negative by the time we get here.  [Reported case
1133            was lawful character whose stinking cloud caused a delayed
1134            killing of a peaceful human, triggering the "murderer"
1135            penalty while successful prayer was in progress.  It could
1136            also happen due to inconvenient timing on Friday 13th, but
1137            the magnitude there (-1) isn't big enough to cause trouble.]
1138            We don't bother remembering start-of-prayer luck, just make
1139            sure it's at least -1 so that Luck+2 is big enough to avoid
1140            a divide by zero crash when generating a random number.  */
1141         prayer_luck = max(Luck, -1); /* => (prayer_luck + 2 > 0) */
1142         action = rn1(prayer_luck + (on_altar() ? 3 + on_shrine() : 2), 1);
1143         if (!on_altar())
1144             action = min(action, 3);
1145         if (u.ualign.record < STRIDENT)
1146             action = (u.ualign.record > 0 || !rnl(2)) ? 1 : 0;
1147
1148         switch (min(action, 5)) {
1149         case 5:
1150             pat_on_head = 1;
1151         case 4:
1152             do
1153                 fix_worst_trouble(trouble);
1154             while ((trouble = in_trouble()) != 0);
1155             break;
1156
1157         case 3:
1158             fix_worst_trouble(trouble);
1159         case 2:
1160             /* arbitrary number of tries */
1161             while ((trouble = in_trouble()) > 0 && (++tryct < 10))
1162                 fix_worst_trouble(trouble);
1163             break;
1164
1165         case 1:
1166             if (trouble > 0)
1167                 fix_worst_trouble(trouble);
1168         case 0:
1169             break; /* your god blows you off, too bad */
1170         }
1171     }
1172
1173     /* note: can't get pat_on_head unless all troubles have just been
1174        fixed or there were no troubles to begin with; hallucination
1175        won't be in effect so special handling for it is superfluous */
1176     if (pat_on_head)
1177         switch (rn2((Luck + 6) >> 1)) {
1178         case 0:
1179             break;
1180         case 1:
1181             if (uwep && (welded(uwep) || uwep->oclass == WEAPON_CLASS
1182                          || is_weptool(uwep))) {
1183                 char repair_buf[BUFSZ];
1184
1185                 *repair_buf = '\0';
1186                 if (uwep->oeroded || uwep->oeroded2)
1187 #if 0 /*JP*/
1188                     Sprintf(repair_buf, " and %s now as good as new",
1189                             otense(uwep, "are"));
1190 #else
1191                     Sprintf(repair_buf, "\82³\82ç\82É\90V\95i\93¯\97l\82É\82È\82Á\82½\81D");
1192 #endif
1193
1194                 if (uwep->cursed) {
1195                     if (!Blind) {
1196 #if 0 /*JP*/
1197                         pline("%s %s%s.", Yobjnam2(uwep, "softly glow"),
1198                               hcolor(NH_AMBER), repair_buf);
1199 #else
1200                         Your("%s\82Í%s\82â\82í\82ç\82©\82­\8bP\82¢\82½\81D%s", xname(uwep), 
1201                              jconj_adj(hcolor(NH_AMBER)), repair_buf);
1202 #endif
1203                         iflags.last_msg = PLNMSG_OBJ_GLOWS;
1204                     } else
1205 #if 0 /*JP*/
1206                         You_feel("the power of %s over %s.", u_gname(),
1207                                  yname(uwep));
1208 #else
1209                         pline("%s\82Ì\97Í\82ª%s\82É\92\8d\82ª\82ê\82Ä\82¢\82é\82Ì\82ð\8a´\82\82½\81D", u_gname(),
1210                               xname(uwep));
1211 #endif
1212                     uncurse(uwep);
1213                     uwep->bknown = TRUE;
1214                     *repair_buf = '\0';
1215                 } else if (!uwep->blessed) {
1216                     if (!Blind) {
1217 #if 0 /*JP*/
1218                         pline("%s with %s aura%s.",
1219                               Yobjnam2(uwep, "softly glow"),
1220                               an(hcolor(NH_LIGHT_BLUE)), repair_buf);
1221 #else
1222                         Your("%s\82Í%s\82â\82í\82ç\82©\82È\83I\81[\83\89\82É\82Â\82Â\82Ü\82ê\82½\81D%s",
1223                              xname(uwep), 
1224                              an(hcolor(NH_LIGHT_BLUE)), repair_buf);
1225 #endif
1226                         iflags.last_msg = PLNMSG_OBJ_GLOWS;
1227                     } else
1228 #if 0 /*JP*/
1229                         You_feel("the blessing of %s over %s.", u_gname(),
1230                                  yname(uwep));
1231 #else
1232                         pline("%s\82Ì\8fj\95\9f\82ª%s\82É\92\8d\82ª\82ê\82Ä\82¢\82é\82Ì\82ð\8a´\82\82½\81D", u_gname(),
1233                               xname(uwep));
1234 #endif
1235                     bless(uwep);
1236                     uwep->bknown = TRUE;
1237                     *repair_buf = '\0';
1238                 }
1239
1240                 /* fix any rust/burn/rot damage, but don't protect
1241                    against future damage */
1242                 if (uwep->oeroded || uwep->oeroded2) {
1243                     uwep->oeroded = uwep->oeroded2 = 0;
1244                     /* only give this message if we didn't just bless
1245                        or uncurse (which has already given a message) */
1246                     if (*repair_buf)
1247 #if 0 /*JP*/
1248                         pline("%s as good as new!",
1249                               Yobjnam2(uwep, Blind ? "feel" : "look"));
1250 #else
1251                         Your("%s\82Í\90V\95i\93¯\97l\82É\82È\82Á\82½%s\81I",
1252                              xname(uwep), Blind ? "\82æ\82¤\82È\8bC\82ª\82·\82é" : "");
1253 #endif
1254                 }
1255                 update_inventory();
1256             }
1257             break;
1258         case 3:
1259             /* takes 2 hints to get the music to enter the stronghold;
1260                skip if you've solved it via mastermind or destroyed the
1261                drawbridge (both set uopened_dbridge) or if you've already
1262                travelled past the Valley of the Dead (gehennom_entered) */
1263             if (!u.uevent.uopened_dbridge && !u.uevent.gehennom_entered) {
1264                 if (u.uevent.uheard_tune < 1) {
1265                     godvoice(g_align, (char *) 0);
1266 #if 0 /*JP*/
1267                     verbalize("Hark, %s!", youmonst.data->mlet == S_HUMAN
1268                                                ? "mortal"
1269                                                : "creature");
1270 #else
1271                     verbalize("%s\82æ\81C\95·\82¯\81I", youmonst.data->mlet == S_HUMAN
1272                                                   ? "\92è\96½\82Ì\8eÒ"
1273                                                   : "\90\95¨");
1274 #endif
1275                     verbalize(
1276 /*JP
1277                        "To enter the castle, thou must play the right tune!");
1278 */
1279                         "\93ð\8fé\82É\93ü\82ç\82ñ\82Æ\97~\82·\82é\82È\82ç\82Î\81C\90³\82µ\82«\92²\82×\82ð\91t\82Å\82é\82×\82µ\81I");
1280                     u.uevent.uheard_tune++;
1281                     break;
1282                 } else if (u.uevent.uheard_tune < 2) {
1283 /*JP
1284                     You_hear("a divine music...");
1285 */
1286                     You_hear("\90_\82Ì\89¹\8ay\82ð\95·\82¢\82½\81D\81D\81D");
1287 /*JP
1288                     pline("It sounds like:  \"%s\".", tune);
1289 */
1290                     pline("\82»\82ê\82Í\8e\9f\82Ì\82æ\82¤\82É\95·\82±\82¦\82½:  \81u%s\81v", tune);
1291                     u.uevent.uheard_tune++;
1292                     break;
1293                 }
1294             }
1295         /* Otherwise, falls into next case */
1296         case 2:
1297             if (!Blind)
1298 /*JP
1299                 You("are surrounded by %s glow.", an(hcolor(NH_GOLDEN)));
1300 */
1301                 You("%s\8bP\82«\82É\82Â\82Â\82Ü\82ê\82½\81D", hcolor(NH_GOLDEN));
1302             /* if any levels have been lost (and not yet regained),
1303                treat this effect like blessed full healing */
1304             if (u.ulevel < u.ulevelmax) {
1305                 u.ulevelmax -= 1; /* see potion.c */
1306                 pluslvl(FALSE);
1307             } else {
1308                 u.uhpmax += 5;
1309                 if (Upolyd)
1310                     u.mhmax += 5;
1311             }
1312             u.uhp = u.uhpmax;
1313             if (Upolyd)
1314                 u.mh = u.mhmax;
1315             ABASE(A_STR) = AMAX(A_STR);
1316             if (u.uhunger < 900)
1317                 init_uhunger();
1318             if (u.uluck < 0)
1319                 u.uluck = 0;
1320             make_blinded(0L, TRUE);
1321             context.botl = 1;
1322             break;
1323         case 4: {
1324             register struct obj *otmp;
1325             int any = 0;
1326
1327             if (Blind)
1328 /*JP
1329                 You_feel("the power of %s.", u_gname());
1330 */
1331                 You("%s\82Ì\97Í\82ð\8a´\82\82½\81D", u_gname());
1332             else
1333 /*JP
1334                 You("are surrounded by %s aura.", an(hcolor(NH_LIGHT_BLUE)));
1335 */
1336                 You("%s\83I\81[\83\89\82É\82Â\82Â\82Ü\82ê\82½\81D", an(hcolor(NH_LIGHT_BLUE)));
1337             for (otmp = invent; otmp; otmp = otmp->nobj) {
1338                 if (otmp->cursed) {
1339                     if (!Blind) {
1340 #if 0 /*JP*/
1341                         pline("%s %s.", Yobjnam2(otmp, "softly glow"),
1342                               hcolor(NH_AMBER));
1343 #else
1344                         Your("%s\82Í%s\82â\82í\82ç\82©\82­\8bP\82¢\82½\81D", xname(otmp),
1345                              jconj_adj(hcolor(NH_AMBER)));
1346 #endif
1347                         iflags.last_msg = PLNMSG_OBJ_GLOWS;
1348                         otmp->bknown = TRUE;
1349                         ++any;
1350                     }
1351                     uncurse(otmp);
1352                 }
1353             }
1354             if (any)
1355                 update_inventory();
1356             break;
1357         }
1358         case 5: {
1359             static NEARDATA const char msg[] =
1360 /*JP
1361                 "\"and thus I grant thee the gift of %s!\"";
1362 */
1363                 "\81u\82³\82ç\82É\93ð\82É%s\82ð\82³\82¸\82¯\82æ\82¤\81I\81v";
1364
1365             godvoice(u.ualign.type,
1366 /*JP
1367                      "Thou hast pleased me with thy progress,");
1368 */
1369                      "\93ð\82Ì\90¬\92·\82Í\94ñ\8fí\82É\96]\82Ü\82µ\82¢\81C");
1370             if (!(HTelepat & INTRINSIC)) {
1371                 HTelepat |= FROMOUTSIDE;
1372 /*JP
1373                 pline(msg, "Telepathy");
1374 */
1375                 pline(msg, "\83e\83\8c\83p\83V\81[");
1376                 if (Blind)
1377                     see_monsters();
1378             } else if (!(HFast & INTRINSIC)) {
1379                 HFast |= FROMOUTSIDE;
1380 /*JP
1381                 pline(msg, "Speed");
1382 */
1383                 pline(msg, "\91¬\82³");
1384             } else if (!(HStealth & INTRINSIC)) {
1385                 HStealth |= FROMOUTSIDE;
1386 /*JP
1387                 pline(msg, "Stealth");
1388 */
1389                 pline(msg, "\94E\82Ì\97Í");
1390             } else {
1391                 if (!(HProtection & INTRINSIC)) {
1392                     HProtection |= FROMOUTSIDE;
1393                     if (!u.ublessed)
1394                         u.ublessed = rn1(3, 2);
1395                 } else
1396                     u.ublessed++;
1397 /*JP
1398                 pline(msg, "my protection");
1399 */
1400                 pline(msg, "\89ä\82ª\8cì\82è");
1401             }
1402 /*JP
1403             verbalize("Use it wisely in my name!");
1404 */
1405             verbalize("\89ä\82ª\96¼\82É\89\97\82¢\82Ä\97L\8cø\82É\8eg\82¤\82ª\82æ\82¢\81I");
1406             break;
1407         }
1408         case 7:
1409         case 8:
1410             if (u.ualign.record >= PIOUS && !u.uevent.uhand_of_elbereth) {
1411                 gcrownu();
1412                 break;
1413             } /* else FALLTHRU */
1414         case 6: {
1415             struct obj *otmp;
1416             int sp_no, trycnt = u.ulevel + 1;
1417
1418             /* not yet known spells given preference over already known ones
1419              */
1420             /* Also, try to grant a spell for which there is a skill slot */
1421             otmp = mkobj(SPBOOK_CLASS, TRUE);
1422             while (--trycnt > 0) {
1423                 if (otmp->otyp != SPE_BLANK_PAPER) {
1424                     for (sp_no = 0; sp_no < MAXSPELL; sp_no++)
1425                         if (spl_book[sp_no].sp_id == otmp->otyp)
1426                             break;
1427                     if (sp_no == MAXSPELL
1428                         && !P_RESTRICTED(spell_skilltype(otmp->otyp)))
1429                         break; /* usable, but not yet known */
1430                 } else {
1431                     if (!objects[SPE_BLANK_PAPER].oc_name_known
1432                         || carrying(MAGIC_MARKER))
1433                         break;
1434                 }
1435                 otmp->otyp = rnd_class(bases[SPBOOK_CLASS], SPE_BLANK_PAPER);
1436             }
1437             bless(otmp);
1438 /*JP
1439             at_your_feet("A spellbook");
1440 */
1441             at_your_feet("\96\82\96@\8f\91");
1442             place_object(otmp, u.ux, u.uy);
1443             newsym(u.ux, u.uy);
1444             break;
1445         }
1446         default:
1447             impossible("Confused deity!");
1448             break;
1449         }
1450
1451     u.ublesscnt = rnz(350);
1452     kick_on_butt = u.uevent.udemigod ? 1 : 0;
1453     if (u.uevent.uhand_of_elbereth)
1454         kick_on_butt++;
1455     if (kick_on_butt)
1456         u.ublesscnt += kick_on_butt * rnz(1000);
1457
1458     return;
1459 }
1460
1461 /* either blesses or curses water on the altar,
1462  * returns true if it found any water here.
1463  */
1464 STATIC_OVL boolean
1465 water_prayer(bless_water)
1466 boolean bless_water;
1467 {
1468     register struct obj *otmp;
1469     register long changed = 0;
1470     boolean other = FALSE, bc_known = !(Blind || Hallucination);
1471
1472     for (otmp = level.objects[u.ux][u.uy]; otmp; otmp = otmp->nexthere) {
1473         /* turn water into (un)holy water */
1474         if (otmp->otyp == POT_WATER
1475             && (bless_water ? !otmp->blessed : !otmp->cursed)) {
1476             otmp->blessed = bless_water;
1477             otmp->cursed = !bless_water;
1478             otmp->bknown = bc_known;
1479             changed += otmp->quan;
1480         } else if (otmp->oclass == POTION_CLASS)
1481             other = TRUE;
1482     }
1483     if (!Blind && changed) {
1484 #if 0 /*JP*/
1485         pline("%s potion%s on the altar glow%s %s for a moment.",
1486               ((other && changed > 1L) ? "Some of the"
1487                                        : (other ? "One of the" : "The")),
1488               ((other || changed > 1L) ? "s" : ""), (changed > 1L ? "" : "s"),
1489               (bless_water ? hcolor(NH_LIGHT_BLUE) : hcolor(NH_BLACK)));
1490 #else
1491         pline("%s\8dÕ\92d\82Ì\96ò\82Í\88ê\8fu%s\8bP\82¢\82½\81D",
1492               (other && changed > 1L) ? "\82¢\82­\82Â\82©\82Ì"
1493                                       : "",
1494               jconj_adj(bless_water ? hcolor(NH_LIGHT_BLUE) : hcolor(NH_BLACK)));
1495 #endif
1496     }
1497     return (boolean) (changed > 0L);
1498 }
1499
1500 STATIC_OVL void
1501 godvoice(g_align, words)
1502 aligntyp g_align;
1503 const char *words;
1504 {
1505 #if 0 /*JP*/
1506     const char *quot = "";
1507
1508     if (words)
1509         quot = "\"";
1510     else
1511         words = "";
1512
1513     pline_The("voice of %s %s: %s%s%s", align_gname(g_align),
1514               godvoices[rn2(SIZE(godvoices))], quot, words, quot);
1515 #else
1516     if (words)
1517         pline("%s\82Ì\90º\82ª%s: \81u%s\81v", align_gname(g_align),
1518               godvoices[rn2(SIZE(godvoices))], words);
1519     else
1520         pline("%s\82Ì\90º\82ª%s\81F", align_gname(g_align),
1521               godvoices[rn2(SIZE(godvoices))]);
1522 #endif
1523 }
1524
1525 STATIC_OVL void
1526 gods_angry(g_align)
1527 aligntyp g_align;
1528 {
1529 /*JP
1530     godvoice(g_align, "Thou hast angered me.");
1531 */
1532     godvoice(g_align, "\93ð\81C\89ä\82ð\93{\82ç\82µ\82ß\82½\82è\81D");
1533 }
1534
1535 /* The g_align god is upset with you. */
1536 STATIC_OVL void
1537 gods_upset(g_align)
1538 aligntyp g_align;
1539 {
1540     if (g_align == u.ualign.type)
1541         u.ugangr++;
1542     else if (u.ugangr)
1543         u.ugangr--;
1544     angrygods(g_align);
1545 }
1546
1547 STATIC_OVL void
1548 consume_offering(otmp)
1549 register struct obj *otmp;
1550 {
1551     if (Hallucination)
1552         switch (rn2(3)) {
1553         case 0:
1554 /*JP
1555             Your("sacrifice sprouts wings and a propeller and roars away!");
1556 */
1557             Your("\8c£\8fã\95¨\82Í\89H\82ð\82Í\82â\82µ\81C\83v\83\8d\83y\83\89\82ª\82Ü\82í\82è\81C\94ò\82ñ\82Å\82Á\82½\81I");
1558             break;
1559         case 1:
1560 /*JP
1561             Your("sacrifice puffs up, swelling bigger and bigger, and pops!");
1562 */
1563             Your("\8c£\8fã\95¨\82Í\95¬\89\8c\82ð\82 \82°\81C\82Ç\82ñ\82Ç\82ñ\96c\82ê\81C\82»\82µ\82Ä\82Í\82\82¯\82½\81I");
1564             break;
1565         case 2:
1566             Your(
1567 /*JP
1568      "sacrifice collapses into a cloud of dancing particles and fades away!");
1569 */
1570      "\8c£\8fã\95¨\82Í\8d×\82©\82­\8dÓ\82¯\81C\97x\82è\8fo\82µ\81C\82Ç\82±\82©\82É\8ds\82Á\82Ä\82µ\82Ü\82Á\82½\81I");
1571             break;
1572         }
1573     else if (Blind && u.ualign.type == A_LAWFUL)
1574 /*JP
1575         Your("sacrifice disappears!");
1576 */
1577         Your("\8c£\8fã\95¨\82Í\8fÁ\82¦\82½\81I");
1578     else
1579 #if 0 /*JP*/
1580         Your("sacrifice is consumed in a %s!",
1581              u.ualign.type == A_LAWFUL ? "flash of light" : "burst of flame");
1582 #else
1583         Your("\8c£\8fã\95¨\82Í%s\8fÁ\82¦\82³\82Á\82½\81I",
1584              u.ualign.type == A_LAWFUL ? "\82Ü\82Î\82ä\82¢\8cõ\82ð\95ú\82¿" : "\89\8a\82ð\8fã\82°");
1585 #endif
1586     if (carried(otmp))
1587         useup(otmp);
1588     else
1589         useupf(otmp, 1L);
1590     exercise(A_WIS, TRUE);
1591 }
1592
1593 int
1594 dosacrifice()
1595 {
1596     static NEARDATA const char cloud_of_smoke[] =
1597 /*JP
1598         "A cloud of %s smoke surrounds you...";
1599 */
1600         "%s\89\8c\82ª\82 \82È\82½\82ð\8eæ\82è\88Í\82ñ\82¾\81D\81D\81D";
1601     register struct obj *otmp;
1602     int value = 0, pm;
1603     boolean highaltar;
1604     aligntyp altaralign = a_align(u.ux, u.uy);
1605
1606     if (!on_altar() || u.uswallow) {
1607 /*JP
1608         You("are not standing on an altar.");
1609 */
1610         You("\8dÕ\92d\82Ì\8fã\82É\97§\82Á\82Ä\82¢\82È\82¢\81D");
1611         return 0;
1612     }
1613     highaltar = ((Is_astralevel(&u.uz) || Is_sanctum(&u.uz))
1614                  && (levl[u.ux][u.uy].altarmask & AM_SHRINE));
1615
1616 /*JP
1617     otmp = floorfood("sacrifice", 1);
1618 */
1619     otmp = floorfood("\95ù\82°\82é", 1);
1620     if (!otmp)
1621         return 0;
1622     /*
1623      * Was based on nutritional value and aging behavior (< 50 moves).
1624      * Sacrificing a food ration got you max luck instantly, making the
1625      * gods as easy to please as an angry dog!
1626      *
1627      * Now only accepts corpses, based on the game's evaluation of their
1628      * toughness.  Human and pet sacrifice, as well as sacrificing unicorns
1629      * of your alignment, is strongly discouraged.
1630      */
1631 #define MAXVALUE 24 /* Highest corpse value (besides Wiz) */
1632
1633     if (otmp->otyp == CORPSE) {
1634         register struct permonst *ptr = &mons[otmp->corpsenm];
1635         struct monst *mtmp;
1636         extern const int monstr[];
1637
1638         /* KMH, conduct */
1639         u.uconduct.gnostic++;
1640
1641         /* you're handling this corpse, even if it was killed upon the altar
1642          */
1643         feel_cockatrice(otmp, TRUE);
1644         if (rider_corpse_revival(otmp, FALSE))
1645             return 1;
1646
1647         if (otmp->corpsenm == PM_ACID_BLOB
1648             || (monstermoves <= peek_at_iced_corpse_age(otmp) + 50)) {
1649             value = monstr[otmp->corpsenm] + 1;
1650             if (otmp->oeaten)
1651                 value = eaten_stat(value, otmp);
1652         }
1653
1654         if (your_race(ptr)) {
1655             if (is_demon(youmonst.data)) {
1656 /*JP
1657                 You("find the idea very satisfying.");
1658 */
1659                 You("\82»\82Ì\8dl\82¦\82Í\91f\90°\82µ\82¢\82Æ\8ev\82Á\82½\81D");
1660                 exercise(A_WIS, TRUE);
1661             } else if (u.ualign.type != A_CHAOTIC) {
1662 /*JP
1663                 pline("You'll regret this infamous offense!");
1664 */
1665                 pline("\93ð\81C\82±\82Ì\95\8e\90J\82Ì\8ds\82È\82¢\82ð\8cã\89÷\82·\82é\82×\82µ\81I");
1666                 exercise(A_WIS, FALSE);
1667             }
1668
1669             if (highaltar
1670                 && (altaralign != A_CHAOTIC || u.ualign.type != A_CHAOTIC)) {
1671                 goto desecrate_high_altar;
1672             } else if (altaralign != A_CHAOTIC && altaralign != A_NONE) {
1673                 /* curse the lawful/neutral altar */
1674 /*JP
1675                 pline_The("altar is stained with %s blood.", urace.adj);
1676 */
1677                 pline("\8dÕ\92d\82Í%s\82Ì\8c\8c\82Å\89\98\82ê\82Ä\82¢\82é\81D", urace.adj);
1678                 levl[u.ux][u.uy].altarmask = AM_CHAOTIC;
1679                 angry_priest();
1680             } else {
1681                 struct monst *dmon;
1682                 const char *demonless_msg;
1683
1684                 /* Human sacrifice on a chaotic or unaligned altar */
1685                 /* is equivalent to demon summoning */
1686                 if (altaralign == A_CHAOTIC && u.ualign.type != A_CHAOTIC) {
1687                     pline(
1688 /*JP
1689                     "The blood floods the altar, which vanishes in %s cloud!",
1690 */
1691                     "\8c\8c\82ª\8dÕ\92d\82©\82ç\82 \82Ó\82ê\81C\8dÕ\92d\82Í%s\89_\82Æ\82È\82è\8fÁ\82¦\82½\81I",
1692                           an(hcolor(NH_BLACK)));
1693                     levl[u.ux][u.uy].typ = ROOM;
1694                     levl[u.ux][u.uy].altarmask = 0;
1695                     newsym(u.ux, u.uy);
1696                     angry_priest();
1697 /*JP
1698                     demonless_msg = "cloud dissipates";
1699 */
1700                     demonless_msg = "\89_\82Í\8fÁ\82¦\82½\81D";
1701                 } else {
1702                     /* either you're chaotic or altar is Moloch's or both */
1703 /*JP
1704                     pline_The("blood covers the altar!");
1705 */
1706                     pline("\8c\8c\82ª\8dÕ\92d\82ð\95¢\82Á\82½\81I");
1707                     change_luck(altaralign == A_NONE ? -2 : 2);
1708 /*JP
1709                     demonless_msg = "blood coagulates";
1710 */
1711                     demonless_msg = "\8c\8c\82ª\82±\82Ñ\82è\82Â\82¢\82½";
1712                 }
1713                 if ((pm = dlord(altaralign)) != NON_PM
1714                     && (dmon = makemon(&mons[pm], u.ux, u.uy, NO_MM_FLAGS))
1715                            != 0) {
1716                     char dbuf[BUFSZ];
1717
1718                     Strcpy(dbuf, a_monnam(dmon));
1719 /*JP
1720                     if (!strcmpi(dbuf, "it"))
1721 */
1722                     if (!strcmpi(dbuf, "\89½\8eÒ\82©"))
1723 /*JP
1724                         Strcpy(dbuf, "something dreadful");
1725 */
1726                         Strcpy(dbuf, "\89½\82©\8b°\82ë\82µ\82¢\82à\82Ì");
1727                     else
1728                         dmon->mstrategy &= ~STRAT_APPEARMSG;
1729 /*JP
1730                     You("have summoned %s!", dbuf);
1731 */
1732                     You("%s\82ð\8f¢\8a«\82µ\82½\81I", dbuf);
1733                     if (sgn(u.ualign.type) == sgn(dmon->data->maligntyp))
1734                         dmon->mpeaceful = TRUE;
1735 /*JP
1736                     You("are terrified, and unable to move.");
1737 */
1738                     You("\8b°\95|\82Å\93®\82¯\82È\82­\82È\82Á\82½\81D");
1739                     nomul(-3);
1740                     multi_reason = "being terrified of a demon";
1741                     nomovemsg = 0;
1742                 } else
1743 /*JP
1744                     pline_The("%s.", demonless_msg);
1745 */
1746                     pline("%s\81D", demonless_msg);
1747             }
1748
1749             if (u.ualign.type != A_CHAOTIC) {
1750                 adjalign(-5);
1751                 u.ugangr += 3;
1752                 (void) adjattrib(A_WIS, -1, TRUE);
1753                 if (!Inhell)
1754                     angrygods(u.ualign.type);
1755                 change_luck(-5);
1756             } else
1757                 adjalign(5);
1758             if (carried(otmp))
1759                 useup(otmp);
1760             else
1761                 useupf(otmp, 1L);
1762             return 1;
1763         } else if (has_omonst(otmp)
1764                    && (mtmp = get_mtraits(otmp, FALSE)) != 0
1765                    && mtmp->mtame) {
1766                 /* mtmp is a temporary pointer to a tame monster's attributes,
1767                  * not a real monster */
1768 /*JP
1769             pline("So this is how you repay loyalty?");
1770 */
1771             pline("\82»\82ê\82Å\82±\82ê\82ª\82 \82È\82½\82Ì\92\89\8b`\82É\95ñ\82¢\82é\82à\82Ì\82©\81H");
1772             adjalign(-3);
1773             value = -1;
1774             HAggravate_monster |= FROMOUTSIDE;
1775         } else if (is_undead(ptr)) { /* Not demons--no demon corpses */
1776             if (u.ualign.type != A_CHAOTIC)
1777                 value += 1;
1778         } else if (is_unicorn(ptr)) {
1779             int unicalign = sgn(ptr->maligntyp);
1780
1781             if (unicalign == altaralign) {
1782                 /* When same as altar, always a very bad action.
1783                  */
1784 #if 0 /*JP*/
1785                 pline("Such an action is an insult to %s!",
1786                       (unicalign == A_CHAOTIC) ? "chaos"
1787                          : unicalign ? "law" : "balance");
1788 #else
1789                 pline("\82»\82Ì\82æ\82¤\82È\8ds\93®\82Í\81w%s\81x\82É\94½\82·\82é\81I",
1790                       (unicalign == A_CHAOTIC) ? "\8d¬\93×"
1791                          : unicalign ? "\92\81\8f\98" : "\92²\98a");
1792 #endif
1793                 (void) adjattrib(A_WIS, -1, TRUE);
1794                 value = -5;
1795             } else if (u.ualign.type == altaralign) {
1796                 /* When different from altar, and altar is same as yours,
1797                  * it's a very good action.
1798                  */
1799                 if (u.ualign.record < ALIGNLIM)
1800 /*JP
1801                     You_feel("appropriately %s.", align_str(u.ualign.type));
1802 */
1803                     You("%s\82É\82Ó\82³\82í\82µ\82¢\82Æ\8a´\82\82½\81D", align_str(u.ualign.type));
1804                 else
1805 /*JP
1806                     You_feel("you are thoroughly on the right path.");
1807 */
1808                     You("\8a®\91S\82É\90³\82µ\82¢\93¹\82ð\95à\82ñ\82Å\82¢\82é\82Ì\82ð\8a´\82\82½\81D");
1809                 adjalign(5);
1810                 value += 3;
1811             } else if (unicalign == u.ualign.type) {
1812                 /* When sacrificing unicorn of your alignment to altar not of
1813                  * your alignment, your god gets angry and it's a conversion.
1814                  */
1815                 u.ualign.record = -1;
1816                 value = 1;
1817             } else {
1818                 /* Otherwise, unicorn's alignment is different from yours
1819                  * and different from the altar's.  It's an ordinary (well,
1820                  * with a bonus) sacrifice on a cross-aligned altar.
1821                  */
1822                 value += 3;
1823             }
1824         }
1825     } /* corpse */
1826
1827     if (otmp->otyp == AMULET_OF_YENDOR) {
1828         if (!highaltar) {
1829         too_soon:
1830             if (altaralign == A_NONE && Inhell)
1831                 /* hero has left Moloch's Sanctum so is in the process
1832                    of getting away with the Amulet (outside of Gehennom,
1833                    fall through to the "ashamed" feedback) */
1834                 gods_upset(A_NONE);
1835             else
1836 #if 0 /*JP*/
1837                 You_feel("%s.",
1838                          Hallucination
1839                             ? "homesick"
1840                             /* if on track, give a big hint */
1841                             : (altaralign == u.ualign.type)
1842                                ? "an urge to return to the surface"
1843                                /* else headed towards celestial disgrace */
1844                                : "ashamed");
1845 #else
1846                 You_feel("%s\81D",
1847                          Hallucination
1848                             ? "\8cÌ\8b½\82ª\97ö\82µ\82­\82È\82Á\82½"
1849                             /* if on track, give a big hint */
1850                             : (altaralign == u.ualign.type)
1851                                ? "\92n\8fã\82É\8bA\82è\82½\82¢\8bC\8e\9d\82É\8bì\82è\97§\82Ä\82ç\82ê\82½"
1852                                /* else headed towards celestial disgrace */
1853                                : "\92p\82¸\82©\82µ\82¢\8ev\82¢\82ª\82µ\82½");
1854 #endif
1855             return 1;
1856         } else {
1857             /* The final Test.  Did you win? */
1858             if (uamul == otmp)
1859                 Amulet_off();
1860             u.uevent.ascended = 1;
1861             if (carried(otmp))
1862                 useup(otmp); /* well, it's gone now */
1863             else
1864                 useupf(otmp, 1L);
1865 /*JP
1866             You("offer the Amulet of Yendor to %s...", a_gname());
1867 */
1868             You("\83C\83F\83\93\83_\81[\82Ì\96\82\8f\9c\82¯\82ð%s\82É\8c£\8fã\82µ\82½\81D\81D\81D",a_gname());
1869             if (altaralign == A_NONE) {
1870                 /* Moloch's high altar */
1871                 if (u.ualign.record > -99)
1872                     u.ualign.record = -99;
1873                 /*[apparently shrug/snarl can be sensed without being seen]*/
1874 #if 0 /*JP*/
1875                 pline("%s shrugs and retains dominion over %s,", Moloch,
1876                       u_gname());
1877 #else
1878                 pline("%s\82Í\8c¨\82ð\82·\82­\82ß\81C%s\82É\91Î\82·\82é\97D\90¨\82ð\88Û\8e\9d\82µ\82½\81D", Moloch,
1879                       u_gname());
1880 #endif
1881 /*JP
1882                 pline("then mercilessly snuffs out your life.");
1883 */
1884                 pline("\82»\82µ\82Ä\96³\8e\9c\94ß\82É\82 \82È\82½\82Ì\96½\82ð\92D\82Á\82½\81D");
1885 /*JP
1886 */
1887 #if 0 /*JP*/
1888                 Sprintf(killer.name, "%s indifference", s_suffix(Moloch));
1889 #else
1890                 Sprintf(killer.name, "\97â\92W\82È%s", Moloch);
1891 #endif
1892                 killer.format = KILLED_BY;
1893                 done(DIED);
1894                 /* life-saved (or declined to die in wizard/explore mode) */
1895 /*JP
1896                 pline("%s snarls and tries again...", Moloch);
1897 */
1898                 pline("%s\82Í\82Ì\82Ì\82µ\82è\81C\82à\82¤\88ê\93x\8e\8e\82µ\82½\81D\81D\81D", Moloch);
1899                 fry_by_god(A_NONE, TRUE); /* wrath of Moloch */
1900                 /* declined to die in wizard or explore mode */
1901                 pline(cloud_of_smoke, hcolor(NH_BLACK));
1902                 done(ESCAPED);
1903             } else if (u.ualign.type != altaralign) {
1904                 /* And the opposing team picks you up and
1905                    carries you off on their shoulders */
1906                 adjalign(-99);
1907 #if 0 /*JP*/
1908                 pline("%s accepts your gift, and gains dominion over %s...",
1909                       a_gname(), u_gname());
1910 #else
1911                 pline("%s\82Í\82 \82È\82½\82Ì\91\97\82è\95¨\82ð\8eó\82¯\82Æ\82è\81C%s\82Ì\8c \97Í\82ð\93¾\82½\81D\81D\81D",
1912                       a_gname(), u_gname());
1913 #endif
1914 /*JP
1915                 pline("%s is enraged...", u_gname());
1916 */
1917                 pline("%s\82Í\8c\83\93{\82µ\82½\81D\81D\81D", u_gname());
1918 /*JP
1919                 pline("Fortunately, %s permits you to live...", a_gname());
1920 */
1921                 pline("\8dK\89^\82É\82à\81C%s\82Í\82 \82È\82½\82Ì\91\8dÝ\82ð\8b\96\82µ\82Ä\82¢\82é\81D\81D\81D",a_gname());
1922                 pline(cloud_of_smoke, hcolor(NH_ORANGE));
1923                 done(ESCAPED);
1924             } else { /* super big win */
1925                 adjalign(10);
1926                 u.uachieve.ascended = 1;
1927                 pline(
1928 /*JP
1929                "An invisible choir sings, and you are bathed in radiance...");
1930 */
1931                 "\82Ç\82±\82©\82ç\82Æ\82à\82È\82­\90¹\89Ì\91à\82Ì\89Ì\82ª\95·\82±\82¦\81C\82 \82È\82½\82Í\8cõ\82É\95ï\82Ü\82ê\82½\81D\81D\81D");
1932 /*JP
1933                 godvoice(altaralign, "Congratulations, mortal!");
1934 */
1935                 godvoice(altaralign, "\82æ\82­\82â\82Á\82½\81I\92è\96½\82Ì\8eÒ\82æ\81I");
1936                 display_nhwindow(WIN_MESSAGE, FALSE);
1937                 verbalize(
1938 /*JP
1939           "In return for thy service, I grant thee the gift of Immortality!");
1940 */
1941           "\93ð\82Ì\88Ì\8bÆ\82É\91Î\82µ\81C\95s\8e\80\82Ì\91Ì\82ð\95ù\82°\82æ\82¤\82¼\81I");
1942 #if 0 /*JP*/
1943                 You("ascend to the status of Demigod%s...",
1944                     flags.female ? "dess" : "");
1945 #else
1946                 You("\8f¸\93V\82µ\81C%s\90_\82Æ\82È\82Á\82½\81D\81D\81D",
1947                     flags.female ? "\8f\97" : "");
1948 #endif
1949                 done(ASCENDED);
1950             }
1951         }
1952     } /* real Amulet */
1953
1954     if (otmp->otyp == FAKE_AMULET_OF_YENDOR) {
1955         if (!highaltar && !otmp->known)
1956             goto too_soon;
1957 /*JP
1958         You_hear("a nearby thunderclap.");
1959 */
1960         You("\8bß\82­\82É\97\8b\82ª\97\8e\82¿\82½\89¹\82ð\95·\82¢\82½\81D");
1961         if (!otmp->known) {
1962 #if 0 /*JP*/
1963             You("realize you have made a %s.",
1964                 Hallucination ? "boo-boo" : "mistake");
1965 #else
1966             You("%s\82±\82Æ\82É\8bC\82ª\82Â\82¢\82½\81D",
1967                 Hallucination ? "\81u\83n\83Y\83\8c\81v\82¾\82Á\82½" : "\8aÔ\88á\82¢\82ð\94Æ\82µ\82½");
1968 #endif
1969             otmp->known = TRUE;
1970             change_luck(-1);
1971             return 1;
1972         } else {
1973             /* don't you dare try to fool the gods */
1974             if (Deaf)
1975 #if 0 /*JP*/
1976                 pline("Oh, no."); /* didn't hear thunderclap */
1977 #else
1978                 pline("\82È\82ñ\82Ä\82±\82Á\82½\81D"); /* didn't hear thunderclap */
1979 #endif
1980             change_luck(-3);
1981             adjalign(-1);
1982             u.ugangr += 3;
1983             value = -3;
1984         }
1985     } /* fake Amulet */
1986
1987     if (value == 0) {
1988         pline1(nothing_happens);
1989         return 1;
1990     }
1991
1992     if (altaralign != u.ualign.type && highaltar) {
1993     desecrate_high_altar:
1994         /*
1995          * REAL BAD NEWS!!! High altars cannot be converted.  Even an attempt
1996          * gets the god who owns it truly pissed off.
1997          */
1998 /*JP
1999         You_feel("the air around you grow charged...");
2000 */
2001         You("\89ñ\82è\82Ì\8bó\8bC\82É\83G\83l\83\8b\83M\81[\82ª\96\9e\82¿\82Ä\82¢\82­\82æ\82¤\82È\8bC\82ª\82µ\82½\81D\81D\81D");
2002 /*JP
2003         pline("Suddenly, you realize that %s has noticed you...", a_gname());
2004 */
2005         pline("\93Ë\91R\81C%s\82ª\82 \82È\82½\82ð\82\82Á\82Æ\8c©\82Ä\82¢\82é\82Ì\82É\8bC\82ª\82Â\82¢\82½\81D\81D\81D",a_gname());
2006         godvoice(altaralign,
2007 /*JP
2008                  "So, mortal!  You dare desecrate my High Temple!");
2009 */
2010                  "\92è\96½\82Ì\8eÒ\82æ\81I\82¨\82Ü\82¦\82Í\89ä\82ª\90_\90¹\82È\82é\8e\9b\89@\82ð\89\98\82·\82Ì\82©\81I");
2011         /* Throw everything we have at the player */
2012         god_zaps_you(altaralign);
2013     } else if (value
2014                < 0) { /* I don't think the gods are gonna like this... */
2015         gods_upset(altaralign);
2016     } else {
2017         int saved_anger = u.ugangr;
2018         int saved_cnt = u.ublesscnt;
2019         int saved_luck = u.uluck;
2020
2021         /* Sacrificing at an altar of a different alignment */
2022         if (u.ualign.type != altaralign) {
2023             /* Is this a conversion ? */
2024             /* An unaligned altar in Gehennom will always elicit rejection. */
2025             if (ugod_is_angry() || (altaralign == A_NONE && Inhell)) {
2026                 if (u.ualignbase[A_CURRENT] == u.ualignbase[A_ORIGINAL]
2027                     && altaralign != A_NONE) {
2028 /*JP
2029                     You("have a strong feeling that %s is angry...",
2030 */
2031                     You("%s\82ª\93{\82Á\82Ä\82¢\82é\82Ì\82ð\8am\90M\82µ\82½\81D\81D\81D",
2032                         u_gname());
2033                     consume_offering(otmp);
2034 /*JP
2035                     pline("%s accepts your allegiance.", a_gname());
2036 */
2037                     pline("%s\82Í\82 \82È\82½\82Ì\91®\90«\82ð\8eó\82¯\82¢\82ê\82½\81D", a_gname());
2038
2039                     uchangealign(altaralign, 0);
2040                     /* Beware, Conversion is costly */
2041                     change_luck(-3);
2042                     u.ublesscnt += 300;
2043                 } else {
2044                     u.ugangr += 3;
2045                     adjalign(-5);
2046 /*JP
2047                     pline("%s rejects your sacrifice!", a_gname());
2048 */
2049                     pline("%s\82Í\82 \82È\82½\82Ì\8c£\8fã\95¨\82ð\8eó\82¯\82¢\82ê\82È\82¢\81I", a_gname());
2050 /*JP
2051                     godvoice(altaralign, "Suffer, infidel!");
2052 */
2053                     godvoice(altaralign, "\88Ù\92[\8eÒ\82æ\81I\8e¸\82¹\82ë\81I\81I");
2054                     change_luck(-5);
2055                     (void) adjattrib(A_WIS, -2, TRUE);
2056                     if (!Inhell)
2057                         angrygods(u.ualign.type);
2058                 }
2059                 return 1;
2060             } else {
2061                 consume_offering(otmp);
2062 #if 0 /*JP*/
2063                 You("sense a conflict between %s and %s.", u_gname(),
2064                     a_gname());
2065 #else
2066                 You("%s\82Æ%s\8aÔ\82Ì\91\88\82¢\82ð\8a´\82\82½\81D", u_gname(),
2067                     a_gname());
2068 #endif
2069                 if (rn2(8 + u.ulevel) > 5) {
2070                     struct monst *pri;
2071 /*JP
2072                     You_feel("the power of %s increase.", u_gname());
2073 */
2074                     You("%s\82Ì\97Í\82ª\91\9d\91å\82µ\82½\82æ\82¤\82È\8bC\82ª\82µ\82½\81D", u_gname());
2075                     exercise(A_WIS, TRUE);
2076                     change_luck(1);
2077                     /* Yes, this is supposed to be &=, not |= */
2078                     levl[u.ux][u.uy].altarmask &= AM_SHRINE;
2079                     /* the following accommodates stupid compilers */
2080                     levl[u.ux][u.uy].altarmask =
2081                         levl[u.ux][u.uy].altarmask
2082                         | (Align2amask(u.ualign.type));
2083                     if (!Blind)
2084 #if 0 /*JP*/
2085                         pline_The("altar glows %s.",
2086                                   hcolor((u.ualign.type == A_LAWFUL)
2087                                             ? NH_WHITE
2088                                             : u.ualign.type
2089                                                ? NH_BLACK
2090                                                : (const char *) "gray"));
2091 #else
2092                         pline("\8dÕ\92d\82Í%s\8bP\82¢\82½\81D",
2093                               jconj_adj(hcolor((u.ualign.type == A_LAWFUL)
2094                                             ? NH_WHITE
2095                                             : u.ualign.type
2096                                                ? NH_BLACK
2097                                                : (const char *)"\8aD\90F\82Ì")));
2098 #endif
2099
2100                     if (rnl(u.ulevel) > 6 && u.ualign.record > 0
2101                         && rnd(u.ualign.record) > (3 * ALIGNLIM) / 4)
2102                         summon_minion(altaralign, TRUE);
2103                     /* anger priest; test handles bones files */
2104                     if ((pri = findpriest(temple_occupied(u.urooms)))
2105                         && !p_coaligned(pri))
2106                         angry_priest();
2107                 } else {
2108 /*JP
2109                     pline("Unluckily, you feel the power of %s decrease.",
2110 */
2111                     pline("\95s\8dK\82É\82à\81C%s\82Ì\97Í\82ª\8c¸\8f­\82µ\82½\82Ì\82ð\8a´\82\82½\81D",
2112                           u_gname());
2113                     change_luck(-1);
2114                     exercise(A_WIS, FALSE);
2115                     if (rnl(u.ulevel) > 6 && u.ualign.record > 0
2116                         && rnd(u.ualign.record) > (7 * ALIGNLIM) / 8)
2117                         summon_minion(altaralign, TRUE);
2118                 }
2119                 return 1;
2120             }
2121         }
2122
2123         consume_offering(otmp);
2124         /* OK, you get brownie points. */
2125         if (u.ugangr) {
2126             u.ugangr -= ((value * (u.ualign.type == A_CHAOTIC ? 2 : 3))
2127                          / MAXVALUE);
2128             if (u.ugangr < 0)
2129                 u.ugangr = 0;
2130             if (u.ugangr != saved_anger) {
2131                 if (u.ugangr) {
2132 #if 0 /*JP*/
2133                     pline("%s seems %s.", u_gname(),
2134                           Hallucination ? "groovy" : "slightly mollified");
2135 #else
2136                     pline("%s\82Í%s\82É\8c©\82¦\82é\81D", u_gname(),
2137                           Hallucination ? "\91f\93G" : "\82¿\82å\82Á\82Æ\98a\82ç\82¢\82¾\82æ\82¤");
2138 #endif
2139
2140                     if ((int) u.uluck < 0)
2141                         change_luck(1);
2142                 } else {
2143 #if 0 /*JP*/
2144                     pline("%s seems %s.", u_gname(),
2145                           Hallucination ? "cosmic (not a new fact)"
2146                                         : "mollified");
2147 #else
2148                     pline("%s\82Í%s\82É\8c©\82¦\82é\81D", u_gname(),
2149                           Hallucination ? "\93ø\90F(\90V\8e\96\8eÀ\82Å\82Í\82È\82¢)"
2150                                         : "\8cy\95Ì\82µ\82½\82æ\82¤");
2151 #endif
2152
2153                     if ((int) u.uluck < 0)
2154                         u.uluck = 0;
2155                 }
2156             } else { /* not satisfied yet */
2157                 if (Hallucination)
2158 /*JP
2159                     pline_The("gods seem tall.");
2160 */
2161                     pline("\90_\82Í\82¨\8d\82\82­\82Æ\82Ü\82Á\82Ä\82¢\82é\82æ\82¤\82É\8c©\82¦\82é\81D");
2162                 else
2163 /*JP
2164                     You("have a feeling of inadequacy.");
2165 */
2166                     You("\82Ü\82¾\82Ü\82¾\82¾\82Æ\8a´\82\82½\81D");
2167             }
2168         } else if (ugod_is_angry()) {
2169             if (value > MAXVALUE)
2170                 value = MAXVALUE;
2171             if (value > -u.ualign.record)
2172                 value = -u.ualign.record;
2173             adjalign(value);
2174 /*JP
2175             You_feel("partially absolved.");
2176 */
2177             You("\8f­\82µ\82¾\82¯\82ä\82é\82µ\82Ä\82à\82ç\82¦\82½\82æ\82¤\82È\8bC\82ª\82µ\82½\81D");
2178         } else if (u.ublesscnt > 0) {
2179             u.ublesscnt -= ((value * (u.ualign.type == A_CHAOTIC ? 500 : 300))
2180                             / MAXVALUE);
2181             if (u.ublesscnt < 0)
2182                 u.ublesscnt = 0;
2183             if (u.ublesscnt != saved_cnt) {
2184                 if (u.ublesscnt) {
2185                     if (Hallucination)
2186 /*JP
2187                         You("realize that the gods are not like you and I.");
2188 */
2189                         You("\90_\82Æ\83c\81[\83J\81[\82Ì\92\87\82Å\82Í\82È\82¢\82±\82Æ\82ð\8cå\82Á\82½\81D");
2190                     else
2191 /*JP
2192                         You("have a hopeful feeling.");
2193 */
2194                         pline("\8aó\96]\82ª\8c©\82¦\82Ä\82«\82½\82æ\82¤\82È\8bC\82ª\82µ\82½\81D");
2195                     if ((int) u.uluck < 0)
2196                         change_luck(1);
2197                 } else {
2198                     if (Hallucination)
2199 /*JP
2200                         pline("Overall, there is a smell of fried onions.");
2201 */
2202                         pline("\82½\82Ü\82Ë\82¬\82ð\97g\82°\82½\93õ\82¢\82ª\82µ\82½\81D");
2203                     else
2204 /*JP
2205                         You("have a feeling of reconciliation.");
2206 */
2207                         You("\8b\96\82³\82ê\82½\8bC\82ª\82µ\82½\81D");
2208                     if ((int) u.uluck < 0)
2209                         u.uluck = 0;
2210                 }
2211             }
2212         } else {
2213             int nartifacts = nartifact_exist();
2214
2215             /* you were already in pretty good standing */
2216             /* The player can gain an artifact */
2217             /* The chance goes down as the number of artifacts goes up */
2218             if (u.ulevel > 2 && u.uluck >= 0
2219                 && !rn2(10 + (2 * u.ugifts * nartifacts))) {
2220                 otmp = mk_artifact((struct obj *) 0, a_align(u.ux, u.uy));
2221                 if (otmp) {
2222                     if (otmp->spe < 0)
2223                         otmp->spe = 0;
2224                     if (otmp->cursed)
2225                         uncurse(otmp);
2226                     otmp->oerodeproof = TRUE;
2227 /*JP
2228                     at_your_feet("An object");
2229 */
2230                     at_your_feet("\89½\82©");
2231                     dropy(otmp);
2232 /*JP
2233                     godvoice(u.ualign.type, "Use my gift wisely!");
2234 */
2235                     godvoice(u.ualign.type, "\89ä\82ª\97^\82¦\82µ\82à\82Ì\8c«\82­\8eg\82¤\82×\82µ\81I");
2236                     u.ugifts++;
2237                     u.ublesscnt = rnz(300 + (50 * nartifacts));
2238                     exercise(A_WIS, TRUE);
2239                     /* make sure we can use this weapon */
2240                     unrestrict_weapon_skill(weapon_type(otmp));
2241                     if (!Hallucination && !Blind) {
2242                         otmp->dknown = 1;
2243                         makeknown(otmp->otyp);
2244                         discover_artifact(otmp->oartifact);
2245                     }
2246                     return 1;
2247                 }
2248             }
2249             change_luck((value * LUCKMAX) / (MAXVALUE * 2));
2250             if ((int) u.uluck < 0)
2251                 u.uluck = 0;
2252             if (u.uluck != saved_luck) {
2253                 if (Blind)
2254 #if 0 /*JP*/
2255                     You("think %s brushed your %s.", something,
2256                         body_part(FOOT));
2257 #else
2258                     pline("%s\82ª\82 \82È\82½\82Ì%s\82ð\82­\82·\82®\82Á\82½\82æ\82¤\82¾\81D", something,
2259                           body_part(FOOT));
2260 #endif
2261                 else
2262 #if 0 /*JP*/
2263                     You(Hallucination
2264                     ? "see crabgrass at your %s.  A funny thing in a dungeon."
2265                             : "glimpse a four-leaf clover at your %s.",
2266                         makeplural(body_part(FOOT)));
2267 #else
2268                     You(Hallucination
2269                     ? "\91«\8c³\82É\83y\83\93\83y\83\93\91\90\82ð\82Ý\82Â\82¯\82½\81D\96À\8b{\82É\82µ\82Ä\82Í\92¿\82µ\82¢\81D"
2270                             : "\8el\97t\82Ì\83N\83\8d\81[\83o\81[\82ð\91«\8c³\82É\8c©\82Â\82¯\82½\81D");
2271 #endif
2272             }
2273         }
2274     }
2275     return 1;
2276 }
2277
2278 /* determine prayer results in advance; also used for enlightenment */
2279 boolean
2280 can_pray(praying)
2281 boolean praying; /* false means no messages should be given */
2282 {
2283     int alignment;
2284
2285     p_aligntyp = on_altar() ? a_align(u.ux, u.uy) : u.ualign.type;
2286     p_trouble = in_trouble();
2287
2288     if (is_demon(youmonst.data) && (p_aligntyp != A_CHAOTIC)) {
2289         if (praying)
2290 #if 0 /*JP*/
2291             pline_The("very idea of praying to a %s god is repugnant to you.",
2292                       p_aligntyp ? "lawful" : "neutral");
2293 #else
2294             pline("%s\82Ì\90_\82É\8bF\82è\82ð\82³\82³\82°\82é\82Ì\82Í\8fí\8e¯\82É\94w\82­\81D",
2295                 p_aligntyp ? "\92\81\8f\98" : "\92\86\97§");
2296 #endif
2297         return FALSE;
2298     }
2299
2300     if (praying)
2301 /*JP
2302         You("begin praying to %s.", align_gname(p_aligntyp));
2303 */
2304         You("%s\82É\8bF\82è\82ð\95ù\82°\82½\81D", align_gname(p_aligntyp));
2305
2306     if (u.ualign.type && u.ualign.type == -p_aligntyp)
2307         alignment = -u.ualign.record; /* Opposite alignment altar */
2308     else if (u.ualign.type != p_aligntyp)
2309         alignment = u.ualign.record / 2; /* Different alignment altar */
2310     else
2311         alignment = u.ualign.record;
2312
2313     if ((p_trouble > 0) ? (u.ublesscnt > 200)      /* big trouble */
2314            : (p_trouble < 0) ? (u.ublesscnt > 100) /* minor difficulties */
2315               : (u.ublesscnt > 0))                 /* not in trouble */
2316         p_type = 0;                     /* too soon... */
2317     else if ((int) Luck < 0 || u.ugangr || alignment < 0)
2318         p_type = 1; /* too naughty... */
2319     else /* alignment >= 0 */ {
2320         if (on_altar() && u.ualign.type != p_aligntyp)
2321             p_type = 2;
2322         else
2323             p_type = 3;
2324     }
2325
2326     if (is_undead(youmonst.data) && !Inhell
2327         && (p_aligntyp == A_LAWFUL || (p_aligntyp == A_NEUTRAL && !rn2(10))))
2328         p_type = -1;
2329     /* Note:  when !praying, the random factor for neutrals makes the
2330        return value a non-deterministic approximation for enlightenment.
2331        This case should be uncommon enough to live with... */
2332
2333     return !praying ? (boolean) (p_type == 3 && !Inhell) : TRUE;
2334 }
2335
2336 /* #pray commmand */
2337 int
2338 dopray()
2339 {
2340     /* Confirm accidental slips of Alt-P */
2341 /*JP
2342     if (ParanoidPray && yn("Are you sure you want to pray?") != 'y')
2343 */
2344     if (ParanoidPray && yn("\8bF\82è\82Ü\82·\82©\81H") != 'y')
2345         return 0;
2346
2347     u.uconduct.gnostic++;
2348
2349     /* set up p_type and p_alignment */
2350     if (!can_pray(TRUE))
2351         return 0;
2352
2353     if (wizard && p_type >= 0) {
2354 /*JP
2355         if (yn("Force the gods to be pleased?") == 'y') {
2356 */
2357         if (yn("\96³\97\9d\96î\97\9d\90_\82É\94÷\8fÎ\82ñ\82Å\82à\82ç\82¢\82Ü\82·\82©\81H") == 'y') {
2358             u.ublesscnt = 0;
2359             if (u.uluck < 0)
2360                 u.uluck = 0;
2361             if (u.ualign.record <= 0)
2362                 u.ualign.record = 1;
2363             u.ugangr = 0;
2364             if (p_type < 2)
2365                 p_type = 3;
2366         }
2367     }
2368     nomul(-3);
2369     multi_reason = "praying";
2370 /*JP
2371     nomovemsg = "You finish your prayer.";
2372 */
2373     nomovemsg = "\8bF\82è\8fI\82¦\82½\81D";
2374     afternmv = prayer_done;
2375
2376     if (p_type == 3 && !Inhell) {
2377         /* if you've been true to your god you can't die while you pray */
2378         if (!Blind)
2379 /*JP
2380             You("are surrounded by a shimmering light.");
2381 */
2382             You("\82©\82·\82©\82È\8cõ\82É\82Â\82Â\82Ü\82ê\82½\81D");
2383         u.uinvulnerable = TRUE;
2384     }
2385
2386     return 1;
2387 }
2388
2389 STATIC_PTR int
2390 prayer_done() /* M. Stephenson (1.0.3b) */
2391 {
2392     aligntyp alignment = p_aligntyp;
2393
2394     u.uinvulnerable = FALSE;
2395     if (p_type == -1) {
2396 #if 0 /*JP*/
2397         godvoice(alignment,
2398                  (alignment == A_LAWFUL)
2399                     ? "Vile creature, thou durst call upon me?"
2400                     : "Walk no more, perversion of nature!");
2401 #else
2402         godvoice(alignment,
2403                  (alignment == A_LAWFUL)
2404                     ? "\94Ú\97ò\82È\90\95¨\82æ\81C\93ð\81C\89ä\82É\8bF\82è\82ð\8b\81\82ß\82½\82©\81H"
2405                     : "\93®\82­\82È\81I\8e\80\82É\82¼\82±\82È\82¢\82Ì\90\95¨\82æ\81I");
2406 #endif
2407 /*JP
2408         You_feel("like you are falling apart.");
2409 */
2410         You("\83o\83\89\83o\83\89\82É\82È\82Á\82½\82æ\82¤\82È\8bC\82ª\82µ\82½\81D");
2411         /* KMH -- Gods have mastery over unchanging */
2412         rehumanize();
2413         /* no Half_physical_damage adjustment here */
2414 /*JP
2415         losehp(rnd(20), "residual undead turning effect", KILLED_BY_AN);
2416 */
2417         losehp(rnd(20), "\95s\8e\80\82Ì\90\95¨\82ð\93y\82É\95Ô\82·\97Í\82Å", KILLED_BY_AN);
2418         exercise(A_CON, FALSE);
2419         return 1;
2420     }
2421     if (Inhell) {
2422 /*JP
2423         pline("Since you are in Gehennom, %s won't help you.",
2424 */
2425         pline("\83Q\83w\83i\82É%s\82Ì\97Í\82Í\93Í\82©\82È\82¢\81D",
2426               align_gname(alignment));
2427         /* haltingly aligned is least likely to anger */
2428         if (u.ualign.record <= 0 || rnl(u.ualign.record))
2429             angrygods(u.ualign.type);
2430         return 0;
2431     }
2432
2433     if (p_type == 0) {
2434         if (on_altar() && u.ualign.type != alignment)
2435             (void) water_prayer(FALSE);
2436         u.ublesscnt += rnz(250);
2437         change_luck(-3);
2438         gods_upset(u.ualign.type);
2439     } else if (p_type == 1) {
2440         if (on_altar() && u.ualign.type != alignment)
2441             (void) water_prayer(FALSE);
2442         angrygods(u.ualign.type); /* naughty */
2443     } else if (p_type == 2) {
2444         if (water_prayer(FALSE)) {
2445             /* attempted water prayer on a non-coaligned altar */
2446             u.ublesscnt += rnz(250);
2447             change_luck(-3);
2448             gods_upset(u.ualign.type);
2449         } else
2450             pleased(alignment);
2451     } else {
2452         /* coaligned */
2453         if (on_altar())
2454             (void) water_prayer(TRUE);
2455         pleased(alignment); /* nice */
2456     }
2457     return 1;
2458 }
2459
2460 /* #turn command */
2461 int
2462 doturn()
2463 {
2464     /* Knights & Priest(esse)s only please */
2465     struct monst *mtmp, *mtmp2;
2466     int once, range, xlev;
2467
2468     if (!Role_if(PM_PRIEST) && !Role_if(PM_KNIGHT)) {
2469         /* Try to use the "turn undead" spell.
2470          *
2471          * This used to be based on whether hero knows the name of the
2472          * turn undead spellbook, but it's possible to know--and be able
2473          * to cast--the spell while having lost the book ID to amnesia.
2474          * (It also used to tell spelleffects() to cast at self?)
2475          */
2476         int sp_no;
2477
2478         for (sp_no = 0; sp_no < MAXSPELL; ++sp_no) {
2479             if (spl_book[sp_no].sp_id == NO_SPELL)
2480                 break;
2481             else if (spl_book[sp_no].sp_id == SPE_TURN_UNDEAD)
2482                 return spelleffects(sp_no, FALSE);
2483         }
2484 /*JP
2485         You("don't know how to turn undead!");
2486 */
2487         You("\95s\8e\80\82Ì\90\82«\95¨\82ð\93y\82É\96ß\82·\95û\96@\82ð\92m\82ç\82È\82¢\81I");
2488         return 0;
2489     }
2490     u.uconduct.gnostic++;
2491
2492     if ((u.ualign.type != A_CHAOTIC
2493          && (is_demon(youmonst.data) || is_undead(youmonst.data)))
2494         || u.ugangr > 6) { /* "Die, mortal!" */
2495 /*JP
2496         pline("For some reason, %s seems to ignore you.", u_gname());
2497 */
2498         pline("\82È\82º\82©\81C%s\82Í\82 \82È\82½\82ð\96³\8e\8b\82µ\82½\82æ\82¤\82¾\81D", u_gname());
2499         aggravate();
2500         exercise(A_WIS, FALSE);
2501         return 0;
2502     }
2503     if (Inhell) {
2504 /*JP
2505         pline("Since you are in Gehennom, %s won't help you.", u_gname());
2506 */
2507         pline("\83Q\83w\83i\82É%s\82Ì\97Í\82Í\93Í\82©\82È\82¢\81D", u_gname());
2508         aggravate();
2509         return 0;
2510     }
2511 /*JP
2512     pline("Calling upon %s, you chant an arcane formula.", u_gname());
2513 */
2514     pline("%s\82É\8bF\82è\82ð\8b\81\82ß\82é\82Æ\81C\82 \82È\82½\82Í\95s\89Â\8ev\8bc\82È\8c¾\97t\82Ì\90¹\89Ì\82ð\95·\82¢\82½\81D", u_gname());
2515     exercise(A_WIS, TRUE);
2516
2517     /* note: does not perform unturn_dead() on victims' inventories */
2518     range = BOLT_LIM + (u.ulevel / 5); /* 5 to 11 */
2519     range *= range;
2520     once = 0;
2521     for (mtmp = fmon; mtmp; mtmp = mtmp2) {
2522         mtmp2 = mtmp->nmon;
2523
2524         if (DEADMONSTER(mtmp))
2525             continue;
2526         if (!cansee(mtmp->mx, mtmp->my) || distu(mtmp->mx, mtmp->my) > range)
2527             continue;
2528
2529         if (!mtmp->mpeaceful
2530             && (is_undead(mtmp->data) || is_vampshifter(mtmp)
2531                 || (is_demon(mtmp->data) && (u.ulevel > (MAXULEV / 2))))) {
2532             mtmp->msleeping = 0;
2533             if (Confusion) {
2534                 if (!once++)
2535 /*JP
2536                     pline("Unfortunately, your voice falters.");
2537 */
2538                     pline("\8ec\94O\82È\82ª\82ç\81C\82 \82È\82½\82Ì\90º\82Í\82Ç\82à\82Á\82Ä\82µ\82Ü\82Á\82½\81D");
2539                 mtmp->mflee = 0;
2540                 mtmp->mfrozen = 0;
2541                 mtmp->mcanmove = 1;
2542             } else if (!resist(mtmp, '\0', 0, TELL)) {
2543                 xlev = 6;
2544                 switch (mtmp->data->mlet) {
2545                 /* this is intentional, lichs are tougher
2546                    than zombies. */
2547                 case S_LICH:
2548                     xlev += 2; /*FALLTHRU*/
2549                 case S_GHOST:
2550                     xlev += 2; /*FALLTHRU*/
2551                 case S_VAMPIRE:
2552                     xlev += 2; /*FALLTHRU*/
2553                 case S_WRAITH:
2554                     xlev += 2; /*FALLTHRU*/
2555                 case S_MUMMY:
2556                     xlev += 2; /*FALLTHRU*/
2557                 case S_ZOMBIE:
2558                     if (u.ulevel >= xlev && !resist(mtmp, '\0', 0, NOTELL)) {
2559                         if (u.ualign.type == A_CHAOTIC) {
2560                             mtmp->mpeaceful = 1;
2561                             set_malign(mtmp);
2562                         } else { /* damn them */
2563                             killed(mtmp);
2564                         }
2565                         break;
2566                     } /* else flee */
2567                 /*FALLTHRU*/
2568                 default:
2569                     monflee(mtmp, 0, FALSE, TRUE);
2570                     break;
2571                 }
2572             }
2573         }
2574     }
2575     nomul(-5);
2576     multi_reason = "trying to turn the monsters";
2577     nomovemsg = You_can_move_again;
2578     return 1;
2579 }
2580
2581 const char *
2582 a_gname()
2583 {
2584     return a_gname_at(u.ux, u.uy);
2585 }
2586
2587 /* returns the name of an altar's deity */
2588 const char *
2589 a_gname_at(x, y)
2590 xchar x, y;
2591 {
2592     if (!IS_ALTAR(levl[x][y].typ))
2593         return (char *) 0;
2594
2595     return align_gname(a_align(x, y));
2596 }
2597
2598 /* returns the name of the hero's deity */
2599 const char *
2600 u_gname()
2601 {
2602     return align_gname(u.ualign.type);
2603 }
2604
2605 const char *
2606 align_gname(alignment)
2607 aligntyp alignment;
2608 {
2609     const char *gnam;
2610
2611     switch (alignment) {
2612     case A_NONE:
2613         gnam = Moloch;
2614         break;
2615     case A_LAWFUL:
2616         gnam = urole.lgod;
2617         break;
2618     case A_NEUTRAL:
2619         gnam = urole.ngod;
2620         break;
2621     case A_CHAOTIC:
2622         gnam = urole.cgod;
2623         break;
2624     default:
2625         impossible("unknown alignment.");
2626 /*JP
2627         gnam = "someone";
2628 */
2629         gnam = "\92N\82©";
2630         break;
2631     }
2632     if (*gnam == '_')
2633         ++gnam;
2634     return gnam;
2635 }
2636
2637 static const char *hallu_gods[] = {
2638 #if 0 /*JP*/
2639     "the Flying Spaghetti Monster", /* Church of the FSM */
2640     "Eris",                         /* Discordianism */
2641     "the Martians",                 /* every science fiction ever */
2642     "Xom",                          /* Crawl */
2643     "AnDoR dRaKoN",                 /* ADOM */
2644     "the Central Bank of Yendor",   /* economics */
2645     "Tooth Fairy",                  /* real world(?) */
2646     "Om",                           /* Discworld */
2647     "Yawgmoth",                     /* Magic: the Gathering */
2648     "Morgoth",                      /* LoTR */
2649     "Cthulhu",                      /* Lovecraft */
2650     "the Ori",                      /* Stargate */
2651     "destiny",                      /* why not? */
2652     "your Friend the Computer",     /* Paranoia */
2653 #else
2654     "\8bó\94ò\82Ô\83X\83p\83Q\83b\83e\83B\83\82\83\93\83X\83^\81[", /* Church of the FSM */
2655     "\83G\83\8a\83X",                       /* Discordianism */
2656     "\89Î\90¯\90l",                       /* every science fiction ever */
2657     "\83]\83\80",                         /* Crawl */
2658     "\83A\83\93\83h\81[\83\8b\81E\83h\83\89\83R\83\93",         /* ADOM */
2659     "\83C\83F\83\93\83_\81[\92\86\89\9b\8bâ\8ds",           /* economics */
2660     "\8e\95\82Ì\97d\90¸",                     /* real world(?) */
2661     "\83I\83\80",                         /* Discworld */
2662     "\83\88\81[\83O\83\82\83X",                   /* Magic: the Gathering */
2663     "\83\82\83\8b\83S\83X",                     /* LoTR */
2664     "\83N\83g\83D\83\8b\83t",                   /* Lovecraft */
2665     "\83I\81[\83\89\83C",                     /* Stargate */
2666     "\83l\90\",                         /* why not? */
2667     "\90e\88¤\82È\82é\83R\83\93\83s\83\85\81[\83^",         /* Paranoia */
2668 #endif
2669 };
2670
2671 /* hallucination handling for priest/minion names: select a random god
2672    iff character is hallucinating */
2673 const char *
2674 halu_gname(alignment)
2675 aligntyp alignment;
2676 {
2677     const char *gnam = NULL;
2678     int which;
2679
2680     if (!Hallucination)
2681         return align_gname(alignment);
2682
2683     /* The priest may not have initialized god names. If this is the
2684      * case, and we roll priest, we need to try again. */
2685     do
2686         which = randrole();
2687     while (!roles[which].lgod);
2688
2689     switch (rn2(9)) {
2690     case 0:
2691     case 1:
2692         gnam = roles[which].lgod;
2693         break;
2694     case 2:
2695     case 3:
2696         gnam = roles[which].ngod;
2697         break;
2698     case 4:
2699     case 5:
2700         gnam = roles[which].cgod;
2701         break;
2702     case 6:
2703     case 7:
2704         gnam = hallu_gods[rn2(sizeof hallu_gods / sizeof *hallu_gods)];
2705         break;
2706     case 8:
2707         gnam = Moloch;
2708         break;
2709     default:
2710         impossible("rn2 broken in halu_gname?!?");
2711     }
2712     if (!gnam) {
2713         impossible("No random god name?");
2714 #if 0 /*JP*/
2715         gnam = "your Friend the Computer"; /* Paranoia */
2716 #else
2717         gnam = "\90e\88¤\82È\82é\83R\83\93\83s\83\85\81[\83^"; /* Paranoia */
2718 #endif
2719     }
2720     if (*gnam == '_')
2721         ++gnam;
2722     return gnam;
2723 }
2724
2725 /* deity's title */
2726 const char *
2727 align_gtitle(alignment)
2728 aligntyp alignment;
2729 {
2730 /*JP
2731     const char *gnam, *result = "god";
2732 */
2733     const char *gnam, *result = "\8eå\90_";
2734
2735     switch (alignment) {
2736     case A_LAWFUL:
2737         gnam = urole.lgod;
2738         break;
2739     case A_NEUTRAL:
2740         gnam = urole.ngod;
2741         break;
2742     case A_CHAOTIC:
2743         gnam = urole.cgod;
2744         break;
2745     default:
2746         gnam = 0;
2747         break;
2748     }
2749     if (gnam && *gnam == '_')
2750 /*JP
2751         result = "goddess";
2752 */
2753         result = "\8f\97\90_";
2754     return result;
2755 }
2756
2757 void
2758 altar_wrath(x, y)
2759 register int x, y;
2760 {
2761     aligntyp altaralign = a_align(x, y);
2762
2763     if (!strcmp(align_gname(altaralign), u_gname())) {
2764 /*JP
2765         godvoice(altaralign, "How darest thou desecrate my altar!");
2766 */
2767         godvoice(altaralign, "\93ð\81C\89ä\82ª\8dÕ\92d\82ð\89\98\82·\82©\81I");
2768         (void) adjattrib(A_WIS, -1, FALSE);
2769     } else {
2770 /*JP
2771         pline("A voice (could it be %s?) whispers:", align_gname(altaralign));
2772 */
2773         pline("\82³\82³\82â\82«\90º(\82½\82Ô\82ñ%s\81H)\82ª\95·\82±\82¦\82é:", align_gname(altaralign));
2774 /*JP
2775         verbalize("Thou shalt pay, infidel!");
2776 */
2777         verbalize("\88Ù\92[\8eÒ\82æ\81I\95ñ\82¢\82ð\8eó\82¯\82æ\81I");
2778         change_luck(-1);
2779     }
2780 }
2781
2782 /* assumes isok() at one space away, but not necessarily at two */
2783 STATIC_OVL boolean
2784 blocked_boulder(dx, dy)
2785 int dx, dy;
2786 {
2787     register struct obj *otmp;
2788     long count = 0L;
2789
2790     for (otmp = level.objects[u.ux + dx][u.uy + dy]; otmp;
2791          otmp = otmp->nexthere) {
2792         if (otmp->otyp == BOULDER)
2793             count += otmp->quan;
2794     }
2795
2796     switch (count) {
2797     case 0:
2798         /* no boulders--not blocked */
2799         return FALSE;
2800     case 1:
2801         /* possibly blocked depending on if it's pushable */
2802         break;
2803     default:
2804         /* more than one boulder--blocked after they push the top one;
2805            don't force them to push it first to find out */
2806         return TRUE;
2807     }
2808
2809     if (!isok(u.ux + 2 * dx, u.uy + 2 * dy))
2810         return TRUE;
2811     if (IS_ROCK(levl[u.ux + 2 * dx][u.uy + 2 * dy].typ))
2812         return TRUE;
2813     if (sobj_at(BOULDER, u.ux + 2 * dx, u.uy + 2 * dy))
2814         return TRUE;
2815
2816     return FALSE;
2817 }
2818
2819 /*pray.c*/