From 18bf9e0b34352025561fa72fca23e6651be4fb4d Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Sat, 25 Jan 2014 15:57:12 +0100 Subject: [PATCH] subs: Split lnd_mar_put() off lnd_put() and specialize lnd_put() serves two masters: march, which wants it to report "stopped" and write back struct ulist member mobility to unit.land.lnd_mobil, and ground combat, which doesn't. lnd_put() assumes march when actor is non-zero. Correct (but see commit 8c502d4). Dates back to Empire 2. Too ugly for my taste. Specialize for each master instead: lnd_mar_put() for march, and lnd_put() for ground combat. Signed-off-by: Markus Armbruster --- include/land.h | 3 ++- src/lib/subs/attsub.c | 4 ++-- src/lib/subs/lndsub.c | 31 ++++++++++++++++++++++--------- 3 files changed, 26 insertions(+), 12 deletions(-) diff --git a/include/land.h b/include/land.h index 261f2f05d..4dbc2d037 100644 --- a/include/land.h +++ b/include/land.h @@ -187,7 +187,8 @@ extern void lnd_takemob(struct emp_qelem *, double); extern int lnd_spyval(struct lndstr *); extern void intelligence_report(int, struct lndstr *, int, char *); extern void lnd_mar(struct emp_qelem *, double *, double *, int *, natid); -extern void lnd_put(struct emp_qelem *, natid); +extern void lnd_mar_put(struct emp_qelem *, natid); +extern void lnd_put(struct emp_qelem *); extern int lnd_hardtarget(struct lndstr *); extern int lnd_mar_one_sector(struct emp_qelem *, int, natid, int); extern int lnd_support(natid, natid, coord, coord, int); diff --git a/src/lib/subs/attsub.c b/src/lib/subs/attsub.c index d4405e2c7..af3df3a6f 100644 --- a/src/lib/subs/attsub.c +++ b/src/lib/subs/attsub.c @@ -1959,7 +1959,7 @@ att_fight(int combat_mode, struct combat *off, struct emp_qelem *olist, send_reacting_units_home(dlist); /* putland the defending land */ - lnd_put(dlist, 0); + lnd_put(dlist); /* putland the attacking land */ put_oland(olist); @@ -2340,7 +2340,7 @@ move_in_land(int combat_mode, struct combat *off, struct emp_qelem *olist, } if (QEMPTY(olist)) return; - lnd_put(olist, 0); + lnd_put(olist); } /* diff --git a/src/lib/subs/lndsub.c b/src/lib/subs/lndsub.c index 66cae1ad3..9183d0aaf 100644 --- a/src/lib/subs/lndsub.c +++ b/src/lib/subs/lndsub.c @@ -532,7 +532,7 @@ lnd_mar(struct emp_qelem *list, double *minmobp, double *maxmobp, } void -lnd_put(struct emp_qelem *list, natid actor) +lnd_mar_put(struct emp_qelem *list, natid actor) { struct emp_qelem *qp, *next; struct ulist *llp; @@ -542,19 +542,32 @@ lnd_put(struct emp_qelem *list, natid actor) next = qp->q_back; llp = (struct ulist *)qp; lp = &llp->unit.land; - if (actor) { - mpr(actor, "%s stopped at %s\n", - prland(lp), xyas(lp->lnd_x, lp->lnd_y, actor)); - if (llp->mobil < -127) - llp->mobil = -127; - lp->lnd_mobil = llp->mobil; - } + mpr(actor, "%s stopped at %s\n", + prland(lp), xyas(lp->lnd_x, lp->lnd_y, actor)); + if (llp->mobil < -127) + llp->mobil = -127; + lp->lnd_mobil = llp->mobil; putland(lp->lnd_uid, lp); emp_remque(qp); free(qp); } } +void +lnd_put(struct emp_qelem *list) +{ + struct emp_qelem *qp, *next; + struct ulist *llp; + + for (qp = list->q_back; qp != list; qp = next) { + next = qp->q_back; + llp = (struct ulist *)qp; + putland(llp->unit.land.lnd_uid, &llp->unit.land); + emp_remque(qp); + free(qp); + } +} + /* * Sweep landmines with engineers in LAND_LIST for ACTOR. * If EXPLICIT is non-zero, this is for an explicit sweep command from @@ -951,7 +964,7 @@ lnd_mar_one_sector(struct emp_qelem *list, int dir, natid actor, int oldown; if (dir <= DIR_STOP || dir >= DIR_VIEW) { - lnd_put(list, actor); + lnd_mar_put(list, actor); return 1; } dx = diroff[dir][0]; -- 2.43.0