Option for early scenario completion (#7187)

This commit is contained in:
thyeggman 2018-03-20 04:58:59 -07:00 committed by Aaron van Geffen
parent 9c568105f2
commit ccb1b330a5
7 changed files with 58 additions and 25 deletions

View File

@ -4476,7 +4476,7 @@ STR_6166 :{SMALLFONT}{BLACK}Synchronises each frame displayed to the monitor'
STR_6167 :{SMALLFONT}{BLACK}Advanced
STR_6168 :Title Sequence
STR_6169 :Scenario selection
STR_6170 :Tweaks
STR_6170 :Interface Tweaks
STR_6171 :Search
STR_6172 :{SMALLFONT}{BLACK}Search
STR_6173 :Please provide the name to search:
@ -4532,6 +4532,9 @@ STR_6222 :Can't place guest entry point here...
STR_6223 :Must be outside park boundaries!
STR_6224 :{STRING} placed a guest entry point.
STR_6225 :Not supported with OpenGL renderer
STR_6226 :Enable early scenario completion
STR_6227 :{SMALLFONT}{BLACK}Triggers scenario completion when all scenario goals are met before the target date.
STR_6228 :Scenario Options
#############
# Scenarios #

View File

@ -1,5 +1,6 @@
0.1.3 (in development)
------------------------------------------------------------------------
- Feature: [#7187] Option for early scenario completion.
- Feature: [#7267] Leverage more historical data in Finances window.
- Improved: Raising land near the map edge makes the affected area smaller instead of showing an 'off edge map' error.

View File

@ -162,6 +162,8 @@ enum WINDOW_OPTIONS_WIDGET_IDX {
WIDX_SCENARIO_GROUPING,
WIDX_SCENARIO_GROUPING_DROPDOWN,
WIDX_SCENARIO_UNLOCKING,
WIDX_SCENARIO_OPTIONS_GROUP,
WIDX_ALLOW_EARLY_COMPLETION,
WIDX_TWEAKS_GROUP,
WIDX_REAL_NAME_CHECKBOX,
WIDX_AUTO_STAFF_PLACEMENT,
@ -255,8 +257,8 @@ static rct_widget window_options_rendering_widgets[] = {
{ WWT_CHECKBOX, 1, 10, 290, FRAME_RENDERING_START + 45, FRAME_RENDERING_START + 56, STR_ENABLE_VIRTUAL_FLOOR, STR_ENABLE_VIRTUAL_FLOOR_TIP }, // Virtual floor
{ WWT_CHECKBOX, 1, 10, 290, FRAME_RENDERING_START + 60, FRAME_RENDERING_START + 71, STR_CYCLE_DAY_NIGHT, STR_CYCLE_DAY_NIGHT_TIP }, // Cycle day-night
{ WWT_CHECKBOX, 1, 25, 290, FRAME_RENDERING_START + 75, FRAME_RENDERING_START + 86, STR_ENABLE_LIGHTING_EFFECTS, STR_ENABLE_LIGHTING_EFFECTS_TIP }, // Enable light fx
{ WWT_CHECKBOX, 1, 10, 290, FRAME_RENDERING_START + 90, FRAME_RENDERING_START + 101, STR_UPPERCASE_BANNERS, STR_UPPERCASE_BANNERS_TIP }, // Uppercase banners
{ WWT_CHECKBOX, 1, 10, 290, FRAME_RENDERING_START + 105, FRAME_RENDERING_START + 116, STR_RENDER_WEATHER_EFFECTS, STR_RENDER_WEATHER_EFFECTS_TIP }, // Render weather effects
{ WWT_CHECKBOX, 1, 10, 290, FRAME_RENDERING_START + 90, FRAME_RENDERING_START + 101, STR_UPPERCASE_BANNERS, STR_UPPERCASE_BANNERS_TIP }, // Uppercase banners
{ WWT_CHECKBOX, 1, 10, 290, FRAME_RENDERING_START + 105, FRAME_RENDERING_START + 116, STR_RENDER_WEATHER_EFFECTS, STR_RENDER_WEATHER_EFFECTS_TIP }, // Render weather effects
{ WWT_CHECKBOX, 1, 25, 290, FRAME_RENDERING_START + 120, FRAME_RENDERING_START + 131, STR_DISABLE_LIGHTNING_EFFECT, STR_DISABLE_LIGHTNING_EFFECT_TIP }, // Disable lightning effect
{ WWT_CHECKBOX, 1, 10, 290, FRAME_RENDERING_START + 135, FRAME_RENDERING_START + 146, STR_SHOW_GUEST_PURCHASES, STR_SHOW_GUEST_PURCHASES_TIP },
#undef FRAME_RENDERING_START
@ -324,24 +326,28 @@ static rct_widget window_options_controls_and_interface_widgets[] = {
static rct_widget window_options_misc_widgets[] = {
MAIN_OPTIONS_WIDGETS,
#define TITLE_SEQUENCE_START 53
{ WWT_GROUPBOX, 1, 5, 304, TITLE_SEQUENCE_START + 0, TITLE_SEQUENCE_START + 49, STR_OPTIONS_TITLE_SEQUENCE, STR_NONE },
{ WWT_DROPDOWN, 1, 135, 299, TITLE_SEQUENCE_START + 15, TITLE_SEQUENCE_START + 26, STR_NONE, STR_NONE }, // Title sequence dropdown
{ WWT_BUTTON, 1, 288, 298, TITLE_SEQUENCE_START + 16, TITLE_SEQUENCE_START + 25, STR_DROPDOWN_GLYPH, STR_TITLE_SEQUENCE_TIP }, // Title sequence dropdown button
{ WWT_BUTTON, 1, 135, 299, TITLE_SEQUENCE_START + 30, TITLE_SEQUENCE_START + 42, STR_EDIT_TITLE_SEQUENCES_BUTTON, STR_EDIT_TITLE_SEQUENCES_BUTTON_TIP }, // Edit title sequences button
{ WWT_GROUPBOX, 1, 5, 304, TITLE_SEQUENCE_START + 0, TITLE_SEQUENCE_START + 49, STR_OPTIONS_TITLE_SEQUENCE, STR_NONE },
{ WWT_DROPDOWN, 1, 135, 299, TITLE_SEQUENCE_START + 15, TITLE_SEQUENCE_START + 26, STR_NONE, STR_NONE }, // Title sequence dropdown
{ WWT_BUTTON, 1, 288, 298, TITLE_SEQUENCE_START + 16, TITLE_SEQUENCE_START + 25, STR_DROPDOWN_GLYPH, STR_TITLE_SEQUENCE_TIP }, // Title sequence dropdown button
{ WWT_BUTTON, 1, 135, 299, TITLE_SEQUENCE_START + 30, TITLE_SEQUENCE_START + 42, STR_EDIT_TITLE_SEQUENCES_BUTTON, STR_EDIT_TITLE_SEQUENCES_BUTTON_TIP }, // Edit title sequences button
#undef TITLE_SEQUENCE_START
#define SCENARIO_START 107
{ WWT_GROUPBOX, 1, 5, 304, SCENARIO_START + 0, SCENARIO_START + 50, STR_OPTIONS_SCENARIO_SELECTION, STR_NONE },
{ WWT_DROPDOWN, 1, 175, 299, SCENARIO_START + 15, SCENARIO_START + 26, STR_NONE, STR_NONE }, // Scenario select mode
{ WWT_BUTTON, 1, 288, 298, SCENARIO_START + 16, SCENARIO_START + 25, STR_DROPDOWN_GLYPH, STR_SCENARIO_GROUPING_TIP },
{ WWT_CHECKBOX, 2, 25, 299, SCENARIO_START + 30, SCENARIO_START + 45, STR_OPTIONS_SCENARIO_UNLOCKING, STR_SCENARIO_UNLOCKING_TIP }, // Unlocking of scenarios
{ WWT_GROUPBOX, 1, 5, 304, SCENARIO_START + 0, SCENARIO_START + 50, STR_OPTIONS_SCENARIO_SELECTION, STR_NONE },
{ WWT_DROPDOWN, 1, 175, 299, SCENARIO_START + 15, SCENARIO_START + 26, STR_NONE, STR_NONE }, // Scenario select mode
{ WWT_BUTTON, 1, 288, 298, SCENARIO_START + 16, SCENARIO_START + 25, STR_DROPDOWN_GLYPH, STR_SCENARIO_GROUPING_TIP },
{ WWT_CHECKBOX, 2, 25, 299, SCENARIO_START + 30, SCENARIO_START + 45, STR_OPTIONS_SCENARIO_UNLOCKING, STR_SCENARIO_UNLOCKING_TIP }, // Unlocking of scenarios
#undef SCENARIO_START
#define TWEAKS_START 162
{ WWT_GROUPBOX, 1, 5, 304, TWEAKS_START + 0, TWEAKS_START + 80, STR_OPTIONS_TWEAKS, STR_NONE },
{ WWT_CHECKBOX, 2, 10, 299, TWEAKS_START + 15, TWEAKS_START + 29, STR_REAL_NAME, STR_REAL_NAME_TIP }, // Show 'real' names of guests
{ WWT_CHECKBOX, 2, 10, 299, TWEAKS_START + 30, TWEAKS_START + 44, STR_AUTO_STAFF_PLACEMENT, STR_AUTO_STAFF_PLACEMENT_TIP }, // Auto staff placement
{ WWT_CHECKBOX, 2, 10, 299, TWEAKS_START + 45, TWEAKS_START + 59, STR_AUTO_OPEN_SHOPS, STR_AUTO_OPEN_SHOPS_TIP }, // Automatically open shops & stalls
{ WWT_DROPDOWN, 1, 175, 299, TWEAKS_START + 61, TWEAKS_START + 72, STR_NONE, STR_NONE }, // Default inspection time dropdown
{ WWT_BUTTON, 1, 288, 298, TWEAKS_START + 62, TWEAKS_START + 71, STR_DROPDOWN_GLYPH, STR_DEFAULT_INSPECTION_INTERVAL_TIP }, // Default inspection time dropdown button
#define SCENARIO_OPTIONS_START 162
{ WWT_GROUPBOX, 1, 5, 304, SCENARIO_OPTIONS_START + 0, SCENARIO_OPTIONS_START + 34, STR_SCENARIO_OPTIONS, STR_NONE },
{ WWT_CHECKBOX, 2, 10, 299, SCENARIO_OPTIONS_START + 15, SCENARIO_OPTIONS_START + 29, STR_ALLOW_EARLY_COMPLETION, STR_EARLY_COMPLETION_TIP }, // Allow early scenario completion
#undef SCENARIO_OPTIONS_START
#define TWEAKS_START 201
{ WWT_GROUPBOX, 1, 5, 304, TWEAKS_START + 0, TWEAKS_START + 80, STR_OPTIONS_TWEAKS, STR_NONE },
{ WWT_CHECKBOX, 2, 10, 299, TWEAKS_START + 15, TWEAKS_START + 29, STR_REAL_NAME, STR_REAL_NAME_TIP }, // Show 'real' names of guests
{ WWT_CHECKBOX, 2, 10, 299, TWEAKS_START + 30, TWEAKS_START + 44, STR_AUTO_STAFF_PLACEMENT, STR_AUTO_STAFF_PLACEMENT_TIP }, // Auto staff placement
{ WWT_CHECKBOX, 2, 10, 299, TWEAKS_START + 45, TWEAKS_START + 59, STR_AUTO_OPEN_SHOPS, STR_AUTO_OPEN_SHOPS_TIP }, // Automatically open shops & stalls
{ WWT_DROPDOWN, 1, 175, 299, TWEAKS_START + 61, TWEAKS_START + 72, STR_NONE, STR_NONE }, // Default inspection time dropdown
{ WWT_BUTTON, 1, 288, 298, TWEAKS_START + 62, TWEAKS_START + 71, STR_DROPDOWN_GLYPH, STR_DEFAULT_INSPECTION_INTERVAL_TIP }, // Default inspection time dropdown button
#undef TWEAKS_START
{ WIDGETS_END },
};
@ -355,7 +361,7 @@ static rct_widget window_options_advanced_widgets[] = {
{ WWT_CHECKBOX, 2, 10, 299, 114, 125, STR_STAY_CONNECTED_AFTER_DESYNC, STR_STAY_CONNECTED_AFTER_DESYNC_TIP }, // Do not disconnect after the client desynchronises with the server
{ WWT_DROPDOWN, 1, 165, 299, 130, 141, STR_NONE, STR_NONE }, // Autosave dropdown
{ WWT_BUTTON, 1, 288, 298, 131, 140, STR_DROPDOWN_GLYPH, STR_AUTOSAVE_FREQUENCY_TIP }, // Autosave dropdown button
{ WWT_LABEL, 1, 23, 298, 148, 159, STR_PATH_TO_RCT1, STR_PATH_TO_RCT1_TIP }, // RCT 1 path text
{ WWT_LABEL, 1, 23, 298, 148, 159, STR_PATH_TO_RCT1, STR_PATH_TO_RCT1_TIP }, // RCT 1 path text
{ WWT_BUTTON, 1, 24, 289, 163, 176, STR_NONE, STR_STRING_TOOLTIP }, // RCT 1 path button
{ WWT_BUTTON, 1, 289, 299, 163, 176, STR_CLOSE_X, STR_PATH_TO_RCT1_CLEAR_TIP }, // RCT 1 path clear button
{ WIDGETS_END },
@ -578,6 +584,7 @@ static uint64 window_options_page_enabled_widgets[] = {
(1 << WIDX_SCENARIO_GROUPING) |
(1 << WIDX_SCENARIO_GROUPING_DROPDOWN) |
(1 << WIDX_SCENARIO_UNLOCKING) |
(1 << WIDX_ALLOW_EARLY_COMPLETION) |
(1 << WIDX_AUTO_OPEN_SHOPS) |
(1 << WIDX_DEFAULT_INSPECTION_INTERVAL) |
(1 << WIDX_DEFAULT_INSPECTION_INTERVAL_DROPDOWN),
@ -867,6 +874,11 @@ static void window_options_mouseup(rct_window *w, rct_widgetindex widgetIndex)
config_save_default();
window_invalidate(w);
break;
case WIDX_ALLOW_EARLY_COMPLETION:
gConfigGeneral.allow_early_completion ^= 1;
config_save_default();
window_invalidate(w);
break;
}
break;
@ -1736,10 +1748,12 @@ static void window_options_invalidate(rct_window *w)
widget_set_checkbox_value(w, WIDX_REAL_NAME_CHECKBOX, gConfigGeneral.show_real_names_of_guests);
widget_set_checkbox_value(w, WIDX_AUTO_STAFF_PLACEMENT, gConfigGeneral.auto_staff_placement);
widget_set_checkbox_value(w, WIDX_AUTO_OPEN_SHOPS, gConfigGeneral.auto_open_shops);
widget_set_checkbox_value(w, WIDX_ALLOW_EARLY_COMPLETION, gConfigGeneral.allow_early_completion);
window_options_misc_widgets[WIDX_REAL_NAME_CHECKBOX].type = WWT_CHECKBOX;
window_options_misc_widgets[WIDX_AUTO_STAFF_PLACEMENT].type = WWT_CHECKBOX;
window_options_misc_widgets[WIDX_AUTO_OPEN_SHOPS].type = WWT_CHECKBOX;
window_options_misc_widgets[WIDX_ALLOW_EARLY_COMPLETION].type = WWT_CHECKBOX;
window_options_misc_widgets[WIDX_TITLE_SEQUENCE].type = WWT_DROPDOWN;
window_options_misc_widgets[WIDX_TITLE_SEQUENCE_DROPDOWN].type = WWT_BUTTON;

View File

@ -210,6 +210,7 @@ namespace Config
model->render_weather_gloom = reader->GetBoolean("render_weather_gloom", true);
model->show_guest_purchases = reader->GetBoolean("show_guest_purchases", false);
model->show_real_names_of_guests = reader->GetBoolean("show_real_names_of_guests", true);
model->allow_early_completion = reader->GetBoolean("allow_early_completion", false);
}
}
@ -281,6 +282,7 @@ namespace Config
writer->WriteBoolean("show_guest_purchases", model->show_guest_purchases);
writer->WriteBoolean("show_real_names_of_guests", model->show_real_names_of_guests);
writer->WriteBoolean("use_virtual_floor", model->use_virtual_floor);
writer->WriteBoolean("allow_early_completion", model->allow_early_completion);
}
static void ReadInterface(IIniReader * reader)

View File

@ -88,6 +88,7 @@ struct GeneralConfiguration
bool scenario_hide_mega_park;
bool steam_overlay_pause;
bool show_real_names_of_guests;
bool allow_early_completion;
bool confirmation_prompt;
sint32 load_save_sort;

View File

@ -3887,6 +3887,10 @@ enum {
STR_NOT_SUPPPORTED_IN_OPENGL = 6225,
STR_ALLOW_EARLY_COMPLETION = 6226,
STR_EARLY_COMPLETION_TIP = 6227,
STR_SCENARIO_OPTIONS = 6228,
// Have to include resource strings (from scenarios and objects) for the time being now that language is partially working
STR_COUNT = 32768
};

View File

@ -310,6 +310,10 @@ static void scenario_day_update()
case OBJECTIVE_REPLAY_LOAN_AND_PARK_VALUE:
scenario_objective_check();
break;
default:
if (gConfigGeneral.allow_early_completion)
scenario_objective_check();
break;
}
// Lower the casualty penalty
@ -736,11 +740,13 @@ static void scenario_objective_check_guests_by()
sint16 objectiveGuests = gScenarioObjectiveNumGuests;
sint16 currentMonthYear = gDateMonthsElapsed;
if (currentMonthYear == 8 * objectiveYear){
if (parkRating >= 600 && guestsInPark >= objectiveGuests)
if (currentMonthYear == 8 * objectiveYear || gConfigGeneral.allow_early_completion) {
if (parkRating >= 600 && guestsInPark >= objectiveGuests) {
scenario_success();
else
}
else if (currentMonthYear == 8 * objectiveYear) {
scenario_failure();
}
}
}
@ -751,11 +757,13 @@ static void scenario_objective_check_park_value_by()
money32 objectiveParkValue = gScenarioObjectiveCurrency;
money32 parkValue = gParkValue;
if (currentMonthYear == 8 * objectiveYear) {
if (parkValue >= objectiveParkValue)
if (currentMonthYear == 8 * objectiveYear || gConfigGeneral.allow_early_completion) {
if (parkValue >= objectiveParkValue) {
scenario_success();
else
}
else if (currentMonthYear == 8 * objectiveYear) {
scenario_failure();
}
}
}