fix #H2200 - disintegration by divine wrath (trunk only)

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".
This commit is contained in:
nethack.rankin
2011-03-01 00:50:13 +00:00
parent 2c22fd0bc6
commit df9e4b345d
2 changed files with 11 additions and 7 deletions

View 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

View 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);