(improve, shoo, spy, buildeff): 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.
This commit is contained in:
parent
4ad649950e
commit
2a3b29ebe1
4 changed files with 18 additions and 29 deletions
|
@ -59,7 +59,6 @@ improve(void)
|
||||||
s_char buf[1024];
|
s_char buf[1024];
|
||||||
s_char inbuf[128];
|
s_char inbuf[128];
|
||||||
int type;
|
int type;
|
||||||
int vec[I_MAX + 1];
|
|
||||||
int value;
|
int value;
|
||||||
int ovalue;
|
int ovalue;
|
||||||
int maxup;
|
int maxup;
|
||||||
|
@ -101,7 +100,6 @@ improve(void)
|
||||||
continue;
|
continue;
|
||||||
if (!check_sect_ok(§))
|
if (!check_sect_ok(§))
|
||||||
continue;
|
continue;
|
||||||
getvec(VT_ITEM, vec, (s_char *)§, EF_SECTOR);
|
|
||||||
maxup = 100 - value;
|
maxup = 100 - value;
|
||||||
wanted = atoi(p);
|
wanted = atoi(p);
|
||||||
if (wanted < 0)
|
if (wanted < 0)
|
||||||
|
@ -113,8 +111,8 @@ improve(void)
|
||||||
lneeded = intrchr[type].in_lcms * maxup;
|
lneeded = intrchr[type].in_lcms * maxup;
|
||||||
if (opt_NO_LCMS)
|
if (opt_NO_LCMS)
|
||||||
lneeded = 0;
|
lneeded = 0;
|
||||||
if (vec[I_LCM] < lneeded) {
|
if (sect.sct_item[I_LCM] < lneeded) {
|
||||||
lneeded = vec[I_LCM];
|
lneeded = sect.sct_item[I_LCM];
|
||||||
maxup = lneeded / intrchr[type].in_lcms;
|
maxup = lneeded / intrchr[type].in_lcms;
|
||||||
if (maxup <= 0) {
|
if (maxup <= 0) {
|
||||||
pr("Not enough lcms in %s\n",
|
pr("Not enough lcms in %s\n",
|
||||||
|
@ -125,8 +123,8 @@ improve(void)
|
||||||
hneeded = intrchr[type].in_hcms * maxup;
|
hneeded = intrchr[type].in_hcms * maxup;
|
||||||
if (opt_NO_HCMS)
|
if (opt_NO_HCMS)
|
||||||
hneeded = 0;
|
hneeded = 0;
|
||||||
if (vec[I_HCM] < hneeded) {
|
if (sect.sct_item[I_HCM] < hneeded) {
|
||||||
hneeded = vec[I_HCM];
|
hneeded = sect.sct_item[I_HCM];
|
||||||
maxup = hneeded / intrchr[type].in_hcms;
|
maxup = hneeded / intrchr[type].in_hcms;
|
||||||
if (maxup <= 0) {
|
if (maxup <= 0) {
|
||||||
pr("Not enough hcms in %s\n",
|
pr("Not enough hcms in %s\n",
|
||||||
|
@ -168,11 +166,10 @@ improve(void)
|
||||||
dneeded = intrchr[type].in_dcost * maxup;
|
dneeded = intrchr[type].in_dcost * maxup;
|
||||||
player->dolcost += dneeded;
|
player->dolcost += dneeded;
|
||||||
if (!opt_NO_LCMS)
|
if (!opt_NO_LCMS)
|
||||||
vec[I_LCM] -= lneeded;
|
sect.sct_item[I_LCM] -= lneeded;
|
||||||
if (!opt_NO_HCMS)
|
if (!opt_NO_HCMS)
|
||||||
vec[I_HCM] -= hneeded;
|
sect.sct_item[I_HCM] -= hneeded;
|
||||||
sect.sct_mobil -= mneeded;
|
sect.sct_mobil -= mneeded;
|
||||||
putvec(VT_ITEM, vec, (s_char *)§, EF_SECTOR);
|
|
||||||
ovalue = value;
|
ovalue = value;
|
||||||
value += maxup;
|
value += maxup;
|
||||||
if (value > 100)
|
if (value > 100)
|
||||||
|
|
|
@ -59,7 +59,7 @@ shoo(void)
|
||||||
struct lndstr land;
|
struct lndstr land;
|
||||||
int targets;
|
int targets;
|
||||||
s_char *p;
|
s_char *p;
|
||||||
int vec[I_MAX + 1], mil, nsec;
|
int mil, nsec;
|
||||||
s_char prompt[128];
|
s_char prompt[128];
|
||||||
s_char buf[128];
|
s_char buf[128];
|
||||||
|
|
||||||
|
@ -78,9 +78,7 @@ shoo(void)
|
||||||
while (nxtsct(&nstr, §)) {
|
while (nxtsct(&nstr, §)) {
|
||||||
if (!player->owner)
|
if (!player->owner)
|
||||||
continue;
|
continue;
|
||||||
if (getvec(VT_ITEM, vec, (s_char *)§, EF_SECTOR) <= 0)
|
mil = sect.sct_item[I_MILIT];
|
||||||
continue;
|
|
||||||
mil = vec[I_MILIT];
|
|
||||||
nsec = 0;
|
nsec = 0;
|
||||||
snxtitem_xy(&ni, EF_LAND, sect.sct_x, sect.sct_y);
|
snxtitem_xy(&ni, EF_LAND, sect.sct_x, sect.sct_y);
|
||||||
while (nxtitem(&ni, (s_char *)&land)) {
|
while (nxtitem(&ni, (s_char *)&land)) {
|
||||||
|
@ -92,9 +90,9 @@ shoo(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vec[item] == 0 || vec[I_CIVIL] > mil * 10)
|
if (sect.sct_item[item] == 0 || sect.sct_item[I_CIVIL] > mil * 10)
|
||||||
continue;
|
continue;
|
||||||
nshot = vec[item] > targets ? targets : vec[item];
|
nshot = sect.sct_item[item] > targets ? targets : sect.sct_item[item];
|
||||||
m = ((double)nshot + 4.0) / 5.0;
|
m = ((double)nshot + 4.0) / 5.0;
|
||||||
|
|
||||||
if (m > sect.sct_mobil) {
|
if (m > sect.sct_mobil) {
|
||||||
|
@ -117,18 +115,17 @@ shoo(void)
|
||||||
m = sect.sct_mobil;
|
m = sect.sct_mobil;
|
||||||
mob_cost = roundavg(m);
|
mob_cost = roundavg(m);
|
||||||
sect.sct_mobil -= (u_char)mob_cost;
|
sect.sct_mobil -= (u_char)mob_cost;
|
||||||
vec[item] -= nshot;
|
sect.sct_item[item] -= nshot;
|
||||||
pr("BANG!! (thump) %d %s shot in %s!\n",
|
pr("BANG!! (thump) %d %s shot in %s!\n",
|
||||||
nshot, ip->i_name, xyas(sect.sct_x, sect.sct_y, player->cnum));
|
nshot, ip->i_name, xyas(sect.sct_x, sect.sct_y, player->cnum));
|
||||||
if (chance(nshot / 100.0))
|
if (chance(nshot / 100.0))
|
||||||
nreport(player->cnum, N_SHOOT_CIV, sect.sct_oldown, 1);
|
nreport(player->cnum, N_SHOOT_CIV, sect.sct_oldown, 1);
|
||||||
if (vec[item] <= 0 && item == V_CIVIL
|
if (sect.sct_item[item] <= 0 && item == I_CIVIL
|
||||||
&& (sect.sct_own != sect.sct_oldown)) {
|
&& (sect.sct_own != sect.sct_oldown)) {
|
||||||
sect.sct_oldown = sect.sct_own;
|
sect.sct_oldown = sect.sct_own;
|
||||||
pr(" %s is now completely yours\n",
|
pr(" %s is now completely yours\n",
|
||||||
xyas(sect.sct_x, sect.sct_y, player->cnum));
|
xyas(sect.sct_x, sect.sct_y, player->cnum));
|
||||||
}
|
}
|
||||||
sect.sct_item[item] = vec[item];
|
|
||||||
putsect(§);
|
putsect(§);
|
||||||
}
|
}
|
||||||
return RET_OK;
|
return RET_OK;
|
||||||
|
|
|
@ -111,7 +111,6 @@ spy(void)
|
||||||
while (nxtsct(&nstr, &from)) {
|
while (nxtsct(&nstr, &from)) {
|
||||||
if (!player->owner && !player->god)
|
if (!player->owner && !player->god)
|
||||||
continue;
|
continue;
|
||||||
getvec(VT_ITEM, vec, (s_char *)&from, EF_SECTOR);
|
|
||||||
nrecon = 0;
|
nrecon = 0;
|
||||||
nunits = 0;
|
nunits = 0;
|
||||||
snxtitem_xy(&ni, EF_LAND, from.sct_x, from.sct_y);
|
snxtitem_xy(&ni, EF_LAND, from.sct_x, from.sct_y);
|
||||||
|
@ -120,7 +119,7 @@ spy(void)
|
||||||
if (lchr[(int)land.lnd_type].l_flags & L_RECON)
|
if (lchr[(int)land.lnd_type].l_flags & L_RECON)
|
||||||
nrecon++;
|
nrecon++;
|
||||||
}
|
}
|
||||||
if ((military = vec[I_MILIT]) == 0 && (nunits == 0))
|
if ((military = from.sct_item[I_MILIT]) == 0 && (nunits == 0))
|
||||||
continue;
|
continue;
|
||||||
x = from.sct_x;
|
x = from.sct_x;
|
||||||
y = from.sct_y;
|
y = from.sct_y;
|
||||||
|
@ -205,8 +204,7 @@ spy(void)
|
||||||
if ((savemil != military) && (savemil > 0)) {
|
if ((savemil != military) && (savemil > 0)) {
|
||||||
if ((military < 0) || (military > savemil))
|
if ((military < 0) || (military > savemil))
|
||||||
military = 0;
|
military = 0;
|
||||||
vec[I_MILIT] = military;
|
from.sct_item[I_MILIT] = military;
|
||||||
putvec(VT_ITEM, vec, (s_char *)&from, EF_SECTOR);
|
|
||||||
putsect(&from);
|
putsect(&from);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -130,8 +130,6 @@ buildeff(struct sctstr *sp, int work, double *money)
|
||||||
int n, hcms, lcms;
|
int n, hcms, lcms;
|
||||||
int effdone = 0;
|
int effdone = 0;
|
||||||
|
|
||||||
getvec(VT_ITEM, vec, (s_char *)sp, EF_SECTOR);
|
|
||||||
|
|
||||||
work_cost = 0;
|
work_cost = 0;
|
||||||
if (sp->sct_type != sp->sct_newtype) {
|
if (sp->sct_type != sp->sct_newtype) {
|
||||||
/*
|
/*
|
||||||
|
@ -159,13 +157,13 @@ buildeff(struct sctstr *sp, int work, double *money)
|
||||||
work_cost = work;
|
work_cost = work;
|
||||||
|
|
||||||
if (dchr[sp->sct_type].d_lcms > 0) {
|
if (dchr[sp->sct_type].d_lcms > 0) {
|
||||||
lcms = vec[I_LCM];
|
lcms = sp->sct_item[I_LCM];
|
||||||
lcms /= dchr[sp->sct_type].d_lcms;
|
lcms /= dchr[sp->sct_type].d_lcms;
|
||||||
if (work_cost > lcms)
|
if (work_cost > lcms)
|
||||||
work_cost = lcms;
|
work_cost = lcms;
|
||||||
}
|
}
|
||||||
if (dchr[sp->sct_type].d_hcms > 0) {
|
if (dchr[sp->sct_type].d_hcms > 0) {
|
||||||
hcms = vec[I_HCM];
|
hcms = sp->sct_item[I_HCM];
|
||||||
hcms /= dchr[sp->sct_type].d_hcms;
|
hcms /= dchr[sp->sct_type].d_hcms;
|
||||||
if (work_cost > hcms)
|
if (work_cost > hcms)
|
||||||
work_cost = hcms;
|
work_cost = hcms;
|
||||||
|
@ -176,11 +174,10 @@ buildeff(struct sctstr *sp, int work, double *money)
|
||||||
|
|
||||||
if ((dchr[sp->sct_type].d_lcms > 0) ||
|
if ((dchr[sp->sct_type].d_lcms > 0) ||
|
||||||
(dchr[sp->sct_type].d_hcms > 0)) {
|
(dchr[sp->sct_type].d_hcms > 0)) {
|
||||||
vec[I_LCM] -= work_cost * dchr[sp->sct_type].d_lcms;
|
sp->sct_item[I_LCM] -= work_cost * dchr[sp->sct_type].d_lcms;
|
||||||
vec[I_HCM] -= work_cost * dchr[sp->sct_type].d_hcms;
|
sp->sct_item[I_HCM] -= work_cost * dchr[sp->sct_type].d_hcms;
|
||||||
}
|
}
|
||||||
effdone += work_cost;
|
effdone += work_cost;
|
||||||
}
|
}
|
||||||
putvec(VT_ITEM, vec, (s_char *)sp, EF_SECTOR);
|
|
||||||
return effdone;
|
return effdone;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue