diff --git a/src/addresses.h b/src/addresses.h index 0182a37ad5..0a47b592ce 100644 --- a/src/addresses.h +++ b/src/addresses.h @@ -215,10 +215,16 @@ #define RCT2_ADDRESS_NEW_WINDOW_PTR 0x014234B8 #define RCT2_ADDRESS_VIEWPORT_LIST 0x014234BC #define RCT2_ADDRESS_NEW_VIEWPORT_PTR 0x01423570 -#define RCT2_ADDRESS_WINDOW_GUEST_LIST_SELECTED_FILTER 0x00F1EE06 -#define RCT2_ADDRESS_WINDOW_GUEST_LIST_SELECTED_TAB 0x00F1EE12 + +#define RCT2_ADDRESS_WINDOW_GUEST_LIST_SELECTED_FILTER 0x00F1EE06 +#define RCT2_ADDRESS_WINDOW_GUEST_LIST_SELECTED_TAB 0x00F1EE12 #define RCT2_ADDRESS_WINDOW_GUEST_LIST_SELECTED_VIEW 0x00F1EE13 +#define RCT2_ADDRESS_WINDOW_RIDE_LIST_INFORMATION_TYPE 0x00F43833 +#define RCT2_ADDRESS_WINDOW_RIDE_LIST_SELECTED_TAB 0x00F43824 +#define RCT2_ADDRESS_WINDOW_RIDE_LIST_HIGHLIGHTED_ITEM 0x00F43825 + +#define RCT2_ADDRESS_WINDOW_STAFF_LIST_SELECTED_TAB 0x00F4390A #define RCT2_ADDRESS_OS_TIME_MINUTE 0x01424654 #define RCT2_ADDRESS_OS_TIME_HOUR 0x01424656 diff --git a/src/editor.c b/src/editor.c index 766bb8da6f..9f07f326af 100644 --- a/src/editor.c +++ b/src/editor.c @@ -53,16 +53,16 @@ void editor_load() RCT2_CALLPROC_EBPSAFE(0x0069EB13); // sprites_init ride_init_all(); window_guest_list_init_vars_a(); - RCT2_CALLPROC_EBPSAFE(0x006BD3A4); + sub_6BD3A4(); park_init(); finance_init(); date_reset(); window_guest_list_init_vars_b(); - RCT2_CALLPROC_EBPSAFE(0x006BD39C); + RCT2_GLOBAL(RCT2_ADDRESS_WINDOW_STAFF_LIST_SELECTED_TAB, uint8) = WINDOW_STAFF_LIST_TAB_HANDYMEN; RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) = SCREEN_FLAGS_SCENARIO_EDITOR; RCT2_GLOBAL(0x0141F570, uint8) = 0; RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) |= PARK_FLAGS_SHOW_REAL_GUEST_NAMES; - RCT2_CALLPROC_EBPSAFE(0x006ACA58); + window_ride_list_init_vars(); RCT2_GLOBAL(0x0141F571, uint8) = 4; viewport_init_all(); news_item_init_queue(); @@ -102,15 +102,15 @@ void trackdesigner_load() RCT2_CALLPROC_EBPSAFE(0x0069EB13); // reset_sprites ride_init_all(); window_guest_list_init_vars_a(); - RCT2_CALLPROC_EBPSAFE(0x006BD3A4); + sub_6BD3A4(); park_init(); finance_init(); date_reset(); window_guest_list_init_vars_b(); - RCT2_CALLPROC_EBPSAFE(0x006BD39C); + RCT2_GLOBAL(RCT2_ADDRESS_WINDOW_STAFF_LIST_SELECTED_TAB, uint8) = WINDOW_STAFF_LIST_TAB_HANDYMEN; RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) = SCREEN_FLAGS_TRACK_DESIGNER; RCT2_GLOBAL(0x0141F570, uint8) = 0; - RCT2_CALLPROC_EBPSAFE(0x006ACA58); + window_ride_list_init_vars(); viewport_init_all(); news_item_init_queue(); RCT2_CALLPROC_EBPSAFE(0x0066EF38); // window_main_editor_create @@ -140,15 +140,15 @@ void trackmanager_load() RCT2_CALLPROC_EBPSAFE(0x0069EB13); // reset_sprites ride_init_all(); window_guest_list_init_vars_a(); - RCT2_CALLPROC_EBPSAFE(0x006BD3A4); + sub_6BD3A4(); park_init(); finance_init(); date_reset(); window_guest_list_init_vars_b(); - RCT2_CALLPROC_EBPSAFE(0x006BD39C); + RCT2_GLOBAL(RCT2_ADDRESS_WINDOW_STAFF_LIST_SELECTED_TAB, uint8) = WINDOW_STAFF_LIST_TAB_HANDYMEN; RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) = SCREEN_FLAGS_TRACK_MANAGER; RCT2_GLOBAL(0x0141F570, uint8) = 0; - RCT2_CALLPROC_EBPSAFE(0x006ACA58); + window_ride_list_init_vars(); viewport_init_all(); news_item_init_queue(); RCT2_CALLPROC_EBPSAFE(0x0066EF38); // window_main_editor_create @@ -170,4 +170,18 @@ static void set_all_land_owned() int mapSize = RCT2_GLOBAL(RCT2_ADDRESS_MAP_SIZE, sint16); game_do_command(64, 1, 64, 2, 56, (mapSize - 2) * 32, (mapSize - 2) * 32); +} + +/** +* +* rct2: 0x006BD3A4 +*/ +void sub_6BD3A4() { + for (short i = 0; i < 200; i++) { + RCT2_ADDRESS(0x013CA672, uint8)[i] = 0; + } + for (short i = 200; i < 204; i++) { + RCT2_ADDRESS(0x013CA672, uint8)[i] = 1; + } + RCT2_CALLPROC_EBPSAFE(0x006C0C3F); } \ No newline at end of file diff --git a/src/editor.h b/src/editor.h index 34a7ef5ab3..9022a6cd4d 100644 --- a/src/editor.h +++ b/src/editor.h @@ -26,4 +26,6 @@ void editor_convert_save_to_scenario(); void trackdesigner_load(); void trackmanager_load(); +void sub_6BD3A4(); + #endif diff --git a/src/finance.c b/src/finance.c index b011b4ccec..a24f64f51e 100644 --- a/src/finance.c +++ b/src/finance.c @@ -109,7 +109,7 @@ void finance_pay_interest() void finance_init() { for (short i = 0; i < 56; i++) { - RCT2_ADDRESS(0x01357848, uint32)[i] = 0; + RCT2_ADDRESS(RCT2_ADDRESS_EXPENDITURE_TABLE, uint32)[i] = 0; } RCT2_GLOBAL(0x0135832C, uint32) = 0; @@ -119,7 +119,7 @@ void finance_init() { RCT2_GLOBAL(0x01358334, uint32) = 0; RCT2_GLOBAL(0x01358338, uint16) = 0; - RCT2_GLOBAL(0x013573DC, uint32) = 100000; + RCT2_GLOBAL(0x013573DC, uint32) = 100000; // Cheat detection RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONEY_ENCRYPTED, sint32) = ENCRYPT_MONEY(100000); RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_LOAN, sint32) = 100000; diff --git a/src/game.c b/src/game.c index a68cd91245..0358864fa1 100644 --- a/src/game.c +++ b/src/game.c @@ -1294,7 +1294,7 @@ int game_load_save() RCT2_CALLPROC_EBPSAFE(0x0069E9A7); RCT2_CALLPROC_EBPSAFE(0x006DFEE4); - RCT2_CALLPROC_EBPSAFE(0x006ACA58); + window_ride_list_init_vars(); RCT2_GLOBAL(0x009DEB7C, uint16) = 0; if (RCT2_GLOBAL(0x0013587C4, uint32) == 0) // this check is not in scenario play RCT2_CALLPROC_EBPSAFE(0x0069E869); diff --git a/src/rct2.c b/src/rct2.c index 24ea502be0..be54cd7306 100644 --- a/src/rct2.c +++ b/src/rct2.c @@ -135,9 +135,9 @@ void rct2_init() date_reset(); climate_reset(CLIMATE_COOL_AND_WET); RCT2_CALLPROC_EBPSAFE(0x006DFEE4); - RCT2_CALLPROC_EBPSAFE(0x006ACA58); + window_ride_list_init_vars(); window_guest_list_init_vars_b(); - RCT2_CALLPROC_EBPSAFE(0x006BD39C); + RCT2_GLOBAL(RCT2_ADDRESS_WINDOW_STAFF_LIST_SELECTED_TAB, uint8) = WINDOW_STAFF_LIST_TAB_HANDYMEN; title_load(); diff --git a/src/scenario.c b/src/scenario.c index b283c9e767..d0031bd810 100644 --- a/src/scenario.c +++ b/src/scenario.c @@ -450,7 +450,7 @@ void scenario_load_and_play(rct_scenario_basic *scenario) window_invalidate(mainWindow); RCT2_CALLPROC_EBPSAFE(0x0069E9A7); - RCT2_CALLPROC_EBPSAFE(0x006ACA58); + window_ride_list_init_vars(); RCT2_GLOBAL(0x00F663B0, sint32) = RCT2_GLOBAL(0x009AA0F0, sint32); RCT2_GLOBAL(0x00F663B4, sint32) = RCT2_GLOBAL(0x009AA0F4, sint32); diff --git a/src/title.c b/src/title.c index db3b8e7baa..fc6ef67aa5 100644 --- a/src/title.c +++ b/src/title.c @@ -103,9 +103,9 @@ void title_load() date_reset(); RCT2_CALLPROC_X(0x006C45ED, 0, 0, 0, 0, 0, 0, 0); RCT2_CALLPROC_EBPSAFE(0x006DFEE4); - RCT2_CALLPROC_EBPSAFE(0x006ACA58); + window_ride_list_init_vars(); window_guest_list_init_vars_b(); - RCT2_CALLPROC_EBPSAFE(0x006BD39C); + RCT2_GLOBAL(RCT2_ADDRESS_WINDOW_STAFF_LIST_SELECTED_TAB, uint8) = WINDOW_STAFF_LIST_TAB_HANDYMEN; RCT2_CALLPROC_EBPSAFE(0x0068AFFD); RCT2_CALLPROC_EBPSAFE(0x0069EBE4); viewport_init_all(); @@ -191,7 +191,7 @@ static void title_update_showcase() window_invalidate(w); RCT2_CALLPROC_EBPSAFE(0x0069E9A7); - RCT2_CALLPROC_EBPSAFE(0x006ACA58); + window_ride_list_init_vars(); RCT2_CALLPROC_EBPSAFE(0x00684AC3); RCT2_CALLPROC_EBPSAFE(0x006DFEE4); news_item_init_queue(); diff --git a/src/window.c b/src/window.c index 0a7f726040..a35da16b81 100644 --- a/src/window.c +++ b/src/window.c @@ -1203,4 +1203,28 @@ void window_guest_list_init_vars_b() { RCT2_GLOBAL(0x00F1EE02, uint32) = 0xFFFFFFFF; RCT2_GLOBAL(RCT2_ADDRESS_WINDOW_GUEST_LIST_SELECTED_FILTER, uint8) = 0xFF; RCT2_GLOBAL(0x00F1AF20, uint16) = 0; +} + +/** +* +* rct2: 0x006ACA58 +*/ +void window_ride_list_init_vars() { + // If we are in the track designer, default to the Roller Coaster tab + if (RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & SCREEN_FLAGS_TRACK_DESIGNER) { + RCT2_GLOBAL(RCT2_ADDRESS_WINDOW_RIDE_LIST_SELECTED_TAB, uint8) = WINDOW_RIDE_LIST_TAB_ROLLER_COASTER; + } + else { + RCT2_GLOBAL(RCT2_ADDRESS_WINDOW_RIDE_LIST_SELECTED_TAB, uint8) = WINDOW_RIDE_LIST_TAB_TRANSPORT; + } + + for (short i = 0; i < 6; i++) { + /* + Reset what is highlighted in each tab. + Each 16bit number represents the item in its respective tab. + */ + RCT2_ADDRESS(RCT2_ADDRESS_WINDOW_RIDE_LIST_HIGHLIGHTED_ITEM, uint16)[i] = 0xFFFF; + } + + RCT2_GLOBAL(RCT2_ADDRESS_WINDOW_RIDE_LIST_INFORMATION_TYPE, uint8) = 0; } \ No newline at end of file diff --git a/src/window.h b/src/window.h index 1aefaf65e4..1f52eee128 100644 --- a/src/window.h +++ b/src/window.h @@ -284,6 +284,23 @@ enum { WC_CHEATS = 110, } WINDOW_CLASS; +enum { + WINDOW_RIDE_LIST_TAB_TRANSPORT, + WINDOW_RIDE_LIST_TAB_GENTLE, + WINDOW_RIDE_LIST_TAB_ROLLER_COASTER, + WINDOW_RIDE_LIST_TAB_THRILL, + WINDOW_RIDE_LIST_TAB_WATER, + WINDOW_RIDE_LIST_TAB_SHOP, + WINDOW_RIDE_LIST_TAB_RESEARCH +} WINDOW_RIDE_LIST_TAB; + +enum { + WINDOW_STAFF_LIST_TAB_HANDYMEN, + WINDOW_STAFF_LIST_TAB_MECHANICS, + WINDOW_STAFF_LIST_TAB_SECURITY, + WINDOW_STAFF_LIST_TAB_ENTERTAINERS +} WINDOW_STAFF_LIST_TAB; + void window_dispatch_update_all(); void window_update_all(); rct_window *window_create(int x, int y, int width, int height, uint32 *event_handlers, rct_windowclass cls, uint16 flags); @@ -349,5 +366,6 @@ void window_cheats_open(); void window_guest_list_init_vars_a(); void window_guest_list_init_vars_b(); +void window_ride_list_init_vars(); #endif