diff --git a/src/peep.c b/src/peep.c index 1a2cc8d739..caf4016fde 100644 --- a/src/peep.c +++ b/src/peep.c @@ -540,4 +540,12 @@ void get_arguments_from_action(rct_peep* peep, uint32 *argument_1, uint32* argum break; } +} + +/** + * rct2: 0x00698827 + * returns 1 on pickup (CF not set) + */ +int peep_can_be_picked_up(rct_peep* peep){ + return RCT2_ADDRESS(0x982004, uint8)[peep->state] & 1; } \ No newline at end of file diff --git a/src/peep.h b/src/peep.h index 18e5cd17f6..0ee2dc1d6d 100644 --- a/src/peep.h +++ b/src/peep.h @@ -437,6 +437,7 @@ typedef struct { if (peep->type == PEEP_TYPE_STAFF) int peep_get_staff_count(); +int peep_can_be_picked_up(rct_peep* peep); void peep_update_all(); void peep_problem_warnings_update(); void peep_update_crowd_noise(); diff --git a/src/ride.h b/src/ride.h index 90415da9e8..9f7d902f49 100644 --- a/src/ride.h +++ b/src/ride.h @@ -54,7 +54,7 @@ typedef struct { uint8 status; // 0x049 uint16 var_04A; uint32 var_04C; - uint16 overall_view; // 0x050 + uint16 overall_view; // 0x050 00XX = X, XX00 = Y (* 32 + 16) uint16 station_starts[4]; // 0x052 uint8 station_heights[4]; // 0x05A uint8 pad_05E[0xC]; diff --git a/src/vehicle.h b/src/vehicle.h index 9451bdb8c8..c6df2167ee 100644 --- a/src/vehicle.h +++ b/src/vehicle.h @@ -41,4 +41,7 @@ typedef struct { void vehicle_update_all(); +/** Helper macro until rides are stored in this module. */ +#define GET_VEHICLE(sprite_index) &(g_sprite_list[sprite_index].vehicle) + #endif \ No newline at end of file diff --git a/src/viewport.c b/src/viewport.c index 62272a127b..8a00f235e4 100644 --- a/src/viewport.c +++ b/src/viewport.c @@ -162,7 +162,7 @@ void viewport_create(rct_window *w, int x, int y, int width, int height, int zoo viewport->width = width; viewport->height = height; - if (!(flags & (1 << 0))){ + if (!(flags & VIEWPORT_FOCUS_TYPE_COORDINATE)){ zoom = 0; } @@ -171,12 +171,12 @@ void viewport_create(rct_window *w, int x, int y, int width, int height, int zoo viewport->zoom = zoom; viewport->flags = 0; - if (RCT2_GLOBAL(0x9AAC7A, uint8) & 1){ + if (RCT2_GLOBAL(RCT2_ADDRESS_CONFIG_KEYBOARD_SHORTCUTS, uint8) & 1){ viewport->flags |= VIEWPORT_FLAG_GRIDLINES; } w->viewport = viewport; - if (flags & (1<<1)){ + if (flags & VIEWPORT_FOCUS_TYPE_SPRITE){ w->viewport_target_sprite = sprite; rct_sprite* center_sprite = &g_sprite_list[sprite]; center_x = center_sprite->unknown.x; diff --git a/src/window.c b/src/window.c index 266397aa43..50b7be7162 100644 --- a/src/window.c +++ b/src/window.c @@ -27,6 +27,7 @@ #include "widget.h" #include "window.h" #include "viewport.h" +#include "sprite.h" #define RCT2_FIRST_WINDOW (RCT2_ADDRESS(RCT2_ADDRESS_WINDOW_LIST, rct_window)) #define RCT2_LAST_WINDOW (RCT2_GLOBAL(RCT2_ADDRESS_NEW_WINDOW_PTR, rct_window*) - 1) @@ -394,11 +395,11 @@ rct_window *window_create(int x, int y, int width, int height, uint32 *event_han w->disabled_widgets = 0; w->pressed_widgets = 0; w->var_020 = 0; - w->var_480 = 0; - w->var_482 = 0; - w->var_484 = 0; - w->var_486 = 0; - w->var_488 = 0; + w->viewport_focus_coordinates.var_480 = 0; + w->viewport_focus_coordinates.x = 0; + w->viewport_focus_coordinates.y = 0; + w->viewport_focus_coordinates.z = 0; + w->viewport_focus_coordinates.rotation = 0; w->page = 0; w->var_48C = 0; w->frame_no = 0; @@ -885,6 +886,35 @@ rct_window *window_get_main() return NULL; } +/** + * Based on + * rct2: 0x696ee9 & 0x66842F + * + */ +void window_scroll_to_viewport(rct_window *w) +{ + int x, y, z; + rct_window *mainWindow; + // In original checked to make sure x and y were not -1 as well. + if (w->viewport == NULL || w->viewport_focus_coordinates.y == -1) + return; + + if (w->viewport_focus_sprite.type & VIEWPORT_FOCUS_TYPE_SPRITE) { + rct_sprite *sprite = &(g_sprite_list[w->viewport_focus_sprite.sprite_id]); + x = sprite->unknown.x; + y = sprite->unknown.y; + z = sprite->unknown.z; + } else { + x = w->viewport_focus_coordinates.x; + y = w->viewport_focus_coordinates.y & VIEWPORT_FOCUS_Y_MASK; + z = w->viewport_focus_coordinates.z; + } + + mainWindow = window_get_main(); + if (mainWindow != NULL) + window_scroll_to_location(mainWindow, x, y, z); +} + /** * * rct2: 0x006E7C9C diff --git a/src/window.h b/src/window.h index f9d1b0db8a..bab8718775 100644 --- a/src/window.h +++ b/src/window.h @@ -93,6 +93,69 @@ typedef struct { sint16 v_thumb_bottom; // 0x10 } rct_scroll; +/** + * Viewport focus structure. + * size: 0xA + * Use sprite.type to work out type. + */ +typedef struct{ + sint16 var_480; + sint16 x; //0x482 + sint16 y; //0x484 & VIEWPORT_FOCUS_Y_MASK + sint16 z; //0x486 + uint8 rotation;//0x488 + uint8 pad_489; +} coordinate_focus; + +// Type is viewport_target_sprite_id & 0x80000000 != 0 +typedef struct{ + sint16 var_480; + uint16 sprite_id; //0x482 + uint8 pad_484; + uint8 type; //0x485 & VIEWPORT_FOCUS_TYPE_MASK + uint16 pad_486; + uint8 rotation; //0x488 + uint8 pad_489; +} sprite_focus; + +#define VIEWPORT_FOCUS_TYPE_MASK 0xC0 +enum{ + VIEWPORT_FOCUS_TYPE_COORDINATE = (1<<6), + VIEWPORT_FOCUS_TYPE_SPRITE = (1<<7) +}; +#define VIEWPORT_FOCUS_Y_MASK 0x3FFF; + + +typedef struct{ + sint16 campaign_type; + sint16 no_weeks; //0x482 + uint16 ride_id; //0x484 + uint32 pad_486; +} campaign_variables; + +typedef struct{ + sint16 selected_ride_id; //0x480 + sint16 highlighted_ride_id; //0x482 + uint16 pad_484; + uint16 pad_486; + uint16 selected_ride_countdown; //488 +} new_ride_variables; + +typedef struct{ + sint16 var_480; + sint16 var_482; + uint16 var_484; + uint16 var_486; + uint16 var_488; +} news_variables; + +typedef struct{ + sint16 rotation; + sint16 var_482; + uint16 var_484; + uint16 var_486; + uint16 var_488; +}map_variables; /** * Window structure * size: 0x4C0 @@ -122,11 +185,14 @@ typedef struct rct_window { sint16 selected_list_item; // 0x47A -1 for none selected sint16 pad_47C; sint16 pad_47E; - sint16 var_480; - sint16 var_482; // viewport target x - sint16 var_484; // viewport target y - sint16 var_486; // viewport target z - sint16 var_488; // viewport rotation << 8 + union{ + coordinate_focus viewport_focus_coordinates; + sprite_focus viewport_focus_sprite; + campaign_variables campaign; + new_ride_variables new_ride; + news_variables news; + map_variables map; + }; sint16 page; // 0x48A sint16 var_48C; sint16 frame_no; // 0x48E updated every tic for motion in windows sprites @@ -326,6 +392,7 @@ void window_push_others_below(rct_window *w1); rct_window *window_get_main(); +void window_scroll_to_viewport(rct_window *w); void window_scroll_to_location(rct_window *w, int x, int y, int z); void window_rotate_camera(rct_window *w); void window_zoom_in(rct_window *w); @@ -374,7 +441,7 @@ void window_park_objective_open(); void window_park_rating_open(); void window_finances_open(); void window_finances_research_open(); -void window_new_campaign_open(int campaignType); +void window_new_campaign_open(sint16 campaignType); void window_ride_list_open(); void window_new_ride_open(); void window_banner_open(); diff --git a/src/window_map.c b/src/window_map.c index 4a317b3454..9ac0b2e380 100644 --- a/src/window_map.c +++ b/src/window_map.c @@ -162,7 +162,7 @@ void window_map_open() w->var_020 |= 0x300; window_init_scroll_widgets(w); - w->var_480 = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_ROTATION, uint16); + w->map.rotation = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_ROTATION, uint16); window_map_init_map(); RCT2_GLOBAL(0x00F64F05, uint8) = 0; diff --git a/src/window_new_campaign.c b/src/window_new_campaign.c index 3bd66c88da..d52e9482d5 100644 --- a/src/window_new_campaign.c +++ b/src/window_new_campaign.c @@ -128,7 +128,7 @@ int ride_name_compare(const void *a, const void *b) * * rct2: 0x0069E16F */ -void window_new_campaign_open(int campaignType) +void window_new_campaign_open(sint16 campaignType) { // RCT2_CALLPROC_X(0x0069E16F, campaignType, 0, 0, 0, 0, 0, 0); @@ -138,7 +138,7 @@ void window_new_campaign_open(int campaignType) w = window_bring_to_front_by_id(WC_NEW_CAMPAIGN, 0); if (w != NULL) { - if (w->var_480 == campaignType) + if (w->campaign.campaign_type == campaignType) return; window_close(w); @@ -162,13 +162,13 @@ void window_new_campaign_open(int campaignType) window_new_campaign_widgets[WIDX_TITLE].image = STR_MARKETING_VOUCHERS_FOR_FREE_ENTRY_TO_THE_PARK + campaignType; // Campaign type - w->var_480 = campaignType; + w->campaign.campaign_type = campaignType; // Number of weeks - w->var_482 = 2; + w->campaign.no_weeks = 2; // Currently selected ride - w->var_484 = SELECTED_RIDE_UNDEFINED; + w->campaign.ride_id = SELECTED_RIDE_UNDEFINED; // Get all applicable rides numApplicableRides = 0; @@ -234,7 +234,7 @@ static void window_new_campaign_mouseup() break; case WIDX_START_BUTTON: RCT2_GLOBAL(RCT2_ADDRESS_GAME_COMMAND_ERROR_TITLE, uint16) = STR_CANT_START_MARKETING_CAMPAIGN; - game_do_command(0, (w->var_482 << 8) | 1, 0, (w->var_484 << 8) | w->var_480, GAME_COMMAND_START_MARKETING_CAMPAIGN, 0, 0); + game_do_command(0, (w->campaign.no_weeks << 8) | 1, 0, (w->campaign.ride_id << 8) | w->campaign.campaign_type, GAME_COMMAND_START_MARKETING_CAMPAIGN, 0, 0); window_close(w); break; } @@ -252,7 +252,7 @@ static void window_new_campaign_mousedown(int widgetIndex, rct_window *w, rct_wi case WIDX_RIDE_DROPDOWN_BUTTON: dropdownWidget = widget - 1; - if (w->var_480 == ADVERTISING_CAMPAIGN_FOOD_OR_DRINK_FREE) { + if (w->campaign.campaign_type == ADVERTISING_CAMPAIGN_FOOD_OR_DRINK_FREE) { window_new_campaign_get_shop_items(); if (window_new_campaign_shop_items[0] != 255) { int numItems = 0; @@ -305,11 +305,11 @@ static void window_new_campaign_mousedown(int widgetIndex, rct_window *w, rct_wi } break; case WIDX_WEEKS_INCREASE_BUTTON: - w->var_482 = min(w->var_482 + 1, 6); + w->campaign.no_weeks = min(w->campaign.no_weeks + 1, 6); window_invalidate(w); break; case WIDX_WEEKS_DECREASE_BUTTON: - w->var_482 = max(w->var_482 - 1, 2); + w->campaign.no_weeks = max(w->campaign.no_weeks - 1, 2); window_invalidate(w); break; } @@ -329,13 +329,13 @@ static void window_new_campaign_dropdown() if (widgetIndex != WIDX_RIDE_DROPDOWN_BUTTON) return; - if (w->var_480 == ADVERTISING_CAMPAIGN_FOOD_OR_DRINK_FREE) { + if (w->campaign.campaign_type == ADVERTISING_CAMPAIGN_FOOD_OR_DRINK_FREE) { rct_string_id itemStringId = (uint16)gDropdownItemsArgs[dropdownIndex] - 2016; if (itemStringId >= 32) itemStringId -= 96; - w->var_484 = itemStringId; + w->campaign.ride_id = itemStringId; } else { - w->var_484 = window_new_campaign_rides[dropdownIndex]; + w->campaign.ride_id = window_new_campaign_rides[dropdownIndex]; } window_invalidate(w); @@ -355,15 +355,15 @@ static void window_new_campaign_invalidate() window_new_campaign_widgets[WIDX_RIDE_DROPDOWN].type = WWT_EMPTY; window_new_campaign_widgets[WIDX_RIDE_DROPDOWN_BUTTON].type = WWT_EMPTY; window_new_campaign_widgets[WIDX_RIDE_DROPDOWN].image = STR_MARKETING_NOT_SELECTED; - switch (w->var_480) { + switch (w->campaign.campaign_type) { case ADVERTISING_CAMPAIGN_RIDE_FREE: case ADVERTISING_CAMPAIGN_RIDE: window_new_campaign_widgets[WIDX_RIDE_LABEL].type = WWT_24; window_new_campaign_widgets[WIDX_RIDE_DROPDOWN].type = WWT_DROPDOWN; window_new_campaign_widgets[WIDX_RIDE_DROPDOWN_BUTTON].type = WWT_DROPDOWN_BUTTON; window_new_campaign_widgets[WIDX_RIDE_LABEL].image = STR_MARKETING_RIDE; - if (w->var_484 != SELECTED_RIDE_UNDEFINED) { - rct_ride *ride = GET_RIDE(w->var_484); + 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; } @@ -373,8 +373,8 @@ static void window_new_campaign_invalidate() window_new_campaign_widgets[WIDX_RIDE_DROPDOWN].type = WWT_DROPDOWN; window_new_campaign_widgets[WIDX_RIDE_DROPDOWN_BUTTON].type = WWT_DROPDOWN_BUTTON; window_new_campaign_widgets[WIDX_RIDE_LABEL].image = STR_MARKETING_ITEM; - if (w->var_484 != SELECTED_RIDE_UNDEFINED) { - rct_string_id itemStringId = w->var_484 + 2016; + if (w->campaign.ride_id != SELECTED_RIDE_UNDEFINED) { + rct_string_id itemStringId = w->campaign.ride_id + 2016; if (itemStringId >= 2048) itemStringId += 96; window_new_campaign_widgets[WIDX_RIDE_DROPDOWN].image = itemStringId; @@ -383,11 +383,11 @@ static void window_new_campaign_invalidate() } // Set current number of weeks spinner - window_new_campaign_widgets[WIDX_WEEKS_SPINNER].image = (STR_MARKETING_1_WEEK - 1) + w->var_482; + window_new_campaign_widgets[WIDX_WEEKS_SPINNER].image = (STR_MARKETING_1_WEEK - 1) + w->campaign.no_weeks; // Enable / disable start button based on ride dropdown w->disabled_widgets &= ~(1 << WIDX_START_BUTTON); - if (window_new_campaign_widgets[WIDX_RIDE_DROPDOWN].type == WWT_DROPDOWN && w->var_484 == SELECTED_RIDE_UNDEFINED) + if (window_new_campaign_widgets[WIDX_RIDE_DROPDOWN].type == WWT_DROPDOWN && w->campaign.ride_id == SELECTED_RIDE_UNDEFINED) w->disabled_widgets |= 1 << WIDX_START_BUTTON; } @@ -409,11 +409,11 @@ static void window_new_campaign_paint() y = w->y + 60; // Price per week - money32 pricePerWeek = AdvertisingCampaignPricePerWeek[w->var_480]; + money32 pricePerWeek = AdvertisingCampaignPricePerWeek[w->campaign.campaign_type]; gfx_draw_string_left(dpi, STR_MARKETING_COST_PER_WEEK, &pricePerWeek, 0, x, y); y += 13; // Total price - money32 totalPrice = AdvertisingCampaignPricePerWeek[w->var_480] * w->var_482; + money32 totalPrice = AdvertisingCampaignPricePerWeek[w->campaign.campaign_type] * w->campaign.no_weeks; gfx_draw_string_left(dpi, STR_MARKETING_TOTAL_COST, &totalPrice, 0, x, y); } \ No newline at end of file diff --git a/src/window_new_ride.c b/src/window_new_ride.c index 8f0969b269..633b52a242 100644 --- a/src/window_new_ride.c +++ b/src/window_new_ride.c @@ -431,16 +431,16 @@ void window_new_ride_open() w->colours[0] = 24; w->colours[1] = 26; w->colours[2] = 26; - w->var_480 = -1; - w->var_482 = -1; + w->new_ride.selected_ride_countdown = -1; + w->new_ride.highlighted_ride_id = -1; _lastTrackDesignCountRideType.type = 255; _lastTrackDesignCountRideType.entry_index = 255; window_new_ride_populate_list(); - w->var_482 = RCT2_ADDRESS(0x00F43825, sint16)[_window_new_ride_current_tab]; - if (w->var_482 == -1) - w->var_482 = RCT2_GLOBAL(0x00F43523, sint16); + w->new_ride.highlighted_ride_id = RCT2_ADDRESS(0x00F43825, sint16)[_window_new_ride_current_tab]; + if (w->new_ride.highlighted_ride_id == -1) + w->new_ride.highlighted_ride_id = RCT2_GLOBAL(0x00F43523, sint16); w->width = 1; window_new_ride_refresh_widget_sizing(w); @@ -577,13 +577,13 @@ static void window_new_ride_mousedown(int widgetIndex, rct_window *w, rct_widget _window_new_ride_current_tab = page; w->frame_no = 0; - w->var_482 = -1; - w->var_480 = -1; + w->new_ride.highlighted_ride_id = -1; + w->new_ride.selected_ride_countdown = -1; window_new_ride_populate_list(); if (page < WINDOW_NEW_RIDE_PAGE_RESEARCH) { - w->var_482 = RCT2_ADDRESS(0x00F43825, sint16)[page]; - if (w->var_482 == -1) - w->var_482 = RCT2_GLOBAL(0x00F43523, sint16); + w->new_ride.highlighted_ride_id = RCT2_ADDRESS(0x00F43825, sint16)[page]; + if (w->new_ride.highlighted_ride_id == -1) + w->new_ride.highlighted_ride_id = RCT2_GLOBAL(0x00F43523, sint16); } window_new_ride_refresh_widget_sizing(w); @@ -603,7 +603,7 @@ static void window_new_ride_update(rct_window *w) widget_invalidate(w->classification, w->number, WIDX_TAB_1 + _window_new_ride_current_tab); - if (w->var_480 != -1 && w->var_488-- == 0) + if (w->new_ride.selected_ride_countdown != -1 && w->new_ride.selected_ride_countdown-- == 0) window_new_ride_select(w); } @@ -645,21 +645,22 @@ static void window_new_ride_scrollmousedown() { short x, y; rct_window *w; + ride_list_item item; window_scrollmouse_get_registers(w, x, y); if (RCT2_GLOBAL(0x009DEA6E, uint8) != 0) return; - ride_list_item item = window_new_ride_scroll_get_ride_list_item_at(w, x, y); + item = window_new_ride_scroll_get_ride_list_item_at(w, x, y); if (item.type == 255 && item.entry_index == 255) return; RCT2_ADDRESS(0x00F43825, ride_list_item)[_window_new_ride_current_tab] = item; - w->var_480 = *((sint16*)&item); + w->new_ride.selected_ride_countdown = *((sint16*)&item); sound_play_panned(SOUND_CLICK_1, w->x + (w->width / 2)); - w->var_488 = 8; + w->new_ride.selected_ride_countdown = 8; window_invalidate(w); } @@ -671,17 +672,18 @@ static void window_new_ride_scrollmouseover() { short x, y; rct_window *w; + ride_list_item item; window_scrollmouse_get_registers(w, x, y); - if (w->var_480 != -1) + if (w->new_ride.selected_ride_countdown != -1) return; - ride_list_item item = window_new_ride_scroll_get_ride_list_item_at(w, x, y); - if (w->var_482 == *((sint16*)&item)) + item = window_new_ride_scroll_get_ride_list_item_at(w, x, y); + if (w->new_ride.highlighted_ride_id == *((sint16*)&item)) return; - w->var_482 = *((sint16*)&item); + w->new_ride.highlighted_ride_id = *((sint16*)&item); RCT2_ADDRESS(0x00F43825, ride_list_item)[_window_new_ride_current_tab] = item; window_invalidate(w); } @@ -737,7 +739,7 @@ static void window_new_ride_paint() window_new_ride_draw_tab_images(dpi, w); if (_window_new_ride_current_tab != WINDOW_NEW_RIDE_PAGE_RESEARCH) { - ride_list_item item = *((ride_list_item*)&w->var_482); + ride_list_item item = *((ride_list_item*)&w->new_ride.highlighted_ride_id); if (item.type == 255 && item.entry_index == 255) return; @@ -827,15 +829,16 @@ static void window_new_ride_scrollpaint() int y = 1; ride_list_item *listItem = (ride_list_item*)0x00F43523; while (listItem->type != 255 || listItem->entry_index != 255) { + uint8 *rideEntry; // Draw flat button rectangle int flags = 0; - if (w->var_480 == *((sint16*)listItem)) + if (w->new_ride.selected_ride_countdown == *((sint16*)listItem)) flags |= 0x20; - if (w->var_482 == *((sint16*)listItem) || flags != 0) + if (w->new_ride.highlighted_ride_id == *((sint16*)listItem) || flags != 0) gfx_fill_rect_inset(dpi, x, y, x + 115, y + 115, w->colours[1], 0x80 | flags); // Draw ride image - uint8 *rideEntry = rideEntries[listItem->entry_index]; + rideEntry = rideEntries[listItem->entry_index]; int unk = RCT2_GLOBAL(rideEntry + 4, uint32); if (listItem->type != RCT2_GLOBAL(rideEntry + 12, uint8)) { unk++; @@ -970,7 +973,7 @@ static void window_new_ride_paint_ride_information(rct_window *w, rct_drawpixeli */ static void window_new_ride_select(rct_window *w) { - ride_list_item item = *((ride_list_item*)&w->var_480); + ride_list_item item = *((ride_list_item*)&w->new_ride.selected_ride_countdown); if (item.type == 255) return; diff --git a/src/window_news.c b/src/window_news.c index d8e9c27ef6..9c431422e4 100644 --- a/src/window_news.c +++ b/src/window_news.c @@ -107,7 +107,7 @@ void window_news_open() window->colours[0] = 1; window->colours[1] = 1; window->colours[2] = 0; - window->var_480 = -1; + window->news.var_480 = -1; } // sub_66E4BA: @@ -144,17 +144,17 @@ static void window_news_update(rct_window *w) int i, j, x, y, z; rct_news_item *newsItems; - if (w->var_480 == -1) + if (w->news.var_480 == -1) return; - if (--w->var_484 != 0) + if (--w->news.var_484 != 0) return; window_invalidate(w); sound_play_panned(SOUND_CLICK_2, w->x + (w->width / 2)); newsItems = RCT2_ADDRESS(RCT2_ADDRESS_NEWS_ITEM_LIST, rct_news_item); - j = w->var_480; - w->var_480 = -1; + j = w->news.var_480; + w->news.var_480 = -1; for (i = 11; i < 61; i++) { if (newsItems[i].type == NEWS_ITEM_NULL) return; @@ -162,10 +162,11 @@ static void window_news_update(rct_window *w) if (j == 0) { if (newsItems[i].flags & 1) return; - if (w->var_482 == 1) { + if (w->news.var_482 == 1) { news_item_open_subject(newsItems[i].type, newsItems[i].assoc); return; - } else if (w->var_482 > 1) { + } + else if (w->news.var_482 > 1) { news_item_get_subject_location(newsItems[i].type, newsItems[i].assoc, &x, &y, &z); if (x != SPRITE_LOCATION_NULL) if ((w = window_get_main()) != NULL) @@ -250,9 +251,9 @@ static void window_news_scrollmousedown() } if (buttonIndex != 0) { - w->var_480 = i - 11; - w->var_482 = buttonIndex; - w->var_484 = 4; + w->news.var_480 = i - 11; + w->news.var_482 = buttonIndex; + w->news.var_484 = 4; window_invalidate(w); sound_play_panned(SOUND_CLICK_1, w->x + (w->width / 2)); } @@ -318,7 +319,7 @@ static void window_news_scrollpaint() // Item text char sz[400];// = (char*)0x09B5F2C; char* args[1]; - args[0] = &sz; + args[0] = (char*)&sz; sprintf(sz, "%c%c%s", newsItem->colour, FORMAT_SMALLFONT, newsItem->text); gfx_draw_string_left_wrapped(dpi, args, 2, y + 10, 325, 1170, 14); @@ -328,9 +329,9 @@ static void window_news_scrollpaint() yy = y + 14; press = 0; - if (w->var_480 != -1) { - newsItem2 = &newsItems[11 + w->var_480]; - if (newsItem == newsItem2 && w->var_482 == 1) + if (w->news.var_480 != -1) { + newsItem2 = &newsItems[11 + w->news.var_480]; + if (newsItem == newsItem2 && w->news.var_482 == 1) press = 0x20; } gfx_fill_rect_inset(dpi, x, yy, x + 23, yy + 23, w->colours[2], press); @@ -369,9 +370,9 @@ static void window_news_scrollpaint() yy = y + 14; press = 0; - if (w->var_480 != -1) { - newsItem2 = &newsItems[11 + w->var_480]; - if (newsItem == newsItem2 && w->var_482 == 2) + if (w->news.var_480 != -1) { + newsItem2 = &newsItems[11 + w->news.var_480]; + if (newsItem == newsItem2 && w->news.var_482 == 2) press = 0x20; } gfx_fill_rect_inset(dpi, x, yy, x + 23, yy + 23, w->colours[2], press); diff --git a/src/window_park.c b/src/window_park.c index 51f1a3e127..39b982ae1b 100644 --- a/src/window_park.c +++ b/src/window_park.c @@ -574,7 +574,6 @@ static uint32 window_park_page_enabled_widgets[] = { #pragma endregion static void window_park_init_viewport(rct_window *w); -static void window_park_scroll_to_viewport(rct_window *w); static void window_park_set_page(rct_window *w, int page); static void window_park_anchor_border_widgets(rct_window *w); static void window_park_align_tabs(rct_window *w); @@ -594,7 +593,7 @@ rct_window *window_park_open() w->enabled_widgets = window_park_page_enabled_widgets[WINDOW_PARK_PAGE_ENTRANCE]; w->number = 0; w->page = WINDOW_PARK_PAGE_ENTRANCE; - w->var_482 = 0; + w->viewport_focus_coordinates.y = 0; w->frame_no = 0; w->list_information_type = -1; w->var_48C = -1; @@ -620,8 +619,8 @@ void window_park_entrance_open() window = window_bring_to_front_by_id(WC_PARK_INFORMATION, 0); if (window == NULL) { window = window_park_open(); - window->var_482 = -1; - window->var_484 = -1; + window->viewport_focus_coordinates.y = -1; + window->viewport_focus_coordinates.x = -1; } window->page = WINDOW_PARK_PAGE_ENTRANCE; @@ -680,7 +679,7 @@ static void window_park_entrance_mouseup() RCT2_CALLPROC_X(0x00668393, 0, 0, 0, widgetIndex, (int)w, 0, 0); break; case WIDX_LOCATE: - window_park_scroll_to_viewport(w); + window_scroll_to_viewport(w); break; case WIDX_RENAME: RCT2_GLOBAL(0x013CE962, uint32) = RCT2_GLOBAL(0x013573D8, uint32); @@ -1022,10 +1021,11 @@ static void window_park_init_viewport(rct_window *w) // Call invalidate event RCT2_CALLPROC_X(w->event_handlers[WE_INVALIDATE], 0, 0, 0, 0, (int)w, 0, 0); - w->var_482 = x; - w->var_484 = y; - w->var_486 = z; - w->var_488 = r << 8; + w->viewport_focus_coordinates.x = x; + w->viewport_focus_coordinates.y = y; + w->viewport_focus_sprite.type |= VIEWPORT_FOCUS_TYPE_COORDINATE; + w->viewport_focus_coordinates.z = z; + w->viewport_focus_coordinates.rotation = r; if (zr != 0xFFFF) { // Create viewport @@ -1037,11 +1037,11 @@ static void window_park_init_viewport(rct_window *w) w->y + viewportWidget->top + 1, (viewportWidget->right - viewportWidget->left) - 2, (viewportWidget->bottom - viewportWidget->top) - 2, - zr&0xFF, + 0, x, y, z, - xy&0xC0000000 >> 30, + w->viewport_focus_sprite.type & VIEWPORT_FOCUS_TYPE_MASK, -1 ); w->flags |= (1 << 2); @@ -1054,30 +1054,6 @@ static void window_park_init_viewport(rct_window *w) window_invalidate(w); } -static void window_park_scroll_to_viewport(rct_window *w) -{ - int x, y, z; - rct_window *mainWindow; - - if (w->viewport == NULL || *((sint32*)&w->var_482) == -1) - return; - - if (*((uint32*)&w->var_486) & 0x80000000) { - rct_sprite *sprite = &(g_sprite_list[w->var_482]); - x = sprite->unknown.x; - y = sprite->unknown.y; - z = sprite->unknown.z; - } else { - x = w->var_482; - y = w->var_484; - z = w->var_486; - } - - mainWindow = window_get_main(); - if (mainWindow != NULL) - window_scroll_to_location(mainWindow, x, y, z); -} - #pragma endregion #pragma region Rating page @@ -1093,8 +1069,8 @@ void window_park_rating_open() window = window_bring_to_front_by_id(WC_PARK_INFORMATION, 0); if (window == NULL) { window = window_park_open(); - window->var_482 = -1; - window->var_484 = -1; + window->viewport_focus_coordinates.x = -1; + window->viewport_focus_coordinates.y = -1; } if (RCT2_GLOBAL(0x009DE518, uint32) & (1 << 3)) @@ -1227,8 +1203,8 @@ void window_park_guests_open() window = window_bring_to_front_by_id(WC_PARK_INFORMATION, 0); if (window == NULL) { window = window_park_open(); - window->var_482 = -1; - window->var_484 = -1; + window->viewport_focus_coordinates.x = -1; + window->viewport_focus_coordinates.y = -1; } if (RCT2_GLOBAL(0x009DE518, uint32) & (1 << 3)) @@ -1633,8 +1609,8 @@ void window_park_objective_open() window = window_bring_to_front_by_id(WC_PARK_INFORMATION, 0); if (window == NULL) { window = window_park_open(); - window->var_482 = -1; - window->var_484 = -1; + window->viewport_focus_coordinates.x = -1; + window->viewport_focus_coordinates.y = -1; } if (RCT2_GLOBAL(0x009DE518, uint32) & (1 << 3)) @@ -1796,8 +1772,8 @@ void window_park_awards_open() window = window_bring_to_front_by_id(WC_PARK_INFORMATION, 0); if (window == NULL) { window = window_park_open(); - window->var_482 = -1; - window->var_484 = -1; + window->viewport_focus_coordinates.x = -1; + window->viewport_focus_coordinates.y = -1; } if (RCT2_GLOBAL(0x009DE518, uint32) & (1 << 3)) diff --git a/src/window_peep.c b/src/window_peep.c index 13376b714c..2c55d29ce9 100644 --- a/src/window_peep.c +++ b/src/window_peep.c @@ -20,10 +20,13 @@ #include "addresses.h" #include "game.h" +#include "map.h" +#include "ride.h" #include "peep.h" #include "string_ids.h" #include "sprite.h" #include "sprites.h" +#include "viewport.h" #include "widget.h" #include "window.h" #include "window_dropdown.h" @@ -48,6 +51,14 @@ enum WINDOW_PEEP_WIDGET_IDX { WIDX_TAB_4, WIDX_TAB_5, WIDX_TAB_6, + + WIDX_MARQUEE = 10, + WIDX_VIEWPORT, + WIDX_ACTION_LBL, + WIDX_PICKUP, + WIDX_RENAME, + WIDX_LOCATE, + WIDX_TRACK }; void window_peep_emptysub(){}; @@ -66,21 +77,36 @@ rct_widget window_peep_overview_widgets[] = { { WWT_12, 1, 3, 166, 45, 56, 0x0FFFFFFFF, STR_NONE}, // Label Thought marquee { WWT_VIEWPORT, 1, 3, 166, 57, 143, 0x0FFFFFFFF, STR_NONE }, // Viewport { WWT_12, 1, 3, 166, 144, 154, 0x0FFFFFFFF, STR_NONE}, // Label Action - { WWT_FLATBTN, 1, 167, 190, 45, 68, SPR_RENAME, 1706}, // Rename Button - { WWT_FLATBTN, 1, 167, 190, 69, 92, 0x1430, 1055}, // Pickup Button + { WWT_FLATBTN, 1, 167, 190, 45, 68, SPR_RENAME, 1706}, // Pickup Button + { WWT_FLATBTN, 1, 167, 190, 69, 92, 0x1430, 1055}, // Rename Button { WWT_FLATBTN, 1, 167, 190, 93, 116, SPR_LOCATE, STR_LOCATE_SUBJECT_TIP},// Locate Button { WWT_FLATBTN, 1, 167, 190, 117, 140, SPR_TRACK_PEEP, 1930}, // Track Button { WIDGETS_END }, }; +//0x981D0C rct_widget *window_peep_page_widgets[] = { - window_peep_overview_widgets + window_peep_overview_widgets, + (rct_widget *)0x9AC45C, + (rct_widget *)0x9ac500, + (rct_widget *)0x9ac5b4, + (rct_widget *)0x9ac658, + (rct_widget *)0x9ac6FC }; +void window_peep_set_page(rct_window* w, int page); +void window_peep_disable_widgets(rct_window* w); +void window_peep_viewport_init(rct_window* w); + +void window_peep_close(); +void window_peep_resize(); +void window_peep_overview_mouse_up(); +void window_peep_overview_paint(); + static void* window_peep_overview_events[] = { - (void*)0x696A75, - (void*)0x696A06, - (void*)0x696FBE, + window_peep_close, + window_peep_overview_mouse_up, + window_peep_resize, window_peep_emptysub, window_peep_emptysub, window_peep_emptysub, @@ -104,15 +130,67 @@ static void* window_peep_overview_events[] = { window_peep_emptysub, window_peep_emptysub, (void*)0x696749, //Invalidate - (void*)0x696887, //Paint + window_peep_overview_paint, //Paint (void*)0x69707C }; +//0x981D24 void* window_peep_page_events[] = { - window_peep_overview_events + window_peep_overview_events, + (void*)0x982468, + (void*)0x9824d8, + (void*)0x982548, + (void*)0x9825b8, + (void*)0x982628 }; +//0x981D3C uint32 window_peep_page_enabled_widgets[] = { + (1 << WIDX_CLOSE) | + (1 << WIDX_TAB_1) | + (1 << WIDX_TAB_2) | + (1 << WIDX_TAB_3) | + (1 << WIDX_TAB_4) | + (1 << WIDX_TAB_5) | + (1 << WIDX_TAB_6) | + (1 << WIDX_RENAME)| + (1 << WIDX_PICKUP)| + (1 << WIDX_LOCATE)| + (1 << WIDX_TRACK), + + (1 << WIDX_CLOSE) | + (1 << WIDX_TAB_1) | + (1 << WIDX_TAB_2) | + (1 << WIDX_TAB_3) | + (1 << WIDX_TAB_4) | + (1 << WIDX_TAB_5) | + (1 << WIDX_TAB_6), + + (1 << WIDX_CLOSE) | + (1 << WIDX_TAB_1) | + (1 << WIDX_TAB_2) | + (1 << WIDX_TAB_3) | + (1 << WIDX_TAB_4) | + (1 << WIDX_TAB_5) | + (1 << WIDX_TAB_6), //| + //(1 << WIDX_?), + + (1 << WIDX_CLOSE) | + (1 << WIDX_TAB_1) | + (1 << WIDX_TAB_2) | + (1 << WIDX_TAB_3) | + (1 << WIDX_TAB_4) | + (1 << WIDX_TAB_5) | + (1 << WIDX_TAB_6), + + (1 << WIDX_CLOSE) | + (1 << WIDX_TAB_1) | + (1 << WIDX_TAB_2) | + (1 << WIDX_TAB_3) | + (1 << WIDX_TAB_4) | + (1 << WIDX_TAB_5) | + (1 << WIDX_TAB_6), + (1 << WIDX_CLOSE) | (1 << WIDX_TAB_1) | (1 << WIDX_TAB_2) | @@ -142,12 +220,12 @@ void window_peep_open(rct_peep* peep){ window->enabled_widgets = window_peep_page_enabled_widgets[0]; window->number = peep->sprite_index; window->page = 0; - window->var_482 = 0; + window->viewport_focus_coordinates.y = 0; window->frame_no = 0; window->list_information_type = 0; window->var_492 = 0; window->var_494 = 0; - RCT2_CALLPROC_X(0x006987A6, 0, 0, 0, 0, (int)window, 0, 0); + window_peep_disable_widgets(window); window->min_width = 192; window->min_height = 157; window->max_width = 500; @@ -158,19 +236,286 @@ void window_peep_open(rct_peep* peep){ window->colours[0] = 1; window->colours[1] = 15; window->colours[2] = 15; - window->var_482 = -1; + window->viewport_focus_coordinates.y = -1; } window->page = 0; window_invalidate(window); - window->widgets = RCT2_GLOBAL(0x981D0C, rct_widget*); - window->enabled_widgets = RCT2_GLOBAL(0x981D3C,uint32); + window->widgets = window_peep_page_widgets[WINDOW_PEEP_OVERVIEW]; + window->enabled_widgets = window_peep_page_enabled_widgets[WINDOW_PEEP_OVERVIEW]; window->var_020 = RCT2_GLOBAL(0x981D54,uint32); - window->event_handlers = RCT2_GLOBAL(0x981D24,uint32*); + window->event_handlers = window_peep_page_events[WINDOW_PEEP_OVERVIEW]; window->pressed_widgets = 0; - RCT2_CALLPROC_X(0x006987A6, 0, 0, 0, 0, (int)window, 0, 0); + window_peep_disable_widgets(window); window_init_scroll_widgets(window); - RCT2_CALLPROC_X(0x0069883C, 0, 0, 0, 0, (int)window, 0, 0); + window_peep_viewport_init(window); } + +/* rct2: 0x006987A6 + * Disables the finance tab when no money. + * Disables peep pickup when in certain no pickup states. + */ +void window_peep_disable_widgets(rct_window* w){ + rct_peep* peep = &g_sprite_list[w->number].peep; + uint64 disabled_widgets = 0; + + if (peep_can_be_picked_up(peep)){ + if (w->disabled_widgets & (1 << WIDX_PICKUP)) + window_invalidate(w); + } + else{ + disabled_widgets = (1 << WIDX_PICKUP); + if (!(w->disabled_widgets & (1 << WIDX_PICKUP))) + window_invalidate(w); + } + if (RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & PARK_FLAGS_11){ + disabled_widgets |= (1 << WIDX_TAB_4); //Disable finance tab if no money + } + w->disabled_widgets = disabled_widgets; +} + +/* rct2: 0x00696A75 */ +void window_peep_close(){ + rct_window* w; + + window_get_register(w); + + if (RCT2_GLOBAL(0x9DE518,uint32) & (1<<3)){ + if (w->classification == RCT2_GLOBAL(RCT2_ADDRESS_TOOL_WINDOWCLASS,rct_windowclass) && + w->number == RCT2_GLOBAL(RCT2_ADDRESS_TOOL_WINDOWNUMBER,rct_windownumber)) + tool_cancel(); + } +} + +/* rct2: 0x00696FBE */ +void window_peep_resize(){ + rct_window* w; + + window_get_register(w); + + window_peep_disable_widgets(w); + RCT2_CALLPROC_EBPSAFE(w->event_handlers[WE_INVALIDATE]); + + window_invalidate_by_id(0xA97, w->number); + + window_set_resize(w, 192, 159, 500, 450); + + rct_viewport* view = w->viewport; + + if (view){ + if ((w->width - 30) == view->width){ + if ((w->height - 72) == view->height){ + window_peep_viewport_init(w); + return; + } + } + uint8 zoom_amount = 1 << view->zoom; + view->width = w->width - 30; + view->height = w->height - 72; + view->view_width = view->width / zoom_amount; + view->view_height = view->height / zoom_amount; + } + window_peep_viewport_init(w); +} + +/* rct2: 0x00696A06 */ +void window_peep_overview_mouse_up(){ + short widgetIndex; + rct_window* w; + window_widget_get_registers(w, widgetIndex); + + switch(widgetIndex){ + case WIDX_CLOSE: + window_close(w); + break; + case WIDX_TAB_1: + case WIDX_TAB_2: + case WIDX_TAB_3: + case WIDX_TAB_4: + case WIDX_TAB_5: + case WIDX_TAB_6: + window_peep_set_page(w, widgetIndex - WIDX_TAB_1); + break; + case WIDX_PICKUP: + //696ba6 + break; + case WIDX_RENAME: + //696e4d + break; + case WIDX_LOCATE: + window_scroll_to_viewport(w); + break; + case WIDX_TRACK: + g_sprite_list[w->number].peep.flags ^= PEEP_FLAGS_TRACKING; + break; + } +} + +void window_peep_set_page(rct_window* w, int page){ + if (RCT2_GLOBAL(0x9DE518,uint32) & (1 << 3)) + { + if(w->number == RCT2_GLOBAL(RCT2_ADDRESS_TOOL_WINDOWNUMBER, rct_windownumber) && + w->classification == RCT2_GLOBAL(RCT2_ADDRESS_TOOL_WINDOWCLASS, rct_windowclass)) + tool_cancel(); + + } + int listen = 0; + if ( page == WINDOW_PEEP_OVERVIEW && w->page==WINDOW_PEEP_OVERVIEW && w->viewport){ + if(!(w->viewport->flags & VIEWPORT_FLAG_SOUND_ON)) + listen = 1; + } + + + w->page = page; + w->frame_no = 0; + w->no_list_items = 0; + w->selected_list_item = -1; + + rct_viewport* viewport = w->viewport; + w->viewport = 0; + if (viewport){ + viewport->width = 0; + } + + w->enabled_widgets = window_peep_page_enabled_widgets[page]; + w->var_020 = RCT2_ADDRESS(0x981D54,uint32)[page]; + w->event_handlers = window_peep_page_events[page]; + w->pressed_widgets = 0; + w->widgets = window_peep_page_widgets[page]; + window_peep_disable_widgets(w); + window_invalidate(w); + + RCT2_CALLPROC_X(w->event_handlers[WE_RESIZE], 0, 0, 0, 0, (int)w, 0, 0); + RCT2_CALLPROC_X(w->event_handlers[WE_INVALIDATE], 0, 0, 0, 0, (int)w, 0, 0); + + window_init_scroll_widgets(w); + window_invalidate(w); + + if (listen && w->viewport) w->viewport->flags |= VIEWPORT_FLAG_SOUND_ON; +} + +/* rct2: 0x0069883C */ +void window_peep_viewport_init(rct_window* w){ + if (w->page != WINDOW_PEEP_OVERVIEW) return; + + union{ + sprite_focus sprite; + coordinate_focus coordinate; + } focus; //The focus will be either a sprite or a coordinate. + + focus.sprite.sprite_id = w->number; + + rct_peep* peep = GET_PEEP(w->number); + + if (peep->state == PEEP_STATE_PICKED){ + focus.sprite.sprite_id = -1; + } + else{ + uint8 final_check = 1; + if (peep->state == PEEP_STATE_ON_RIDE + || peep->state == PEEP_STATE_ENTERING_RIDE + || (peep->state == PEEP_STATE_LEAVING_RIDE && peep->x == SPRITE_LOCATION_NULL)){ + + rct_ride* ride = &(RCT2_ADDRESS(RCT2_ADDRESS_RIDE_LIST, rct_ride)[peep->current_ride]); + if (ride->lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK){ + rct_vehicle* train = GET_VEHICLE(ride->train_car_map[peep->current_train]); + int car = peep->current_car; + + for (; car != 0; car--){ + train = GET_VEHICLE(train->next_vehicle_on_train); + } + + focus.sprite.sprite_id = train->sprite_index; + final_check = 0; + } + } + if (peep->x == SPRITE_LOCATION_NULL && final_check){ + rct_ride* ride = &(RCT2_ADDRESS(RCT2_ADDRESS_RIDE_LIST, rct_ride)[peep->current_ride]); + int x = ride->overall_view & 0xFF * 32 + 16; + int y = (ride->overall_view >> 8) * 32 + 16; + int height = map_element_height(x, y); + height += 32; + focus.coordinate.x = x; + focus.coordinate.y = y; + focus.coordinate.z = height; + focus.sprite.type |= VIEWPORT_FOCUS_TYPE_COORDINATE; + } + else{ + focus.sprite.type |= VIEWPORT_FOCUS_TYPE_SPRITE | VIEWPORT_FOCUS_TYPE_COORDINATE; + focus.sprite.pad_486 &= 0xFFFF; + } + focus.coordinate.rotation = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_ROTATION, uint8); + } + + uint16 viewport_flags; + + if (w->viewport){ + //Check all combos, for now skipping y and rot + if (focus.coordinate.x == w->viewport_focus_coordinates.x && + focus.coordinate.y == w->viewport_focus_coordinates.y && + focus.coordinate.z == w->viewport_focus_coordinates.z && + focus.coordinate.rotation == w->viewport_focus_coordinates.rotation) + return; + + viewport_flags = w->viewport->flags; + w->viewport->width = 0; + w->viewport = 0; + + viewport_update_pointers(); + } + else{ + viewport_flags = 0; + if (RCT2_GLOBAL(RCT2_ADDRESS_CONFIG_FLAGS, uint8) & 0x1) + viewport_flags |= VIEWPORT_FLAG_GRIDLINES; + } + + RCT2_CALLPROC_X(w->event_handlers[WE_INVALIDATE], 0, 0, 0, 0, (int)w, 0, 0); + + w->viewport_focus_coordinates.x = focus.coordinate.x; + w->viewport_focus_coordinates.y = focus.coordinate.y; + w->viewport_focus_coordinates.z = focus.coordinate.z; + w->viewport_focus_coordinates.rotation = focus.coordinate.rotation; + + if (peep->state != PEEP_STATE_PICKED){ + if (!(w->viewport)){ + rct_widget* view_widget = &w->widgets[WIDX_VIEWPORT]; + + int x = view_widget->left + 1 + w->x; + int y = view_widget->top + 1 + w->y; + int width = view_widget->right - view_widget->left - 1; + int height = view_widget->bottom - view_widget->top - 1; + + viewport_create(w, x, y, width, height, 0, focus.coordinate.x, focus.coordinate.y, focus.coordinate.z, focus.sprite.type & VIEWPORT_FOCUS_TYPE_MASK, focus.sprite.sprite_id); + w->flags |= WF_2; + window_invalidate(w); + } + } + + if (w->viewport) + w->viewport->flags = viewport_flags; + window_invalidate(w); +} + +/* rct2: 0x696887 */ +void window_peep_overview_paint(){ + rct_window *w; + rct_drawpixelinfo *dpi; + rct_widget *labelWidget; + + window_paint_get_registers(w, dpi); + RCT2_CALLPROC_X(0x696887, 0, 0, 0, 0, w, dpi, 0); + return; + + window_draw_widgets(w, dpi); + //6983dd + //698597 + //6985d8 + //69861f + //69869b + //698661 + if (w->viewport){ + window_draw_viewport(dpi, w); + } +} \ No newline at end of file diff --git a/src/window_staff_peep.c b/src/window_staff_peep.c index d4bd010646..032d969a59 100644 --- a/src/window_staff_peep.c +++ b/src/window_staff_peep.c @@ -186,7 +186,7 @@ rct_window* sub_6BEF1B(rct_peep* peep) w->enabled_widgets = RCT2_GLOBAL(0x9929B0, uint32); w->number = peep->sprite_index; w->page = 0; - w->var_482 = 0; + w->viewport_focus_coordinates.y = 0; w->frame_no = 0; RCT2_GLOBAL((int*)w + 0x496, uint16) = 0; // missing, var_494 should perhaps be uint16? diff --git a/src/window_title_scenarioselect.c b/src/window_title_scenarioselect.c index d567c9ff4f..38246736e7 100644 --- a/src/window_title_scenarioselect.c +++ b/src/window_title_scenarioselect.c @@ -128,7 +128,7 @@ void window_scenarioselect_open() window->colours[0] = 1; window->colours[1] = 26; window->colours[2] = 26; - window->var_480 = -1; + window->viewport_focus_coordinates.var_480 = -1; window->var_494 = 0; window_scenarioselect_init_tabs();