diff --git a/include/ship.h b/include/ship.h index db6054d1..92386584 100644 --- a/include/ship.h +++ b/include/ship.h @@ -188,5 +188,6 @@ extern int shp_fire(struct shpstr *); extern int shp_torp(struct shpstr *, int); extern double shp_fire_range(struct shpstr *); extern int shp_usable_guns(struct shpstr *); +extern double shp_torp_hitchance(struct shpstr *, int); #endif diff --git a/src/lib/commands/mfir.c b/src/lib/commands/mfir.c index b0b93459..c9ba7b45 100644 --- a/src/lib/commands/mfir.c +++ b/src/lib/commands/mfir.c @@ -34,7 +34,6 @@ #include #include "commands.h" -#include "damage.h" #include "empobj.h" #include "optlist.h" #include "retreat.h" @@ -742,7 +741,7 @@ quiet_bigdef(int attacker, struct emp_qelem *list, natid own, natid aown, fp->type = targ_ship; fp->uid = ship.shp_uid; add_to_fired_queue(&fp->queue, list); - if (!chance(DTORP_HITCHANCE(range, ship.shp_visib))) + if (!chance(shp_torp_hitchance(&ship, range))) continue; dam += dam2; } else { diff --git a/src/lib/commands/torp.c b/src/lib/commands/torp.c index a33368d2..590be2b9 100644 --- a/src/lib/commands/torp.c +++ b/src/lib/commands/torp.c @@ -37,7 +37,6 @@ #include #include "commands.h" -#include "damage.h" #include "news.h" #include "optlist.h" #include "retreat.h" @@ -159,7 +158,7 @@ torp(void) getship(victno, &vship); vshipown = vship.shp_own; range = mapdist(sub.shp_x, sub.shp_y, vship.shp_x, vship.shp_y); - hitchance = DTORP_HITCHANCE(range, sub.shp_visib); + hitchance = shp_torp_hitchance(&sub, range); if (range <= erange) { pr("Hitchance = %d%%\n", (int)(hitchance * 100)); } @@ -307,7 +306,7 @@ fire_torp(struct shpstr *sp, struct shpstr *targ, int ntargets) pr("Captain! Torpedoes sighted!\n"); - if (chance(DTORP_HITCHANCE(range, sp->shp_visib))) { + if (chance(shp_torp_hitchance(sp, range))) { pr("BOOM!...\n"); if (sp->shp_own != 0) wu(0, sp->shp_own, "%s @ %s torpedoed %s\n", diff --git a/src/lib/subs/landgun.c b/src/lib/subs/landgun.c index 4f0c018d..9654aace 100644 --- a/src/lib/subs/landgun.c +++ b/src/lib/subs/landgun.c @@ -235,16 +235,6 @@ effrange(int rng, double tlev) return techfact((int)tlev, rng / 2.0); } -/* - * Return torpedo range for ship SP. - */ -double -torprange(struct shpstr *sp) -{ - return effrange(sp->shp_frnge * 2, sp->shp_tech) - * sp->shp_effic / 100.0; -} - /* * Return firing range for sector SP. */ @@ -272,6 +262,25 @@ shp_fire_range(struct shpstr *sp) return effrange(sp->shp_frnge, sp->shp_tech); } +/* + * Return torpedo range for ship SP. + */ +double +torprange(struct shpstr *sp) +{ + return effrange(sp->shp_frnge * 2, sp->shp_tech) + * sp->shp_effic / 100.0; +} + +/* + * Return hit chance for torpedo from ship SP at range RANGE. + */ +double +shp_torp_hitchance(struct shpstr *sp, int range) +{ + return DTORP_HITCHANCE(range, sp->shp_visib); +} + /* * Return firing range for land unit SP. */ diff --git a/src/lib/subs/mission.c b/src/lib/subs/mission.c index 4de50a73..362b15f4 100644 --- a/src/lib/subs/mission.c +++ b/src/lib/subs/mission.c @@ -35,7 +35,6 @@ #include #include -#include "damage.h" #include "empobj.h" #include "file.h" #include "item.h" @@ -501,7 +500,7 @@ perform_mission(coord x, coord y, natid victim, struct emp_qelem *list, putship(sp->shp_uid, sp); if (dam2 < 0) continue; - hitchance = DTORP_HITCHANCE(md, sp->shp_visib); + hitchance = shp_torp_hitchance(sp, md); wu(0, sp->shp_own, "%s locking on %s %s in %s\n",