implement editor objective options window

This commit is contained in:
IntelOrca 2014-12-10 23:07:11 +00:00
parent ce695ac8d4
commit ff478b8673
13 changed files with 1351 additions and 32 deletions

View File

@ -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

View File

@ -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,

View File

@ -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]

View File

@ -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);

View File

@ -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();
}

File diff suppressed because it is too large Load Diff

View File

@ -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);

View File

@ -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;
}

View File

@ -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);
}
/**

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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<<WIDX_CANCEL) | (1<<WIDX_OKAY);
@ -118,7 +122,7 @@ void window_text_input_open(rct_window* call_w, int call_widget, rct_string_id t
window_text_input_widgets[WIDX_TITLE].image = title;
// Clear the text input buffer
memset(text_input, 0, MAX_TEXTINPUT);
memset(text_input, 0, maxLength);
// Enter in the the text input buffer any existing
// text.
@ -133,7 +137,7 @@ void window_text_input_open(rct_window* call_w, int call_widget, rct_string_id t
calling_number = call_w->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);

View File

@ -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();