Sectors need space for items, deliveries and distribution thresholds.

To save space, the ancients invented `variables': a collection of
key-value pairs, missing means zero value, space for `enough' keys.
This complicates the code, as assigning to a `variable' can fail for
lack of space.  Over time, `enough' increased, and for quite some time
now `variables' have been *wasting* space.  This changeset replaces
them, except in struct mchrstr, struct lchrstr and struct pchrstr,
where they are read-only, and will be replaced later.  It is only a
first step; further cleanup is required.  To simplify and minimize
this necessarily huge changeset, the new item[] arrays have an unused
slot 0, and the old variable types V_CIVIL, ... are still defined, but
must have the same values as the item types I_CIVIL, ...
This commit is contained in:
Markus Armbruster 2004-03-03 16:54:22 +00:00
parent ba86513b01
commit eccc5cb7d7
86 changed files with 853 additions and 1226 deletions

View file

@ -50,9 +50,7 @@ deli(void)
register int dir, del;
register struct ichrstr *ich;
register int thresh;
int i_del;
int sx, sy;
int status;
struct nstr_sect nstr;
s_char buf[1024];
s_char prompt[128];
@ -68,13 +66,12 @@ deli(void)
*/
if (!snxtsct(&nstr, player->argp[2]))
return RET_SYN;
i_del = V_DEL(ich - ichr);
while (nxtsct(&nstr, &sect) > 0) {
if (!player->owner)
continue;
del = getvar(i_del, (s_char *)&sect, EF_SECTOR);
del = sect.sct_del[ich->i_vtype];
thresh = del & ~0x7;
dir = del & 0x7;
@ -105,16 +102,8 @@ deli(void)
continue;
del = thresh + dir;
status = putvar(i_del, del, (s_char *)&sect, EF_SECTOR);
if (status < 0) {
pr("No room for delivery path in %s\n",
xyas(sect.sct_x, sect.sct_y, player->cnum));
continue;
} else if (!status) {
/* Either nothing to set, or bogus amount. */
continue;
} else
putsect(&sect);
sect.sct_del[ich->i_vtype] = del;
putsect(&sect);
}
if (!del)