diff --git a/src/sprites.h b/src/sprites.h index 2a9cb5d9dc..605a1e3134 100644 --- a/src/sprites.h +++ b/src/sprites.h @@ -203,6 +203,23 @@ enum { SPR_TAB_AWARDS = 5527, + SPR_TAB_GUESTS_0 = 5568, + SPR_TAB_GUESTS_1 = SPR_TAB_GUESTS_0 + 1, + SPR_TAB_GUESTS_2 = SPR_TAB_GUESTS_0 + 2, + SPR_TAB_GUESTS_3 = SPR_TAB_GUESTS_0 + 3, + SPR_TAB_GUESTS_4 = SPR_TAB_GUESTS_0 + 4, + SPR_TAB_GUESTS_5 = SPR_TAB_GUESTS_0 + 5, + SPR_TAB_GUESTS_6 = SPR_TAB_GUESTS_0 + 6, + SPR_TAB_GUESTS_7 = SPR_TAB_GUESTS_0 + 7, + SPR_TAB_GUESTS_8 = SPR_TAB_GUESTS_0 + 8, + SPR_TAB_GUESTS_9 = SPR_TAB_GUESTS_0 + 9, + SPR_TAB_GUESTS_10 = SPR_TAB_GUESTS_0 + 10, + SPR_TAB_GUESTS_11 = SPR_TAB_GUESTS_0 + 11, + SPR_TAB_GUESTS_12 = SPR_TAB_GUESTS_0 + 12, + SPR_TAB_GUESTS_13 = SPR_TAB_GUESTS_0 + 13, + SPR_TAB_GUESTS_14 = SPR_TAB_GUESTS_0 + 14, + SPR_TAB_GUESTS_15 = SPR_TAB_GUESTS_0 + 15, + SPR_FLOOR_TEXTURE_GRASS = 5579, SPR_FLOOR_TEXTURE_SAND = SPR_FLOOR_TEXTURE_GRASS + 1, SPR_FLOOR_TEXTURE_DIRT = SPR_FLOOR_TEXTURE_GRASS + 2, diff --git a/src/window.c b/src/window.c index 11a43c5567..1b995f32f8 100644 --- a/src/window.c +++ b/src/window.c @@ -378,7 +378,7 @@ rct_window *window_create(int x, int y, int width, int height, uint32 *event_han w->var_48E = 0; w->var_490 = 0; w->var_492 = 0; - w->var_4AC = 0; + w->selected_tab = 0; w->var_4AE = 0; RCT2_NEW_WINDOW++; diff --git a/src/window.h b/src/window.h index eb1521c6e2..6bff42546b 100644 --- a/src/window.h +++ b/src/window.h @@ -133,7 +133,7 @@ typedef struct rct_window { sint16 var_492; uint32 var_494; uint8 var_498[0x14]; - sint16 var_4AC; + sint16 selected_tab; // 0x4AC sint16 var_4AE; sint16 var_4B0; // viewport target sprite? sint16 saved_view_x; // 0x4B2 diff --git a/src/window_game_top_toolbar.c b/src/window_game_top_toolbar.c index 5c4819ff0f..1f341ce6b8 100644 --- a/src/window_game_top_toolbar.c +++ b/src/window_game_top_toolbar.c @@ -171,8 +171,8 @@ static void window_game_top_toolbar_mouseup() window_rotate_camera(mainWindow); break; case WIDX_MAP: - //RCT2_CALLPROC_EBPSAFE(0x0068C88A); - window_map_open(); + RCT2_CALLPROC_EBPSAFE(0x0068C88A); + //window_map_open(); break; case WIDX_CLEAR_SCENERY: if ((RCT2_GLOBAL(0x009DE518, uint32) & (1 << 3)) && RCT2_GLOBAL(RCT2_ADDRESS_TOOL_WINDOWCLASS, uint8) == 1 && RCT2_GLOBAL(RCT2_ADDRESS_TOOL_WIDGETINDEX, uint16) == 16) { diff --git a/src/window_guest_list.c b/src/window_guest_list.c index 9e66016aac..a8e66cbca1 100644 --- a/src/window_guest_list.c +++ b/src/window_guest_list.c @@ -195,7 +195,7 @@ static void window_guest_list_mouseup() window_close(w); break; case WIDX_MAP: - RCT2_CALLPROC_EBPSAFE(0x0068C88A); + window_map_open(); break; } } diff --git a/src/window_map.c b/src/window_map.c index e8fdb94b31..4d977d5468 100644 --- a/src/window_map.c +++ b/src/window_map.c @@ -28,6 +28,8 @@ static enum WINDOW_MAP_WIDGET_IDX { WIDX_BACKGROUND, WIDX_TITLE, WIDX_CLOSE, + WIDX_PEOPLE_TAB = 4, + WIDX_RIDES_TAB = 5 }; static rct_widget window_map_widgets[] = { @@ -103,13 +105,51 @@ static void* window_map_events[] = { */ void window_map_open() { - RCT2_CALLPROC_EBPSAFE(0x0068C88A); - //rct_window* w; + rct_window* w; + int* var; // Check if window is already open - //w = window_bring_to_front_by_id(WC_OPTIONS, 0); - //if (w != NULL) - // return; + w = window_bring_to_front_by_id(WC_MAP, 0); + if (w != NULL) { + w->selected_tab = 0; + w->var_490 = 0; + return; + } + + var = (int*)rct2_malloc(0x40000); + if (var == NULL) + return; + + RCT2_GLOBAL(0x00F1AD68, uint32) = (uint32)var; + w = window_create_auto_pos(245, 259, (uint32*)window_map_events, WC_MAP, 0x0400); + w->widgets = window_map_widgets; + w->enabled_widgets = + (1 << 2) | + (1 << 4) | + (1 << 5) | + (1 << 8) | + (1 << 9) | + (1 << 14) | + (1 << 15) | + (1 << 10) | + (1 << 16) | + (1 << 17) | + (1 << 18) | + (1 << 19) | + (1 << 11) | + (1 << 20) | + (1 << 12); + //TODO: .text:0068C943 or dword ptr [esi+20h], 300h + + window_init_scroll_widgets(w); + w->var_480 = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_ROTATION, uint16); + + RCT2_CALLPROC_EBPSAFE(0x0068CA6C); + RCT2_GLOBAL(0x00F64F05, uint8) = 0; + RCT2_CALLPROC_EBPSAFE(0x0068C990); + + w->colours[0] = 12; + w->colours[1] = 24; } /** @@ -192,14 +232,33 @@ static void window_map_invalidate() */ static void window_map_paint() { - RCT2_CALLPROC_EBPSAFE(0x0068CDA9); - /*rct_window *w; + //RCT2_CALLPROC_EBPSAFE(0x0068CDA9); + rct_window *w; rct_drawpixelinfo *dpi; + int image_id; __asm mov w, esi __asm mov dpi, edi - window_draw_widgets(w, dpi);*/ + window_draw_widgets(w, dpi); + + // guest tab image (animated) + image_id = SPR_TAB_GUESTS_0; + if (w->selected_tab == 0) + image_id += w->var_490 / 4; + + gfx_draw_sprite(dpi, image_id, + w->x + w->widgets[WIDX_PEOPLE_TAB].left, + w->y + w->widgets[WIDX_PEOPLE_TAB].top); + + // ride/stall tab image (animated) + image_id = SPR_TAB_RIDE_0; + if (w->selected_tab == 1) + image_id += w->var_490 / 4; + + gfx_draw_sprite(dpi, image_id, + w->x + w->widgets[WIDX_RIDES_TAB].left, + w->y + w->widgets[WIDX_RIDES_TAB].top); } /** diff --git a/src/window_title_scenarioselect.c b/src/window_title_scenarioselect.c index 5d0be5bba5..5523f6aa55 100644 --- a/src/window_title_scenarioselect.c +++ b/src/window_title_scenarioselect.c @@ -132,7 +132,7 @@ void window_scenarioselect_open() window_scenarioselect_init_tabs(); - window->var_4AC = 0; + window->selected_tab = 0; } /** @@ -188,7 +188,7 @@ static void window_scenarioselect_mousedown() __asm mov w, esi if (widgetIndex >= WIDX_TAB1 && widgetIndex <= WIDX_TAB5) { - w->var_4AC = widgetIndex - 4; + w->selected_tab = widgetIndex - 4; w->var_494 = 0; window_invalidate(w); RCT2_CALLPROC_X(w->event_handlers[WE_RESIZE], 0, 0, 0, 0, (int)w, 0, 0); @@ -209,7 +209,7 @@ static void window_scenarioselect_scrollgetsize() height = 0; for (i = 0; i < RCT2_GLOBAL(RCT2_ADDRESS_NUM_SCENARIOS, sint32); i++) { scenario = &(RCT2_GLOBAL(RCT2_ADDRESS_SCENARIO_LIST, rct_scenario_basic*)[i]); - if (scenario->category != w->var_4AC) + if (scenario->category != w->selected_tab) continue; if (scenario->flags & SCENARIO_FLAGS_VISIBLE) height += 24; @@ -232,7 +232,7 @@ static void window_scenarioselect_scrollmousedown() for (i = 0; i < RCT2_GLOBAL(RCT2_ADDRESS_NUM_SCENARIOS, sint32); i++) { scenario = &(RCT2_GLOBAL(RCT2_ADDRESS_SCENARIO_LIST, rct_scenario_basic*)[i]); - if (scenario->category != w->var_4AC) + if (scenario->category != w->selected_tab) continue; if (!(scenario->flags & SCENARIO_FLAGS_VISIBLE)) continue; @@ -261,7 +261,7 @@ static void window_scenarioselect_scrollmouseover() selected = NULL; for (i = 0; i < RCT2_GLOBAL(RCT2_ADDRESS_NUM_SCENARIOS, sint32); i++) { scenario = &(RCT2_GLOBAL(RCT2_ADDRESS_SCENARIO_LIST, rct_scenario_basic*)[i]); - if (scenario->category != w->var_4AC) + if (scenario->category != w->selected_tab) continue; if (!(scenario->flags & SCENARIO_FLAGS_VISIBLE)) continue; @@ -286,7 +286,7 @@ static void window_scenarioselect_invalidate() __asm mov w, esi w->pressed_widgets &= ~(0x10 | 0x20 | 0x40 | 0x80 | 0x100); - w->pressed_widgets |= 1LL << (w->var_4AC + 4); + w->pressed_widgets |= 1LL << (w->selected_tab + 4); } static void window_scenarioselect_paint() @@ -369,7 +369,7 @@ static void window_scenarioselect_scrollpaint() y = 0; for (i = 0; i < RCT2_GLOBAL(RCT2_ADDRESS_NUM_SCENARIOS, sint32); i++) { scenario = &(RCT2_GLOBAL(RCT2_ADDRESS_SCENARIO_LIST, rct_scenario_basic*)[i]); - if (scenario->category != w->var_4AC) + if (scenario->category != w->selected_tab) continue; if (!(scenario->flags & SCENARIO_FLAGS_VISIBLE)) continue;