diff --git a/src/drawing/scrolling_text.c b/src/drawing/scrolling_text.c index 6ca785bc53..12de3e4efc 100644 --- a/src/drawing/scrolling_text.c +++ b/src/drawing/scrolling_text.c @@ -89,10 +89,13 @@ static int scrolling_text_get_matching_or_oldest(rct_string_id stringId, uint16 } // If exact match return the matching index + uint32 stringArgs0, stringArgs1; + memcpy(&stringArgs0, gCommonFormatArgs + 0, sizeof(uint32)); + memcpy(&stringArgs1, gCommonFormatArgs + 4, sizeof(uint32)); if ( scrollText->string_id == stringId && - scrollText->string_args_0 == get_format_arg(0, uint32) && - scrollText->string_args_1 == get_format_arg(4, uint32) && + scrollText->string_args_0 == stringArgs0 && + scrollText->string_args_1 == stringArgs1 && scrollText->position == scroll && scrollText->mode == scrollingMode ) { @@ -142,10 +145,14 @@ int scrolling_text_setup(rct_string_id stringId, uint16 scroll, uint16 scrolling if (scrollIndex >= 0x606) return scrollIndex; // Setup scrolling text + uint32 stringArgs0, stringArgs1; + memcpy(&stringArgs0, gCommonFormatArgs + 0, sizeof(uint32)); + memcpy(&stringArgs1, gCommonFormatArgs + 4, sizeof(uint32)); + rct_draw_scroll_text* scrollText = &gDrawScrollTextList[scrollIndex]; scrollText->string_id = stringId; - scrollText->string_args_0 = get_format_arg(0, uint32); - scrollText->string_args_1 = get_format_arg(4, uint32); + scrollText->string_args_0 = stringArgs0; + scrollText->string_args_1 = stringArgs1; scrollText->position = scroll; scrollText->mode = scrollingMode; scrollText->id = RCT2_GLOBAL(RCT2_ADDRESS_DRAW_SCROLL_NEXT_ID, uint32); @@ -168,7 +175,7 @@ int scrolling_text_setup(rct_string_id stringId, uint16 scroll, uint16 scrolling void scrolling_text_set_bitmap_for_sprite(utf8 *text, int scroll, uint8 *bitmap, sint16 *scrollPositionOffsets) { - uint8 characterColour = scrolling_text_get_colour(get_format_arg(7, uint8)); + uint8 characterColour = scrolling_text_get_colour(gCommonFormatArgs[7]); utf8 *ch = text; while (true) { @@ -244,7 +251,7 @@ void scrolling_text_set_bitmap_for_ttf(utf8 *text, int scroll, uint8 *bitmap, si *dstCh = 0; if (colour == 0) { - colour = scrolling_text_get_colour(get_format_arg(7, uint8)); + colour = scrolling_text_get_colour(gCommonFormatArgs[7]); } else { colour = RCT2_GLOBAL(0x009FF048, uint8*)[(colour - FORMAT_COLOUR_CODE_START) * 4]; } diff --git a/src/localisation/localisation.h b/src/localisation/localisation.h index 44dc730b41..b9731c10b2 100644 --- a/src/localisation/localisation.h +++ b/src/localisation/localisation.h @@ -63,7 +63,6 @@ extern const char *real_names[1024]; extern utf8 *gUserStrings; extern uint8 gCommonFormatArgs[80]; -#define get_format_arg(offset, type) (*((type*)&gCommonFormatArgs[(offset)])) #define set_format_arg(offset, type, value) ((*((type*)&gCommonFormatArgs[(offset)])) = (value)) #endif diff --git a/src/object_list.c b/src/object_list.c index 7414c5a8e1..a7975cf8c3 100644 --- a/src/object_list.c +++ b/src/object_list.c @@ -495,15 +495,14 @@ void object_create_identifier_name(char* string_buffer, const rct_object_entry* */ void set_load_objects_fail_reason() { - rct_string_id expansionNameId; - - rct_object_entry* object = get_format_arg(0, rct_object_entry*); + rct_object_entry *object; + memcpy(&object, gCommonFormatArgs, sizeof(rct_object_entry*)); + int expansion = (object->flags & 0xFF) >> 4; - - if (expansion == 0 - || expansion == 8 - || RCT2_GLOBAL(RCT2_ADDRESS_EXPANSION_FLAGS, uint16) & (1 << expansion)){ - + if (expansion == 0 || + expansion == 8 || + RCT2_GLOBAL(RCT2_ADDRESS_EXPANSION_FLAGS, uint16) & (1 << expansion) + ) { char* string_buffer = RCT2_ADDRESS(0x9BC677, char); format_string(string_buffer, STR_MISSING_OBJECT_DATA_ID, 0); @@ -514,6 +513,7 @@ void set_load_objects_fail_reason() return; } + rct_string_id expansionNameId; switch(expansion) { case 1: // Wacky Worlds expansionNameId = STR_OBJECT_FILTER_WW; diff --git a/src/ride/vehicle.c b/src/ride/vehicle.c index d4caa95fb5..e4759044fb 100644 --- a/src/ride/vehicle.c +++ b/src/ride/vehicle.c @@ -2526,8 +2526,7 @@ static void vehicle_check_if_missing(rct_vehicle* vehicle) { ride->lifecycle_flags |= RIDE_LIFECYCLE_11; - get_format_arg(0, rct_string_id) - = RCT2_ADDRESS(0x0097C98E, rct_string_id)[ride->type * 4] + 6; + set_format_arg(0, rct_string_id, RCT2_ADDRESS(0x0097C98E, rct_string_id)[ride->type * 4] + 6); uint8 vehicleIndex = 0; for (; vehicleIndex < ride->num_vehicles; ++vehicleIndex) @@ -2537,8 +2536,7 @@ static void vehicle_check_if_missing(rct_vehicle* vehicle) { set_format_arg(2, uint16, vehicleIndex); set_format_arg(4, rct_string_id, ride->name); set_format_arg(6, uint32, ride->name_arguments); - get_format_arg(10, rct_string_id) = - RCT2_ADDRESS(0x0097C98E, rct_string_id)[ride->type * 4 + 2]; + set_format_arg(10, rct_string_id, RCT2_ADDRESS(0x0097C98E, rct_string_id)[ride->type * 4 + 2]); news_item_add_to_queue(NEWS_ITEM_RIDE, 2218, vehicle->ride); } diff --git a/src/windows/editor_object_selection.c b/src/windows/editor_object_selection.c index 6496fa9409..11849af02e 100644 --- a/src/windows/editor_object_selection.c +++ b/src/windows/editor_object_selection.c @@ -1070,8 +1070,7 @@ static void window_editor_object_selection_tooltip(rct_window* w, int widgetInde case WIDX_TAB_9: case WIDX_TAB_10: case WIDX_TAB_11: - get_format_arg(0, rct_string_id) = - STR_OBJECT_SELECTION_RIDE_VEHICLES_ATTRACTIONS + (widgetIndex - WIDX_TAB_1); + set_format_arg(0, rct_string_id, STR_OBJECT_SELECTION_RIDE_VEHICLES_ATTRACTIONS + (widgetIndex - WIDX_TAB_1)); break; default: set_format_arg(0, rct_string_id, STR_LIST); diff --git a/src/windows/game_bottom_toolbar.c b/src/windows/game_bottom_toolbar.c index 37bb362ac7..7dfdba5d5a 100644 --- a/src/windows/game_bottom_toolbar.c +++ b/src/windows/game_bottom_toolbar.c @@ -378,10 +378,11 @@ static void window_game_bottom_toolbar_draw_left_panel(rct_drawpixelinfo *dpi, r // Draw money if (!(gParkFlags & PARK_FLAGS_NO_MONEY)) { - set_format_arg(0, int, DECRYPT_MONEY(gCashEncrypted)); + money32 cash = DECRYPT_MONEY(gCashEncrypted); + set_format_arg(0, money32, cash); gfx_draw_string_centred( dpi, - (get_format_arg(0, int) < 0 ? 1391 : 1390), + (cash < 0 ? 1391 : 1390), x, y - 3, (gHoverWidget.window_classification == WC_BOTTOM_TOOLBAR && gHoverWidget.widget_index == WIDX_MONEY ? COLOUR_WHITE : w->colours[0] & 0x7F), gCommonFormatArgs diff --git a/src/windows/ride.c b/src/windows/ride.c index fbb183644f..dceae1f467 100644 --- a/src/windows/ride.c +++ b/src/windows/ride.c @@ -3237,8 +3237,11 @@ static void window_ride_operating_invalidate(rct_window *w) } if (format != 0) { - if (ride->type == RIDE_TYPE_TWIST) - get_format_arg(18, uint16) *= 3; + if (ride->type == RIDE_TYPE_TWIST) { + uint16 arg; + memcpy(&arg, gCommonFormatArgs + 18, sizeof(uint16)); + set_format_arg(18, uint16, arg * 3); + } window_ride_operating_widgets[WIDX_MODE_TWEAK_LABEL].type = WWT_24; window_ride_operating_widgets[WIDX_MODE_TWEAK_LABEL].image = caption; diff --git a/src/windows/ride_list.c b/src/windows/ride_list.c index 71bac37203..5cef92ba66 100644 --- a/src/windows/ride_list.c +++ b/src/windows/ride_list.c @@ -601,16 +601,26 @@ static void window_ride_list_scrollpaint(rct_window *w, rct_drawpixelinfo *dpi, case INFORMATION_TYPE_QUEUE_LENGTH: set_format_arg(2, uint16, ride_get_total_queue_length(ride)); formatSecondary = STR_QUEUE_EMPTY; - if (get_format_arg(2, uint16) == 1) - formatSecondary = STR_QUEUE_ONE_PERSON; - else if (get_format_arg(2, uint16) > 1) - formatSecondary = STR_QUEUE_PEOPLE; + { + uint16 arg; + memcpy(&arg, gCommonFormatArgs + 2, sizeof(uint16)); + + if (arg == 1) + formatSecondary = STR_QUEUE_ONE_PERSON; + else if (arg > 1) + formatSecondary = STR_QUEUE_PEOPLE; + } break; case INFORMATION_TYPE_QUEUE_TIME: set_format_arg(2, uint16, ride_get_max_queue_time(ride)); formatSecondary = STR_QUEUE_TIME_LABEL; - if (get_format_arg(2, uint16) > 1) - formatSecondary = STR_QUEUE_TIME_PLURAL_LABEL; + { + uint16 arg; + memcpy(&arg, gCommonFormatArgs + 2, sizeof(uint16)); + + if (arg > 1) + formatSecondary = STR_QUEUE_TIME_PLURAL_LABEL; + } break; case INFORMATION_TYPE_RELIABILITY: // edx = RCT2_GLOBAL(0x009ACFA4 + (ride->var_001 * 4), uint32);