From 2294785412d3252eec31880341c3136f71888aac Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Sun, 4 Jan 2015 13:49:38 +0100 Subject: [PATCH] bomb fire launch torpedo: Don't disclose ship sinking in retreat These commands report "sunk!" even when the ship survives the attack but sinks during retreat. bomb even reports where on the retreat the ship sinks. Has been that way since retreat was added in Chainsaw. Report "sunk!" only when the attack sinks the ship directly. Similar code exists for land units, but it doesn't report killings. Change it anyway, to keep it consistent with the ship code. Signed-off-by: Markus Armbruster --- include/retreat.h | 2 -- src/lib/commands/bomb.c | 27 +++++++++++++-------------- src/lib/commands/laun.c | 11 ++++++----- src/lib/commands/mfir.c | 14 ++++++-------- src/lib/commands/torp.c | 7 +++---- src/lib/subs/retreat.c | 26 -------------------------- 6 files changed, 28 insertions(+), 59 deletions(-) diff --git a/include/retreat.h b/include/retreat.h index f5c86ba2..29adaaab 100644 --- a/include/retreat.h +++ b/include/retreat.h @@ -50,7 +50,5 @@ extern void retreat_ship(struct shpstr *, char); extern void retreat_land(struct lndstr *, char); -extern int check_retreat_and_do_shipdamage(struct shpstr *, int); -extern int check_retreat_and_do_landdamage(struct lndstr *, int); #endif diff --git a/src/lib/commands/bomb.c b/src/lib/commands/bomb.c index 9764e96d..b90f3acf 100644 --- a/src/lib/commands/bomb.c +++ b/src/lib/commands/bomb.c @@ -30,7 +30,7 @@ * Dave Pare, 1986 * Ken Stevens, 1995 * Steve McClure, 1998-2000 - * Markus Armbruster, 2004-2012 + * Markus Armbruster, 2004-2015 */ #include @@ -476,17 +476,16 @@ ship_bomb(struct emp_qelem *list, struct sctstr *target) xyas(target->sct_x, target->sct_y, ship.shp_own)); } pr("\n"); - check_retreat_and_do_shipdamage(&ship, dam); - if (ship.shp_rflags & RET_BOMBED) - if (((ship.shp_rflags & RET_INJURED) == 0) || !dam) - retreat_ship(&ship, 'b'); - putship(ship.shp_uid, &ship); - getship(ship.shp_uid, &ship); - if (!ship.shp_own) { + shipdamage(&ship, dam); + if (ship.shp_effic < SHIP_MINEFF) pr("%s at %s sunk!\n", prship(&ship), xyas(target->sct_x, target->sct_y, player->cnum)); - } + if (dam && (ship.shp_rflags & RET_INJURED)) + retreat_ship(&ship, 'i'); + else if (ship.shp_rflags & RET_BOMBED) + retreat_ship(&ship, 'b'); + putship(ship.shp_uid, &ship); collateral_damage(target->sct_x, target->sct_y, dam / 2); } out: @@ -678,11 +677,11 @@ land_bomb(struct emp_qelem *list, struct sctstr *target) own = land.lnd_own; mpr(own, "%s pinpoint bombing raid did %d damage to %s\n", cname(player->cnum), dam, prland(&land)); - check_retreat_and_do_landdamage(&land, dam); - - if (land.lnd_rflags & RET_BOMBED) - if (((land.lnd_rflags & RET_INJURED) == 0) || !dam) - retreat_land(&land, 'b'); + landdamage(&land, dam); + if (dam && (land.lnd_rflags & RET_INJURED)) + retreat_land(&land, 'i'); + else if (land.lnd_rflags & RET_BOMBED) + retreat_land(&land, 'b'); nreport(player->cnum, N_UNIT_BOMB, own, 1); putland(land.lnd_uid, &land); collateral_damage(target->sct_x, target->sct_y, dam); diff --git a/src/lib/commands/laun.c b/src/lib/commands/laun.c index 840a2905..4f1f1f8a 100644 --- a/src/lib/commands/laun.c +++ b/src/lib/commands/laun.c @@ -30,7 +30,7 @@ * Dave Pare, 1986 * Ken Stevens, 1995 * Steve McClure, 1998-2000 - * Markus Armbruster, 2005-2012 + * Markus Armbruster, 2005-2015 */ #include @@ -273,11 +273,12 @@ launch_missile(struct plnstr *pp) return RET_OK; } dam = pln_damage(pp, 'p', 1); - check_retreat_and_do_shipdamage(&target_ship, dam); - putship(target_ship.shp_uid, &target_ship); - getship(target_ship.shp_uid, &target_ship); - if (!target_ship.shp_own) + shipdamage(&target_ship, dam); + if (target_ship.shp_effic < SHIP_MINEFF) pr("%s sunk!\n", prship(&target_ship)); + if (dam && (target_ship.shp_rflags & RET_INJURED)) + retreat_ship(&target_ship, 'i'); + putship(target_ship.shp_uid, &target_ship); } return RET_OK; } diff --git a/src/lib/commands/mfir.c b/src/lib/commands/mfir.c index e3bc0057..c997e7dd 100644 --- a/src/lib/commands/mfir.c +++ b/src/lib/commands/mfir.c @@ -28,7 +28,7 @@ * * Known contributors to this file: * Steve McClure, 2000 - * Markus Armbruster, 2004-2014 + * Markus Armbruster, 2004-2015 */ #include @@ -423,16 +423,14 @@ multifire(void) break; default: getship(vshipno, &vship); - check_retreat_and_do_shipdamage(&vship, dam); + shipdamage(&vship, dam); if (vship.shp_effic < SHIP_MINEFF) pr("%s sunk!\n", prsub(&vship)); - else if (target == targ_sub - && (vship.shp_rflags & RET_DCHRGED) - && !(vship.shp_rflags & RET_INJURED)) + if (dam && (vship.shp_rflags & RET_INJURED)) + retreat_ship(&vship, 'i'); + else if (target == targ_sub && (vship.shp_rflags & RET_DCHRGED)) retreat_ship(&vship, 'd'); - else if (totaldefdam == 0 - && (vship.shp_rflags & RET_HELPLESS) - && !(vship.shp_rflags & RET_INJURED)) + else if (totaldefdam == 0 && (vship.shp_rflags & RET_HELPLESS)) retreat_ship(&vship, 'h'); putship(vship.shp_uid, &vship); break; diff --git a/src/lib/commands/torp.c b/src/lib/commands/torp.c index b09faaf2..d49dda55 100644 --- a/src/lib/commands/torp.c +++ b/src/lib/commands/torp.c @@ -178,13 +178,12 @@ torp(void) wu(0, vshipown, "%s in %s torpedoed %s for %d damage.\n", prsub(&sub), xyas(sub.shp_x, sub.shp_y, vshipown), prship(&vship), dam); - shipdamage(&vship, dam); - if (vship.shp_rflags & RET_TORPED) - retreat_ship(&vship, 't'); pr("Torpedo hit %s for %d damage.\n", prship(&vship), dam); - + shipdamage(&vship, dam); if (vship.shp_effic < SHIP_MINEFF) pr("%s sunk!\n", prship(&vship)); + if (vship.shp_rflags & RET_TORPED) + retreat_ship(&vship, 't'); putship(vship.shp_uid, &vship); if (mchr[(int)sub.shp_type].m_flags & M_SUB) nreport(vshipown, N_TORP_SHIP, 0, 1); diff --git a/src/lib/subs/retreat.c b/src/lib/subs/retreat.c index f51137ba..98b9a8e0 100644 --- a/src/lib/subs/retreat.c +++ b/src/lib/subs/retreat.c @@ -78,19 +78,6 @@ static struct ccode conditions[] = { { 0, { "panicked", "panicked"} } }; -int -check_retreat_and_do_shipdamage(struct shpstr *sp, int dam) -{ - if (dam <= 0) - return 0; - - shipdamage(sp, dam); - if (sp->shp_rflags & RET_INJURED) - retreat_ship(sp, 'i'); - - return 1; -} - void retreat_ship(struct shpstr *sp, char code) { @@ -281,19 +268,6 @@ findcondition(char code) return i; } -int -check_retreat_and_do_landdamage(struct lndstr *lp, int dam) -{ - if (dam <= 0) - return 0; - - landdamage(lp, dam); - if (lp->lnd_rflags & RET_INJURED) - retreat_land(lp, 'i'); - - return 1; -} - void retreat_land(struct lndstr *lp, char code) {