From ff478b8673ed93ec5d7ac3e61773bc052e172134 Mon Sep 17 00:00:00 2001 From: IntelOrca Date: Wed, 10 Dec 2014 23:07:11 +0000 Subject: [PATCH] implement editor objective options window --- src/interface/window.h | 30 +- src/localisation/string_ids.h | 47 + src/scenario.h | 6 + src/windows/banner.c | 2 +- src/windows/editor_bottom_toolbar.c | 8 +- src/windows/editor_objective_options.c | 1254 +++++++++++++++++++++++- src/windows/guest.c | 2 +- src/windows/park.c | 5 +- src/windows/ride.c | 2 +- src/windows/sign.c | 4 +- src/windows/staff.c | 2 +- src/windows/text_input.c | 18 +- src/world/park.h | 3 +- 13 files changed, 1351 insertions(+), 32 deletions(-) diff --git a/src/interface/window.h b/src/interface/window.h index 06546998f9..525ef9f608 100644 --- a/src/interface/window.h +++ b/src/interface/window.h @@ -523,7 +523,7 @@ void window_music_credits_open(); void window_publisher_credits_open(); void window_track_manage_open(); void window_viewport_open(); -void window_text_input_open(rct_window* call_w, int call_widget, rct_string_id title, rct_string_id description, rct_string_id existing_text, uint32 existing_args); +void window_text_input_open(rct_window* call_w, int call_widget, rct_string_id title, rct_string_id description, rct_string_id existing_text, uint32 existing_args, int maxLength); void window_editor_main_open(); void window_editor_top_toolbar_open(); @@ -569,9 +569,9 @@ int window_can_resize(rct_window *w); __asm mov widgetIndex, dx \ __asm mov w, esi - #define window_text_input_get_registers(w, widgetIndex, result, text) \ + #define window_text_input_get_registers(w, widgetIndex, result, text) \ __asm mov widgetIndex, dx \ - __asm mov result, cl \ + __asm mov result, cl \ __asm mov w, esi \ __asm mov text, edi @@ -595,6 +595,10 @@ int window_can_resize(rct_window *w); #define window_paint_get_registers(w, dpi) \ __asm mov w, esi \ __asm mov dpi, edi + + #define window_scrollsize_set_registers(width, height) \ + __asm mov ecx, width \ + __asm mov edx, height #else #define window_get_register(w) \ __asm__ ( "mov %["#w"], esi " : [w] "+m" (w) ); @@ -605,24 +609,24 @@ int window_can_resize(rct_window *w); #define window_dropdown_get_registers(w, widgetIndex, dropdownIndex) \ __asm__ ( "mov %["#dropdownIndex"], ax " : [dropdownIndex] "+m" (dropdownIndex) ); \ - __asm__ ( "mov %["#widgetIndex"], dx " : [widgetIndex] "+m" (widgetIndex) ); \ + __asm__ ( "mov %["#widgetIndex"], dx " : [widgetIndex] "+m" (widgetIndex) ); \ __asm__ ( "mov %["#w"], esi " : [w] "+m" (w) ); - #define window_text_input_get_registers(w, widgetIndex, result, text) \ - __asm__ ( "mov %[_cl], cl " : [_cl] "+m" (result) ); \ + #define window_text_input_get_registers(w, widgetIndex, result, text) \ + __asm__ ( "mov %[_cl], cl " : [_cl] "+m" (result) ); \ __asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) ); \ __asm__ ( "mov %[w], esi " : [w] "+m" (w) ); \ __asm__ ( "mov %[text], edi " : [text] "+m" (text) ); #define window_scrollmouse_get_registers(w, x, y) \ - __asm__ ( "mov %["#x"], cx " : [x] "+m" (x) ); \ - __asm__ ( "mov %["#y"], dx " : [y] "+m" (y) ); \ + __asm__ ( "mov %["#x"], cx " : [x] "+m" (x) ); \ + __asm__ ( "mov %["#y"], dx " : [y] "+m" (y) ); \ __asm__ ( "mov %["#w"], esi " : [w] "+m" (w) ); #define window_tool_get_registers(w, widgetIndex, x, y) \ - __asm__ ( "mov %["#x"], ax " : [x] "+m" (x) ); \ - __asm__ ( "mov %["#y"], bx " : [y] "+m" (y) ); \ - __asm__ ( "mov %["#widgetIndex"], dx " : [widgetIndex] "+m" (widgetIndex) ); \ + __asm__ ( "mov %["#x"], ax " : [x] "+m" (x) ); \ + __asm__ ( "mov %["#y"], bx " : [y] "+m" (y) ); \ + __asm__ ( "mov %["#widgetIndex"], dx " : [widgetIndex] "+m" (widgetIndex) ); \ __asm__ ( "mov %["#w"], esi " : [w] "+m" (w) ); #define window_textinput_get_registers(w, widgetIndex, result, text) \ @@ -634,6 +638,10 @@ int window_can_resize(rct_window *w); #define window_paint_get_registers(w, dpi) \ __asm__ ( "mov %["#w"], esi " : [w] "+m" (w) ); \ __asm__ ( "mov %["#dpi"], edi " : [dpi] "+m" (dpi) ); + + #define window_scrollsize_set_registers(width, height) \ + __asm__ ( "mov ecx, %[width] " : [width] "+m" (width) ); \ + __asm__ ( "mov edx, %[height] " : [height] "+m" (height) ); #endif #endif diff --git a/src/localisation/string_ids.h b/src/localisation/string_ids.h index 3e79f8f740..7002b9d9a6 100644 --- a/src/localisation/string_ids.h +++ b/src/localisation/string_ids.h @@ -100,6 +100,8 @@ enum { STR_CREDIT_SPARE_6 = 863, STR_CREDIT_SPARE_7 = 864, + STR_DROPDOWN_GLYPH = 876, + STR_LOAD_GAME = 882, STR_SAVE_GAME = 883, STR_LOAD_LANDSCAPE = 884, @@ -844,6 +846,19 @@ enum { STR_OBJECTIVE_REPLAY_LOAN_AND_PARK_VALUE = STR_OBJECTIVE_NONE + 10, STR_OBJECTIVE_MONTHLY_FOOD_INCOME = STR_OBJECTIVE_NONE + 11, + STR_OBJECTIVE_DROPDOWN_NONE = 2397, + STR_OBJECTIVE_DROPDOWN_NUMBER_OF_GUESTS_AT_A_GIVEN_DATE = STR_OBJECTIVE_DROPDOWN_NONE + 1, + STR_OBJECTIVE_DROPDOWN_PARK_VALUE_AT_A_GIVEN_DATE = STR_OBJECTIVE_DROPDOWN_NONE + 2, + STR_OBJECTIVE_DROPDOWN_HAVE_FUN = STR_OBJECTIVE_DROPDOWN_NONE + 3, + STR_OBJECTIVE_DROPDOWN_BUILD_THE_BEST_RIDE_YOU_CAN = STR_OBJECTIVE_DROPDOWN_NONE + 4, + STR_OBJECTIVE_DROPDOWN_BUILD_10_ROLLER_COASTERS = STR_OBJECTIVE_DROPDOWN_NONE + 5, + STR_OBJECTIVE_DROPDOWN_NUMBER_OF_GUESTS_IN_PARK = STR_OBJECTIVE_DROPDOWN_NONE + 6, + STR_OBJECTIVE_DROPDOWN_MONTHLY_INCOME_FROM_RIDE_TICKETS = STR_OBJECTIVE_DROPDOWN_NONE + 7, + STR_OBJECTIVE_DROPDOWN_BUILD_10_ROLLER_COASTERS_OF_A_GIVEN_LENGTH = STR_OBJECTIVE_DROPDOWN_NONE + 8, + STR_OBJECTIVE_DROPDOWN_FINISH_BUILDING_5_ROLLER_COASTERS = STR_OBJECTIVE_DROPDOWN_NONE + 9, + STR_OBJECTIVE_DROPDOWN_REPAY_LOAN_AND_ACHIEVE_A_GIVEN_PARK_VALUE = STR_OBJECTIVE_DROPDOWN_NONE + 10, + STR_OBJECTIVE_DROPDOWN_MONTHLY_PROFIT_FROM_FOOD_MERCHANDISE = STR_OBJECTIVE_DROPDOWN_NONE + 11, + STR_MARKETING_CAMPAIGNS_IN_OPERATION = 2409, STR_MARKETING_CAMPAGINS_NONE = 2410, STR_MARKETING_CAMPAIGNS_AVAILABLE = 2411, @@ -1208,7 +1223,25 @@ enum { STR_SET_STARTING_POSITIONS_TIP = 3228, + STR_SELECT_OBJECTIVE_AND_PARK_NAME_TIP = 3282, + STR_SELECT_RIDES_TO_BE_PRESERVED_TIP = 3283, + STR_OBJECTIVE_SELECTION = 3284, + STR_SELECT_OBJECTIVE_FOR_THIS_SCENARIO_TIP = 3286, + STR_SELECT_CLIMATE_TIP = 3288, + + STR_CLIMATE_COOL_AND_WET = 3290, + STR_CLIMATE_WARM = STR_CLIMATE_COOL_AND_WET + 1, + STR_CLIMATE_HOT_AND_DRY = STR_CLIMATE_COOL_AND_WET + 2, + STR_CLIMATE_COLD = STR_CLIMATE_COOL_AND_WET + 3, + + STR_CHANGE = 3294, + STR_CHANGE_NAME_OF_PARK_TIP = 3295, + STR_CHANGE_NAME_OF_SCENARIO_TIP = 3296, + STR_CHANGE_DETAIL_NOTES_ABOUT_PARK_SCENARIO_TIP = 3297, + + STR_NO_DETAILS_YET = 3317, + STR_SELECT_WHICH_GROUP_THIS_SCENARIO_APPEARS_IN = 3318, STR_UNABLE_TO_SAVE_SCENARIO_FILE = 3320, @@ -1221,6 +1254,7 @@ enum { STR_PARK_ENTRANCE_WRONG_DIRECTION_OR_NO_PATH = 3332, STR_SAVE_PLUGIN_DATA = 3333, STR_SAVE_PLUGIN_DATA_TIP = 3334, + STR_SIX_FLAGS_PARK = 3337, STR_GAME_TOOLS = 3341, STR_SCENARIO_EDITOR = 3342, @@ -1241,6 +1275,19 @@ enum { STR_TUTORIAL_CUSTOM_RIDES = 3386, STR_TUTORIAL_ROLLER_COASTER = 3387, + STR_OBJECTIVE_2_NONE = 2397, + STR_OBJECTIVE_2_NUMBER_OF_GUESTS_AT_A_GIVEN_DATE = STR_OBJECTIVE_2_NONE + 1, + STR_OBJECTIVE_2_PARK_VALUE_AT_A_GIVEN_DATE = STR_OBJECTIVE_2_NONE + 2, + STR_OBJECTIVE_2_HAVE_FUN = STR_OBJECTIVE_2_NONE + 3, + STR_OBJECTIVE_2_BUILD_THE_BEST_RIDE_YOU_CAN = STR_OBJECTIVE_2_NONE + 4, + STR_OBJECTIVE_2_BUILD_10_ROLLER_COASTERS = STR_OBJECTIVE_2_NONE + 5, + STR_OBJECTIVE_2_NUMBER_OF_GUESTS_IN_PARK = STR_OBJECTIVE_2_NONE + 6, + STR_OBJECTIVE_2_MONTHLY_INCOME_FROM_RIDE_TICKETS = STR_OBJECTIVE_2_NONE + 7, + STR_OBJECTIVE_2_BUILD_10_ROLLER_COASTERS_OF_A_GIVEN_LENGTH = STR_OBJECTIVE_2_NONE + 8, + STR_OBJECTIVE_2_FINISH_BUILDING_5_ROLLER_COASTERS = STR_OBJECTIVE_2_NONE + 9, + STR_OBJECTIVE_2_REPAY_LOAN_AND_ACHIEVE_A_GIVEN_PARK_VALUE = STR_OBJECTIVE_2_NONE + 10, + STR_OBJECTIVE_2_MONTHLY_PROFIT_FROM_FOOD_MERCHANDISE = STR_OBJECTIVE_2_NONE + 11, + STR_CLEAR_SCENERY_TIP = 3437, STR_CLEAR_SCENERY = 3439, diff --git a/src/scenario.h b/src/scenario.h index 5751dcd563..19d8aa6b5d 100644 --- a/src/scenario.h +++ b/src/scenario.h @@ -83,6 +83,12 @@ typedef struct { char completed_by[64]; // 0x0270 } rct_scenario_basic; +typedef struct { + rct_string_id scenario_name; + rct_string_id park_name; + rct_string_id details; +} rct_stex_entry; + /* This will be useful for backwards compatibility typedef struct { // SC6[0] diff --git a/src/windows/banner.c b/src/windows/banner.c index 3fc77ed2f1..71ed90e51e 100644 --- a/src/windows/banner.c +++ b/src/windows/banner.c @@ -202,7 +202,7 @@ static void window_banner_mouseup() game_do_command(x, 1, y, map_element->base_height | (map_element->properties.banner.position << 8), GAME_COMMAND_51, 0, 0); break; case WIDX_BANNER_TEXT: - window_text_input_open(w, WIDX_BANNER_TEXT, 2982, 2983, gBanners[w->number].string_idx, 0); + window_text_input_open(w, WIDX_BANNER_TEXT, 2982, 2983, gBanners[w->number].string_idx, 0, 32); break; case WIDX_BANNER_NO_ENTRY: RCT2_CALLPROC_EBPSAFE(0x006EE3C3); diff --git a/src/windows/editor_bottom_toolbar.c b/src/windows/editor_bottom_toolbar.c index 8cce5e0074..7c130fc3fb 100644 --- a/src/windows/editor_bottom_toolbar.c +++ b/src/windows/editor_bottom_toolbar.c @@ -190,7 +190,7 @@ void window_editor_bottom_toolbar_jump_back_to_invention_list_set_up() { */ void window_editor_bottom_toolbar_jump_back_to_scenario_options() { window_close_all(); - RCT2_CALLPROC_EBPSAFE(0x00670138); // open scenario options + window_editor_scenario_options_open(); g_editor_step = EDITOR_STEP_OPTIONS_SELECTION; gfx_invalidate_screen(); } @@ -201,7 +201,7 @@ void window_editor_bottom_toolbar_jump_back_to_scenario_options() { */ void window_editor_bottom_toolbar_jump_back_to_options_selection() { window_close_all(); - RCT2_CALLPROC_EBPSAFE(0x00670138); // open options selection window + window_editor_scenario_options_open(); g_editor_step = EDITOR_STEP_OPTIONS_SELECTION; gfx_invalidate_screen(); } @@ -238,7 +238,7 @@ void window_editor_bottom_toolbar_jump_forward_to_invention_list_set_up() { */ void window_editor_bottom_toolbar_jump_forward_to_options_selection() { window_close_all(); - RCT2_CALLPROC_EBPSAFE(0x00670138); + window_editor_scenario_options_open(); g_editor_step = EDITOR_STEP_OPTIONS_SELECTION; gfx_invalidate_screen(); } @@ -249,7 +249,7 @@ void window_editor_bottom_toolbar_jump_forward_to_options_selection() { */ void window_editor_bottom_toolbar_jump_forward_to_objective_selection() { window_close_all(); - RCT2_CALLPROC_EBPSAFE(0x0067137D); + window_editor_objective_options_open(); g_editor_step = EDITOR_STEP_OBJECTIVE_SELECTION; gfx_invalidate_screen(); } diff --git a/src/windows/editor_objective_options.c b/src/windows/editor_objective_options.c index 9eb591219d..2d9735d92e 100644 --- a/src/windows/editor_objective_options.c +++ b/src/windows/editor_objective_options.c @@ -19,6 +19,218 @@ *****************************************************************************/ #include "../addresses.h" +#include "../game.h" +#include "../localisation/date.h" +#include "../localisation/localisation.h" +#include "../interface/widget.h" +#include "../interface/window.h" +#include "../scenario.h" +#include "dropdown.h" +#include "error.h" + +#define DISABLE_SIX_FLAGS_CHECKBOX + +#pragma region Widgets + +enum { + WINDOW_EDITOR_OBJECTIVE_OPTIONS_PAGE_MAIN, + WINDOW_EDITOR_OBJECTIVE_OPTIONS_PAGE_RIDES, + WINDOW_EDITOR_OBJECTIVE_OPTIONS_PAGE_COUNT +}; + +enum { + WIDX_BACKGROUND, + WIDX_TITLE, + WIDX_CLOSE, + WIDX_PAGE_BACKGROUND, + WIDX_TAB_1, + WIDX_TAB_2, + + WIDX_OBJECTIVE = 6, + WIDX_OBJECTIVE_DROPDOWN, + WIDX_OBJECTIVE_ARG_1, + WIDX_OBJECTIVE_ARG_1_INCREASE, + WIDX_OBJECTIVE_ARG_1_DECREASE, + WIDX_OBJECTIVE_ARG_2, + WIDX_OBJECTIVE_ARG_2_INCREASE, + WIDX_OBJECTIVE_ARG_2_DECREASE, + WIDX_CLIMATE, + WIDX_CLIMATE_DROPDOWN, + WIDX_PARK_NAME, + WIDX_SCENARIO_NAME, + WIDX_CATEGORY, + WIDX_CATEGORY_DROPDOWN, + WIDX_DETAILS, + WIDX_SIX_FLAGS, + + WIDX_RIDES = 6 +}; + +static rct_widget window_editor_objective_options_main_widgets[] = { + { WWT_FRAME, 0, 0, 449, 0, 228, STR_NONE, STR_NONE }, + { WWT_CAPTION, 0, 1, 448, 1, 14, STR_OBJECTIVE_SELECTION, STR_WINDOW_TITLE_TIP }, + { WWT_CLOSEBOX, 0, 437, 447, 2, 13, STR_CLOSE_X, STR_CLOSE_WINDOW_TIP }, + { WWT_RESIZE, 1, 0, 279, 43, 148, STR_NONE, STR_NONE }, + { WWT_TAB, 1, 3, 33, 17, 43, 0x2000144E, STR_SELECT_OBJECTIVE_AND_PARK_NAME_TIP }, + { WWT_TAB, 1, 34, 64, 17, 46, 0x2000144E, STR_SELECT_RIDES_TO_BE_PRESERVED_TIP }, + { WWT_DROPDOWN, 1, 98, 441, 48, 59, STR_NONE, STR_SELECT_OBJECTIVE_FOR_THIS_SCENARIO_TIP }, + { WWT_DROPDOWN_BUTTON, 1, 430, 440, 49, 58, STR_DROPDOWN_GLYPH, STR_SELECT_OBJECTIVE_FOR_THIS_SCENARIO_TIP }, + { WWT_SPINNER, 1, 158, 237, 65, 76, STR_NONE, STR_NONE }, + { WWT_DROPDOWN_BUTTON, 1, 226, 236, 66, 70, STR_NUMERIC_UP, STR_NONE }, + { WWT_DROPDOWN_BUTTON, 1, 226, 236, 71, 75, STR_NUMERIC_DOWN, STR_NONE }, + { WWT_SPINNER, 1, 158, 277, 82, 93, STR_NONE, STR_NONE }, + { WWT_DROPDOWN_BUTTON, 1, 266, 276, 83, 87, STR_NUMERIC_UP, STR_NONE }, + { WWT_DROPDOWN_BUTTON, 1, 266, 276, 88, 92, STR_NUMERIC_DOWN, STR_NONE }, + { WWT_DROPDOWN, 1, 98, 277, 99, 110, STR_NONE, STR_SELECT_CLIMATE_TIP }, + { WWT_DROPDOWN_BUTTON, 1, 266, 276, 100, 109, STR_DROPDOWN_GLYPH, STR_SELECT_CLIMATE_TIP }, + { WWT_DROPDOWN_BUTTON, 1, 370, 444, 116, 127, STR_CHANGE, STR_CHANGE_NAME_OF_PARK_TIP }, + { WWT_DROPDOWN_BUTTON, 1, 370, 444, 133, 144, STR_CHANGE, STR_CHANGE_NAME_OF_SCENARIO_TIP }, + { WWT_DROPDOWN, 1, 98, 277, 150, 161, STR_NONE, STR_SELECT_WHICH_GROUP_THIS_SCENARIO_APPEARS_IN }, + { WWT_DROPDOWN_BUTTON, 1, 266, 276, 151, 160, STR_DROPDOWN_GLYPH, STR_SELECT_WHICH_GROUP_THIS_SCENARIO_APPEARS_IN }, + { WWT_DROPDOWN_BUTTON, 1, 370, 444, 167, 178, STR_CHANGE, STR_CHANGE_DETAIL_NOTES_ABOUT_PARK_SCENARIO_TIP }, + { WWT_CHECKBOX, 1, 8, 441, 215, 226, STR_SIX_FLAGS_PARK, STR_NONE }, + { WIDGETS_END } +}; + +static rct_widget window_editor_objective_options_rides_widgets[] = { + { WWT_FRAME, 0, 0, 449, 0, 228, STR_NONE, STR_NONE }, + { WWT_CAPTION, 0, 1, 448, 1, 14, STR_OBJECTIVE_SELECTION, STR_WINDOW_TITLE_TIP }, + { WWT_CLOSEBOX, 0, 437, 447, 2, 13, STR_CLOSE_X, STR_CLOSE_WINDOW_TIP }, + { WWT_RESIZE, 1, 0, 279, 43, 148, STR_NONE, STR_NONE }, + { WWT_TAB, 1, 3, 33, 17, 43, 0x2000144E, STR_SELECT_OBJECTIVE_AND_PARK_NAME_TIP }, + { WWT_TAB, 1, 34, 64, 17, 46, 0x2000144E, STR_SELECT_RIDES_TO_BE_PRESERVED_TIP }, + { WWT_SCROLL, 1, 3, 376, 60, 220, 2, STR_NONE }, + { WIDGETS_END } +}; + +static rct_widget *window_editor_objective_options_widgets[] = { + window_editor_objective_options_main_widgets, + window_editor_objective_options_rides_widgets +}; + +#pragma endregion + +#pragma region Events + +static void window_editor_objective_options_emptysub() { } + +static void window_editor_objective_options_main_mouseup(); +static void window_editor_objective_options_main_resize(); +static void window_editor_objective_options_main_mousedown(int widgetIndex, rct_window*w, rct_widget* widget); +static void window_editor_objective_options_main_dropdown(); +static void window_editor_objective_options_main_update(rct_window *w); +static void window_editor_objective_options_main_textinput(); +static void window_editor_objective_options_main_invalidate(); +static void window_editor_objective_options_main_paint(); + +static void window_editor_objective_options_rides_mouseup(); +static void window_editor_objective_options_rides_resize(); +static void window_editor_objective_options_rides_update(rct_window *w); +static void window_editor_objective_options_rides_scrollgetheight(); +static void window_editor_objective_options_rides_scrollmousedown(); +static void window_editor_objective_options_rides_scrollmouseover(); +static void window_editor_objective_options_rides_invalidate(); +static void window_editor_objective_options_rides_paint(); +static void window_editor_objective_options_rides_scrollpaint(); + +// 0x009A9DF4 +static void* window_objective_options_main_events[] = { + window_editor_objective_options_emptysub, + window_editor_objective_options_main_mouseup, + window_editor_objective_options_main_resize, + window_editor_objective_options_main_mousedown, + window_editor_objective_options_main_dropdown, + window_editor_objective_options_emptysub, + window_editor_objective_options_main_update, + window_editor_objective_options_emptysub, + window_editor_objective_options_emptysub, + window_editor_objective_options_emptysub, + window_editor_objective_options_emptysub, + window_editor_objective_options_emptysub, + window_editor_objective_options_emptysub, + window_editor_objective_options_emptysub, + window_editor_objective_options_emptysub, + window_editor_objective_options_emptysub, + window_editor_objective_options_emptysub, + window_editor_objective_options_emptysub, + window_editor_objective_options_emptysub, + window_editor_objective_options_main_textinput, + window_editor_objective_options_emptysub, + window_editor_objective_options_emptysub, + window_editor_objective_options_emptysub, + window_editor_objective_options_emptysub, + window_editor_objective_options_emptysub, + window_editor_objective_options_main_invalidate, + window_editor_objective_options_main_paint, + window_editor_objective_options_emptysub +}; + +// 0x009A9F58 +static void* window_objective_options_rides_events[] = { + window_editor_objective_options_emptysub, + window_editor_objective_options_rides_mouseup, + window_editor_objective_options_rides_resize, + window_editor_objective_options_emptysub, + window_editor_objective_options_emptysub, + window_editor_objective_options_emptysub, + window_editor_objective_options_rides_update, + window_editor_objective_options_emptysub, + window_editor_objective_options_emptysub, + window_editor_objective_options_emptysub, + window_editor_objective_options_emptysub, + window_editor_objective_options_emptysub, + window_editor_objective_options_emptysub, + window_editor_objective_options_emptysub, + window_editor_objective_options_emptysub, + window_editor_objective_options_rides_scrollgetheight, + window_editor_objective_options_rides_scrollmousedown, + window_editor_objective_options_emptysub, + window_editor_objective_options_rides_scrollmouseover, + window_editor_objective_options_emptysub, + window_editor_objective_options_emptysub, + window_editor_objective_options_emptysub, + window_editor_objective_options_emptysub, + window_editor_objective_options_emptysub, + window_editor_objective_options_emptysub, + window_editor_objective_options_rides_invalidate, + window_editor_objective_options_rides_paint, + window_editor_objective_options_rides_scrollpaint +}; + +static void* window_editor_objective_options_page_events[] = { + window_objective_options_main_events, + window_objective_options_rides_events +}; + +#pragma endregion + +#pragma region Enabled widgets + +static uint64 window_editor_objective_options_page_enabled_widgets[] = { + (1 << WIDX_CLOSE) | + (1 << WIDX_TAB_1) | + (1 << WIDX_TAB_2) | + (1 << WIDX_OBJECTIVE) | + (1 << WIDX_OBJECTIVE_DROPDOWN) | + (1 << WIDX_OBJECTIVE_ARG_1_INCREASE) | + (1 << WIDX_OBJECTIVE_ARG_1_DECREASE) | + (1 << WIDX_OBJECTIVE_ARG_2_INCREASE) | + (1 << WIDX_OBJECTIVE_ARG_2_DECREASE) | + (1 << WIDX_CLIMATE) | + (1 << WIDX_CLIMATE_DROPDOWN) | + (1 << WIDX_PARK_NAME) | + (1 << WIDX_SCENARIO_NAME) | + (1 << WIDX_CATEGORY) | + (1 << WIDX_CATEGORY_DROPDOWN) | + (1 << WIDX_DETAILS) | + (1 << WIDX_SIX_FLAGS), + + (1 << WIDX_CLOSE) | + (1 << WIDX_TAB_1) | + (1 << WIDX_TAB_2) +}; + +#pragma endregion /** * @@ -26,5 +238,1045 @@ */ void window_editor_objective_options_open() { - RCT2_CALLPROC_EBPSAFE(0x0067137D); + rct_window *w; + + w = window_bring_to_front_by_class(WC_EDTIOR_OBJECTIVE_OPTIONS); + if (w != NULL) + return; + + w = window_create( + (RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_WIDTH, uint16) - 450) / 2, + max(28, (RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_HEIGHT, uint16) - 228) / 2), + 450, + 228, + (uint32*)window_objective_options_main_events, + WC_EDTIOR_OBJECTIVE_OPTIONS, + WF_10 + ); + w->widgets = window_editor_objective_options_main_widgets; + w->enabled_widgets = window_editor_objective_options_page_enabled_widgets[0]; + w->pressed_widgets = 0; + w->var_020 = 0x00003600; + window_init_scroll_widgets(w); + w->var_4AE = 0; + w->selected_tab = 0; + w->no_list_items = 0; + w->selected_list_item = -1; + RCT2_CALLPROC_X(0x00672609, 0, 0, 0, 0, (int)w, 0, 0); + w->colours[0] = 4; + w->colours[1] = 1; + w->colours[2] = 1; +} + +static void window_editor_objective_options_set_pressed_tab(rct_window *w) +{ + int i; + for (i = 0; i < 2; i++) + w->pressed_widgets &= ~(1 << (WIDX_TAB_1 + i)); + w->pressed_widgets |= 1LL << (WIDX_TAB_1 + w->page); +} + +static void window_editor_objective_options_anchor_border_widgets(rct_window *w) +{ + w->widgets[WIDX_BACKGROUND].right = w->width - 1; + w->widgets[WIDX_BACKGROUND].bottom = w->height - 1; + w->widgets[WIDX_PAGE_BACKGROUND].right = w->width - 1; + w->widgets[WIDX_PAGE_BACKGROUND].bottom = w->height - 1; + w->widgets[WIDX_TITLE].right = w->width - 2; + w->widgets[WIDX_CLOSE].left = w->width - 13; + w->widgets[WIDX_CLOSE].right = w->width - 3; +} + +static void window_editor_objective_options_draw_tab_images(rct_window *w, rct_drawpixelinfo *dpi) +{ + rct_widget *widget; + int spriteIndex; + + // Tab 1 + widget = &w->widgets[WIDX_TAB_1]; + + spriteIndex = 5511; + if (w->page == WINDOW_EDITOR_OBJECTIVE_OPTIONS_PAGE_MAIN) + spriteIndex += (w->frame_no / 4) % 16; + + gfx_draw_sprite(dpi, spriteIndex, w->x + widget->left, w->y + widget->top, 0); + + // Tab 2 + if (!(w->disabled_widgets & (1 << WIDX_TAB_2))) { + widget = &w->widgets[WIDX_TAB_2]; + spriteIndex = 5442; + if (w->page == WINDOW_EDITOR_OBJECTIVE_OPTIONS_PAGE_RIDES) + spriteIndex += (w->frame_no / 4) % 16; + + gfx_draw_sprite(dpi, spriteIndex, w->x + widget->left, w->y + widget->top, 0); + } +} + +/** + * + * rct2: 0x00668496 + */ +static void window_editor_objective_options_set_page(rct_window *w, int page) +{ + if (w->page == page) + return; + + w->page = page; + w->frame_no = 0; + w->var_492 = 0; + w->no_list_items = 0; + w->selected_list_item = -1; + w->enabled_widgets = window_editor_objective_options_page_enabled_widgets[page]; + w->var_020 = page == WINDOW_EDITOR_OBJECTIVE_OPTIONS_PAGE_MAIN ? 0x3600 : 0; + w->event_handlers = window_editor_objective_options_page_events[page]; + w->widgets = window_editor_objective_options_widgets[page]; + window_invalidate(w); + RCT2_CALLPROC_X(0x00672609, 0, 0, 0, 0, (int)w, 0, 0); + window_event_resize_call(w); + window_event_invalidate_call(w); + window_init_scroll_widgets(w); + window_invalidate(w); +} + +/** + * + * rct2: 0x0067201D + */ +static void window_editor_objective_options_set_objective(rct_window *w, int objective) +{ + RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_TYPE, uint8) = objective; + window_invalidate(w); + + // Set default objective arguments + switch (objective) { + case OBJECTIVE_NONE: + case OBJECTIVE_HAVE_FUN: + case OBJECTIVE_BUILD_THE_BEST: + case OBJECTIVE_10_ROLLERCOASTERS: + break; + case OBJECTIVE_GUESTS_BY: + RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_YEAR, uint8) = 3; + RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_NUM_GUESTS, uint16) = 1500; + break; + case OBJECTIVE_PARK_VALUE_BY: + RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_YEAR, uint8) = 3; + RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_CURRENCY, money32) = MONEY(50000,00); + break; + case OBJECTIVE_GUESTS_AND_RATING: + RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_NUM_GUESTS, uint16) = 2000; + break; + case OBJECTIVE_MONTHLY_RIDE_INCOME: + RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_CURRENCY, money32) = MONEY(10000,00); + break; + case OBJECTIVE_10_ROLLERCOASTERS_LENGTH: + RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_NUM_GUESTS, uint16) = 1200; + break; + case OBJECTIVE_FINISH_5_ROLLERCOASTERS: + RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_CURRENCY, money32) = FIXED_2DP(6,70); + break; + case OBJECTIVE_REPLAY_LOAN_AND_PARK_VALUE: + RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_CURRENCY, money32) = MONEY(50000,00); + break; + case OBJECTIVE_MONTHLY_FOOD_INCOME: + RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_CURRENCY, money32) = MONEY(1000,00); + break; + } +} + +/** + * + * rct2: 0x006719CA + */ +static void window_editor_objective_options_main_mouseup() +{ + rct_s6_info *s6Info = (rct_s6_info*)0x00141F570; + short widgetIndex; + rct_window *w; + + window_widget_get_registers(w, widgetIndex); + + switch (widgetIndex) { + case WIDX_CLOSE: + window_close(w); + break; + case WIDX_TAB_1: + case WIDX_TAB_2: + window_editor_objective_options_set_page(w, widgetIndex - WIDX_TAB_1); + break; + case WIDX_PARK_NAME: + RCT2_GLOBAL(0x013CE962, uint32) = RCT2_GLOBAL(0x013573D8, uint32); + window_text_input_open(w, WIDX_PARK_NAME, STR_PARK_NAME, STR_ENTER_PARK_NAME, RCT2_GLOBAL(0x013573D4, rct_string_id), 0, 32); + break; + case WIDX_SCENARIO_NAME: + strcpy((char*)0x009BC677, s6Info->name); + window_text_input_open(w, WIDX_SCENARIO_NAME, 3313, 3314, 3165, 0, 32); + break; + case WIDX_DETAILS: + strcpy((char*)0x009BC677, s6Info->details); + window_text_input_open(w, WIDX_DETAILS, 3315, 3316, 3165, 0, 256); + break; + case WIDX_SIX_FLAGS: + RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) ^= PARK_FLAGS_SIX_FLAGS; + window_invalidate(w); + break; + } +} + +/** + * + * rct2: 0x00672254 + */ +static void window_editor_objective_options_main_resize() +{ + rct_window *w; + + window_get_register(w); + + window_set_resize(w, 450, 229, 450, 229); +} + +static void window_editor_objective_options_show_objective_dropdown(rct_window *w) +{ + int i, numItems, objectiveType; + rct_widget *dropdownWidget; + uint32 parkFlags; + + dropdownWidget = &w->widgets[WIDX_OBJECTIVE]; + parkFlags = RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32); + numItems = 0; + + if (!(parkFlags & PARK_FLAGS_NO_MONEY_SCENARIO)) { + numItems += 2; + if (parkFlags & PARK_FLAGS_PARK_FREE_ENTRY) + numItems++; + } + + numItems += 5; + + i = 0; + gDropdownItemsFormat[i] = 1142; + gDropdownItemsArgs[i] = STR_OBJECTIVE_DROPDOWN_HAVE_FUN; + i++; + + if (!(parkFlags & PARK_FLAGS_NO_MONEY_SCENARIO)) { + gDropdownItemsFormat[i] = 1142; + gDropdownItemsArgs[i] = STR_OBJECTIVE_DROPDOWN_NUMBER_OF_GUESTS_AT_A_GIVEN_DATE; + i++; + gDropdownItemsFormat[i] = 1142; + gDropdownItemsArgs[i] = STR_OBJECTIVE_DROPDOWN_MONTHLY_PROFIT_FROM_FOOD_MERCHANDISE; + i++; + gDropdownItemsFormat[i] = 1142; + gDropdownItemsArgs[i] = STR_OBJECTIVE_DROPDOWN_REPAY_LOAN_AND_ACHIEVE_A_GIVEN_PARK_VALUE; + i++; + gDropdownItemsFormat[i] = 1142; + gDropdownItemsArgs[i] = STR_OBJECTIVE_DROPDOWN_PARK_VALUE_AT_A_GIVEN_DATE; + i++; + if (parkFlags & PARK_FLAGS_PARK_FREE_ENTRY) { + gDropdownItemsFormat[i] = 1142; + gDropdownItemsArgs[i] = STR_OBJECTIVE_DROPDOWN_MONTHLY_INCOME_FROM_RIDE_TICKETS; + i++; + } + } + + gDropdownItemsFormat[i] = 1142; + gDropdownItemsArgs[i] = STR_OBJECTIVE_DROPDOWN_NUMBER_OF_GUESTS_IN_PARK; + i++; + + gDropdownItemsFormat[i] = 1142; + gDropdownItemsArgs[i] = STR_OBJECTIVE_DROPDOWN_BUILD_10_ROLLER_COASTERS; + i++; + + gDropdownItemsFormat[i] = 1142; + gDropdownItemsArgs[i] = STR_OBJECTIVE_DROPDOWN_BUILD_10_ROLLER_COASTERS_OF_A_GIVEN_LENGTH; + i++; + + gDropdownItemsFormat[i] = 1142; + gDropdownItemsArgs[i] = STR_OBJECTIVE_DROPDOWN_FINISH_BUILDING_5_ROLLER_COASTERS; + i++; + + window_dropdown_show_text_custom_width( + w->x + dropdownWidget->left, + w->y + dropdownWidget->top, + dropdownWidget->bottom - dropdownWidget->top + 1, + w->colours[1], + 0x80, + numItems, + dropdownWidget->right - dropdownWidget->left - 3 + ); + + objectiveType = RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_TYPE, uint8); + for (i = 0; i < numItems; i++) { + if (gDropdownItemsArgs[i] - STR_OBJECTIVE_DROPDOWN_NONE == objectiveType) { + gDropdownItemsChecked = (1 << i); + break; + } + } +} + +static void window_editor_objective_options_show_climate_dropdown(rct_window *w) +{ + int i; + rct_widget *dropdownWidget; + + dropdownWidget = &w->widgets[WIDX_CLIMATE]; + + for (i = 0; i < 4; i++) { + gDropdownItemsFormat[i] = 1142; + gDropdownItemsArgs[i] = STR_CLIMATE_COOL_AND_WET + i; + } + window_dropdown_show_text_custom_width( + w->x + dropdownWidget->left, + w->y + dropdownWidget->top, + dropdownWidget->bottom - dropdownWidget->top + 1, + w->colours[1], + 0x80, + 4, + dropdownWidget->right - dropdownWidget->left - 3 + ); + gDropdownItemsChecked = (1 << RCT2_GLOBAL(RCT2_ADDRESS_CLIMATE, uint8)); +} + +static void window_editor_objective_options_show_category_dropdown(rct_window *w) +{ + rct_s6_info *s6Info = (rct_s6_info*)0x00141F570; + int i; + rct_widget *dropdownWidget; + + dropdownWidget = &w->widgets[WIDX_CATEGORY]; + + for (i = 0; i < 5; i++) { + gDropdownItemsFormat[i] = 1142; + gDropdownItemsArgs[i] = STR_BEGINNER_PARKS + i; + } + window_dropdown_show_text_custom_width( + w->x + dropdownWidget->left, + w->y + dropdownWidget->top, + dropdownWidget->bottom - dropdownWidget->top + 1, + w->colours[1], + 0x80, + 5, + dropdownWidget->right - dropdownWidget->left - 3 + ); + gDropdownItemsChecked = (1 << s6Info->category); +} + +static void window_editor_objective_options_arg_1_increase(rct_window *w) +{ + switch (RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_TYPE, uint8)) { + case OBJECTIVE_PARK_VALUE_BY: + case OBJECTIVE_MONTHLY_RIDE_INCOME: + case OBJECTIVE_REPLAY_LOAN_AND_PARK_VALUE: + if (RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_CURRENCY, money32) >= MONEY(2000000,00)) { + window_error_open(3264, STR_NONE); + } else { + RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_CURRENCY, money32) += MONEY(1000,0); + window_invalidate(w); + } + break; + case OBJECTIVE_MONTHLY_FOOD_INCOME: + if (RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_CURRENCY, money32) >= MONEY(2000000,00)) { + window_error_open(3264, STR_NONE); + } else { + RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_CURRENCY, money32) += MONEY(100,0); + window_invalidate(w); + } + break; + case OBJECTIVE_10_ROLLERCOASTERS_LENGTH: + if (RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_NUM_GUESTS, uint16) >= 5000) { + window_error_open(3264, STR_NONE); + } else { + RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_NUM_GUESTS, uint16) += 100; + window_invalidate(w); + } + break; + case OBJECTIVE_FINISH_5_ROLLERCOASTERS: + if (RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_CURRENCY, money32) >= FIXED_2DP(9,90)) { + window_error_open(3264, STR_NONE); + } else { + RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_CURRENCY, money32) += FIXED_2DP(0,10); + window_invalidate(w); + } + break; + default: + if (RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_NUM_GUESTS, uint16) >= 5000) { + window_error_open(3264, STR_NONE); + } else { + RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_NUM_GUESTS, uint16) += 100; + window_invalidate(w); + } + break; + } +} + +static void window_editor_objective_options_arg_1_decrease(rct_window *w) +{ + switch (RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_TYPE, uint8)) { + case OBJECTIVE_PARK_VALUE_BY: + case OBJECTIVE_MONTHLY_RIDE_INCOME: + case OBJECTIVE_REPLAY_LOAN_AND_PARK_VALUE: + if (RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_CURRENCY, money32) <= MONEY(1000,00)) { + window_error_open(3265, STR_NONE); + } else { + RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_CURRENCY, money32) -= MONEY(1000,0); + window_invalidate(w); + } + break; + case OBJECTIVE_MONTHLY_FOOD_INCOME: + if (RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_CURRENCY, money32) <= MONEY(1000,00)) { + window_error_open(3265, STR_NONE); + } else { + RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_CURRENCY, money32) -= MONEY(100,0); + window_invalidate(w); + } + break; + case OBJECTIVE_10_ROLLERCOASTERS_LENGTH: + if (RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_NUM_GUESTS, uint16) <= 1000) { + window_error_open(3265, STR_NONE); + } else { + RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_NUM_GUESTS, uint16) -= 100; + window_invalidate(w); + } + break; + case OBJECTIVE_FINISH_5_ROLLERCOASTERS: + if (RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_CURRENCY, money32) <= FIXED_2DP(4,00)) { + window_error_open(3265, STR_NONE); + } else { + RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_CURRENCY, money32) -= FIXED_2DP(0,10); + window_invalidate(w); + } + break; + default: + if (RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_NUM_GUESTS, uint16) <= 500) { + window_error_open(3265, STR_NONE); + } else { + RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_NUM_GUESTS, uint16) -= 100; + window_invalidate(w); + } + break; + } +} + +static void window_editor_objective_options_arg_2_increase(rct_window *w) +{ + if (RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_YEAR, uint8) >= 25) { + window_error_open(3264, STR_NONE); + } else { + RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_YEAR, uint8)++; + window_invalidate(w); + } +} + +static void window_editor_objective_options_arg_2_decrease(rct_window *w) +{ + if (RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_YEAR, uint8) <= 1) { + window_error_open(3265, STR_NONE); + } else { + RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_YEAR, uint8)--; + window_invalidate(w); + } +} + +/** + * + * rct2: 0x00671A0D + */ +static void window_editor_objective_options_main_mousedown(int widgetIndex, rct_window *w, rct_widget* widget) +{ + switch (widgetIndex) { + case WIDX_OBJECTIVE_DROPDOWN: + window_editor_objective_options_show_objective_dropdown(w); + break; + case WIDX_OBJECTIVE_ARG_1_INCREASE: + window_editor_objective_options_arg_1_increase(w); + break; + case WIDX_OBJECTIVE_ARG_1_DECREASE: + window_editor_objective_options_arg_1_decrease(w); + break; + case WIDX_OBJECTIVE_ARG_2_INCREASE: + window_editor_objective_options_arg_2_increase(w); + break; + case WIDX_OBJECTIVE_ARG_2_DECREASE: + window_editor_objective_options_arg_2_decrease(w); + break; + case WIDX_CLIMATE_DROPDOWN: + window_editor_objective_options_show_climate_dropdown(w); + break; + case WIDX_CATEGORY_DROPDOWN: + window_editor_objective_options_show_category_dropdown(w); + break; + } +} + +/** + * + * rct2: 0x00671A54 + */ +static void window_editor_objective_options_main_dropdown() +{ + rct_s6_info *s6Info = (rct_s6_info*)0x00141F570; + rct_window *w; + short widgetIndex, dropdownIndex; + uint8 newObjectiveType; + + window_dropdown_get_registers(w, widgetIndex, dropdownIndex); + + if (dropdownIndex == -1) + return; + + switch (widgetIndex) { + case WIDX_OBJECTIVE_DROPDOWN: + newObjectiveType = (uint8)(gDropdownItemsArgs[dropdownIndex] - 2397); + if (RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_TYPE, uint8) != newObjectiveType) + window_editor_objective_options_set_objective(w, newObjectiveType); + break; + case WIDX_CLIMATE_DROPDOWN: + if (RCT2_GLOBAL(RCT2_ADDRESS_CLIMATE, uint8) != (uint8)dropdownIndex) { + RCT2_GLOBAL(RCT2_ADDRESS_CLIMATE, uint8) = (uint8)dropdownIndex; + window_invalidate(w); + } + break; + case WIDX_CATEGORY_DROPDOWN: + if (s6Info->category != (uint8)dropdownIndex) { + s6Info->category = (uint8)dropdownIndex; + window_invalidate(w); + } + break; + } +} + +/** + * + * rct2: 0x006721E7 + */ +static void window_editor_objective_options_main_update(rct_window *w) +{ + uint32 parkFlags; + uint8 objectiveType; + + w->frame_no++; + window_event_invalidate_call(w); + widget_invalidate(w, WIDX_TAB_1); + + parkFlags = RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32); + objectiveType = RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_TYPE, uint8); + + // Reset objective if invalid + if (( + (parkFlags & PARK_FLAGS_NO_MONEY_SCENARIO) && + + // The following objectives are the only valid objectives when there is no money + objectiveType != OBJECTIVE_HAVE_FUN && + objectiveType != OBJECTIVE_10_ROLLERCOASTERS && + objectiveType != OBJECTIVE_GUESTS_AND_RATING && + objectiveType != OBJECTIVE_10_ROLLERCOASTERS_LENGTH && + objectiveType != OBJECTIVE_FINISH_5_ROLLERCOASTERS + ) || ( + // The park must be free for the monthly ride income objective + !(parkFlags & PARK_FLAGS_PARK_FREE_ENTRY) && + objectiveType == OBJECTIVE_MONTHLY_RIDE_INCOME + )) { + // Reset objective + window_editor_objective_options_set_objective(w, OBJECTIVE_GUESTS_AND_RATING); + } +} + +/** + * + * rct2: 0x00671A73 + */ +static void window_editor_objective_options_main_textinput() +{ + rct_s6_info *s6Info = (rct_s6_info*)0x00141F570; + uint8 result; + short widgetIndex; + rct_window *w; + char *text; + + window_textinput_get_registers(w, widgetIndex, result, text); + + if (!result) + return; + + switch (widgetIndex) { + case WIDX_PARK_NAME: + RCT2_GLOBAL(RCT2_ADDRESS_GAME_COMMAND_ERROR_TITLE, uint16) = STR_CANT_RENAME_PARK; + game_do_command(1, 1, 0, *((int*)(text + 0)), GAME_COMMAND_33, *((int*)(text + 8)), *((int*)(text + 4))); + game_do_command(2, 1, 0, *((int*)(text + 12)), GAME_COMMAND_33, *((int*)(text + 20)), *((int*)(text + 16))); + game_do_command(0, 1, 0, *((int*)(text + 24)), GAME_COMMAND_33, *((int*)(text + 32)), *((int*)(text + 28))); + + if (s6Info->name[0] == 0) + format_string(s6Info->name, RCT2_GLOBAL(0x013573D4, uint16), (void*)0x013573D8); + break; + case WIDX_SCENARIO_NAME: + strncpy(s6Info->name, text, 64); + window_invalidate(w); + break; + case WIDX_DETAILS: + strncpy(s6Info->details, text, 256); + window_invalidate(w); + break; + } +} + +/** + * + * rct2: 0x0067161C + */ +static void window_editor_objective_options_main_invalidate() +{ + rct_window *w; + rct_widget *widgets; + rct_stex_entry *stex; + + window_get_register(w); + + stex = RCT2_GLOBAL(0x009ADAE4, rct_stex_entry*); + if (stex == (rct_stex_entry*)0xFFFFFFFF) + stex = NULL; + + widgets = window_editor_objective_options_widgets[w->page]; + if (w->widgets != widgets) { + w->widgets = widgets; + window_init_scroll_widgets(w); + } + + window_editor_objective_options_set_pressed_tab(w); + + // This options was only available in development version +#ifdef DISABLE_SIX_FLAGS_CHECKBOX + window_editor_objective_options_main_widgets[WIDX_SIX_FLAGS].type = WWT_EMPTY; +#endif + + if (RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & PARK_FLAGS_SIX_FLAGS) + w->pressed_widgets |= (1 << WIDX_SIX_FLAGS); + else + w->pressed_widgets &= ~(1 << WIDX_SIX_FLAGS); + + if (stex == NULL) + w->disabled_widgets &= ~(WIDX_PARK_NAME | WIDX_SCENARIO_NAME); + else + w->disabled_widgets |= (WIDX_PARK_NAME | WIDX_SCENARIO_NAME); + + switch (RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_TYPE, uint8)) { + case OBJECTIVE_GUESTS_BY: + case OBJECTIVE_PARK_VALUE_BY: + window_editor_objective_options_main_widgets[WIDX_OBJECTIVE_ARG_1].type = WWT_SPINNER; + window_editor_objective_options_main_widgets[WIDX_OBJECTIVE_ARG_1_INCREASE].type = WWT_DROPDOWN_BUTTON; + window_editor_objective_options_main_widgets[WIDX_OBJECTIVE_ARG_1_DECREASE].type = WWT_DROPDOWN_BUTTON; + window_editor_objective_options_main_widgets[WIDX_OBJECTIVE_ARG_2].type = WWT_SPINNER; + window_editor_objective_options_main_widgets[WIDX_OBJECTIVE_ARG_2_INCREASE].type = WWT_DROPDOWN_BUTTON; + window_editor_objective_options_main_widgets[WIDX_OBJECTIVE_ARG_2_DECREASE].type = WWT_DROPDOWN_BUTTON; + break; + case OBJECTIVE_GUESTS_AND_RATING: + case OBJECTIVE_MONTHLY_RIDE_INCOME: + case OBJECTIVE_10_ROLLERCOASTERS_LENGTH: + case OBJECTIVE_FINISH_5_ROLLERCOASTERS: + case OBJECTIVE_REPLAY_LOAN_AND_PARK_VALUE: + case OBJECTIVE_MONTHLY_FOOD_INCOME: + window_editor_objective_options_main_widgets[WIDX_OBJECTIVE_ARG_1].type = WWT_SPINNER; + window_editor_objective_options_main_widgets[WIDX_OBJECTIVE_ARG_1_INCREASE].type = WWT_DROPDOWN_BUTTON; + window_editor_objective_options_main_widgets[WIDX_OBJECTIVE_ARG_1_DECREASE].type = WWT_DROPDOWN_BUTTON; + window_editor_objective_options_main_widgets[WIDX_OBJECTIVE_ARG_2].type = WWT_EMPTY; + window_editor_objective_options_main_widgets[WIDX_OBJECTIVE_ARG_2_INCREASE].type = WWT_EMPTY; + window_editor_objective_options_main_widgets[WIDX_OBJECTIVE_ARG_2_DECREASE].type = WWT_EMPTY; + break; + default: + window_editor_objective_options_main_widgets[WIDX_OBJECTIVE_ARG_1].type = WWT_EMPTY; + window_editor_objective_options_main_widgets[WIDX_OBJECTIVE_ARG_1_INCREASE].type = WWT_EMPTY; + window_editor_objective_options_main_widgets[WIDX_OBJECTIVE_ARG_1_DECREASE].type = WWT_EMPTY; + window_editor_objective_options_main_widgets[WIDX_OBJECTIVE_ARG_2].type = WWT_EMPTY; + window_editor_objective_options_main_widgets[WIDX_OBJECTIVE_ARG_2_INCREASE].type = WWT_EMPTY; + window_editor_objective_options_main_widgets[WIDX_OBJECTIVE_ARG_2_DECREASE].type = WWT_EMPTY; + break; + } + + window_editor_objective_options_main_widgets[WIDX_CLOSE].type = + RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & SCREEN_FLAGS_SCENARIO_EDITOR ? WWT_EMPTY : WWT_CLOSEBOX; + + window_editor_objective_options_anchor_border_widgets(w); +} + +/** + * + * rct2: 0x0067161C + */ +static void window_editor_objective_options_main_paint() +{ + rct_s6_info *s6Info = (rct_s6_info*)0x00141F570; + rct_stex_entry *stex; + rct_window *w; + rct_drawpixelinfo *dpi; + int x, y, width; + rct_string_id stringId; + uint32 arg; + + window_paint_get_registers(w, dpi); + + window_draw_widgets(w, dpi); + window_editor_objective_options_draw_tab_images(w, dpi); + + stex = RCT2_GLOBAL(0x009ADAE4, rct_stex_entry*); + if (stex == (rct_stex_entry*)0xFFFFFFFF) + stex = NULL; + + // Objective label + x = w->x + 8; + y = w->y + w->widgets[WIDX_OBJECTIVE].top; + gfx_draw_string_left(dpi, 3287, NULL, 0, x, y); + + // Objective value + x = w->x + w->widgets[WIDX_OBJECTIVE].left + 1; + y = w->y + w->widgets[WIDX_OBJECTIVE].top; + stringId = STR_OBJECTIVE_2_NONE + RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_TYPE, uint8); + gfx_draw_string_left(dpi, 1193, &stringId, 0, x, y); + + if (w->widgets[WIDX_OBJECTIVE_ARG_1].type != WWT_EMPTY) { + // Objective argument 1 label + x = w->x + 28; + y = w->y + w->widgets[WIDX_OBJECTIVE_ARG_1].top; + switch (RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_TYPE, uint8)) { + case OBJECTIVE_GUESTS_BY: + case OBJECTIVE_GUESTS_AND_RATING: + stringId = 3303; + break; + case OBJECTIVE_PARK_VALUE_BY: + case OBJECTIVE_REPLAY_LOAN_AND_PARK_VALUE: + stringId = 3304; + break; + case OBJECTIVE_MONTHLY_RIDE_INCOME: + stringId = 3305; + break; + case OBJECTIVE_MONTHLY_FOOD_INCOME: + stringId = 3306; + break; + case OBJECTIVE_10_ROLLERCOASTERS_LENGTH: + stringId = 3307; + break; + default: + stringId = 3308; + break; + } + gfx_draw_string_left(dpi, stringId, NULL, 0, x, y); + + // Objective argument 1 value + x = w->x + w->widgets[WIDX_OBJECTIVE_ARG_1].left + 1; + y = w->y + w->widgets[WIDX_OBJECTIVE_ARG_1].top; + switch (RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_TYPE, uint8)) { + case OBJECTIVE_GUESTS_BY: + case OBJECTIVE_GUESTS_AND_RATING: + stringId = 3309; + arg = RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_NUM_GUESTS, uint16); + break; + case OBJECTIVE_PARK_VALUE_BY: + case OBJECTIVE_REPLAY_LOAN_AND_PARK_VALUE: + case OBJECTIVE_MONTHLY_RIDE_INCOME: + case OBJECTIVE_MONTHLY_FOOD_INCOME: + stringId = 3246; + arg = RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_CURRENCY, money32); + break; + case OBJECTIVE_10_ROLLERCOASTERS_LENGTH: + stringId = 3310; + arg = RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_NUM_GUESTS, uint16); + break; + default: + stringId = 3311; + arg = RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_CURRENCY, money32); + break; + } + gfx_draw_string_left(dpi, stringId, &arg, 0, x, y); + } + + if (w->widgets[WIDX_OBJECTIVE_ARG_2].type != WWT_EMPTY) { + // Objective argument 2 label + x = w->x + 28; + y = w->y + w->widgets[WIDX_OBJECTIVE_ARG_2].top; + gfx_draw_string_left(dpi, 3301, NULL, 0, x, y); + + // Objective argument 2 value + x = w->x + w->widgets[WIDX_OBJECTIVE_ARG_2].left + 1; + y = w->y + w->widgets[WIDX_OBJECTIVE_ARG_2].top; + arg = (RCT2_GLOBAL(RCT2_ADDRESS_OBJECTIVE_YEAR, uint8) * MONTH_COUNT) - 1; + gfx_draw_string_left(dpi, 3302, &arg, 0, x, y); + } + + // Climate label + x = w->x + 8; + y = w->y + w->widgets[WIDX_CLIMATE].top; + gfx_draw_string_left(dpi, 3289, NULL, 0, x, y); + + // Climate value + x = w->x + w->widgets[WIDX_CLIMATE].left + 1; + y = w->y + w->widgets[WIDX_CLIMATE].top; + stringId = STR_CLIMATE_COOL_AND_WET + RCT2_GLOBAL(RCT2_ADDRESS_CLIMATE, uint8); + gfx_draw_string_left(dpi, 1193, &stringId, 0, x, y); + + // Park name + x = w->x + 8; + y = w->y + w->widgets[WIDX_PARK_NAME].top; + width = w->widgets[WIDX_PARK_NAME].left - 16; + + if (stex != NULL) { + RCT2_GLOBAL(0x013CE952 + 0, uint16) = stex->park_name; + } else { + RCT2_GLOBAL(0x013CE952 + 0, uint16) = RCT2_GLOBAL(0x013573D4, uint16); + } + RCT2_GLOBAL(0x013CE952 + 2, uint32) = RCT2_GLOBAL(0x0013573D8, uint32); + gfx_draw_string_left_clipped(dpi, 3298, (void*)0x013CE952, 0, x, y, width); + + // Scenario name + x = w->x + 8; + y = w->y + w->widgets[WIDX_SCENARIO_NAME].top; + width = w->widgets[WIDX_SCENARIO_NAME].left - 16; + + if (stex != NULL) { + RCT2_GLOBAL(0x013CE952 + 0, uint16) = stex->scenario_name; + } else { + strcpy((char*)0x009BC677, s6Info->name); + RCT2_GLOBAL(0x013CE952 + 0, uint16) = 3165; + } + RCT2_GLOBAL(0x013CE952 + 2, uint32) = RCT2_GLOBAL(0x0013573D8, uint32); + gfx_draw_string_left_clipped(dpi, 3300, (void*)0x013CE952, 0, x, y, width); + + // Scenario details label + x = w->x + 8; + y = w->y + w->widgets[WIDX_DETAILS].top; + gfx_draw_string_left(dpi, 3299, NULL, 0, x, y); + + // Scenario details value + x = w->x + 16; + y = w->y + w->widgets[WIDX_DETAILS].top + 10; + width = w->widgets[WIDX_DETAILS].left - 4; + + if (stex != NULL) { + RCT2_GLOBAL(0x013CE952 + 0, uint16) = stex->details; + } else { + strcpy((char*)0x009BC677, s6Info->details); + RCT2_GLOBAL(0x013CE952 + 0, uint16) = 3165; + } + RCT2_GLOBAL(0x013CE952 + 2, uint32) = RCT2_GLOBAL(0x0013573D8, uint32); + gfx_draw_string_left_wrapped(dpi, (void*)0x013CE952, x, y, width, 1191, 0); + + // Scenario category label + x = w->x + 8; + y = w->y + w->widgets[WIDX_CATEGORY].top; + gfx_draw_string_left(dpi, 3319, NULL, 0, x, y); + + // Scenario category value + x = w->x + w->widgets[WIDX_CATEGORY].left + 1; + y = w->y + w->widgets[WIDX_CATEGORY].top; + stringId = STR_BEGINNER_PARKS + s6Info->category; + gfx_draw_string_left(dpi, 1193, &stringId, 0, x, y); +} + +/** + * + * rct2: 0x006724A4 + */ +static void window_editor_objective_options_rides_mouseup() +{ + rct_s6_info *s6Info = (rct_s6_info*)0x00141F570; + short widgetIndex; + rct_window *w; + + window_widget_get_registers(w, widgetIndex); + + switch (widgetIndex) { + case WIDX_CLOSE: + window_close(w); + break; + case WIDX_TAB_1: + case WIDX_TAB_2: + window_editor_objective_options_set_page(w, widgetIndex - WIDX_TAB_1); + break; + } +} + +/** + * + * rct2: 0x006725A8 + */ +static void window_editor_objective_options_rides_resize() +{ + rct_window *w; + + window_get_register(w); + + window_set_resize(w, 380, 224, 380, 224); +} + +/** + * + * rct2: 0x00672544 + */ +static void window_editor_objective_options_rides_update(rct_window *w) +{ + int i, numItems; + rct_ride *ride; + + w->frame_no++; + window_event_invalidate_call(w); + window_event_resize_call(w); + widget_invalidate(w, WIDX_TAB_2); + + numItems = 0; + FOR_ALL_RIDES(i, ride) { + if (gRideClassifications[ride->type] == RIDE_CLASS_RIDE) { + w->list_item_positions[numItems] = i; + numItems++; + } + } + + if (w->no_list_items != numItems) { + w->no_list_items = numItems; + window_invalidate(w); + } +} + +/** + * + * rct2: 0x006724BF + */ +static void window_editor_objective_options_rides_scrollgetheight() +{ + int width, height; + rct_window *w; + + window_get_register(w); + + width = 0; + height = w->no_list_items * 12; + + window_scrollsize_set_registers(width, height); +} + +/** + * + * rct2: 0x006724FC + */ +static void window_editor_objective_options_rides_scrollmousedown() +{ + rct_ride *ride; + rct_window *w; + short x, y; + int i; + + window_scrollmouse_get_registers(w, x, y); + + i = y / 12; + if (i < 0 || i >= w->no_list_items) + return; + + ride = GET_RIDE(i); + ride->lifecycle_flags ^= RIDE_LIFECYCLE_INDESTRUCTIBLE; + window_invalidate(w); +} + +/** + * + * rct2: 0x006724CC + */ +static void window_editor_objective_options_rides_scrollmouseover() +{ + rct_window *w; + short x, y; + int i; + + window_scrollmouse_get_registers(w, x, y); + + i = y / 12; + if (i < 0 || i >= w->no_list_items) + return; + + if (w->selected_list_item != i) { + w->selected_list_item = i; + window_invalidate(w); + } +} + +/** + * + * rct2: 0x006722B5 + */ +static void window_editor_objective_options_rides_invalidate() +{ + rct_window *w; + rct_widget *widgets; + + window_get_register(w); + + widgets = window_editor_objective_options_widgets[w->page]; + if (w->widgets != widgets) { + w->widgets = widgets; + window_init_scroll_widgets(w); + } + + window_editor_objective_options_set_pressed_tab(w); + + window_editor_objective_options_main_widgets[WIDX_CLOSE].type = + RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & SCREEN_FLAGS_SCENARIO_EDITOR ? WWT_EMPTY : WWT_CLOSEBOX; + + window_editor_objective_options_anchor_border_widgets(w); +} + +/** + * + * rct2: 0x00672340 + */ +static void window_editor_objective_options_rides_paint() +{ + rct_window *w; + rct_drawpixelinfo *dpi; + + window_paint_get_registers(w, dpi); + + window_draw_widgets(w, dpi); + window_editor_objective_options_draw_tab_images(w, dpi); + + gfx_draw_string_left(dpi, 3312, NULL, 0, w->x + 6, w->y + w->widgets[WIDX_PAGE_BACKGROUND].top + 3); +} + +/** + * + * rct2: 0x0067236F + */ +static void window_editor_objective_options_rides_scrollpaint() +{ + int i, y, colour; + rct_string_id stringId; + rct_window *w; + rct_drawpixelinfo *dpi; + rct_ride *ride; + + window_paint_get_registers(w, dpi); + + colour = RCT2_GLOBAL(0x0141FC48 + (w->colours[1] * 8), uint8); + gfx_fill_rect(dpi, dpi->x, dpi->y, dpi->x + dpi->width - 1, dpi->y + dpi->height - 1, colour); + + for (i = 0; i < w->no_list_items; i++) { + y = i * 12; + + if (y + 12 < dpi->y || y >= dpi->y + dpi->height) + continue; + + // Checkbox + gfx_fill_rect_inset(dpi, 2, y, 11, y + 10, w->colours[1], 224); + + // Highlighted + if (i == w->selected_list_item) { + stringId = 1193; + gfx_fill_rect(dpi, 0, y, w->width, y + 11, 0x2000031); + } else { + stringId = 1191; + } + + // Checkbox mark + ride = GET_RIDE(i); + if (ride->lifecycle_flags & RIDE_LIFECYCLE_INDESTRUCTIBLE) { + RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_FONT_SPRITE_BASE, uint16) = stringId == 1193 ? 0xFFFE : 0xFFFF; + gfx_draw_string(dpi, (char*)0x009DED72, w->colours[1] & 0x7F, 2, y); + } + + // Ride name + gfx_draw_string_left(dpi, stringId, &ride->name, 0, 15, y); + } } \ No newline at end of file diff --git a/src/windows/guest.c b/src/windows/guest.c index 68de0e5576..b6bb841f4d 100644 --- a/src/windows/guest.c +++ b/src/windows/guest.c @@ -631,7 +631,7 @@ void window_guest_overview_mouse_up(){ peep_window_state_update(peep); break; case WIDX_RENAME: - window_text_input_open(w, widgetIndex, 0x5AC, 0x5AD, peep->name_string_idx, peep->id); + window_text_input_open(w, widgetIndex, 0x5AC, 0x5AD, peep->name_string_idx, peep->id, 32); break; case WIDX_LOCATE: window_scroll_to_viewport(w); diff --git a/src/windows/park.c b/src/windows/park.c index 19fe4eb853..23087aa8de 100644 --- a/src/windows/park.c +++ b/src/windows/park.c @@ -694,7 +694,7 @@ static void window_park_entrance_mouseup() break; case WIDX_RENAME: RCT2_GLOBAL(0x013CE962, uint32) = RCT2_GLOBAL(0x013573D8, uint32); - window_text_input_open(w, WIDX_RENAME, STR_PARK_NAME, STR_ENTER_PARK_NAME, RCT2_GLOBAL(0x013573D4, rct_string_id), 0); + window_text_input_open(w, WIDX_RENAME, STR_PARK_NAME, STR_ENTER_PARK_NAME, RCT2_GLOBAL(0x013573D4, rct_string_id), 0, 32); break; } } @@ -1649,7 +1649,8 @@ static void window_park_objective_mouseup() STR_ENTER_NAME, STR_PLEASE_ENTER_YOUR_NAME_FOR_THE_SCENARIO_CHART, 0, - 0 + 0, + 32 ); break; } diff --git a/src/windows/ride.c b/src/windows/ride.c index 3d279f5a6f..09ded760dc 100644 --- a/src/windows/ride.c +++ b/src/windows/ride.c @@ -1548,7 +1548,7 @@ static void window_ride_rename(rct_window *w) ride = GET_RIDE(w->number); RCT2_GLOBAL(0x013CE962, uint32) = ride->name_arguments; - window_text_input_open(w, WIDX_RENAME, STR_RIDE_ATTRACTION_NAME, STR_ENTER_NEW_NAME_FOR_THIS_RIDE_ATTRACTION, ride->name, ride->name_arguments); + window_text_input_open(w, WIDX_RENAME, STR_RIDE_ATTRACTION_NAME, STR_ENTER_NEW_NAME_FOR_THIS_RIDE_ATTRACTION, ride->name, ride->name_arguments, 32); } /** diff --git a/src/windows/sign.c b/src/windows/sign.c index aafae6f398..49c58b1f19 100644 --- a/src/windows/sign.c +++ b/src/windows/sign.c @@ -275,7 +275,7 @@ static void window_sign_mouseup() { string_id = gBanners[w->number].string_idx; } - window_text_input_open(w, WIDX_SIGN_TEXT, 2992, 2993, string_id, 0); + window_text_input_open(w, WIDX_SIGN_TEXT, 2992, 2993, string_id, 0, 32); break; } } @@ -596,7 +596,7 @@ static void window_sign_small_mouseup() { string_id = gBanners[w->number].string_idx; } - window_text_input_open(w, WIDX_SIGN_TEXT, 2992, 2993, string_id, 0); + window_text_input_open(w, WIDX_SIGN_TEXT, 2992, 2993, string_id, 0, 32); break; } } diff --git a/src/windows/staff.c b/src/windows/staff.c index e24ec24450..49c50e6108 100644 --- a/src/windows/staff.c +++ b/src/windows/staff.c @@ -469,7 +469,7 @@ void window_staff_overview_mouseup() window_staff_fire_prompt_open(peep); break; case WIDX_RENAME: - window_text_input_open(w, widgetIndex, 2977, 2978, peep->name_string_idx, peep->id); + window_text_input_open(w, widgetIndex, 2977, 2978, peep->name_string_idx, peep->id, 32); break; } } diff --git a/src/windows/text_input.c b/src/windows/text_input.c index cba850a4f5..3ab2861575 100644 --- a/src/windows/text_input.c +++ b/src/windows/text_input.c @@ -34,7 +34,6 @@ #define WW 250 #define WH 90 -#define MAX_TEXTINPUT 32 enum WINDOW_TEXT_INPUT_WIDGET_IDX { WIDX_BACKGROUND, @@ -94,12 +93,16 @@ static void* window_text_input_events[] = { }; int input_text_description; -char text_input[MAX_TEXTINPUT] = { 0 }; +char text_input[512] = { 0 }; rct_windowclass calling_class = 0; rct_windownumber calling_number = 0; int calling_widget = 0; +int _maxInputLength; + +void window_text_input_open(rct_window* call_w, int call_widget, rct_string_id title, rct_string_id description, rct_string_id existing_text, uint32 existing_args, int maxLength) +{ + _maxInputLength = maxLength; -void window_text_input_open(rct_window* call_w, int call_widget, rct_string_id title, rct_string_id description, rct_string_id existing_text, uint32 existing_args){ window_close_by_class(WC_TEXTINPUT); // Window will be in the center of the screen @@ -110,7 +113,8 @@ void window_text_input_open(rct_window* call_w, int call_widget, rct_string_id t WH, (uint32*)window_text_input_events, WC_TEXTINPUT, - 0); + 0 + ); w->widgets = window_text_input_widgets; w->enabled_widgets = (1 << WIDX_CLOSE) | (1<number; calling_widget = call_widget; - osinterface_start_text_input(text_input, MAX_TEXTINPUT); + osinterface_start_text_input(text_input, maxLength); window_init_scroll_widgets(w); w->colours[0] = call_w->colours[0]; @@ -195,7 +199,7 @@ static void window_text_input_paint(){ gfx_draw_string(dpi, text_input, w->colours[1], w->x + 12, y); // Make a copy of the string for measuring the width. - char temp_string[32] = { 0 }; + char temp_string[512] = { 0 }; memcpy(temp_string, text_input, gTextInputCursorPosition); int x = w->x + 13 + gfx_get_string_width(temp_string); diff --git a/src/world/park.h b/src/world/park.h index dc1ef66b03..4033a4d37e 100644 --- a/src/world/park.h +++ b/src/world/park.h @@ -41,7 +41,8 @@ enum { PARK_FLAGS_PARK_FREE_ENTRY = (1 << 13), PARK_FLAGS_DIFFICULT_PARK_RATING = (1 << 14), PARK_FLAGS_NO_MONEY_SCENARIO = (1 << 17), // equivalent to PARK_FLAGS_NO_MONEY, but used in scenario editor - PARK_FLAGS_18 = (1 << 18) + PARK_FLAGS_18 = (1 << 18), + PARK_FLAGS_SIX_FLAGS = (1 << 19) }; int park_is_open();