diff --git a/include/decl.h b/include/decl.h index 61f00fe40..9f962a49e 100644 --- a/include/decl.h +++ b/include/decl.h @@ -1114,6 +1114,9 @@ struct instance_globals { int spl_sortmode; /* index into spl_sortchoices[] */ int *spl_orderindx; /* array of g.spl_book[] indices */ + /* teleport.c */ + struct obj *telescroll; /* non-null when teleporting via this scroll */ + /* timeout.c */ /* ordered timer list */ struct fe *timer_base; /* "active" */ @@ -1121,6 +1124,9 @@ struct instance_globals { /* topten.c */ winid toptenwin; +#ifdef UPDATE_RECORD_IN_PLACE + long final_fpos; +#endif /* trap.c */ diff --git a/src/decl.c b/src/decl.c index 4eb813ed8..df109b0f4 100644 --- a/src/decl.c +++ b/src/decl.c @@ -635,12 +635,18 @@ const struct instance_globals g_init = { 0, /* spl_sortmode */ NULL, /* spl_orderindx */ + /* teleport.c */ + NULL, /* telescroll */ + /* timeout.c */ UNDEFINED_PTR, /* timer_base */ 1, /* timer_id */ /* topten.c */ WIN_ERR, /* topten */ +#ifdef UPDATE_RECORD_IN_PLACE + UNDEFINED_VALUE, /* final_fpos */ +#endif /* trap.c */ 0, /* force_mintrap */ diff --git a/src/teleport.c b/src/teleport.c index ec3b822c2..23f285ea8 100644 --- a/src/teleport.c +++ b/src/teleport.c @@ -11,9 +11,6 @@ STATIC_DCL void NDECL(vault_tele); STATIC_DCL boolean FDECL(rloc_pos_ok, (int, int, struct monst *)); STATIC_DCL void FDECL(mvault_tele, (struct monst *)); -/* non-null when teleporting via having read this scroll */ -STATIC_VAR struct obj *telescroll = 0; - /* * Is (x,y) a good position of mtmp? If mtmp is NULL, then is (x,y) good * for an object? @@ -345,14 +342,14 @@ boolean allow_drag; been updated for new location instead of right after u_on_newpos() */ if (levl[u.ux][u.uy].typ != levl[u.ux0][u.uy0].typ) switch_terrain(); - if (telescroll) { + if (g.telescroll) { /* when teleporting by scroll, we need to handle discovery now before getting feedback about any objects at our destination since we might land on another such scroll */ if (distu(u.ux0, u.uy0) >= 16 || !couldsee(u.ux0, u.uy0)) - learnscroll(telescroll); + learnscroll(g.telescroll); else - telescroll = 0; /* no discovery by scrolltele()'s caller */ + g.telescroll = 0; /* no discovery by scrolltele()'s caller */ } spoteffects(TRUE); invocation_message(); @@ -486,13 +483,13 @@ struct obj *scroll; result = TRUE; } - telescroll = scroll; + g.telescroll = scroll; (void) safe_teleds(FALSE); - /* teleds() will leave telescroll intact iff random destination + /* teleds() will leave g.telescroll intact iff random destination is far enough away for scroll discovery to be warranted */ - if (telescroll) + if (g.telescroll) result = TRUE; - telescroll = 0; /* reset */ + g.telescroll = 0; /* reset */ return result; } diff --git a/src/topten.c b/src/topten.c index 6ecc062b2..43b449423 100644 --- a/src/topten.c +++ b/src/topten.c @@ -23,9 +23,6 @@ * way to truncate it). The trailing junk is harmless and the code * which reads the scores will ignore it. */ -#ifdef UPDATE_RECORD_IN_PLACE -static long final_fpos; -#endif #define done_stopprint g.program_state.stopprint @@ -232,7 +229,7 @@ struct toptenentry *tt; #ifdef UPDATE_RECORD_IN_PLACE /* note: input below must read the record's terminating newline */ - final_fpos = tt->fpos = ftell(rfile); + g.final_fpos = tt->fpos = ftell(rfile); #endif #define TTFIELDS 13 if (fscanf(rfile, fmt, &tt->ver_major, &tt->ver_minor, &tt->patchlevel, @@ -676,7 +673,7 @@ time_t when; } if (flg) { /* rewrite record file */ #ifdef UPDATE_RECORD_IN_PLACE - (void) fseek(rfile, (t0->fpos >= 0 ? t0->fpos : final_fpos), + (void) fseek(rfile, (t0->fpos >= 0 ? t0->fpos : g.final_fpos), SEEK_SET); #else (void) fclose(rfile); diff --git a/src/vision.c b/src/vision.c index 9b3294fe5..a62a978a2 100644 --- a/src/vision.c +++ b/src/vision.c @@ -23,7 +23,7 @@ * @...X +4 * */ -char circle_data[] = { +const char circle_data[] = { /* 0*/ 1, 1, /* 2*/ 2, 2, 1, /* 5*/ 3, 3, 2, 1, @@ -46,7 +46,7 @@ char circle_data[] = { * These are the starting indexes into the circle_data[] array for a * circle of a given radius. */ -char circle_start[] = { +const char circle_start[] = { /* */ 0, /* circles of radius zero are not used */ /* 1*/ 0, /* 2*/ 2, @@ -496,7 +496,7 @@ int control; char *old_row; /* row pointer for the old array */ char *next_rmin; /* min pointer for the new array */ char *next_rmax; /* max pointer for the new array */ - char *ranges; /* circle ranges -- used for xray & night vision */ + const char *ranges; /* circle ranges -- used for xray & night vision */ int row = 0; /* row counter (outer loop) */ int start, stop; /* inner loop starting/stopping index */ int dx, dy; /* one step from a lit door or lit wall (see below) */ @@ -1602,8 +1602,9 @@ static close2d *close_dy[CLOSE_MAX_BC_DY]; static far2d *far_dy[FAR_MAX_BC_DY]; STATIC_DCL void FDECL(right_side, (int, int, int, int, int, - int, int, char *)); -STATIC_DCL void FDECL(left_side, (int, int, int, int, int, int, int, char *)); + int, int, const char *)); +STATIC_DCL void FDECL(left_side, (int, int, int, int, int, int, int, + const char *)); STATIC_DCL int FDECL(close_shadow, (int, int, int, int)); STATIC_DCL int FDECL(far_shadow, (int, int, int, int)); @@ -1994,7 +1995,7 @@ int cb_row, cb_col; /* close block row and col */ int fb_row, fb_col; /* far block row and col */ int left_mark; /* left mark of previous row */ int right; /* right mark of the previous row */ -char *limits; +const char *limits; { register int i; register char *rowp = NULL; @@ -2285,8 +2286,8 @@ genericptr_t arg; /* * Defines local to Algorithm C. */ -STATIC_DCL void FDECL(right_side, (int, int, int, char *)); -STATIC_DCL void FDECL(left_side, (int, int, int, char *)); +STATIC_DCL void FDECL(right_side, (int, int, int, const char *)); +STATIC_DCL void FDECL(left_side, (int, int, int, const char *)); /* Initialize algorithm C (nothing). */ STATIC_OVL void @@ -2303,7 +2304,7 @@ right_side(row, left, right_mark, limits) int row; /* current row */ int left; /* first (left side) visible spot on prev row */ int right_mark; /* last (right side) visible spot on prev row */ -char *limits; /* points at range limit for current row, or NULL */ +const char *limits; /* points at range limit for current row, or NULL */ { int right; /* right limit of "could see" */ int right_edge; /* right edge of an opening */ @@ -2493,7 +2494,7 @@ char *limits; /* points at range limit for current row, or NULL */ STATIC_OVL void left_side(row, left_mark, right, limits) int row, left_mark, right; -char *limits; +const char *limits; { int left, left_edge, nrow, deeper, result; register int i; @@ -2641,7 +2642,7 @@ genericptr_t arg; int nrow; /* the next row */ int left; /* the left-most visible column */ int right; /* the right-most visible column */ - char *limits; /* range limit for next row */ + const char *limits; /* range limit for next row */ /* Set globals for q?_path(), left_side(), and right_side() to use. */ start_col = scol; @@ -2745,7 +2746,7 @@ genericptr_t arg; } else { register int x; int y, min_x, max_x, max_y, offset; - char *limits; + const char *limits; boolean override_vision; /* vision doesn't pass through water or clouds, detection should