diff --git a/data/language/en-GB.txt b/data/language/en-GB.txt index a726c0faf2..8e0ecbe8bc 100644 --- a/data/language/en-GB.txt +++ b/data/language/en-GB.txt @@ -4228,6 +4228,9 @@ STR_5916 :{COMMA16} player STR_5917 :{COMMA16} players STR_5918 :{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{POP16}{COMMA16} STR_5919 :{COMMA16} +STR_5920 :Render weather effects +STR_5921 :{SMALLFONT}{BLACK}If enabled, rain and gloomy colours will be rendered during storms. + ############# # Scenarios # diff --git a/distribution/changelog.txt b/distribution/changelog.txt index 6a6af9eb05..382db2c4c0 100644 --- a/distribution/changelog.txt +++ b/distribution/changelog.txt @@ -1,5 +1,6 @@ 0.0.5 (in development) ------------------------------------------------------------------------ +- Feature: Ability to disable rendering of weather effects and gloom - Feature: New view option: "See-Through Paths" - Feature: Add cheat to reset date. - Feature: Add OpenGL drawing engine. @@ -8,7 +9,7 @@ - Feature: Add ride console command for diagnostics and changing vehicle type. - Feature: Allow selecting corners when using the mountain tool. - Feature: Allow setting ownership of map edges. -- Feature: Allow up to 255 cars per train. +- Feature: Allow up to 255 cars per train and 32 track units per station - Feature: Importing SV4 and SC4 files with rides. - Feature: Filter Object Selection Window by "Selected only" and "Non-selected only" - Feature: Allow raising terrain to 64 in-game units. diff --git a/src/config.c b/src/config.c index 940416a633..736028511f 100644 --- a/src/config.c +++ b/src/config.c @@ -227,6 +227,8 @@ config_property_definition _generalDefinitions[] = { { offsetof(general_configuration, last_save_track_directory), "last_track_directory", CONFIG_VALUE_TYPE_STRING, { .value_string = NULL }, NULL }, { offsetof(general_configuration, window_limit), "window_limit", CONFIG_VALUE_TYPE_UINT8, WINDOW_LIMIT_MAX, NULL }, { offsetof(general_configuration, zoom_to_cursor), "zoom_to_cursor", CONFIG_VALUE_TYPE_BOOLEAN, true, NULL }, + { offsetof(general_configuration, render_weather_effects), "render_weather_effects", CONFIG_VALUE_TYPE_BOOLEAN, true, NULL }, + { offsetof(general_configuration, render_weather_gloom), "render_weather_gloom", CONFIG_VALUE_TYPE_BOOLEAN, true, NULL }, }; config_property_definition _interfaceDefinitions[] = { diff --git a/src/config.h b/src/config.h index 5a08f2f680..dcf76859bb 100644 --- a/src/config.h +++ b/src/config.h @@ -200,6 +200,8 @@ typedef struct general_configuration { utf8string last_save_track_directory; uint8 window_limit; uint8 zoom_to_cursor; + uint8 render_weather_effects; + uint8 render_weather_gloom; } general_configuration; typedef struct interface_configuration { diff --git a/src/drawing/Rain.cpp b/src/drawing/Rain.cpp index c8cbb6701c..e8c5e00631 100644 --- a/src/drawing/Rain.cpp +++ b/src/drawing/Rain.cpp @@ -19,6 +19,7 @@ extern "C" #include "../interface/window.h" #include "../world/climate.h" #include "drawing.h" + #include "../config.h" } #include "IDrawingEngine.h" @@ -86,6 +87,9 @@ static void DrawRainWindow(IRainDrawer * rainDrawer, sint16 bottom, uint32 rainType) { + if (!gConfigGeneral.render_weather_effects) + return; + rct_window * newWindow = gWindowNextSlot; rct_window * w = original_w + 1; // Start from second window for (; ; w++) diff --git a/src/game.c b/src/game.c index 9ac5b51d3a..968464335f 100644 --- a/src/game.c +++ b/src/game.c @@ -186,7 +186,7 @@ void update_palette_effects() int q = 0; extern const sint32 WeatherColours[4]; int weather_colour = WeatherColours[gClimateCurrentWeatherGloom]; - if (weather_colour != -1) { + if (weather_colour != -1 && gConfigGeneral.render_weather_gloom) { q = 1; if (weather_colour != 0x2000031) { q = 2; diff --git a/src/interface/viewport.c b/src/interface/viewport.c index eebdf41b59..7841498f7c 100644 --- a/src/interface/viewport.c +++ b/src/interface/viewport.c @@ -777,7 +777,7 @@ void viewport_paint(rct_viewport* viewport, rct_drawpixelinfo* dpi, int left, in paint_quadrant_ps(); int weather_colour = WeatherColours[gClimateCurrentWeatherGloom]; - if ((weather_colour != -1) && (!(gCurrentViewportFlags & VIEWPORT_FLAG_INVISIBLE_SPRITES)) && !gTrackDesignSaveMode) { + if ((weather_colour != -1) && (!(gCurrentViewportFlags & VIEWPORT_FLAG_INVISIBLE_SPRITES)) && !gTrackDesignSaveMode && gConfigGeneral.render_weather_gloom) { gfx_fill_rect(dpi2, dpi2->x, dpi2->y, dpi2->width + dpi2->x - 1, dpi2->height + dpi2->y - 1, weather_colour); } viewport_draw_money_effects(); diff --git a/src/localisation/string_ids.h b/src/localisation/string_ids.h index aa215e076c..de00fbb6ae 100644 --- a/src/localisation/string_ids.h +++ b/src/localisation/string_ids.h @@ -3570,6 +3570,8 @@ enum { STR_MULTIPLAYER_PLAYER_COUNT_PLURAL = 5917, STR_SERVER_MAX_PLAYERS_VALUE = 5918, STR_COMMA16 = 5919, + STR_RENDER_WEATHER_EFFECTS = 5920, + STR_RENDER_WEATHER_EFFECTS_TIP = 5921, // 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/windows/options.c b/src/windows/options.c index eb8fd07eb8..e8d979a593 100644 --- a/src/windows/options.c +++ b/src/windows/options.c @@ -97,7 +97,8 @@ enum WINDOW_OPTIONS_WIDGET_IDX { WIDX_DAY_NIGHT_CHECKBOX, WIDX_UPPER_CASE_BANNERS_CHECKBOX, WIDX_DISABLE_LIGHTNING_EFFECT_CHECKBOX, - + WIDX_RENDER_WEATHER_EFFECTS_CHECKBOX, + // Culture / Units WIDX_LANGUAGE = WIDX_PAGE_START, WIDX_LANGUAGE_DROPDOWN, @@ -224,14 +225,15 @@ static rct_widget window_options_display_widgets[] = { static rct_widget window_options_rendering_widgets[] = { MAIN_OPTIONS_WIDGETS, #define FRAME_RENDERING_START 53 - { WWT_GROUPBOX, 1, 5, 304, FRAME_RENDERING_START + 0, FRAME_RENDERING_START + 106, STR_RENDERING_GROUP, STR_NONE }, // Rendering group - { WWT_CHECKBOX, 1, 10, 290, FRAME_RENDERING_START + 15, FRAME_RENDERING_START + 26, STR_TILE_SMOOTHING, STR_TILE_SMOOTHING_TIP }, // Landscape smoothing - { WWT_CHECKBOX, 1, 10, 290, FRAME_RENDERING_START + 30, FRAME_RENDERING_START + 41, STR_GRIDLINES, STR_GRIDLINES_TIP }, // Gridlines - { WWT_DROPDOWN, 1, 155, 299, FRAME_RENDERING_START + 45, FRAME_RENDERING_START + 55, STR_NONE, STR_NONE }, // Construction marker - { WWT_DROPDOWN_BUTTON, 1, 288, 298, FRAME_RENDERING_START + 46, FRAME_RENDERING_START + 54, STR_DROPDOWN_GLYPH, STR_CONSTRUCTION_MARKER_COLOUR_TIP }, - { 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, 10, 290, FRAME_RENDERING_START + 75, FRAME_RENDERING_START + 86, STR_UPPERCASE_BANNERS, STR_UPPERCASE_BANNERS_TIP }, // Uppercase banners - { WWT_CHECKBOX, 1, 10, 290, FRAME_RENDERING_START + 90, FRAME_RENDERING_START + 101, STR_DISABLE_LIGHTNING_EFFECT, STR_DISABLE_LIGHTNING_EFFECT_TIP }, // Disable lightning effect + { WWT_GROUPBOX, 1, 5, 304, FRAME_RENDERING_START + 0, FRAME_RENDERING_START + 136, STR_RENDERING_GROUP, STR_NONE }, // Rendering group + { WWT_CHECKBOX, 1, 10, 290, FRAME_RENDERING_START + 15, FRAME_RENDERING_START + 26, STR_TILE_SMOOTHING, STR_TILE_SMOOTHING_TIP }, // Landscape smoothing + { WWT_CHECKBOX, 1, 10, 290, FRAME_RENDERING_START + 30, FRAME_RENDERING_START + 41, STR_GRIDLINES, STR_GRIDLINES_TIP }, // Gridlines + { WWT_DROPDOWN, 1, 155, 299, FRAME_RENDERING_START + 45, FRAME_RENDERING_START + 55, STR_NONE, STR_NONE }, // Construction marker + { WWT_DROPDOWN_BUTTON, 1, 288, 298, FRAME_RENDERING_START + 46, FRAME_RENDERING_START + 54, STR_DROPDOWN_GLYPH, STR_CONSTRUCTION_MARKER_COLOUR_TIP }, + { 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, 10, 290, FRAME_RENDERING_START + 75, FRAME_RENDERING_START + 86, STR_UPPERCASE_BANNERS, STR_UPPERCASE_BANNERS_TIP }, // Uppercase banners + { WWT_CHECKBOX, 1, 10, 290, FRAME_RENDERING_START + 90, FRAME_RENDERING_START + 101, STR_DISABLE_LIGHTNING_EFFECT, STR_DISABLE_LIGHTNING_EFFECT_TIP }, // Disable lightning effect + { 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 #undef FRAME_RENDERING_START { WIDGETS_END }, }; @@ -463,7 +465,8 @@ static uint32 window_options_page_enabled_widgets[] = { (1 << WIDX_CONSTRUCTION_MARKER_DROPDOWN) | (1 << WIDX_DAY_NIGHT_CHECKBOX) | (1 << WIDX_UPPER_CASE_BANNERS_CHECKBOX) | - (1 << WIDX_DISABLE_LIGHTNING_EFFECT_CHECKBOX), + (1 << WIDX_DISABLE_LIGHTNING_EFFECT_CHECKBOX) | + (1 << WIDX_RENDER_WEATHER_EFFECTS_CHECKBOX), MAIN_OPTIONS_ENABLED_WIDGETS | (1 << WIDX_LANGUAGE) | @@ -651,6 +654,12 @@ static void window_options_mouseup(rct_window *w, int widgetIndex) config_save_default(); window_invalidate(w); break; + case WIDX_RENDER_WEATHER_EFFECTS_CHECKBOX: + gConfigGeneral.render_weather_effects ^= 1; + gConfigGeneral.render_weather_gloom = gConfigGeneral.render_weather_effects; + config_save_default(); + gfx_invalidate_screen(); + break; } break; @@ -1462,6 +1471,7 @@ static void window_options_invalidate(rct_window *w) widget_set_checkbox_value(w, WIDX_DAY_NIGHT_CHECKBOX, gConfigGeneral.day_night_cycle); widget_set_checkbox_value(w, WIDX_UPPER_CASE_BANNERS_CHECKBOX, gConfigGeneral.upper_case_banners); widget_set_checkbox_value(w, WIDX_DISABLE_LIGHTNING_EFFECT_CHECKBOX, gConfigGeneral.disable_lightning_effect); + widget_set_checkbox_value(w, WIDX_RENDER_WEATHER_EFFECTS_CHECKBOX, gConfigGeneral.render_weather_effects || gConfigGeneral.render_weather_gloom); // construction marker: white/translucent static const rct_string_id construction_marker_colours[] = { @@ -1477,6 +1487,7 @@ static void window_options_invalidate(rct_window *w) window_options_rendering_widgets[WIDX_DAY_NIGHT_CHECKBOX].type = WWT_CHECKBOX; window_options_rendering_widgets[WIDX_UPPER_CASE_BANNERS_CHECKBOX].type = WWT_CHECKBOX; window_options_rendering_widgets[WIDX_DISABLE_LIGHTNING_EFFECT_CHECKBOX].type = WWT_CHECKBOX; + window_options_rendering_widgets[WIDX_RENDER_WEATHER_EFFECTS_CHECKBOX].type = WWT_CHECKBOX; break; case WINDOW_OPTIONS_PAGE_CULTURE: