mthrowu, nhlan, options, regions, rip and role globals moved to g.

This commit is contained in:
Bart House
2018-12-25 16:26:27 -08:00
parent 64be5fd35a
commit 769ad91cc3
48 changed files with 679 additions and 649 deletions

View File

@@ -11,10 +11,6 @@
* structure eventually.
*/
static NhRegion **regions;
static int n_regions = 0;
static int max_regions = 0;
#define NO_CALLBACK (-1)
boolean FDECL(inside_gas_cloud, (genericptr, genericptr));
@@ -294,19 +290,19 @@ NhRegion *reg;
NhRegion **tmp_reg;
int i, j;
if (max_regions <= n_regions) {
tmp_reg = regions;
regions =
(NhRegion **) alloc((max_regions + 10) * sizeof (NhRegion *));
if (max_regions > 0) {
(void) memcpy((genericptr_t) regions, (genericptr_t) tmp_reg,
max_regions * sizeof (NhRegion *));
if (g.max_regions <= g.n_regions) {
tmp_reg = g.regions;
g.regions =
(NhRegion **) alloc((g.max_regions + 10) * sizeof (NhRegion *));
if (g.max_regions > 0) {
(void) memcpy((genericptr_t) g.regions, (genericptr_t) tmp_reg,
g.max_regions * sizeof (NhRegion *));
free((genericptr_t) tmp_reg);
}
max_regions += 10;
g.max_regions += 10;
}
regions[n_regions] = reg;
n_regions++;
g.regions[g.n_regions] = reg;
g.n_regions++;
/* Check for monsters inside the region */
for (i = reg->bounding_box.lx; i <= reg->bounding_box.hx; i++)
for (j = reg->bounding_box.ly; j <= reg->bounding_box.hy; j++) {
@@ -334,10 +330,10 @@ NhRegion *reg;
{
register int i, x, y;
for (i = 0; i < n_regions; i++)
if (regions[i] == reg)
for (i = 0; i < g.n_regions; i++)
if (g.regions[i] == reg)
break;
if (i == n_regions)
if (i == g.n_regions)
return;
/* Update screen if necessary */
@@ -349,9 +345,9 @@ NhRegion *reg;
newsym(x, y);
free_region(reg);
regions[i] = regions[n_regions - 1];
regions[n_regions - 1] = (NhRegion *) 0;
n_regions--;
g.regions[i] = g.regions[g.n_regions - 1];
g.regions[g.n_regions - 1] = (NhRegion *) 0;
g.n_regions--;
}
/*
@@ -363,13 +359,13 @@ clear_regions()
{
register int i;
for (i = 0; i < n_regions; i++)
free_region(regions[i]);
n_regions = 0;
if (max_regions > 0)
free((genericptr_t) regions);
max_regions = 0;
regions = (NhRegion **) 0;
for (i = 0; i < g.n_regions; i++)
free_region(g.regions[i]);
g.n_regions = 0;
if (g.max_regions > 0)
free((genericptr_t) g.regions);
g.max_regions = 0;
g.regions = (NhRegion **) 0;
}
/*
@@ -385,35 +381,35 @@ run_regions()
/* End of life ? */
/* Do it backward because the array will be modified */
for (i = n_regions - 1; i >= 0; i--) {
if (regions[i]->ttl == 0L) {
if ((f_indx = regions[i]->expire_f) == NO_CALLBACK
|| (*callbacks[f_indx])(regions[i], (genericptr_t) 0))
remove_region(regions[i]);
for (i = g.n_regions - 1; i >= 0; i--) {
if (g.regions[i]->ttl == 0L) {
if ((f_indx = g.regions[i]->expire_f) == NO_CALLBACK
|| (*callbacks[f_indx])(g.regions[i], (genericptr_t) 0))
remove_region(g.regions[i]);
}
}
/* Process remaining regions */
for (i = 0; i < n_regions; i++) {
for (i = 0; i < g.n_regions; i++) {
/* Make the region age */
if (regions[i]->ttl > 0L)
regions[i]->ttl--;
if (g.regions[i]->ttl > 0L)
g.regions[i]->ttl--;
/* Check if player is inside region */
f_indx = regions[i]->inside_f;
if (f_indx != NO_CALLBACK && hero_inside(regions[i]))
(void) (*callbacks[f_indx])(regions[i], (genericptr_t) 0);
f_indx = g.regions[i]->inside_f;
if (f_indx != NO_CALLBACK && hero_inside(g.regions[i]))
(void) (*callbacks[f_indx])(g.regions[i], (genericptr_t) 0);
/* Check if any monster is inside region */
if (f_indx != NO_CALLBACK) {
for (j = 0; j < regions[i]->n_monst; j++) {
for (j = 0; j < g.regions[i]->n_monst; j++) {
struct monst *mtmp =
find_mid(regions[i]->monsters[j], FM_FMON);
find_mid(g.regions[i]->monsters[j], FM_FMON);
if (!mtmp || DEADMONSTER(mtmp)
|| (*callbacks[f_indx])(regions[i], mtmp)) {
|| (*callbacks[f_indx])(g.regions[i], mtmp)) {
/* The monster died, remove it from list */
k = (regions[i]->n_monst -= 1);
regions[i]->monsters[j] = regions[i]->monsters[k];
regions[i]->monsters[k] = 0;
k = (g.regions[i]->n_monst -= 1);
g.regions[i]->monsters[j] = g.regions[i]->monsters[k];
g.regions[i]->monsters[k] = 0;
--j; /* current slot has been reused; recheck it next */
}
}
@@ -431,40 +427,40 @@ xchar x, y;
int i, f_indx;
/* First check if we can do the move */
for (i = 0; i < n_regions; i++) {
if (inside_region(regions[i], x, y) && !hero_inside(regions[i])
&& !regions[i]->attach_2_u) {
if ((f_indx = regions[i]->can_enter_f) != NO_CALLBACK)
if (!(*callbacks[f_indx])(regions[i], (genericptr_t) 0))
for (i = 0; i < g.n_regions; i++) {
if (inside_region(g.regions[i], x, y) && !hero_inside(g.regions[i])
&& !g.regions[i]->attach_2_u) {
if ((f_indx = g.regions[i]->can_enter_f) != NO_CALLBACK)
if (!(*callbacks[f_indx])(g.regions[i], (genericptr_t) 0))
return FALSE;
} else if (hero_inside(regions[i]) && !inside_region(regions[i], x, y)
&& !regions[i]->attach_2_u) {
if ((f_indx = regions[i]->can_leave_f) != NO_CALLBACK)
if (!(*callbacks[f_indx])(regions[i], (genericptr_t) 0))
} else if (hero_inside(g.regions[i]) && !inside_region(g.regions[i], x, y)
&& !g.regions[i]->attach_2_u) {
if ((f_indx = g.regions[i]->can_leave_f) != NO_CALLBACK)
if (!(*callbacks[f_indx])(g.regions[i], (genericptr_t) 0))
return FALSE;
}
}
/* Callbacks for the regions we do leave */
for (i = 0; i < n_regions; i++)
if (hero_inside(regions[i]) && !regions[i]->attach_2_u
&& !inside_region(regions[i], x, y)) {
clear_hero_inside(regions[i]);
if (regions[i]->leave_msg != (const char *) 0)
pline1(regions[i]->leave_msg);
if ((f_indx = regions[i]->leave_f) != NO_CALLBACK)
(void) (*callbacks[f_indx])(regions[i], (genericptr_t) 0);
for (i = 0; i < g.n_regions; i++)
if (hero_inside(g.regions[i]) && !g.regions[i]->attach_2_u
&& !inside_region(g.regions[i], x, y)) {
clear_hero_inside(g.regions[i]);
if (g.regions[i]->leave_msg != (const char *) 0)
pline1(g.regions[i]->leave_msg);
if ((f_indx = g.regions[i]->leave_f) != NO_CALLBACK)
(void) (*callbacks[f_indx])(g.regions[i], (genericptr_t) 0);
}
/* Callbacks for the regions we do enter */
for (i = 0; i < n_regions; i++)
if (!hero_inside(regions[i]) && !regions[i]->attach_2_u
&& inside_region(regions[i], x, y)) {
set_hero_inside(regions[i]);
if (regions[i]->enter_msg != (const char *) 0)
pline1(regions[i]->enter_msg);
if ((f_indx = regions[i]->enter_f) != NO_CALLBACK)
(void) (*callbacks[f_indx])(regions[i], (genericptr_t) 0);
for (i = 0; i < g.n_regions; i++)
if (!hero_inside(g.regions[i]) && !g.regions[i]->attach_2_u
&& inside_region(g.regions[i], x, y)) {
set_hero_inside(g.regions[i]);
if (g.regions[i]->enter_msg != (const char *) 0)
pline1(g.regions[i]->enter_msg);
if ((f_indx = g.regions[i]->enter_f) != NO_CALLBACK)
(void) (*callbacks[f_indx])(g.regions[i], (genericptr_t) 0);
}
return TRUE;
}
@@ -480,38 +476,38 @@ xchar x, y;
int i, f_indx;
/* First check if we can do the move */
for (i = 0; i < n_regions; i++) {
if (inside_region(regions[i], x, y) && !mon_in_region(regions[i], mon)
&& regions[i]->attach_2_m != mon->m_id) {
if ((f_indx = regions[i]->can_enter_f) != NO_CALLBACK)
if (!(*callbacks[f_indx])(regions[i], mon))
for (i = 0; i < g.n_regions; i++) {
if (inside_region(g.regions[i], x, y) && !mon_in_region(g.regions[i], mon)
&& g.regions[i]->attach_2_m != mon->m_id) {
if ((f_indx = g.regions[i]->can_enter_f) != NO_CALLBACK)
if (!(*callbacks[f_indx])(g.regions[i], mon))
return FALSE;
} else if (mon_in_region(regions[i], mon)
&& !inside_region(regions[i], x, y)
&& regions[i]->attach_2_m != mon->m_id) {
if ((f_indx = regions[i]->can_leave_f) != NO_CALLBACK)
if (!(*callbacks[f_indx])(regions[i], mon))
} else if (mon_in_region(g.regions[i], mon)
&& !inside_region(g.regions[i], x, y)
&& g.regions[i]->attach_2_m != mon->m_id) {
if ((f_indx = g.regions[i]->can_leave_f) != NO_CALLBACK)
if (!(*callbacks[f_indx])(g.regions[i], mon))
return FALSE;
}
}
/* Callbacks for the regions we do leave */
for (i = 0; i < n_regions; i++)
if (mon_in_region(regions[i], mon)
&& regions[i]->attach_2_m != mon->m_id
&& !inside_region(regions[i], x, y)) {
remove_mon_from_reg(regions[i], mon);
if ((f_indx = regions[i]->leave_f) != NO_CALLBACK)
(void) (*callbacks[f_indx])(regions[i], mon);
for (i = 0; i < g.n_regions; i++)
if (mon_in_region(g.regions[i], mon)
&& g.regions[i]->attach_2_m != mon->m_id
&& !inside_region(g.regions[i], x, y)) {
remove_mon_from_reg(g.regions[i], mon);
if ((f_indx = g.regions[i]->leave_f) != NO_CALLBACK)
(void) (*callbacks[f_indx])(g.regions[i], mon);
}
/* Callbacks for the regions we do enter */
for (i = 0; i < n_regions; i++)
if (!hero_inside(regions[i]) && !regions[i]->attach_2_u
&& inside_region(regions[i], x, y)) {
add_mon_to_reg(regions[i], mon);
if ((f_indx = regions[i]->enter_f) != NO_CALLBACK)
(void) (*callbacks[f_indx])(regions[i], mon);
for (i = 0; i < g.n_regions; i++)
if (!hero_inside(g.regions[i]) && !g.regions[i]->attach_2_u
&& inside_region(g.regions[i], x, y)) {
add_mon_to_reg(g.regions[i], mon);
if ((f_indx = g.regions[i]->enter_f) != NO_CALLBACK)
(void) (*callbacks[f_indx])(g.regions[i], mon);
}
return TRUE;
}
@@ -524,11 +520,11 @@ update_player_regions()
{
register int i;
for (i = 0; i < n_regions; i++)
if (!regions[i]->attach_2_u && inside_region(regions[i], u.ux, u.uy))
set_hero_inside(regions[i]);
for (i = 0; i < g.n_regions; i++)
if (!g.regions[i]->attach_2_u && inside_region(g.regions[i], u.ux, u.uy))
set_hero_inside(g.regions[i]);
else
clear_hero_inside(regions[i]);
clear_hero_inside(g.regions[i]);
}
/*
@@ -540,13 +536,13 @@ struct monst *mon;
{
register int i;
for (i = 0; i < n_regions; i++) {
if (inside_region(regions[i], mon->mx, mon->my)) {
if (!mon_in_region(regions[i], mon))
add_mon_to_reg(regions[i], mon);
for (i = 0; i < g.n_regions; i++) {
if (inside_region(g.regions[i], mon->mx, mon->my)) {
if (!mon_in_region(g.regions[i], mon))
add_mon_to_reg(g.regions[i], mon);
} else {
if (mon_in_region(regions[i], mon))
remove_mon_from_reg(regions[i], mon);
if (mon_in_region(g.regions[i], mon))
remove_mon_from_reg(g.regions[i], mon);
}
}
}
@@ -555,7 +551,7 @@ struct monst *mon;
/* not yet used */
/*
* Change monster pointer in regions
* Change monster pointer in g.regions
* This happens, for instance, when a monster grows and
* need a new structure (internally that is).
*/
@@ -565,10 +561,10 @@ struct monst *monold, *monnew;
{
register int i;
for (i = 0; i < n_regions; i++)
if (mon_in_region(regions[i], monold)) {
remove_mon_from_reg(regions[i], monold);
add_mon_to_reg(regions[i], monnew);
for (i = 0; i < g.n_regions; i++)
if (mon_in_region(g.regions[i], monold)) {
remove_mon_from_reg(g.regions[i], monold);
add_mon_to_reg(g.regions[i], monnew);
}
}
@@ -581,9 +577,9 @@ struct monst *mon;
{
register int i;
for (i = 0; i < n_regions; i++)
if (mon_in_region(regions[i], mon))
remove_mon_from_reg(regions[i], mon);
for (i = 0; i < g.n_regions; i++)
if (mon_in_region(g.regions[i], mon))
remove_mon_from_reg(g.regions[i], mon);
}
#endif /*0*/
@@ -598,10 +594,10 @@ xchar x, y;
{
register int i;
for (i = 0; i < n_regions; i++)
if (inside_region(regions[i], x, y) && regions[i]->visible
&& regions[i]->ttl != -2L)
return regions[i];
for (i = 0; i < g.n_regions; i++)
if (inside_region(g.regions[i], x, y) && g.regions[i]->visible
&& g.regions[i]->ttl != -2L)
return g.regions[i];
return (NhRegion *) 0;
}
@@ -628,43 +624,43 @@ int mode;
goto skip_lots;
bwrite(fd, (genericptr_t) &g.moves, sizeof(g.moves)); /* timestamp */
bwrite(fd, (genericptr_t) &n_regions, sizeof(n_regions));
for (i = 0; i < n_regions; i++) {
bwrite(fd, (genericptr_t) &regions[i]->bounding_box, sizeof(NhRect));
bwrite(fd, (genericptr_t) &regions[i]->nrects, sizeof(short));
for (j = 0; j < regions[i]->nrects; j++)
bwrite(fd, (genericptr_t) &regions[i]->rects[j], sizeof(NhRect));
bwrite(fd, (genericptr_t) &regions[i]->attach_2_u, sizeof(boolean));
bwrite(fd, (genericptr_t) &g.n_regions, sizeof(g.n_regions));
for (i = 0; i < g.n_regions; i++) {
bwrite(fd, (genericptr_t) &g.regions[i]->bounding_box, sizeof(NhRect));
bwrite(fd, (genericptr_t) &g.regions[i]->nrects, sizeof(short));
for (j = 0; j < g.regions[i]->nrects; j++)
bwrite(fd, (genericptr_t) &g.regions[i]->rects[j], sizeof(NhRect));
bwrite(fd, (genericptr_t) &g.regions[i]->attach_2_u, sizeof(boolean));
n = 0;
bwrite(fd, (genericptr_t) &regions[i]->attach_2_m, sizeof(unsigned));
n = regions[i]->enter_msg != (const char *) 0
? strlen(regions[i]->enter_msg)
bwrite(fd, (genericptr_t) &g.regions[i]->attach_2_m, sizeof(unsigned));
n = g.regions[i]->enter_msg != (const char *) 0
? strlen(g.regions[i]->enter_msg)
: 0;
bwrite(fd, (genericptr_t) &n, sizeof n);
if (n > 0)
bwrite(fd, (genericptr_t) regions[i]->enter_msg, n);
n = regions[i]->leave_msg != (const char *) 0
? strlen(regions[i]->leave_msg)
bwrite(fd, (genericptr_t) g.regions[i]->enter_msg, n);
n = g.regions[i]->leave_msg != (const char *) 0
? strlen(g.regions[i]->leave_msg)
: 0;
bwrite(fd, (genericptr_t) &n, sizeof n);
if (n > 0)
bwrite(fd, (genericptr_t) regions[i]->leave_msg, n);
bwrite(fd, (genericptr_t) &regions[i]->ttl, sizeof(long));
bwrite(fd, (genericptr_t) &regions[i]->expire_f, sizeof(short));
bwrite(fd, (genericptr_t) &regions[i]->can_enter_f, sizeof(short));
bwrite(fd, (genericptr_t) &regions[i]->enter_f, sizeof(short));
bwrite(fd, (genericptr_t) &regions[i]->can_leave_f, sizeof(short));
bwrite(fd, (genericptr_t) &regions[i]->leave_f, sizeof(short));
bwrite(fd, (genericptr_t) &regions[i]->inside_f, sizeof(short));
bwrite(fd, (genericptr_t) &regions[i]->player_flags,
bwrite(fd, (genericptr_t) g.regions[i]->leave_msg, n);
bwrite(fd, (genericptr_t) &g.regions[i]->ttl, sizeof(long));
bwrite(fd, (genericptr_t) &g.regions[i]->expire_f, sizeof(short));
bwrite(fd, (genericptr_t) &g.regions[i]->can_enter_f, sizeof(short));
bwrite(fd, (genericptr_t) &g.regions[i]->enter_f, sizeof(short));
bwrite(fd, (genericptr_t) &g.regions[i]->can_leave_f, sizeof(short));
bwrite(fd, (genericptr_t) &g.regions[i]->leave_f, sizeof(short));
bwrite(fd, (genericptr_t) &g.regions[i]->inside_f, sizeof(short));
bwrite(fd, (genericptr_t) &g.regions[i]->player_flags,
sizeof(unsigned int));
bwrite(fd, (genericptr_t) &regions[i]->n_monst, sizeof(short));
for (j = 0; j < regions[i]->n_monst; j++)
bwrite(fd, (genericptr_t) &regions[i]->monsters[j],
bwrite(fd, (genericptr_t) &g.regions[i]->n_monst, sizeof(short));
for (j = 0; j < g.regions[i]->n_monst; j++)
bwrite(fd, (genericptr_t) &g.regions[i]->monsters[j],
sizeof(unsigned));
bwrite(fd, (genericptr_t) &regions[i]->visible, sizeof(boolean));
bwrite(fd, (genericptr_t) &regions[i]->glyph, sizeof(int));
bwrite(fd, (genericptr_t) &regions[i]->arg, sizeof(anything));
bwrite(fd, (genericptr_t) &g.regions[i]->visible, sizeof(boolean));
bwrite(fd, (genericptr_t) &g.regions[i]->glyph, sizeof(int));
bwrite(fd, (genericptr_t) &g.regions[i]->arg, sizeof(anything));
}
skip_lots:
@@ -688,79 +684,79 @@ boolean ghostly; /* If a bones file restore */
tmstamp = 0;
else
tmstamp = (g.moves - tmstamp);
mread(fd, (genericptr_t) &n_regions, sizeof(n_regions));
max_regions = n_regions;
if (n_regions > 0)
regions = (NhRegion **) alloc(sizeof(NhRegion *) * n_regions);
for (i = 0; i < n_regions; i++) {
regions[i] = (NhRegion *) alloc(sizeof(NhRegion));
mread(fd, (genericptr_t) &regions[i]->bounding_box, sizeof(NhRect));
mread(fd, (genericptr_t) &regions[i]->nrects, sizeof(short));
mread(fd, (genericptr_t) &g.n_regions, sizeof(g.n_regions));
g.max_regions = g.n_regions;
if (g.n_regions > 0)
g.regions = (NhRegion **) alloc(sizeof(NhRegion *) * g.n_regions);
for (i = 0; i < g.n_regions; i++) {
g.regions[i] = (NhRegion *) alloc(sizeof(NhRegion));
mread(fd, (genericptr_t) &g.regions[i]->bounding_box, sizeof(NhRect));
mread(fd, (genericptr_t) &g.regions[i]->nrects, sizeof(short));
if (regions[i]->nrects > 0)
regions[i]->rects =
(NhRect *) alloc(sizeof(NhRect) * regions[i]->nrects);
for (j = 0; j < regions[i]->nrects; j++)
mread(fd, (genericptr_t) &regions[i]->rects[j], sizeof(NhRect));
mread(fd, (genericptr_t) &regions[i]->attach_2_u, sizeof(boolean));
mread(fd, (genericptr_t) &regions[i]->attach_2_m, sizeof(unsigned));
if (g.regions[i]->nrects > 0)
g.regions[i]->rects =
(NhRect *) alloc(sizeof(NhRect) * g.regions[i]->nrects);
for (j = 0; j < g.regions[i]->nrects; j++)
mread(fd, (genericptr_t) &g.regions[i]->rects[j], sizeof(NhRect));
mread(fd, (genericptr_t) &g.regions[i]->attach_2_u, sizeof(boolean));
mread(fd, (genericptr_t) &g.regions[i]->attach_2_m, sizeof(unsigned));
mread(fd, (genericptr_t) &n, sizeof n);
if (n > 0) {
msg_buf = (char *) alloc(n + 1);
mread(fd, (genericptr_t) msg_buf, n);
msg_buf[n] = '\0';
regions[i]->enter_msg = (const char *) msg_buf;
g.regions[i]->enter_msg = (const char *) msg_buf;
} else
regions[i]->enter_msg = (const char *) 0;
g.regions[i]->enter_msg = (const char *) 0;
mread(fd, (genericptr_t) &n, sizeof n);
if (n > 0) {
msg_buf = (char *) alloc(n + 1);
mread(fd, (genericptr_t) msg_buf, n);
msg_buf[n] = '\0';
regions[i]->leave_msg = (const char *) msg_buf;
g.regions[i]->leave_msg = (const char *) msg_buf;
} else
regions[i]->leave_msg = (const char *) 0;
g.regions[i]->leave_msg = (const char *) 0;
mread(fd, (genericptr_t) &regions[i]->ttl, sizeof(long));
mread(fd, (genericptr_t) &g.regions[i]->ttl, sizeof(long));
/* check for expired region */
if (regions[i]->ttl >= 0L)
regions[i]->ttl =
(regions[i]->ttl > tmstamp) ? regions[i]->ttl - tmstamp : 0L;
mread(fd, (genericptr_t) &regions[i]->expire_f, sizeof(short));
mread(fd, (genericptr_t) &regions[i]->can_enter_f, sizeof(short));
mread(fd, (genericptr_t) &regions[i]->enter_f, sizeof(short));
mread(fd, (genericptr_t) &regions[i]->can_leave_f, sizeof(short));
mread(fd, (genericptr_t) &regions[i]->leave_f, sizeof(short));
mread(fd, (genericptr_t) &regions[i]->inside_f, sizeof(short));
mread(fd, (genericptr_t) &regions[i]->player_flags,
if (g.regions[i]->ttl >= 0L)
g.regions[i]->ttl =
(g.regions[i]->ttl > tmstamp) ? g.regions[i]->ttl - tmstamp : 0L;
mread(fd, (genericptr_t) &g.regions[i]->expire_f, sizeof(short));
mread(fd, (genericptr_t) &g.regions[i]->can_enter_f, sizeof(short));
mread(fd, (genericptr_t) &g.regions[i]->enter_f, sizeof(short));
mread(fd, (genericptr_t) &g.regions[i]->can_leave_f, sizeof(short));
mread(fd, (genericptr_t) &g.regions[i]->leave_f, sizeof(short));
mread(fd, (genericptr_t) &g.regions[i]->inside_f, sizeof(short));
mread(fd, (genericptr_t) &g.regions[i]->player_flags,
sizeof(unsigned int));
if (ghostly) { /* settings pertained to old player */
clear_hero_inside(regions[i]);
clear_heros_fault(regions[i]);
clear_hero_inside(g.regions[i]);
clear_heros_fault(g.regions[i]);
}
mread(fd, (genericptr_t) &regions[i]->n_monst, sizeof(short));
if (regions[i]->n_monst > 0)
regions[i]->monsters =
(unsigned *) alloc(sizeof(unsigned) * regions[i]->n_monst);
mread(fd, (genericptr_t) &g.regions[i]->n_monst, sizeof(short));
if (g.regions[i]->n_monst > 0)
g.regions[i]->monsters =
(unsigned *) alloc(sizeof(unsigned) * g.regions[i]->n_monst);
else
regions[i]->monsters = (unsigned int *) 0;
regions[i]->max_monst = regions[i]->n_monst;
for (j = 0; j < regions[i]->n_monst; j++)
mread(fd, (genericptr_t) &regions[i]->monsters[j],
g.regions[i]->monsters = (unsigned int *) 0;
g.regions[i]->max_monst = g.regions[i]->n_monst;
for (j = 0; j < g.regions[i]->n_monst; j++)
mread(fd, (genericptr_t) &g.regions[i]->monsters[j],
sizeof(unsigned));
mread(fd, (genericptr_t) &regions[i]->visible, sizeof(boolean));
mread(fd, (genericptr_t) &regions[i]->glyph, sizeof(int));
mread(fd, (genericptr_t) &regions[i]->arg, sizeof(anything));
mread(fd, (genericptr_t) &g.regions[i]->visible, sizeof(boolean));
mread(fd, (genericptr_t) &g.regions[i]->glyph, sizeof(int));
mread(fd, (genericptr_t) &g.regions[i]->arg, sizeof(anything));
}
/* remove expired regions, do not trigger the expire_f callback (yet!);
also update monster lists if this data is coming from a bones file */
for (i = n_regions - 1; i >= 0; i--)
if (regions[i]->ttl == 0L)
remove_region(regions[i]);
else if (ghostly && regions[i]->n_monst > 0)
reset_region_mids(regions[i]);
for (i = g.n_regions - 1; i >= 0; i--)
if (g.regions[i]->ttl == 0L)
remove_region(g.regions[i]);
else if (ghostly && g.regions[i]->n_monst > 0)
reset_region_mids(g.regions[i]);
}
/* to support '#stats' wizard-mode command */
@@ -775,10 +771,10 @@ long *count, *size;
/* other stats formats take one parameter; this takes two */
Sprintf(hdrbuf, hdrfmt, (long) sizeof (NhRegion), (long) sizeof (NhRect));
*count = (long) n_regions; /* might be 0 even though max_regions isn't */
*size = (long) max_regions * (long) sizeof (NhRegion);
for (i = 0; i < n_regions; ++i) {
rg = regions[i];
*count = (long) g.n_regions; /* might be 0 even though g.max_regions isn't */
*size = (long) g.max_regions * (long) sizeof (NhRegion);
for (i = 0; i < g.n_regions; ++i) {
rg = g.regions[i];
*size += (long) rg->nrects * (long) sizeof (NhRect);
if (rg->enter_msg)
*size += (long) (strlen(rg->enter_msg) + 1);
@@ -1056,11 +1052,11 @@ region_danger()
{
int i, f_indx, n = 0;
for (i = 0; i < n_regions; i++) {
for (i = 0; i < g.n_regions; i++) {
/* only care about regions that hero is in */
if (!hero_inside(regions[i]))
if (!hero_inside(g.regions[i]))
continue;
f_indx = regions[i]->inside_f;
f_indx = g.regions[i]->inside_f;
/* the only type of region we understand is gas_cloud */
if (f_indx == INSIDE_GAS_CLOUD) {
/* completely harmless if you don't need to breathe */
@@ -1084,15 +1080,15 @@ region_safety()
NhRegion *r = 0;
int i, f_indx, n = 0;
for (i = 0; i < n_regions; i++) {
for (i = 0; i < g.n_regions; i++) {
/* only care about regions that hero is in */
if (!hero_inside(regions[i]))
if (!hero_inside(g.regions[i]))
continue;
f_indx = regions[i]->inside_f;
f_indx = g.regions[i]->inside_f;
/* the only type of region we understand is gas_cloud */
if (f_indx == INSIDE_GAS_CLOUD) {
if (!n++ && regions[i]->ttl >= 0)
r = regions[i];
if (!n++ && g.regions[i]->ttl >= 0)
r = g.regions[i];
}
}