static void offer_too_soon(aligntyp);
static void desecrate_high_altar(aligntyp);
static void offer_real_amulet(struct obj *, aligntyp); /* NORETURN */
+static void offer_different_alignment_altar(struct obj *, aligntyp);
static boolean pray_revive(void);
static boolean water_prayer(boolean);
static boolean blocked_boulder(int, int);
/*NOTREACHED*/
}
+static void
+offer_different_alignment_altar(struct obj *otmp, aligntyp altaralign)
+{
+ /* Is this a conversion ? */
+ /* An unaligned altar in Gehennom will always elicit rejection. */
+ if (ugod_is_angry() || (altaralign == A_NONE && Inhell)) {
+ if (u.ualignbase[A_CURRENT] == u.ualignbase[A_ORIGINAL]
+ && altaralign != A_NONE) {
+ You("have a strong feeling that %s is angry...",
+ u_gname());
+ consume_offering(otmp);
+ pline("%s accepts your allegiance.", a_gname());
+
+ uchangealign(altaralign, 0);
+ /* Beware, Conversion is costly */
+ change_luck(-3);
+ u.ublesscnt += 300;
+ } else {
+ u.ugangr += 3;
+ adjalign(-5);
+ pline("%s rejects your sacrifice!", a_gname());
+ godvoice(altaralign, "Suffer, infidel!");
+ change_luck(-5);
+ (void) adjattrib(A_WIS, -2, TRUE);
+ if (!Inhell)
+ angrygods(u.ualign.type);
+ }
+ } else {
+ consume_offering(otmp);
+ You("sense a conflict between %s and %s.", u_gname(),
+ a_gname());
+ if (rn2(8 + u.ulevel) > 5) {
+ struct monst *pri;
+ boolean shrine;
+
+ You_feel("the power of %s increase.", u_gname());
+ exercise(A_WIS, TRUE);
+ change_luck(1);
+ shrine = on_shrine();
+ levl[u.ux][u.uy].altarmask = Align2amask(u.ualign.type);
+ if (shrine)
+ levl[u.ux][u.uy].altarmask |= AM_SHRINE;
+ newsym(u.ux, u.uy); /* in case Invisible to self */
+ if (!Blind)
+ pline_The("altar glows %s.",
+ hcolor((u.ualign.type == A_LAWFUL)
+ ? NH_WHITE
+ : u.ualign.type
+ ? NH_BLACK
+ : (const char *) "gray"));
+
+ if (rnl(u.ulevel) > 6 && u.ualign.record > 0
+ && rnd(u.ualign.record) > (3 * ALIGNLIM) / 4)
+ summon_minion(altaralign, TRUE);
+ /* anger priest; test handles bones files */
+ if ((pri = findpriest(temple_occupied(u.urooms)))
+ && !p_coaligned(pri))
+ angry_priest();
+ } else {
+ pline("Unluckily, you feel the power of %s decrease.",
+ u_gname());
+ change_luck(-1);
+ exercise(A_WIS, FALSE);
+ if (rnl(u.ulevel) > 6 && u.ualign.record > 0
+ && rnd(u.ualign.record) > (7 * ALIGNLIM) / 8)
+ summon_minion(altaralign, TRUE);
+ }
+ }
+}
+
/* the #offer command - sacrifice something to the gods */
int
dosacrifice(void)
/* Sacrificing at an altar of a different alignment */
if (u.ualign.type != altaralign) {
- /* Is this a conversion ? */
- /* An unaligned altar in Gehennom will always elicit rejection. */
- if (ugod_is_angry() || (altaralign == A_NONE && Inhell)) {
- if (u.ualignbase[A_CURRENT] == u.ualignbase[A_ORIGINAL]
- && altaralign != A_NONE) {
- You("have a strong feeling that %s is angry...",
- u_gname());
- consume_offering(otmp);
- pline("%s accepts your allegiance.", a_gname());
-
- uchangealign(altaralign, 0);
- /* Beware, Conversion is costly */
- change_luck(-3);
- u.ublesscnt += 300;
- } else {
- u.ugangr += 3;
- adjalign(-5);
- pline("%s rejects your sacrifice!", a_gname());
- godvoice(altaralign, "Suffer, infidel!");
- change_luck(-5);
- (void) adjattrib(A_WIS, -2, TRUE);
- if (!Inhell)
- angrygods(u.ualign.type);
- }
- return ECMD_TIME;
- } else {
- consume_offering(otmp);
- You("sense a conflict between %s and %s.", u_gname(),
- a_gname());
- if (rn2(8 + u.ulevel) > 5) {
- struct monst *pri;
- boolean shrine;
-
- You_feel("the power of %s increase.", u_gname());
- exercise(A_WIS, TRUE);
- change_luck(1);
- shrine = on_shrine();
- levl[u.ux][u.uy].altarmask = Align2amask(u.ualign.type);
- if (shrine)
- levl[u.ux][u.uy].altarmask |= AM_SHRINE;
- newsym(u.ux, u.uy); /* in case Invisible to self */
- if (!Blind)
- pline_The("altar glows %s.",
- hcolor((u.ualign.type == A_LAWFUL)
- ? NH_WHITE
- : u.ualign.type
- ? NH_BLACK
- : (const char *) "gray"));
-
- if (rnl(u.ulevel) > 6 && u.ualign.record > 0
- && rnd(u.ualign.record) > (3 * ALIGNLIM) / 4)
- summon_minion(altaralign, TRUE);
- /* anger priest; test handles bones files */
- if ((pri = findpriest(temple_occupied(u.urooms)))
- && !p_coaligned(pri))
- angry_priest();
- } else {
- pline("Unluckily, you feel the power of %s decrease.",
- u_gname());
- change_luck(-1);
- exercise(A_WIS, FALSE);
- if (rnl(u.ulevel) > 6 && u.ualign.record > 0
- && rnd(u.ualign.record) > (7 * ALIGNLIM) / 8)
- summon_minion(altaralign, TRUE);
- }
- return ECMD_TIME;
- }
+ offer_different_alignment_altar(otmp, altaralign);
+ return ECMD_TIME;
}
consume_offering(otmp);