Add setting to disable water animation depending on zoom level
This commit is contained in:
@@ -356,7 +356,21 @@ template <bool Tpal_to_rgb> Sprite *Blitter_32bppOptimized::EncodeInternal(const
|
|||||||
dst_px->a = a;
|
dst_px->a = a;
|
||||||
if (a != 0 && a != 255) flags |= BSF_TRANSLUCENT;
|
if (a != 0 && a != 255) flags |= BSF_TRANSLUCENT;
|
||||||
*dst_n = src->m;
|
*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;
|
flags &= ~BSF_NO_REMAP;
|
||||||
if (src->m >= PALETTE_ANIM_START) flags &= ~BSF_NO_ANIM;
|
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;
|
dst_rgba->a = src->a;
|
||||||
if (src->a != 0 && src->a != 255) has_translucency = true;
|
if (src->a != 0 && src->a != 255) has_translucency = true;
|
||||||
dst_mv->m = src->m;
|
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. */
|
/* Do some accounting for flags. */
|
||||||
has_remap = true;
|
has_remap = true;
|
||||||
if (src->m >= PALETTE_ANIM_START) has_anim = 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();
|
void DoPaletteAnimations();
|
||||||
|
|
||||||
|
Colour _water_palette[10];
|
||||||
|
|
||||||
void GfxInitPalettes()
|
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);
|
std::lock_guard<std::mutex> lock_state(_cur_palette_mutex);
|
||||||
memcpy(&_cur_palette, &_palette, sizeof(_cur_palette));
|
memcpy(&_cur_palette, &_palette, sizeof(_cur_palette));
|
||||||
DoPaletteAnimations();
|
DoPaletteAnimations();
|
||||||
|
@@ -515,8 +515,8 @@ void GfxLoadSprites()
|
|||||||
VideoDriver::GetInstance()->ClearSystemSprites();
|
VideoDriver::GetInstance()->ClearSystemSprites();
|
||||||
ClearFontCache();
|
ClearFontCache();
|
||||||
GfxInitSpriteMem();
|
GfxInitSpriteMem();
|
||||||
LoadSpriteTables();
|
|
||||||
GfxInitPalettes();
|
GfxInitPalettes();
|
||||||
|
LoadSpriteTables();
|
||||||
GfxDetermineMainColours();
|
GfxDetermineMainColours();
|
||||||
|
|
||||||
UpdateRouteStepSpriteSize();
|
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 :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_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 :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.
|
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.station_rating_tooltip_mode"));
|
||||||
interface->Add(new SettingEntry("gui.dual_pane_train_purchase_window"));
|
interface->Add(new SettingEntry("gui.dual_pane_train_purchase_window"));
|
||||||
interface->Add(new SettingEntry("gui.allow_hiding_waypoint_labels"));
|
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));
|
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
|
uint8 demolish_confirm_mode; ///< Demolition confirmation mode
|
||||||
bool dual_pane_train_purchase_window; ///< Dual pane train purchase window
|
bool dual_pane_train_purchase_window; ///< Dual pane train purchase window
|
||||||
bool allow_hiding_waypoint_labels; ///< Allow hiding waypoint viewport labels
|
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_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.
|
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 }
|
{ 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.
|
/* 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
|
* These include for example the GUI settings and will not be saved with the
|
||||||
* savegame.
|
* savegame.
|
||||||
@@ -5502,6 +5510,16 @@ str = STR_CONFIG_SETTING_ALLOW_HIDE_WAYPOINT_LABEL
|
|||||||
strhelp = STR_CONFIG_SETTING_ALLOW_HIDE_WAYPOINT_LABEL_HELPTEXT
|
strhelp = STR_CONFIG_SETTING_ALLOW_HIDE_WAYPOINT_LABEL_HELPTEXT
|
||||||
post_cb = [](auto) { MarkWholeScreenDirty(); InvalidateWindowClassesData(WC_WAYPOINT_VIEW, 0); }
|
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.
|
; For the dedicated build we'll enable dates in logs by default.
|
||||||
[SDTC_BOOL]
|
[SDTC_BOOL]
|
||||||
ifdef = DEDICATED
|
ifdef = DEDICATED
|
||||||
|
Reference in New Issue
Block a user