region save/restore
When shortening/splitting wide lines I noticed that the save and restore code for regions had a bunch of those and they could be shortened by using an intermediate variable. Easier to read too. Also, change several 'unsigned int' to just 'unsigned' as is used in most of the rest of the code. At one point I omitted a (genericptr_t) cast (which should no longer be necessary...) and discovered that bwrite() wasn't declaring the input buffer it never modifies as 'const'.
This commit is contained in:
@@ -2299,12 +2299,12 @@ extern void closelog(NHFILE *);
|
||||
/* ### sfstruct.c ### */
|
||||
|
||||
#ifndef TRACEBUFFERING
|
||||
extern void newread(NHFILE *, int, int, genericptr_t, unsigned int);
|
||||
extern void newread(NHFILE *, int, int, genericptr_t, unsigned);
|
||||
extern void bufon(int);
|
||||
extern void bufoff(int);
|
||||
extern void bflush(int);
|
||||
extern void bwrite(int, genericptr_t, unsigned int);
|
||||
extern void mread(int, genericptr_t, unsigned int);
|
||||
extern void bwrite(int, const genericptr_t, unsigned);
|
||||
extern void mread(int, genericptr_t, unsigned);
|
||||
extern void minit(void);
|
||||
extern void bclose(int);
|
||||
#else
|
||||
@@ -2319,11 +2319,11 @@ extern void bclose(int);
|
||||
extern void Bufon(int, const char *, int);
|
||||
extern void Bufoff(int, const char *, int);
|
||||
extern void Bflush(int, const char *, int);
|
||||
extern void Bwrite(int, genericptr_t, unsigned int, const char *, int);
|
||||
extern void Bread(int, genericptr_t, unsigned int, const char *, int);
|
||||
extern void Bwrite(int, const genericptr_t, unsigned, const char *, int);
|
||||
extern void Bread(int, genericptr_t, unsigned, const char *, int);
|
||||
extern void Binit(const char *, int);
|
||||
extern void Bclose(int, const char *, int);
|
||||
extern void Mread(int, genericptr_t, unsigned int, const char *, int);
|
||||
extern void Mread(int, genericptr_t, unsigned, const char *, int);
|
||||
extern void Minit(const char *, int);
|
||||
#if defined(ZEROCOMP)
|
||||
extern void zerocomp_bclose(int);
|
||||
|
||||
@@ -30,37 +30,36 @@ typedef boolean (*callback_proc)(genericptr_t, genericptr_t);
|
||||
*/
|
||||
|
||||
typedef struct {
|
||||
NhRect bounding_box; /* Bounding box of the region */
|
||||
NhRect *rects; /* Rectangles composing the region */
|
||||
short nrects; /* Number of rectangles */
|
||||
boolean attach_2_u; /* Region attached to player ? */
|
||||
unsigned int attach_2_m; /* Region attached to monster ? */
|
||||
NhRect bounding_box; /* Bounding box of the region */
|
||||
NhRect *rects; /* Rectangles composing the region */
|
||||
short nrects; /* Number of rectangles */
|
||||
boolean attach_2_u; /* Region attached to player ? */
|
||||
unsigned attach_2_m; /* Region attached to monster ? */
|
||||
/*struct obj *attach_2_o;*/ /* Region attached to object ? UNUSED YET */
|
||||
const char *enter_msg; /* Message when entering */
|
||||
const char *leave_msg; /* Message when leaving */
|
||||
long ttl; /* Time to live. -1 is forever */
|
||||
short expire_f; /* Function to call when region's ttl expire */
|
||||
short can_enter_f; /* Function to call to check whether the player
|
||||
can, or can not, enter the region */
|
||||
short enter_f; /* Function to call when the player enters*/
|
||||
short can_leave_f; /* Function to call to check whether the player
|
||||
can, or can not, leave the region */
|
||||
short leave_f; /* Function to call when the player leaves */
|
||||
short inside_f; /* Function to call every turn if player's
|
||||
inside */
|
||||
unsigned int player_flags; /* (see above) */
|
||||
unsigned int *monsters; /* Monsters currently inside this region */
|
||||
short n_monst; /* Number of monsters inside this region */
|
||||
short max_monst; /* Maximum number of monsters that can be
|
||||
listed without having to grow the array */
|
||||
const char *enter_msg; /* Message when entering */
|
||||
const char *leave_msg; /* Message when leaving */
|
||||
long ttl; /* Time to live. -1 is forever */
|
||||
short expire_f; /* Function to call when region's ttl expire */
|
||||
short can_enter_f; /* Function to call to check whether the player
|
||||
* can, or can not, enter the region */
|
||||
short enter_f; /* Function to call when the player enters*/
|
||||
short can_leave_f; /* Function to call to check whether the player
|
||||
* can, or can not, leave the region */
|
||||
short leave_f; /* Function to call when the player leaves */
|
||||
short inside_f; /* Function to call every turn if player's inside */
|
||||
unsigned player_flags; /* (see above) */
|
||||
unsigned *monsters; /* Monsters currently inside this region */
|
||||
short n_monst; /* Number of monsters inside this region */
|
||||
short max_monst; /* Maximum number of monsters that can be
|
||||
* listed without having to grow the array */
|
||||
#define MONST_INC 5
|
||||
|
||||
/* Should probably do the same thing about objects */
|
||||
|
||||
boolean visible; /* Is the region visible ? */
|
||||
int glyph; /* Which glyph to use if visible */
|
||||
anything arg; /* Optional user argument (Ex: strength of
|
||||
force field, damage of a fire zone, ...*/
|
||||
boolean visible; /* Is the region visible ? */
|
||||
int glyph; /* Which glyph to use if visible */
|
||||
anything arg; /* Optional user argument (Ex: strength of
|
||||
* force field, damage of a fire zone, ...*/
|
||||
} NhRegion;
|
||||
|
||||
#endif /* REGION_H */
|
||||
|
||||
236
src/region.c
236
src/region.c
@@ -49,7 +49,7 @@ static const callback_proc callbacks[] = {
|
||||
|
||||
/* Should be inlined. */
|
||||
boolean
|
||||
inside_rect(NhRect* r, int x, int y)
|
||||
inside_rect(NhRect *r, int x, int y)
|
||||
{
|
||||
return (boolean) (x >= r->lx && x <= r->hx && y >= r->ly && y <= r->hy);
|
||||
}
|
||||
@@ -58,7 +58,7 @@ inside_rect(NhRect* r, int x, int y)
|
||||
* Check if a point is inside a region.
|
||||
*/
|
||||
boolean
|
||||
inside_region(NhRegion* reg, int x, int y)
|
||||
inside_region(NhRegion *reg, int x, int y)
|
||||
{
|
||||
int i;
|
||||
|
||||
@@ -74,7 +74,7 @@ inside_region(NhRegion* reg, int x, int y)
|
||||
* Create a region. It does not activate it.
|
||||
*/
|
||||
NhRegion *
|
||||
create_region(NhRect* rects, int nrect)
|
||||
create_region(NhRect *rects, int nrect)
|
||||
{
|
||||
int i;
|
||||
NhRegion *reg;
|
||||
@@ -119,7 +119,7 @@ create_region(NhRect* rects, int nrect)
|
||||
clear_heros_fault(reg);
|
||||
reg->n_monst = 0;
|
||||
reg->max_monst = 0;
|
||||
reg->monsters = (unsigned int *) 0;
|
||||
reg->monsters = (unsigned *) 0;
|
||||
reg->arg = cg.zeroany;
|
||||
return reg;
|
||||
}
|
||||
@@ -128,7 +128,7 @@ create_region(NhRect* rects, int nrect)
|
||||
* Add rectangle to region.
|
||||
*/
|
||||
void
|
||||
add_rect_to_reg(NhRegion* reg, NhRect* rect)
|
||||
add_rect_to_reg(NhRegion *reg, NhRect *rect)
|
||||
{
|
||||
NhRect *tmp_rect;
|
||||
|
||||
@@ -156,7 +156,7 @@ add_rect_to_reg(NhRegion* reg, NhRect* rect)
|
||||
* Add a monster to the region
|
||||
*/
|
||||
void
|
||||
add_mon_to_reg(NhRegion* reg, struct monst* mon)
|
||||
add_mon_to_reg(NhRegion *reg, struct monst *mon)
|
||||
{
|
||||
int i;
|
||||
unsigned *tmp_m;
|
||||
@@ -179,7 +179,7 @@ add_mon_to_reg(NhRegion* reg, struct monst* mon)
|
||||
* Remove a monster from the region list (it left or died...)
|
||||
*/
|
||||
void
|
||||
remove_mon_from_reg(NhRegion* reg, struct monst* mon)
|
||||
remove_mon_from_reg(NhRegion *reg, struct monst *mon)
|
||||
{
|
||||
register int i;
|
||||
|
||||
@@ -197,7 +197,7 @@ remove_mon_from_reg(NhRegion* reg, struct monst* mon)
|
||||
* than to check for coordinates.
|
||||
*/
|
||||
boolean
|
||||
mon_in_region(NhRegion* reg, struct monst* mon)
|
||||
mon_in_region(NhRegion *reg, struct monst *mon)
|
||||
{
|
||||
int i;
|
||||
|
||||
@@ -214,10 +214,11 @@ mon_in_region(NhRegion* reg, struct monst* mon)
|
||||
* Clone (make a standalone copy) the region.
|
||||
*/
|
||||
NhRegion *
|
||||
clone_region(reg)
|
||||
NhRegion *reg;
|
||||
clone_region(NhRegion *reg)
|
||||
{
|
||||
NhRegion *ret_reg;
|
||||
unsigned *m_id_list;
|
||||
short i;
|
||||
|
||||
ret_reg = create_region(reg->rects, reg->nrects);
|
||||
ret_reg->ttl = reg->ttl;
|
||||
@@ -231,14 +232,14 @@ NhRegion *reg;
|
||||
ret_reg->can_leave_f = reg->can_leave_f;
|
||||
ret_reg->player_flags = reg->player_flags; /* set/clear_hero_inside,&c*/
|
||||
ret_reg->n_monst = reg->n_monst;
|
||||
if (reg->n_monst > 0) {
|
||||
ret_reg->monsters = (unsigned int *)
|
||||
alloc((sizeof (unsigned)) * reg->n_monst);
|
||||
(void) memcpy((genericptr_t) ret_reg->monsters,
|
||||
(genericptr_t) reg->monsters,
|
||||
sizeof (unsigned) * reg->n_monst);
|
||||
ret_reg->max_monst = reg->max_monst;
|
||||
if (reg->max_monst > 0) {
|
||||
m_id_list = (unsigned *) alloc(reg->max_monst * sizeof (unsigned));
|
||||
for (i = 0; i < reg->max_monst; ++i)
|
||||
m_id_list[i] = reg->monsters[i];
|
||||
} else
|
||||
ret_reg->monsters = (unsigned int *) 0;
|
||||
m_id_list = (unsigned *) 0;
|
||||
ret_reg->monsters = m_id_list;
|
||||
return ret_reg;
|
||||
}
|
||||
|
||||
@@ -248,7 +249,7 @@ NhRegion *reg;
|
||||
* Free mem from region.
|
||||
*/
|
||||
void
|
||||
free_region(NhRegion* reg)
|
||||
free_region(NhRegion *reg)
|
||||
{
|
||||
if (reg) {
|
||||
if (reg->rects)
|
||||
@@ -268,7 +269,7 @@ free_region(NhRegion* reg)
|
||||
* This actually activates the region.
|
||||
*/
|
||||
void
|
||||
add_region(NhRegion* reg)
|
||||
add_region(NhRegion *reg)
|
||||
{
|
||||
NhRegion **tmp_reg;
|
||||
int i, j;
|
||||
@@ -311,7 +312,7 @@ add_region(NhRegion* reg)
|
||||
* Remove a region from the list & free it.
|
||||
*/
|
||||
void
|
||||
remove_region(NhRegion* reg)
|
||||
remove_region(NhRegion *reg)
|
||||
{
|
||||
register int i, x, y;
|
||||
|
||||
@@ -465,7 +466,7 @@ in_out_region(xchar x, xchar y)
|
||||
* check whether a monster enters/leaves one or more regions.
|
||||
*/
|
||||
boolean
|
||||
m_in_out_region(struct monst* mon, xchar x, xchar y)
|
||||
m_in_out_region(struct monst *mon, xchar x, xchar y)
|
||||
{
|
||||
int i, f_indx = 0;
|
||||
|
||||
@@ -530,7 +531,7 @@ update_player_regions(void)
|
||||
* Ditto for a specified monster.
|
||||
*/
|
||||
void
|
||||
update_monster_region(struct monst* mon)
|
||||
update_monster_region(struct monst *mon)
|
||||
{
|
||||
register int i;
|
||||
|
||||
@@ -570,7 +571,7 @@ struct monst *monold, *monnew;
|
||||
* Remove monster from all regions it was in (ie monster just died)
|
||||
*/
|
||||
void
|
||||
remove_mon_from_regions(struct monst* mon)
|
||||
remove_mon_from_regions(struct monst *mon)
|
||||
{
|
||||
register int i;
|
||||
|
||||
@@ -600,7 +601,7 @@ visible_region_at(xchar x, xchar y)
|
||||
}
|
||||
|
||||
void
|
||||
show_region(NhRegion* reg, xchar x, xchar y)
|
||||
show_region(NhRegion *reg, xchar x, xchar y)
|
||||
{
|
||||
show_glyph(x, y, reg->glyph);
|
||||
}
|
||||
@@ -609,8 +610,9 @@ show_region(NhRegion* reg, xchar x, xchar y)
|
||||
* save_regions :
|
||||
*/
|
||||
void
|
||||
save_regions(NHFILE* nhfp)
|
||||
save_regions(NHFILE *nhfp)
|
||||
{
|
||||
NhRegion *r;
|
||||
int i, j;
|
||||
unsigned n;
|
||||
|
||||
@@ -622,75 +624,56 @@ save_regions(NHFILE* nhfp)
|
||||
bwrite(nhfp->fd, (genericptr_t) &g.n_regions, sizeof (g.n_regions));
|
||||
}
|
||||
for (i = 0; i < g.n_regions; i++) {
|
||||
r = g.regions[i];
|
||||
if (nhfp->structlevel) {
|
||||
bwrite(nhfp->fd, (genericptr_t) &g.regions[i]->bounding_box,
|
||||
sizeof (NhRect));
|
||||
bwrite(nhfp->fd, (genericptr_t) &g.regions[i]->nrects,
|
||||
sizeof (short));
|
||||
bwrite(nhfp->fd, (genericptr_t) &r->bounding_box, sizeof (NhRect));
|
||||
bwrite(nhfp->fd, (genericptr_t) &r->nrects, sizeof (short));
|
||||
}
|
||||
for (j = 0; j < g.regions[i]->nrects; j++) {
|
||||
for (j = 0; j < r->nrects; j++) {
|
||||
if (nhfp->structlevel)
|
||||
bwrite(nhfp->fd, (genericptr_t) &g.regions[i]->rects[j],
|
||||
sizeof (NhRect));
|
||||
bwrite(nhfp->fd, (genericptr_t) &r->rects[j], sizeof (NhRect));
|
||||
}
|
||||
if (nhfp->structlevel)
|
||||
bwrite(nhfp->fd, (genericptr_t) &g.regions[i]->attach_2_u,
|
||||
sizeof (boolean));
|
||||
n = 0;
|
||||
|
||||
bwrite(nhfp->fd, (genericptr_t) &r->attach_2_u, sizeof (boolean));
|
||||
if (nhfp->structlevel)
|
||||
bwrite(nhfp->fd, (genericptr_t) &g.regions[i]->attach_2_m,
|
||||
sizeof (unsigned));
|
||||
bwrite(nhfp->fd, (genericptr_t) &r->attach_2_m, sizeof (unsigned));
|
||||
|
||||
n = !g.regions[i]->enter_msg ? 0 : strlen(g.regions[i]->enter_msg);
|
||||
n = !r->enter_msg ? 0U : (unsigned) strlen(r->enter_msg);
|
||||
if (nhfp->structlevel)
|
||||
bwrite(nhfp->fd, (genericptr_t) &n, sizeof n);
|
||||
|
||||
if (n > 0) {
|
||||
if (nhfp->structlevel)
|
||||
bwrite(nhfp->fd, (genericptr_t) g.regions[i]->enter_msg, n);
|
||||
bwrite(nhfp->fd, (genericptr_t) r->enter_msg, n);
|
||||
}
|
||||
n = !g.regions[i]->leave_msg ? 0 : strlen(g.regions[i]->leave_msg);
|
||||
n = !r->leave_msg ? 0U : (unsigned) strlen(r->leave_msg);
|
||||
if (nhfp->structlevel)
|
||||
bwrite(nhfp->fd, (genericptr_t) &n, sizeof n);
|
||||
|
||||
if (n > 0) {
|
||||
if (nhfp->structlevel) {
|
||||
bwrite(nhfp->fd, (genericptr_t) g.regions[i]->leave_msg, n);
|
||||
bwrite(nhfp->fd, (genericptr_t) r->leave_msg, n);
|
||||
}
|
||||
}
|
||||
if (nhfp->structlevel) {
|
||||
bwrite(nhfp->fd, (genericptr_t) &g.regions[i]->ttl,
|
||||
sizeof (long));
|
||||
bwrite(nhfp->fd, (genericptr_t) &g.regions[i]->expire_f,
|
||||
sizeof (short));
|
||||
bwrite(nhfp->fd, (genericptr_t) &g.regions[i]->can_enter_f,
|
||||
sizeof (short));
|
||||
bwrite(nhfp->fd, (genericptr_t) &g.regions[i]->enter_f,
|
||||
sizeof (short));
|
||||
bwrite(nhfp->fd, (genericptr_t) &g.regions[i]->can_leave_f,
|
||||
sizeof (short));
|
||||
bwrite(nhfp->fd, (genericptr_t) &g.regions[i]->leave_f,
|
||||
sizeof (short));
|
||||
bwrite(nhfp->fd, (genericptr_t) &g.regions[i]->inside_f,
|
||||
sizeof (short));
|
||||
bwrite(nhfp->fd, (genericptr_t) &g.regions[i]->player_flags,
|
||||
sizeof (unsigned int));
|
||||
bwrite(nhfp->fd, (genericptr_t) &g.regions[i]->n_monst,
|
||||
sizeof (short));
|
||||
bwrite(nhfp->fd, (genericptr_t) &r->ttl, sizeof (long));
|
||||
bwrite(nhfp->fd, (genericptr_t) &r->expire_f, sizeof (short));
|
||||
bwrite(nhfp->fd, (genericptr_t) &r->can_enter_f, sizeof (short));
|
||||
bwrite(nhfp->fd, (genericptr_t) &r->enter_f, sizeof (short));
|
||||
bwrite(nhfp->fd, (genericptr_t) &r->can_leave_f, sizeof (short));
|
||||
bwrite(nhfp->fd, (genericptr_t) &r->leave_f, sizeof (short));
|
||||
bwrite(nhfp->fd, (genericptr_t) &r->inside_f, sizeof (short));
|
||||
bwrite(nhfp->fd, (genericptr_t) &r->player_flags,
|
||||
sizeof (unsigned));
|
||||
bwrite(nhfp->fd, (genericptr_t) &r->n_monst, sizeof (short));
|
||||
}
|
||||
for (j = 0; j < g.regions[i]->n_monst; j++) {
|
||||
for (j = 0; j < r->n_monst; j++) {
|
||||
if (nhfp->structlevel)
|
||||
bwrite(nhfp->fd, (genericptr_t) &g.regions[i]->monsters[j],
|
||||
bwrite(nhfp->fd, (genericptr_t) &r->monsters[j],
|
||||
sizeof (unsigned));
|
||||
}
|
||||
if (nhfp->structlevel) {
|
||||
bwrite(nhfp->fd, (genericptr_t) &g.regions[i]->visible,
|
||||
sizeof (boolean));
|
||||
bwrite(nhfp->fd, (genericptr_t) &g.regions[i]->glyph,
|
||||
sizeof (int));
|
||||
bwrite(nhfp->fd, (genericptr_t) &g.regions[i]->arg,
|
||||
sizeof (anything));
|
||||
bwrite(nhfp->fd, (genericptr_t) &r->visible, sizeof (boolean));
|
||||
bwrite(nhfp->fd, (genericptr_t) &r->glyph, sizeof (int));
|
||||
bwrite(nhfp->fd, (genericptr_t) &r->arg, sizeof (anything));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -700,8 +683,9 @@ save_regions(NHFILE* nhfp)
|
||||
}
|
||||
|
||||
void
|
||||
rest_regions(NHFILE* nhfp)
|
||||
rest_regions(NHFILE *nhfp)
|
||||
{
|
||||
NhRegion *r;
|
||||
int i, j;
|
||||
unsigned n = 0;
|
||||
long tmstamp = 0L;
|
||||
@@ -723,26 +707,22 @@ rest_regions(NHFILE* nhfp)
|
||||
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));
|
||||
r = g.regions[i] = (NhRegion *) alloc(sizeof (NhRegion));
|
||||
if (nhfp->structlevel) {
|
||||
mread(nhfp->fd, (genericptr_t) &g.regions[i]->bounding_box,
|
||||
sizeof (NhRect));
|
||||
mread(nhfp->fd, (genericptr_t) &g.regions[i]->nrects,
|
||||
sizeof (short));
|
||||
mread(nhfp->fd, (genericptr_t) &r->bounding_box, sizeof (NhRect));
|
||||
mread(nhfp->fd, (genericptr_t) &r->nrects, sizeof (short));
|
||||
}
|
||||
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++) {
|
||||
if (r->nrects > 0)
|
||||
r->rects = (NhRect *) alloc(r->nrects * sizeof (NhRect));
|
||||
else
|
||||
r->rects = (NhRect *) 0;
|
||||
for (j = 0; j < r->nrects; j++) {
|
||||
if (nhfp->structlevel)
|
||||
mread(nhfp->fd, (genericptr_t) &g.regions[i]->rects[j],
|
||||
sizeof (NhRect));
|
||||
mread(nhfp->fd, (genericptr_t) &r->rects[j], sizeof (NhRect));
|
||||
}
|
||||
if (nhfp->structlevel) {
|
||||
mread(nhfp->fd, (genericptr_t) &g.regions[i]->attach_2_u,
|
||||
sizeof (boolean));
|
||||
mread(nhfp->fd, (genericptr_t) &g.regions[i]->attach_2_m,
|
||||
sizeof (unsigned));
|
||||
mread(nhfp->fd, (genericptr_t) &r->attach_2_u, sizeof (boolean));
|
||||
mread(nhfp->fd, (genericptr_t) &r->attach_2_m, sizeof (unsigned));
|
||||
}
|
||||
|
||||
if (nhfp->structlevel)
|
||||
@@ -753,9 +733,9 @@ rest_regions(NHFILE* nhfp)
|
||||
mread(nhfp->fd, (genericptr_t) msg_buf, n);
|
||||
}
|
||||
msg_buf[n] = '\0';
|
||||
g.regions[i]->enter_msg = (const char *) msg_buf;
|
||||
} else
|
||||
g.regions[i]->enter_msg = (const char *)0;
|
||||
msg_buf = (char *) 0;
|
||||
r->enter_msg = (const char *) msg_buf;
|
||||
|
||||
if (nhfp->structlevel)
|
||||
mread(nhfp->fd, (genericptr_t) &n, sizeof n);
|
||||
@@ -765,66 +745,56 @@ rest_regions(NHFILE* nhfp)
|
||||
mread(nhfp->fd, (genericptr_t) msg_buf, n);
|
||||
}
|
||||
msg_buf[n] = '\0';
|
||||
g.regions[i]->leave_msg = (const char *) msg_buf;
|
||||
} else
|
||||
g.regions[i]->leave_msg = (const char *)0;
|
||||
msg_buf = (char *) 0;
|
||||
r->leave_msg = (const char *) msg_buf;
|
||||
|
||||
if (nhfp->structlevel)
|
||||
mread(nhfp->fd, (genericptr_t) &g.regions[i]->ttl, sizeof (long));
|
||||
mread(nhfp->fd, (genericptr_t) &r->ttl, sizeof (long));
|
||||
/* check for expired region */
|
||||
if (g.regions[i]->ttl >= 0L)
|
||||
g.regions[i]->ttl = ((g.regions[i]->ttl > tmstamp)
|
||||
? g.regions[i]->ttl - tmstamp
|
||||
: 0L);
|
||||
if (r->ttl >= 0L)
|
||||
r->ttl = (r->ttl > tmstamp) ? r->ttl - tmstamp : 0L;
|
||||
if (nhfp->structlevel) {
|
||||
mread(nhfp->fd, (genericptr_t) &g.regions[i]->expire_f,
|
||||
sizeof (short));
|
||||
mread(nhfp->fd, (genericptr_t) &g.regions[i]->can_enter_f,
|
||||
sizeof (short));
|
||||
mread(nhfp->fd, (genericptr_t) &g.regions[i]->enter_f,
|
||||
sizeof (short));
|
||||
mread(nhfp->fd, (genericptr_t) &g.regions[i]->can_leave_f,
|
||||
sizeof (short));
|
||||
mread(nhfp->fd, (genericptr_t) &g.regions[i]->leave_f,
|
||||
sizeof (short));
|
||||
mread(nhfp->fd, (genericptr_t) &g.regions[i]->inside_f,
|
||||
sizeof (short));
|
||||
mread(nhfp->fd, (genericptr_t) &g.regions[i]->player_flags,
|
||||
sizeof (unsigned int));
|
||||
mread(nhfp->fd, (genericptr_t) &r->expire_f, sizeof (short));
|
||||
mread(nhfp->fd, (genericptr_t) &r->can_enter_f, sizeof (short));
|
||||
mread(nhfp->fd, (genericptr_t) &r->enter_f, sizeof (short));
|
||||
mread(nhfp->fd, (genericptr_t) &r->can_leave_f, sizeof (short));
|
||||
mread(nhfp->fd, (genericptr_t) &r->leave_f, sizeof (short));
|
||||
mread(nhfp->fd, (genericptr_t) &r->inside_f, sizeof (short));
|
||||
mread(nhfp->fd, (genericptr_t) &r->player_flags,
|
||||
sizeof (unsigned));
|
||||
}
|
||||
if (ghostly) { /* settings pertained to old player */
|
||||
clear_hero_inside(g.regions[i]);
|
||||
clear_heros_fault(g.regions[i]);
|
||||
clear_hero_inside(r);
|
||||
clear_heros_fault(r);
|
||||
}
|
||||
if (nhfp->structlevel)
|
||||
mread(nhfp->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);
|
||||
mread(nhfp->fd, (genericptr_t) &r->n_monst, sizeof (short));
|
||||
if (r->n_monst > 0)
|
||||
r->monsters = (unsigned *) alloc(r->n_monst * sizeof (unsigned));
|
||||
else
|
||||
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++) {
|
||||
r->monsters = (unsigned *) 0;
|
||||
r->max_monst = r->n_monst;
|
||||
for (j = 0; j < r->n_monst; j++) {
|
||||
if (nhfp->structlevel)
|
||||
mread(nhfp->fd, (genericptr_t) &g.regions[i]->monsters[j],
|
||||
sizeof (unsigned));
|
||||
mread(nhfp->fd, (genericptr_t) &r->monsters[j],
|
||||
sizeof (unsigned));
|
||||
}
|
||||
if (nhfp->structlevel) {
|
||||
mread(nhfp->fd, (genericptr_t) &g.regions[i]->visible,
|
||||
sizeof (boolean));
|
||||
mread(nhfp->fd, (genericptr_t) &g.regions[i]->glyph, sizeof (int));
|
||||
mread(nhfp->fd, (genericptr_t) &g.regions[i]->arg,
|
||||
sizeof (anything));
|
||||
mread(nhfp->fd, (genericptr_t) &r->visible, sizeof (boolean));
|
||||
mread(nhfp->fd, (genericptr_t) &r->glyph, sizeof (int));
|
||||
mread(nhfp->fd, (genericptr_t) &r->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 = 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]);
|
||||
for (i = g.n_regions - 1; i >= 0; i--) {
|
||||
r = g.regions[i];
|
||||
if (r->ttl == 0L)
|
||||
remove_region(r);
|
||||
else if (ghostly && r->n_monst > 0)
|
||||
reset_region_mids(r);
|
||||
}
|
||||
}
|
||||
|
||||
DISABLE_WARNING_FORMAT_NONLITERAL
|
||||
@@ -860,7 +830,7 @@ RESTORE_WARNING_FORMAT_NONLITERAL
|
||||
|
||||
/* update monster IDs for region being loaded from bones; `ghostly' implied */
|
||||
static void
|
||||
reset_region_mids(NhRegion* reg)
|
||||
reset_region_mids(NhRegion *reg)
|
||||
{
|
||||
int i = 0, n = reg->n_monst;
|
||||
unsigned *mid_list = reg->monsters;
|
||||
@@ -889,7 +859,7 @@ reset_region_mids(NhRegion* reg)
|
||||
NhRegion *
|
||||
create_msg_region(
|
||||
xchar x, xchar y, xchar w, xchar h,
|
||||
const char* msg_enter, const char* msg_leave)
|
||||
const char *msg_enter, const char *msg_leave)
|
||||
{
|
||||
NhRect tmprect;
|
||||
NhRegion *reg = create_region((NhRect *) 0, 0);
|
||||
|
||||
@@ -32,12 +32,12 @@
|
||||
#ifdef minit
|
||||
#undef minit
|
||||
#endif
|
||||
void newread(NHFILE *, int, int, genericptr_t, unsigned int);
|
||||
void newread(NHFILE *, int, int, genericptr_t, unsigned);
|
||||
void bufon(int);
|
||||
void bufoff(int);
|
||||
void bflush(int);
|
||||
void bwrite(int, genericptr_t, unsigned int);
|
||||
void mread(int, genericptr_t, unsigned int);
|
||||
void bwrite(int, const genericptr_t, unsigned);
|
||||
void mread(int, genericptr_t, unsigned);
|
||||
void minit(void);
|
||||
void bclose(int);
|
||||
#endif /* TRACE_BUFFERING */
|
||||
@@ -48,7 +48,7 @@ static int getidx(int, int);
|
||||
#endif
|
||||
|
||||
struct restore_info restoreinfo = {
|
||||
"externalcomp", 0,
|
||||
"externalcomp", 0,
|
||||
};
|
||||
|
||||
#define MAXFD 5
|
||||
@@ -197,7 +197,7 @@ bflush(int fd)
|
||||
}
|
||||
|
||||
void
|
||||
bwrite(register int fd, register genericptr_t loc, register unsigned num)
|
||||
bwrite(int fd, const genericptr_t loc, unsigned num)
|
||||
{
|
||||
boolean failed;
|
||||
int idx = getidx(fd, NOFLG);
|
||||
@@ -237,9 +237,9 @@ minit(void)
|
||||
}
|
||||
|
||||
void
|
||||
mread(register int fd, register genericptr_t buf, register unsigned int len)
|
||||
mread(int fd, genericptr_t buf, unsigned len)
|
||||
{
|
||||
register int rlen;
|
||||
int rlen;
|
||||
#if defined(BSD) || defined(ULTRIX)
|
||||
#define readLenType int
|
||||
#else /* e.g. SYSV, __TURBOC__ */
|
||||
@@ -269,9 +269,12 @@ static FILE *tracefile;
|
||||
#define TFILE "trace-buffering.log"
|
||||
|
||||
#define TRACE(xx) \
|
||||
tracefile = fopen(TFILE, "a"); \
|
||||
(void) fprintf(tracefile, "%s from %s:%d (%d)\n", __FUNCTION__, fncname, linenum, xx); \
|
||||
fclose(tracefile);
|
||||
do { \
|
||||
tracefile = fopen(TFILE, "a"); \
|
||||
(void) fprintf(tracefile, "%s from %s:%d (%d)\n", \
|
||||
__FUNCTION__, fncname, linenum, xx); \
|
||||
fclose(tracefile); \
|
||||
} while (0)
|
||||
|
||||
void
|
||||
Bufon(int fd, const char *fncname, int linenum)
|
||||
@@ -296,9 +299,9 @@ Bflush(int fd, const char* fncname, int linenum)
|
||||
|
||||
void
|
||||
Bwrite(
|
||||
register int fd,
|
||||
register genericptr_t loc,
|
||||
register unsigned num,
|
||||
int fd,
|
||||
const genericptr_t loc,
|
||||
unsigned num,
|
||||
const char *fncname,
|
||||
int linenum)
|
||||
{
|
||||
@@ -322,9 +325,9 @@ Minit(const char*fncname, int linenum)
|
||||
|
||||
void
|
||||
Mread(
|
||||
register int fd,
|
||||
register genericptr_t buf,
|
||||
register unsigned int len,
|
||||
int fd,
|
||||
genericptr_t buf,
|
||||
unsigned len,
|
||||
const char *fncname,
|
||||
int linenum)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user