From 6414d44306efbb87f05a3d308819b8083d3925fa Mon Sep 17 00:00:00 2001 From: zsilencer Date: Fri, 22 Aug 2014 14:05:41 -0600 Subject: [PATCH 01/25] window_research_development_paint() crash fix When the Currently in development Type: is "Ride" the game will crash, looks like the wrong value is ANDed. --- src/window_research.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/window_research.c b/src/window_research.c index c0138a751e..604d2c63c3 100644 --- a/src/window_research.c +++ b/src/window_research.c @@ -346,7 +346,7 @@ static void window_research_development_paint() if (RCT2_GLOBAL(rideEntry + 8, uint32) & 0x1000) stringId = RCT2_GLOBAL(rideEntry, uint16); else - stringId = (typeId & 0xFF00) + 2; + stringId = (typeId & 0xFF) + 2; } else { uint8 *sceneryEntry = RCT2_GLOBAL(0x009ADA90 + (typeId & 0xFFFF) * 4, uint8*); stringId = RCT2_GLOBAL(sceneryEntry, uint16); From 0992a6adcd387d6ea629916f4effe8ee1a459425 Mon Sep 17 00:00:00 2001 From: zsilencer Date: Fri, 22 Aug 2014 15:37:18 -0600 Subject: [PATCH 02/25] window_research_development_paint() ride names fix stringId from typeId was not working right, this fixes it and gives correct research ride names --- src/window_research.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/window_research.c b/src/window_research.c index 604d2c63c3..8082f9a88c 100644 --- a/src/window_research.c +++ b/src/window_research.c @@ -346,7 +346,7 @@ static void window_research_development_paint() if (RCT2_GLOBAL(rideEntry + 8, uint32) & 0x1000) stringId = RCT2_GLOBAL(rideEntry, uint16); else - stringId = (typeId & 0xFF) + 2; + stringId = ((typeId >> 8) & 0xFF) + 2; } else { uint8 *sceneryEntry = RCT2_GLOBAL(0x009ADA90 + (typeId & 0xFFFF) * 4, uint8*); stringId = RCT2_GLOBAL(sceneryEntry, uint16); @@ -385,7 +385,7 @@ static void window_research_development_paint() if (RCT2_GLOBAL(rideEntry + 8, uint32) & 0x1000) stringId = RCT2_GLOBAL(rideEntry, uint16); else - stringId = (typeId & 0xFF00) + 2; + stringId = ((typeId >> 8) & 0xFF) + 2; lastDevelopmentFormat = STR_RESEARCH_RIDE_LABEL; } else { From 581114b1e52ba24df92d5289ff50ac2ad249fc67 Mon Sep 17 00:00:00 2001 From: Duncan Date: Wed, 20 Aug 2014 12:36:29 +0100 Subject: [PATCH 03/25] Added window_peep_close Not tested. Cancels any tool that was in use by the window. --- src/window_peep.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/window_peep.c b/src/window_peep.c index 13376b714c..b20acc3f9b 100644 --- a/src/window_peep.c +++ b/src/window_peep.c @@ -77,8 +77,10 @@ rct_widget *window_peep_page_widgets[] = { window_peep_overview_widgets }; +void window_peep_close(); + static void* window_peep_overview_events[] = { - (void*)0x696A75, + window_peep_close, (void*)0x696A06, (void*)0x696FBE, window_peep_emptysub, @@ -174,3 +176,16 @@ void window_peep_open(rct_peep* peep){ window_init_scroll_widgets(window); RCT2_CALLPROC_X(0x0069883C, 0, 0, 0, 0, (int)window, 0, 0); } + +/* 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(); + } +} From 6524f277061e0278015e488c76c3c480577e9173 Mon Sep 17 00:00:00 2001 From: Duncan Date: Wed, 20 Aug 2014 12:52:27 +0100 Subject: [PATCH 04/25] Started addition of window_peep_resize Not tested. --- src/window_peep.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/src/window_peep.c b/src/window_peep.c index b20acc3f9b..949630c8cd 100644 --- a/src/window_peep.c +++ b/src/window_peep.c @@ -189,3 +189,28 @@ void window_peep_close(){ tool_cancel(); } } + +/* rct2: 0x00696FBE */ +void window_peep_resize(){ + rct_window* w; + + window_get_register(w); + + RCT2_CALLPROC_EBPSAFE(0x6987a6); + RCT2_CALLPROC_EBPSAFE(w->eventhandler[WE_INVALIDATE]); + + window_invalidate_by_id(0xA97,w->number); + + w->min_width = 192; + w->max_width = 500; + w->min_height = 159; + w->max_height = 450; + + if (w->min_width > w->width){ + w->width = w->min_width; + window_invalidate(w); + } + + //0x697002 +} + From ed753875d6e9a3b1888a9cf8701b81310223386b Mon Sep 17 00:00:00 2001 From: Duncan Date: Thu, 21 Aug 2014 12:47:52 +0100 Subject: [PATCH 05/25] Finish peep_resize not tested. --- src/window_peep.c | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/src/window_peep.c b/src/window_peep.c index 949630c8cd..61d9175cd9 100644 --- a/src/window_peep.c +++ b/src/window_peep.c @@ -211,6 +211,36 @@ void window_peep_resize(){ window_invalidate(w); } - //0x697002 + if (w->max_width < w->width){ + w->width = w->max_width; + window_invalidate(w); + } + + if (w->min_height > w->height){ + w->height = w->min_height; + window_invalidate(w); + } + + if (w->max_height < w->height){ + w->height = w->max_height; + window_invalidate(w); + } + + rct_viewport* view = w->viewport; + + if (view){ + if ((w->width - 30) == view->width){ + if ((w->height - 72) == view->height){ + RCT2_CALLPROC_X(0x0069883C, 0, 0, 0, 0, (int)window, 0, 0); + 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; + } + RCT2_CALLPROC_X(0x0069883C, 0, 0, 0, 0, (int)window, 0, 0); } From 4db53e2bfba72a68b1d89a665aeb32dcbcf2b8b7 Mon Sep 17 00:00:00 2001 From: Duncan Date: Thu, 21 Aug 2014 13:05:46 +0100 Subject: [PATCH 06/25] Added start of window_peep_overview_mouse_down Not tested. --- src/window_peep.c | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/src/window_peep.c b/src/window_peep.c index 61d9175cd9..07c91d7eac 100644 --- a/src/window_peep.c +++ b/src/window_peep.c @@ -48,6 +48,13 @@ enum WINDOW_PEEP_WIDGET_IDX { WIDX_TAB_4, WIDX_TAB_5, WIDX_TAB_6, + WIDX_MARQUEE, + WIDX_VIEWPORT, + WIDX_ACTION_LBL, + WIDX_RENAME, + WIDX_PICKUP, + WIDX_LOCATE, + WIDX_TRACK }; void window_peep_emptysub(){}; @@ -78,11 +85,12 @@ rct_widget *window_peep_page_widgets[] = { }; void window_peep_close(); +void window_peep_resize(); static void* window_peep_overview_events[] = { window_peep_close, (void*)0x696A06, - (void*)0x696FBE, + window_peep_resize, window_peep_emptysub, window_peep_emptysub, window_peep_emptysub, @@ -244,3 +252,33 @@ void window_peep_resize(){ RCT2_CALLPROC_X(0x0069883C, 0, 0, 0, 0, (int)window, 0, 0); } +void window_peep_overview_mouse_down(int widgetIndex, rct_window* w, rct_widget* widget){ + switch(widgetIndex){ + case WIDX_CLOSE: + //6ecd4c + break; + case WIDX_PAGE_BACKGROUND: + //696a20 + break; + case WIDX_TAB1: + case WIDX_TAB2: + case WIDX_TAB3: + case WIDX_TAB4: + case WIDX_TAB5: + case WIDX_TAB6: + //696aa0 + break; + case WIDX_RENAME: + //696ba6 + break; + case WIDX_PICKUP: + //696e4d + break; + case WIDX_LOCATE: + //696ee9 + break; + case WIDX_TRACK: + g_sprite_list[w->number].peep.flags ^= PEEP_FLAGS_TRACKING; + break; + } +} From ca5e60639ef470593eb08c47aa104815f31c80d8 Mon Sep 17 00:00:00 2001 From: Duncan Date: Thu, 21 Aug 2014 16:45:01 +0100 Subject: [PATCH 07/25] Added set_page Not tested. --- src/window_peep.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/src/window_peep.c b/src/window_peep.c index 07c91d7eac..391691fb78 100644 --- a/src/window_peep.c +++ b/src/window_peep.c @@ -80,6 +80,7 @@ rct_widget window_peep_overview_widgets[] = { { WIDGETS_END }, }; +//0x981D0C rct_widget *window_peep_page_widgets[] = { window_peep_overview_widgets }; @@ -118,10 +119,12 @@ static void* window_peep_overview_events[] = { (void*)0x69707C }; +//0x981D24 void* window_peep_page_events[] = { window_peep_overview_events }; +//0x981D3C uint32 window_peep_page_enabled_widgets[] = { (1 << WIDX_CLOSE) | (1 << WIDX_TAB_1) | @@ -266,7 +269,7 @@ void window_peep_overview_mouse_down(int widgetIndex, rct_window* w, rct_widget* case WIDX_TAB4: case WIDX_TAB5: case WIDX_TAB6: - //696aa0 + window_peep_set_page(w, widgetIndex - WIDX_TAB1); break; case WIDX_RENAME: //696ba6 @@ -282,3 +285,46 @@ void window_peep_overview_mouse_down(int widgetIndex, rct_window* w, rct_widget* 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]; + RCT2_CALLPROC_X(0x6987A6, 0, 0, 0, 0, (int) w, 0, 0); + 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; +} From ba76d6e4e56f5855bda79fd803e07ee7672f085e Mon Sep 17 00:00:00 2001 From: Duncan Date: Thu, 21 Aug 2014 16:47:13 +0100 Subject: [PATCH 08/25] added window_close mouse down --- src/window_peep.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/window_peep.c b/src/window_peep.c index 391691fb78..86997ca94a 100644 --- a/src/window_peep.c +++ b/src/window_peep.c @@ -87,10 +87,11 @@ rct_widget *window_peep_page_widgets[] = { void window_peep_close(); void window_peep_resize(); +void window_peep_overview_mouse_down(int widgetIndex, rct_window* w, rct_widget* widget); static void* window_peep_overview_events[] = { window_peep_close, - (void*)0x696A06, + window_peep_overview_mouse_down, window_peep_resize, window_peep_emptysub, window_peep_emptysub, @@ -255,10 +256,11 @@ void window_peep_resize(){ RCT2_CALLPROC_X(0x0069883C, 0, 0, 0, 0, (int)window, 0, 0); } +/* rct2: 0x00696A06 */ void window_peep_overview_mouse_down(int widgetIndex, rct_window* w, rct_widget* widget){ switch(widgetIndex){ case WIDX_CLOSE: - //6ecd4c + window_close(w); break; case WIDX_PAGE_BACKGROUND: //696a20 From 52d69be031bc1058e87f4a90f0d4facf7b25b303 Mon Sep 17 00:00:00 2001 From: Duncan Date: Fri, 22 Aug 2014 12:20:25 +0100 Subject: [PATCH 09/25] added locate function not tested. --- src/window_peep.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/window_peep.c b/src/window_peep.c index 86997ca94a..fa767532ed 100644 --- a/src/window_peep.c +++ b/src/window_peep.c @@ -87,11 +87,11 @@ rct_widget *window_peep_page_widgets[] = { void window_peep_close(); void window_peep_resize(); -void window_peep_overview_mouse_down(int widgetIndex, rct_window* w, rct_widget* widget); +void window_peep_overview_mouse_up(int widgetIndex, rct_window* w, rct_widget* widget); static void* window_peep_overview_events[] = { window_peep_close, - window_peep_overview_mouse_down, + window_peep_overview_mouse_up, window_peep_resize, window_peep_emptysub, window_peep_emptysub, @@ -257,14 +257,11 @@ void window_peep_resize(){ } /* rct2: 0x00696A06 */ -void window_peep_overview_mouse_down(int widgetIndex, rct_window* w, rct_widget* widget){ +void window_peep_overview_mouse_up(int widgetIndex, rct_window* w, rct_widget* widget){ switch(widgetIndex){ case WIDX_CLOSE: window_close(w); break; - case WIDX_PAGE_BACKGROUND: - //696a20 - break; case WIDX_TAB1: case WIDX_TAB2: case WIDX_TAB3: @@ -280,7 +277,7 @@ void window_peep_overview_mouse_down(int widgetIndex, rct_window* w, rct_widget* //696e4d break; case WIDX_LOCATE: - //696ee9 + window_scroll_to_viewport(w); break; case WIDX_TRACK: g_sprite_list[w->number].peep.flags ^= PEEP_FLAGS_TRACKING; From 8379262ea4929daa0b7d1398df2c3befa6b99c81 Mon Sep 17 00:00:00 2001 From: Duncan Date: Fri, 22 Aug 2014 12:24:00 +0100 Subject: [PATCH 10/25] Added viewport focus struct. Definitely breaks build --- src/window.h | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/src/window.h b/src/window.h index f9d1b0db8a..26792b2e44 100644 --- a/src/window.h +++ b/src/window.h @@ -93,6 +93,33 @@ typedef struct { sint16 v_thumb_bottom; // 0x10 } rct_scroll; +// Type is viewport_target_y & 0x8000 == 0 +typedef struct sprite_focus{ + sint16 viewport_target_x; //0x482 + sint16 viewport_target_y; //0x484 + sint16 viewport_target_z; //0x486 + uint8 viewport_target_rotation;//0x488 + uint8 pad_489; +} + +// Type is viewport_target_sprite_id & 0x80000000 != 0 +typedef struct coordinate_focus{ + uint32 viewport_target_sprite_id; //0x482 + uint32 pad_486; +} + +#define VIEWPORT_FOCUS_TYPE_MASK_SPRITE 0x8000 +#define VIEWPORT_FOCUS_SPRITE_MASK 0x3FFFFFFF; + +/** + * Viewport focus structure. + * size: 0x8 + */ +union{ + sprite_focus sprite; + coordinate_focus coordinate; +} viewport_focus; + /** * Window structure * size: 0x4C0 @@ -123,10 +150,7 @@ typedef struct rct_window { 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 + viewport_focus focus; // 0x482 viewport focus sint16 page; // 0x48A sint16 var_48C; sint16 frame_no; // 0x48E updated every tic for motion in windows sprites @@ -326,6 +350,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); From 967af50f4d4301dab446074722f97392dbeca984 Mon Sep 17 00:00:00 2001 From: Duncan Date: Fri, 22 Aug 2014 12:30:17 +0100 Subject: [PATCH 11/25] Added window_scroll_to_viewport based off previous function --- src/window.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/window.c b/src/window.c index 266397aa43..485e177c18 100644 --- a/src/window.c +++ b/src/window.c @@ -885,6 +885,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; + + if (w->viewport == NULL || w->focus.sprite.viewport_target_sprite_id == -1) + return; + + if (w->focus.coordinate.viewport_target_y & VIEWPORT_FOCUS_TYPE_MASK_SPRITE) { + rct_sprite *sprite = &(g_sprite_list[w->focus.sprite.viewport_target_sprite_id & VIEWPORT_FOCUS_SPRITE_MASK]); + x = sprite->unknown.x; + y = sprite->unknown.y; + z = sprite->unknown.z; + } else { + x = w->focus.coordinate.viewport_target_x; + y = w->focus.coordinate.viewport_target_y & VIEWPORT_FOCUS_Y_MASK; + z = w->focus.coordinate.viewport_target_z; + } + + mainWindow = window_get_main(); + if (mainWindow != NULL) + window_scroll_to_location(mainWindow, x, y, z); +} + /** * * rct2: 0x006E7C9C From c2557be14d14d329be9dfb561141f7649cfba6ff Mon Sep 17 00:00:00 2001 From: Duncan Date: Fri, 22 Aug 2014 12:34:22 +0100 Subject: [PATCH 12/25] Fixed slight mistake with order. --- src/window.h | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/window.h b/src/window.h index 26792b2e44..cd321d7bda 100644 --- a/src/window.h +++ b/src/window.h @@ -94,22 +94,24 @@ typedef struct { } rct_scroll; // Type is viewport_target_y & 0x8000 == 0 -typedef struct sprite_focus{ +typedef struct coordinate_focus{ sint16 viewport_target_x; //0x482 - sint16 viewport_target_y; //0x484 + sint16 viewport_target_y; //0x484 & VIEWPORT_FOCUS_Y_MASK sint16 viewport_target_z; //0x486 uint8 viewport_target_rotation;//0x488 uint8 pad_489; } // Type is viewport_target_sprite_id & 0x80000000 != 0 -typedef struct coordinate_focus{ - uint32 viewport_target_sprite_id; //0x482 +typedef struct sprite_focus{ + uint16 viewport_target_sprite_id; //0x482 + uint8 pad_484; + uint8 type; //0x485 & VIEWPORT_FOCUS_TYPE_MASK uint32 pad_486; } -#define VIEWPORT_FOCUS_TYPE_MASK_SPRITE 0x8000 -#define VIEWPORT_FOCUS_SPRITE_MASK 0x3FFFFFFF; +#define VIEWPORT_FOCUS_TYPE_MASK 0x80 +#define VIEWPORT_FOCUS_Y_MASK 0x3FFF; /** * Viewport focus structure. From 16cddec597ad8a23c9223051457324d8e59fcf3e Mon Sep 17 00:00:00 2001 From: Duncan Date: Fri, 22 Aug 2014 12:37:31 +0100 Subject: [PATCH 13/25] Fixed slight mistake with order. not tested. --- src/window.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/window.c b/src/window.c index 485e177c18..ed0dce4a70 100644 --- a/src/window.c +++ b/src/window.c @@ -894,12 +894,12 @@ 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->focus.sprite.viewport_target_sprite_id == -1) return; - if (w->focus.coordinate.viewport_target_y & VIEWPORT_FOCUS_TYPE_MASK_SPRITE) { - rct_sprite *sprite = &(g_sprite_list[w->focus.sprite.viewport_target_sprite_id & VIEWPORT_FOCUS_SPRITE_MASK]); + if (w->focus.sprite.type & VIEWPORT_FOCUS_TYPE_MASK) { + rct_sprite *sprite = &(g_sprite_list[w->focus.sprite.viewport_target_sprite_id]); x = sprite->unknown.x; y = sprite->unknown.y; z = sprite->unknown.z; From 7500fccc7923badcbd6d76a454a928d4204d15e3 Mon Sep 17 00:00:00 2001 From: Duncan Date: Fri, 22 Aug 2014 12:39:14 +0100 Subject: [PATCH 14/25] Now uses new viewport_scroll function --- src/window_park.c | 27 +-------------------------- 1 file changed, 1 insertion(+), 26 deletions(-) diff --git a/src/window_park.c b/src/window_park.c index 51f1a3e127..8b72613e64 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); @@ -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); @@ -1054,30 +1053,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 From f700e560cad3c7985a37fa0d9d13a69e0fb5d811 Mon Sep 17 00:00:00 2001 From: Duncan Date: Fri, 22 Aug 2014 15:39:02 +0100 Subject: [PATCH 15/25] Added missing enabled widgets 1 widx is missing --- src/window_peep.c | 47 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/src/window_peep.c b/src/window_peep.c index fa767532ed..4e1630bb1d 100644 --- a/src/window_peep.c +++ b/src/window_peep.c @@ -127,6 +127,51 @@ void* window_peep_page_events[] = { //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) | @@ -179,7 +224,7 @@ void window_peep_open(rct_peep* peep){ window_invalidate(window); window->widgets = RCT2_GLOBAL(0x981D0C, rct_widget*); - window->enabled_widgets = RCT2_GLOBAL(0x981D3C,uint32); + 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->pressed_widgets = 0; From 0c3844787bebc676ff8cbaac0ce1e792b5c0511a Mon Sep 17 00:00:00 2001 From: Duncan Frost Date: Fri, 22 Aug 2014 18:54:28 +0100 Subject: [PATCH 16/25] Fix compile issues. Add new structs --- src/window.c | 13 ++++++------ src/window.h | 43 ++++++++++++++++++++++++++++++++------- src/window_new_campaign.c | 28 ++++++++++++------------- src/window_new_ride.c | 37 +++++++++++++++++---------------- src/window_news.c | 15 +++++++------- src/window_park.c | 35 +++++++++++++++---------------- src/window_peep.c | 31 +++++++++++++++------------- src/window_staff_peep.c | 2 +- 8 files changed, 121 insertions(+), 83 deletions(-) diff --git a/src/window.c b/src/window.c index ed0dce4a70..7286f78051 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) @@ -395,10 +396,10 @@ rct_window *window_create(int x, int y, int width, int height, uint32 *event_han 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->focus.coordinate.viewport_target_x = 0; + w->focus.coordinate.viewport_target_y = 0; + w->focus.coordinate.viewport_target_z = 0; + w->focus.coordinate.viewport_target_rotation = 0; w->page = 0; w->var_48C = 0; w->frame_no = 0; @@ -895,10 +896,10 @@ 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->focus.sprite.viewport_target_sprite_id == -1) + if (w->viewport == NULL || w->focus.coordinate.viewport_target_y == -1) return; - if (w->focus.sprite.type & VIEWPORT_FOCUS_TYPE_MASK) { + if (w->focus.sprite.type & VIEWPORT_FOCUS_TYPE_SPRITE) { rct_sprite *sprite = &(g_sprite_list[w->focus.sprite.viewport_target_sprite_id]); x = sprite->unknown.x; y = sprite->unknown.y; diff --git a/src/window.h b/src/window.h index cd321d7bda..a16650603a 100644 --- a/src/window.h +++ b/src/window.h @@ -94,34 +94,57 @@ typedef struct { } rct_scroll; // Type is viewport_target_y & 0x8000 == 0 -typedef struct coordinate_focus{ +typedef struct{ sint16 viewport_target_x; //0x482 sint16 viewport_target_y; //0x484 & VIEWPORT_FOCUS_Y_MASK sint16 viewport_target_z; //0x486 uint8 viewport_target_rotation;//0x488 uint8 pad_489; -} +} coordinate_focus; // Type is viewport_target_sprite_id & 0x80000000 != 0 -typedef struct sprite_focus{ +typedef struct{ uint16 viewport_target_sprite_id; //0x482 uint8 pad_484; uint8 type; //0x485 & VIEWPORT_FOCUS_TYPE_MASK uint32 pad_486; -} +} sprite_focus; -#define VIEWPORT_FOCUS_TYPE_MASK 0x80 +#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; /** * Viewport focus structure. * size: 0x8 */ -union{ +typedef union{ sprite_focus sprite; coordinate_focus coordinate; } viewport_focus; +typedef struct{ + uint16 no_weeks; //0x482 + uint16 ride_id; //0x484 + uint32 pad_486; +} campaign_variables; + +typedef struct{ + uint16 selected_ride_id; //0x482 + uint16 pad_484; + uint16 pad_486; + uint16 selected_ride_countdown; //488 +} new_ride_variables; + +typedef struct{ + uint16 var_482; + uint16 var_484; + uint16 var_486; + uint16 var_488; +} news_variables; /** * Window structure * size: 0x4C0 @@ -152,7 +175,13 @@ typedef struct rct_window { sint16 pad_47C; sint16 pad_47E; sint16 var_480; - viewport_focus focus; // 0x482 viewport focus + union{ + viewport_focus focus; + campaign_variables campaign; + new_ride_variables new_ride; + news_variables news; + }; + //viewport_focus focus; // 0x482 viewport focus sint16 page; // 0x48A sint16 var_48C; sint16 frame_no; // 0x48E updated every tic for motion in windows sprites diff --git a/src/window_new_campaign.c b/src/window_new_campaign.c index 3bd66c88da..fa45270c98 100644 --- a/src/window_new_campaign.c +++ b/src/window_new_campaign.c @@ -165,10 +165,10 @@ void window_new_campaign_open(int campaignType) w->var_480 = 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->var_480, GAME_COMMAND_START_MARKETING_CAMPAIGN, 0, 0); window_close(w); break; } @@ -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; } @@ -333,9 +333,9 @@ static void window_new_campaign_dropdown() 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); @@ -362,8 +362,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_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; } @@ -414,6 +414,6 @@ static void window_new_campaign_paint() y += 13; // Total price - money32 totalPrice = AdvertisingCampaignPricePerWeek[w->var_480] * w->var_482; + money32 totalPrice = AdvertisingCampaignPricePerWeek[w->var_480] * 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..737bbea1c6 100644 --- a/src/window_new_ride.c +++ b/src/window_new_ride.c @@ -432,15 +432,15 @@ void window_new_ride_open() w->colours[1] = 26; w->colours[2] = 26; w->var_480 = -1; - w->var_482 = -1; + w->new_ride.selected_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.selected_ride_id = RCT2_ADDRESS(0x00F43825, sint16)[_window_new_ride_current_tab]; + if (w->new_ride.selected_ride_id == -1) + w->new_ride.selected_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->new_ride.selected_ride_id = -1; w->var_480 = -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.selected_ride_id = RCT2_ADDRESS(0x00F43825, sint16)[page]; + if (w->new_ride.selected_ride_id == -1) + w->new_ride.selected_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->var_480 != -1 && w->new_ride.selected_ride_countdown-- == 0) window_new_ride_select(w); } @@ -645,13 +645,14 @@ 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; @@ -659,7 +660,7 @@ static void window_new_ride_scrollmousedown() w->var_480 = *((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) 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.selected_ride_id == *((sint16*)&item)) return; - w->var_482 = *((sint16*)&item); + w->new_ride.selected_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.selected_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)) flags |= 0x20; - if (w->var_482 == *((sint16*)listItem) || flags != 0) + if (w->new_ride.selected_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++; diff --git a/src/window_news.c b/src/window_news.c index d8e9c27ef6..32967a3c76 100644 --- a/src/window_news.c +++ b/src/window_news.c @@ -146,7 +146,7 @@ static void window_news_update(rct_window *w) if (w->var_480 == -1) return; - if (--w->var_484 != 0) + if (--w->news.var_484 != 0) return; window_invalidate(w); @@ -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) @@ -251,8 +252,8 @@ static void window_news_scrollmousedown() if (buttonIndex != 0) { w->var_480 = i - 11; - w->var_482 = buttonIndex; - w->var_484 = 4; + w->news.var_482 = buttonIndex; + w->news.var_484 = 4; window_invalidate(w); sound_play_panned(SOUND_CLICK_1, w->x + (w->width / 2)); } @@ -330,7 +331,7 @@ static void window_news_scrollpaint() press = 0; if (w->var_480 != -1) { newsItem2 = &newsItems[11 + w->var_480]; - if (newsItem == newsItem2 && w->var_482 == 1) + 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); @@ -371,7 +372,7 @@ static void window_news_scrollpaint() press = 0; if (w->var_480 != -1) { newsItem2 = &newsItems[11 + w->var_480]; - if (newsItem == newsItem2 && w->var_482 == 2) + 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 8b72613e64..92c2579309 100644 --- a/src/window_park.c +++ b/src/window_park.c @@ -593,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->focus.coordinate.viewport_target_y = 0; w->frame_no = 0; w->list_information_type = -1; w->var_48C = -1; @@ -619,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->focus.coordinate.viewport_target_y = -1; + window->focus.coordinate.viewport_target_x = -1; } window->page = WINDOW_PARK_PAGE_ENTRANCE; @@ -1021,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->focus.coordinate.viewport_target_x = x; + w->focus.coordinate.viewport_target_y = y; + w->focus.sprite.type |= VIEWPORT_FOCUS_TYPE_COORDINATE; + w->focus.coordinate.viewport_target_z = z; + w->focus.coordinate.viewport_target_rotation = r; if (zr != 0xFFFF) { // Create viewport @@ -1036,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, + r, x, y, z, - xy&0xC0000000 >> 30, + w->focus.sprite.type & VIEWPORT_FOCUS_TYPE_MASK, -1 ); w->flags |= (1 << 2); @@ -1068,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->focus.coordinate.viewport_target_x = -1; + window->focus.coordinate.viewport_target_y = -1; } if (RCT2_GLOBAL(0x009DE518, uint32) & (1 << 3)) @@ -1202,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->focus.coordinate.viewport_target_x = -1; + window->focus.coordinate.viewport_target_y = -1; } if (RCT2_GLOBAL(0x009DE518, uint32) & (1 << 3)) @@ -1608,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->focus.coordinate.viewport_target_x = -1; + window->focus.coordinate.viewport_target_y = -1; } if (RCT2_GLOBAL(0x009DE518, uint32) & (1 << 3)) @@ -1771,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->focus.coordinate.viewport_target_x = -1; + window->focus.coordinate.viewport_target_y = -1; } if (RCT2_GLOBAL(0x009DE518, uint32) & (1 << 3)) diff --git a/src/window_peep.c b/src/window_peep.c index 4e1630bb1d..670558383f 100644 --- a/src/window_peep.c +++ b/src/window_peep.c @@ -24,6 +24,7 @@ #include "string_ids.h" #include "sprite.h" #include "sprites.h" +#include "viewport.h" #include "widget.h" #include "window.h" #include "window_dropdown.h" @@ -85,6 +86,8 @@ rct_widget *window_peep_page_widgets[] = { window_peep_overview_widgets }; +void window_peep_set_page(rct_window* w, int page); + void window_peep_close(); void window_peep_resize(); void window_peep_overview_mouse_up(int widgetIndex, rct_window* w, rct_widget* widget); @@ -153,8 +156,8 @@ uint32 window_peep_page_enabled_widgets[] = { (1 << WIDX_TAB_3) | (1 << WIDX_TAB_4) | (1 << WIDX_TAB_5) | - (1 << WIDX_TAB_6) | - (1 << WIDX_?), + (1 << WIDX_TAB_6), //| + //(1 << WIDX_?), (1 << WIDX_CLOSE) | (1 << WIDX_TAB_1) | @@ -201,7 +204,7 @@ 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->focus.coordinate.viewport_target_y = 0; window->frame_no = 0; window->list_information_type = 0; window->var_492 = 0; @@ -217,7 +220,7 @@ void window_peep_open(rct_peep* peep){ window->colours[0] = 1; window->colours[1] = 15; window->colours[2] = 15; - window->var_482 = -1; + window->focus.coordinate.viewport_target_y = -1; } window->page = 0; @@ -254,7 +257,7 @@ void window_peep_resize(){ window_get_register(w); RCT2_CALLPROC_EBPSAFE(0x6987a6); - RCT2_CALLPROC_EBPSAFE(w->eventhandler[WE_INVALIDATE]); + RCT2_CALLPROC_EBPSAFE(w->event_handlers[WE_INVALIDATE]); window_invalidate_by_id(0xA97,w->number); @@ -288,7 +291,7 @@ void window_peep_resize(){ if (view){ if ((w->width - 30) == view->width){ if ((w->height - 72) == view->height){ - RCT2_CALLPROC_X(0x0069883C, 0, 0, 0, 0, (int)window, 0, 0); + RCT2_CALLPROC_X(0x0069883C, 0, 0, 0, 0, (int)w, 0, 0); return; } } @@ -298,7 +301,7 @@ void window_peep_resize(){ view->view_width = view->width / zoom_amount; view->view_height = view->height / zoom_amount; } - RCT2_CALLPROC_X(0x0069883C, 0, 0, 0, 0, (int)window, 0, 0); + RCT2_CALLPROC_X(0x0069883C, 0, 0, 0, 0, (int)w, 0, 0); } /* rct2: 0x00696A06 */ @@ -307,13 +310,13 @@ void window_peep_overview_mouse_up(int widgetIndex, rct_window* w, rct_widget* w case WIDX_CLOSE: window_close(w); break; - case WIDX_TAB1: - case WIDX_TAB2: - case WIDX_TAB3: - case WIDX_TAB4: - case WIDX_TAB5: - case WIDX_TAB6: - window_peep_set_page(w, widgetIndex - WIDX_TAB1); + 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_RENAME: //696ba6 diff --git a/src/window_staff_peep.c b/src/window_staff_peep.c index d4bd010646..79316284b5 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->focus.coordinate.viewport_target_y = 0; w->frame_no = 0; RCT2_GLOBAL((int*)w + 0x496, uint16) = 0; // missing, var_494 should perhaps be uint16? From 5795165ceda1306f4aeb31e9d62b5af6161ec129 Mon Sep 17 00:00:00 2001 From: Duncan Frost Date: Fri, 22 Aug 2014 20:17:48 +0100 Subject: [PATCH 17/25] Fix missing variables. Labeled even more vars --- src/window.c | 2 +- src/window.h | 26 +++++++++++++++------ src/window_map.c | 2 +- src/window_new_campaign.c | 18 +++++++------- src/window_new_ride.c | 38 +++++++++++++++--------------- src/window_news.c | 18 +++++++------- src/window_peep.c | 39 ++++++++----------------------- src/window_title_scenarioselect.c | 2 +- 8 files changed, 69 insertions(+), 76 deletions(-) diff --git a/src/window.c b/src/window.c index 7286f78051..84f86ab4e6 100644 --- a/src/window.c +++ b/src/window.c @@ -395,7 +395,7 @@ 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->focus.coordinate.var_480 = 0; w->focus.coordinate.viewport_target_x = 0; w->focus.coordinate.viewport_target_y = 0; w->focus.coordinate.viewport_target_z = 0; diff --git a/src/window.h b/src/window.h index a16650603a..e8d5d4f376 100644 --- a/src/window.h +++ b/src/window.h @@ -95,6 +95,7 @@ typedef struct { // Type is viewport_target_y & 0x8000 == 0 typedef struct{ + sint16 var_480; sint16 viewport_target_x; //0x482 sint16 viewport_target_y; //0x484 & VIEWPORT_FOCUS_Y_MASK sint16 viewport_target_z; //0x486 @@ -104,6 +105,7 @@ typedef struct{ // Type is viewport_target_sprite_id & 0x80000000 != 0 typedef struct{ + sint16 var_480; uint16 viewport_target_sprite_id; //0x482 uint8 pad_484; uint8 type; //0x485 & VIEWPORT_FOCUS_TYPE_MASK @@ -119,7 +121,7 @@ enum{ /** * Viewport focus structure. - * size: 0x8 + * size: 0xA */ typedef union{ sprite_focus sprite; @@ -127,24 +129,35 @@ typedef union{ } viewport_focus; typedef struct{ - uint16 no_weeks; //0x482 + sint16 campaign_type; + sint16 no_weeks; //0x482 uint16 ride_id; //0x484 uint32 pad_486; } campaign_variables; typedef struct{ - uint16 selected_ride_id; //0x482 + 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{ - uint16 var_482; + 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 @@ -174,14 +187,13 @@ typedef struct rct_window { sint16 selected_list_item; // 0x47A -1 for none selected sint16 pad_47C; sint16 pad_47E; - sint16 var_480; union{ viewport_focus focus; campaign_variables campaign; new_ride_variables new_ride; news_variables news; + map_variables map; }; - //viewport_focus focus; // 0x482 viewport focus sint16 page; // 0x48A sint16 var_48C; sint16 frame_no; // 0x48E updated every tic for motion in windows sprites @@ -430,7 +442,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 fa45270c98..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,7 +162,7 @@ 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->campaign.no_weeks = 2; @@ -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->campaign.no_weeks<< 8) | 1, 0, (w->campaign.ride_id << 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; @@ -329,7 +329,7 @@ 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; @@ -355,7 +355,7 @@ 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; @@ -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->campaign.no_weeks; + 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 737bbea1c6..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->new_ride.selected_ride_id = -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->new_ride.selected_ride_id = RCT2_ADDRESS(0x00F43825, sint16)[_window_new_ride_current_tab]; - if (w->new_ride.selected_ride_id == -1) - w->new_ride.selected_ride_id = 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->new_ride.selected_ride_id = -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->new_ride.selected_ride_id = RCT2_ADDRESS(0x00F43825, sint16)[page]; - if (w->new_ride.selected_ride_id == -1) - w->new_ride.selected_ride_id = 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->new_ride.selected_ride_countdown-- == 0) + if (w->new_ride.selected_ride_countdown != -1 && w->new_ride.selected_ride_countdown-- == 0) window_new_ride_select(w); } @@ -657,7 +657,7 @@ static void window_new_ride_scrollmousedown() 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->new_ride.selected_ride_countdown = 8; @@ -676,14 +676,14 @@ static void window_new_ride_scrollmouseover() window_scrollmouse_get_registers(w, x, y); - if (w->var_480 != -1) + if (w->new_ride.selected_ride_countdown != -1) return; item = window_new_ride_scroll_get_ride_list_item_at(w, x, y); - if (w->new_ride.selected_ride_id == *((sint16*)&item)) + if (w->new_ride.highlighted_ride_id == *((sint16*)&item)) return; - w->new_ride.selected_ride_id = *((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); } @@ -739,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->new_ride.selected_ride_id); + ride_list_item item = *((ride_list_item*)&w->new_ride.highlighted_ride_id); if (item.type == 255 && item.entry_index == 255) return; @@ -832,9 +832,9 @@ static void window_new_ride_scrollpaint() 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->new_ride.selected_ride_id == *((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 @@ -973,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 32967a3c76..fa4f51e10d 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,7 +144,7 @@ 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->news.var_484 != 0) return; @@ -153,8 +153,8 @@ static void window_news_update(rct_window *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; @@ -251,7 +251,7 @@ static void window_news_scrollmousedown() } if (buttonIndex != 0) { - w->var_480 = i - 11; + w->news.var_480 = i - 11; w->news.var_482 = buttonIndex; w->news.var_484 = 4; window_invalidate(w); @@ -329,8 +329,8 @@ static void window_news_scrollpaint() yy = y + 14; press = 0; - if (w->var_480 != -1) { - newsItem2 = &newsItems[11 + w->var_480]; + if (w->news.var_480 != -1) { + newsItem2 = &newsItems[11 + w->news.var_480]; if (newsItem == newsItem2 && w->news.var_482 == 1) press = 0x20; } @@ -370,8 +370,8 @@ static void window_news_scrollpaint() yy = y + 14; press = 0; - if (w->var_480 != -1) { - newsItem2 = &newsItems[11 + w->var_480]; + if (w->news.var_480 != -1) { + newsItem2 = &newsItems[11 + w->news.var_480]; if (newsItem == newsItem2 && w->news.var_482 == 2) press = 0x20; } diff --git a/src/window_peep.c b/src/window_peep.c index 670558383f..1dc4c79f01 100644 --- a/src/window_peep.c +++ b/src/window_peep.c @@ -90,7 +90,7 @@ void window_peep_set_page(rct_window* w, int page); void window_peep_close(); void window_peep_resize(); -void window_peep_overview_mouse_up(int widgetIndex, rct_window* w, rct_widget* widget); +void window_peep_overview_mouse_up(); static void* window_peep_overview_events[] = { window_peep_close, @@ -226,10 +226,10 @@ void window_peep_open(rct_peep* peep){ window->page = 0; window_invalidate(window); - window->widgets = RCT2_GLOBAL(0x981D0C, rct_widget*); + 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); @@ -259,32 +259,9 @@ void window_peep_resize(){ RCT2_CALLPROC_EBPSAFE(0x6987a6); RCT2_CALLPROC_EBPSAFE(w->event_handlers[WE_INVALIDATE]); - window_invalidate_by_id(0xA97,w->number); + window_invalidate_by_id(0xA97, w->number); - w->min_width = 192; - w->max_width = 500; - w->min_height = 159; - w->max_height = 450; - - if (w->min_width > w->width){ - w->width = w->min_width; - window_invalidate(w); - } - - if (w->max_width < w->width){ - w->width = w->max_width; - window_invalidate(w); - } - - if (w->min_height > w->height){ - w->height = w->min_height; - window_invalidate(w); - } - - if (w->max_height < w->height){ - w->height = w->max_height; - window_invalidate(w); - } + window_set_resize(w, 192, 159, 500, 450); rct_viewport* view = w->viewport; @@ -305,7 +282,11 @@ void window_peep_resize(){ } /* rct2: 0x00696A06 */ -void window_peep_overview_mouse_up(int widgetIndex, rct_window* w, rct_widget* widget){ +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); diff --git a/src/window_title_scenarioselect.c b/src/window_title_scenarioselect.c index d567c9ff4f..cd7ef7d7b1 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->focus.coordinate.var_480 = -1; window->var_494 = 0; window_scenarioselect_init_tabs(); From 810590e7546f052aed85189dfb4395ef0d86dd9c Mon Sep 17 00:00:00 2001 From: Duncan Frost Date: Sat, 23 Aug 2014 08:30:31 +0100 Subject: [PATCH 18/25] Changed struct for last time --- src/window.c | 22 ++++++++++---------- src/window.h | 27 +++++++++++------------- src/window_news.c | 2 +- src/window_park.c | 34 +++++++++++++++---------------- src/window_peep.c | 4 ++-- src/window_staff_peep.c | 2 +- src/window_title_scenarioselect.c | 2 +- 7 files changed, 45 insertions(+), 48 deletions(-) diff --git a/src/window.c b/src/window.c index 84f86ab4e6..50b7be7162 100644 --- a/src/window.c +++ b/src/window.c @@ -395,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->focus.coordinate.var_480 = 0; - w->focus.coordinate.viewport_target_x = 0; - w->focus.coordinate.viewport_target_y = 0; - w->focus.coordinate.viewport_target_z = 0; - w->focus.coordinate.viewport_target_rotation = 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; @@ -896,18 +896,18 @@ 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->focus.coordinate.viewport_target_y == -1) + if (w->viewport == NULL || w->viewport_focus_coordinates.y == -1) return; - if (w->focus.sprite.type & VIEWPORT_FOCUS_TYPE_SPRITE) { - rct_sprite *sprite = &(g_sprite_list[w->focus.sprite.viewport_target_sprite_id]); + 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->focus.coordinate.viewport_target_x; - y = w->focus.coordinate.viewport_target_y & VIEWPORT_FOCUS_Y_MASK; - z = w->focus.coordinate.viewport_target_z; + 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(); diff --git a/src/window.h b/src/window.h index e8d5d4f376..6124c0374d 100644 --- a/src/window.h +++ b/src/window.h @@ -93,20 +93,24 @@ typedef struct { sint16 v_thumb_bottom; // 0x10 } rct_scroll; -// Type is viewport_target_y & 0x8000 == 0 +/** + * Viewport focus structure. + * size: 0xA + * Use sprite.type to work out type. + */ typedef struct{ sint16 var_480; - sint16 viewport_target_x; //0x482 - sint16 viewport_target_y; //0x484 & VIEWPORT_FOCUS_Y_MASK - sint16 viewport_target_z; //0x486 - uint8 viewport_target_rotation;//0x488 + 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 viewport_target_sprite_id; //0x482 + uint16 sprite_id; //0x482 uint8 pad_484; uint8 type; //0x485 & VIEWPORT_FOCUS_TYPE_MASK uint32 pad_486; @@ -119,14 +123,6 @@ enum{ }; #define VIEWPORT_FOCUS_Y_MASK 0x3FFF; -/** - * Viewport focus structure. - * size: 0xA - */ -typedef union{ - sprite_focus sprite; - coordinate_focus coordinate; -} viewport_focus; typedef struct{ sint16 campaign_type; @@ -188,7 +184,8 @@ typedef struct rct_window { sint16 pad_47C; sint16 pad_47E; union{ - viewport_focus focus; + coordinate_focus viewport_focus_coordinates; + sprite_focus viewport_focus_sprite; campaign_variables campaign; new_ride_variables new_ride; news_variables news; diff --git a/src/window_news.c b/src/window_news.c index fa4f51e10d..9c431422e4 100644 --- a/src/window_news.c +++ b/src/window_news.c @@ -319,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); diff --git a/src/window_park.c b/src/window_park.c index 92c2579309..c9643861c4 100644 --- a/src/window_park.c +++ b/src/window_park.c @@ -593,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->focus.coordinate.viewport_target_y = 0; + w->viewport_focus_coordinates.y = 0; w->frame_no = 0; w->list_information_type = -1; w->var_48C = -1; @@ -619,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->focus.coordinate.viewport_target_y = -1; - window->focus.coordinate.viewport_target_x = -1; + window->viewport_focus_coordinates.y = -1; + window->viewport_focus_coordinates.x = -1; } window->page = WINDOW_PARK_PAGE_ENTRANCE; @@ -1021,11 +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->focus.coordinate.viewport_target_x = x; - w->focus.coordinate.viewport_target_y = y; - w->focus.sprite.type |= VIEWPORT_FOCUS_TYPE_COORDINATE; - w->focus.coordinate.viewport_target_z = z; - w->focus.coordinate.viewport_target_rotation = r; + 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 @@ -1041,7 +1041,7 @@ static void window_park_init_viewport(rct_window *w) x, y, z, - w->focus.sprite.type & VIEWPORT_FOCUS_TYPE_MASK, + w->viewport_focus_sprite.type & VIEWPORT_FOCUS_TYPE_MASK, -1 ); w->flags |= (1 << 2); @@ -1069,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->focus.coordinate.viewport_target_x = -1; - window->focus.coordinate.viewport_target_y = -1; + window->viewport_focus_coordinates.x = -1; + window->viewport_focus_coordinates.y = -1; } if (RCT2_GLOBAL(0x009DE518, uint32) & (1 << 3)) @@ -1203,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->focus.coordinate.viewport_target_x = -1; - window->focus.coordinate.viewport_target_y = -1; + window->viewport_focus_coordinates.x = -1; + window->viewport_focus_coordinates.y = -1; } if (RCT2_GLOBAL(0x009DE518, uint32) & (1 << 3)) @@ -1609,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->focus.coordinate.viewport_target_x = -1; - window->focus.coordinate.viewport_target_y = -1; + window->viewport_focus_coordinates.x = -1; + window->viewport_focus_coordinates.y = -1; } if (RCT2_GLOBAL(0x009DE518, uint32) & (1 << 3)) @@ -1772,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->focus.coordinate.viewport_target_x = -1; - window->focus.coordinate.viewport_target_y = -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 1dc4c79f01..2d36f8b80a 100644 --- a/src/window_peep.c +++ b/src/window_peep.c @@ -204,7 +204,7 @@ 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->focus.coordinate.viewport_target_y = 0; + window->viewport_focus_coordinates.y = 0; window->frame_no = 0; window->list_information_type = 0; window->var_492 = 0; @@ -220,7 +220,7 @@ void window_peep_open(rct_peep* peep){ window->colours[0] = 1; window->colours[1] = 15; window->colours[2] = 15; - window->focus.coordinate.viewport_target_y = -1; + window->viewport_focus_coordinates.y = -1; } window->page = 0; diff --git a/src/window_staff_peep.c b/src/window_staff_peep.c index 79316284b5..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->focus.coordinate.viewport_target_y = 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 cd7ef7d7b1..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->focus.coordinate.var_480 = -1; + window->viewport_focus_coordinates.var_480 = -1; window->var_494 = 0; window_scenarioselect_init_tabs(); From 84d4747a60091f8458a82eaafdc773da2c9e8ae7 Mon Sep 17 00:00:00 2001 From: zsilencer Date: Sat, 23 Aug 2014 02:44:06 -0600 Subject: [PATCH 19/25] Decompiled function 0x006AF561 --- src/ride.h | 7 +++++-- src/string_ids.h | 7 +++++++ src/window_ride_list.c | 45 +++++++++++++++++++++++++++++++++++++----- 3 files changed, 52 insertions(+), 7 deletions(-) diff --git a/src/ride.h b/src/ride.h index 264e7c13f4..bd6d50acba 100644 --- a/src/ride.h +++ b/src/ride.h @@ -103,10 +103,13 @@ typedef struct { uint8 pad_14E[0x06]; uint32 var_154; uint16 var_158; - uint8 pad_15A[0x26]; + uint8 pad_15A; + uint8 num_riders; // 0x15B + uint8 pad_15C[0x24]; uint16 build_date; sint16 upkeep_cost; // 0x182 - uint8 pad_184[0x12]; + uint16 race_winner; // 0x184 + uint8 pad_186[0x10]; uint16 var_196; // used in computing excitement, nausea, etc uint8 var_198; diff --git a/src/string_ids.h b/src/string_ids.h index aabbb8442c..3e88d090ea 100644 --- a/src/string_ids.h +++ b/src/string_ids.h @@ -134,6 +134,8 @@ enum { enum { STR_NONE = -1, + STR_GUEST = 767, + STR_DATE_DAY_1 = 779, STR_DATE_DAY_2 = STR_DATE_DAY_1 + 1, STR_DATE_DAY_3 = STR_DATE_DAY_1 + 2, @@ -287,6 +289,8 @@ enum { STR_OPEN = 1196, STR_BROKEN_DOWN = 1197, STR_CRASHED = 1198, + STR_PERSON_ON_RIDE = 1199, + STR_PEOPLE_ON_RIDE = 1200, STR_QUEUE_EMPTY = 1201, STR_QUEUE_ONE_PERSON = 1202, @@ -357,6 +361,9 @@ enum { STR_CANT_OPEN_PARK = 1723, STR_CANT_CLOSE_PARK = 1724, + STR_RACE_WON_BY_GUEST = 1739, + STR_RACE_WON_BY = 1740, + STR_INDIVIDUAL_GUESTS_TIP = 1752, STR_SUMMARISED_GUESTS_TIP = 1753, STR_ADMISSION_PRICE = 1756, diff --git a/src/window_ride_list.c b/src/window_ride_list.c index d49c487778..c0a801181b 100644 --- a/src/window_ride_list.c +++ b/src/window_ride_list.c @@ -23,6 +23,7 @@ #include "game.h" #include "ride.h" #include "string_ids.h" +#include "sprite.h" #include "sprites.h" #include "widget.h" #include "window.h" @@ -437,11 +438,45 @@ static void window_ride_list_paint() */ static void ride_get_status(int rideIndex, int *formatSecondary, int *argument) { - int eax = 0, ebx = 0, ecx = 0, edx, esi = 0, edi = 0, ebp = 0; - edx = rideIndex; - RCT2_CALLFUNC_X(0x006AF561, &eax, &ebx, &ecx, &edx, &esi, &edi, &ebp); - *formatSecondary = ebx & 0xFFFF; - *argument = eax; + rct_ride *ride = &g_ride_list[rideIndex]; + + if (ride->lifecycle_flags & RIDE_LIFECYCLE_CRASHED) { + *formatSecondary = STR_CRASHED; + return; + } + if (ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN) { + *formatSecondary = STR_BROKEN_DOWN; + return; + } + if (ride->status == RIDE_STATUS_CLOSED) { + *formatSecondary = STR_CLOSED; + return; + } + if (ride->status == RIDE_STATUS_TESTING) { + *formatSecondary = STR_TEST_RUN; + return; + } + ride->mode = RIDE_MODE_RACE; + rct_peep *peep = GET_PEEP(ride->race_winner); + if (ride->mode == RIDE_MODE_RACE && !(ride->lifecycle_flags & RIDE_LIFECYCLE_PASS_STATION_NO_STOPPING) && ride->race_winner != 0xFFFF && peep->sprite_identifier == SPRITE_IDENTIFIER_PEEP) { + if (peep->name_string_idx == STR_GUEST) { + *argument = peep->id; + *formatSecondary = STR_RACE_WON_BY_GUEST; + } else { + *argument = peep->name_string_idx; + *formatSecondary = STR_RACE_WON_BY; + } + } else { + if (!(RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + ride->type * 8, uint32) & 0x20000)) { + *formatSecondary = STR_PERSON_ON_RIDE; + *argument = ride->num_riders; + if(*argument != 1) { + *formatSecondary = STR_PEOPLE_ON_RIDE; + } + } else { + *formatSecondary = STR_OPEN; + } + } } /** From 5ff2d9e6b37785cec5105eaf0ba721ed84010dcd Mon Sep 17 00:00:00 2001 From: zsilencer Date: Sat, 23 Aug 2014 02:49:50 -0600 Subject: [PATCH 20/25] remove test --- src/window_ride_list.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/window_ride_list.c b/src/window_ride_list.c index c0a801181b..d5693d7914 100644 --- a/src/window_ride_list.c +++ b/src/window_ride_list.c @@ -456,7 +456,6 @@ static void ride_get_status(int rideIndex, int *formatSecondary, int *argument) *formatSecondary = STR_TEST_RUN; return; } - ride->mode = RIDE_MODE_RACE; rct_peep *peep = GET_PEEP(ride->race_winner); if (ride->mode == RIDE_MODE_RACE && !(ride->lifecycle_flags & RIDE_LIFECYCLE_PASS_STATION_NO_STOPPING) && ride->race_winner != 0xFFFF && peep->sprite_identifier == SPRITE_IDENTIFIER_PEEP) { if (peep->name_string_idx == STR_GUEST) { @@ -468,11 +467,11 @@ static void ride_get_status(int rideIndex, int *formatSecondary, int *argument) } } else { if (!(RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + ride->type * 8, uint32) & 0x20000)) { - *formatSecondary = STR_PERSON_ON_RIDE; *argument = ride->num_riders; - if(*argument != 1) { + *formatSecondary = STR_PERSON_ON_RIDE; + if(*argument != 1) *formatSecondary = STR_PEOPLE_ON_RIDE; - } + } else { *formatSecondary = STR_OPEN; } From b9d8ac6ac14dbf1d45f35b6c6955e5c7270c7463 Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Sat, 23 Aug 2014 11:02:41 +0200 Subject: [PATCH 21/25] Many additional translations, some fixes --- data/language/dutch.txt | 400 ++++++++++++++++++++-------------------- 1 file changed, 200 insertions(+), 200 deletions(-) diff --git a/data/language/dutch.txt b/data/language/dutch.txt index eea7109b11..0a8c69568c 100644 --- a/data/language/dutch.txt +++ b/data/language/dutch.txt @@ -42,7 +42,7 @@ STR_0040 :Attractie STR_0041 :Attractie STR_0042 :Attractie STR_0043 :Attractie -STR_0044 :Omgekeerde vrijvalachtbaan +STR_0044 :Omgekeerde vrijevalachtbaan STR_0045 :Lift STR_0046 :Attractie STR_0047 :Attractie @@ -836,7 +836,7 @@ STR_0834 :{SMALLFONT}{BLACK}Schijf- en spelopties STR_0835 :Kan het spel niet initialiseren STR_0836 :Kan het spel niet in geminimaliseerde toestand starten STR_0837 :Kan het grafisch systeem niet starten -STR_0838 :CD-code {INT32} is niet geldig voor deze CD van RollerCoaster Tycoon 2 CD!{WINDOW_COLOUR_1}{WINDOW_COLOUR_1}Deïnstalleer RollerCoaster Tycoon 2% en installeer het opnieuw met de correcte CD-code +STR_0838 :CD-code {INT32} is niet geldig voor deze CD van RollerCoaster Tycoon 2!{WINDOW_COLOUR_1}{WINDOW_COLOUR_1}Deïnstalleer RollerCoaster Tycoon 2% en installeer het opnieuw met de correcte CD-code STR_0839 :{UINT16} x {UINT16} STR_0840 :{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{UINT16} x {UINT16} STR_0841 :Bureaubladvenster @@ -1031,7 +1031,7 @@ STR_1029 :Kan niet gedeeltelijk boven en onder water bouwen! STR_1030 :Dit kan alleen onder water worden gebouwd! STR_1031 :Dit kan niet onder water worden gebouwd! STR_1032 :Dit kan alleen op water worden gebouwd! -STR_1033 :Dit kan alleen bouwen de grond worden gebouwd! +STR_1033 :Dit kan alleen boven de grond worden gebouwd! STR_1034 :Dit kan alleen op land worden gebouwd! STR_1035 :De gemeente staat geen constructies boven boomniveau toe! STR_1036 :Spel laden @@ -1060,7 +1060,7 @@ STR_1058 :Voer een nieuwe naam in voor deze attractie: STR_1059 :Kan deze attractienaam geen andere naam geven... STR_1060 :Ongeldige attractienaam STR_1061 :Normale stand -STR_1062 :Continu circuit +STR_1062 :Voortdurend circuit STR_1063 :Lancering via achterwaartse optakeling STR_1064 :Lancering STR_1065 :Shuttlestand @@ -1093,7 +1093,7 @@ STR_1091 :Circusmodus STR_1092 :Neerwaartse lancering STR_1093 :Crooked housestand STR_1094 :Vrijevalmodus -STR_1095 :Continuous circuit met blokken +STR_1095 :Voortdurend circuit met blokken STR_1096 :Lancering STR_1097 :Lancering met blokken STR_1098 :Gaat naar het einde van {POP16}{STRINGID} @@ -1197,11 +1197,11 @@ STR_1195 :Testrit STR_1196 :Open STR_1197 :Defect STR_1198 :Neergestort! -STR_1199 :{COMMA16} persoon aan boord -STR_1200 :{COMMA16} mensen aan boord +STR_1199 :{COMMA16} passagier +STR_1200 :{COMMA16} passagiers STR_1201 :Niemand in de wachtrij -STR_1202 :1 persoon in de wachtrij -STR_1203 :{COMMA16} mensen in de wachtrij +STR_1202 :1 bezoeker in de wachtrij +STR_1203 :{COMMA16} bezoekers in de wachtrij STR_1204 :{COMMA16} minuut wachttijd STR_1205 :{COMMA16} minuten wachttijd STR_1206 :{WINDOW_COLOUR_2}Wacht op: @@ -1558,7 +1558,7 @@ STR_1556 :{SMALLFONT}{OPENQUOTES}Zoveel betaal ik niet voor een paraplu van { STR_1557 :{SMALLFONT}{OPENQUOTES}Zoveel betaal ik niet voor frisdrank van {STRINGID}{ENDQUOTES} STR_1558 :{SMALLFONT}{OPENQUOTES}Zoveel betaal ik niet voor een hamburger {STRINGID}{ENDQUOTES} STR_1559 :{SMALLFONT}{OPENQUOTES}Zoveel betaal ik niet voor frietjes van {STRINGID}{ENDQUOTES} -STR_1560 :{SMALLFONT}{OPENQUOTES}Zoveel betaal ik niet voor een ijstje van {STRINGID}{ENDQUOTES} +STR_1560 :{SMALLFONT}{OPENQUOTES}Zoveel betaal ik niet voor een ijsje van {STRINGID}{ENDQUOTES} STR_1561 :{SMALLFONT}{OPENQUOTES}Zoveel betaal ik niet voor een suikerspin van {STRINGID}{ENDQUOTES} STR_1562 : STR_1563 : @@ -1590,13 +1590,13 @@ STR_1588 :{SMALLFONT}{OPENQUOTES}Deze warme chocolademelk van {STRINGID} is e STR_1589 :{SMALLFONT}{OPENQUOTES}Deze ijsthee van {STRINGID} is erg goedkoop{ENDQUOTES} STR_1590 :{SMALLFONT}{OPENQUOTES}Deze funnel cake van {STRINGID} is erg goedkoop{ENDQUOTES} STR_1591 :{SMALLFONT}{OPENQUOTES}Deze zonnebril van {STRINGID} is erg goedkoop{ENDQUOTES} -STR_1592 :{SMALLFONT}{OPENQUOTES}These beef noodles van {STRINGID} is erg goedkoop{ENDQUOTES} -STR_1593 :{SMALLFONT}{OPENQUOTES}These fried rice noodles van {STRINGID} is erg goedkoop{ENDQUOTES} -STR_1594 :{SMALLFONT}{OPENQUOTES}This wonton soup van {STRINGID} is erg goedkoop{ENDQUOTES} -STR_1595 :{SMALLFONT}{OPENQUOTES}This meatball soup van {STRINGID} is erg goedkoop{ENDQUOTES} +STR_1592 :{SMALLFONT}{OPENQUOTES}Deze rundernoedels van {STRINGID} zijn erg goedkoop{ENDQUOTES} +STR_1593 :{SMALLFONT}{OPENQUOTES}Deze rijstnoedels van {STRINGID} zijn erg goedkoop{ENDQUOTES} +STR_1594 :{SMALLFONT}{OPENQUOTES}Deze wantansoep van {STRINGID} is erg goedkoop{ENDQUOTES} +STR_1595 :{SMALLFONT}{OPENQUOTES}Deze soep met balletjes van {STRINGID} is erg goedkoop{ENDQUOTES} STR_1596 :{SMALLFONT}{OPENQUOTES}Dit sap van {STRINGID} is erg goedkoop{ENDQUOTES} STR_1597 :{SMALLFONT}{OPENQUOTES}Deze sojamelk van {STRINGID} is erg goedkoop{ENDQUOTES} -STR_1598 :{SMALLFONT}{OPENQUOTES}This sujongkwa van {STRINGID} is erg goedkoop{ENDQUOTES} +STR_1598 :{SMALLFONT}{OPENQUOTES}Deze sujeonggwa van {STRINGID} is erg goedkoop{ENDQUOTES} STR_1599 :{SMALLFONT}{OPENQUOTES}Dit broodje van {STRINGID} is erg goedkoop{ENDQUOTES} STR_1600 :{SMALLFONT}{OPENQUOTES}Dit koekje van {STRINGID} is erg goedkoop{ENDQUOTES} STR_1601 : @@ -1622,13 +1622,13 @@ STR_1620 :{SMALLFONT}{OPENQUOTES}Zoveel betaal ik niet voor warme chocolademe STR_1621 :{SMALLFONT}{OPENQUOTES}Zoveel betaal ik niet voor ijsthee van {STRINGID}{ENDQUOTES} STR_1622 :{SMALLFONT}{OPENQUOTES}Zoveel betaal ik niet voor een funnel cake van {STRINGID}{ENDQUOTES} STR_1623 :{SMALLFONT}{OPENQUOTES}Zoveel betaal ik niet voor een zonnebril van {STRINGID}{ENDQUOTES} -STR_1624 :{SMALLFONT}{OPENQUOTES}Zoveel betaal ik niet voor beef noodles van {STRINGID}{ENDQUOTES} -STR_1625 :{SMALLFONT}{OPENQUOTES}Zoveel betaal ik niet voor fried rice noodles van {STRINGID}{ENDQUOTES} -STR_1626 :{SMALLFONT}{OPENQUOTES}Zoveel betaal ik niet voor wonton soup van {STRINGID}{ENDQUOTES} -STR_1627 :{SMALLFONT}{OPENQUOTES}Zoveel betaal ik niet voor meatball soup van {STRINGID}{ENDQUOTES} +STR_1624 :{SMALLFONT}{OPENQUOTES}Zoveel betaal ik niet voor rundernoedels van {STRINGID}{ENDQUOTES} +STR_1625 :{SMALLFONT}{OPENQUOTES}Zoveel betaal ik niet voor rijstnoedels van {STRINGID}{ENDQUOTES} +STR_1626 :{SMALLFONT}{OPENQUOTES}Zoveel betaal ik niet voor wantansoep van {STRINGID}{ENDQUOTES} +STR_1627 :{SMALLFONT}{OPENQUOTES}Zoveel betaal ik niet voor soep met balletjes van {STRINGID}{ENDQUOTES} STR_1628 :{SMALLFONT}{OPENQUOTES}Zoveel betaal ik niet voor sap van {STRINGID}{ENDQUOTES} STR_1629 :{SMALLFONT}{OPENQUOTES}Zoveel betaal ik niet voor sojamelk van {STRINGID}{ENDQUOTES} -STR_1630 :{SMALLFONT}{OPENQUOTES}Zoveel betaal ik niet voor sujongkwa van {STRINGID}{ENDQUOTES} +STR_1630 :{SMALLFONT}{OPENQUOTES}Zoveel betaal ik niet voor sujeonggwa van {STRINGID}{ENDQUOTES} STR_1631 :{SMALLFONT}{OPENQUOTES}Zoveel betaal ik niet voor een broodje van {STRINGID}{ENDQUOTES} STR_1632 :{SMALLFONT}{OPENQUOTES}Zoveel betaal ik niet voor een koekje van {STRINGID}{ENDQUOTES} STR_1633 : @@ -1766,9 +1766,9 @@ STR_1764 :Balkendrempels STR_1765 :Actiefoto-installatie STR_1766 :Draaischijf STR_1767 :Draaiende tunnel -STR_1768 :Can't change number of swings... -STR_1769 :{WINDOW_COLOUR_2}Number of swings: -STR_1770 :{SMALLFONT}{BLACK}Number of complete swings +STR_1768 :Kan het aantal schommelingen niet aanpassen... +STR_1769 :{WINDOW_COLOUR_2}Aantal schommelingen: +STR_1770 :{SMALLFONT}{BLACK}Aantal complete schommelingen STR_1771 :{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{COMMA16} STR_1772 :{COMMA16} STR_1773 :Een attractie mag maar één actiefoto-installatie hebben @@ -1790,8 +1790,8 @@ STR_1788 :{INLINE_SPRITE}{07}{20}{00}{00} Sheriffkostuum STR_1789 :{INLINE_SPRITE}{08}{20}{00}{00} Piratenpak STR_1790 :{SMALLFONT}{BLACK}Selecteer de uniformkleur voor dit type werknemer STR_1791 :{WINDOW_COLOUR_2}Uniformkleur: -STR_1792 :Gaat naar {STRINGID} voor een reparatie -STR_1793 :Gaat naar {STRINGID} voor een inspectie +STR_1792 :Gaat {STRINGID} repareren +STR_1793 :Gaat {STRINGID} inspecteren STR_1794 :Repareert {STRINGID} STR_1795 :Beantwoordt radio-oproep STR_1796 :Is defect en moet worden gerepareerd @@ -1814,16 +1814,16 @@ STR_1812 :{SMALLFONT}{BLACK}{STRINGID} STR_1813 :Overige objecten STR_1814 :Acties STR_1815 :Gedachten -STR_1816 :{SMALLFONT}{BLACK}Select information type to show in guest list +STR_1816 :{SMALLFONT}{BLACK}Selecteer het type informatie dat je in de gastenlijst wilt zien STR_1817 :({COMMA16}) STR_1818 :{WINDOW_COLOUR_2}Alle bezoekers STR_1819 :{WINDOW_COLOUR_2}Alle bezoekers (samengevat) -STR_1820 :{WINDOW_COLOUR_2}Guests {STRINGID} -STR_1821 :{WINDOW_COLOUR_2}Guests thinking {STRINGID} -STR_1822 :{WINDOW_COLOUR_2}Guests thinking about {POP16}{STRINGID} -STR_1823 :{SMALLFONT}{BLACK}Show guests' thoughts about this ride/attraction -STR_1824 :{SMALLFONT}{BLACK}Show guests on this ride/attraction -STR_1825 :{SMALLFONT}{BLACK}Show guests queuing for this ride/attraction +STR_1820 :{WINDOW_COLOUR_2}Bezoekers die {STRINGID} +STR_1821 :{WINDOW_COLOUR_2}Bezoekers die {STRINGID} denken +STR_1822 :{WINDOW_COLOUR_2}Bezoekers met gedachten over {POP16}{STRINGID} +STR_1823 :{SMALLFONT}{BLACK}Toon de gedachten van bezoekers over deze attractie +STR_1824 :{SMALLFONT}{BLACK}Toon de bezoekers in deze attractie +STR_1825 :{SMALLFONT}{BLACK}Toon de bezoekers die in de rij staan voor deze attractie STR_1826 :Status STR_1827 :Populariteit STR_1828 :Voldoening @@ -1842,15 +1842,15 @@ STR_1840 :Stilstandtijd: {COMMA16}% STR_1841 :Winst: {CURRENCY} per uur STR_1842 :Favoriete attractie van: {COMMA16} bezoeker STR_1843 :Favoriete attractie van: {COMMA16} bezoekers -STR_1844 :{SMALLFONT}{BLACK}Select information type to show in ride/attraction list +STR_1844 :{SMALLFONT}{BLACK}Selecteer het type informatie dat je in de attractielijst wilt zien STR_1845 :{MONTHYEAR} STR_1846 :{COMMA16} bezoekers STR_1847 :{INLINE_SPRITE}{11}{20}{00}{00}{COMMA16} bezoekers STR_1848 :{INLINE_SPRITE}{10}{20}{00}{00}{COMMA16} bezoekers STR_1849 :{WINDOW_COLOUR_2}Draai muziek -STR_1850 :{SMALLFONT}{BLACK}Select whether music should be played for this ride -STR_1851 :{WINDOW_COLOUR_2}Running cost: {BLACK}{CURRENCY2DP} per hour -STR_1852 :{WINDOW_COLOUR_2}Running cost: {BLACK}Unknown +STR_1850 :{SMALLFONT}{BLACK}Selecteer of er in deze attractie muziek moet worden gedraaid +STR_1851 :{WINDOW_COLOUR_2}Bedrijfskosten: {BLACK}{CURRENCY2DP} per uur +STR_1852 :{WINDOW_COLOUR_2}Bedrijfskosten: {BLACK}Onbekend STR_1853 :{WINDOW_COLOUR_2}Bouw: {BLACK}dit jaar STR_1854 :{WINDOW_COLOUR_2}Bouw: {BLACK}vorig jaar STR_1855 :{WINDOW_COLOUR_2}Bouw: {BLACK}{COMMA16} jaar geleden @@ -1867,15 +1867,15 @@ STR_1865 :Bewaker STR_1866 :Entertainer STR_1867 :{BLACK}{COMMA16} {STRINGID} STR_1868 :Kan het aantal rotaties niet aanpassen... -STR_1869 :{WINDOW_COLOUR_2}Number of rotations: -STR_1870 :{SMALLFONT}{BLACK}Number of complete rotations +STR_1869 :{WINDOW_COLOUR_2}Aantal rotaties: +STR_1870 :{SMALLFONT}{BLACK}Aantal complete rotaties STR_1871 :{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{COMMA16} STR_1872 :{COMMA16} STR_1873 :{WINDOW_COLOUR_2}Inkomsten: {BLACK}{CURRENCY} per uur STR_1874 :{WINDOW_COLOUR_2}Winst: {BLACK}{CURRENCY} per uur STR_1875 :{BLACK} {SPRITE}{BLACK} {STRINGID} -STR_1876 :{WINDOW_COLOUR_2}{INLINE_SPRITE}{251}{19}{00}{00}Inspect Rides -STR_1877 :{WINDOW_COLOUR_2}{INLINE_SPRITE}{252}{19}{00}{00}Fix Rides +STR_1876 :{WINDOW_COLOUR_2}{INLINE_SPRITE}{251}{19}{00}{00}Attracties inspecteren +STR_1877 :{WINDOW_COLOUR_2}{INLINE_SPRITE}{252}{19}{00}{00}Attracties repareren STR_1878 :{WINDOW_COLOUR_2}Inspectie: STR_1879 :Elke 10 minuten STR_1880 :Elke 20 minutes @@ -1884,16 +1884,16 @@ STR_1882 :Elke 45 minutes STR_1883 :Elk uur STR_1884 :Elke 2 uur STR_1885 :Nooit -STR_1886 :Inspecting {STRINGID} -STR_1887 :{WINDOW_COLOUR_2}Time since last inspection: {BLACK}{COMMA16} minutes -STR_1888 :{WINDOW_COLOUR_2}Time since last inspection: {BLACK}more than 4 hours +STR_1886 :Inspecteert {STRINGID} +STR_1887 :{WINDOW_COLOUR_2}Tijd sinds laatste inspectie: {BLACK}{COMMA16} minuten +STR_1888 :{WINDOW_COLOUR_2}Tijd sinds laatste inspectie: {BLACK}meer dan 4 uur STR_1889 :{WINDOW_COLOUR_2}Stilstandtijd: {MOVE_X}{255}{BLACK}{COMMA16}% -STR_1890 :{SMALLFONT}{BLACK}Select how often a mechanic should check this ride -STR_1891 :No {STRINGID} in park yet! +STR_1890 :{SMALLFONT}{BLACK}Selecteer hoe vaak een monteur deze attractie moet inspecteren +STR_1891 :Nog geen {STRINGID} in het park! STR_1892 :RollerCoaster Tycoon 2 -STR_1893 :Please insert your RollerCoaster Tycoon 2 CD in the folLaaging drive:- +STR_1893 :Voer je CD van RollerCoaster Tycoon 2 in het volgende stationCD in the folLaaging drive: STR_1894 :{WINDOW_COLOUR_2}{STRINGID} verkocht: {BLACK}{COMMA32} -STR_1895 :{SMALLFONT}{BLACK}Build new ride/attraction +STR_1895 :{SMALLFONT}{BLACK}Nieuwe attractie bouwen STR_1896 :{WINDOW_COLOUR_2}Uitgaven/Inkomsten STR_1897 :{WINDOW_COLOUR_2}Attractiebouw STR_1898 :{WINDOW_COLOUR_2}Attractiebedrijf @@ -1935,18 +1935,18 @@ STR_1933 :{STRINGID} is nu in {STRINGID} STR_1934 :{STRINGID} heeft {STRINGID} verlaten STR_1935 :{STRINGID} heeft het park verlaten STR_1936 :{STRINGID} heeft {STRINGID} gekocht -STR_1937 :{SMALLFONT}{BLACK}Show information about the subject of this message -STR_1938 :{SMALLFONT}{BLACK}Show view of guest -STR_1939 :{SMALLFONT}{BLACK}Show view of staff member -STR_1940 :{SMALLFONT}{BLACK}Show happiness, energy, hunger etc. for this guest -STR_1941 :{SMALLFONT}{BLACK}Show which rides this guest has been on -STR_1942 :{SMALLFONT}{BLACK}Show financial information about this guest -STR_1943 :{SMALLFONT}{BLACK}Show guest's recent thoughts -STR_1944 :{SMALLFONT}{BLACK}Show items guest is carrying -STR_1945 :{SMALLFONT}{BLACK}Show orders and options for this staff member -STR_1946 :{SMALLFONT}{BLACK}Select costume for this entertainer -STR_1947 :{SMALLFONT}{BLACK}Show areas patrolled by selected staff type, and locate the nearest staff member -STR_1948 :{SMALLFONT}{BLACK}Hire a new staff member of the selected type +STR_1937 :{SMALLFONT}{BLACK}Informatie tonen over het onderwerp van dit bericht +STR_1938 :{SMALLFONT}{BLACK}Beeld van bezoeker tonen +STR_1939 :{SMALLFONT}{BLACK}Beeld van werknemer tonen +STR_1940 :{SMALLFONT}{BLACK}Stemming, energie, hongerniveau e.d. van deze bezoeker tonen +STR_1941 :{SMALLFONT}{BLACK}Tonen in welke attracties deze bezoeker is geweest +STR_1942 :{SMALLFONT}{BLACK}Financiële informatie over deze bezoeker tonen +STR_1943 :{SMALLFONT}{BLACK}Recente gedachten van deze bezoeker tonen +STR_1944 :{SMALLFONT}{BLACK}Toon de dingen die de gast bij zich heeft +STR_1945 :{SMALLFONT}{BLACK}Orders en opties voor deze werknemer tonen +STR_1946 :{SMALLFONT}{BLACK}Kostuum van deze entertainer selecteren +STR_1947 :{SMALLFONT}{BLACK}Werkgebieden van het geselecteerde type werknemer weergeven, en de dichtstbijzijnde werknemer localiseren +STR_1948 :{SMALLFONT}{BLACK}Nieuwe werknemer van het geselecteerde type aannemen STR_1949 :Samenvatting financiën STR_1950 :Grafiek financiën STR_1951 :Grafiek van parkwaardering @@ -2015,25 +2015,25 @@ STR_2013 :Limonade STR_2014 :Lege doos STR_2015 :Lege fles STR_2016 :Ballonnen -STR_2017 :Cuddly Toys -STR_2018 :Park Maps +STR_2017 :Knuffels +STR_2018 :Parkplattegronden STR_2019 :Actiefoto's -STR_2020 :Umbrellas -STR_2021 :Drinks -STR_2022 :Burgers -STR_2023 :Fries -STR_2024 :Ice Creams -STR_2025 :Cotton Candy -STR_2026 :Empty Cans -STR_2027 :Rubbish -STR_2028 :Empty Burger Boxes -STR_2029 :Pizzas -STR_2030 :Vouchers -STR_2031 :Popcorn -STR_2032 :Hot Dogs -STR_2033 :Tentacles -STR_2034 :Hats -STR_2035 :Candy Apples +STR_2020 :Paraplu's +STR_2021 :Blikjes frisdrank +STR_2022 :Hamburgers +STR_2023 :Zakjes fries +STR_2024 :IJsjes +STR_2025 :Suikerspinnen +STR_2026 :Lege blikjes +STR_2027 :Stuks rommel +STR_2028 :Lege hamburgerdozen +STR_2029 :Pizza's +STR_2030 :Bonnen +STR_2031 :Bakjes popcorn +STR_2032 :Hotdogs +STR_2033 :Tentakels +STR_2034 :Hoeden +STR_2035 :Toffeeappels STR_2036 :T-shirts STR_2037 :Donuts STR_2038 :Kopjes koffie @@ -2106,13 +2106,13 @@ STR_2104 :{WINDOW_COLOUR_2}Prijs warme chocolademelk: STR_2105 :{WINDOW_COLOUR_2}Prijs ijsthee: STR_2106 :{WINDOW_COLOUR_2}Prijs funnel cake: STR_2107 :{WINDOW_COLOUR_2}Prijs zonnebril: -STR_2108 :{WINDOW_COLOUR_2}Beef Noodles price: -STR_2109 :{WINDOW_COLOUR_2}Fried Rice Noodles price: -STR_2110 :{WINDOW_COLOUR_2}Wonton Soup price: -STR_2111 :{WINDOW_COLOUR_2}Meatball Soup price: +STR_2108 :{WINDOW_COLOUR_2}Prijs rundernoedels: +STR_2109 :{WINDOW_COLOUR_2}Prijs rijstnoedels: +STR_2110 :{WINDOW_COLOUR_2}Prijs wantansoep: +STR_2111 :{WINDOW_COLOUR_2}Prijs soep met balletjes: STR_2112 :{WINDOW_COLOUR_2}Prijs sap: STR_2113 :{WINDOW_COLOUR_2}Prijs sojamelk: -STR_2114 :{WINDOW_COLOUR_2}Sujongkwa price: +STR_2114 :{WINDOW_COLOUR_2}Prijs sujeonggwa: STR_2115 :{WINDOW_COLOUR_2}Prijs broodje: STR_2116 :{WINDOW_COLOUR_2}Prijs koekje: STR_2117 :{WINDOW_COLOUR_2} @@ -2128,13 +2128,13 @@ STR_2126 :Warme chocolademelk STR_2127 :IJsthee STR_2128 :Funnel cake STR_2129 :Zonnebril -STR_2130 :Beef Noodles -STR_2131 :Fried Rice Noodles -STR_2132 :Wonton Soup -STR_2133 :Meatball Soup +STR_2130 :Rundernoedels +STR_2131 :Rijstnoedels +STR_2132 :Wantansoep +STR_2133 :Soep met balletjes STR_2134 :Sap STR_2135 :Sojamelk -STR_2136 :Sujongkwa +STR_2136 :Sujeonggwa STR_2137 :Broodje STR_2138 :Koekje STR_2139 :Lege kom @@ -2148,22 +2148,22 @@ STR_2146 :Actiefoto's STR_2147 :Krakelingen STR_2148 :Warme chocolademelk STR_2149 :IJsthee -STR_2150 :Funnel Cakes -STR_2151 :Sunglasses -STR_2152 :Beef Noodles -STR_2153 :Fried Rice Noodles -STR_2154 :Wonton Soups -STR_2155 :Meatball Soups +STR_2150 :Funnel cakes +STR_2151 :Zonnebrillen +STR_2152 :Rundernoedels +STR_2153 :Rijstnoedels +STR_2154 :Kommen wantansoep +STR_2155 :Kommen soep met balletjes STR_2156 :Sap STR_2157 :Sojamelk -STR_2158 :Sujongkwa +STR_2158 :Sujeonggwa STR_2159 :Broodjes STR_2160 :Koekjes STR_2161 :Lege kommen -STR_2162 :Empty Drink Cartons -STR_2163 :Empty Juice cups -STR_2164 :gebraden worsts -STR_2165 :Empty Bowls +STR_2162 :Lege drinkkartons +STR_2163 :Lege sapbekers +STR_2164 :gebraden worsten +STR_2165 :Lege kommen STR_2166 :een actiefoto STR_2167 :een actiefoto STR_2168 :een actiefoto @@ -2172,41 +2172,41 @@ STR_2170 :warme chocolademelk STR_2171 :ijsthee STR_2172 :een funnel cake STR_2173 :een zonnebril -STR_2174 :some Beef Noodles -STR_2175 :some Fried Rice Noodles -STR_2176 :some Wonton Soup -STR_2177 :some Meatball Soup +STR_2174 :rundernoedels +STR_2175 :rijstnoedels +STR_2176 :wantansoep +STR_2177 :soep met balletjes STR_2178 :sap STR_2179 :sojamelk -STR_2180 :some Sujongkwa +STR_2180 :sujeonggwa STR_2181 :een broodje STR_2182 :een koekje -STR_2183 :an Empty Bowl -STR_2184 :an Empty Drink Carton -STR_2185 :an Empty Juice Cup -STR_2186 :a gebraden worst -STR_2187 :an Empty Bowl +STR_2183 :een lege kom +STR_2184 :een leeg drinkarton +STR_2185 :een lege sapbeker +STR_2186 :een gebraden worst +STR_2187 :een lege kom STR_2188 :Actiefoto van {STRINGID} STR_2189 :Actiefoto van {STRINGID} STR_2190 :Actiefoto van {STRINGID} -STR_2191 :krakeling -STR_2192 :warme chocolademelk -STR_2193 :ijsthee +STR_2191 :Krakeling +STR_2192 :Warme chocolademelk +STR_2193 :IJsthee STR_2194 :Funnel cake STR_2195 :Zonnebril -STR_2196 :Beef Noodles -STR_2197 :Fried Rice Noodles -STR_2198 :Wonton Soup -STR_2199 :Meatball Soup -STR_2200 :sap -STR_2201 :sojamelk -STR_2202 :Sujongkwa -STR_2203 :Sub Sandwich -STR_2204 :Cookie -STR_2205 :Empty Bowl -STR_2206 :Empty Drink Carton -STR_2207 :Empty Juice Cup -STR_2208 :gebraden worst +STR_2196 :Rundernoedels +STR_2197 :Rijstnoedels +STR_2198 :Wantansoep +STR_2199 :Soep met balletjes +STR_2200 :Sap +STR_2201 :Sojamelk +STR_2202 :Sujeonggwa +STR_2203 :Broodje +STR_2204 :Koekje +STR_2205 :Lege kom +STR_2206 :Leeg drinkkarton +STR_2207 :Lege sapbeker +STR_2208 :Gebraden worst STR_2209 :Lege kom STR_2210 :{SMALLFONT}{BLACK}Toon lijst van klusjesmannen in het park STR_2211 :{SMALLFONT}{BLACK}Toon lijst van monteurs in het park @@ -2227,7 +2227,7 @@ STR_2225 :{WINDOW_COLOUR_2}Contant: {RED}{CURRENCY2DP} STR_2226 :{WINDOW_COLOUR_2}Parkwaarde: {BLACK}{CURRENCY} STR_2227 :{WINDOW_COLOUR_2}Bedrijfswaarde: {BLACK}{CURRENCY} STR_2228 :{WINDOW_COLOUR_2}Inkomsten horeca en merchandise{NEWLINE}vorige maand: {BLACK}{CURRENCY} -STR_2229 :Helling omhoog naar vertical +STR_2229 :Helling omhoog naar verticaal STR_2230 :Verticale baan STR_2231 :Vasthoudrem voor afdaling STR_2232 :Kabelliftheuvel @@ -2247,10 +2247,10 @@ STR_2245 :oktober STR_2246 :november STR_2247 :december STR_2248 :Kan deze attractie niet afbreken... -STR_2249 :{BABYBLUE}New ride/attraction now available:-{NEWLINE}{STRINGID} -STR_2250 :{BABYBLUE}New scenery/themeing now available:-{NEWLINE}{STRINGID} -STR_2251 :Can only be built on paths! -STR_2252 :Can only be built across paths! +STR_2249 :{BABYBLUE}Nieuwe attractie is nu beschikbaar:{NEWLINE}{STRINGID} +STR_2250 :{BABYBLUE}Nieuw decor/thema is nu beschikbaar:{NEWLINE}{STRINGID} +STR_2251 :Kan alleen op paden worden gebouwd! +STR_2252 :Kan alleen over paden worden gebouwd! STR_2253 :Transportattracties STR_2254 :Rustige attracties STR_2255 :Achtbanen @@ -2272,9 +2272,9 @@ STR_2270 :{WINDOW_COLOUR_2}Voortgang: {BLACK}{STRINGID} STR_2271 :{WINDOW_COLOUR_2}Verwacht: {BLACK}{STRINGID} STR_2272 :{WINDOW_COLOUR_2}Attractie:{NEWLINE}{BLACK}{STRINGID} STR_2273 :{WINDOW_COLOUR_2}Decor/thema:{NEWLINE}{BLACK}{STRINGID} -STR_2274 :{SMALLFONT}{BLACK}Show details of this invention or development -STR_2275 :{SMALLFONT}{BLACK}Show funding and options for research & development -STR_2276 :{SMALLFONT}{BLACK}Show research & development status +STR_2274 :{SMALLFONT}{BLACK}Details van deze uitvinding of ontwikkeling tonen +STR_2275 :{SMALLFONT}{BLACK}Budget en opties voor onderzoek en ontwikkeling tonen +STR_2276 :{SMALLFONT}{BLACK}Status van onderzoek en ontwikkeling tonen STR_2277 :Onbekend STR_2278 :Transportattractie STR_2279 :Rustige attractie @@ -2289,26 +2289,26 @@ STR_2287 :Ontwerp voltooien STR_2288 :Onbekend STR_2289 :{STRINGID} {STRINGID} STR_2290 :{SMALLFONT}{BLACK}{STRINGID} {STRINGID} -STR_2291 :Select scenario for new game -STR_2292 :{WINDOW_COLOUR_2}Rides been on: +STR_2291 :Selecteer een scenario voor een nieuw spel +STR_2292 :{WINDOW_COLOUR_2}Bezochte attracties: STR_2293 :{BLACK} Geen -STR_2294 :{SMALLFONT}{BLACK}Change base land style -STR_2295 :{SMALLFONT}{BLACK}Change vertical edges of land -STR_2296 :{BLACK}{CURRENCY2DP}{WINDOW_COLOUR_2} paid to enter park -STR_2297 :{BLACK}{CURRENCY2DP}{WINDOW_COLOUR_2} spent on {BLACK}{COMMA16} ride -STR_2298 :{BLACK}{CURRENCY2DP}{WINDOW_COLOUR_2} spent on {BLACK}{COMMA16} rides -STR_2299 :{BLACK}{CURRENCY2DP}{WINDOW_COLOUR_2} spent on {BLACK}{COMMA16} item of food -STR_2300 :{BLACK}{CURRENCY2DP}{WINDOW_COLOUR_2} spent on {BLACK}{COMMA16} items of food -STR_2301 :{BLACK}{CURRENCY2DP}{WINDOW_COLOUR_2} spent on {BLACK}{COMMA16} drink -STR_2302 :{BLACK}{CURRENCY2DP}{WINDOW_COLOUR_2} spent on {BLACK}{COMMA16} drinks -STR_2303 :{BLACK}{CURRENCY2DP}{WINDOW_COLOUR_2} spent on {BLACK}{COMMA16} souvenir -STR_2304 :{BLACK}{CURRENCY2DP}{WINDOW_COLOUR_2} spent on {BLACK}{COMMA16} souvenirs -STR_2305 :Track design files -STR_2306 :Save track design -STR_2307 :Select {STRINGID} design -STR_2308 :{STRINGID} Track Designs -STR_2309 :Install New Track Design -STR_2310 :Build custom design +STR_2294 :{SMALLFONT}{BLACK}Bovenkant land aanpassen +STR_2295 :{SMALLFONT}{BLACK}Zijkant land aanpassen +STR_2296 :{BLACK}{CURRENCY2DP}{WINDOW_COLOUR_2} betaald voor entree +STR_2297 :{BLACK}{CURRENCY2DP}{WINDOW_COLOUR_2} uitgeven aan {BLACK}{COMMA16} attractie +STR_2298 :{BLACK}{CURRENCY2DP}{WINDOW_COLOUR_2} uitgegeven aan {BLACK}{COMMA16} attracties +STR_2299 :{BLACK}{CURRENCY2DP}{WINDOW_COLOUR_2} uitgegeven aan {BLACK}{COMMA16} stuk voedsel +STR_2300 :{BLACK}{CURRENCY2DP}{WINDOW_COLOUR_2} uitgegeven aan {BLACK}{COMMA16} stuks voedsel +STR_2301 :{BLACK}{CURRENCY2DP}{WINDOW_COLOUR_2} uitgegeven aan {BLACK}{COMMA16} drankjr +STR_2302 :{BLACK}{CURRENCY2DP}{WINDOW_COLOUR_2} uitgegeven aan {BLACK}{COMMA16} drankjes +STR_2303 :{BLACK}{CURRENCY2DP}{WINDOW_COLOUR_2} uitgegeven aan {BLACK}{COMMA16} souvenir +STR_2304 :{BLACK}{CURRENCY2DP}{WINDOW_COLOUR_2} uitgegeven aan {BLACK}{COMMA16} souvenirs +STR_2305 :Baantontwerpbestanden +STR_2306 :Baanontwerp opslaan +STR_2307 :Ontwerp voor {STRINGID} selecteren +STR_2308 :Baanontwerpen voor {STRINGID} +STR_2309 :Nieuw baanontwerp installeren +STR_2310 :Eigen ontwerp bouwen STR_2311 :{WINDOW_COLOUR_2}Spanningswaarde: {BLACK}{COMMA2DP32} (ongeveer) STR_2312 :{WINDOW_COLOUR_2}Intensiteitswaarde: {BLACK}{COMMA2DP32} (ongeveer) STR_2313 :{WINDOW_COLOUR_2}Misselheidswaarde: {BLACK}{COMMA2DP32} (ongeveer) @@ -2376,82 +2376,82 @@ STR_2374 :Hoog STR_2375 :Zeer hoog STR_2376 :Extreem STR_2377 :Ultra-extreem -STR_2378 :{SMALLFONT}{BLACK}Adjust smaller area of land -STR_2379 :{SMALLFONT}{BLACK}Adjust larger area of land -STR_2380 :{SMALLFONT}{BLACK}Adjust smaller area of water -STR_2381 :{SMALLFONT}{BLACK}Adjust larger area of water +STR_2378 :{SMALLFONT}{BLACK}Kleiner stuk land aanpassen +STR_2379 :{SMALLFONT}{BLACK}Groter stuk land aanpassen +STR_2380 :{SMALLFONT}{BLACK}Kleiner stuk water aanpassen +STR_2381 :{SMALLFONT}{BLACK}Groter stuk water aanpassen STR_2382 :Land STR_2383 :Water STR_2384 :{WINDOW_COLOUR_2}Je doel: STR_2385 :{BLACK}Geen STR_2386 :{BLACK}Om minstens {COMMA16} bezoekers in je park toe hebben aan het einde van {MONTHYEAR}, met een parkwaardering van ten minste 600 -STR_2387 :{BLACK}To achieve a park value of at least {POP16}{POP16}{CURRENCY} at the end of {PUSH16}{PUSH16}{PUSH16}{MONTHYEAR} +STR_2387 :{BLACK}Om een parkwaarde van minstens {POP16}{POP16}{CURRENCY} te hebben aan het einde van {PUSH16}{PUSH16}{PUSH16}{MONTHYEAR} STR_2388 :{BLACK}Om plezier te hebben! -STR_2389 :{BLACK}Build the best {STRINGID} you can! -STR_2390 :{BLACK}To have 10 different types of roller coasters operating in your park, each with an excitement value of at least 6.00 -STR_2391 :{BLACK}To have at least {COMMA16} guests in your park. You must not let the park rating drop beLaag 700 at any time! -STR_2392 :{BLACK}To achieve a monthly income from ride tickets of at least {POP16}{POP16}{CURRENCY} -STR_2393 :{BLACK}To have 10 different types of roller coasters operating in your park, each with a minimum length of {LENGTH}, and an excitement rating of at least 7.00 -STR_2394 :{BLACK}To finish building all 5 of the partially built roller coasters in this park, designing them to achieve excitement ratings of at least {POP16}{POP16}{COMMA2DP32} each -STR_2395 :{BLACK}To repay your loan and achieve a park value of at least {POP16}{POP16}{CURRENCY} -STR_2396 :{BLACK}To achieve a monthly profit from food, drink and merchandise sales of at least {POP16}{POP16}{CURRENCY} +STR_2389 :{BLACK}Om de beste {STRINGID} te bouwen! +STR_2390 :{BLACK}Om 10 verschillende typen achtbanen in je park te hebben, elk met een spanningswaarde van minstens 6,00 +STR_2391 :{BLACK}Om minstens {COMMA16} bezoekers in je park te hebben. Je parkwaardering mag geen moment onder de 700 komen! +STR_2392 :{BLACK}Om in één maand minstens {POP16}{POP16}{CURRENCY} aan attractiekaartjes te verdienen +STR_2393 :{BLACK}Om 10 verschillende typen achtbanen in je park te hebben, elk met een lengte van minstens {LENGTH}, en een spanningswaarde van minstens 7,00 +STR_2394 :{BLACK}Om alle 5 deels gebouwde achtbanen in je park af te maken, ek met een spanningswaarde van minstens {POP16}{POP16}{COMMA2DP32} +STR_2395 :{BLACK}Om je lening terug te betalen en een parkwaarde van minstens {POP16}{POP16}{CURRENCY} te bereiken +STR_2396 :{BLACK}Om in één maand minstens {POP16}{POP16}{CURRENCY} aan de verkoop van eten, drinken en merchandise te verdienen STR_2397 :Geen -STR_2398 :Number of guests at a given date -STR_2399 :Park value at a given date -STR_2400 :Have fun -STR_2401 :Build the best ride you can -STR_2402 :Build 10 roller coasters -STR_2403 :Number of guests in park -STR_2404 :Monthly income from ride tickets -STR_2405 :Build 10 roller coasters of a given length -STR_2406 :Finish building 5 roller coasters -STR_2407 :Repay loan and achieve a given park value -STR_2408 :Monthly profit from food/merchandise -STR_2409 :{WINDOW_COLOUR_2}Marketing campaigns in operation +STR_2398 :Aantal bezoekers op een bepaalde datum +STR_2399 :Parkwaarde op een bepaalde datum +STR_2400 :Plezier hebben +STR_2401 :De beste attractie te bouwen +STR_2402 :10 achtbanen bouwen +STR_2403 :Aantal bezoekers in het park +STR_2404 :Maandelijks inkomen van attractiekaartjes +STR_2405 :10 achtbanen van een bepaalde lengte bouwen +STR_2406 :5 achtbanen afmaken +STR_2407 :Lening terugbetalen en een bepaalde parkwaarde bereiken +STR_2408 :Maandelijks inkomen van voedsel/merchandise +STR_2409 :{WINDOW_COLOUR_2}Lopende marketingcampagnes STR_2410 :{BLACK}Geen -STR_2411 :{WINDOW_COLOUR_2}Marketing campaigns available -STR_2412 :{SMALLFONT}{BLACK}Start this marketing campaign +STR_2411 :{WINDOW_COLOUR_2}Beschikbare marketingcampagnes +STR_2412 :{SMALLFONT}{BLACK}Deze marketingcampagne starten STR_2413 :{BLACK}({CURRENCY2DP} per week) -STR_2414 :(Not Selected) -STR_2415 :{WINDOW_COLOUR_2}Ride: +STR_2414 :(niet geselecteerd) +STR_2415 :{WINDOW_COLOUR_2}Attractie: STR_2416 :{WINDOW_COLOUR_2}Item: -STR_2417 :{WINDOW_COLOUR_2}Length of time: +STR_2417 :{WINDOW_COLOUR_2}Tijdsduur: STR_2418 :Gratis entree voor {STRINGID} STR_2419 :Gratis toegang tot {STRINGID} -STR_2420 :Half-price entry to {STRINGID} +STR_2420 :50% korting op entree voor {STRINGID} STR_2421 :Gratis {STRINGID} STR_2422 :Advertentiecampagne voor {STRINGID} STR_2423 :Advertentiecampagne voor {STRINGID} -STR_2424 :{WINDOW_COLOUR_2}Vouchers for free entry to the park -STR_2425 :{WINDOW_COLOUR_2}Vouchers for free rides on a particular ride -STR_2426 :{WINDOW_COLOUR_2}Vouchers for half-price entry to the park -STR_2427 :{WINDOW_COLOUR_2}Vouchers for free food or drink -STR_2428 :{WINDOW_COLOUR_2}Advertising campaign for the park -STR_2429 :{WINDOW_COLOUR_2}Advertising campaign for a particular ride -STR_2430 :{BLACK}Vouchers for free entry to {STRINGID} -STR_2431 :{BLACK}Vouchers for free ride on {STRINGID} -STR_2432 :{BLACK}Vouchers for half-price entry to {STRINGID} -STR_2433 :{BLACK}Vouchers for free {STRINGID} -STR_2434 :{BLACK}Advertising campaign for {STRINGID} -STR_2435 :{BLACK}Advertising campaign for {STRINGID} +STR_2424 :{WINDOW_COLOUR_2}Bonnen voor gratis entree +STR_2425 :{WINDOW_COLOUR_2}Bonnen voor gratis ritten op een bepaalde attractie +STR_2426 :{WINDOW_COLOUR_2}Bonnen voor 50% korting op de entreeprijs +STR_2427 :{WINDOW_COLOUR_2}Bonnen voor gratis eten of drinken +STR_2428 :{WINDOW_COLOUR_2}Advertentiecampagne voor het park +STR_2429 :{WINDOW_COLOUR_2}Advertentiecampagne voor een bepaalde attractie +STR_2430 :{BLACK}Bonnen voor gratis entree voor {STRINGID} +STR_2431 :{BLACK}Bonnen voor een gratis rit in {STRINGID} +STR_2432 :{BLACK}Bonnen voor 50% korting op entree voor {STRINGID} +STR_2433 :{BLACK}Bonnen voor gratis {STRINGID} +STR_2434 :{BLACK}Advertentiecampagne voor {STRINGID} +STR_2435 :{BLACK}Advertentiecampagne voor {STRINGID} STR_2436 :1 week STR_2437 :2 weken STR_2438 :3 weken STR_2439 :4 weken STR_2440 :5 weken STR_2441 :6 weken -STR_2442 :{BLACK}({STRINGID} remaining) -STR_2443 :{WINDOW_COLOUR_2}Cost per week: {BLACK}{CURRENCY2DP} -STR_2444 :{WINDOW_COLOUR_2}Total cost: {BLACK}{CURRENCY2DP} -STR_2445 :Start this marketing campaign +STR_2442 :{BLACK}({STRINGID} resterend) +STR_2443 :{WINDOW_COLOUR_2}Kosten per week: {BLACK}{CURRENCY2DP} +STR_2444 :{WINDOW_COLOUR_2}Totale kosten: {BLACK}{CURRENCY2DP} +STR_2445 :Start deze marketingcampagne STR_2446 :{YELLOW}Your marketing campaign for free entry to the park has finished STR_2447 :{YELLOW}Your marketing campaign for free rides on {STRINGID} has finished STR_2448 :{YELLOW}Your marketing campaign for half-price entry to the park has finished STR_2449 :{YELLOW}Your marketing campaign for free {STRINGID} has finished STR_2450 :{YELLOW}Your advertising campaign for the park has finished STR_2451 :{YELLOW}Your advertising campaign for {STRINGID} has finished -STR_2452 :{WINDOW_COLOUR_2}Cash (less loan): {BLACK}{CURRENCY2DP} -STR_2453 :{WINDOW_COLOUR_2}Cash (less loan): {RED}{CURRENCY2DP} +STR_2452 :{WINDOW_COLOUR_2}Saldo (zonder lening): {BLACK}{CURRENCY2DP} +STR_2453 :{WINDOW_COLOUR_2}Saldo (zonder lening): {RED}{CURRENCY2DP} STR_2454 :{SMALLFONT}{BLACK}{CURRENCY2DP} - STR_2455 :{SMALLFONT}{BLACK}+{CURRENCY2DP} - STR_2456 :{SMALLFONT}{BLACK}{CURRENCY2DP} - From 0b20bb79b8d7a6a6a48b3a6174b96281e2d07c1d Mon Sep 17 00:00:00 2001 From: Duncan Frost Date: Sat, 23 Aug 2014 10:39:15 +0100 Subject: [PATCH 22/25] Added window_peep_viewport_init --- src/peep.c | 8 +++ src/peep.h | 1 + src/ride.h | 2 +- src/vehicle.h | 3 + src/window_peep.c | 145 ++++++++++++++++++++++++++++++++++++++++++---- 5 files changed, 147 insertions(+), 12 deletions(-) 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 be34a4eb33..461725e79f 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/window_peep.c b/src/window_peep.c index 2d36f8b80a..5f11ec43ce 100644 --- a/src/window_peep.c +++ b/src/window_peep.c @@ -20,6 +20,8 @@ #include "addresses.h" #include "game.h" +#include "map.h" +#include "ride.h" #include "peep.h" #include "string_ids.h" #include "sprite.h" @@ -49,11 +51,12 @@ enum WINDOW_PEEP_WIDGET_IDX { WIDX_TAB_4, WIDX_TAB_5, WIDX_TAB_6, - WIDX_MARQUEE, + + WIDX_MARQUEE = 10, WIDX_VIEWPORT, - WIDX_ACTION_LBL, - WIDX_RENAME, + WIDX_ACTION_LBL, WIDX_PICKUP, + WIDX_RENAME, WIDX_LOCATE, WIDX_TRACK }; @@ -74,8 +77,8 @@ 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 }, @@ -87,6 +90,7 @@ rct_widget *window_peep_page_widgets[] = { }; void window_peep_set_page(rct_window* w, int page); +void window_peep_disable_widgets(rct_window* w); void window_peep_close(); void window_peep_resize(); @@ -209,7 +213,7 @@ void window_peep_open(rct_peep* peep){ 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; @@ -232,11 +236,34 @@ void window_peep_open(rct_peep* peep){ 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); } +/* 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; @@ -256,7 +283,7 @@ void window_peep_resize(){ window_get_register(w); - RCT2_CALLPROC_EBPSAFE(0x6987a6); + window_peep_disable_widgets(w); RCT2_CALLPROC_EBPSAFE(w->event_handlers[WE_INVALIDATE]); window_invalidate_by_id(0xA97, w->number); @@ -299,10 +326,10 @@ void window_peep_overview_mouse_up(){ case WIDX_TAB_6: window_peep_set_page(w, widgetIndex - WIDX_TAB_1); break; - case WIDX_RENAME: + case WIDX_PICKUP: //696ba6 break; - case WIDX_PICKUP: + case WIDX_RENAME: //696e4d break; case WIDX_LOCATE: @@ -345,7 +372,7 @@ void window_peep_set_page(rct_window* w, int page){ w->event_handlers = window_peep_page_events[page]; w->pressed_widgets = 0; w->widgets = window_peep_page_widgets[page]; - RCT2_CALLPROC_X(0x6987A6, 0, 0, 0, 0, (int) w, 0, 0); + window_peep_disable_widgets(w); window_invalidate(w); RCT2_CALLPROC_X(w->event_handlers[WE_RESIZE], 0, 0, 0, 0, (int)w, 0, 0); @@ -356,3 +383,99 @@ void window_peep_set_page(rct_window* w, int page){ if (listen && w->viewport) w->viewport->flags |= VIEWPORT_FLAG_SOUND_ON; } + + +void window_peep_viewport_init(rct_window* w){ + if (w->page != WINDOW_PEEP_OVERVIEW) return; + int edx = w->number; + int ecx = 0; + //edi + rct_peep* peep = GET_PEEP(w->number); + + if (peep->state == PEEP_STATE_PICKED){ + edx = -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 == 0x8000)){ + + 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); + } + + edx = train->sprite_index; + final_check = 0; + } + } + if (peep->x == 0x8000 && 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; + ecx = height << 16; + edx = ((y << 16) & 0xFFFF0000) | x; + edx |= 0x40000000; + } + else{ + edx |= 0xC0000000; + ecx &= 0xFFFF; + } + ecx &= 0xFFFF0000; + ecx |= RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_ROTATION, uint8) << 8; + } +//698935 + rct_viewport* viewport; + uint16 viewport_flags; + + if (w->viewport){ + //Check all combos, for now skipping y and rot + if (edx & 0xFFFF == w->viewport_focus_coordinates.x && ecx & 0xFFFF == w->viewport_focus_coordinates.z) + return; + viewport = w->viewport; + w->viewport = 0; + viewport_flags = viewport->flags; + viewport->width = 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 = edx; + w->viewport_focus_coordinates.y = edx >> 16; + w->viewport_focus_coordinates.z = ecx; + w->viewport_focus_coordinates.rotation = ecx >> 16; + + if (edx != 0xFFFF){ + if (!(w->viewport)){ + int eax = RCT2_GLOBAL(0x9AC3FE, uint16); + int ebx = RCT2_GLOBAL(0x9AC400, uint16); + eax <<= 16; + ebx <<= 16; + eax |= RCT2_GLOBAL(0x9AC3FA, uint16); + ebx |= RCT2_GLOBAL(0x9AC3FC, uint16); + ebx -= eax; + ebx -= 0x10001; + eax &= 0x10001; + eax += w->x; + viewport_create(w, x, y, width, height, zoom, center_x, center_y, center_z, flags, sprite); + w->flags |= WF_2; + window_invalidate(w); + } + } + viewport = w->viewport; + if (w->viewport) + viewport->flags = viewport_flags; + window_invalidate(w); +} \ No newline at end of file From 7d29081331f281c3f0f54f1297de6dbf187c4c22 Mon Sep 17 00:00:00 2001 From: Duncan Frost Date: Sat, 23 Aug 2014 11:56:20 +0100 Subject: [PATCH 23/25] Fix remaining issues. Viewport init working --- src/viewport.c | 6 ++-- src/window.h | 4 ++- src/window_park.c | 2 +- src/window_peep.c | 91 +++++++++++++++++++++++++---------------------- 4 files changed, 56 insertions(+), 47 deletions(-) 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.h b/src/window.h index 6124c0374d..bab8718775 100644 --- a/src/window.h +++ b/src/window.h @@ -113,7 +113,9 @@ typedef struct{ uint16 sprite_id; //0x482 uint8 pad_484; uint8 type; //0x485 & VIEWPORT_FOCUS_TYPE_MASK - uint32 pad_486; + uint16 pad_486; + uint8 rotation; //0x488 + uint8 pad_489; } sprite_focus; #define VIEWPORT_FOCUS_TYPE_MASK 0xC0 diff --git a/src/window_park.c b/src/window_park.c index c9643861c4..39b982ae1b 100644 --- a/src/window_park.c +++ b/src/window_park.c @@ -1037,7 +1037,7 @@ static void window_park_init_viewport(rct_window *w) w->y + viewportWidget->top + 1, (viewportWidget->right - viewportWidget->left) - 2, (viewportWidget->bottom - viewportWidget->top) - 2, - r, + 0, x, y, z, diff --git a/src/window_peep.c b/src/window_peep.c index 5f11ec43ce..06f522b3cd 100644 --- a/src/window_peep.c +++ b/src/window_peep.c @@ -91,6 +91,7 @@ rct_widget *window_peep_page_widgets[] = { 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(); @@ -238,7 +239,7 @@ void window_peep_open(rct_peep* peep){ 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 @@ -295,7 +296,7 @@ void window_peep_resize(){ if (view){ if ((w->width - 30) == view->width){ if ((w->height - 72) == view->height){ - RCT2_CALLPROC_X(0x0069883C, 0, 0, 0, 0, (int)w, 0, 0); + window_peep_viewport_init(w); return; } } @@ -305,7 +306,7 @@ void window_peep_resize(){ view->view_width = view->width / zoom_amount; view->view_height = view->height / zoom_amount; } - RCT2_CALLPROC_X(0x0069883C, 0, 0, 0, 0, (int)w, 0, 0); + window_peep_viewport_init(w); } /* rct2: 0x00696A06 */ @@ -384,22 +385,27 @@ void window_peep_set_page(rct_window* w, int page){ 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; - int edx = w->number; - int ecx = 0; - //edi + + 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){ - edx = -1; + 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 == 0x8000)){ + || (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){ @@ -410,39 +416,42 @@ void window_peep_viewport_init(rct_window* w){ train = GET_VEHICLE(train->next_vehicle_on_train); } - edx = train->sprite_index; + focus.sprite.sprite_id = train->sprite_index; final_check = 0; } } - if (peep->x == 0x8000 && final_check){ + 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; - ecx = height << 16; - edx = ((y << 16) & 0xFFFF0000) | x; - edx |= 0x40000000; + focus.coordinate.x = x; + focus.coordinate.y = y; + focus.coordinate.z = height; + focus.sprite.type |= VIEWPORT_FOCUS_TYPE_COORDINATE; } else{ - edx |= 0xC0000000; - ecx &= 0xFFFF; + focus.sprite.type |= VIEWPORT_FOCUS_TYPE_SPRITE | VIEWPORT_FOCUS_TYPE_COORDINATE; + focus.sprite.pad_486 &= 0xFFFF; } - ecx &= 0xFFFF0000; - ecx |= RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_ROTATION, uint8) << 8; + focus.coordinate.rotation = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_ROTATION, uint8); } -//698935 - rct_viewport* viewport; + uint16 viewport_flags; if (w->viewport){ //Check all combos, for now skipping y and rot - if (edx & 0xFFFF == w->viewport_focus_coordinates.x && ecx & 0xFFFF == w->viewport_focus_coordinates.z) + 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 = w->viewport; + + viewport_flags = w->viewport->flags; + w->viewport->width = 0; w->viewport = 0; - viewport_flags = viewport->flags; - viewport->width = 0; + viewport_update_pointers(); } else{ @@ -452,30 +461,28 @@ void window_peep_viewport_init(rct_window* w){ } RCT2_CALLPROC_X(w->event_handlers[WE_INVALIDATE], 0, 0, 0, 0, (int)w, 0, 0); - w->viewport_focus_coordinates.x = edx; - w->viewport_focus_coordinates.y = edx >> 16; - w->viewport_focus_coordinates.z = ecx; - w->viewport_focus_coordinates.rotation = ecx >> 16; - if (edx != 0xFFFF){ + 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)){ - int eax = RCT2_GLOBAL(0x9AC3FE, uint16); - int ebx = RCT2_GLOBAL(0x9AC400, uint16); - eax <<= 16; - ebx <<= 16; - eax |= RCT2_GLOBAL(0x9AC3FA, uint16); - ebx |= RCT2_GLOBAL(0x9AC3FC, uint16); - ebx -= eax; - ebx -= 0x10001; - eax &= 0x10001; - eax += w->x; - viewport_create(w, x, y, width, height, zoom, center_x, center_y, center_z, flags, sprite); + 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); } } - viewport = w->viewport; + if (w->viewport) - viewport->flags = viewport_flags; + w->viewport->flags = viewport_flags; window_invalidate(w); } \ No newline at end of file From 19e72c54c7c4b760628ead532b8c116d2bee9be1 Mon Sep 17 00:00:00 2001 From: Duncan Frost Date: Sat, 23 Aug 2014 12:06:25 +0100 Subject: [PATCH 24/25] Started peep_overview_paint --- src/window_peep.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/window_peep.c b/src/window_peep.c index 06f522b3cd..3e2b6caae1 100644 --- a/src/window_peep.c +++ b/src/window_peep.c @@ -96,6 +96,7 @@ 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[] = { window_peep_close, @@ -124,7 +125,7 @@ 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 }; @@ -485,4 +486,24 @@ void window_peep_viewport_init(rct_window* 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); + + 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 From 4dd7a7dbc62b6084ffe5b9cfc75c2a7a7809c69f Mon Sep 17 00:00:00 2001 From: Duncan Frost Date: Sat, 23 Aug 2014 13:35:55 +0100 Subject: [PATCH 25/25] Add in address 's --- src/window_peep.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/window_peep.c b/src/window_peep.c index 3e2b6caae1..2c55d29ce9 100644 --- a/src/window_peep.c +++ b/src/window_peep.c @@ -86,7 +86,12 @@ rct_widget window_peep_overview_widgets[] = { //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); @@ -131,7 +136,12 @@ static void* window_peep_overview_events[] = { //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 @@ -495,6 +505,8 @@ void window_peep_overview_paint(){ 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