Remove tunnel globals

This commit is contained in:
Ted John 2017-09-01 12:54:38 +01:00
parent eb7b1e7b7e
commit 6c1d1c43e5
4 changed files with 43 additions and 49 deletions

View File

@ -37,11 +37,6 @@ uint8 g141E9DB;
uint16 gUnk141E9DC;
bool gDidPassSurface;
rct_map_element * gSurfaceElement;
tunnel_entry gLeftTunnels[TUNNEL_MAX_COUNT];
uint8 gLeftTunnelCount;
tunnel_entry gRightTunnels[TUNNEL_MAX_COUNT];
uint8 gRightTunnelCount;
uint8 gVerticalTunnelHeight;
#endif
#ifdef __TESTPAINT__
@ -149,12 +144,12 @@ static void sub_68B3FB(sint32 x, sint32 y)
{
rct_drawpixelinfo *dpi = gPaintSession.Unk140E9A8;
gLeftTunnelCount = 0;
gRightTunnelCount = 0;
gLeftTunnels[0] = (tunnel_entry){0xFF, 0xFF};
gRightTunnels[0] = (tunnel_entry){0xFF, 0xFF};
gPaintSession.LeftTunnelCount = 0;
gPaintSession.RightTunnelCount = 0;
gPaintSession.LeftTunnels[0] = (tunnel_entry){0xFF, 0xFF};
gPaintSession.RightTunnels[0] = (tunnel_entry){0xFF, 0xFF};
gVerticalTunnelHeight = 0xFF;
gPaintSession.VerticalTunnelHeight = 0xFF;
#ifndef NO_RCT2
RCT2_GLOBAL(0x009DE56A, uint16) = x;
@ -336,19 +331,19 @@ static void sub_68B3FB(sint32 x, sint32 y)
void paint_util_push_tunnel_left(uint16 height, uint8 type)
{
gLeftTunnels[gLeftTunnelCount] = (tunnel_entry){.height = (height / 16), .type = type};
if (gLeftTunnelCount < TUNNEL_MAX_COUNT - 1) {
gLeftTunnels[gLeftTunnelCount + 1] = (tunnel_entry) {0xFF, 0xFF};
gLeftTunnelCount++;
gPaintSession.LeftTunnels[gPaintSession.LeftTunnelCount] = (tunnel_entry){.height = (height / 16), .type = type};
if (gPaintSession.LeftTunnelCount < TUNNEL_MAX_COUNT - 1) {
gPaintSession.LeftTunnels[gPaintSession.LeftTunnelCount + 1] = (tunnel_entry) {0xFF, 0xFF};
gPaintSession.LeftTunnelCount++;
}
}
void paint_util_push_tunnel_right(uint16 height, uint8 type)
{
gRightTunnels[gRightTunnelCount] = (tunnel_entry){.height = (height / 16), .type = type};
if (gRightTunnelCount < TUNNEL_MAX_COUNT - 1) {
gRightTunnels[gRightTunnelCount + 1] = (tunnel_entry) {0xFF, 0xFF};
gRightTunnelCount++;
gPaintSession.RightTunnels[gPaintSession.RightTunnelCount] = (tunnel_entry){.height = (height / 16), .type = type};
if (gPaintSession.RightTunnelCount < TUNNEL_MAX_COUNT - 1) {
gPaintSession.RightTunnels[gPaintSession.RightTunnelCount + 1] = (tunnel_entry) {0xFF, 0xFF};
gPaintSession.RightTunnelCount++;
}
}
@ -357,7 +352,7 @@ void paint_util_set_vertical_tunnel(uint16 height)
#ifdef __TESTPAINT__
testPaintVerticalTunnelHeight = height;
#endif
gVerticalTunnelHeight = height / 16;
gPaintSession.VerticalTunnelHeight = height / 16;
}
void paint_util_set_general_support_height(sint16 height, uint8 slope)

View File

@ -69,39 +69,22 @@ enum
TUNNEL_15 = 0x0F,
};
typedef struct tunnel_entry {
uint8 height;
uint8 type;
} tunnel_entry;
enum
{
G141E9DB_FLAG_1 = 1,
G141E9DB_FLAG_2 = 2,
};
#define TUNNEL_MAX_COUNT 65
#ifdef NO_RCT2
extern uint8 g141E9DB;
extern uint16 gUnk141E9DC;
extern bool gDidPassSurface;
extern rct_map_element * gSurfaceElement;
extern tunnel_entry gLeftTunnels[TUNNEL_MAX_COUNT];
extern uint8 gLeftTunnelCount;
extern tunnel_entry gRightTunnels[TUNNEL_MAX_COUNT];
extern uint8 gRightTunnelCount;
extern uint8 gVerticalTunnelHeight;
#else
#define g141E9DB RCT2_GLOBAL(0x0141E9DB, uint8)
#define gUnk141E9DC RCT2_GLOBAL(0x0141E9DC, uint16)
#define gDidPassSurface RCT2_GLOBAL(0x009DE57C, bool)
#define gSurfaceElement RCT2_GLOBAL(0x009E3250, rct_map_element *)
#define gLeftTunnels RCT2_ADDRESS(0x009E3138, tunnel_entry)
#define gLeftTunnelCount RCT2_GLOBAL(0x0141F56A, uint8)
#define gRightTunnels RCT2_ADDRESS(0x009E30B6, tunnel_entry)
#define gRightTunnelCount RCT2_GLOBAL(0x0141F56B, uint8)
#define gVerticalTunnelHeight RCT2_GLOBAL(0x009E323C, uint8)
#endif
#ifdef __TESTPAINT__

View File

@ -577,7 +577,7 @@ static void viewport_surface_draw_land_side_bottom(enum edge_t edge, uint8 heigh
tunnelBounds.x = 32;
tunnelTopBoundBoxOffset.y = 31;
tunnelArray = gLeftTunnels;
tunnelArray = gPaintSession.LeftTunnels;
break;
case EDGE_BOTTOMRIGHT:
@ -592,7 +592,7 @@ static void viewport_surface_draw_land_side_bottom(enum edge_t edge, uint8 heigh
tunnelBounds.y = 32;
tunnelTopBoundBoxOffset.x = 31;
tunnelArray = gRightTunnels;
tunnelArray = gPaintSession.RightTunnels;
break;
default:
@ -839,7 +839,7 @@ static void viewport_surface_draw_water_side_bottom(enum edge_t edge, uint8 heig
tunnelBounds.x = 32;
tunnelTopBoundBoxOffset.y = 31;
tunnelArray = gLeftTunnels;
tunnelArray = gPaintSession.LeftTunnels;
break;
case EDGE_BOTTOMRIGHT:
@ -854,7 +854,7 @@ static void viewport_surface_draw_water_side_bottom(enum edge_t edge, uint8 heig
tunnelBounds.y = 32;
tunnelTopBoundBoxOffset.x = 31;
tunnelArray = gRightTunnels;
tunnelArray = gPaintSession.RightTunnels;
break;
default:
@ -1065,7 +1065,7 @@ void surface_paint(uint8 direction, uint16 height, rct_map_element * mapElement)
bool has_surface = false;
if (gVerticalTunnelHeight * 16 == height) {
if (gPaintSession.VerticalTunnelHeight * 16 == height) {
// Vertical tunnels
sub_98197C(1575, 0, 0, 1, 30, 39, height, -2, 1, height - 40, rotation);
sub_98197C(1576, 0, 0, 30, 1, 0, height, 1, 31, height, rotation);
@ -1344,12 +1344,12 @@ void surface_paint(uint8 direction, uint16 height, rct_map_element * mapElement)
#ifdef __MINGW32__
// The other code crashes mingw 4.8.2, as available on Travis
for (sint32 i = 0; i < TUNNEL_MAX_COUNT; i++) {
backupLeftTunnels[i] = gLeftTunnels[i];
backupRightTunnels[i] = gRightTunnels[i];
backupLeftTunnels[i] = gPaintSession.LeftTunnels[i];
backupRightTunnels[i] = gPaintSession.RightTunnels[i];
}
#else
memcpy(backupLeftTunnels, gLeftTunnels, sizeof(tunnel_entry) * TUNNEL_MAX_COUNT);
memcpy(backupRightTunnels, gRightTunnels, sizeof(tunnel_entry) * TUNNEL_MAX_COUNT);
memcpy(backupLeftTunnels, gPaintSession.LeftTunnels, sizeof(tunnel_entry) * TUNNEL_MAX_COUNT);
memcpy(backupRightTunnels, gPaintSession.RightTunnels, sizeof(tunnel_entry) * TUNNEL_MAX_COUNT);
#endif
viewport_surface_draw_land_side_top(EDGE_TOPLEFT, height / 16, eax / 32, tileDescriptors[0], tileDescriptors[3]);
@ -1361,12 +1361,12 @@ void surface_paint(uint8 direction, uint16 height, rct_map_element * mapElement)
#ifdef __MINGW32__
// The other code crashes mingw 4.8.2, as available on Travis
for (sint32 i = 0; i < TUNNEL_MAX_COUNT; i++) {
gLeftTunnels[i] = backupLeftTunnels[i];
gRightTunnels[i] = backupRightTunnels[i];
gPaintSession.LeftTunnels[i] = backupLeftTunnels[i];
gPaintSession.RightTunnels[i] = backupRightTunnels[i];
}
#else
memcpy(gLeftTunnels, backupLeftTunnels, sizeof(tunnel_entry) * TUNNEL_MAX_COUNT);
memcpy(gRightTunnels, backupRightTunnels, sizeof(tunnel_entry) * TUNNEL_MAX_COUNT);
memcpy(gPaintSession.LeftTunnels, backupLeftTunnels, sizeof(tunnel_entry) * TUNNEL_MAX_COUNT);
memcpy(gPaintSession.RightTunnels, backupRightTunnels, sizeof(tunnel_entry) * TUNNEL_MAX_COUNT);
#endif
}

View File

@ -130,7 +130,13 @@ typedef struct support_height {
uint8 pad;
} support_height;
typedef struct tunnel_entry {
uint8 height;
uint8 type;
} tunnel_entry;
#define MAX_PAINT_QUADRANTS 512
#define TUNNEL_MAX_COUNT 65
typedef struct paint_session
{
@ -153,6 +159,11 @@ typedef struct paint_session
paint_string_struct * LastPSString;
paint_struct * WoodenSupportsPrependTo;
rct_xy16 MapPosition;
tunnel_entry LeftTunnels[TUNNEL_MAX_COUNT];
uint8 LeftTunnelCount;
tunnel_entry RightTunnels[TUNNEL_MAX_COUNT];
uint8 RightTunnelCount;
uint8 VerticalTunnelHeight;
} paint_session;
extern paint_session gPaintSession;
@ -167,6 +178,11 @@ extern paint_session gPaintSession;
#define gSupport RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_PAINT_TILE_MAX_HEIGHT, support_height)
#define gWoodenSupportsPrependTo RCT2_GLOBAL(0x009DEA58, paint_struct *)
#define gPaintMapPosition RCT2_GLOBAL(0x009DE574, rct_xy16)
#define gLeftTunnels RCT2_ADDRESS(0x009E3138, tunnel_entry)
#define gLeftTunnelCount RCT2_GLOBAL(0x0141F56A, uint8)
#define gRightTunnels RCT2_ADDRESS(0x009E30B6, tunnel_entry)
#define gRightTunnelCount RCT2_GLOBAL(0x0141F56B, uint8)
#define gVerticalTunnelHeight RCT2_GLOBAL(0x009E323C, uint8)
#endif
/** rct2: 0x00993CC4 */