From e3d4bb00802247377e39e1ac547281697acfeb56 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Sat, 20 Sep 2008 13:11:44 -0400 Subject: [PATCH] Fix recon and sweep not to spy after all spy planes are gone A reconnaissance patrol (recon and sweep) reports much more detail when spy planes participate. However, ac_encounter() didn't stop doing that after all spy planes were shot down or aborted. Fix by recalculating plane capabilities for every sector. --- src/lib/subs/aircombat.c | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/src/lib/subs/aircombat.c b/src/lib/subs/aircombat.c index bcac4395..9d425697 100644 --- a/src/lib/subs/aircombat.c +++ b/src/lib/subs/aircombat.c @@ -54,6 +54,7 @@ #define FLAK_GUN_MAX 14 +static int plane_caps(struct emp_qelem *); static void ac_intercept(struct emp_qelem *, struct emp_qelem *, struct emp_qelem *, natid, coord, coord); static int all_missiles(struct emp_qelem *); @@ -80,6 +81,7 @@ ac_encounter(struct emp_qelem *bomb_list, struct emp_qelem *esc_list, int gotilist[MAXNOC]; int unfriendly[MAXNOC]; int overfly[MAXNOC]; + int flags; struct emp_qelem ilist[MAXNOC], *qp; char mypath[1024]; int myp; @@ -120,7 +122,8 @@ ac_encounter(struct emp_qelem *bomb_list, struct emp_qelem *esc_list, unfriendly[cn]++; } if (mission_flags & PM_R) { - if (mission_flags & P_S) { + flags = plane_caps(bomb_list); + if (flags & P_S) { PR(plane_owner, "\nSPY Plane report\n"); PRdate(plane_owner); sathead(); @@ -142,6 +145,7 @@ ac_encounter(struct emp_qelem *bomb_list, struct emp_qelem *esc_list, over = getnatp(sect.sct_own); if (mission_flags & PM_R) { + flags = plane_caps(bomb_list); if (opt_HIDDEN) setcont(plane_owner, sect.sct_own, FOUND_FLY); if (sect.sct_type == SCT_WATER) { @@ -155,8 +159,8 @@ ac_encounter(struct emp_qelem *bomb_list, struct emp_qelem *esc_list, changed += map_set(plane_owner, sect.sct_x, sect.sct_y, dchr[sect.sct_type].d_mnem, 0); - } else if (mission_flags & P_S) { - satdisp_sect(§, (mission_flags & P_I) ? 10 : 50); + } else if (flags & P_S) { + satdisp_sect(§, flags & P_I ? 10 : 50); } else { /* This is borrowed from lookout */ if (sect.sct_own == plane_owner) @@ -187,7 +191,7 @@ ac_encounter(struct emp_qelem *bomb_list, struct emp_qelem *esc_list, mil : roundintby(mil, 25)); PR(plane_owner, "@ %s\n", xyas(x, y, plane_owner)); } - if (mission_flags & P_S) + if (flags & P_S) satdisp_units(sect.sct_x, sect.sct_y); } else { PR(plane_owner, "flying over %s at %s\n", @@ -354,6 +358,22 @@ out: } } +static int +plane_caps(struct emp_qelem *list) +{ + struct emp_qelem *qp; + struct plist *plp; + int fl; + + fl = 0; + for (qp = list->q_forw; qp != list; qp = qp->q_forw) { + plp = (struct plist *)qp; + fl |= plp->pcp->pl_flags; + } + + return fl; +} + static int count_non_missiles(struct emp_qelem *list) {