From c5d947c1aae96fcd90953a91c37518a05240b248 Mon Sep 17 00:00:00 2001 From: Marijn van der Werf Date: Sat, 10 Sep 2016 23:38:45 +0200 Subject: [PATCH 1/2] Partially integrate surface variables --- src/paint/map_element/map_element.c | 4 +++- src/paint/map_element/map_element.h | 4 ++++ src/paint/map_element/path.c | 8 ++++---- src/paint/map_element/surface.c | 4 ++-- src/paint/supports.c | 2 +- src/ride/gentle/mini_golf.c | 4 ++-- 6 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/paint/map_element/map_element.c b/src/paint/map_element/map_element.c index 4a5e72ae8e..a1c49c0ff7 100644 --- a/src/paint/map_element/map_element.c +++ b/src/paint/map_element/map_element.c @@ -34,6 +34,8 @@ #include "../supports.h" #ifdef NO_RCT2 +bool gDidPassSurface; +rct_map_element * gSurfaceElement; tunnel_entry gLeftTunnels[65]; uint8 gLeftTunnelCount; tunnel_entry gRightTunnels[65]; @@ -228,7 +230,7 @@ static void sub_68B3FB(int x, int y) RCT2_GLOBAL(0x9DE568, sint16) = x; RCT2_GLOBAL(0x9DE56C, sint16) = y; - RCT2_GLOBAL(0x9DE57C, uint16) = 0; + gDidPassSurface = false; do { int direction = (map_element->type + rotation) & MAP_ELEMENT_DIRECTION_MASK; int height = map_element->base_height * 8; diff --git a/src/paint/map_element/map_element.h b/src/paint/map_element/map_element.h index 655a460d6a..6a4f96ccc6 100644 --- a/src/paint/map_element/map_element.h +++ b/src/paint/map_element/map_element.h @@ -68,12 +68,16 @@ typedef struct tunnel_entry { } tunnel_entry; #ifdef NO_RCT2 +extern bool gDidPassSurface; +extern rct_map_element * gSurfaceElement; extern tunnel_entry gLeftTunnels[65]; extern uint8 gLeftTunnelCount; extern tunnel_entry gRightTunnels[65]; extern uint8 gRightTunnelCount; extern uint8 gVerticalTunnelHeight; #else +#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) diff --git a/src/paint/map_element/path.c b/src/paint/map_element/path.c index 12a2ffb5b5..0b3ea9b5fc 100644 --- a/src/paint/map_element/path.c +++ b/src/paint/map_element/path.c @@ -801,14 +801,14 @@ void loc_6A37C9(rct_map_element * mapElement, int height, rct_footpath_entry * f imageId += 51; } - if (!RCT2_GLOBAL(0x9DE57C, bool)) { + if (!gDidPassSurface) { boundBoxOffset.x = 3; boundBoxOffset.y = 3; boundBoxSize.x = 26; boundBoxSize.y = 26; } - if (!hasFences || !RCT2_GLOBAL(0x9DE57C, bool)) { + if (!hasFences || !gDidPassSurface) { sub_98197C(imageId | imageFlags, 0, 0, boundBoxSize.x, boundBoxSize.y, 0, height, boundBoxOffset.x, boundBoxOffset.y, height + 1, get_current_rotation()); } else { uint32 image_id; @@ -915,14 +915,14 @@ void loc_6A3B57(rct_map_element* mapElement, sint16 height, rct_footpath_entry* } // Below Surface - if (!RCT2_GLOBAL(0x9DE57C, bool)) { + if (!gDidPassSurface) { boundBoxOffset.x = 3; boundBoxOffset.y = 3; boundBoxSize.x = 26; boundBoxSize.y = 26; } - if (!hasFences || !RCT2_GLOBAL(0x9DE57C, bool)) { + if (!hasFences || !gDidPassSurface) { sub_98197C(imageId | imageFlags, 0, 0, boundBoxSize.x, boundBoxSize.y, 0, height, boundBoxOffset.x, boundBoxOffset.y, height + 1, get_current_rotation()); } else { diff --git a/src/paint/map_element/surface.c b/src/paint/map_element/surface.c index e481ade7f9..75a7c0ff1a 100644 --- a/src/paint/map_element/surface.c +++ b/src/paint/map_element/surface.c @@ -964,8 +964,8 @@ void surface_paint(uint8 direction, uint16 height, rct_map_element * mapElement) { rct_drawpixelinfo * dpi = unk_140E9A8; gPaintInteractionType = VIEWPORT_INTERACTION_ITEM_TERRAIN; - RCT2_GLOBAL(0x9DE57C, uint16) |= 1; // Probably a boolean indicating 'above surface' - RCT2_GLOBAL(0x9E3250, rct_map_element *) = mapElement; + gDidPassSurface = true; + gSurfaceElement = mapElement; uint16 zoomLevel = dpi->zoom_level; diff --git a/src/paint/supports.c b/src/paint/supports.c index f00f2ec2f6..e632ab0b3e 100644 --- a/src/paint/supports.c +++ b/src/paint/supports.c @@ -449,7 +449,7 @@ bool wooden_a_supports_paint_setup(int supportType, int special, int height, uin unk_supports_desc_bound_box bBox = byte_97B23C[special].bounding_box; - if (byte_97B23C[special].var_6 == 0 || RCT2_GLOBAL(0x009DEA58, uint32) == 0) { + if (byte_97B23C[special].var_6 == 0 || RCT2_GLOBAL(0x009DEA58, paint_struct*) == NULL) { sub_98197C(imageId, 0, 0, bBox.length.x, bBox.length.y, bBox.length.z, z, bBox.offset.x, bBox.offset.y, bBox.offset.z + z, rotation); hasSupports = true; } else { diff --git a/src/ride/gentle/mini_golf.c b/src/ride/gentle/mini_golf.c index 5b3c6e0fb9..521108c793 100644 --- a/src/ride/gentle/mini_golf.c +++ b/src/ride/gentle/mini_golf.c @@ -444,12 +444,12 @@ static paint_struct * mini_golf_paint_util_7c( static bool mini_golf_paint_util_should_draw_fence(rct_map_element * mapElement) { - if (!RCT2_GLOBAL(0x9DE57C, bool)) { + if (!gDidPassSurface) { // Should be above ground (have passed surface rendering) return false; } - rct_map_element * surfaceElement = RCT2_GLOBAL(0x9E3250, rct_map_element *); + rct_map_element * surfaceElement = gSurfaceElement; if (surfaceElement->base_height != mapElement->base_height) { return true; } From e490070a11029980fefd065bcbb65ffb82903335 Mon Sep 17 00:00:00 2001 From: Marijn van der Werf Date: Sat, 10 Sep 2016 23:39:42 +0200 Subject: [PATCH 2/2] Partially integrate 0x009DEA58 --- src/paint/supports.c | 8 ++++++-- src/paint/supports.h | 6 ++++++ src/ride/coaster/virginia_reel.c | 8 ++++---- src/ride/thrill/go_karts.c | 6 +++--- src/ride/water/river_rapids.c | 12 ++++++------ 5 files changed, 25 insertions(+), 15 deletions(-) diff --git a/src/paint/supports.c b/src/paint/supports.c index e632ab0b3e..298dc96b51 100644 --- a/src/paint/supports.c +++ b/src/paint/supports.c @@ -321,6 +321,10 @@ const uint16 word_97B3C4[] = { 0, }; +#ifdef NO_RCT2 +paint_struct * gWoodenSupportsPrependTo; +#endif + /** * Adds paint structs for wooden supports. * rct2: 0x006629BC @@ -449,14 +453,14 @@ bool wooden_a_supports_paint_setup(int supportType, int special, int height, uin unk_supports_desc_bound_box bBox = byte_97B23C[special].bounding_box; - if (byte_97B23C[special].var_6 == 0 || RCT2_GLOBAL(0x009DEA58, paint_struct*) == NULL) { + if (byte_97B23C[special].var_6 == 0 || gWoodenSupportsPrependTo == NULL) { sub_98197C(imageId, 0, 0, bBox.length.x, bBox.length.y, bBox.length.z, z, bBox.offset.x, bBox.offset.y, bBox.offset.z + z, rotation); hasSupports = true; } else { hasSupports = true; paint_struct* ps = sub_98198C(imageId, 0, 0, bBox.length.x, bBox.length.y, bBox.length.z, z, bBox.offset.x, bBox.offset.y, bBox.offset.z + z, rotation); if (ps != NULL) { - paint_struct* edi = RCT2_GLOBAL(0x009DEA58, paint_struct*); + paint_struct* edi = gWoodenSupportsPrependTo; edi->var_20 = ps; } } diff --git a/src/paint/supports.h b/src/paint/supports.h index 2acd39bdc1..583e33302d 100644 --- a/src/paint/supports.h +++ b/src/paint/supports.h @@ -20,6 +20,12 @@ #include "../common.h" #include "../world/footpath.h" +#ifdef NO_RCT2 +extern paint_struct * gWoodenSupportsPrependTo; +#else +#define gWoodenSupportsPrependTo RCT2_GLOBAL(0x009DEA58, paint_struct *) +#endif + bool wooden_a_supports_paint_setup(int supportType, int special, int height, uint32 imageColourFlags, bool* underground); bool wooden_b_supports_paint_setup(int supportType, int special, int height, uint32 imageColourFlags); bool metal_a_supports_paint_setup(int supportType, int segment, int special, int height, uint32 imageColourFlags); diff --git a/src/ride/coaster/virginia_reel.c b/src/ride/coaster/virginia_reel.c index d1b1f8f04f..1d6866e46a 100644 --- a/src/ride/coaster/virginia_reel.c +++ b/src/ride/coaster/virginia_reel.c @@ -271,7 +271,7 @@ static void paint_virginia_reel_track_25_deg_up(uint8 rideIndex, uint8 trackSequ } if (direction == 1 || direction == 2) { - RCT2_GLOBAL(0x009DEA58, paint_struct*) = ps; + gWoodenSupportsPrependTo = ps; } switch (direction) { @@ -316,14 +316,14 @@ static void paint_virginia_reel_track_flat_to_25_deg_up(uint8 rideIndex, uint8 t break; case 1: ps = sub_98197C(imageId, 0, 0, 27, 32, 2, height, 2, 0, height, get_current_rotation()); - RCT2_GLOBAL(0x009DEA58, paint_struct*) = ps; + gWoodenSupportsPrependTo = ps; wooden_a_supports_paint_setup(1, 2, height, RCT2_GLOBAL(0x00F4419C, uint32), NULL); paint_util_push_tunnel_right(height, TUNNEL_8); break; case 2: ps = sub_98197C(imageId, 0, 0, 32, 27, 2, height, 0, 2, height, get_current_rotation()); - RCT2_GLOBAL(0x009DEA58, paint_struct*) = ps; + gWoodenSupportsPrependTo = ps; wooden_a_supports_paint_setup(0, 3, height, RCT2_GLOBAL(0x00F4419C, uint32), NULL); paint_util_push_tunnel_left(height, TUNNEL_8); @@ -360,7 +360,7 @@ static void paint_virginia_reel_track_25_deg_up_to_flat(uint8 rideIndex, uint8 t } if (direction == 1 || direction == 2) { - RCT2_GLOBAL(0x009DEA58, paint_struct*) = ps; + gWoodenSupportsPrependTo = ps; } switch (direction) { diff --git a/src/ride/thrill/go_karts.c b/src/ride/thrill/go_karts.c index 550a03965c..b51ffd9cbf 100644 --- a/src/ride/thrill/go_karts.c +++ b/src/ride/thrill/go_karts.c @@ -173,7 +173,7 @@ static void paint_go_karts_track_25_deg_up(uint8 rideIndex, uint8 trackSequence, } if (direction == 1 || direction == 2) { - RCT2_GLOBAL(0x009DEA58, paint_struct*) = ps; + gWoodenSupportsPrependTo = ps; } imageId = go_karts_track_pieces_25_deg_up[direction][1] | RCT2_GLOBAL(0x00F44198, uint32); @@ -220,7 +220,7 @@ static void paint_go_karts_track_flat_to_25_deg_up(uint8 rideIndex, uint8 trackS } if (direction == 1 || direction == 2) { - RCT2_GLOBAL(0x009DEA58, paint_struct*) = ps; + gWoodenSupportsPrependTo = ps; } imageId = go_karts_track_pieces_flat_to_25_deg_up[direction][1] | RCT2_GLOBAL(0x00F44198, uint32); @@ -267,7 +267,7 @@ static void paint_go_karts_track_25_deg_up_to_flat(uint8 rideIndex, uint8 trackS } if (direction == 1 || direction == 2) { - RCT2_GLOBAL(0x009DEA58, paint_struct*) = ps; + gWoodenSupportsPrependTo = ps; } imageId = go_karts_track_pieces_25_deg_up_to_flat[direction][1] | RCT2_GLOBAL(0x00F44198, uint32); diff --git a/src/ride/water/river_rapids.c b/src/ride/water/river_rapids.c index cea3086eab..b0c6e4cd6e 100644 --- a/src/ride/water/river_rapids.c +++ b/src/ride/water/river_rapids.c @@ -310,7 +310,7 @@ static void paint_river_rapids_track_25_deg(uint8 direction, int height, const u case 1: imageId = sprites[direction][0] | RCT2_GLOBAL(0x00F44198, uint32); ps = sub_98197C(imageId, 0, 0, 24, 32, 4, height, 4, 0, height, get_current_rotation()); - RCT2_GLOBAL(0x009DEA58, paint_struct*) = ps; + gWoodenSupportsPrependTo = ps; imageId = sprites[direction][1] | RCT2_GLOBAL(0x00F44198, uint32); sub_98197C(imageId, 0, 0, 1, 32, 34, height, 27, 0, height + 16, get_current_rotation()); @@ -322,7 +322,7 @@ static void paint_river_rapids_track_25_deg(uint8 direction, int height, const u case 2: imageId = sprites[direction][0] | RCT2_GLOBAL(0x00F44198, uint32); ps = sub_98197C(imageId, 0, 0, 32, 24, 4, height, 0, 4, height, get_current_rotation()); - RCT2_GLOBAL(0x009DEA58, paint_struct*) = ps; + gWoodenSupportsPrependTo = ps; imageId = sprites[direction][1] | RCT2_GLOBAL(0x00F44198, uint32); sub_98197C(imageId, 0, 0, 32, 1, 34, height, 0, 27, height + 16, get_current_rotation()); @@ -367,7 +367,7 @@ static void paint_river_rapids_track_25_deg_to_flat_a(uint8 direction, int heigh case 1: imageId = sprites[direction][0] | RCT2_GLOBAL(0x00F44198, uint32); ps = sub_98197C(imageId, 0, 0, 24, 32, 4, height, 4, 0, height, get_current_rotation()); - RCT2_GLOBAL(0x009DEA58, paint_struct*) = ps; + gWoodenSupportsPrependTo = ps; imageId = sprites[direction][1] | RCT2_GLOBAL(0x00F44198, uint32); sub_98197C(imageId, 0, 0, 1, 32, 18, height, 27, 0, height + 16, get_current_rotation()); @@ -379,7 +379,7 @@ static void paint_river_rapids_track_25_deg_to_flat_a(uint8 direction, int heigh case 2: imageId = sprites[direction][0] | RCT2_GLOBAL(0x00F44198, uint32); ps = sub_98197C(imageId, 0, 0, 32, 24, 4, height, 0, 4, height, get_current_rotation()); - RCT2_GLOBAL(0x009DEA58, paint_struct*) = ps; + gWoodenSupportsPrependTo = ps; imageId = sprites[direction][1] | RCT2_GLOBAL(0x00F44198, uint32); sub_98197C(imageId, 0, 0, 32, 1, 18, height, 0, 27, height + 16, get_current_rotation()); @@ -424,7 +424,7 @@ static void paint_river_rapids_track_25_deg_to_flat_b(uint8 direction, int heigh case 1: imageId = sprites[direction][0] | RCT2_GLOBAL(0x00F44198, uint32); ps = sub_98197C(imageId, 0, 0, 24, 32, 11, height, 4, 0, height, get_current_rotation()); - RCT2_GLOBAL(0x009DEA58, paint_struct*) = ps; + gWoodenSupportsPrependTo = ps; imageId = sprites[direction][1] | RCT2_GLOBAL(0x00F44198, uint32); sub_98197C(imageId, 0, 0, 1, 32, 26, height, 27, 0, height + 16, get_current_rotation()); @@ -436,7 +436,7 @@ static void paint_river_rapids_track_25_deg_to_flat_b(uint8 direction, int heigh case 2: imageId = sprites[direction][0] | RCT2_GLOBAL(0x00F44198, uint32); ps = sub_98197C(imageId, 0, 0, 32, 24, 11, height, 0, 4, height, get_current_rotation()); - RCT2_GLOBAL(0x009DEA58, paint_struct*) = ps; + gWoodenSupportsPrependTo = ps; imageId = sprites[direction][1] | RCT2_GLOBAL(0x00F44198, uint32); sub_98197C(imageId, 0, 0, 32, 1, 26, height, 0, 27, height + 16, get_current_rotation());