diff --git a/data/language/english_uk.txt b/data/language/english_uk.txt index e609ee119b..f39d020b6a 100644 --- a/data/language/english_uk.txt +++ b/data/language/english_uk.txt @@ -3845,4 +3845,6 @@ STR_5503 :Enter hostname or IP address: STR_5504 :{SMALLFONT}{BLACK}Show multiplayer status STR_5505 :Unable to connect to server. STR_5506 :Guests ignore intensities -STR_5507 :Handymen mow grass by default \ No newline at end of file +STR_5507 :Handymen mow grass by default +STR_5508 :Allow loading files with incorrect checksums +STR_5509 :{SMALLFONT}{BLACK}Allows loading scenarios and saves that have an incorrect checksum, like the scenarios from the demo or damaged saves. diff --git a/src/config.c b/src/config.c index 41ef33dccb..304bb22e98 100644 --- a/src/config.c +++ b/src/config.c @@ -191,6 +191,7 @@ config_property_definition _generalDefinitions[] = { { offsetof(general_configuration, minimize_fullscreen_focus_loss), "minimize_fullscreen_focus_loss",CONFIG_VALUE_TYPE_BOOLEAN, true, NULL }, { offsetof(general_configuration, day_night_cycle), "day_night_cycle", CONFIG_VALUE_TYPE_BOOLEAN, false, NULL }, { offsetof(general_configuration, upper_case_banners), "upper_case_banners", CONFIG_VALUE_TYPE_BOOLEAN, false, NULL }, + { offsetof(general_configuration, allow_loading_with_incorrect_checksum),"allow_loading_with_incorrect_checksum", CONFIG_VALUE_TYPE_BOOLEAN, false, NULL }, }; config_property_definition _interfaceDefinitions[] = { diff --git a/src/config.h b/src/config.h index 35ed2e74c5..b472fb7e3e 100644 --- a/src/config.h +++ b/src/config.h @@ -164,6 +164,7 @@ typedef struct { uint8 minimize_fullscreen_focus_loss; uint8 day_night_cycle; uint8 upper_case_banners; + uint8 allow_loading_with_incorrect_checksum; } general_configuration; typedef struct { diff --git a/src/localisation/string_ids.h b/src/localisation/string_ids.h index b03c6b3c28..9dc99a6756 100644 --- a/src/localisation/string_ids.h +++ b/src/localisation/string_ids.h @@ -1894,7 +1894,11 @@ enum { STR_GAME_SPEED_TIP = 5148, STR_CHEATS_TIP = 5149, + STR_ENABLE_DEBUGGING_TOOLS = 5150, + STR_EDIT_THEMES_BUTTON = 5153, STR_HARDWARE_DISPLAY = 5154, + STR_TEST_UNFINISHED_TRACKS = 5155, + STR_TEST_UNFINISHED_TRACKS_TIP = 5156, STR_TWITCH_NAME = 5164, STR_TWITCH_PEEP_FOLLOWERS = 5165, @@ -1920,12 +1924,17 @@ enum { STR_OPTIONS_CONTROLS_AND_INTERFACE_TIP = 5269, STR_OPTIONS_MISCELLANEOUS_TIP = 5270, STR_OPTIONS_TWITCH_TIP = 5271, - STR_CHEAT_SANDBOX_MODE = 5278, STR_CHEAT_SANDBOX_MODE_DISABLE = 5279, STR_CHEAT_SANDBOX_MODE_TIP = 5280, - STR_CHEAT_STAFF_SPEED = 5365, - STR_CHEAT_RESET_CRASH_STATUS = 5368, + + STR_TITLE_SEQUENCE = 5304, + STR_TITLE_SEQUENCE_RCT1 = 5305, + STR_TITLE_SEQUENCE_RCT1_AA = 5306, + STR_TITLE_SEQUENCE_RCT1_AA_LL = 5307, + STR_TITLE_SEQUENCE_RCT2 = 5308, + STR_TITLE_SEQUENCE_OPENRCT2 = 5309, + STR_TITLE_SEQUENCE_RANDOM = 5310, STR_DEBUG_TIP = 5311, STR_DEBUG_DROPDOWN_CONSOLE = 5312, @@ -1942,20 +1951,16 @@ enum { STR_TILE_INSPECTOR_FLAGS = 5341, STR_TILE_INSPECTOR_CHOOSE_MSG = 5342, - STR_CHANGELOG_TITLE = 5344, + STR_AUTO_STAFF_PLACEMENT = 5343, - STR_TITLE_SEQUENCE = 5304, - STR_TITLE_SEQUENCE_RCT1 = 5305, - STR_TITLE_SEQUENCE_RCT1_AA = 5306, - STR_TITLE_SEQUENCE_RCT1_AA_LL = 5307, - STR_TITLE_SEQUENCE_RCT2 = 5308, - STR_TITLE_SEQUENCE_OPENRCT2 = 5309, - STR_TITLE_SEQUENCE_RANDOM = 5310, + STR_CHANGELOG_TITLE = 5344, STR_MAX = 5350, STR_MIN = 5351, + STR_CHEAT_STAFF_SPEED = 5365, STR_NORMAL = 5366, STR_FAST = 5367, + STR_CHEAT_RESET_CRASH_STATUS = 5368, STR_INVERT_RIGHT_MOUSE_DRAG = 5372, @@ -1964,6 +1969,8 @@ enum { STR_UP = 5375, STR_DOWN = 5376, + STR_EDIT_TITLE_SEQUENCES_BUTTON = 5436, + STR_MININISE_FULL_SCREEN_ON_FOCUS_LOSS = 5440, STR_SELECT_BY_TRACK_TYPE_TIP = 5441, @@ -2047,6 +2054,10 @@ enum { STR_SHOW_MULTIPLAYER_STATUS_TIP = 5504, STR_UNABLE_TO_CONNECT_TO_SERVER = 5505, + STR_HANDYMEN_MOW_BY_DEFAULT = 5507, + STR_ALLOW_LOADING_WITH_INCORRECT_CHECKSUM = 5508, + STR_ALLOW_LOADING_WITH_INCORRECT_CHECKSUM_TIP = 5509, + // Have to include resource strings (from scenarios and objects) for the time being now that language is partially working STR_COUNT = 32768 }; diff --git a/src/scenario.c b/src/scenario.c index 3eed3a5182..925071bb7f 100644 --- a/src/scenario.c +++ b/src/scenario.c @@ -109,7 +109,7 @@ int scenario_load(const char *path) rw = platform_sdl_rwfromfile(path, "rb"); if (rw != NULL) { - if (!sawyercoding_validate_checksum(rw)) { + if (!sawyercoding_validate_checksum(rw) && !gConfigGeneral.allow_loading_with_incorrect_checksum) { SDL_RWclose(rw); RCT2_GLOBAL(RCT2_ADDRESS_ERROR_TYPE, uint8) = 255; RCT2_GLOBAL(RCT2_ADDRESS_ERROR_STRING_ID, uint16) = STR_FILE_CONTAINS_INVALID_DATA; diff --git a/src/windows/options.c b/src/windows/options.c index 62acfdb030..8659a794eb 100644 --- a/src/windows/options.c +++ b/src/windows/options.c @@ -139,6 +139,7 @@ enum WINDOW_OPTIONS_WIDGET_IDX { WIDX_TITLE_SEQUENCE, WIDX_TITLE_SEQUENCE_DROPDOWN, WIDX_TITLE_SEQUENCE_BUTTON, + WIDX_ALLOW_LOADING_WITH_INCORRECT_CHECKSUM, // Twitch WIDX_CHANNEL_BUTTON = WIDX_PAGE_START, @@ -168,9 +169,9 @@ static rct_widget window_options_display_widgets[] = { MAIN_OPTIONS_WIDGETS, { WWT_GROUPBOX, 1, 5, 304, 53, 145, STR_HARDWARE_GROUP, STR_NONE }, // Hardware group { WWT_DROPDOWN, 1, 155, 299, 68, 79, STR_RESOLUTION_X_BY_Y, STR_NONE }, // resolution - { WWT_DROPDOWN_BUTTON, 1, 288, 298, 69, 78, 876, STR_NONE }, + { WWT_DROPDOWN_BUTTON, 1, 288, 298, 69, 78, STR_DROPDOWN_GLYPH, STR_NONE }, { WWT_DROPDOWN, 1, 155, 299, 83, 94, 871, STR_NONE }, // fullscreen - { WWT_DROPDOWN_BUTTON, 1, 288, 298, 84, 93, 876, STR_NONE }, + { WWT_DROPDOWN_BUTTON, 1, 288, 298, 84, 93, STR_DROPDOWN_GLYPH, STR_NONE }, { WWT_CHECKBOX, 1, 10, 290, 99, 110, STR_HARDWARE_DISPLAY, STR_NONE }, // hardware display { WWT_CHECKBOX, 1, 10, 290, 114, 125, STR_UNCAP_FPS, STR_NONE }, // uncap fps { WWT_CHECKBOX, 1, 10, 290, 129, 140, STR_MININISE_FULL_SCREEN_ON_FOCUS_LOSS, STR_NONE }, // minimise fullscreen focus loss @@ -179,7 +180,7 @@ static rct_widget window_options_display_widgets[] = { { WWT_CHECKBOX, 1, 10, 290, 164, 175, STR_TILE_SMOOTHING, STR_TILE_SMOOTHING_TIP }, // landscape smoothing { WWT_CHECKBOX, 1, 10, 290, 179, 190, STR_GRIDLINES, STR_GRIDLINES_TIP }, // gridlines { WWT_DROPDOWN, 1, 155, 299, 193, 204, STR_NONE, STR_NONE }, // construction marker - { WWT_DROPDOWN_BUTTON, 1, 288, 298, 194, 203, 876, STR_NONE }, + { WWT_DROPDOWN_BUTTON, 1, 288, 298, 194, 203, STR_DROPDOWN_GLYPH, STR_NONE }, { WWT_CHECKBOX, 1, 10, 290, 209, 220, STR_CYCLE_DAY_NIGHT, STR_NONE }, // cycle day-night { WWT_CHECKBOX, 1, 10, 290, 224, 235, STR_UPPER_CASE_BANNERS, STR_NONE }, // upper case banners { WIDGETS_END }, @@ -187,30 +188,30 @@ static rct_widget window_options_display_widgets[] = { static rct_widget window_options_culture_widgets[] = { MAIN_OPTIONS_WIDGETS, - { WWT_DROPDOWN, 1, 155, 299, 53, 64, STR_NONE, STR_NONE }, // language - { WWT_DROPDOWN_BUTTON, 1, 288, 298, 54, 63, 876, STR_NONE }, - { WWT_DROPDOWN, 1, 155, 299, 68, 79, 871, STR_NONE }, // currency - { WWT_DROPDOWN_BUTTON, 1, 288, 298, 69, 78, 876, STR_NONE }, // - { WWT_DROPDOWN, 1, 155, 299, 83, 94, 872, STR_NONE }, // distance - { WWT_DROPDOWN_BUTTON, 1, 288, 298, 84, 93, 876, STR_NONE }, - { WWT_DROPDOWN, 1, 155, 299, 98, 110, 875, STR_NONE }, // temperature - { WWT_DROPDOWN_BUTTON, 1, 288, 298, 99, 108, 876, STR_NONE }, - { WWT_DROPDOWN, 1, 155, 299, 113, 124, 868, STR_NONE }, // height labels - { WWT_DROPDOWN_BUTTON, 1, 288, 298, 114, 123, 876, STR_NONE }, - { WWT_DROPDOWN, 1, 155, 299, 128, 139, STR_NONE, STR_NONE }, // date format - { WWT_DROPDOWN_BUTTON, 1, 288, 298, 129, 138, 876, STR_NONE }, + { WWT_DROPDOWN, 1, 155, 299, 53, 64, STR_NONE, STR_NONE }, // language + { WWT_DROPDOWN_BUTTON, 1, 288, 298, 54, 63, STR_DROPDOWN_GLYPH, STR_NONE }, + { WWT_DROPDOWN, 1, 155, 299, 68, 79, 871, STR_NONE }, // currency + { WWT_DROPDOWN_BUTTON, 1, 288, 298, 69, 78, STR_DROPDOWN_GLYPH, STR_NONE }, // + { WWT_DROPDOWN, 1, 155, 299, 83, 94, 872, STR_NONE }, // distance + { WWT_DROPDOWN_BUTTON, 1, 288, 298, 84, 93, STR_DROPDOWN_GLYPH, STR_NONE }, + { WWT_DROPDOWN, 1, 155, 299, 98, 110, 875, STR_NONE }, // temperature + { WWT_DROPDOWN_BUTTON, 1, 288, 298, 99, 108, STR_DROPDOWN_GLYPH, STR_NONE }, + { WWT_DROPDOWN, 1, 155, 299, 113, 124, 868, STR_NONE }, // height labels + { WWT_DROPDOWN_BUTTON, 1, 288, 298, 114, 123, STR_DROPDOWN_GLYPH, STR_NONE }, + { WWT_DROPDOWN, 1, 155, 299, 128, 139, STR_NONE, STR_NONE }, // date format + { WWT_DROPDOWN_BUTTON, 1, 288, 298, 129, 138, STR_DROPDOWN_GLYPH, STR_NONE }, { WIDGETS_END }, }; static rct_widget window_options_audio_widgets[] = { MAIN_OPTIONS_WIDGETS, { WWT_DROPDOWN, 1, 10, 299, 53, 64, 865, STR_NONE }, // audio device - { WWT_DROPDOWN_BUTTON, 1, 288, 298, 54, 63, 876, STR_NONE }, + { WWT_DROPDOWN_BUTTON, 1, 288, 298, 54, 63, STR_DROPDOWN_GLYPH, STR_NONE }, { WWT_CHECKBOX, 1, 10, 229, 69, 80, STR_SOUND, STR_NONE }, // enable / disable sound { WWT_CHECKBOX, 1, 10, 229, 84, 95, STR_MUSIC, STR_NONE }, // enable / disable music { WWT_CHECKBOX, 1, 10, 229, 98, 110, STR_AUDIO_FOCUS, STR_NONE }, // enable / disable audio disabled on focus lost { WWT_DROPDOWN, 1, 155, 299, 112, 124, STR_NONE, STR_NONE }, // title music - { WWT_DROPDOWN_BUTTON, 1, 288, 298, 113, 123, 876, STR_NONE }, + { WWT_DROPDOWN_BUTTON, 1, 288, 298, 113, 123, STR_DROPDOWN_GLYPH, STR_NONE }, { WWT_SCROLL, 1, 155, 299, 68, 80, 1, STR_NONE }, // master volume { WWT_SCROLL, 1, 155, 299, 83, 95, 1, STR_NONE }, // music volume { WIDGETS_END }, @@ -225,8 +226,8 @@ static rct_widget window_options_controls_and_interface_widgets[] = { { WWT_GROUPBOX, 1, 5, 304, 118, 164, STR_THEMES_GROUP, STR_NONE }, // Toolbar buttons group { WWT_DROPDOWN, 1, 155, 299, 132, 143, STR_NONE, STR_NONE }, // Themes - { WWT_DROPDOWN_BUTTON, 1, 288, 298, 133, 142, 876, STR_NONE }, - { WWT_DROPDOWN_BUTTON, 1, 10, 145, 148, 159, 5153, STR_NONE }, // Themes button + { WWT_DROPDOWN_BUTTON, 1, 288, 298, 133, 142, STR_DROPDOWN_GLYPH, STR_NONE }, + { WWT_DROPDOWN_BUTTON, 1, 10, 145, 148, 159, STR_EDIT_THEMES_BUTTON, STR_NONE }, // Themes button { WWT_GROUPBOX, 1, 5, 304, 168, 230, STR_TOOLBAR_BUTTONS_GROUP, STR_NONE }, // Toolbar buttons group { WWT_CHECKBOX, 2, 10, 145, 199, 210, STR_FINANCES_BUTTON_ON_TOOLBAR, STR_NONE }, // Finances @@ -240,17 +241,18 @@ static rct_widget window_options_controls_and_interface_widgets[] = { static rct_widget window_options_misc_widgets[] = { MAIN_OPTIONS_WIDGETS, - { WWT_CHECKBOX, 2, 10, 299, 54, 65, STR_REAL_NAME, STR_REAL_NAME_TIP }, - { WWT_CHECKBOX, 2, 10, 299, 69, 80, STR_SAVE_PLUGIN_DATA, STR_SAVE_PLUGIN_DATA_TIP }, - { WWT_DROPDOWN, 1, 155, 299, 83, 94, STR_NONE, STR_NONE }, - { WWT_DROPDOWN_BUTTON, 1, 288, 298, 84, 93, 876, STR_NONE }, - { WWT_CHECKBOX, 2, 10, 299, 114, 125, 5155, 5156 }, // test unfinished tracks - { WWT_CHECKBOX, 2, 10, 299, 129, 140, 5343, STR_NONE }, // auto staff placement - { WWT_CHECKBOX, 2, 10, 299, 144, 155, 5507, STR_NONE }, // handymen mow by default - { WWT_CHECKBOX, 2, 10, 299, 159, 170, 5150, STR_NONE }, // enabled debugging tools - { WWT_DROPDOWN, 1, 155, 299, 173, 184, STR_NONE, STR_NONE }, - { WWT_DROPDOWN_BUTTON, 1, 288, 298, 174, 183, 876, STR_NONE }, - { WWT_DROPDOWN_BUTTON, 1, 26, 185, 189, 200, 5436, STR_NONE }, // Title sequences button + { WWT_CHECKBOX, 2, 10, 299, 54, 65, STR_REAL_NAME, STR_REAL_NAME_TIP }, + { WWT_CHECKBOX, 2, 10, 299, 69, 80, STR_SAVE_PLUGIN_DATA, STR_SAVE_PLUGIN_DATA_TIP }, + { WWT_DROPDOWN, 1, 155, 299, 83, 94, STR_NONE, STR_NONE }, + { WWT_DROPDOWN_BUTTON, 1, 288, 298, 84, 93, STR_DROPDOWN_GLYPH, STR_NONE }, + { WWT_CHECKBOX, 2, 10, 299, 114, 125, STR_TEST_UNFINISHED_TRACKS, STR_TEST_UNFINISHED_TRACKS_TIP }, // test unfinished tracks + { WWT_CHECKBOX, 2, 10, 299, 129, 140, STR_AUTO_STAFF_PLACEMENT, STR_NONE }, // auto staff placement + { WWT_CHECKBOX, 2, 10, 299, 144, 155, STR_HANDYMEN_MOW_BY_DEFAULT, STR_NONE }, // handymen mow by default + { WWT_CHECKBOX, 2, 10, 299, 159, 170, STR_ENABLE_DEBUGGING_TOOLS, STR_NONE }, // enable debugging tools + { WWT_DROPDOWN, 1, 155, 299, 173, 184, STR_NONE, STR_NONE }, + { WWT_DROPDOWN_BUTTON, 1, 288, 298, 174, 183, STR_DROPDOWN_GLYPH, STR_NONE }, + { WWT_DROPDOWN_BUTTON, 1, 26, 185, 189, 200, STR_EDIT_TITLE_SEQUENCES_BUTTON, STR_NONE }, // Title sequences button + { WWT_CHECKBOX, 2, 10, 299, 204, 215, STR_ALLOW_LOADING_WITH_INCORRECT_CHECKSUM, STR_ALLOW_LOADING_WITH_INCORRECT_CHECKSUM_TIP }, // Allow loading with incorrect checksum { WIDGETS_END }, }; @@ -404,7 +406,8 @@ static uint32 window_options_page_enabled_widgets[] = { (1 << WIDX_DEBUGGING_TOOLS) | (1 << WIDX_TITLE_SEQUENCE) | (1 << WIDX_TITLE_SEQUENCE_DROPDOWN) | - (1 << WIDX_TITLE_SEQUENCE_BUTTON), + (1 << WIDX_TITLE_SEQUENCE_BUTTON) | + (1 << WIDX_ALLOW_LOADING_WITH_INCORRECT_CHECKSUM), MAIN_OPTIONS_ENABLED_WIDGETS | (1 << WIDX_CHANNEL_BUTTON) | @@ -625,6 +628,12 @@ static void window_options_mouseup(rct_window *w, int widgetIndex) break; case WIDX_TITLE_SEQUENCE_BUTTON: window_title_editor_open(0); + break; + case WIDX_ALLOW_LOADING_WITH_INCORRECT_CHECKSUM: + gConfigGeneral.allow_loading_with_incorrect_checksum = !gConfigGeneral.allow_loading_with_incorrect_checksum; + config_save_default(); + window_invalidate(w); + break; } break; @@ -1231,6 +1240,7 @@ static void window_options_invalidate(rct_window *w) widget_set_checkbox_value(w, WIDX_AUTO_STAFF_PLACEMENT, gConfigGeneral.auto_staff_placement); widget_set_checkbox_value(w, WIDX_HANDYMEN_MOW_DEFAULT, gConfigGeneral.handymen_mow_default); widget_set_checkbox_value(w, WIDX_DEBUGGING_TOOLS, gConfigGeneral.debugging_tools); + widget_set_checkbox_value(w, WIDX_ALLOW_LOADING_WITH_INCORRECT_CHECKSUM, gConfigGeneral.allow_loading_with_incorrect_checksum); window_options_misc_widgets[WIDX_REAL_NAME_CHECKBOX].type = WWT_CHECKBOX; window_options_misc_widgets[WIDX_SAVE_PLUGIN_DATA_CHECKBOX].type = WWT_CHECKBOX; @@ -1243,6 +1253,7 @@ static void window_options_invalidate(rct_window *w) window_options_misc_widgets[WIDX_TITLE_SEQUENCE].type = WWT_DROPDOWN; window_options_misc_widgets[WIDX_TITLE_SEQUENCE_DROPDOWN].type = WWT_DROPDOWN_BUTTON; window_options_misc_widgets[WIDX_TITLE_SEQUENCE_BUTTON].type = WWT_DROPDOWN_BUTTON; + window_options_misc_widgets[WIDX_ALLOW_LOADING_WITH_INCORRECT_CHECKSUM].type = WWT_CHECKBOX; break; case WINDOW_OPTIONS_PAGE_TWITCH: