From f639fd6054f8fab7a53d64697025ece050e98a8e Mon Sep 17 00:00:00 2001 From: IntelOrca Date: Wed, 3 Sep 2014 23:17:31 +0100 Subject: [PATCH] refactor ride structure --- src/peep.c | 42 +++++++++++++++++++-------------------- src/ride.c | 12 +++++------ src/ride.h | 11 ++++++---- src/window_finances.c | 4 ++-- src/window_new_campaign.c | 10 +++++----- src/window_ride_list.c | 10 +++++----- 6 files changed, 46 insertions(+), 43 deletions(-) diff --git a/src/peep.c b/src/peep.c index 447b7c08d1..da7c594544 100644 --- a/src/peep.c +++ b/src/peep.c @@ -437,20 +437,20 @@ void get_arguments_from_action(rct_peep* peep, uint32 *argument_1, uint32* argum if (RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + ride.type * 8, uint32) & 0x400000){ *argument_1 = STR_IN_RIDE; } - *argument_1 |= (ride.var_04A << 16); - *argument_2 = ride.var_04C; + *argument_1 |= (ride.name << 16); + *argument_2 = ride.name_arguments; break; case PEEP_STATE_BUYING: ride = g_ride_list[peep->current_ride]; - *argument_1 = STR_AT_RIDE | (ride.var_04A << 16); - *argument_2 = ride.var_04C; + *argument_1 = STR_AT_RIDE | (ride.name << 16); + *argument_2 = ride.name_arguments; break; case PEEP_STATE_WALKING: case 0x14: if (peep->var_C5 != 0xFF){ ride = g_ride_list[peep->var_C5]; - *argument_1 = STR_HEADING_FOR | (ride.var_04A << 16); - *argument_2 = ride.var_04C; + *argument_1 = STR_HEADING_FOR | (ride.name << 16); + *argument_2 = ride.name_arguments; } else{ *argument_1 = peep->flags & PEEP_FLAGS_LEAVING_PARK ? STR_LEAVING_PARK : STR_WALKING; @@ -460,8 +460,8 @@ void get_arguments_from_action(rct_peep* peep, uint32 *argument_1, uint32* argum case PEEP_STATE_QUEUING_FRONT: case PEEP_STATE_QUEUING: ride = g_ride_list[peep->current_ride]; - *argument_1 = STR_QUEUING_FOR | (ride.var_04A << 16); - *argument_2 = ride.var_04C; + *argument_1 = STR_QUEUING_FOR | (ride.name << 16); + *argument_2 = ride.name_arguments; break; case PEEP_STATE_SITTING: *argument_1 = STR_SITTING; @@ -470,12 +470,12 @@ void get_arguments_from_action(rct_peep* peep, uint32 *argument_1, uint32* argum case PEEP_STATE_WATCHING: if (peep->current_ride != 0xFF){ ride = g_ride_list[peep->current_ride]; - *argument_1 = STR_WATCHING_RIDE | (ride.var_04A << 16); - *argument_2 = ride.var_04C; + *argument_1 = STR_WATCHING_RIDE | (ride.name << 16); + *argument_2 = ride.name_arguments; if (peep->current_seat & 0x1) - *argument_1 = STR_WATCHING_CONSTRUCTION_OF | (ride.var_04A << 16); + *argument_1 = STR_WATCHING_CONSTRUCTION_OF | (ride.name << 16); else - *argument_1 = STR_WATCHING_RIDE | (ride.var_04A << 16); + *argument_1 = STR_WATCHING_RIDE | (ride.name << 16); } else{ *argument_1 = peep->current_seat & 0x1 ? STR_WATCHING_NEW_RIDE_BEING_CONSTRUCTED : STR_LOOKING_AT_SCENERY; @@ -519,24 +519,24 @@ void get_arguments_from_action(rct_peep* peep, uint32 *argument_1, uint32* argum } else{ ride = g_ride_list[peep->current_ride]; - *argument_1 = STR_RESPONDING_TO_RIDE_BREAKDOWN_CALL | (ride.var_04A << 16); - *argument_2 = ride.var_04C; + *argument_1 = STR_RESPONDING_TO_RIDE_BREAKDOWN_CALL | (ride.name << 16); + *argument_2 = ride.name_arguments; } break; case PEEP_STATE_FIXING: ride = g_ride_list[peep->current_ride]; - *argument_1 = STR_FIXING_RIDE | (ride.var_04A << 16); - *argument_2 = ride.var_04C; + *argument_1 = STR_FIXING_RIDE | (ride.name << 16); + *argument_2 = ride.name_arguments; break; case PEEP_STATE_HEADING_TO_INSPECTION: ride = g_ride_list[peep->current_ride]; - *argument_1 = STR_HEADING_TO_RIDE_FOR_INSPECTION | (ride.var_04A << 16); - *argument_2 = ride.var_04C; + *argument_1 = STR_HEADING_TO_RIDE_FOR_INSPECTION | (ride.name << 16); + *argument_2 = ride.name_arguments; break; case PEEP_STATE_INSPECTING: ride = g_ride_list[peep->current_ride]; - *argument_1 = STR_INSPECTING_RIDE | (ride.var_04A << 16); - *argument_2 = ride.var_04C; + *argument_1 = STR_INSPECTING_RIDE | (ride.name << 16); + *argument_2 = ride.name_arguments; break; } @@ -554,7 +554,7 @@ void get_arguments_from_thought(rct_peep_thought thought, uint32* argument_1, ui if ((RCT2_ADDRESS(0x981DB1, uint16)[thought.type] & 0xFF) & 1){ rct_ride* ride = &g_ride_list[thought.item]; - esi = (int)(&(ride->var_04A)); + esi = (int)(&(ride->name)); } else if ((RCT2_ADDRESS(0x981DB1, uint16)[thought.type] & 0xFF) & 2){ if (thought.item < 0x20){ diff --git a/src/ride.c b/src/ride.c index 43798a15db..af8530288b 100644 --- a/src/ride.c +++ b/src/ride.c @@ -242,16 +242,16 @@ void ride_entrance_exit_connected(rct_ride* ride, int ride_idx) continue; if (entrance != -1 && !ride_entrance_exit_is_reachable(entrance, ride, i)) { // name of ride is parameter of the format string - RCT2_GLOBAL(0x013CE952, uint16) = ride->var_04A; - RCT2_GLOBAL(0x013CE954, uint32) = ride->var_04C; + RCT2_GLOBAL(0x013CE952, uint16) = ride->name; + RCT2_GLOBAL(0x013CE954, uint32) = ride->name_arguments; news_item_add_to_queue(1, STR_ENTRANCE_NOT_CONNECTED, ride_idx); ride->connected_message_throttle = 3; } if (exit != -1 && !ride_entrance_exit_is_reachable(exit, ride, i)) { // name of ride is parameter of the format string - RCT2_GLOBAL(0x013CE952, uint16) = ride->var_04A; - RCT2_GLOBAL(0x013CE954, uint32) = ride->var_04C; + RCT2_GLOBAL(0x013CE952, uint16) = ride->name; + RCT2_GLOBAL(0x013CE954, uint32) = ride->name_arguments; news_item_add_to_queue(1, STR_EXIT_NOT_CONNECTED, ride_idx); ride->connected_message_throttle = 3; } @@ -315,8 +315,8 @@ void ride_shop_connected(rct_ride* ride, int ride_idx) } // name of ride is parameter of the format string - RCT2_GLOBAL(0x013CE952, uint16) = ride->var_04A; - RCT2_GLOBAL(0x013CE954, uint32) = ride->var_04C; + RCT2_GLOBAL(0x013CE952, uint16) = ride->name; + RCT2_GLOBAL(0x013CE954, uint32) = ride->name_arguments; news_item_add_to_queue(1, STR_ENTRANCE_NOT_CONNECTED, ride_idx); ride->connected_message_throttle = 3; diff --git a/src/ride.h b/src/ride.h index 0c452f956d..d454020c92 100644 --- a/src/ride.h +++ b/src/ride.h @@ -49,7 +49,9 @@ typedef struct { uint32 var_008; uint8 var_00C; uint8 var_00D; - uint8 pad_00E[0x1A4]; + uint8 pad_00E[0x5]; + uint8 var_013; + uint8 pad_014[0x19E]; sint8 excitement_multipler; // 0x1B2 sint8 intensity_multipler; // 0x1B3 sint8 nausea_multipler; // 0x1B4 @@ -74,8 +76,8 @@ typedef struct { uint8 pad_046[0x03]; // 0 = closed, 1 = open, 2 = test uint8 status; // 0x049 - uint16 var_04A; - uint32 var_04C; + rct_string_id name; // 0x04A + uint32 name_arguments; // 0x04C probably just for when a ride hasn't been named (e.g. Crooked House 1) uint16 overall_view; // 0x050 00XX = X, XX00 = Y (* 32 + 16) uint16 station_starts[4]; // 0x052 uint8 station_heights[4]; // 0x05A @@ -149,7 +151,8 @@ typedef struct { uint8 var_1CD; uint16 guests_favourite; // 0x1CE uint32 lifecycle_flags; // 0x1D0 - uint8 pad_1D4[0x20]; + uint8 var_1D4; + uint8 pad_1D5[0x1F]; // Example value for wild mouse ride is d5 (before it's been constructed) // I tried searching the IDA file for "1F4" but couldn't find places where // this is written to. diff --git a/src/window_finances.c b/src/window_finances.c index e8500fc84b..56f7072898 100644 --- a/src/window_finances.c +++ b/src/window_finances.c @@ -1250,8 +1250,8 @@ static void window_finances_marketing_paint() case ADVERTISING_CAMPAIGN_RIDE_FREE: case ADVERTISING_CAMPAIGN_RIDE: ride = GET_RIDE(campaignRideIndex[i]); - RCT2_GLOBAL(0x013CE952, uint16) = ride->var_04A; - RCT2_GLOBAL(0x013CE952 + 2, uint32) = ride->var_04C; + RCT2_GLOBAL(0x013CE952, uint16) = ride->name; + RCT2_GLOBAL(0x013CE952 + 2, uint32) = ride->name_arguments; break; case ADVERTISING_CAMPAIGN_FOOD_OR_DRINK_FREE: shopString = campaignRideIndex[i] + 2016; // STR_BALLOONS+ diff --git a/src/window_new_campaign.c b/src/window_new_campaign.c index efe6ad5afd..39ad693d98 100644 --- a/src/window_new_campaign.c +++ b/src/window_new_campaign.c @@ -118,8 +118,8 @@ int ride_name_compare(const void *a, const void *b) rideA = GET_RIDE(*((uint8*)a)); rideB = GET_RIDE(*((uint8*)b)); - format_string(rideAName, rideA->var_04A, &rideA->var_04C); - format_string(rideBName, rideB->var_04A, &rideB->var_04C); + format_string(rideAName, rideA->name, &rideA->name_arguments); + format_string(rideBName, rideB->name, &rideB->name_arguments); return _strcmpi(rideAName, rideBName); } @@ -288,7 +288,7 @@ static void window_new_campaign_mousedown(int widgetIndex, rct_window *w, rct_wi rct_ride *ride = GET_RIDE(window_new_campaign_rides[i]); gDropdownItemsFormat[i] = 1142; - gDropdownItemsArgs[i] = (ride->var_04C << 16) | ride->var_04A; + gDropdownItemsArgs[i] = (ride->name_arguments << 16) | ride->name; numItems++; } @@ -364,8 +364,8 @@ static void window_new_campaign_invalidate() window_new_campaign_widgets[WIDX_RIDE_LABEL].image = STR_MARKETING_RIDE; if (w->campaign.ride_id != SELECTED_RIDE_UNDEFINED) { rct_ride *ride = GET_RIDE(w->campaign.ride_id); - window_new_campaign_widgets[WIDX_RIDE_DROPDOWN].image = ride->var_04A; - RCT2_GLOBAL(0x013CE952, uint32) = ride->var_04C; + window_new_campaign_widgets[WIDX_RIDE_DROPDOWN].image = ride->name; + RCT2_GLOBAL(0x013CE952, uint32) = ride->name_arguments; } break; case ADVERTISING_CAMPAIGN_FOOD_OR_DRINK_FREE: diff --git a/src/window_ride_list.c b/src/window_ride_list.c index 1a876b8457..0298a93c9e 100644 --- a/src/window_ride_list.c +++ b/src/window_ride_list.c @@ -507,7 +507,7 @@ static void window_ride_list_scrollpaint() ride = &g_ride_list[w->list_item_positions[i]]; // Ride name - gfx_draw_string_left_clipped(dpi, format, &ride->var_04A, 0, 0, y - 1, 159); + gfx_draw_string_left_clipped(dpi, format, &ride->name, 0, 0, y - 1, 159); // Ride information formatSecondary = 0; @@ -648,12 +648,12 @@ static void window_ride_list_refresh_list(rct_window *w) int current_list_position = list_index; switch (w->list_information_type) { case INFORMATION_TYPE_STATUS: - RCT2_GLOBAL(0x013CE952, uint32) = ride->var_04C; - RCT2_CALLPROC_X(0x006C2538, ride->var_04A, 0, 0x013CE952, 0, 0, RCT2_ADDRESS_COMMON_STRING_FORMAT_BUFFER, 0); + RCT2_GLOBAL(0x013CE952, uint32) = ride->name_arguments; + RCT2_CALLPROC_X(0x006C2538, ride->name, 0, 0x013CE952, 0, 0, RCT2_ADDRESS_COMMON_STRING_FORMAT_BUFFER, 0); while (--current_list_position >= 0) { otherRide = &g_ride_list[w->list_item_positions[current_list_position]]; - RCT2_GLOBAL(0x013CE952, uint32) = otherRide->var_04C; - RCT2_CALLPROC_X(0x006C2538, otherRide->var_04A, 0, 0x013CE952, 0, 0, 0x0141EF68, 0); + RCT2_GLOBAL(0x013CE952, uint32) = otherRide->name_arguments; + RCT2_CALLPROC_X(0x006C2538, otherRide->name, 0, 0x013CE952, 0, 0, 0x0141EF68, 0); if (strcmp((char*)RCT2_ADDRESS_COMMON_STRING_FORMAT_BUFFER, (char*)0x0141EF68) >= 0) break;