]> granicus.if.org Git - nethack/commitdiff
fix #H2200 - disintegration by divine wrath (trunk only)
authornethack.rankin <nethack.rankin>
Tue, 1 Mar 2011 00:50:13 +0000 (00:50 +0000)
committernethack.rankin <nethack.rankin>
Tue, 1 Mar 2011 00:50:13 +0000 (00:50 +0000)
     From a bug report, it you're targetted by
divine wratch while swallowed by a shock-resistant engulfer, the
ineffective lightning is followed by a wide-angle disintegration beam
which "fries <the engulfer> to a crisp"; he felt that being fried was
not appropriate for disintegration.  I agree.  (He also failed to notice
that the exact same terminology is used for killing the hero when not
swallowed.)  I wanted to use "disintegrated into a cloud of dust" here,
but if a suit has just been disintegrated you'll have seen "turns to dust
and falls to the floor" for that, so I settled for "into a pile of dust".

doc/fixes35.0
src/pray.c

index f3ac143d13ef5aab05a9da6b17ab0cc36f3192d7..be0dd0521fb63ac0d3587b1754ba78b36edbe85e 100644 (file)
@@ -347,6 +347,7 @@ enhance life-saving by preventing subsequent poison from being fatal upon
        rescue from death due to spiked pit, dart trap, or poisoned missile
 don't create mail daemons when populating special levels with random demons
 teleport control and polymorph control are ineffective while hero is stunned
+don't report "fried to a crisp" for disintegration from divine wrath
 
 
 Platform- and/or Interface-Specific Fixes
index cfd827154f54fefb25188e065ee9f993d98318ac..61aec031734cb7036ebcd852f7ae2b099d746af4 100644 (file)
@@ -16,7 +16,7 @@ STATIC_DCL void NDECL(gcrownu);
 STATIC_DCL void FDECL(pleased,(ALIGNTYP_P));
 STATIC_DCL void FDECL(godvoice,(ALIGNTYP_P,const char*));
 STATIC_DCL void FDECL(god_zaps_you,(ALIGNTYP_P));
-STATIC_DCL void FDECL(fry_by_god,(ALIGNTYP_P));
+STATIC_DCL void FDECL(fry_by_god,(ALIGNTYP_P,BOOLEAN_P));
 STATIC_DCL void FDECL(gods_angry,(ALIGNTYP_P));
 STATIC_DCL void FDECL(gods_upset,(ALIGNTYP_P));
 STATIC_DCL void FDECL(consume_offering,(struct obj *));
@@ -526,7 +526,7 @@ aligntyp resp_god;
                shieldeff(u.ux, u.uy);
                pline("It seems not to affect you.");
            } else
-               fry_by_god(resp_god);
+               fry_by_god(resp_god, FALSE);
        }
 
        pline("%s is not deterred...", align_gname(resp_god));
@@ -534,7 +534,8 @@ aligntyp resp_god;
            pline("A wide-angle disintegration beam aimed at you hits %s!",
                        mon_nam(u.ustuck));
            if (!resists_disint(u.ustuck)) {
-               pline("%s fries to a crisp!", Monnam(u.ustuck));
+               pline("%s disintegrates into a pile of dust!",
+                     Monnam(u.ustuck));
                xkilled(u.ustuck, 2); /* no corpse */
            } else
                pline("%s seems unaffected.", Monnam(u.ustuck));
@@ -557,7 +558,7 @@ aligntyp resp_god;
            if (uarmu && !uarm && !uarmc) (void) destroy_arm(uarmu);
 #endif
            if (!Disint_resistance)
-               fry_by_god(resp_god);
+               fry_by_god(resp_god, TRUE);
            else {
                You("bask in its %s glow for a minute...", NH_BLACK);
                godvoice(resp_god, "I believe it not!");
@@ -574,10 +575,12 @@ aligntyp resp_god;
 }
 
 STATIC_OVL void
-fry_by_god(resp_god)
+fry_by_god(resp_god, via_disintegration)
 aligntyp resp_god;
+boolean via_disintegration;
 {
-       You("fry to a crisp.");
+       You("%s!", !via_disintegration ? "fry to a crisp" :
+                                        "disintegrate into a pile of dust");
        killer.format = KILLED_BY;
        Sprintf(killer.name, "the wrath of %s", align_gname(resp_god));
        done(DIED);
@@ -1365,7 +1368,7 @@ dosacrifice()
                done(DIED);
                /* life-saved (or declined to die in wizard/explore mode) */
                pline("%s snarls and tries again...", Moloch);
-               fry_by_god(A_NONE);     /* wrath of Moloch */
+               fry_by_god(A_NONE, TRUE);       /* wrath of Moloch */
                /* declined to die in wizard or explore mode */
                pline(cloud_of_smoke, hcolor(NH_BLACK));
                done(ESCAPED);