diff --git a/src/openrct2-ui/interface/Theme.cpp b/src/openrct2-ui/interface/Theme.cpp index ecf6ae169f..df577ffb69 100644 --- a/src/openrct2-ui/interface/Theme.cpp +++ b/src/openrct2-ui/interface/Theme.cpp @@ -770,6 +770,55 @@ void ThemeSetColour(WindowClass wc, uint8_t index, colour_t colour) ThemeSave(); } +// Quick and dirty mapping for new colors to original colors, until flags are extracted from color upper bits +colour_t ThemeOverrideExtendedColour(colour_t inputColour) +{ + switch (inputColour - COLOUR_ID_G2_OFFSET) + { + case COLOUR_DARK_OLIVE_DARK: + case COLOUR_DARK_OLIVE_LIGHT: + return COLOUR_DARK_OLIVE_GREEN; + case COLOUR_SATURATED_BROWN_LIGHT: + return COLOUR_LIGHT_BROWN; + case COLOUR_BORDEAUX_RED_DARK: + case COLOUR_BORDEAUX_RED_LIGHT: + return COLOUR_BORDEAUX_RED; + case COLOUR_GRASS_GREEN_DARK: + case COLOUR_GRASS_GREEN_LIGHT: + return COLOUR_MOSS_GREEN; + case COLOUR_OLIVE_DARK: + case COLOUR_OLIVE_LIGHT: + return COLOUR_OLIVE_GREEN; + case COLOUR_SATURATED_GREEN_LIGHT: + return COLOUR_BRIGHT_GREEN; + case COLOUR_TAN_DARK: + case COLOUR_TAN_LIGHT: + return COLOUR_SALMON_PINK; + case COLOUR_DULL_PURPLE_LIGHT: + return COLOUR_LIGHT_PURPLE; + case COLOUR_DULL_GREEN_DARK: + case COLOUR_DULL_GREEN_LIGHT: + return COLOUR_DARK_GREEN; + case COLOUR_SATURATED_PURPLE_DARK: + case COLOUR_SATURATED_PURPLE_LIGHT: + return COLOUR_BRIGHT_PURPLE; + case COLOUR_ORANGE_LIGHT: + return COLOUR_LIGHT_ORANGE; + case COLOUR_AQUA_DARK: + return COLOUR_AQUAMARINE; + case COLOUR_MAGENTA_LIGHT: + return COLOUR_BRIGHT_PINK; + case COLOUR_DULL_BROWN_DARK: + case COLOUR_DULL_BROWN_LIGHT: + return COLOUR_DARK_BROWN; + case COLOUR_INVISIBLE: + case COLOUR_VOID: + return COLOUR_BLACK; + default: + return inputColour; + } +} + uint8_t ThemeGetFlags() { return ThemeManager::CurrentTheme->Flags; diff --git a/src/openrct2-ui/interface/Theme.h b/src/openrct2-ui/interface/Theme.h index e0def3382d..20babae241 100644 --- a/src/openrct2-ui/interface/Theme.h +++ b/src/openrct2-ui/interface/Theme.h @@ -37,6 +37,7 @@ size_t ThemeGetIndexForName(const utf8* name); colour_t ThemeGetColour(WindowClass wc, uint8_t index); void ThemeSetColour(WindowClass wc, uint8_t index, colour_t colour); +colour_t ThemeOverrideExtendedColour(colour_t inputColour); uint8_t ThemeGetFlags(); void ThemeSetFlags(uint8_t flags); void ThemeSave(); diff --git a/src/openrct2-ui/windows/Themes.cpp b/src/openrct2-ui/windows/Themes.cpp index db06190513..8eb72964f9 100644 --- a/src/openrct2-ui/windows/Themes.cpp +++ b/src/openrct2-ui/windows/Themes.cpp @@ -615,9 +615,10 @@ public: case WIDX_THEMES_LIST: if (selectedIndex != -1) { + const auto newColour = ThemeOverrideExtendedColour(selectedIndex); WindowClass wc = GetWindowClassTabIndex(_colour_index_1); uint8_t colour = ThemeGetColour(wc, _colour_index_2); - colour = (colour & COLOUR_FLAG_TRANSLUCENT) | selectedIndex; + colour = (colour & COLOUR_FLAG_TRANSLUCENT) | newColour; ThemeSetColour(wc, _colour_index_2, colour); ColourSchemeUpdateAll(); WindowInvalidateAll(); diff --git a/src/openrct2/interface/Colour.cpp b/src/openrct2/interface/Colour.cpp index d9ccaedecb..db80e464de 100644 --- a/src/openrct2/interface/Colour.cpp +++ b/src/openrct2/interface/Colour.cpp @@ -42,7 +42,6 @@ void ColoursInitMaps() // Get palette index in g1 / g2 const auto paletteIndex = (i < COLOUR_NUM_ORIGINAL) ? SPR_PALETTE_2_START : SPR_G2_PALETTE_BEGIN - COLOUR_NUM_ORIGINAL; const G1Element* g1 = GfxGetG1Element(paletteIndex + i); - //TODO: Integrate themes with G2 palettes if (g1 != nullptr) { ColourMapA[i].colour_0 = g1->offset[INDEX_COLOUR_0]; diff --git a/src/openrct2/interface/Colour.h b/src/openrct2/interface/Colour.h index 934cdc8d3a..7c259691bb 100644 --- a/src/openrct2/interface/Colour.h +++ b/src/openrct2/interface/Colour.h @@ -205,6 +205,7 @@ constexpr uint8_t PALETTE_LENGTH_ANIMATED = 16; constexpr uint8_t COLOUR_NUM_ORIGINAL = 32; constexpr uint8_t COLOUR_NUM_NORMAL = 54; +// COLOUR_ID_G2_OFFSET = PALETTE_TO_G1_OFFSET_COUNT - COLOUR_NUM_ORIGINAL constexpr uint8_t COLOUR_ID_G2_OFFSET = 112; constexpr uint8_t COLOUR_OFFSET_INVISIBLE = 166;