Add setting to disable water animation depending on zoom level

pull/393/head
Jonathan G Rennison 2 years ago
parent 5055167c44
commit b2d8f3ce43

@ -356,7 +356,21 @@ template <bool Tpal_to_rgb> Sprite *Blitter_32bppOptimized::EncodeInternal(const
dst_px->a = a;
if (a != 0 && a != 255) flags |= BSF_TRANSLUCENT;
*dst_n = src->m;
if (src->m != 0) {
if (z >= _settings_client.gui.disable_water_animation && src->m >= 245 && src->m <= 254) {
*dst_n = 0;
/* Get brightest value */
uint8 rgb_max = std::max({ src->r, src->g, src->b });
/* Black pixel (8bpp or old 32bpp image), so use default value */
if (rgb_max == 0) rgb_max = DEFAULT_BRIGHTNESS;
extern Colour _water_palette[10];
Colour c = this->AdjustBrightness(_water_palette[src->m - 245], rgb_max);
dst_px->r = c.r;
dst_px->g = c.g;
dst_px->b = c.b;
} else if (src->m != 0) {
flags &= ~BSF_NO_REMAP;
if (src->m >= PALETTE_ANIM_START) flags &= ~BSF_NO_ANIM;

@ -74,7 +74,20 @@ Sprite *Blitter_32bppSSE_Base::Encode(const SpriteLoader::Sprite *sprite, Alloca
dst_rgba->a = src->a;
if (src->a != 0 && src->a != 255) has_translucency = true;
dst_mv->m = src->m;
if (src->m != 0) {
if (z >= _settings_client.gui.disable_water_animation && src->m >= 245 && src->m <= 254) {
/* Get brightest value */
uint8 rgb_max = std::max({ src->r, src->g, src->b });
/* Black pixel (8bpp or old 32bpp image), so use default value */
if (rgb_max == 0) rgb_max = Blitter_32bppBase::DEFAULT_BRIGHTNESS;
extern Colour _water_palette[10];
Colour c = AdjustBrightneSSE(_water_palette[src->m - 245], rgb_max);
dst_rgba->r = c.r;
dst_rgba->g = c.g;
dst_rgba->b = c.b;
dst_mv->v = Blitter_32bppBase::DEFAULT_BRIGHTNESS;
} else if (src->m != 0) {
/* Do some accounting for flags. */
has_remap = true;
if (src->m >= PALETTE_ANIM_START) has_anim = true;

@ -1289,8 +1289,16 @@ static void GfxMainBlitter(const Sprite *sprite, int x, int y, BlitterMode mode,
void DoPaletteAnimations();
Colour _water_palette[10];
void GfxInitPalettes()
{
MemCpyT<Colour>(_water_palette, (_settings_game.game_creation.landscape == LT_TOYLAND) ? _extra_palette_values.dark_water_toyland : _extra_palette_values.dark_water, 5);
const Colour *s = (_settings_game.game_creation.landscape == LT_TOYLAND) ? _extra_palette_values.glitter_water_toyland : _extra_palette_values.glitter_water;
for (int i = 0; i < 5; i++) {
_water_palette[i + 5] = s[i * 3];
}
std::lock_guard<std::mutex> lock_state(_cur_palette_mutex);
memcpy(&_cur_palette, &_palette, sizeof(_cur_palette));
DoPaletteAnimations();

@ -515,8 +515,8 @@ void GfxLoadSprites()
VideoDriver::GetInstance()->ClearSystemSprites();
ClearFontCache();
GfxInitSpriteMem();
LoadSpriteTables();
GfxInitPalettes();
LoadSpriteTables();
GfxDetermineMainColours();
UpdateRouteStepSpriteSize();

@ -1621,6 +1621,12 @@ STR_CONFIG_SETTING_DUAL_PANE_TRAIN_PURCHASE_WINDOW_HELPTEXT :When enabled, t
STR_CONFIG_SETTING_ALLOW_HIDE_WAYPOINT_LABEL :Allow hiding waypoint viewport labels: {STRING2}
STR_CONFIG_SETTING_ALLOW_HIDE_WAYPOINT_LABEL_HELPTEXT :When enabled, waypoints can have their viewport labels individually hidden.{}This is useful when waypoints are used decoratively or when minor waypoints do not require a label.
STR_CONFIG_SETTING_DISABLE_WATER_ANIMATION :Disable water animation: {STRING2}
STR_CONFIG_SETTING_DISABLE_WATER_ANIMATION_HELPTEXT :When enabled, disables water animation when the zoom level is at or more zoomed out than the specified zoom level.{}This can be useful to avoid visual artefacts with animated water at high zoom levels with some basesets.
STR_CONFIG_SETTING_DISABLE_WATER_ANIMATION_8X :8x zoom and above
STR_CONFIG_SETTING_DISABLE_WATER_ANIMATION_16X :16x zoom and above
STR_CONFIG_SETTING_DISABLE_WATER_ANIMATION_32X :32x zoom and above
STR_CONFIG_SETTING_ADV_SIG_BRIDGE_TUN_MODES :Enable signals on bridges/tunnels advanced modes: {STRING2}
STR_CONFIG_SETTING_ADV_SIG_BRIDGE_TUN_MODES_HELPTEXT :Enables use of advanced modes of signal simulation on bridges and tunnels. When disabled, bridges/tunnels which are not already in an advanced mode cannot be changed to an advanced mode, however other players may choose to enable this setting and use an advanced mode.

@ -1934,6 +1934,7 @@ static SettingsContainer &GetSettingsTree()
interface->Add(new SettingEntry("gui.station_rating_tooltip_mode"));
interface->Add(new SettingEntry("gui.dual_pane_train_purchase_window"));
interface->Add(new SettingEntry("gui.allow_hiding_waypoint_labels"));
interface->Add(new SettingEntry("gui.disable_water_animation"));
}
SettingsPage *advisors = main->Add(new SettingsPage(STR_CONFIG_SETTING_ADVISORS));

@ -246,6 +246,7 @@ struct GUISettings : public TimeSettings {
uint8 demolish_confirm_mode; ///< Demolition confirmation mode
bool dual_pane_train_purchase_window; ///< Dual pane train purchase window
bool allow_hiding_waypoint_labels; ///< Allow hiding waypoint viewport labels
uint8 disable_water_animation; ///< Disable water animation depending on zoom level
uint16 console_backlog_timeout; ///< the minimum amount of time items should be in the console backlog before they will be removed in ~3 seconds granularity.
uint16 console_backlog_length; ///< the minimum amount of items in the console backlog before items will be removed.

@ -131,6 +131,14 @@ static const SettingDescEnumEntry _station_delivery_mode[] = {
{ 0, STR_NULL }
};
static const SettingDescEnumEntry _disable_water_animation[] = {
{ 255, STR_CONFIG_SETTING_OFF },
{ 3, STR_CONFIG_SETTING_DISABLE_WATER_ANIMATION_8X },
{ 4, STR_CONFIG_SETTING_DISABLE_WATER_ANIMATION_16X },
{ 5, STR_CONFIG_SETTING_DISABLE_WATER_ANIMATION_32X },
{ 0, STR_NULL }
};
/* Some settings do not need to be synchronised when playing in multiplayer.
* These include for example the GUI settings and will not be saved with the
* savegame.
@ -5502,6 +5510,16 @@ str = STR_CONFIG_SETTING_ALLOW_HIDE_WAYPOINT_LABEL
strhelp = STR_CONFIG_SETTING_ALLOW_HIDE_WAYPOINT_LABEL_HELPTEXT
post_cb = [](auto) { MarkWholeScreenDirty(); InvalidateWindowClassesData(WC_WAYPOINT_VIEW, 0); }
[SDTC_ENUM]
var = gui.disable_water_animation
type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
def = 255
enumlist = _disable_water_animation
str = STR_CONFIG_SETTING_DISABLE_WATER_ANIMATION
strhelp = STR_CONFIG_SETTING_DISABLE_WATER_ANIMATION_HELPTEXT
post_cb = SpriteZoomMinChanged
; For the dedicated build we'll enable dates in logs by default.
[SDTC_BOOL]
ifdef = DEDICATED

Loading…
Cancel
Save