]> granicus.if.org Git - nethack/commitdiff
revised ascension bonus (trunk only)
authornethack.rankin <nethack.rankin>
Sun, 4 Mar 2007 02:18:59 +0000 (02:18 +0000)
committernethack.rankin <nethack.rankin>
Sun, 4 Mar 2007 02:18:59 +0000 (02:18 +0000)
     Part of the final score is doubled for ascension.  Some players use
helm of opposite alignment in order to offer and ascend at the first astral
altar they reach.  This limits the score doubling to ascending with your
original alignment intact, penalizing (for the subset of players who care
about score) alignment manipulation.  Converting to a second alignment and
then using a helm of opposite alignment to switch back and offer to hero's
original deity yields a smaller bonus (one-and-a-half instead of doubling).
Offering to either of the other deities (either via permanent conversion
or temporarily switching via helm or both) gets no score bonus.

doc/fixes35.0
src/end.c

index 42f5f9b10dd35a10c8a403ac97a22eca0b21ae65..5a8d683a24a15770c13fa6bbd1823e20a58bc3c8 100644 (file)
@@ -288,6 +288,7 @@ worm teeth and crysknives have become stackable
 improved container interface
 acid can destroy iron bars
 OPTIONS=playmode:normal|explore|debug to choose mode without command-line
+score bonus for ascending is reduced or denied for changing alignment
 
 
 Platform- and/or Interface-Specific New Features
index 98bbe545ab5cc6088b4c78bb22bede43b980d9f2..f85a36d5f454e124d9d40a1ef98940d464d7580d 100644 (file)
--- a/src/end.c
+++ b/src/end.c
@@ -753,7 +753,15 @@ die:
            if (deepest > 20)
                tmp += 1000L * (long)((deepest > 30) ? 10 : deepest - 20);
            nowrap_add(u.urexp, tmp);
-           if (how == ASCENDED) nowrap_add(u.urexp, u.urexp);
+
+           /* ascension gives a score bonus iff offering to original deity */
+           if (how == ASCENDED && u.ualign.type == u.ualignbase[A_ORIGINAL]) {
+               /* retaining original alignment: score *= 2;
+                  converting, then using helm-of-OA to switch back: *= 1.5 */
+               tmp = (u.ualignbase[A_CURRENT] == u.ualignbase[A_ORIGINAL]) ?
+                       u.urexp : (u.urexp / 2L);
+               nowrap_add(u.urexp, tmp);
+           }
        }
 
        if (bones_ok) {