void
resupply_commod(struct lndstr *lp, int type)
{
- int vec[I_MAX + 1];
- int svec[I_MAX + 1];
int amt;
struct lchrstr *lcp;
struct shpstr ship;
lcp = &lchr[(int)lp->lnd_type];
- getvec(VT_ITEM, vec, (s_char *)lp, EF_LAND);
/* Ok, do we now have enough? */
- if (vec[type] < get_minimum(lp, type)) {
- vec[type] += supply_commod(lp->lnd_own, lp->lnd_x, lp->lnd_y, type,
- get_minimum(lp, type) - vec[type]);
- putvec(VT_ITEM, vec, (s_char *)lp, EF_LAND);
+ amt = get_minimum(lp, type) - lp->lnd_item[type];
+ if (amt > 0) {
+ lp->lnd_item[type] += supply_commod(lp->lnd_own, lp->lnd_x, lp->lnd_y,
+ type, amt);
+ amt = get_minimum(lp, type) - lp->lnd_item[type];
}
/* Now, check again to see if we have enough. */
- if (vec[type] < get_minimum(lp, type)) {
- /* Nope. How much do we need? */
- amt = (get_minimum(lp, type) - vec[type]);
+ if (amt > 0) {
/* Are we on a ship? if so, try to get it from the ship first. */
if (lp->lnd_ship >= 0) {
getship(lp->lnd_ship, &ship);
- getvec(VT_ITEM, svec, (s_char *)&ship, EF_SHIP);
/* Now, determine how much we can get */
- amt = (amt < svec[type]) ? amt : svec[type];
+ if (amt > ship.shp_item[type])
+ amt = ship.shp_item[type];
/* Now, add and subtract */
- vec[type] += amt;
- svec[type] -= amt;
- putvec(VT_ITEM, vec, (s_char *)lp, EF_LAND);
- putvec(VT_ITEM, svec, (s_char *)&ship, EF_SHIP);
+ lp->lnd_item[type] += amt;
+ ship.shp_item[type] -= amt;
putship(lp->lnd_ship, &ship);
}
}
int fuel_needed = (lp->lnd_fuelu * (((float)etu_per_update
* land_mob_scale)) / 10.0);
- while ((lp->lnd_fuel < fuel_needed) && vec[I_PETROL]) {
+ while ((lp->lnd_fuel < fuel_needed) && lp->lnd_item[I_PETROL]) {
lp->lnd_fuel += 10;
if (lp->lnd_fuel > lp->lnd_fuelc)
lp->lnd_fuel = lp->lnd_fuelc;
- vec[I_PETROL]--;
- putvec(VT_ITEM, vec, (s_char *)lp, EF_LAND);
+ lp->lnd_item[I_PETROL]--;
}
}
}
int wanted = total_wanted;
int gotten = 0, lookrange;
struct sctstr sect, dest;
- int vec[I_MAX + 1];
struct nstr_sect ns;
struct nstr_item ni;
struct lchrstr *lcp;
getsect(x, y, &dest);
getsect(x, y, §);
if (sect.sct_own == own) {
- getvec(VT_ITEM, vec, (s_char *)§, EF_SECTOR);
- if ((vec[type] - minimum) >= wanted) {
- vec[type] -= wanted;
- if (actually_doit) {
- putvec(VT_ITEM, vec, (s_char *)§, EF_SECTOR);
+ if (sect.sct_item[type] - wanted >= minimum) {
+ sect.sct_item[type] -= wanted;
+ if (actually_doit)
putsect(§);
- }
return total_wanted;
- } else if ((vec[type] - minimum) > 0) {
- gotten += (vec[type] - minimum);
- wanted -= (vec[type] - minimum);
- vec[type] = minimum;
- if (actually_doit) {
- putvec(VT_ITEM, vec, (s_char *)§, EF_SECTOR);
+ } else if (sect.sct_item[type] - minimum > 0) {
+ gotten += sect.sct_item[type] - minimum;
+ wanted -= sect.sct_item[type] - minimum;
+ sect.sct_item[type] = minimum;
+ if (actually_doit)
putsect(§);
- }
}
}
/* look for a headquarters or warehouse */
- lookrange = tfact(own, (double)10.0);
+ lookrange = tfact(own, 10.0);
snxtsct_dist(&ns, x, y, lookrange);
while (nxtsct(&ns, §) && wanted) {
if (sect.sct_own != own)
if (BestLandPath(buf, &dest, §, &move_cost, MOB_ROAD) ==
(s_char *)0)
continue;
- getvec(VT_ITEM, vec, (s_char *)§, EF_SECTOR);
if (!opt_NOFOOD && type == I_FOOD) {
- minimum = (((double)etu_per_update * eatrate) *
- (double)(vec[I_CIVIL] + vec[I_MILIT] + vec[I_UW]))
- + 2;
+ minimum = 2 + ((etu_per_update * eatrate)
+ * (sect.sct_item[I_CIVIL] + sect.sct_item[I_MILIT]
+ + sect.sct_item[I_UW]));
}
- if (vec[type] <= minimum) {
+ if (sect.sct_item[type] <= minimum) {
/* Don't bother... */
continue;
}
if (mobcost > 0)
can_move = ((double)sect.sct_mobil / mobcost);
else
- can_move = vec[type] - minimum;
- if (can_move > (vec[type] - minimum))
- can_move = (vec[type] - minimum);
+ can_move = sect.sct_item[type] - minimum;
+ if (can_move > sect.sct_item[type] - minimum)
+ can_move = sect.sct_item[type] - minimum;
if (can_move >= wanted) {
int n;
- vec[type] -= wanted;
+ sect.sct_item[type] -= wanted;
/* take off mobility for delivering sect */
n = roundavg(total_wanted * weight * move_cost);
n = sect.sct_mobil;
sect.sct_mobil -= (u_char)n;
- if (actually_doit) {
- putvec(VT_ITEM, vec, (s_char *)§, EF_SECTOR);
+ if (actually_doit)
putsect(§);
- }
return total_wanted;
} else if (can_move > 0) {
int n;
gotten += can_move;
wanted -= can_move;
- vec[type] -= can_move;
+ sect.sct_item[type] -= can_move;
/* take off mobility for delivering sect */
n = roundavg(can_move * weight * move_cost);
n = sect.sct_mobil;
sect.sct_mobil -= (u_char)n;
- if (actually_doit) {
- putvec(VT_ITEM, vec, (s_char *)§, EF_SECTOR);
+ if (actually_doit)
putsect(§);
- }
}
}
if (BestLandPath(buf, &dest, §, &move_cost, MOB_ROAD) ==
(s_char *)0)
continue;
- getvec(VT_ITEM, vec, (s_char *)&ship, EF_SHIP);
if (!opt_NOFOOD && type == I_FOOD)
- minimum = (((double)etu_per_update * eatrate) *
- (double)(vec[I_CIVIL] + vec[I_MILIT] + vec[I_UW]))
- + 2;
- if (vec[type] <= minimum) {
+ minimum = 2 + ((etu_per_update * eatrate)
+ * (ship.shp_item[I_CIVIL] + ship.shp_item[I_MILIT]
+ + ship.shp_item[I_UW]));
+ if (ship.shp_item[type] <= minimum) {
/* Don't bother... */
continue;
}
if (mobcost > 0)
can_move = ((double)sect.sct_mobil / mobcost);
else
- can_move = vec[type] - minimum;
- if (can_move > (vec[type] - minimum))
- can_move = (vec[type] - minimum);
+ can_move = ship.shp_item[type] - minimum;
+ if (can_move > ship.shp_item[type] - minimum)
+ can_move = ship.shp_item[type] - minimum;
if (can_move >= wanted) {
int n;
- vec[type] -= wanted;
+ ship.shp_item[type] -= wanted;
n = roundavg(wanted * weight * move_cost);
if (n < 0)
n = sect.sct_mobil;
sect.sct_mobil -= (u_char)n;
if (actually_doit) {
- putvec(VT_ITEM, vec, (s_char *)&ship, EF_SHIP);
putship(ship.shp_uid, &ship);
putsect(§);
}
int n;
gotten += can_move;
wanted -= can_move;
- vec[type] -= can_move;
+ ship.shp_item[type] -= can_move;
n = roundavg(can_move * weight * move_cost);
if (n < 0)
sect.sct_mobil -= (u_char)n;
if (actually_doit) {
- putvec(VT_ITEM, vec, (s_char *)&ship, EF_SHIP);
putship(ship.shp_uid, &ship);
putsect(§);
}
if (!(lcp->l_flags & L_SUPPLY))
continue;
- getvec(VT_ITEM, vec, (s_char *)&land, EF_LAND);
- if (vec[type] <= get_minimum(&land, type))
+ if (land.lnd_item[type] <= get_minimum(&land, type))
continue;
getsect(land.lnd_x, land.lnd_y, §);
if ((land.lnd_ship >= 0) && (sect.sct_effic < 2))
continue;
- if ((vec[type] - wanted) < get_minimum(&land, type)) {
- int hold;
+ if (land.lnd_item[type] - wanted < get_minimum(&land, type)) {
struct lndstr save;
/*
* avoids it.
*/
save = land;
- hold = vec[type];
- vec[type] = 0;
- putvec(VT_ITEM, vec, (s_char *)&land, EF_LAND);
+ land.lnd_item[type] = 0;
putland(land.lnd_uid, &land);
- hold += s_commod(own, land.lnd_x, land.lnd_y, type, wanted,
- actually_doit);
-
- vec[type] = hold;
- if (actually_doit) {
- putvec(VT_ITEM, vec, (s_char *)&land, EF_LAND);
+ land.lnd_item[type] =
+ save.lnd_item[type] + s_commod(own, land.lnd_x, land.lnd_y,
+ type, wanted, actually_doit);
+ if (actually_doit)
putland(land.lnd_uid, &land);
- } else
+ else
putland(save.lnd_uid, &save);
}
if (mobcost > 0)
can_move = ((double)land.lnd_mobil / mobcost);
else
- can_move = vec[type] - min;
- if (can_move > (vec[type] - min))
- can_move = (vec[type] - min);
+ can_move = land.lnd_item[type] - min;
+ if (can_move > land.lnd_item[type] - min)
+ can_move = land.lnd_item[type] - min;
if (can_move >= wanted) {
- vec[type] -= wanted;
+ land.lnd_item[type] -= wanted;
/* resupply the supply unit */
resupply_commod(&land, type);
land.lnd_mobil -= roundavg(wanted * weight * move_cost);
- if (actually_doit) {
- putvec(VT_ITEM, vec, (s_char *)&land, EF_LAND);
+ if (actually_doit)
putland(land.lnd_uid, &land);
- }
return total_wanted;
} else if (can_move > 0) {
gotten += can_move;
wanted -= can_move;
- vec[type] -= can_move;
+ land.lnd_item[type] -= can_move;
land.lnd_mobil -= roundavg(can_move * weight * move_cost);
- if (actually_doit) {
- putvec(VT_ITEM, vec, (s_char *)&land, EF_LAND);
+ if (actually_doit)
putland(land.lnd_uid, &land);
- }
}
}
has_supply(struct lndstr *lp)
{
struct lchrstr *lcp;
- int vec[I_MAX + 1], shells_needed, shells, keepshells;
+ int shells_needed, shells, keepshells;
int food, food_needed, keepfood;
int fuel_needed, fuel, petrol_needed, petrol, keeppetrol;
lcp = &lchr[(int)lp->lnd_type];
- getvec(VT_ITEM, vec, (s_char *)lp, EF_LAND);
if (!opt_NOFOOD) {
food_needed = get_minimum(lp, I_FOOD);
- food = keepfood = vec[I_FOOD];
+ food = keepfood = lp->lnd_item[I_FOOD];
if (food < food_needed) {
- vec[I_FOOD] = 0;
- putvec(VT_ITEM, vec, (s_char *)lp, EF_LAND);
+ lp->lnd_item[I_FOOD] = 0;
putland(lp->lnd_uid, lp);
food += try_supply_commod(lp->lnd_own, lp->lnd_x, lp->lnd_y,
I_FOOD, (food_needed - food));
- vec[I_FOOD] = keepfood;
- putvec(VT_ITEM, vec, (s_char *)lp, EF_LAND);
+ lp->lnd_item[I_FOOD] = keepfood;
putland(lp->lnd_uid, lp);
}
if (food < food_needed)
}
shells_needed = lp->lnd_ammo;
- shells = keepshells = vec[I_SHELL];
+ shells = keepshells = lp->lnd_item[I_SHELL];
if (shells < shells_needed) {
- vec[I_SHELL] = 0;
- putvec(VT_ITEM, vec, (s_char *)lp, EF_LAND);
+ lp->lnd_item[I_SHELL] = 0;
putland(lp->lnd_uid, lp);
shells += try_supply_commod(lp->lnd_own, lp->lnd_x, lp->lnd_y,
I_SHELL, (shells_needed - shells));
- vec[I_SHELL] = keepshells;
- putvec(VT_ITEM, vec, (s_char *)lp, EF_LAND);
+ lp->lnd_item[I_SHELL] = keepshells;
putland(lp->lnd_uid, lp);
}
if (fuel < fuel_needed) {
petrol_needed =
ldround(((double)(fuel_needed - fuel) / 10.0), 1);
- petrol = keeppetrol = vec[I_PETROL];
+ petrol = keeppetrol = lp->lnd_item[I_PETROL];
if (petrol < petrol_needed) {
- vec[I_PETROL] = 0;
- putvec(VT_ITEM, vec, (s_char *)lp, EF_LAND);
+ lp->lnd_item[I_PETROL] = 0;
putland(lp->lnd_uid, lp);
petrol += try_supply_commod(lp->lnd_own,
lp->lnd_x, lp->lnd_y,
I_PETROL,
(petrol_needed - petrol));
- vec[I_PETROL] = keeppetrol;
- putvec(VT_ITEM, vec, (s_char *)lp, EF_LAND);
+ lp->lnd_item[I_PETROL] = keeppetrol;
putland(lp->lnd_uid, lp);
}
fuel += petrol * 10;
int fuel_needed, fuel, petrol_needed, petrol;
lcp = &lchr[(int)lp->lnd_type];
- getvec(VT_ITEM, vec, (s_char *)lp, EF_LAND);
shells_needed = lp->lnd_ammo;
- shells = vec[I_SHELL];
+ shells = lp->lnd_item[I_SHELL];
if (shells < shells_needed) {
- vec[I_SHELL] = 0;
- putvec(VT_ITEM, vec, (s_char *)lp, EF_LAND);
+ lp->lnd_item[I_SHELL] = 0;
putland(lp->lnd_uid, lp);
shells += supply_commod(lp->lnd_own, lp->lnd_x, lp->lnd_y, I_SHELL,
(shells_needed - shells));
- vec[I_SHELL] = shells;
+ lp->lnd_item[I_SHELL] = shells;
}
- vec[I_SHELL] = max(vec[I_SHELL] - shells_needed, 0);
+ lp->lnd_item[I_SHELL] = max(lp->lnd_item[I_SHELL] - shells_needed, 0);
if (lp->lnd_frg) /* artillery */
goto done;
food_needed = get_minimum(lp, I_FOOD);
- food = vec[I_SHELL];
+ food = lp->lnd_item[I_SHELL];
if (food < food_needed) {
- vec[I_FOOD] = 0;
- putvec(VT_ITEM, vec, (s_char *)lp, EF_LAND);
+ lp->lnd_item[I_FOOD] = 0;
putland(lp->lnd_uid, lp);
food += supply_commod(lp->lnd_own, lp->lnd_x, lp->lnd_y, I_FOOD,
(food_needed - food));
- vec[I_FOOD] = food;
+ lp->lnd_item[I_FOOD] = food;
}
- vec[I_FOOD] = max(vec[I_FOOD] - food_needed, 0);
+ lp->lnd_item[I_FOOD] = max(lp->lnd_item[I_FOOD] - food_needed, 0);
if (opt_FUEL) {
fuel_needed = lp->lnd_fuelu;
if (fuel < fuel_needed) {
petrol_needed =
ldround(((double)(fuel_needed - fuel) / 10.0), 1);
- petrol = vec[I_PETROL];
+ petrol = lp->lnd_item[I_PETROL];
}
if (petrol < petrol_needed) {
- vec[I_PETROL] = 0;
- putvec(VT_ITEM, vec, (s_char *)lp, EF_LAND);
+ lp->lnd_item[I_PETROL] = 0;
putland(lp->lnd_uid, lp);
petrol += supply_commod(lp->lnd_own,
lp->lnd_x, lp->lnd_y,
I_PETROL, (petrol_needed - petrol));
- vec[I_PETROL] = petrol;
+ lp->lnd_item[I_PETROL] = petrol;
}
if (petrol_needed) {
if (petrol >= petrol_needed) {
- vec[I_PETROL] = max(vec[I_PETROL] - petrol_needed, 0);
+ lp->lnd_item[I_PETROL]
+ = max(lp->lnd_item[I_PETROL] - petrol_needed, 0);
lp->lnd_fuel += petrol_needed * 10;
} else {
- lp->lnd_fuel += vec[I_PETROL] * 10;
- vec[I_PETROL] = 0;
+ lp->lnd_fuel += lp->lnd_item[I_PETROL] * 10;
+ lp->lnd_item[I_PETROL] = 0;
}
}
}
/* end opt_FUEL */
done:
- putvec(VT_ITEM, vec, (s_char *)lp, EF_LAND);
putland(lp->lnd_uid, lp);
return 1;
}