diff --git a/src/lib/subs/aircombat.c b/src/lib/subs/aircombat.c index 3b87878f..11616ee9 100644 --- a/src/lib/subs/aircombat.c +++ b/src/lib/subs/aircombat.c @@ -404,13 +404,14 @@ sam_intercept(struct emp_qelem *att_list, struct emp_qelem *def_list, free(dqp); continue; } - if (mission_pln_equip(dplp, 0, P_F, 0) < 0) { + if (CANT_HAPPEN(dplp->plane.pln_flags & PLN_LAUNCHED) + || mission_pln_equip(dplp, 0, P_F, 0) < 0) { emp_remque(dqp); free(dqp); continue; } - CANT_HAPPEN(dplp->plane.pln_flags & PLN_LAUNCHED); dplp->plane.pln_flags |= PLN_LAUNCHED; + putplane(dplp->plane.pln_uid, &dplp->plane); if (first) { first = 0; PR(plane_owner, "%s launches SAMs!\n", cname(def_own)); diff --git a/src/lib/subs/mission.c b/src/lib/subs/mission.c index 3f812f2f..e038c12c 100644 --- a/src/lib/subs/mission.c +++ b/src/lib/subs/mission.c @@ -969,9 +969,9 @@ mission_pln_arm(struct emp_qelem *list, coord x, coord y, int dist, mission_flags &= ~P_MINE; } - CANT_HAPPEN(pp->pln_flags & PLN_LAUNCHED); pp->pln_flags |= PLN_LAUNCHED; pp->pln_mobil -= pln_mobcost(dist, pp, flags); + putplane(pp->pln_uid, pp); } return mission_flags; } diff --git a/src/lib/subs/mslsub.c b/src/lib/subs/mslsub.c index f5d42a22..3345b2a5 100644 --- a/src/lib/subs/mslsub.c +++ b/src/lib/subs/mslsub.c @@ -124,6 +124,9 @@ msl_hit(struct plnstr *pp, int hardtarget, int type, int news_item, return 0; } + CANT_HAPPEN(pp->pln_flags & PLN_LAUNCHED); + pp->pln_flags |= PLN_LAUNCHED; + putplane(pp->pln_uid, pp); mpr(pp->pln_own, "\tSHWOOOOOSH! Missile launched!\n"); if (pp->pln_nuketype != -1) diff --git a/src/lib/subs/plnsub.c b/src/lib/subs/plnsub.c index e6f9768f..d2b811f5 100644 --- a/src/lib/subs/plnsub.c +++ b/src/lib/subs/plnsub.c @@ -587,7 +587,6 @@ pln_arm(struct emp_qelem *list, int dist, char mission, struct ichrstr *ip, mission_flags &= ~P_MINE; /* FIXME no effect */ } - CANT_HAPPEN(pp->pln_flags & PLN_LAUNCHED); pp->pln_flags |= PLN_LAUNCHED; pp->pln_mobil -= pln_mobcost(dist, pp, flags); putplane(pp->pln_uid, pp);