From 5fb761ab457dd5ed7ea7ec8472a96654b5251c8b Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Wed, 10 Mar 2004 13:35:54 +0000 Subject: [PATCH] (pln_equip, mission_pln_equip): Work directly on item arrays instead of copies made by getvec(). This is safe, because the old code made single copies and always flushed them back into the unit structures before flushing those. Simplify. --- src/lib/subs/mission.c | 35 ++++++++++++++--------------------- src/lib/subs/plnsub.c | 35 ++++++++++++++--------------------- 2 files changed, 28 insertions(+), 42 deletions(-) diff --git a/src/lib/subs/mission.c b/src/lib/subs/mission.c index 0e23b681..f9c2f387 100644 --- a/src/lib/subs/mission.c +++ b/src/lib/subs/mission.c @@ -1264,32 +1264,26 @@ mission_pln_equip(struct plist *plp, struct ichrstr *ip, int flags, struct lndstr land; struct shpstr ship; struct sctstr sect; - int type; - s_char *ptr; int itype; int rval; - int vec[I_MAX + 1]; + short *item; pp = &plp->plane; pcp = plp->pcp; if (pp->pln_ship >= 0) { getship(pp->pln_ship, &ship); - type = EF_SHIP; - ptr = (s_char *)&ship; + item = ship.shp_item; } else if (pp->pln_land >= 0) { getland(pp->pln_land, &land); - type = EF_LAND; - ptr = (s_char *)&land; + item = land.lnd_item; } else { getsect(pp->pln_x, pp->pln_y, §); - type = EF_SECTOR; - ptr = (s_char *)§ + item = sect.sct_item; } - getvec(VT_ITEM, vec, ptr, type); - if (pcp->pl_fuel > vec[I_PETROL]) { + if (pcp->pl_fuel > item[I_PETROL]) { return -1; } - vec[I_PETROL] -= pcp->pl_fuel; + item[I_PETROL] -= pcp->pl_fuel; rval = 0; if (!(flags & P_F)) { itype = 0; @@ -1336,24 +1330,23 @@ mission_pln_equip(struct plist *plp, struct ichrstr *ip, int flags, if (rval < 0 || (itype && needed <= 0)) { return -1; } - if (vec[itype] < needed && (itype == I_SHELL)) - vec[itype] += supply_commod(plp->plane.pln_own, - plp->plane.pln_x, plp->plane.pln_y, - I_SHELL, needed); - if (vec[itype] < needed) { + if (item[itype] < needed && (itype == I_SHELL)) + item[itype] += supply_commod(plp->plane.pln_own, + plp->plane.pln_x, plp->plane.pln_y, + I_SHELL, needed); + if (item[itype] < needed) { return -1; } else { - vec[itype] -= needed; + item[itype] -= needed; } if (itype == I_SHELL && (mission == 's' || mission == 'p')) plp->bombs = needed; else plp->misc = needed; } - putvec(VT_ITEM, vec, ptr, type); - if (type == EF_SHIP) + if (pp->pln_ship >= 0) putship(ship.shp_uid, &ship); - else if (type == EF_LAND) + else if (pp->pln_land >= 0) putland(land.lnd_uid, &land); else putsect(§); diff --git a/src/lib/subs/plnsub.c b/src/lib/subs/plnsub.c index 277d9e42..a31b1e61 100644 --- a/src/lib/subs/plnsub.c +++ b/src/lib/subs/plnsub.c @@ -520,29 +520,24 @@ pln_equip(struct plist *plp, struct ichrstr *ip, int flags, s_char mission) struct lndstr land; struct shpstr ship; struct sctstr sect; - int type; - s_char *ptr; int itype; int rval; - int vec[I_MAX + 1]; + short *item; int own; pp = &plp->plane; pcp = plp->pcp; if (pp->pln_ship >= 0) { getship(pp->pln_ship, &ship); - type = EF_SHIP; - ptr = (s_char *)&ship; + item = ship.shp_item; own = ship.shp_own; } else if (pp->pln_land >= 0) { getland(pp->pln_land, &land); - type = EF_LAND; - ptr = (s_char *)&land; + item = land.lnd_item; own = land.lnd_own; } else { getsect(pp->pln_x, pp->pln_y, §); - type = EF_SECTOR; - ptr = (s_char *)§ + item = sect.sct_item; own = sect.sct_oldown; } if (ip) { @@ -553,12 +548,11 @@ pln_equip(struct plist *plp, struct ichrstr *ip, int flags, s_char mission) } } } - getvec(VT_ITEM, vec, ptr, type); - if (pcp->pl_fuel > vec[I_PETROL]) { + if (pcp->pl_fuel > item[I_PETROL]) { pr("%s not enough petrol there!\n", prplane(pp)); return -1; } - vec[I_PETROL] -= pcp->pl_fuel; + item[I_PETROL] -= pcp->pl_fuel; rval = 0; if ((flags & P_F) == 0) { itype = 0; @@ -609,31 +603,30 @@ pln_equip(struct plist *plp, struct ichrstr *ip, int flags, s_char mission) } #if 0 /* Supply is broken somewhere, so don't use it for now */ - if (vec[itype] < needed && itype == I_SHELL) - vec[itype] += supply_commod(plp->plane.pln_own, - plp->plane.pln_x, plp->plane.pln_y, - I_SHELL, needed); + if (item[itype] < needed && itype == I_SHELL) + item[itype] += supply_commod(plp->plane.pln_own, + plp->plane.pln_x, plp->plane.pln_y, + I_SHELL, needed); #endif - if (vec[itype] < needed) { + if (item[itype] < needed) { pr("Not enough %s for %s\n", ichr[itype].i_name, prplane(pp)); return -1; } else { - vec[itype] -= needed; + item[itype] -= needed; } if (itype == I_SHELL && (mission == 's' || mission == 'p')) plp->bombs = needed; else plp->misc = needed; } - putvec(VT_ITEM, vec, ptr, type); - if (type == EF_SHIP) { + if (pp->pln_ship >= 0) { if (pp->pln_own != ship.shp_own) { wu(0, ship.shp_own, "%s %s prepares for takeoff from ship %s\n", cname(pp->pln_own), prplane(pp), prship(&ship)); } putship(ship.shp_uid, &ship); - } else if (type == EF_LAND) { + } else if (pp->pln_land >= 0) { if (pp->pln_own != land.lnd_own) { wu(0, land.lnd_own, "%s %s prepares for takeoff from unit %s\n",