diff --git a/data/language/en-GB.txt b/data/language/en-GB.txt index 2838b84003..dbe35ec22c 100644 --- a/data/language/en-GB.txt +++ b/data/language/en-GB.txt @@ -3653,6 +3653,31 @@ STR_6548 :Show railings at junction STR_6549 :Compatibility objects cannot be selected! STR_6550 :This entry is included for backwards compatibility with old or damaged objects. It cannot be selected, only deselected. +STR_6551 :Army green +STR_6552 :Honeydew +STR_6553 :Tan +STR_6554 :Maroon +STR_6555 :Coral Pink +STR_6556 :Forest green +STR_6557 :Chartreuse +STR_6558 :Hunter green +STR_6559 :Celadon +STR_6560 :Lime green +STR_6561 :Sepia +STR_6562 :Peach +STR_6563 :Lilac +STR_6564 :Viridian +STR_6565 :Seafoam green +STR_6566 :Violet +STR_6567 :Lavender +STR_6568 :Pastel orange +STR_6569 :Deep water +STR_6570 :Pastel pink +STR_6571 :Umber +STR_6572 :Beige +STR_6573 :Invisible +STR_6574 :Void + ############# # Scenarios # ################ diff --git a/resources/g2/palette_map/palette_map_aqua_dark.png b/resources/g2/palette_map/palette_map_aqua_dark.png new file mode 100644 index 0000000000..098781adbd Binary files /dev/null and b/resources/g2/palette_map/palette_map_aqua_dark.png differ diff --git a/resources/g2/palette_map/palette_map_bordeaux_red_dark.png b/resources/g2/palette_map/palette_map_bordeaux_red_dark.png new file mode 100644 index 0000000000..65146fa2f3 Binary files /dev/null and b/resources/g2/palette_map/palette_map_bordeaux_red_dark.png differ diff --git a/resources/g2/palette_map/palette_map_bordeaux_red_light.png b/resources/g2/palette_map/palette_map_bordeaux_red_light.png new file mode 100644 index 0000000000..418efefd61 Binary files /dev/null and b/resources/g2/palette_map/palette_map_bordeaux_red_light.png differ diff --git a/resources/g2/palette_map/palette_map_dark_olive_dark.png b/resources/g2/palette_map/palette_map_dark_olive_dark.png new file mode 100644 index 0000000000..cf09089be5 Binary files /dev/null and b/resources/g2/palette_map/palette_map_dark_olive_dark.png differ diff --git a/resources/g2/palette_map/palette_map_dark_olive_light.png b/resources/g2/palette_map/palette_map_dark_olive_light.png new file mode 100644 index 0000000000..b0319611c2 Binary files /dev/null and b/resources/g2/palette_map/palette_map_dark_olive_light.png differ diff --git a/resources/g2/palette_map/palette_map_dull_brown_dark.png b/resources/g2/palette_map/palette_map_dull_brown_dark.png new file mode 100644 index 0000000000..469c52b642 Binary files /dev/null and b/resources/g2/palette_map/palette_map_dull_brown_dark.png differ diff --git a/resources/g2/palette_map/palette_map_dull_brown_light.png b/resources/g2/palette_map/palette_map_dull_brown_light.png new file mode 100644 index 0000000000..910be9bc4e Binary files /dev/null and b/resources/g2/palette_map/palette_map_dull_brown_light.png differ diff --git a/resources/g2/palette_map/palette_map_dull_green_dark.png b/resources/g2/palette_map/palette_map_dull_green_dark.png new file mode 100644 index 0000000000..3d0fca52f4 Binary files /dev/null and b/resources/g2/palette_map/palette_map_dull_green_dark.png differ diff --git a/resources/g2/palette_map/palette_map_dull_green_light.png b/resources/g2/palette_map/palette_map_dull_green_light.png new file mode 100644 index 0000000000..1dd93c9a48 Binary files /dev/null and b/resources/g2/palette_map/palette_map_dull_green_light.png differ diff --git a/resources/g2/palette_map/palette_map_dull_purple_light.png b/resources/g2/palette_map/palette_map_dull_purple_light.png new file mode 100644 index 0000000000..e062e82cc3 Binary files /dev/null and b/resources/g2/palette_map/palette_map_dull_purple_light.png differ diff --git a/resources/g2/palette_map/palette_map_grass_green_dark.png b/resources/g2/palette_map/palette_map_grass_green_dark.png new file mode 100644 index 0000000000..a6700beed0 Binary files /dev/null and b/resources/g2/palette_map/palette_map_grass_green_dark.png differ diff --git a/resources/g2/palette_map/palette_map_grass_green_light.png b/resources/g2/palette_map/palette_map_grass_green_light.png new file mode 100644 index 0000000000..c756b835dd Binary files /dev/null and b/resources/g2/palette_map/palette_map_grass_green_light.png differ diff --git a/resources/g2/palette_map/palette_map_invisible.png b/resources/g2/palette_map/palette_map_invisible.png new file mode 100644 index 0000000000..1c1a31c144 Binary files /dev/null and b/resources/g2/palette_map/palette_map_invisible.png differ diff --git a/resources/g2/palette_map/palette_map_magenta_light.png b/resources/g2/palette_map/palette_map_magenta_light.png new file mode 100644 index 0000000000..e506905c5b Binary files /dev/null and b/resources/g2/palette_map/palette_map_magenta_light.png differ diff --git a/resources/g2/palette_map/palette_map_olive_dark.png b/resources/g2/palette_map/palette_map_olive_dark.png new file mode 100644 index 0000000000..1cd4ce3886 Binary files /dev/null and b/resources/g2/palette_map/palette_map_olive_dark.png differ diff --git a/resources/g2/palette_map/palette_map_olive_light.png b/resources/g2/palette_map/palette_map_olive_light.png new file mode 100644 index 0000000000..ead89b7b98 Binary files /dev/null and b/resources/g2/palette_map/palette_map_olive_light.png differ diff --git a/resources/g2/palette_map/palette_map_orange_light.png b/resources/g2/palette_map/palette_map_orange_light.png new file mode 100644 index 0000000000..6fe42c8550 Binary files /dev/null and b/resources/g2/palette_map/palette_map_orange_light.png differ diff --git a/resources/g2/palette_map/palette_map_saturated_brown_light.png b/resources/g2/palette_map/palette_map_saturated_brown_light.png new file mode 100644 index 0000000000..2cedcb0536 Binary files /dev/null and b/resources/g2/palette_map/palette_map_saturated_brown_light.png differ diff --git a/resources/g2/palette_map/palette_map_saturated_green_light.png b/resources/g2/palette_map/palette_map_saturated_green_light.png new file mode 100644 index 0000000000..eefb08ceb9 Binary files /dev/null and b/resources/g2/palette_map/palette_map_saturated_green_light.png differ diff --git a/resources/g2/palette_map/palette_map_saturated_purple_dark.png b/resources/g2/palette_map/palette_map_saturated_purple_dark.png new file mode 100644 index 0000000000..6585acd752 Binary files /dev/null and b/resources/g2/palette_map/palette_map_saturated_purple_dark.png differ diff --git a/resources/g2/palette_map/palette_map_saturated_purple_light.png b/resources/g2/palette_map/palette_map_saturated_purple_light.png new file mode 100644 index 0000000000..4ec0de0772 Binary files /dev/null and b/resources/g2/palette_map/palette_map_saturated_purple_light.png differ diff --git a/resources/g2/palette_map/palette_map_tan_dark.png b/resources/g2/palette_map/palette_map_tan_dark.png new file mode 100644 index 0000000000..5ba4caf396 Binary files /dev/null and b/resources/g2/palette_map/palette_map_tan_dark.png differ diff --git a/resources/g2/palette_map/palette_map_tan_light.png b/resources/g2/palette_map/palette_map_tan_light.png new file mode 100644 index 0000000000..7f175dd236 Binary files /dev/null and b/resources/g2/palette_map/palette_map_tan_light.png differ diff --git a/resources/g2/palette_map/palette_map_void.png b/resources/g2/palette_map/palette_map_void.png new file mode 100644 index 0000000000..7a7baf5527 Binary files /dev/null and b/resources/g2/palette_map/palette_map_void.png differ diff --git a/resources/g2/sprites.json b/resources/g2/sprites.json index 97a6ac4e5c..91f727dc09 100644 --- a/resources/g2/sprites.json +++ b/resources/g2/sprites.json @@ -20588,5 +20588,77 @@ "x_offset": -5, "y_offset": -20, "palette": "keep" + }, + { + "path": "palette_map/palette_map_dark_olive_dark.png" + }, + { + "path": "palette_map/palette_map_dark_olive_light.png" + }, + { + "path": "palette_map/palette_map_saturated_brown_light.png" + }, + { + "path": "palette_map/palette_map_bordeaux_red_dark.png" + }, + { + "path": "palette_map/palette_map_bordeaux_red_light.png" + }, + { + "path": "palette_map/palette_map_grass_green_dark.png" + }, + { + "path": "palette_map/palette_map_grass_green_light.png" + }, + { + "path": "palette_map/palette_map_olive_dark.png" + }, + { + "path": "palette_map/palette_map_olive_light.png" + }, + { + "path": "palette_map/palette_map_saturated_green_light.png" + }, + { + "path": "palette_map/palette_map_tan_dark.png" + }, + { + "path": "palette_map/palette_map_tan_light.png" + }, + { + "path": "palette_map/palette_map_dull_purple_light.png" + }, + { + "path": "palette_map/palette_map_dull_green_dark.png" + }, + { + "path": "palette_map/palette_map_dull_green_light.png" + }, + { + "path": "palette_map/palette_map_saturated_purple_dark.png" + }, + { + "path": "palette_map/palette_map_saturated_purple_light.png" + }, + { + "path": "palette_map/palette_map_orange_light.png" + }, + { + "path": "palette_map/palette_map_aqua_dark.png" + }, + { + "path": "palette_map/palette_map_magenta_light.png" + }, + { + "path": "palette_map/palette_map_dull_brown_dark.png" + }, + { + "path": "palette_map/palette_map_dull_brown_light.png" + }, + { + "path": "palette_map/palette_map_invisible.png" + }, + { + "path": "palette_map/palette_map_void.png" } ] diff --git a/src/openrct2-ui/drawing/engines/opengl/TextureCache.cpp b/src/openrct2-ui/drawing/engines/opengl/TextureCache.cpp index 0c4e620f5a..4eecee8c71 100644 --- a/src/openrct2-ui/drawing/engines/opengl/TextureCache.cpp +++ b/src/openrct2-ui/drawing/engines/opengl/TextureCache.cpp @@ -201,7 +201,7 @@ void TextureCache::CreateTextures() void TextureCache::GeneratePaletteTexture() { - static_assert(PALETTE_TO_G1_OFFSET_COUNT + 5 < 256, "Height of palette too large!"); + static_assert(PALETTE_TOTAL_OFFSETS + 5 < 256, "Height of palette too large!"); constexpr int32_t height = 256; constexpr int32_t width = height; DrawPixelInfo dpi = CreateDPI(width, height); @@ -223,6 +223,18 @@ void TextureCache::GeneratePaletteTexture() GfxDrawSpriteSoftware(&dpi, ImageId(g1Index.value()), { -element->x_offset, y - element->y_offset }); } } + // G2 Palette textures + for (int i = PALETTE_TO_G1_OFFSET_COUNT; i < PALETTE_TOTAL_OFFSETS; ++i) + { + GLint y = PaletteToY(static_cast(i)); + + auto g2Index = GetPaletteG2Index(i); + if (g2Index.has_value()) + { + auto element = GfxGetG1Element(g2Index.value()); + GfxDrawSpriteSoftware(&dpi, ImageId(g2Index.value()), { -element->x_offset, y - element->y_offset }); + } + } glBindTexture(GL_TEXTURE_2D, _paletteTexture); glTexImage2D(GL_TEXTURE_2D, 0, GL_R8UI, width, height, 0, GL_RED_INTEGER, GL_UNSIGNED_BYTE, dpi.bits); diff --git a/src/openrct2-ui/input/MouseInput.cpp b/src/openrct2-ui/input/MouseInput.cpp index 1e6dfe700d..af71e09002 100644 --- a/src/openrct2-ui/input/MouseInput.cpp +++ b/src/openrct2-ui/input/MouseInput.cpp @@ -1445,6 +1445,30 @@ void InputStateWidgetPressed( STR_COLOUR_DARK_PINK_TIP, STR_COLOUR_BRIGHT_PINK_TIP, STR_COLOUR_LIGHT_PINK_TIP, + STR_COLOUR_DARK_OLIVE_DARK_TIP, + STR_COLOUR_DARK_OLIVE_LIGHT_TIP, + STR_COLOUR_SATURATED_BROWN_LIGHT_TIP, + STR_COLOUR_BORDEAUX_RED_DARK_TIP, + STR_COLOUR_BORDEAUX_RED_LIGHT_TIP, + STR_COLOUR_GRASS_GREEN_DARK_TIP, + STR_COLOUR_GRASS_GREEN_LIGHT_TIP, + STR_COLOUR_OLIVE_DARK_TIP, + STR_COLOUR_OLIVE_LIGHT_TIP, + STR_COLOUR_SATURATED_GREEN_LIGHT_TIP, + STR_COLOUR_TAN_DARK_TIP, + STR_COLOUR_TAN_LIGHT_TIP, + STR_COLOUR_DULL_PURPLE_LIGHT_TIP, + STR_COLOUR_DULL_GREEN_DARK_TIP, + STR_COLOUR_DULL_GREEN_LIGHT_TIP, + STR_COLOUR_SATURATED_PURPLE_DARK_TIP, + STR_COLOUR_SATURATED_PURPLE_LIGHT_TIP, + STR_COLOUR_ORANGE_LIGHT_TIP, + STR_COLOUR_AQUA_DARK_TIP, + STR_COLOUR_MAGENTA_LIGHT_TIP, + STR_COLOUR_DULL_BROWN_DARK_TIP, + STR_COLOUR_DULL_BROWN_LIGHT_TIP, + STR_COLOUR_INVISIBLE_TIP, + STR_COLOUR_VOID_TIP, }; WindowTooltipShow(OpenRCT2String{ _colourTooltips[dropdown_index], {} }, screenCoords); } diff --git a/src/openrct2-ui/windows/Dropdown.cpp b/src/openrct2-ui/windows/Dropdown.cpp index d0859d8c00..25fb68f299 100644 --- a/src/openrct2-ui/windows/Dropdown.cpp +++ b/src/openrct2-ui/windows/Dropdown.cpp @@ -32,7 +32,7 @@ static constexpr const uint8_t _appropriateImageDropdownItemsPerRow[34] = { 1, 1, 1, 1, 2, 2, 3, 3, 4, 3, // 10 5, 4, 4, 5, 5, 5, 4, 5, 6, 5, // 20 5, 7, 4, 5, 6, 5, 6, 6, 6, 6, // 30 - 6, 8, 8, 8, // 34 + 6, 8, 9, 8, // 34 }; enum @@ -462,7 +462,7 @@ void WindowDropdownShowColour(WindowBase* w, Widget* widget, uint8_t dropdownCol // Show dropdown WindowDropdownShowImage( w->windowPos.x + widget->left, w->windowPos.y + widget->top, widget->height() + 1, dropdownColour, - Dropdown::Flag::StayOpen, COLOUR_COUNT, 12, 12, _appropriateImageDropdownItemsPerRow[COLOUR_COUNT]); + Dropdown::Flag::StayOpen, COLOUR_COUNT, 12, 12, _appropriateImageDropdownItemsPerRow[COLOR_NUM_ORIGINAL]); gDropdownIsColour = true; gDropdownLastColourHover = -1; diff --git a/src/openrct2/drawing/Drawing.cpp b/src/openrct2/drawing/Drawing.cpp index 0f27f2bae5..73addab87a 100644 --- a/src/openrct2/drawing/Drawing.cpp +++ b/src/openrct2/drawing/Drawing.cpp @@ -293,6 +293,58 @@ enum SPR_PALETTE_GLASS_DARK_PINK = 5045, SPR_PALETTE_GLASS_BRIGHT_PINK = 5046, SPR_PALETTE_GLASS_LIGHT_PINK = 5047, + + // Start of G2 Palettes + + SPR_PALETTE_DARK_OLIVE_DARK = 32607, + SPR_PALETTE_DARK_OLIVE_LIGHT, + SPR_PALETTE_SATURATED_BROWN_LIGHT, + SPR_PALETTE_BORDEAUX_RED_DARK, + SPR_PALETTE_BORDEAUX_RED_LIGHT, + SPR_PALETTE_GRASS_GREEN_DARK, + SPR_PALETTE_GRASS_GREEN_LIGHT, + SPR_PALETTE_OLIVE_DARK, + SPR_PALETTE_OLIVE_LIGHT, + SPR_PALETTE_SATURATED_GREEN_LIGHT, + SPR_PALETTE_TAN_DARK, + SPR_PALETTE_TAN_LIGHT, + SPR_PALETTE_DULL_PURPLE_LIGHT, + SPR_PALETTE_DULL_GREEN_DARK, + SPR_PALETTE_DULL_GREEN_LIGHT, + SPR_PALETTE_SATURATED_PURPLE_DARK, + SPR_PALETTE_SATURATED_PURPLE_LIGHT, + SPR_PALETTE_ORANGE_LIGHT, + SPR_PALETTE_AQUA_DARK, + SPR_PALETTE_MAGENTA_LIGHT, + SPR_PALETTE_DULL_BROWN_DARK, + SPR_PALETTE_DULL_BROWN_LIGHT, + SPR_PALETTE_INVISIBLE, + SPR_PALETTE_VOID, + + SPR_PALETTE_GLASS_DARK_OLIVE_DARK, + SPR_PALETTE_GLASS_DARK_OLIVE_LIGHT, + SPR_PALETTE_GLASS_SATURATED_BROWN_LIGHT, + SPR_PALETTE_GLASS_BORDEAUX_RED_DARK, + SPR_PALETTE_GLASS_BORDEAUX_RED_LIGHT, + SPR_PALETTE_GLASS_GRASS_GREEN_DARK, + SPR_PALETTE_GLASS_GRASS_GREEN_LIGHT, + SPR_PALETTE_GLASS_OLIVE_DARK, + SPR_PALETTE_GLASS_OLIVE_LIGHT, + SPR_PALETTE_GLASS_SATURATED_GREEN_LIGHT, + SPR_PALETTE_GLASS_TAN_DARK, + SPR_PALETTE_GLASS_TAN_LIGHT, + SPR_PALETTE_GLASS_DULL_PURPLE_LIGHT, + SPR_PALETTE_GLASS_DULL_GREEN_DARK, + SPR_PALETTE_GLASS_DULL_GREEN_LIGHT, + SPR_PALETTE_GLASS_SATURATED_PURPLE_DARK, + SPR_PALETTE_GLASS_SATURATED_PURPLE_LIGHT, + SPR_PALETTE_GLASS_ORANGE_LIGHT, + SPR_PALETTE_GLASS_AQUA_DARK, + SPR_PALETTE_GLASS_MAGENTA_LIGHT, + SPR_PALETTE_GLASS_DULL_BROWN_DARK, + SPR_PALETTE_GLASS_DULL_BROWN_LIGHT, + SPR_PALETTE_GLASS_INVISIBLE, + SPR_PALETTE_GLASS_VOID, }; const FilterPaletteID GlassPaletteIds[COLOUR_COUNT] = { @@ -328,10 +380,34 @@ const FilterPaletteID GlassPaletteIds[COLOUR_COUNT] = { FilterPaletteID::PaletteGlassDarkPink, FilterPaletteID::PaletteGlassBrightPink, FilterPaletteID::PaletteGlassLightPink, + FilterPaletteID::PaletteGlassDarkOliveDark, + FilterPaletteID::PaletteGlassDarkOliveLight, + FilterPaletteID::PaletteGlassSaturatedBrownLight, + FilterPaletteID::PaletteGlassBordeauxRedDark, + FilterPaletteID::PaletteGlassBordeauxRedLight, + FilterPaletteID::PaletteGlassGrassGreenDark, + FilterPaletteID::PaletteGlassGrassGreenLight, + FilterPaletteID::PaletteGlassOliveDark, + FilterPaletteID::PaletteGlassOliveLight, + FilterPaletteID::PaletteGlassSaturatedGreenLight, + FilterPaletteID::PaletteGlassTanDark, + FilterPaletteID::PaletteGlassTanLight, + FilterPaletteID::PaletteGlassDullPurpleLight, + FilterPaletteID::PaletteGlassDullGreenDark, + FilterPaletteID::PaletteGlassDullGreenLight, + FilterPaletteID::PaletteGlassSaturatedPurpleDark, + FilterPaletteID::PaletteGlassSaturatedPurpleLight, + FilterPaletteID::PaletteGlassOrangeLight, + FilterPaletteID::PaletteGlassAquaDark, + FilterPaletteID::PaletteGlassMagentaLight, + FilterPaletteID::PaletteGlassDullBrownDark, + FilterPaletteID::PaletteGlassDullBrownLight, + FilterPaletteID::PaletteGlassInvisible, + FilterPaletteID::PaletteGlassVoid, }; // Previously 0x97FCBC use it to get the correct palette from g1_elements -static const uint16_t palette_to_g1_offset[PALETTE_TO_G1_OFFSET_COUNT] = { +static const uint16_t palette_to_g1_offset[PALETTE_TOTAL_OFFSETS] = { SPR_PALETTE_BLACK, SPR_PALETTE_GREY, SPR_PALETTE_WHITE, @@ -480,6 +556,31 @@ static const uint16_t palette_to_g1_offset[PALETTE_TO_G1_OFFSET_COUNT] = { SPR_PALETTE_GLASS_DARK_PINK, SPR_PALETTE_GLASS_BRIGHT_PINK, SPR_PALETTE_GLASS_LIGHT_PINK, + + SPR_PALETTE_DARK_OLIVE_DARK, + SPR_PALETTE_DARK_OLIVE_LIGHT, + SPR_PALETTE_SATURATED_BROWN_LIGHT, + SPR_PALETTE_BORDEAUX_RED_DARK, + SPR_PALETTE_BORDEAUX_RED_LIGHT, + SPR_PALETTE_GRASS_GREEN_DARK, + SPR_PALETTE_GRASS_GREEN_LIGHT, + SPR_PALETTE_OLIVE_DARK, + SPR_PALETTE_OLIVE_LIGHT, + SPR_PALETTE_SATURATED_GREEN_LIGHT, + SPR_PALETTE_TAN_DARK, + SPR_PALETTE_TAN_LIGHT, + SPR_PALETTE_DULL_PURPLE_LIGHT, + SPR_PALETTE_DULL_GREEN_DARK, + SPR_PALETTE_DULL_GREEN_LIGHT, + SPR_PALETTE_SATURATED_PURPLE_DARK, + SPR_PALETTE_SATURATED_PURPLE_LIGHT, + SPR_PALETTE_ORANGE_LIGHT, + SPR_PALETTE_AQUA_DARK, + SPR_PALETTE_MAGENTA_LIGHT, + SPR_PALETTE_DULL_BROWN_DARK, + SPR_PALETTE_DULL_BROWN_LIGHT, + SPR_PALETTE_INVISIBLE, + SPR_PALETTE_VOID, }; #define WINDOW_PALETTE_GREY {FilterPaletteID::PaletteTranslucentGrey, FilterPaletteID::PaletteTranslucentGreyHighlight, FilterPaletteID::PaletteTranslucentGreyShadow} @@ -747,7 +848,16 @@ void GfxDrawPickedUpPeep(DrawPixelInfo* dpi) std::optional GetPaletteG1Index(colour_t paletteId) { - if (paletteId < std::size(palette_to_g1_offset)) + if (paletteId < PALETTE_TO_G1_OFFSET_COUNT) + { + return palette_to_g1_offset[paletteId]; + } + return std::nullopt; +} + +std::optional GetPaletteG2Index(colour_t paletteId) +{ + if (paletteId < PALETTE_TOTAL_OFFSETS) { return palette_to_g1_offset[paletteId]; } diff --git a/src/openrct2/drawing/Drawing.h b/src/openrct2/drawing/Drawing.h index 075d13a42b..2ab6638f1a 100644 --- a/src/openrct2/drawing/Drawing.h +++ b/src/openrct2/drawing/Drawing.h @@ -296,6 +296,30 @@ enum class FilterPaletteID : int32_t PaletteGlassDarkPink = PaletteGlass + COLOUR_DARK_PINK, PaletteGlassBrightPink = PaletteGlass + COLOUR_BRIGHT_PINK, PaletteGlassLightPink = PaletteGlass + COLOUR_LIGHT_PINK, + PaletteGlassDarkOliveDark = PaletteGlass + COLOUR_DARK_OLIVE_DARK, + PaletteGlassDarkOliveLight = PaletteGlass + COLOUR_DARK_OLIVE_LIGHT, + PaletteGlassSaturatedBrownLight = PaletteGlass + COLOUR_SATURATED_BROWN_LIGHT, + PaletteGlassBordeauxRedDark = PaletteGlass + COLOUR_BORDEAUX_RED_DARK, + PaletteGlassBordeauxRedLight = PaletteGlass + COLOUR_BORDEAUX_RED_LIGHT, + PaletteGlassGrassGreenDark = PaletteGlass + COLOUR_GRASS_GREEN_DARK, + PaletteGlassGrassGreenLight = PaletteGlass + COLOUR_GRASS_GREEN_LIGHT, + PaletteGlassOliveDark = PaletteGlass + COLOUR_OLIVE_DARK, + PaletteGlassOliveLight = PaletteGlass + COLOUR_OLIVE_LIGHT, + PaletteGlassSaturatedGreenLight = PaletteGlass + COLOUR_SATURATED_GREEN_LIGHT, + PaletteGlassTanDark = PaletteGlass + COLOUR_TAN_DARK, + PaletteGlassTanLight = PaletteGlass + COLOUR_TAN_LIGHT, + PaletteGlassDullPurpleLight = PaletteGlass + COLOUR_DULL_PURPLE_LIGHT, + PaletteGlassDullGreenDark = PaletteGlass + COLOUR_DULL_GREEN_DARK, + PaletteGlassDullGreenLight = PaletteGlass + COLOUR_DULL_GREEN_LIGHT, + PaletteGlassSaturatedPurpleDark = PaletteGlass + COLOUR_SATURATED_PURPLE_DARK, + PaletteGlassSaturatedPurpleLight = PaletteGlass + COLOUR_SATURATED_PURPLE_LIGHT, + PaletteGlassOrangeLight = PaletteGlass + COLOUR_ORANGE_LIGHT, + PaletteGlassAquaDark = PaletteGlass + COLOUR_AQUA_DARK, + PaletteGlassMagentaLight = PaletteGlass + COLOUR_MAGENTA_LIGHT, + PaletteGlassDullBrownDark = PaletteGlass + COLOUR_DULL_BROWN_DARK, + PaletteGlassDullBrownLight = PaletteGlass + COLOUR_DULL_BROWN_LIGHT, + PaletteGlassInvisible = PaletteGlass + COLOUR_INVISIBLE, + PaletteGlassVoid = PaletteGlass + COLOUR_VOID, }; struct TranslucentWindowPalette @@ -446,6 +470,7 @@ void FASTCALL BlitPixels(const uint8_t* src, uint8_t* dst, const PaletteMap& pal } #define PALETTE_TO_G1_OFFSET_COUNT 144 +#define PALETTE_TOTAL_OFFSETS 192 #define INSET_RECT_F_30 (INSET_RECT_FLAG_BORDER_INSET | INSET_RECT_FLAG_FILL_NONE) #define INSET_RECT_F_60 (INSET_RECT_FLAG_BORDER_INSET | INSET_RECT_FLAG_FILL_DONT_LIGHTEN) @@ -570,6 +595,7 @@ extern void (*MaskFn)( int32_t maskWrap, int32_t colourWrap, int32_t dstWrap); std::optional GetPaletteG1Index(colour_t paletteId); +std::optional GetPaletteG2Index(colour_t paletteId); std::optional GetPaletteMapForColour(colour_t paletteId); void UpdatePalette(const uint8_t* colours, int32_t start_index, int32_t num_colours); diff --git a/src/openrct2/drawing/ImageId.hpp b/src/openrct2/drawing/ImageId.hpp index 6821f9cc2e..8755e9ef71 100644 --- a/src/openrct2/drawing/ImageId.hpp +++ b/src/openrct2/drawing/ImageId.hpp @@ -227,7 +227,7 @@ public: [[nodiscard]] constexpr ImageId WithPrimary(colour_t colour) const { ImageId result = *this; - result._primary = colour & 31; + result._primary = colour; result._flags |= NEW_FLAG_PRIMARY; return result; } @@ -235,7 +235,7 @@ public: [[nodiscard]] constexpr ImageId WithSecondary(colour_t colour) const { ImageId result = *this; - result._secondary = colour & 31; + result._secondary = colour; result._flags |= NEW_FLAG_SECONDARY; return result; } @@ -251,7 +251,7 @@ public: [[nodiscard]] constexpr ImageId WithTertiary(colour_t tertiary) const { ImageId result = *this; - result._tertiary = tertiary & 31; + result._tertiary = tertiary; result._flags &= ~NEW_FLAG_PRIMARY; result._flags |= NEW_FLAG_SECONDARY; if (!(_flags & NEW_FLAG_SECONDARY)) @@ -265,7 +265,7 @@ public: [[nodiscard]] ImageId WithTransparency(colour_t colour) const { - return WithTransparency(GetGlassPaletteId(colour & 31)); + return WithTransparency(GetGlassPaletteId(colour)); } [[nodiscard]] ImageId WithTransparency(FilterPaletteID palette) const diff --git a/src/openrct2/interface/Colour.cpp b/src/openrct2/interface/Colour.cpp index 56bb2474a6..0c9befc8af 100644 --- a/src/openrct2/interface/Colour.cpp +++ b/src/openrct2/interface/Colour.cpp @@ -37,7 +37,7 @@ enum void ColoursInitMaps() { // Get colour maps from g1 - for (int32_t i = 0; i < COLOUR_COUNT; i++) + for (int32_t i = 0; i < 32; i++) { const G1Element* g1 = GfxGetG1Element(SPR_PALETTE_2_START + i); if (g1 != nullptr) @@ -93,6 +93,30 @@ namespace Colour { "dark_pink", COLOUR_DARK_PINK }, { "bright_pink", COLOUR_BRIGHT_PINK }, { "light_pink", COLOUR_LIGHT_PINK }, + { "dark_olive_dark", COLOUR_DARK_OLIVE_DARK }, + { "dark_olive_light", COLOUR_DARK_OLIVE_LIGHT }, + { "saturated_brown_light", COLOUR_SATURATED_BROWN_LIGHT }, + { "bordeaux_red_dark", COLOUR_BORDEAUX_RED_DARK }, + { "bordeaux_red_light", COLOUR_BORDEAUX_RED_LIGHT }, + { "grass_green_dark", COLOUR_GRASS_GREEN_DARK }, + { "grass_green_light", COLOUR_GRASS_GREEN_LIGHT }, + { "olive_dark", COLOUR_OLIVE_DARK }, + { "olive_light", COLOUR_OLIVE_LIGHT }, + { "saturated_green_light", COLOUR_SATURATED_GREEN_LIGHT }, + { "tan_dark", COLOUR_TAN_DARK }, + { "tan_light", COLOUR_TAN_LIGHT }, + { "dull_purple_light", COLOUR_DULL_PURPLE_LIGHT }, + { "dull_green_dark", COLOUR_DULL_GREEN_DARK }, + { "dull_green_light", COLOUR_DULL_GREEN_LIGHT }, + { "saturated_purple_dark", COLOUR_SATURATED_PURPLE_DARK }, + { "saturated_purple_light", COLOUR_SATURATED_PURPLE_LIGHT }, + { "orange_light", COLOUR_ORANGE_LIGHT }, + { "aqua_dark", COLOUR_AQUA_DARK }, + { "magenta_light", COLOUR_MAGENTA_LIGHT }, + { "dull_brown_dark", COLOUR_DULL_BROWN_DARK }, + { "dull_brown_light", COLOUR_DULL_BROWN_LIGHT }, + { "invisible", COLOUR_INVISIBLE }, + { "void", COLOUR_VOID }, }; colour_t FromString(std::string_view s, colour_t defaultValue) diff --git a/src/openrct2/interface/Colour.h b/src/openrct2/interface/Colour.h index 5a3f8d066c..6bea93cd73 100644 --- a/src/openrct2/interface/Colour.h +++ b/src/openrct2/interface/Colour.h @@ -52,6 +52,30 @@ enum : colour_t COLOUR_DARK_PINK, COLOUR_BRIGHT_PINK, COLOUR_LIGHT_PINK, + COLOUR_DARK_OLIVE_DARK, + COLOUR_DARK_OLIVE_LIGHT, + COLOUR_SATURATED_BROWN_LIGHT, + COLOUR_BORDEAUX_RED_DARK, + COLOUR_BORDEAUX_RED_LIGHT, + COLOUR_GRASS_GREEN_DARK, + COLOUR_GRASS_GREEN_LIGHT, + COLOUR_OLIVE_DARK, + COLOUR_OLIVE_LIGHT, + COLOUR_SATURATED_GREEN_LIGHT, + COLOUR_TAN_DARK, + COLOUR_TAN_LIGHT, + COLOUR_DULL_PURPLE_LIGHT, + COLOUR_DULL_GREEN_DARK, + COLOUR_DULL_GREEN_LIGHT, + COLOUR_SATURATED_PURPLE_DARK, + COLOUR_SATURATED_PURPLE_LIGHT, + COLOUR_ORANGE_LIGHT, + COLOUR_AQUA_DARK, + COLOUR_MAGENTA_LIGHT, + COLOUR_DULL_BROWN_DARK, + COLOUR_DULL_BROWN_LIGHT, + COLOUR_INVISIBLE, + COLOUR_VOID, COLOUR_COUNT, @@ -64,7 +88,8 @@ enum : colour_t enum { COLOUR_DARK_WATER = 9, - COLOUR_LIGHT_WATER = 10 + COLOUR_LIGHT_WATER = 10, + COLOUR_DEEP_WATER = 50 }; enum : PaletteIndex @@ -178,6 +203,10 @@ constexpr uint8_t PALETTE_LENGTH_REMAP = 12; constexpr uint8_t PALETTE_OFFSET_ANIMATED = PALETTE_INDEX_230; constexpr uint8_t PALETTE_LENGTH_ANIMATED = 16; +constexpr uint8_t COLOR_NUM_ORIGINAL = 32; +constexpr uint8_t COLOR_NUM_EXTENDED = 24; +constexpr uint8_t COLOR_NUM_SPECIAL = 2; + #define TEXT_COLOUR_254 (254) #define TEXT_COLOUR_255 (255) diff --git a/src/openrct2/localisation/StringIds.h b/src/openrct2/localisation/StringIds.h index 4e1793e5e2..3dea22ebc4 100644 --- a/src/openrct2/localisation/StringIds.h +++ b/src/openrct2/localisation/StringIds.h @@ -3950,6 +3950,31 @@ enum : uint16_t STR_OBJECT_SELECTION_ERR_COMPAT_OBJECT = 6549, STR_OBJECT_SELECTION_COMPAT_OBJECT_DESCRIPTION = 6550, + STR_COLOUR_DARK_OLIVE_DARK_TIP = 6551, + STR_COLOUR_DARK_OLIVE_LIGHT_TIP = 6552, + STR_COLOUR_SATURATED_BROWN_LIGHT_TIP = 6553, + STR_COLOUR_BORDEAUX_RED_DARK_TIP = 6554, + STR_COLOUR_BORDEAUX_RED_LIGHT_TIP = 6555, + STR_COLOUR_GRASS_GREEN_DARK_TIP = 6556, + STR_COLOUR_GRASS_GREEN_LIGHT_TIP = 6557, + STR_COLOUR_OLIVE_DARK_TIP = 6558, + STR_COLOUR_OLIVE_LIGHT_TIP = 6559, + STR_COLOUR_SATURATED_GREEN_LIGHT_TIP = 6560, + STR_COLOUR_TAN_DARK_TIP = 6561, + STR_COLOUR_TAN_LIGHT_TIP = 6562, + STR_COLOUR_DULL_PURPLE_LIGHT_TIP = 6563, + STR_COLOUR_DULL_GREEN_DARK_TIP = 6564, + STR_COLOUR_DULL_GREEN_LIGHT_TIP = 6565, + STR_COLOUR_SATURATED_PURPLE_DARK_TIP = 6566, + STR_COLOUR_SATURATED_PURPLE_LIGHT_TIP = 6567, + STR_COLOUR_ORANGE_LIGHT_TIP = 6568, + STR_COLOUR_AQUA_DARK_TIP = 6569, + STR_COLOUR_MAGENTA_LIGHT_TIP = 6570, + STR_COLOUR_DULL_BROWN_DARK_TIP = 6571, + STR_COLOUR_DULL_BROWN_LIGHT_TIP = 6572, + STR_COLOUR_INVISIBLE_TIP = 6573, + STR_COLOUR_VOID_TIP = 6574, + // Have to include resource strings (from scenarios and objects) for the time being now that language is partially working /* MAX_STR_COUNT = 32768 */ // MAX_STR_COUNT - upper limit for number of strings, not the current count strings }; diff --git a/src/openrct2/sprites.h b/src/openrct2/sprites.h index 3e9f14ecff..0dff54916d 100644 --- a/src/openrct2/sprites.h +++ b/src/openrct2/sprites.h @@ -1364,7 +1364,34 @@ enum SPR_G2_ALPINE_LIFT_TRACK_GENTLE_DIAGONAL = SPR_G2_ALPINE_LIFT_TRACK_FLAT_DIAGONAL + 4, SPR_G2_ALPINE_END = SPR_G2_ALPINE_LIFT_TRACK_GENTLE_DIAGONAL + 12, - SPR_G2_END = SPR_G2_ALPINE_END, + SPR_G2_PAL_REMAP_BEGIN = SPR_G2_ALPINE_END, + SPR_G2_PAL_REMAP_DARK_OLIVE_DARK, + SPR_G2_PAL_REMAP_DARK_OLIVE_LIGHT, + SPR_G2_PAL_REMAP_SATURATED_BROWN_LIGHT, + SPR_G2_PAL_REMAP_BORDEAUX_RED_DARK, + SPR_G2_PAL_REMAP_BORDEAUX_RED_LIGHT, + SPR_G2_PAL_REMAP_GRASS_GREEN_DARK, + SPR_G2_PAL_REMAP_GRASS_GREEN_LIGHT, + SPR_G2_PAL_REMAP_OLIVE_DARK, + SPR_G2_PAL_REMAP_OLIVE_LIGHT, + SPR_G2_PAL_REMAP_SATURATED_GREEN_LIGHT, + SPR_G2_PAL_REMAP_TAN_DARK, + SPR_G2_PAL_REMAP_TAN_LIGHT, + SPR_G2_PAL_REMAP_DULL_PURPLE_LIGHT, + SPR_G2_PAL_REMAP_DULL_GREEN_DARK, + SPR_G2_PAL_REMAP_DULL_GREEN_LIGHT, + SPR_G2_PAL_REMAP_SATURATED_PURPLE_DARK, + SPR_G2_PAL_REMAP_SATURATED_PURPLE_LIGHT, + SPR_G2_PAL_REMAP_ORANGE_LIGHT, + SPR_G2_PAL_REMAP_AQUA_DARK, + SPR_G2_PAL_REMAP_MAGENTA_LIGHT, + SPR_G2_PAL_REMAP_DULL_BROWN_DARK, + SPR_G2_PAL_REMAP_DULL_BROWN_LIGHT, + SPR_G2_PAL_REMAP_INVISIBLE, + SPR_G2_PAL_REMAP_VOID, + SPR_G2_PAL_REMAP_END = SPR_G2_PAL_REMAP_VOID, + + SPR_G2_END = SPR_G2_PAL_REMAP_END, SPR_CSG_BEGIN = SPR_G2_END, SPR_CSG_END = SPR_CSG_BEGIN + RCT1::Limits::Num_LL_CSG_Entries,