From d9dcf86bd73be95320c43b96bdedbdd063128013 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Janiszewski?= Date: Sun, 7 Aug 2016 09:06:55 +0200 Subject: [PATCH 1/3] Apply RCT2_ADDRESS macro to strings as well --- src/localisation/language.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/localisation/language.cpp b/src/localisation/language.cpp index 50ae63f0bc..cc60bd17fb 100644 --- a/src/localisation/language.cpp +++ b/src/localisation/language.cpp @@ -110,7 +110,9 @@ bool gUseTrueTypeFont = false; LanguagePack *_languageFallback = nullptr; LanguagePack *_languageCurrent = nullptr; -const char **_languageOriginal = (const char**)0x009BF2D4; +// This is `const char**` in reality, but needs to be represented as uint32's +// for 64 bit builds +const uint32 *_languageOriginal = RCT2_ADDRESS(0x009BF2D4, uint32); const utf8 BlackUpArrowString[] = { (utf8)0xC2, (utf8)0x8E, (utf8)0xE2, (utf8)0x96, (utf8)0xB2, (utf8)0x00 }; const utf8 BlackDownArrowString[] = { (utf8)0xC2, (utf8)0x8E, (utf8)0xE2, (utf8)0x96, (utf8)0xBC, (utf8)0x00 }; @@ -146,7 +148,7 @@ const char *language_get_string(rct_string_id id) if (id >= STR_OPENRCT2_BEGIN_STRING_ID) { return openrctString != nullptr ? openrctString : "(undefined string)"; } else { - const char *rct = _languageOriginal[id]; + const char *rct = RCT2_ADDRESS((uintptr_t)_languageOriginal[id], char); const char *str = (id != STR_EMPTY && (openrctString == nullptr || strlen(openrctString)) == 0 ? rct : openrctString); return str == nullptr ? "" : str; } From 9ac3b785307fcbd8d01b73e9478df76df61acf5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Janiszewski?= Date: Sun, 7 Aug 2016 09:38:41 +0200 Subject: [PATCH 2/3] Integrate g_currently_drawn_item --- src/interface/viewport.c | 6 ++++-- src/paint/map_element/map_element.c | 2 +- src/paint/paint.c | 5 +++-- src/paint/paint.h | 6 ++++++ src/paint/sprite/sprite.c | 2 +- src/ride/gentle/circus_show.c | 6 +++--- src/ride/gentle/crooked_house.c | 4 ++-- src/ride/gentle/ferris_wheel.c | 6 +++--- src/ride/gentle/haunted_house.c | 6 +++--- src/ride/gentle/merry_go_round.c | 6 +++--- src/ride/gentle/space_rings.c | 6 +++--- src/ride/thrill/3d_cinema.c | 6 +++--- src/ride/thrill/enterprise.c | 6 +++--- src/ride/thrill/motion_simulator.c | 6 +++--- src/ride/thrill/pirate_ship.c | 6 +++--- src/ride/thrill/swinging_inverter_ship.c | 6 +++--- src/ride/thrill/top_spin.c | 6 +++--- src/ride/thrill/twist.c | 6 +++--- src/ride/water/splash_boats.c | 2 +- 19 files changed, 54 insertions(+), 45 deletions(-) diff --git a/src/interface/viewport.c b/src/interface/viewport.c index 233417ef6d..9ea6dc7680 100644 --- a/src/interface/viewport.c +++ b/src/interface/viewport.c @@ -42,6 +42,8 @@ rct_viewport g_viewport_list[MAX_VIEWPORT_COUNT]; rct_viewport *g_music_tracking_viewport; +rct_map_element *_interaction_element = NULL; + #ifdef NO_RCT2 paint_struct *unk_EE7884; paint_struct *unk_EE7888; @@ -1010,7 +1012,7 @@ static void store_interaction_info(paint_struct *ps) RCT2_GLOBAL(0x009AC149, uint8) = ps->var_29; RCT2_GLOBAL(0x009AC14C, uint32) = ps->map_x; RCT2_GLOBAL(0x009AC14E, uint32) = ps->map_y; - RCT2_GLOBAL(0x009AC150, rct_map_element*) = ps->mapElement; + _interaction_element = ps->mapElement; } } @@ -1389,7 +1391,7 @@ void get_map_coordinates_from_pos(int screenX, int screenY, int flags, sint16 *x if (interactionType != NULL) *interactionType = RCT2_GLOBAL(0x9AC148, uint8_t); if (x != NULL) *x = RCT2_GLOBAL(0x9AC14C, int16_t); if (y != NULL) *y = RCT2_GLOBAL(0x9AC14E, int16_t); - if (mapElement != NULL) *mapElement = RCT2_GLOBAL(0x9AC150, rct_map_element*); + if (mapElement != NULL) *mapElement = _interaction_element; } /** diff --git a/src/paint/map_element/map_element.c b/src/paint/map_element/map_element.c index bc1a508db3..25b8b52f37 100644 --- a/src/paint/map_element/map_element.c +++ b/src/paint/map_element/map_element.c @@ -223,7 +223,7 @@ static void sub_68B3FB(int x, int y) int height = map_element->base_height * 8; uint32_t dword_9DE574 = RCT2_GLOBAL(0x9DE574, uint32_t); - RCT2_GLOBAL(0x9DE578, rct_map_element*) = map_element; + g_currently_drawn_item = map_element; //setup the painting of for example: the underground, signs, rides, scenery, etc. switch (map_element_get_type(map_element)) { diff --git a/src/paint/paint.c b/src/paint/paint.c index 5e6252592a..dcf6b47228 100644 --- a/src/paint/paint.c +++ b/src/paint/paint.c @@ -35,6 +35,7 @@ paint_string_struct *pss2; #ifdef NO_RCT2 paint_struct *g_paint_structs[512]; +void *g_currently_drawn_item; #else #define g_paint_structs (RCT2_ADDRESS(0x00F1A50C, paint_struct*)) #endif @@ -164,7 +165,7 @@ static paint_struct * sub_9819_c(uint32 image_id, rct_xyz16 offset, rct_xyz16 bo ps->var_29 = RCT2_GLOBAL(0x9DE571, uint8); ps->map_x = RCT2_GLOBAL(0x9DE574, uint16); ps->map_y = RCT2_GLOBAL(0x9DE576, uint16); - ps->mapElement = RCT2_GLOBAL(0x9DE578, rct_map_element*); + ps->mapElement = g_currently_drawn_item; return ps; } @@ -288,7 +289,7 @@ paint_struct * sub_98196C( ps->var_29 = RCT2_GLOBAL(0x9DE571, uint8); ps->map_x = RCT2_GLOBAL(0x9DE574, uint16); ps->map_y = RCT2_GLOBAL(0x9DE576, uint16); - ps->mapElement = RCT2_GLOBAL(0x9DE578, rct_map_element*); + ps->mapElement = g_currently_drawn_item; g_ps_F1AD28 = ps; diff --git a/src/paint/paint.h b/src/paint/paint.h index 41a501fc92..cc8b34c333 100644 --- a/src/paint/paint.h +++ b/src/paint/paint.h @@ -24,6 +24,12 @@ typedef struct attached_paint_struct attached_paint_struct; +#ifdef NO_RCT2 +extern void *g_currently_drawn_item; +#else + #define g_currently_drawn_item RCT2_GLOBAL(0x9DE578, void*) +#endif + #pragma pack(push, 1) /* size 0x12 */ struct attached_paint_struct { diff --git a/src/paint/sprite/sprite.c b/src/paint/sprite/sprite.c index 7fda2fdf15..8dbb8b1d4c 100644 --- a/src/paint/sprite/sprite.c +++ b/src/paint/sprite/sprite.c @@ -57,7 +57,7 @@ void sprite_paint_setup(const uint16 eax, const uint16 ecx) { image_direction += spr->unknown.sprite_direction; image_direction &= 0x1F; - RCT2_GLOBAL(0x9DE578, uint32) = (uint32)spr; + g_currently_drawn_item = spr; RCT2_GLOBAL(0x9DE568, sint16) = spr->unknown.x; gPaintInteractionType = VIEWPORT_INTERACTION_ITEM_SPRITE; diff --git a/src/ride/gentle/circus_show.c b/src/ride/gentle/circus_show.c index 36f05b7a3b..19a9649d1b 100644 --- a/src/ride/gentle/circus_show.c +++ b/src/ride/gentle/circus_show.c @@ -25,7 +25,7 @@ */ static void paint_circus_show_tent(uint8 rideIndex, uint8 direction, sint8 al, sint8 cl, uint16 height) { - rct_map_element * savedMapElement = RCT2_GLOBAL(0x009DE578, rct_map_element*); + rct_map_element * savedMapElement = g_currently_drawn_item; rct_ride * ride = get_ride(rideIndex); rct_ride_entry * ride_type = get_ride_entry(ride->subtype); @@ -33,7 +33,7 @@ static void paint_circus_show_tent(uint8 rideIndex, uint8 direction, sint8 al, s if (ride->lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK && ride->vehicles[0] != SPRITE_INDEX_NULL) { gPaintInteractionType = VIEWPORT_INTERACTION_ITEM_SPRITE; - RCT2_GLOBAL(0x009DE578, rct_vehicle*) = GET_VEHICLE(ride->vehicles[0]); + g_currently_drawn_item = GET_VEHICLE(ride->vehicles[0]); } uint32 imageColourFlags = RCT2_GLOBAL(0x00F441A0, uint32); @@ -44,7 +44,7 @@ static void paint_circus_show_tent(uint8 rideIndex, uint8 direction, sint8 al, s uint32 imageId = (ride_type->vehicles[0].base_image_id + direction) | imageColourFlags; sub_98197C(imageId, al, cl, 24, 24, 47, height + 3, al + 16, cl + 16, height + 3, get_current_rotation()); - RCT2_GLOBAL(0x009DE578, rct_map_element*) = savedMapElement; + g_currently_drawn_item = savedMapElement; gPaintInteractionType = VIEWPORT_INTERACTION_ITEM_RIDE; } /** diff --git a/src/ride/gentle/crooked_house.c b/src/ride/gentle/crooked_house.c index f2a01fb2e8..983acbdb8d 100644 --- a/src/ride/gentle/crooked_house.c +++ b/src/ride/gentle/crooked_house.c @@ -48,7 +48,7 @@ static void sub_88ABA4(uint8 direction, uint8 x_offset, uint8 y_offset, uint32 s //return; // push dword_9DE578 - rct_map_element *original_map_element = RCT2_GLOBAL(0x9DE578, rct_map_element*); + rct_map_element *original_map_element = g_currently_drawn_item; // push edx RCT2_GLOBAL(0x14281B0, uint32) = segment; RCT2_GLOBAL(0x14281B4, uint32) = direction; @@ -63,7 +63,7 @@ static void sub_88ABA4(uint8 direction, uint8 x_offset, uint8 y_offset, uint32 s if (ride->vehicles[0] != (uint16)-1) { rct_sprite *sprite = get_sprite(ride->vehicles[0]); gPaintInteractionType = VIEWPORT_INTERACTION_ITEM_SPRITE; - RCT2_GLOBAL(0x9DE578, rct_sprite *) = sprite; + g_currently_drawn_item = sprite; } } diff --git a/src/ride/gentle/ferris_wheel.c b/src/ride/gentle/ferris_wheel.c index cd7781e490..b80ebde274 100644 --- a/src/ride/gentle/ferris_wheel.c +++ b/src/ride/gentle/ferris_wheel.c @@ -58,7 +58,7 @@ static void paint_ferris_wheel_structure(uint8 rideIndex, uint8 direction, sint8 { uint32 imageId, baseImageId; - rct_map_element * savedMapElement = RCT2_GLOBAL(0x009DE578, rct_map_element*); + rct_map_element * savedMapElement = g_currently_drawn_item; rct_ride * ride = get_ride(rideIndex); rct_ride_entry * rideType = get_ride_entry(ride->subtype); @@ -76,7 +76,7 @@ static void paint_ferris_wheel_structure(uint8 rideIndex, uint8 direction, sint8 vehicle = GET_VEHICLE(ride->vehicles[0]); gPaintInteractionType = VIEWPORT_INTERACTION_ITEM_SPRITE; - RCT2_GLOBAL(0x009DE578, rct_vehicle*) = vehicle; + g_currently_drawn_item = vehicle; } uint32 imageOffset = 0; @@ -120,7 +120,7 @@ static void paint_ferris_wheel_structure(uint8 rideIndex, uint8 direction, sint8 imageId = (22150 + (direction & 1) * 2 + 1) | RCT2_GLOBAL(0x00F44198, uint32); sub_98199C(imageId, xOffset, yOffset, boundBox.length_x, boundBox.length_y, 127, height, boundBox.offset_x, boundBox.offset_y, height, get_current_rotation()); - RCT2_GLOBAL(0x009DE578, rct_map_element*) = savedMapElement; + g_currently_drawn_item = savedMapElement; gPaintInteractionType = VIEWPORT_INTERACTION_ITEM_RIDE; } diff --git a/src/ride/gentle/haunted_house.c b/src/ride/gentle/haunted_house.c index b96e47f02a..5e51d6e683 100644 --- a/src/ride/gentle/haunted_house.c +++ b/src/ride/gentle/haunted_house.c @@ -44,7 +44,7 @@ static haunted_house_bound_box haunted_house_data[] = { */ static void paint_haunted_house_structure(uint8 rideIndex, uint8 direction, sint8 xOffset, sint8 yOffset, uint8 part, uint16 height) { - rct_map_element * savedMapElement = RCT2_GLOBAL(0x009DE578, rct_map_element*); + rct_map_element * savedMapElement = g_currently_drawn_item; uint8 frameNum = 0; @@ -57,7 +57,7 @@ static void paint_haunted_house_structure(uint8 rideIndex, uint8 direction, sint && ride->vehicles[0] != SPRITE_INDEX_NULL) { gPaintInteractionType = VIEWPORT_INTERACTION_ITEM_SPRITE; rct_vehicle * vehicle = GET_VEHICLE(ride->vehicles[0]); - RCT2_GLOBAL(0x009DE578, rct_vehicle*) = vehicle; + g_currently_drawn_item = vehicle; frameNum = vehicle->vehicle_sprite_type; } @@ -77,7 +77,7 @@ static void paint_haunted_house_structure(uint8 rideIndex, uint8 direction, sint sub_98199C(imageId, xOffset, yOffset, boundBox.length_x, boundBox.length_y, 127, height, boundBox.offset_x, boundBox.offset_y, height, get_current_rotation()); } - RCT2_GLOBAL(0x009DE578, rct_map_element*) = savedMapElement; + g_currently_drawn_item = savedMapElement; gPaintInteractionType = VIEWPORT_INTERACTION_ITEM_RIDE; } diff --git a/src/ride/gentle/merry_go_round.c b/src/ride/gentle/merry_go_round.c index 947f876875..44995444cd 100644 --- a/src/ride/gentle/merry_go_round.c +++ b/src/ride/gentle/merry_go_round.c @@ -35,7 +35,7 @@ static const uint16 merry_go_round_breakdown_vibration[] = { */ static void paint_merry_go_round_structure(uint8 rideIndex, uint8 direction, sint8 xOffset, sint8 yOffset, uint16 height) { - rct_map_element * savedMapElement = RCT2_GLOBAL(0x009DE578, rct_map_element*); + rct_map_element * savedMapElement = g_currently_drawn_item; height += 7; rct_ride * ride = get_ride(rideIndex); @@ -48,7 +48,7 @@ static void paint_merry_go_round_structure(uint8 rideIndex, uint8 direction, sin && ride->vehicles[0] != SPRITE_INDEX_NULL) { gPaintInteractionType = VIEWPORT_INTERACTION_ITEM_SPRITE; vehicle = GET_VEHICLE(ride->vehicles[0]); - RCT2_GLOBAL(0x009DE578, rct_vehicle*) = vehicle; + g_currently_drawn_item = vehicle; if (ride->lifecycle_flags & (RIDE_LIFECYCLE_BREAKDOWN_PENDING | RIDE_LIFECYCLE_BROKEN_DOWN) && ride->breakdown_reason_pending == BREAKDOWN_CONTROL_FAILURE @@ -96,7 +96,7 @@ static void paint_merry_go_round_structure(uint8 rideIndex, uint8 direction, sin } } - RCT2_GLOBAL(0x009DE578, rct_map_element*) = savedMapElement; + g_currently_drawn_item = savedMapElement; gPaintInteractionType = VIEWPORT_INTERACTION_ITEM_RIDE; } diff --git a/src/ride/gentle/space_rings.c b/src/ride/gentle/space_rings.c index 0f4c063b1c..bdb2c29aa8 100644 --- a/src/ride/gentle/space_rings.c +++ b/src/ride/gentle/space_rings.c @@ -39,7 +39,7 @@ static const uint32 space_rings_fence_sprites[] = { /** rct2: 0x00768A3B */ static void paint_space_rings_structure(rct_ride * ride, uint8 direction, uint32 segment, int height) { - rct_map_element * savedMapElement = RCT2_GLOBAL(0x009DE578, rct_map_element*); + rct_map_element * savedMapElement = g_currently_drawn_item; uint32 vehicleIndex = (segment - direction) & 0x3; @@ -55,7 +55,7 @@ static void paint_space_rings_structure(rct_ride * ride, uint8 direction, uint3 && ride->vehicles[0] != SPRITE_INDEX_NULL) { gPaintInteractionType = VIEWPORT_INTERACTION_ITEM_SPRITE; vehicle = GET_VEHICLE(ride->vehicles[vehicleIndex]); - RCT2_GLOBAL(0x009DE578, rct_vehicle*) = vehicle; + g_currently_drawn_item = vehicle; frameNum += (sint8) vehicle->vehicle_sprite_type * 4; } @@ -79,7 +79,7 @@ static void paint_space_rings_structure(rct_ride * ride, uint8 direction, uint3 } } - RCT2_GLOBAL(0x009DE578, rct_map_element*) = savedMapElement; + g_currently_drawn_item = savedMapElement; gPaintInteractionType = VIEWPORT_INTERACTION_ITEM_RIDE; } diff --git a/src/ride/thrill/3d_cinema.c b/src/ride/thrill/3d_cinema.c index d764db3809..d76e31b3e9 100644 --- a/src/ride/thrill/3d_cinema.c +++ b/src/ride/thrill/3d_cinema.c @@ -25,7 +25,7 @@ */ static void paint_3d_cinema_structure(uint8 rideIndex, uint8 direction, sint8 xOffset, sint8 yOffset, uint16 height) { - rct_map_element * savedMapElement = RCT2_GLOBAL(0x009DE578, rct_map_element*); + rct_map_element * savedMapElement = g_currently_drawn_item; rct_ride * ride = get_ride(rideIndex); rct_ride_entry * ride_type = get_ride_entry(ride->subtype); @@ -33,7 +33,7 @@ static void paint_3d_cinema_structure(uint8 rideIndex, uint8 direction, sint8 xO if (ride->lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK && ride->vehicles[0] != SPRITE_INDEX_NULL) { gPaintInteractionType = VIEWPORT_INTERACTION_ITEM_SPRITE; - RCT2_GLOBAL(0x009DE578, rct_vehicle*) = GET_VEHICLE(ride->vehicles[0]); + g_currently_drawn_item = GET_VEHICLE(ride->vehicles[0]); } uint32 imageColourFlags = RCT2_GLOBAL(0x00F441A0, uint32); @@ -44,7 +44,7 @@ static void paint_3d_cinema_structure(uint8 rideIndex, uint8 direction, sint8 xO uint32 imageId = (ride_type->vehicles[0].base_image_id + direction) | imageColourFlags; sub_98197C(imageId, xOffset, yOffset, 24, 24, 47, height + 3, xOffset + 16, yOffset + 16, height + 3, get_current_rotation()); - RCT2_GLOBAL(0x009DE578, rct_map_element*) = savedMapElement; + g_currently_drawn_item = savedMapElement; gPaintInteractionType = VIEWPORT_INTERACTION_ITEM_RIDE; } diff --git a/src/ride/thrill/enterprise.c b/src/ride/thrill/enterprise.c index 5f32d7a2d7..ab6142f83c 100644 --- a/src/ride/thrill/enterprise.c +++ b/src/ride/thrill/enterprise.c @@ -26,7 +26,7 @@ static void paint_enterprise_structure(rct_ride * ride, sint8 xOffset, sint8 yOf { height += 7; - rct_map_element * savedMapElement = RCT2_GLOBAL(0x009DE578, rct_map_element*); + rct_map_element * savedMapElement = g_currently_drawn_item; rct_ride_entry * rideType = get_ride_entry(ride->subtype); rct_vehicle * vehicle = NULL; @@ -36,7 +36,7 @@ static void paint_enterprise_structure(rct_ride * ride, sint8 xOffset, sint8 yOf && ride->vehicles[0] != SPRITE_INDEX_NULL) { gPaintInteractionType = VIEWPORT_INTERACTION_ITEM_SPRITE; vehicle = GET_VEHICLE(ride->vehicles[0]); - RCT2_GLOBAL(0x009DE578, rct_vehicle*) = vehicle; + g_currently_drawn_item = vehicle; } uint32 imageOffset = (get_current_rotation() + map_element_get_direction(mapElement)) % 4; @@ -70,7 +70,7 @@ static void paint_enterprise_structure(rct_ride * ride, sint8 xOffset, sint8 yOf } } - RCT2_GLOBAL(0x009DE578, rct_map_element*) = savedMapElement; + g_currently_drawn_item = savedMapElement; gPaintInteractionType = VIEWPORT_INTERACTION_ITEM_RIDE; } diff --git a/src/ride/thrill/motion_simulator.c b/src/ride/thrill/motion_simulator.c index 3423b59672..433270fc1f 100644 --- a/src/ride/thrill/motion_simulator.c +++ b/src/ride/thrill/motion_simulator.c @@ -40,7 +40,7 @@ static void paint_motionsimulator_vehicle(sint8 offsetX, sint8 offsetY, uint8 di rct_ride *ride = get_ride(mapElement->properties.track.ride_index); rct_ride_entry *rideEntry = get_ride_entry_by_ride(ride); - rct_map_element * savedMapElement = RCT2_GLOBAL(0x009DE578, rct_map_element*); + rct_map_element * savedMapElement = g_currently_drawn_item; rct_vehicle *vehicle = NULL; if (ride->lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK) { @@ -48,7 +48,7 @@ static void paint_motionsimulator_vehicle(sint8 offsetX, sint8 offsetY, uint8 di if (spriteIndex != SPRITE_INDEX_NULL) { vehicle = GET_VEHICLE(spriteIndex); RCT2_GLOBAL(RCT2_ADDRESS_PAINT_SETUP_CURRENT_TYPE, uint8) = 2; - RCT2_GLOBAL(0x009DE578, rct_vehicle*) = vehicle; + g_currently_drawn_item = vehicle; } } @@ -119,7 +119,7 @@ static void paint_motionsimulator_vehicle(sint8 offsetX, sint8 offsetY, uint8 di break; } - RCT2_GLOBAL(0x009DE578, rct_map_element*) = savedMapElement; + g_currently_drawn_item = savedMapElement; gPaintInteractionType = VIEWPORT_INTERACTION_ITEM_RIDE; } diff --git a/src/ride/thrill/pirate_ship.c b/src/ride/thrill/pirate_ship.c index 524b6b94b8..31d94c7d72 100644 --- a/src/ride/thrill/pirate_ship.c +++ b/src/ride/thrill/pirate_ship.c @@ -70,7 +70,7 @@ static void paint_pirate_ship_structure(rct_ride * ride, uint8 direction, sint8 { uint32 imageId, baseImageId; - rct_map_element * savedMapElement = RCT2_GLOBAL(0x009DE578, rct_map_element*); + rct_map_element * savedMapElement = g_currently_drawn_item; rct_ride_entry * rideType = get_ride_entry(ride->subtype); rct_vehicle * vehicle = NULL; @@ -85,7 +85,7 @@ static void paint_pirate_ship_structure(rct_ride * ride, uint8 direction, sint8 vehicle = GET_VEHICLE(ride->vehicles[0]); gPaintInteractionType = VIEWPORT_INTERACTION_ITEM_SPRITE; - RCT2_GLOBAL(0x009DE578, rct_vehicle*) = vehicle; + g_currently_drawn_item = vehicle; } baseImageId = rideType->vehicles[0].base_image_id + pirate_ship_base_sprite_offset[direction]; @@ -153,7 +153,7 @@ static void paint_pirate_ship_structure(rct_ride * ride, uint8 direction, sint8 imageId = pirate_ship_frame_sprites[(direction & 1)][1] | RCT2_GLOBAL(0x00F44198, uint32); sub_98199C(imageId, xOffset, yOffset, bounds.length_x, bounds.length_y, 80, height, bounds.offset_x, bounds.offset_y, height, get_current_rotation()); - RCT2_GLOBAL(0x009DE578, rct_map_element*) = savedMapElement; + g_currently_drawn_item = savedMapElement; gPaintInteractionType = VIEWPORT_INTERACTION_ITEM_RIDE; } diff --git a/src/ride/thrill/swinging_inverter_ship.c b/src/ride/thrill/swinging_inverter_ship.c index 74f6d7444d..78fb09dd3a 100644 --- a/src/ride/thrill/swinging_inverter_ship.c +++ b/src/ride/thrill/swinging_inverter_ship.c @@ -62,7 +62,7 @@ static const uint32 swinging_inverter_ship_frame_sprites[] = { static void paint_swinging_inverter_ship_structure(rct_ride * ride, uint8 direction, sint8 axisOffset, uint16 height) { - rct_map_element * savedMapElement = RCT2_GLOBAL(0x009DE578, rct_map_element*); + rct_map_element * savedMapElement = g_currently_drawn_item; rct_ride_entry * rideType = get_ride_entry(ride->subtype); rct_vehicle * vehicle = NULL; @@ -75,7 +75,7 @@ static void paint_swinging_inverter_ship_structure(rct_ride * ride, uint8 direct vehicle = GET_VEHICLE(ride->vehicles[0]); gPaintInteractionType = VIEWPORT_INTERACTION_ITEM_SPRITE; - RCT2_GLOBAL(0x009DE578, rct_vehicle*) = vehicle; + g_currently_drawn_item = vehicle; } uint32 vehicleImageId = rideType->vehicles[0].base_image_id + swinging_inverter_ship_base_sprite_offset[direction]; @@ -112,7 +112,7 @@ static void paint_swinging_inverter_ship_structure(rct_ride * ride, uint8 direct sub_98199C(vehicleImageId, xOffset, yOffset, boundBox.length_x, boundBox.length_y, 127, height, boundBox.offset_x, boundBox.offset_y, height, get_current_rotation()); } - RCT2_GLOBAL(0x009DE578, rct_map_element*) = savedMapElement; + g_currently_drawn_item = savedMapElement; gPaintInteractionType = VIEWPORT_INTERACTION_ITEM_RIDE; } diff --git a/src/ride/thrill/top_spin.c b/src/ride/thrill/top_spin.c index 121757671b..e28f0ad3bd 100644 --- a/src/ride/thrill/top_spin.c +++ b/src/ride/thrill/top_spin.c @@ -47,7 +47,7 @@ static void top_spin_paint_vehicle(sint8 al, sint8 cl, uint8 rideIndex, uint8 di uint16 boundBoxOffsetX, boundBoxOffsetY, boundBoxOffsetZ; // As we will be drawing a vehicle we need to backup the mapElement that // is assigned to the drawings. - rct_map_element* curMapElement = RCT2_GLOBAL(0x009DE578, rct_map_element*); + rct_map_element* curMapElement = g_currently_drawn_item; height += 3; @@ -63,7 +63,7 @@ static void top_spin_paint_vehicle(sint8 al, sint8 cl, uint8 rideIndex, uint8 di vehicle = GET_VEHICLE(ride->vehicles[0]); gPaintInteractionType = VIEWPORT_INTERACTION_ITEM_SPRITE; - RCT2_GLOBAL(0x009DE578, rct_vehicle*) = vehicle; + g_currently_drawn_item = vehicle; armRotation = vehicle->vehicle_sprite_type; seatRotation = vehicle->bank_rotation; @@ -247,7 +247,7 @@ static void top_spin_paint_vehicle(sint8 al, sint8 cl, uint8 rideIndex, uint8 di sub_98199C(image_id, al, cl, lengthX, lengthY, 90, height, boundBoxOffsetX, boundBoxOffsetY, boundBoxOffsetZ, rotation); - RCT2_GLOBAL(0x009DE578, rct_map_element*) = curMapElement; + g_currently_drawn_item = curMapElement; gPaintInteractionType = VIEWPORT_INTERACTION_ITEM_RIDE; } diff --git a/src/ride/thrill/twist.c b/src/ride/thrill/twist.c index eaa8006123..7013f3956c 100644 --- a/src/ride/thrill/twist.c +++ b/src/ride/thrill/twist.c @@ -24,7 +24,7 @@ /** rct2: 0x0076E5C9 */ static void paint_twist_structure(rct_ride * ride, uint8 direction, sint8 xOffset, sint8 yOffset, uint16 height) { - rct_map_element * savedMapElement = RCT2_GLOBAL(0x009DE578, rct_map_element*); + rct_map_element * savedMapElement = g_currently_drawn_item; rct_ride_entry * rideType = get_ride_entry(ride->subtype); rct_vehicle * vehicle = NULL; @@ -37,7 +37,7 @@ static void paint_twist_structure(rct_ride * ride, uint8 direction, sint8 xOffse vehicle = GET_VEHICLE(ride->vehicles[0]); gPaintInteractionType = VIEWPORT_INTERACTION_ITEM_SPRITE; - RCT2_GLOBAL(0x009DE578, rct_vehicle*) = vehicle; + g_currently_drawn_item = vehicle; } uint32 frameNum = (direction * 88) % 216; @@ -72,7 +72,7 @@ static void paint_twist_structure(rct_ride * ride, uint8 direction, sint8 xOffse } } - RCT2_GLOBAL(0x009DE578, rct_map_element*) = savedMapElement; + g_currently_drawn_item = savedMapElement; gPaintInteractionType = VIEWPORT_INTERACTION_ITEM_RIDE; } diff --git a/src/ride/water/splash_boats.c b/src/ride/water/splash_boats.c index 260c96d05d..d5134f118a 100644 --- a/src/ride/water/splash_boats.c +++ b/src/ride/water/splash_boats.c @@ -32,7 +32,7 @@ void vehicle_visual_splash_boats_or_water_coaster(int x, int imageDirection, int } else { vehicle = GET_VEHICLE(vehicle->next_vehicle_on_ride); } - RCT2_GLOBAL(0x009DE578, rct_vehicle*) = vehicle; + g_currently_drawn_item = vehicle; imageDirection = ((get_current_rotation() * 8) + vehicle->sprite_direction) & 0x1F; RCT2_GLOBAL(0x9DE568, sint16) = vehicle->x; RCT2_GLOBAL(0x9DE56C, sint16) = vehicle->y; From fa68d31dbf3e77aa63f634a70763d2da1568c565 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Janiszewski?= Date: Sun, 7 Aug 2016 11:23:03 +0200 Subject: [PATCH 3/3] Remove RCT2_GLOBAL macro from stack buffer --- src/world/park.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/world/park.c b/src/world/park.c index c99609d781..c8ce1d8ee3 100644 --- a/src/world/park.c +++ b/src/world/park.c @@ -898,9 +898,9 @@ void game_command_set_park_name(int *eax, int *ebx, int *ecx, int *edx, int *esi nameChunkOffset = 2; nameChunkOffset *= 12; nameChunkOffset = min(nameChunkOffset, countof(newName) - 12); - RCT2_GLOBAL(newName + nameChunkOffset + 0, uint32) = *edx; - RCT2_GLOBAL(newName + nameChunkOffset + 4, uint32) = *ebp; - RCT2_GLOBAL(newName + nameChunkOffset + 8, uint32) = *edi; + memcpy(newName + nameChunkOffset + 0, edx, 4); + memcpy(newName + nameChunkOffset + 4, ebp, 4); + memcpy(newName + nameChunkOffset + 8, edi, 4); //} if (nameChunkIndex != 0) {