From 7f3f9c67264dc49e3814cde2d693fe73bfd08ea7 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Sat, 13 Mar 2010 13:49:36 +0100 Subject: [PATCH] Nuclear-tipped missile exploding on launch could not damage base Commit a269cdd7 (v4.3.23) removed the nuclear damage. But it left the nuke on the missile, which made pln_damage() oops and return zero damage. Fix by destroying the nuke separately. (cherry picked from commit 876f3424b0bb28efab505722d89b34395ad43ae6) --- src/lib/subs/mslsub.c | 6 ++++++ src/lib/subs/plnsub.c | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/lib/subs/mslsub.c b/src/lib/subs/mslsub.c index fb5a3f721..1e78e443c 100644 --- a/src/lib/subs/mslsub.c +++ b/src/lib/subs/mslsub.c @@ -59,6 +59,7 @@ msl_launch(struct plnstr *pp, int type, char *what, coord x, coord y, natid victim, int *sublaunchp) { struct shpstr ship; + struct nukstr nuke; struct sctstr sect; int sublaunch = 0; char *from; @@ -93,6 +94,11 @@ msl_launch(struct plnstr *pp, int type, char *what, coord x, coord y, if (chance((0.05 + (100 - pp->pln_effic) / 100.0) * (1 - techfact(pp->pln_tech, 1.0)))) { mpr(pp->pln_own, "KABOOOOM! Missile explodes %s!\n", from); + if (getnuke(nuk_on_plane(pp), &nuke)) { + pr("%s lost!\n", prnuke(&nuke)); + nuke.nuk_effic = 0; + putnuke(nuke.nuk_uid, &nuke); + } if (chance(0.33)) { dam = pln_damage(pp, 'p', 1) / 2; if (pp->pln_ship >= 0) { diff --git a/src/lib/subs/plnsub.c b/src/lib/subs/plnsub.c index 597443bd8..5e11ec05e 100644 --- a/src/lib/subs/plnsub.c +++ b/src/lib/subs/plnsub.c @@ -988,7 +988,7 @@ pln_damage(struct plnstr *pp, char type, int noisy) int effective = 1; int pinbomber = 0; - if (CANT_HAPPEN(nuk_on_plane(pp) >= 0)) /* FIXME check uses! */ + if (CANT_HAPPEN(nuk_on_plane(pp) >= 0)) return 0; load = pln_load(pp); -- 2.43.0