fire_torp() reads targ->shp_own after putship(). If targ sank, its
owner is POGO by then. Screwed up when return torpedoes were added in
Chainsaw. Fix by reporting news before putship().
torp() is correct, because it gets the owner from a local variable.
Change it like fire_torp() anyway.
Signed-off-by: Markus Armbruster <armbru@pond.sub.org>
prsub(&sub), xyas(sub.shp_x, sub.shp_y, vshipown),
prship(&vship), dam);
pr("Torpedo hit %s for %d damage.\n", prsub(&vship), dam);
prsub(&sub), xyas(sub.shp_x, sub.shp_y, vshipown),
prship(&vship), dam);
pr("Torpedo hit %s for %d damage.\n", prsub(&vship), dam);
+ if (!(mchr[vship.shp_type].m_flags & M_SUB)) {
+ if (mchr[sub.shp_type].m_flags & M_SUB)
+ nreport(vshipown, N_TORP_SHIP, 0, 1);
+ else
+ nreport(vshipown, N_SHIP_TORP, player->cnum, 1);
+ }
shipdamage(&vship, dam);
if (vship.shp_effic < SHIP_MINEFF)
pr("%s sunk!\n", prsub(&vship));
if (vship.shp_rflags & RET_TORPED)
retreat_ship(&vship, 't');
putship(vship.shp_uid, &vship);
shipdamage(&vship, dam);
if (vship.shp_effic < SHIP_MINEFF)
pr("%s sunk!\n", prsub(&vship));
if (vship.shp_rflags & RET_TORPED)
retreat_ship(&vship, 't');
putship(vship.shp_uid, &vship);
- if (!(mchr[vship.shp_type].m_flags & M_SUB)) {
- if (mchr[(int)sub.shp_type].m_flags & M_SUB)
- nreport(vshipown, N_TORP_SHIP, 0, 1);
- else
- nreport(vshipown, N_SHIP_TORP, player->cnum, 1);
- }
} else {
pr("Missed\n");
if (vshipown != 0)
} else {
pr("Missed\n");
if (vshipown != 0)
if (chance(shp_torp_hitchance(sp, range))) {
pr("BOOM!...\n");
if (chance(shp_torp_hitchance(sp, range))) {
pr("BOOM!...\n");
+ if (!(mchr[targ->shp_type].m_flags & M_SUB)) {
+ if (mchr[sp->shp_type].m_flags & M_SUB)
+ nreport(targ->shp_own, N_TORP_SHIP, 0, 1);
+ else
+ nreport(targ->shp_own, N_SHIP_TORP, sp->shp_own, 1);
+ }
if (sp->shp_own != 0)
wu(0, sp->shp_own, "%s @ %s torpedoed %s\n",
prship(sp),
if (sp->shp_own != 0)
wu(0, sp->shp_own, "%s @ %s torpedoed %s\n",
prship(sp),
shipdamage(targ, dam);
putship(targ->shp_uid, targ);
shipdamage(targ, dam);
putship(targ->shp_uid, targ);
- if (!(mchr[targ->shp_type].m_flags & M_SUB)) {
- if (mchr[(int)sp->shp_type].m_flags & M_SUB)
- nreport(targ->shp_own, N_TORP_SHIP, 0, 1);
- else
- nreport(targ->shp_own, N_SHIP_TORP, sp->shp_own, 1);
- }
} else {
pr("Missed!\n");
if (sp->shp_own != 0)
} else {
pr("Missed!\n");
if (sp->shp_own != 0)