diff --git a/contributors.md b/contributors.md index ffac04d158..74c921dfd8 100644 --- a/contributors.md +++ b/contributors.md @@ -104,6 +104,7 @@ The following people are not part of the development team, but have been contrib * Umar Ahmed (umar-ahmed) - MacOS file watcher * Andrew Arnold (fidwell) - Added window support for more scenery groups. * Josh Trzebiatowski (trzejos) - Ride and scenery filtering +* (kyphii) - Extended color selection ## Bug fixes * (KirilAngelov) diff --git a/data/language/en-GB.txt b/data/language/en-GB.txt index 2838b84003..98288791e5 100644 --- a/data/language/en-GB.txt +++ b/data/language/en-GB.txt @@ -3653,6 +3653,33 @@ 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 :Periwinkle +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 +STR_6575 :Allow special colour schemes +STR_6576 :Adds special colours to colour dropdown + ############# # Scenarios # ################ diff --git a/distribution/changelog.txt b/distribution/changelog.txt index 00b00ef0a6..0d665e1c24 100644 --- a/distribution/changelog.txt +++ b/distribution/changelog.txt @@ -1,5 +1,6 @@ 0.4.5 (in development) ------------------------------------------------------------------------ +- Feature: [#19446] Add new color options to color dropdown. - Feature: [#19547] Add large sloped turns to hybrid coaster and single rail coaster. - Feature: [OpenMusic#25] Added Prehistoric ride music style. - Improved: [#18490] Reduce guests walking through trains on level crossing next to station. diff --git a/resources/g2/icons/colour_invisible.png b/resources/g2/icons/colour_invisible.png new file mode 100644 index 0000000000..e93619f0c6 Binary files /dev/null and b/resources/g2/icons/colour_invisible.png differ diff --git a/resources/g2/icons/colour_invisible_pressed.png b/resources/g2/icons/colour_invisible_pressed.png new file mode 100644 index 0000000000..b9b5fa9fb5 Binary files /dev/null and b/resources/g2/icons/colour_invisible_pressed.png differ 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..2cab12a65e 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..99f4ee517b 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..5059591bb8 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..62ef1dc2b5 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..70547f4542 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..555333ffd1 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..0eb357b2f3 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..8fc2100408 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..b6e7a7de94 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..b0c162fa67 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_glass_aqua_dark.png b/resources/g2/palette_map/palette_map_glass_aqua_dark.png new file mode 100644 index 0000000000..7ab2897803 Binary files /dev/null and b/resources/g2/palette_map/palette_map_glass_aqua_dark.png differ diff --git a/resources/g2/palette_map/palette_map_glass_bordeaux_red_dark.png b/resources/g2/palette_map/palette_map_glass_bordeaux_red_dark.png new file mode 100644 index 0000000000..5fb489ab96 Binary files /dev/null and b/resources/g2/palette_map/palette_map_glass_bordeaux_red_dark.png differ diff --git a/resources/g2/palette_map/palette_map_glass_bordeaux_red_light.png b/resources/g2/palette_map/palette_map_glass_bordeaux_red_light.png new file mode 100644 index 0000000000..8fcf11335f Binary files /dev/null and b/resources/g2/palette_map/palette_map_glass_bordeaux_red_light.png differ diff --git a/resources/g2/palette_map/palette_map_glass_dark_olive_dark.png b/resources/g2/palette_map/palette_map_glass_dark_olive_dark.png new file mode 100644 index 0000000000..8f8f8e3a9f Binary files /dev/null and b/resources/g2/palette_map/palette_map_glass_dark_olive_dark.png differ diff --git a/resources/g2/palette_map/palette_map_glass_dark_olive_light.png b/resources/g2/palette_map/palette_map_glass_dark_olive_light.png new file mode 100644 index 0000000000..8746821cd5 Binary files /dev/null and b/resources/g2/palette_map/palette_map_glass_dark_olive_light.png differ diff --git a/resources/g2/palette_map/palette_map_glass_dull_brown_dark.png b/resources/g2/palette_map/palette_map_glass_dull_brown_dark.png new file mode 100644 index 0000000000..8b03e76b5a Binary files /dev/null and b/resources/g2/palette_map/palette_map_glass_dull_brown_dark.png differ diff --git a/resources/g2/palette_map/palette_map_glass_dull_brown_light.png b/resources/g2/palette_map/palette_map_glass_dull_brown_light.png new file mode 100644 index 0000000000..6fa0172f9e Binary files /dev/null and b/resources/g2/palette_map/palette_map_glass_dull_brown_light.png differ diff --git a/resources/g2/palette_map/palette_map_glass_dull_green_dark.png b/resources/g2/palette_map/palette_map_glass_dull_green_dark.png new file mode 100644 index 0000000000..a1c2bc279c Binary files /dev/null and b/resources/g2/palette_map/palette_map_glass_dull_green_dark.png differ diff --git a/resources/g2/palette_map/palette_map_glass_dull_green_light.png b/resources/g2/palette_map/palette_map_glass_dull_green_light.png new file mode 100644 index 0000000000..813df4cd93 Binary files /dev/null and b/resources/g2/palette_map/palette_map_glass_dull_green_light.png differ diff --git a/resources/g2/palette_map/palette_map_glass_dull_purple_light.png b/resources/g2/palette_map/palette_map_glass_dull_purple_light.png new file mode 100644 index 0000000000..2a8090d774 Binary files /dev/null and b/resources/g2/palette_map/palette_map_glass_dull_purple_light.png differ diff --git a/resources/g2/palette_map/palette_map_glass_grass_green_dark.png b/resources/g2/palette_map/palette_map_glass_grass_green_dark.png new file mode 100644 index 0000000000..0c09e89c6e Binary files /dev/null and b/resources/g2/palette_map/palette_map_glass_grass_green_dark.png differ diff --git a/resources/g2/palette_map/palette_map_glass_grass_green_light.png b/resources/g2/palette_map/palette_map_glass_grass_green_light.png new file mode 100644 index 0000000000..d6587dd8c5 Binary files /dev/null and b/resources/g2/palette_map/palette_map_glass_grass_green_light.png differ diff --git a/resources/g2/palette_map/palette_map_glass_invisible.png b/resources/g2/palette_map/palette_map_glass_invisible.png new file mode 100644 index 0000000000..168cb6ad71 Binary files /dev/null and b/resources/g2/palette_map/palette_map_glass_invisible.png differ diff --git a/resources/g2/palette_map/palette_map_glass_magenta_light.png b/resources/g2/palette_map/palette_map_glass_magenta_light.png new file mode 100644 index 0000000000..d20efb566f Binary files /dev/null and b/resources/g2/palette_map/palette_map_glass_magenta_light.png differ diff --git a/resources/g2/palette_map/palette_map_glass_olive_dark.png b/resources/g2/palette_map/palette_map_glass_olive_dark.png new file mode 100644 index 0000000000..79ffa5a840 Binary files /dev/null and b/resources/g2/palette_map/palette_map_glass_olive_dark.png differ diff --git a/resources/g2/palette_map/palette_map_glass_olive_light.png b/resources/g2/palette_map/palette_map_glass_olive_light.png new file mode 100644 index 0000000000..75b4a2f959 Binary files /dev/null and b/resources/g2/palette_map/palette_map_glass_olive_light.png differ diff --git a/resources/g2/palette_map/palette_map_glass_orange_light.png b/resources/g2/palette_map/palette_map_glass_orange_light.png new file mode 100644 index 0000000000..06852243cb Binary files /dev/null and b/resources/g2/palette_map/palette_map_glass_orange_light.png differ diff --git a/resources/g2/palette_map/palette_map_glass_saturated_brown_light.png b/resources/g2/palette_map/palette_map_glass_saturated_brown_light.png new file mode 100644 index 0000000000..5f9e5b26c2 Binary files /dev/null and b/resources/g2/palette_map/palette_map_glass_saturated_brown_light.png differ diff --git a/resources/g2/palette_map/palette_map_glass_saturated_green_light.png b/resources/g2/palette_map/palette_map_glass_saturated_green_light.png new file mode 100644 index 0000000000..1e01238e47 Binary files /dev/null and b/resources/g2/palette_map/palette_map_glass_saturated_green_light.png differ diff --git a/resources/g2/palette_map/palette_map_glass_saturated_purple_dark.png b/resources/g2/palette_map/palette_map_glass_saturated_purple_dark.png new file mode 100644 index 0000000000..f4c4fdf3d6 Binary files /dev/null and b/resources/g2/palette_map/palette_map_glass_saturated_purple_dark.png differ diff --git a/resources/g2/palette_map/palette_map_glass_saturated_purple_light.png b/resources/g2/palette_map/palette_map_glass_saturated_purple_light.png new file mode 100644 index 0000000000..7d54af0b3a Binary files /dev/null and b/resources/g2/palette_map/palette_map_glass_saturated_purple_light.png differ diff --git a/resources/g2/palette_map/palette_map_glass_tan_dark.png b/resources/g2/palette_map/palette_map_glass_tan_dark.png new file mode 100644 index 0000000000..10f986e486 Binary files /dev/null and b/resources/g2/palette_map/palette_map_glass_tan_dark.png differ diff --git a/resources/g2/palette_map/palette_map_glass_tan_light.png b/resources/g2/palette_map/palette_map_glass_tan_light.png new file mode 100644 index 0000000000..d302aaa547 Binary files /dev/null and b/resources/g2/palette_map/palette_map_glass_tan_light.png differ diff --git a/resources/g2/palette_map/palette_map_glass_void.png b/resources/g2/palette_map/palette_map_glass_void.png new file mode 100644 index 0000000000..72fd8961a7 Binary files /dev/null and b/resources/g2/palette_map/palette_map_glass_void.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..f48865817a 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..cf5146676f 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..aeaf6c1d1e 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..f8837f053c 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..9b2df6c832 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..1171f11fc3 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..fa4a863e03 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..48ed4c9e89 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..7d65b9707a 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..028aa38176 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..c7ef69cca9 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..2e9c5cdd44 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..3db0a8793a 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..d42a0c32f6 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..2e86eb6200 100644 --- a/resources/g2/sprites.json +++ b/resources/g2/sprites.json @@ -20588,5 +20588,251 @@ "x_offset": -5, "y_offset": -20, "palette": "keep" + }, + { + "path": "icons/colour_invisible.png" + }, + { + "path": "icons/colour_invisible_pressed.png" + }, + { + "path": "palette_map/palette_map_dark_olive_dark.png", + "palette": "keep", + "forceBmp": true + }, + { + "path": "palette_map/palette_map_dark_olive_light.png", + "palette": "keep", + "forceBmp": true + }, + { + "path": "palette_map/palette_map_saturated_brown_light.png", + "palette": "keep", + "forceBmp": true + }, + { + "path": "palette_map/palette_map_bordeaux_red_dark.png", + "palette": "keep", + "forceBmp": true + }, + { + "path": "palette_map/palette_map_bordeaux_red_light.png", + "palette": "keep", + "forceBmp": true + }, + { + "path": "palette_map/palette_map_grass_green_dark.png", + "palette": "keep", + "forceBmp": true + }, + { + "path": "palette_map/palette_map_grass_green_light.png", + "palette": "keep", + "forceBmp": true + }, + { + "path": "palette_map/palette_map_olive_dark.png", + "palette": "keep", + "forceBmp": true + }, + { + "path": "palette_map/palette_map_olive_light.png", + "palette": "keep", + "forceBmp": true + }, + { + "path": "palette_map/palette_map_saturated_green_light.png", + "palette": "keep", + "forceBmp": true + }, + { + "path": "palette_map/palette_map_tan_dark.png", + "palette": "keep", + "forceBmp": true + }, + { + "path": "palette_map/palette_map_tan_light.png", + "palette": "keep", + "forceBmp": true + }, + { + "path": "palette_map/palette_map_dull_purple_light.png", + "palette": "keep", + "forceBmp": true + }, + { + "path": "palette_map/palette_map_dull_green_dark.png", + "palette": "keep", + "forceBmp": true + }, + { + "path": "palette_map/palette_map_dull_green_light.png", + "palette": "keep", + "forceBmp": true + }, + { + "path": "palette_map/palette_map_saturated_purple_dark.png", + "palette": "keep", + "forceBmp": true + }, + { + "path": "palette_map/palette_map_saturated_purple_light.png", + "palette": "keep", + "forceBmp": true + }, + { + "path": "palette_map/palette_map_orange_light.png", + "palette": "keep", + "forceBmp": true + }, + { + "path": "palette_map/palette_map_aqua_dark.png", + "palette": "keep", + "forceBmp": true + }, + { + "path": "palette_map/palette_map_magenta_light.png", + "palette": "keep", + "forceBmp": true + }, + { + "path": "palette_map/palette_map_dull_brown_dark.png", + "palette": "keep", + "forceBmp": true + }, + { + "path": "palette_map/palette_map_dull_brown_light.png", + "palette": "keep", + "forceBmp": true + }, + { + "path": "palette_map/palette_map_invisible.png", + "palette": "keep", + "forceBmp": true + }, + { + "path": "palette_map/palette_map_void.png", + "palette": "keep", + "forceBmp": true + }, + { + "path": "palette_map/palette_map_glass_dark_olive_dark.png", + "palette": "keep", + "forceBmp": true + }, + { + "path": "palette_map/palette_map_glass_dark_olive_light.png", + "palette": "keep", + "forceBmp": true + }, + { + "path": "palette_map/palette_map_glass_saturated_brown_light.png", + "palette": "keep", + "forceBmp": true + }, + { + "path": "palette_map/palette_map_glass_bordeaux_red_dark.png", + "palette": "keep", + "forceBmp": true + }, + { + "path": "palette_map/palette_map_glass_bordeaux_red_light.png", + "palette": "keep", + "forceBmp": true + }, + { + "path": "palette_map/palette_map_glass_grass_green_dark.png", + "palette": "keep", + "forceBmp": true + }, + { + "path": "palette_map/palette_map_glass_grass_green_light.png", + "palette": "keep", + "forceBmp": true + }, + { + "path": "palette_map/palette_map_glass_olive_dark.png", + "palette": "keep", + "forceBmp": true + }, + { + "path": "palette_map/palette_map_glass_olive_light.png", + "palette": "keep", + "forceBmp": true + }, + { + "path": "palette_map/palette_map_glass_saturated_green_light.png", + "palette": "keep", + "forceBmp": true + }, + { + "path": "palette_map/palette_map_glass_tan_dark.png", + "palette": "keep", + "forceBmp": true + }, + { + "path": "palette_map/palette_map_glass_tan_light.png", + "palette": "keep", + "forceBmp": true + }, + { + "path": "palette_map/palette_map_glass_dull_purple_light.png", + "palette": "keep", + "forceBmp": true + }, + { + "path": "palette_map/palette_map_glass_dull_green_dark.png", + "palette": "keep", + "forceBmp": true + }, + { + "path": "palette_map/palette_map_glass_dull_green_light.png", + "palette": "keep", + "forceBmp": true + }, + { + "path": "palette_map/palette_map_glass_saturated_purple_dark.png", + "palette": "keep", + "forceBmp": true + }, + { + "path": "palette_map/palette_map_glass_saturated_purple_light.png", + "palette": "keep", + "forceBmp": true + }, + { + "path": "palette_map/palette_map_glass_orange_light.png", + "palette": "keep", + "forceBmp": true + }, + { + "path": "palette_map/palette_map_glass_aqua_dark.png", + "palette": "keep", + "forceBmp": true + }, + { + "path": "palette_map/palette_map_glass_magenta_light.png", + "palette": "keep", + "forceBmp": true + }, + { + "path": "palette_map/palette_map_glass_dull_brown_dark.png", + "palette": "keep", + "forceBmp": true + }, + { + "path": "palette_map/palette_map_glass_dull_brown_light.png", + "palette": "keep", + "forceBmp": true + }, + { + "path": "palette_map/palette_map_glass_invisible.png", + "palette": "keep", + "forceBmp": true + }, + { + "path": "palette_map/palette_map_glass_void.png", + "palette": "keep", + "forceBmp": true } ] diff --git a/src/openrct2-ui/drawing/engines/opengl/TextureCache.cpp b/src/openrct2-ui/drawing/engines/opengl/TextureCache.cpp index 0c4e620f5a..ddc25942b7 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); @@ -212,7 +212,7 @@ void TextureCache::GeneratePaletteTexture() dpi.bits[i] = i; } - for (int i = 0; i < PALETTE_TO_G1_OFFSET_COUNT; ++i) + for (int i = 0; i < PALETTE_TOTAL_OFFSETS; ++i) { GLint y = PaletteToY(static_cast(i)); diff --git a/src/openrct2-ui/input/MouseInput.cpp b/src/openrct2-ui/input/MouseInput.cpp index 1e6dfe700d..6b32baae18 100644 --- a/src/openrct2-ui/input/MouseInput.cpp +++ b/src/openrct2-ui/input/MouseInput.cpp @@ -1341,7 +1341,9 @@ void InputStateWidgetPressed( dropdown_index = gDropdownDefaultIndex; } } - WindowEventDropdownCall(cursor_w, cursor_widgetIndex, dropdown_index); + WindowEventDropdownCall( + cursor_w, cursor_widgetIndex, + (gDropdownIsColour) ? ColourToPaletteIndex(dropdown_index) : dropdown_index); } } } @@ -1445,8 +1447,32 @@ 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); + WindowTooltipShow(OpenRCT2String{ _colourTooltips[ColourToPaletteIndex(dropdown_index)], {} }, screenCoords); } if (dropdown_index < Dropdown::ItemsMaxSize && Dropdown::IsDisabled(dropdown_index)) diff --git a/src/openrct2-ui/interface/Theme.cpp b/src/openrct2-ui/interface/Theme.cpp index ecf6ae169f..7e89daeb75 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 colours to original colours, until flags are extracted from colour upper bits +colour_t ThemeOverrideExtendedColour(colour_t inputColour) +{ + switch (inputColour) + { + 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/interface/Widget.cpp b/src/openrct2-ui/interface/Widget.cpp index 328c0343b9..eb1e8def36 100644 --- a/src/openrct2-ui/interface/Widget.cpp +++ b/src/openrct2-ui/interface/Widget.cpp @@ -1186,5 +1186,12 @@ static void WidgetTextBoxDraw(DrawPixelInfo* dpi, WindowBase& w, WidgetIndex wid ImageId GetColourButtonImage(colour_t colour) { - return ImageId(SPR_PALETTE_BTN, colour).WithBlended(true); + if (colour == COLOUR_INVISIBLE) + { + return ImageId(SPR_G2_ICON_PALETTE_INVISIBLE, colour).WithBlended(false); + } + else + { + return ImageId(SPR_PALETTE_BTN, colour).WithBlended(true); + } } diff --git a/src/openrct2-ui/windows/Cheats.cpp b/src/openrct2-ui/windows/Cheats.cpp index 39a1280e9a..a3b1013532 100644 --- a/src/openrct2-ui/windows/Cheats.cpp +++ b/src/openrct2-ui/windows/Cheats.cpp @@ -153,6 +153,7 @@ enum WindowCheatsWidgetIdx WIDX_STAFF_SPEED_DROPDOWN_BUTTON, WIDX_PARK_CONSTRUCTION_GROUP, WIDX_ALLOW_REGULAR_PATH_AS_QUEUE, + WIDX_ALLOW_SPECIAL_COLOUR_SCHEMES, WIDX_FIX_ALL = WIDX_TAB_CONTENT, WIDX_RENEW_RIDES, @@ -287,8 +288,9 @@ static Widget window_cheats_misc_widgets[] = MakeWidget ({126, 361}, {111, 14}, WindowWidgetType::DropdownMenu, WindowColour::Secondary ), // Staff speed MakeWidget ({225, 362}, { 11, 12}, WindowWidgetType::Button, WindowColour::Secondary, STR_DROPDOWN_GLYPH ), // Staff speed - MakeWidget ({ 5, 392}, {238, 35}, WindowWidgetType::Groupbox, WindowColour::Secondary, STR_CHEAT_GROUP_CONSTRUCTION ), // Construction group + MakeWidget ({ 5, 392}, {238, 56}, WindowWidgetType::Groupbox, WindowColour::Secondary, STR_CHEAT_GROUP_CONSTRUCTION ), // Construction group MakeWidget ({ 11, 407}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_CHEAT_ALLOW_PATH_AS_QUEUE, STR_CHEAT_ALLOW_PATH_AS_QUEUE_TIP ), // Allow regular footpaths as queue path + MakeWidget ({ 11, 428}, CHEAT_CHECK, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_CHEAT_ALLOW_SPECIAL_COLOUR_SCHEMES, STR_CHEAT_ALLOW_SPECIAL_COLOUR_SCHEMES_TIP ), // Allow special colours in dropdown WIDGETS_END, }; @@ -484,6 +486,7 @@ public: SetCheckboxValue(WIDX_NEVERENDING_MARKETING, gCheatsNeverendingMarketing); SetCheckboxValue(WIDX_DISABLE_PLANT_AGING, gCheatsDisablePlantAging); SetCheckboxValue(WIDX_ALLOW_REGULAR_PATH_AS_QUEUE, gCheatsAllowRegularPathAsQueue); + SetCheckboxValue(WIDX_ALLOW_SPECIAL_COLOUR_SCHEMES, gCheatsAllowSpecialColourSchemes); break; case WINDOW_CHEATS_PAGE_RIDES: SetCheckboxValue(WIDX_UNLOCK_OPERATING_LIMITS, gCheatsUnlockOperatingLimits); @@ -911,6 +914,9 @@ private: case WIDX_ALLOW_REGULAR_PATH_AS_QUEUE: CheatsSet(CheatType::AllowRegularPathAsQueue, !gCheatsAllowRegularPathAsQueue); break; + case WIDX_ALLOW_SPECIAL_COLOUR_SCHEMES: + CheatsSet(CheatType::AllowSpecialColourSchemes, !gCheatsAllowSpecialColourSchemes); + break; } } diff --git a/src/openrct2-ui/windows/Dropdown.cpp b/src/openrct2-ui/windows/Dropdown.cpp index d0859d8c00..0cd7cc01b8 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 @@ -449,20 +449,27 @@ int32_t DropdownIndexFromPoint(const ScreenCoordsXY& loc, WindowBase* w) void WindowDropdownShowColour(WindowBase* w, Widget* widget, uint8_t dropdownColour, uint8_t selectedColour) { int32_t defaultIndex = -1; + + auto numColours = (gCheatsAllowSpecialColourSchemes) ? static_cast(COLOUR_COUNT) : COLOUR_NUM_NORMAL; // Set items - for (uint64_t i = 0; i < COLOUR_COUNT; i++) + for (uint64_t i = 0; i < numColours; i++) { - if (selectedColour == i) + auto orderedColour = ColourToPaletteIndex(i); + if (selectedColour == orderedColour) defaultIndex = i; + // Use special graphic for Invisible colour + auto imageId = (orderedColour == COLOUR_INVISIBLE) ? ImageId(SPR_G2_ICON_PALETTE_INVISIBLE, COLOUR_WHITE) + : ImageId(SPR_PALETTE_BTN, orderedColour); + gDropdownItems[i].Format = Dropdown::FormatColourPicker; - gDropdownItems[i].Args = (i << 32) | ImageId(SPR_PALETTE_BTN, i).ToUInt32(); + gDropdownItems[i].Args = (i << 32) | imageId.ToUInt32(); } // 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, numColours, 12, 12, _appropriateImageDropdownItemsPerRow[COLOUR_NUM_ORIGINAL]); gDropdownIsColour = true; gDropdownLastColourHover = -1; diff --git a/src/openrct2-ui/windows/Ride.cpp b/src/openrct2-ui/windows/Ride.cpp index e35cfcc001..1d09ea517e 100644 --- a/src/openrct2-ui/windows/Ride.cpp +++ b/src/openrct2-ui/windows/Ride.cpp @@ -4942,7 +4942,7 @@ static void WindowRideColourPaint(WindowBase* w, DrawPixelInfo* dpi) if ((gCurrentTicks % 64) == 0) { spriteColour++; - if (spriteColour >= COLOUR_COUNT) + if (spriteColour >= COLOUR_NUM_NORMAL) { spriteColour = COLOUR_BLACK; } 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/Cheats.cpp b/src/openrct2/Cheats.cpp index 88839eb1f2..3f17258f57 100644 --- a/src/openrct2/Cheats.cpp +++ b/src/openrct2/Cheats.cpp @@ -53,6 +53,7 @@ bool gCheatsIgnoreResearchStatus = false; bool gCheatsEnableAllDrawableTrackPieces = false; bool gCheatsAllowTrackPlaceInvalidHeights = false; bool gCheatsAllowRegularPathAsQueue = false; +bool gCheatsAllowSpecialColourSchemes = false; void CheatsReset() { @@ -79,6 +80,7 @@ void CheatsReset() gCheatsEnableAllDrawableTrackPieces = false; gCheatsAllowTrackPlaceInvalidHeights = false; gCheatsAllowRegularPathAsQueue = false; + gCheatsAllowSpecialColourSchemes = false; } void CheatsSet(CheatType cheatType, int32_t param1 /* = 0*/, int32_t param2 /* = 0*/) @@ -128,6 +130,7 @@ void CheatsSerialise(DataSerialiser& ds) CheatEntrySerialise(ds, CheatType::EnableAllDrawableTrackPieces, gCheatsEnableAllDrawableTrackPieces, count); CheatEntrySerialise(ds, CheatType::AllowTrackPlaceInvalidHeights, gCheatsAllowTrackPlaceInvalidHeights, count); CheatEntrySerialise(ds, CheatType::AllowRegularPathAsQueue, gCheatsAllowRegularPathAsQueue, count); + CheatEntrySerialise(ds, CheatType::AllowSpecialColourSchemes, gCheatsAllowSpecialColourSchemes, count); // Remember current position and update count. uint64_t endOffset = stream.GetPosition(); @@ -223,6 +226,9 @@ void CheatsSerialise(DataSerialiser& ds) case CheatType::AllowRegularPathAsQueue: ds << gCheatsAllowRegularPathAsQueue; break; + case CheatType::AllowSpecialColourSchemes: + ds << gCheatsAllowSpecialColourSchemes; + break; default: break; } @@ -328,6 +334,8 @@ const char* CheatsGetName(CheatType cheatType) return LanguageGetString(STR_CHEAT_ALLOW_TRACK_PLACE_INVALID_HEIGHTS); case CheatType::AllowRegularPathAsQueue: return LanguageGetString(STR_CHEAT_ALLOW_PATH_AS_QUEUE); + case CheatType::AllowSpecialColourSchemes: + return LanguageGetString(STR_CHEAT_ALLOW_SPECIAL_COLOUR_SCHEMES); default: return "Unknown Cheat"; } diff --git a/src/openrct2/Cheats.h b/src/openrct2/Cheats.h index fafd5c42f5..57cca7386d 100644 --- a/src/openrct2/Cheats.h +++ b/src/openrct2/Cheats.h @@ -34,6 +34,7 @@ extern bool gCheatsIgnoreResearchStatus; extern bool gCheatsEnableAllDrawableTrackPieces; extern bool gCheatsAllowTrackPlaceInvalidHeights; extern bool gCheatsAllowRegularPathAsQueue; +extern bool gCheatsAllowSpecialColourSchemes; enum class CheatType : int32_t { @@ -88,6 +89,7 @@ enum class CheatType : int32_t AllowTrackPlaceInvalidHeights, NoCapOnQueueLengthDummy, // Removed; this dummy exists only for deserialisation parks that had it saved AllowRegularPathAsQueue, + AllowSpecialColourSchemes, Count, }; diff --git a/src/openrct2/actions/CheatSetAction.cpp b/src/openrct2/actions/CheatSetAction.cpp index b712dd6a31..1775ca8dd6 100644 --- a/src/openrct2/actions/CheatSetAction.cpp +++ b/src/openrct2/actions/CheatSetAction.cpp @@ -244,6 +244,9 @@ GameActions::Result CheatSetAction::Execute() const case CheatType::AllowRegularPathAsQueue: gCheatsAllowRegularPathAsQueue = _param1 != 0; break; + case CheatType::AllowSpecialColourSchemes: + gCheatsAllowSpecialColourSchemes = static_cast(_param1); + break; default: { LOG_ERROR("Unabled cheat: %d", _cheatType.id); @@ -617,12 +620,12 @@ void CheatSetAction::GiveObjectToGuests(int32_t object) const break; case OBJECT_BALLOON: peep->GiveItem(ShopItem::Balloon); - peep->BalloonColour = ScenarioRandMax(COLOUR_COUNT - 1); + peep->BalloonColour = ColourToPaletteIndex(ScenarioRandMax(COLOUR_NUM_NORMAL)); peep->UpdateSpriteType(); break; case OBJECT_UMBRELLA: peep->GiveItem(ShopItem::Umbrella); - peep->UmbrellaColour = ScenarioRandMax(COLOUR_COUNT - 1); + peep->UmbrellaColour = ColourToPaletteIndex(ScenarioRandMax(COLOUR_NUM_NORMAL)); peep->UpdateSpriteType(); break; } diff --git a/src/openrct2/actions/WallSetColourAction.cpp b/src/openrct2/actions/WallSetColourAction.cpp index b696dd89fc..b14c65d468 100644 --- a/src/openrct2/actions/WallSetColourAction.cpp +++ b/src/openrct2/actions/WallSetColourAction.cpp @@ -88,13 +88,13 @@ GameActions::Result WallSetColourAction::Query() const return GameActions::Result(GameActions::Status::Unknown, STR_CANT_REPAINT_THIS, STR_NONE); } - if (_primaryColour > 31) + if (_primaryColour >= COLOUR_COUNT) { LOG_ERROR("Primary colour invalid: colour = %d", _primaryColour); return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); } - if (_secondaryColour > 31) + if (_secondaryColour >= COLOUR_COUNT) { LOG_ERROR("Secondary colour invalid: colour = %d", _secondaryColour); return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); @@ -102,7 +102,7 @@ GameActions::Result WallSetColourAction::Query() const if (wallEntry->flags & WALL_SCENERY_HAS_TERTIARY_COLOUR) { - if (_tertiaryColour > 31) + if (_tertiaryColour >= COLOUR_COUNT) { LOG_ERROR("Tertiary colour invalid: colour = %d", _tertiaryColour); return GameActions::Result(GameActions::Status::InvalidParameters, STR_CANT_REPAINT_THIS, STR_NONE); diff --git a/src/openrct2/drawing/Drawing.cpp b/src/openrct2/drawing/Drawing.cpp index 0f27f2bae5..018ffc0a10 100644 --- a/src/openrct2/drawing/Drawing.cpp +++ b/src/openrct2/drawing/Drawing.cpp @@ -293,6 +293,56 @@ enum SPR_PALETTE_GLASS_DARK_PINK = 5045, SPR_PALETTE_GLASS_BRIGHT_PINK = 5046, SPR_PALETTE_GLASS_LIGHT_PINK = 5047, + + SPR_PALETTE_DARK_OLIVE_DARK = SPR_G2_PALETTE_BEGIN, + 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 +378,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 constexpr uint16_t palette_to_g1_offset[PALETTE_TOTAL_OFFSETS] = { SPR_PALETTE_BLACK, SPR_PALETTE_GREY, SPR_PALETTE_WHITE, @@ -364,6 +438,30 @@ static const uint16_t palette_to_g1_offset[PALETTE_TO_G1_OFFSET_COUNT] = { SPR_PALETTE_DARK_PINK, SPR_PALETTE_BRIGHT_PINK, SPR_PALETTE_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, SPR_PALETTE_WATER, // PaletteWater (water) @@ -480,16 +578,48 @@ 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_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, }; #define WINDOW_PALETTE_GREY {FilterPaletteID::PaletteTranslucentGrey, FilterPaletteID::PaletteTranslucentGreyHighlight, FilterPaletteID::PaletteTranslucentGreyShadow} #define WINDOW_PALETTE_LIGHT_PURPLE {FilterPaletteID::PaletteTranslucentLightPurple, FilterPaletteID::PaletteTranslucentLightPurpleHighlight, FilterPaletteID::PaletteTranslucentLightPurpleShadow} +#define WINDOW_PALETTE_BRIGHT_PURPLE {FilterPaletteID::PaletteTranslucentBrightPurple, FilterPaletteID::PaletteTranslucentBrightPurpleHighlight, FilterPaletteID::PaletteTranslucentBrightPurpleShadow} #define WINDOW_PALETTE_LIGHT_BLUE {FilterPaletteID::PaletteTranslucentLightBlue, FilterPaletteID::PaletteTranslucentLightBlueHighlight, FilterPaletteID::PaletteTranslucentLightBlueShadow} #define WINDOW_PALETTE_TEAL {FilterPaletteID::PaletteTranslucentTeal, FilterPaletteID::PaletteTranslucentTealHighlight, FilterPaletteID::PaletteTranslucentTealShadow} #define WINDOW_PALETTE_BRIGHT_GREEN {FilterPaletteID::PaletteTranslucentBrightGreen, FilterPaletteID::PaletteTranslucentBrightGreenHighlight, FilterPaletteID::PaletteTranslucentBrightGreenShadow} +#define WINDOW_PALETTE_DARK_GREEN {FilterPaletteID::PaletteTranslucentDarkGreen, FilterPaletteID::PaletteTranslucentDarkGreenHighlight, FilterPaletteID::PaletteTranslucentDarkGreenShadow} +#define WINDOW_PALETTE_MOSS_GREEN {FilterPaletteID::PaletteTranslucentMossGreen, FilterPaletteID::PaletteTranslucentMossGreenHighlight, FilterPaletteID::PaletteTranslucentMossGreenShadow} +#define WINDOW_PALETTE_OLIVE_GREEN {FilterPaletteID::PaletteTranslucentOliveGreen, FilterPaletteID::PaletteTranslucentOliveGreenHighlight, FilterPaletteID::PaletteTranslucentOliveGreenShadow} +#define WINDOW_PALETTE_DARK_OLIVE_GREEN {FilterPaletteID::PaletteTranslucentDarkOliveGreen, FilterPaletteID::PaletteTranslucentDarkOliveGreenHighlight, FilterPaletteID::PaletteTranslucentDarkOliveGreenShadow} #define WINDOW_PALETTE_YELLOW {FilterPaletteID::PaletteTranslucentYellow, FilterPaletteID::PaletteTranslucentYellowHighlight, FilterPaletteID::PaletteTranslucentYellowShadow} #define WINDOW_PALETTE_LIGHT_ORANGE {FilterPaletteID::PaletteTranslucentLightOrange, FilterPaletteID::PaletteTranslucentLightOrangeHighlight, FilterPaletteID::PaletteTranslucentLightOrangeShadow} #define WINDOW_PALETTE_LIGHT_BROWN {FilterPaletteID::PaletteTranslucentLightBrown, FilterPaletteID::PaletteTranslucentLightBrownHighlight, FilterPaletteID::PaletteTranslucentLightBrownShadow} +#define WINDOW_PALETTE_DARK_BROWN {FilterPaletteID::PaletteTranslucentDarkBrown, FilterPaletteID::PaletteTranslucentDarkBrownHighlight, FilterPaletteID::PaletteTranslucentDarkBrownShadow} +#define WINDOW_PALETTE_SALMON_PINK {FilterPaletteID::PaletteTranslucentSalmonPink, FilterPaletteID::PaletteTranslucentSalmonPinkHighlight, FilterPaletteID::PaletteTranslucentSalmonPinkShadow} +#define WINDOW_PALETTE_BORDEAUX_RED {FilterPaletteID::PaletteTranslucentBordeauxRed, FilterPaletteID::PaletteTranslucentBordeauxRedHighlight, FilterPaletteID::PaletteTranslucentBordeauxRedShadow} #define WINDOW_PALETTE_BRIGHT_RED {FilterPaletteID::PaletteTranslucentBrightRed, FilterPaletteID::PaletteTranslucentBrightRedHighlight, FilterPaletteID::PaletteTranslucentBrightRedShadow} #define WINDOW_PALETTE_BRIGHT_PINK {FilterPaletteID::PaletteTranslucentBrightPink, FilterPaletteID::PaletteTranslucentBrightPinkHighlight, FilterPaletteID::PaletteTranslucentBrightPinkShadow} @@ -499,18 +629,18 @@ const TranslucentWindowPalette TranslucentWindowPalettes[COLOUR_COUNT] = { {FilterPaletteID::PaletteTranslucentWhite, FilterPaletteID::PaletteTranslucentWhiteHighlight, FilterPaletteID::PaletteTranslucentWhiteShadow}, WINDOW_PALETTE_LIGHT_PURPLE, // COLOUR_DARK_PURPLE WINDOW_PALETTE_LIGHT_PURPLE, // COLOUR_LIGHT_PURPLE - {FilterPaletteID::PaletteTranslucentBrightPurple, FilterPaletteID::PaletteTranslucentBrightPurpleHighlight, FilterPaletteID::PaletteTranslucentBrightPurpleShadow}, + WINDOW_PALETTE_BRIGHT_PURPLE, // COLOUR_BRIGHT_PURPLE WINDOW_PALETTE_LIGHT_BLUE, // COLOUR_DARK_BLUE WINDOW_PALETTE_LIGHT_BLUE, // COLOUR_LIGHT_BLUE WINDOW_PALETTE_LIGHT_BLUE, // COLOUR_ICY_BLUE WINDOW_PALETTE_TEAL, // COLOUR_TEAL WINDOW_PALETTE_TEAL, // COLOUR_AQUAMARINE WINDOW_PALETTE_BRIGHT_GREEN, // COLOUR_SATURATED_GREEN - {FilterPaletteID::PaletteTranslucentDarkGreen, FilterPaletteID::PaletteTranslucentDarkGreenHighlight, FilterPaletteID::PaletteTranslucentDarkGreenShadow}, - {FilterPaletteID::PaletteTranslucentMossGreen, FilterPaletteID::PaletteTranslucentMossGreenHighlight, FilterPaletteID::PaletteTranslucentMossGreenShadow}, + WINDOW_PALETTE_DARK_GREEN, // COLOUR_DARK_GREEN + WINDOW_PALETTE_MOSS_GREEN, // COLOUR_MOSS_GREEN WINDOW_PALETTE_BRIGHT_GREEN, // COLOUR_BRIGHT_GREEN - {FilterPaletteID::PaletteTranslucentOliveGreen, FilterPaletteID::PaletteTranslucentOliveGreenHighlight, FilterPaletteID::PaletteTranslucentOliveGreenShadow}, - {FilterPaletteID::PaletteTranslucentDarkOliveGreen, FilterPaletteID::PaletteTranslucentDarkOliveGreenHighlight, FilterPaletteID::PaletteTranslucentDarkOliveGreenShadow}, + WINDOW_PALETTE_OLIVE_GREEN, // COLOUR_OLIVE_GREEN + WINDOW_PALETTE_DARK_OLIVE_GREEN, // COLOUR_DARK_OLIVE_GREEN WINDOW_PALETTE_YELLOW, // COLOUR_BRIGHT_YELLOW WINDOW_PALETTE_YELLOW, // COLOUR_YELLOW WINDOW_PALETTE_YELLOW, // COLOUR_DARK_YELLOW @@ -518,14 +648,38 @@ const TranslucentWindowPalette TranslucentWindowPalettes[COLOUR_COUNT] = { WINDOW_PALETTE_LIGHT_ORANGE, // COLOUR_DARK_ORANGE WINDOW_PALETTE_LIGHT_BROWN, // COLOUR_LIGHT_BROWN WINDOW_PALETTE_LIGHT_BROWN, // COLOUR_SATURATED_BROWN - {FilterPaletteID::PaletteTranslucentDarkBrown, FilterPaletteID::PaletteTranslucentDarkBrownHighlight, FilterPaletteID::PaletteTranslucentDarkBrownShadow}, - {FilterPaletteID::PaletteTranslucentSalmonPink, FilterPaletteID::PaletteTranslucentSalmonPinkHighlight, FilterPaletteID::PaletteTranslucentSalmonPinkShadow}, - {FilterPaletteID::PaletteTranslucentBordeauxRed, FilterPaletteID::PaletteTranslucentBordeauxRedHighlight, FilterPaletteID::PaletteTranslucentBordeauxRedShadow}, + WINDOW_PALETTE_DARK_BROWN, // COLOUR_DARK_BROWN + WINDOW_PALETTE_SALMON_PINK, // COLOUR_SALMON_PINK + WINDOW_PALETTE_BORDEAUX_RED, // COLOUR_BORDEAUX_RED WINDOW_PALETTE_BRIGHT_RED, // COLOUR_SATURATED_RED WINDOW_PALETTE_BRIGHT_RED, // COLOUR_BRIGHT_RED WINDOW_PALETTE_BRIGHT_PINK, // COLOUR_DARK_PINK WINDOW_PALETTE_BRIGHT_PINK, // COLOUR_BRIGHT_PINK {FilterPaletteID::PaletteTranslucentLightPink, FilterPaletteID::PaletteTranslucentLightPinkHighlight, FilterPaletteID::PaletteTranslucentLightPinkShadow}, + WINDOW_PALETTE_DARK_OLIVE_GREEN, // COLOUR_DARK_OLIVE_DARK + WINDOW_PALETTE_DARK_OLIVE_GREEN, // COLOUR_DARK_OLIVE_LIGHT + WINDOW_PALETTE_LIGHT_BROWN, // COLOUR_SATURATED_BROWN_LIGHT + WINDOW_PALETTE_BORDEAUX_RED, // COLOUR_BORDEAUX_RED_DARK + WINDOW_PALETTE_BORDEAUX_RED, // COLOUR_BORDEAUX_RED_LIGHT + WINDOW_PALETTE_MOSS_GREEN, // COLOUR_GRASS_GREEN_DARK + WINDOW_PALETTE_MOSS_GREEN, // COLOUR_GRASS_GREEN_LIGHT + WINDOW_PALETTE_OLIVE_GREEN, // COLOUR_OLIVE_DARK + WINDOW_PALETTE_OLIVE_GREEN, // COLOUR_OLIVE_LIGHT + WINDOW_PALETTE_BRIGHT_GREEN, // COLOUR_SATURATED_GREEN_LIGHT + WINDOW_PALETTE_SALMON_PINK, // COLOUR_TAN_DARK + WINDOW_PALETTE_SALMON_PINK, // COLOUR_TAN_LIGHT + WINDOW_PALETTE_LIGHT_PURPLE, // COLOUR_DULL_PURPLE_LIGHT + WINDOW_PALETTE_DARK_GREEN, // COLOUR_DULL_GREEN_DARK + WINDOW_PALETTE_DARK_GREEN, // COLOUR_DULL_GREEN_LIGHT + WINDOW_PALETTE_BRIGHT_PURPLE, // COLOUR_SATURATED_PURPLE_DARK + WINDOW_PALETTE_BRIGHT_PURPLE, // COLOUR_SATURATED_PURPLE_LIGHT + WINDOW_PALETTE_LIGHT_ORANGE, // COLOUR_ORANGE_LIGHT + WINDOW_PALETTE_TEAL, // COLOUR_AQUA_DARK + WINDOW_PALETTE_BRIGHT_PINK, // COLOUR_MAGENTA_LIGHT + WINDOW_PALETTE_DARK_BROWN, // COLOUR_DULL_BROWN_DARK + WINDOW_PALETTE_DARK_BROWN, // COLOUR_DULL_BROWN_LIGHT + {FilterPaletteID::PaletteDarken1, FilterPaletteID::PaletteDarken1, FilterPaletteID::PaletteDarken1}, + {FilterPaletteID::PaletteDarken2, FilterPaletteID::PaletteDarken2, FilterPaletteID::PaletteDarken2}, }; // clang-format on @@ -747,7 +901,7 @@ void GfxDrawPickedUpPeep(DrawPixelInfo* dpi) std::optional GetPaletteG1Index(colour_t paletteId) { - if (paletteId < std::size(palette_to_g1_offset)) + 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..bd346bc923 100644 --- a/src/openrct2/drawing/Drawing.h +++ b/src/openrct2/drawing/Drawing.h @@ -190,80 +190,80 @@ enum class FilterPaletteID : int32_t { PaletteNull = 0, - PaletteWater = 32, + PaletteWater = COLOUR_COUNT, - Palette34 = 34, + Palette34 = PaletteWater + 2, - Palette44 = 44, // Construction marker - Palette45 = 45, // Decolourise + lighten - Palette46 = 46, + Palette44 = Palette34 + 10, // Construction marker + Palette45, // Decolourise + lighten + Palette46, - PaletteDarken3 = 47, + PaletteDarken3, - PaletteDarken1 = 49, - PaletteDarken2 = 50, - Palette51 = 51, // Decolourise + darken - PaletteTranslucentGrey = 52, - PaletteTranslucentGreyHighlight = 53, - PaletteTranslucentGreyShadow = 54, - PaletteTranslucentLightBlue = 55, - PaletteTranslucentLightBlueHighlight = 56, - PaletteTranslucentLightBlueShadow = 57, - PaletteTranslucentBordeauxRed = 58, - PaletteTranslucentBordeauxRedHighlight = 59, - PaletteTranslucentBordeauxRedShadow = 60, - PaletteTranslucentDarkGreen = 61, - PaletteTranslucentDarkGreenHighlight = 62, - PaletteTranslucentDarkGreenShadow = 63, - PaletteTranslucentLightPurple = 64, - PaletteTranslucentLightPurpleHighlight = 65, - PaletteTranslucentLightPurpleShadow = 66, - PaletteTranslucentDarkOliveGreen = 67, - PaletteTranslucentDarkOliveGreenHighlight = 68, - PaletteTranslucentDarkOliveGreenShadow = 69, - PaletteTranslucentLightBrown = 70, - PaletteTranslucentLightBrownHighlight = 71, - PaletteTranslucentLightBrownShadow = 72, - PaletteTranslucentYellow = 73, - PaletteTranslucentYellowHighlight = 74, - PaletteTranslucentYellowShadow = 75, - PaletteTranslucentMossGreen = 76, - PaletteTranslucentMossGreenHighlight = 77, - PaletteTranslucentMossGreenShadow = 78, - PaletteTranslucentOliveGreen = 79, - PaletteTranslucentOliveGreenHighlight = 80, - PaletteTranslucentOliveGreenShadow = 81, - PaletteTranslucentBrightGreen = 82, - PaletteTranslucentBrightGreenHighlight = 83, - PaletteTranslucentBrightGreenShadow = 84, - PaletteTranslucentSalmonPink = 85, - PaletteTranslucentSalmonPinkHighlight = 86, - PaletteTranslucentSalmonPinkShadow = 87, - PaletteTranslucentBrightPurple = 88, - PaletteTranslucentBrightPurpleHighlight = 89, - PaletteTranslucentBrightPurpleShadow = 90, - PaletteTranslucentBrightRed = 91, - PaletteTranslucentBrightRedHighlight = 92, - PaletteTranslucentBrightRedShadow = 93, - PaletteTranslucentLightOrange = 94, - PaletteTranslucentLightOrangeHighlight = 95, - PaletteTranslucentLightOrangeShadow = 96, - PaletteTranslucentTeal = 97, - PaletteTranslucentTealHighlight = 98, - PaletteTranslucentTealShadow = 99, - PaletteTranslucentBrightPink = 100, - PaletteTranslucentBrightPinkHighlight = 101, - PaletteTranslucentBrightPinkShadow = 102, - PaletteTranslucentDarkBrown = 103, - PaletteTranslucentDarkBrownHighlight = 104, - PaletteTranslucentDarkBrownShadow = 105, - PaletteTranslucentLightPink = 106, - PaletteTranslucentLightPinkHighlight = 107, - PaletteTranslucentLightPinkShadow = 108, - PaletteTranslucentWhite = 109, - PaletteTranslucentWhiteHighlight = 110, - PaletteTranslucentWhiteShadow = 111, - PaletteGlass = 112, + PaletteDarken1 = PaletteDarken3 + 2, + PaletteDarken2, + Palette51, // Decolourise + darken + PaletteTranslucentGrey, + PaletteTranslucentGreyHighlight, + PaletteTranslucentGreyShadow, + PaletteTranslucentLightBlue, + PaletteTranslucentLightBlueHighlight, + PaletteTranslucentLightBlueShadow, + PaletteTranslucentBordeauxRed, + PaletteTranslucentBordeauxRedHighlight, + PaletteTranslucentBordeauxRedShadow, + PaletteTranslucentDarkGreen, + PaletteTranslucentDarkGreenHighlight, + PaletteTranslucentDarkGreenShadow, + PaletteTranslucentLightPurple, + PaletteTranslucentLightPurpleHighlight, + PaletteTranslucentLightPurpleShadow, + PaletteTranslucentDarkOliveGreen, + PaletteTranslucentDarkOliveGreenHighlight, + PaletteTranslucentDarkOliveGreenShadow, + PaletteTranslucentLightBrown, + PaletteTranslucentLightBrownHighlight, + PaletteTranslucentLightBrownShadow, + PaletteTranslucentYellow, + PaletteTranslucentYellowHighlight, + PaletteTranslucentYellowShadow, + PaletteTranslucentMossGreen, + PaletteTranslucentMossGreenHighlight, + PaletteTranslucentMossGreenShadow, + PaletteTranslucentOliveGreen, + PaletteTranslucentOliveGreenHighlight, + PaletteTranslucentOliveGreenShadow, + PaletteTranslucentBrightGreen, + PaletteTranslucentBrightGreenHighlight, + PaletteTranslucentBrightGreenShadow, + PaletteTranslucentSalmonPink, + PaletteTranslucentSalmonPinkHighlight, + PaletteTranslucentSalmonPinkShadow, + PaletteTranslucentBrightPurple, + PaletteTranslucentBrightPurpleHighlight, + PaletteTranslucentBrightPurpleShadow, + PaletteTranslucentBrightRed, + PaletteTranslucentBrightRedHighlight, + PaletteTranslucentBrightRedShadow, + PaletteTranslucentLightOrange, + PaletteTranslucentLightOrangeHighlight, + PaletteTranslucentLightOrangeShadow, + PaletteTranslucentTeal, + PaletteTranslucentTealHighlight, + PaletteTranslucentTealShadow, + PaletteTranslucentBrightPink, + PaletteTranslucentBrightPinkHighlight, + PaletteTranslucentBrightPinkShadow, + PaletteTranslucentDarkBrown, + PaletteTranslucentDarkBrownHighlight, + PaletteTranslucentDarkBrownShadow, + PaletteTranslucentLightPink, + PaletteTranslucentLightPinkHighlight, + PaletteTranslucentLightPinkShadow, + PaletteTranslucentWhite, + PaletteTranslucentWhiteHighlight, + PaletteTranslucentWhiteShadow, + PaletteGlass, PaletteGlassBlack = PaletteGlass + COLOUR_BLACK, PaletteGlassGrey = PaletteGlass + COLOUR_GREY, PaletteGlassWhite = PaletteGlass + COLOUR_WHITE, @@ -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 +constexpr uint8_t 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) 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/entity/Guest.cpp b/src/openrct2/entity/Guest.cpp index 04a82658e8..de8509bb0b 100644 --- a/src/openrct2/entity/Guest.cpp +++ b/src/openrct2/entity/Guest.cpp @@ -1619,16 +1619,20 @@ bool Guest::DecideAndBuyItem(Ride& ride, ShopItem shopItem, money64 price) const auto hasRandomShopColour = ride.HasLifecycleFlag(RIDE_LIFECYCLE_RANDOM_SHOP_COLOURS); if (shopItem == ShopItem::TShirt) - TshirtColour = hasRandomShopColour ? ScenarioRandMax(COLOUR_COUNT - 1) : ride.track_colour[0].main; + TshirtColour = hasRandomShopColour ? ColourToPaletteIndex(ScenarioRandMax(COLOUR_NUM_NORMAL - 1)) + : ride.track_colour[0].main; if (shopItem == ShopItem::Hat) - HatColour = hasRandomShopColour ? ScenarioRandMax(COLOUR_COUNT - 1) : ride.track_colour[0].main; + HatColour = hasRandomShopColour ? ColourToPaletteIndex(ScenarioRandMax(COLOUR_NUM_NORMAL - 1)) + : ride.track_colour[0].main; if (shopItem == ShopItem::Balloon) - BalloonColour = hasRandomShopColour ? ScenarioRandMax(COLOUR_COUNT - 1) : ride.track_colour[0].main; + BalloonColour = hasRandomShopColour ? ColourToPaletteIndex(ScenarioRandMax(COLOUR_NUM_NORMAL - 1)) + : ride.track_colour[0].main; if (shopItem == ShopItem::Umbrella) - UmbrellaColour = hasRandomShopColour ? ScenarioRandMax(COLOUR_COUNT - 1) : ride.track_colour[0].main; + UmbrellaColour = hasRandomShopColour ? ColourToPaletteIndex(ScenarioRandMax(COLOUR_NUM_NORMAL - 1)) + : ride.track_colour[0].main; if (shopItem == ShopItem::Map) ResetPathfindGoal(); diff --git a/src/openrct2/interface/Colour.cpp b/src/openrct2/interface/Colour.cpp index 56bb2474a6..d70f1d0a39 100644 --- a/src/openrct2/interface/Colour.cpp +++ b/src/openrct2/interface/Colour.cpp @@ -39,7 +39,9 @@ void ColoursInitMaps() // Get colour maps from g1 for (int32_t i = 0; i < COLOUR_COUNT; i++) { - const G1Element* g1 = GfxGetG1Element(SPR_PALETTE_2_START + i); + // 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); if (g1 != nullptr) { ColourMapA[i].colour_0 = g1->offset[INDEX_COLOUR_0]; @@ -93,6 +95,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) @@ -103,6 +129,11 @@ namespace Colour } // namespace Colour +uint8_t ColourToPaletteIndex(colour_t colour) +{ + return COLOUR_USABLE_ORDER[colour]; +} + #ifndef NO_TTF static uint8_t BlendColourMap[PALETTE_COUNT][PALETTE_COUNT] = { 0 }; diff --git a/src/openrct2/interface/Colour.h b/src/openrct2/interface/Colour.h index 5a3f8d066c..0cbe6e4563 100644 --- a/src/openrct2/interface/Colour.h +++ b/src/openrct2/interface/Colour.h @@ -20,6 +20,7 @@ using PaletteIndex = uint8_t; */ enum : colour_t { + // Original Colours COLOUR_BLACK, COLOUR_GREY, COLOUR_WHITE, @@ -53,6 +54,32 @@ enum : colour_t COLOUR_BRIGHT_PINK, COLOUR_LIGHT_PINK, + // Extended Colour Set + 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, COLOUR_NULL = 255, @@ -64,7 +91,8 @@ enum : colour_t enum { COLOUR_DARK_WATER = 9, - COLOUR_LIGHT_WATER = 10 + COLOUR_LIGHT_WATER = 10, + COLOUR_DEEP_WATER = 50 }; enum : PaletteIndex @@ -157,6 +185,74 @@ enum : PaletteIndex PALETTE_INDEX_254 = 254, // Primary remap 11 }; +// clang-format off +// colour_t ordered for use in color dropdown +static constexpr colour_t COLOUR_USABLE_ORDER[] = { + COLOUR_BLACK, + COLOUR_SATURATED_RED, + COLOUR_DARK_ORANGE, + COLOUR_DARK_YELLOW, + COLOUR_GRASS_GREEN_DARK, + COLOUR_SATURATED_GREEN, + COLOUR_AQUA_DARK, + COLOUR_DARK_BLUE, + COLOUR_SATURATED_PURPLE_DARK, + + COLOUR_GREY, + COLOUR_BRIGHT_RED, + COLOUR_LIGHT_ORANGE, + COLOUR_YELLOW, + COLOUR_MOSS_GREEN, + COLOUR_BRIGHT_GREEN, + COLOUR_TEAL, + COLOUR_LIGHT_BLUE, + COLOUR_BRIGHT_PURPLE, + + COLOUR_WHITE, + COLOUR_LIGHT_PINK, + COLOUR_ORANGE_LIGHT, + COLOUR_BRIGHT_YELLOW, + COLOUR_GRASS_GREEN_LIGHT, + COLOUR_SATURATED_GREEN_LIGHT, + COLOUR_AQUAMARINE, + COLOUR_ICY_BLUE, + COLOUR_SATURATED_PURPLE_LIGHT, + + COLOUR_DULL_BROWN_DARK, + COLOUR_BORDEAUX_RED_DARK, + COLOUR_TAN_DARK, + COLOUR_SATURATED_BROWN, + COLOUR_DARK_OLIVE_DARK, + COLOUR_OLIVE_DARK, + COLOUR_DULL_GREEN_DARK, + COLOUR_DARK_PURPLE, + COLOUR_DARK_PINK, + + COLOUR_DARK_BROWN, + COLOUR_BORDEAUX_RED, + COLOUR_SALMON_PINK, + COLOUR_LIGHT_BROWN, + COLOUR_DARK_OLIVE_GREEN, + COLOUR_OLIVE_GREEN, + COLOUR_DARK_GREEN, + COLOUR_LIGHT_PURPLE, + COLOUR_BRIGHT_PINK, + + COLOUR_DULL_BROWN_LIGHT, + COLOUR_BORDEAUX_RED_LIGHT, + COLOUR_TAN_LIGHT, + COLOUR_SATURATED_BROWN_LIGHT, + COLOUR_DARK_OLIVE_LIGHT, + COLOUR_OLIVE_LIGHT, + COLOUR_DULL_GREEN_LIGHT, + COLOUR_DULL_PURPLE_LIGHT, + COLOUR_MAGENTA_LIGHT, + + COLOUR_INVISIBLE, + COLOUR_VOID +}; +// clang-format on + constexpr size_t PALETTE_COUNT = 256; constexpr uint8_t PALETTE_OFFSET_DYNAMIC = PALETTE_INDEX_10; @@ -178,6 +274,9 @@ 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 COLOUR_NUM_ORIGINAL = 32; +constexpr uint8_t COLOUR_NUM_NORMAL = 54; + #define TEXT_COLOUR_254 (254) #define TEXT_COLOUR_255 (255) @@ -218,6 +317,8 @@ namespace Colour colour_t FromString(std::string_view s, colour_t defaultValue = COLOUR_BLACK); } +uint8_t ColourToPaletteIndex(colour_t colour); + #ifndef NO_TTF uint8_t BlendColours(const uint8_t paletteIndex1, const uint8_t paletteIndex2); #endif diff --git a/src/openrct2/localisation/StringIds.h b/src/openrct2/localisation/StringIds.h index 4e1793e5e2..fd5335493c 100644 --- a/src/openrct2/localisation/StringIds.h +++ b/src/openrct2/localisation/StringIds.h @@ -3950,6 +3950,33 @@ 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, + STR_CHEAT_ALLOW_SPECIAL_COLOUR_SCHEMES = 6575, + STR_CHEAT_ALLOW_SPECIAL_COLOUR_SCHEMES_TIP = 6576, + // 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/network/NetworkBase.cpp b/src/openrct2/network/NetworkBase.cpp index 12313b84a4..64009cd5fd 100644 --- a/src/openrct2/network/NetworkBase.cpp +++ b/src/openrct2/network/NetworkBase.cpp @@ -43,7 +43,7 @@ // It is used for making sure only compatible builds get connected, even within // single OpenRCT2 version. -#define NETWORK_STREAM_VERSION "5" +#define NETWORK_STREAM_VERSION "6" #define NETWORK_STREAM_ID OPENRCT2_VERSION "-" NETWORK_STREAM_VERSION diff --git a/src/openrct2/park/ParkFile.h b/src/openrct2/park/ParkFile.h index 185e94ba15..6cb3c62428 100644 --- a/src/openrct2/park/ParkFile.h +++ b/src/openrct2/park/ParkFile.h @@ -9,10 +9,10 @@ struct ObjectRepositoryItem; namespace OpenRCT2 { // Current version that is saved. - constexpr uint32_t PARK_FILE_CURRENT_VERSION = 24; + constexpr uint32_t PARK_FILE_CURRENT_VERSION = 25; // The minimum version that is forwards compatible with the current version. - constexpr uint32_t PARK_FILE_MIN_VERSION = 24; + constexpr uint32_t PARK_FILE_MIN_VERSION = 25; // The minimum version that is backwards compatible with the current version. // If this is increased beyond 0, uncomment the checks in ParkFile.cpp and Context.cpp! diff --git a/src/openrct2/scripting/ScriptEngine.h b/src/openrct2/scripting/ScriptEngine.h index f309d823e9..eb211adf93 100644 --- a/src/openrct2/scripting/ScriptEngine.h +++ b/src/openrct2/scripting/ScriptEngine.h @@ -47,7 +47,7 @@ namespace OpenRCT2 namespace OpenRCT2::Scripting { - static constexpr int32_t OPENRCT2_PLUGIN_API_VERSION = 71; + static constexpr int32_t OPENRCT2_PLUGIN_API_VERSION = 72; // Versions marking breaking changes. static constexpr int32_t API_VERSION_33_PEEP_DEPRECATION = 33; diff --git a/src/openrct2/scripting/bindings/game/ScCheats.hpp b/src/openrct2/scripting/bindings/game/ScCheats.hpp index f578e0b8bc..8aef117dfc 100644 --- a/src/openrct2/scripting/bindings/game/ScCheats.hpp +++ b/src/openrct2/scripting/bindings/game/ScCheats.hpp @@ -42,6 +42,9 @@ namespace OpenRCT2::Scripting ctx, &ScCheats::disablePlantAging_get, &ScCheats::disablePlantAging_set, "disablePlantAging"); dukglue_register_property( ctx, &ScCheats::allowRegularPathAsQueue_get, &ScCheats::allowRegularPathAsQueue_set, "allowRegularPathAsQueue"); + dukglue_register_property( + ctx, &ScCheats::allowSpecialColourSchemes_get, &ScCheats::allowSpecialColourSchemes_set, + "allowSpecialColourSchemes"); dukglue_register_property( ctx, &ScCheats::disableRideValueAging_get, &ScCheats::disableRideValueAging_set, "disableRideValueAging"); dukglue_register_property( @@ -172,6 +175,17 @@ namespace OpenRCT2::Scripting gCheatsAllowRegularPathAsQueue = value; } + bool allowSpecialColourSchemes_get() + { + return gCheatsAllowSpecialColourSchemes; + } + + void allowSpecialColourSchemes_set(bool value) + { + ThrowIfGameStateNotMutable(); + gCheatsAllowSpecialColourSchemes = value; + } + bool disableRideValueAging_get() { return gCheatsDisableRideValueAging; diff --git a/src/openrct2/sprites.h b/src/openrct2/sprites.h index 3e9f14ecff..cde92b3cc9 100644 --- a/src/openrct2/sprites.h +++ b/src/openrct2/sprites.h @@ -1364,7 +1364,61 @@ 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_ICON_PALETTE_INVISIBLE = SPR_G2_ALPINE_END, + SPR_G2_ICON_PALETTE_INVISIBLE_PRESSED, + + SPR_G2_PALETTE_BEGIN, + SPR_G2_PAL_REMAP_DARK_OLIVE_DARK = SPR_G2_PALETTE_BEGIN, + 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_GLASS_DARK_OLIVE_DARK, + SPR_G2_PAL_GLASS_DARK_OLIVE_LIGHT, + SPR_G2_PAL_GLASS_SATURATED_BROWN_LIGHT, + SPR_G2_PAL_GLASS_BORDEAUX_RED_DARK, + SPR_G2_PAL_GLASS_BORDEAUX_RED_LIGHT, + SPR_G2_PAL_GLASS_GRASS_GREEN_DARK, + SPR_G2_PAL_GLASS_GRASS_GREEN_LIGHT, + SPR_G2_PAL_GLASS_OLIVE_DARK, + SPR_G2_PAL_GLASS_OLIVE_LIGHT, + SPR_G2_PAL_GLASS_SATURATED_GREEN_LIGHT, + SPR_G2_PAL_GLASS_TAN_DARK, + SPR_G2_PAL_GLASS_TAN_LIGHT, + SPR_G2_PAL_GLASS_DULL_PURPLE_LIGHT, + SPR_G2_PAL_GLASS_DULL_GREEN_DARK, + SPR_G2_PAL_GLASS_DULL_GREEN_LIGHT, + SPR_G2_PAL_GLASS_SATURATED_PURPLE_DARK, + SPR_G2_PAL_GLASS_SATURATED_PURPLE_LIGHT, + SPR_G2_PAL_GLASS_ORANGE_LIGHT, + SPR_G2_PAL_GLASS_AQUA_DARK, + SPR_G2_PAL_GLASS_MAGENTA_LIGHT, + SPR_G2_PAL_GLASS_DULL_BROWN_DARK, + SPR_G2_PAL_GLASS_DULL_BROWN_LIGHT, + SPR_G2_PAL_GLASS_INVISIBLE, + SPR_G2_PAL_GLASS_VOID, + SPR_G2_PALETTE_END = SPR_G2_PAL_GLASS_VOID, + + SPR_G2_END, SPR_CSG_BEGIN = SPR_G2_END, SPR_CSG_END = SPR_CSG_BEGIN + RCT1::Limits::Num_LL_CSG_Entries,