From de2b893d99e4d2e99af98a666cff952f4fcb7630 Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Sat, 1 Jan 2022 16:52:49 +0100 Subject: [PATCH 1/4] Fix #16061: Incorrect colours in minimap --- src/openrct2-ui/windows/Map.cpp | 24 ++++++-------------- src/openrct2/object/TerrainSurfaceObject.cpp | 10 ++++++++ src/openrct2/object/TerrainSurfaceObject.h | 1 + 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/src/openrct2-ui/windows/Map.cpp b/src/openrct2-ui/windows/Map.cpp index b344a4c333..40edfaff83 100644 --- a/src/openrct2-ui/windows/Map.cpp +++ b/src/openrct2-ui/windows/Map.cpp @@ -29,6 +29,7 @@ #include #include #include +#include #include #include #include @@ -1380,22 +1381,6 @@ static void MapWindowDecreaseMapSize() } static constexpr const uint16_t WaterColour = MapColour(PALETTE_INDEX_195); -static constexpr const uint16_t TerrainColour[] = { - MapColour(PALETTE_INDEX_73), // TERRAIN_GRASS - MapColour(PALETTE_INDEX_40), // TERRAIN_SAND - MapColour(PALETTE_INDEX_108), // TERRAIN_DIRT - MapColour(PALETTE_INDEX_12), // TERRAIN_ROCK - MapColour(PALETTE_INDEX_62), // TERRAIN_MARTIAN - MapColour2(PALETTE_INDEX_10, PALETTE_INDEX_16), // TERRAIN_CHECKERBOARD - MapColour2(PALETTE_INDEX_73, PALETTE_INDEX_108), // TERRAIN_GRASS_CLUMPS - MapColour(PALETTE_INDEX_141), // TERRAIN_ICE - MapColour2(PALETTE_INDEX_172, PALETTE_INDEX_10), // TERRAIN_GRID_RED - MapColour2(PALETTE_INDEX_54, PALETTE_INDEX_10), // TERRAIN_GRID_YELLOW - MapColour2(PALETTE_INDEX_162, PALETTE_INDEX_10), // TERRAIN_GRID_BLUE - MapColour2(PALETTE_INDEX_102, PALETTE_INDEX_10), // TERRAIN_GRID_GREEN - MapColour(PALETTE_INDEX_111), // TERRAIN_SAND_DARK - MapColour(PALETTE_INDEX_222), // TERRAIN_SAND_LIGHT -}; static constexpr const uint16_t ElementTypeMaskColour[] = { 0xFFFF, // TILE_ELEMENT_TYPE_SURFACE @@ -1424,7 +1409,12 @@ static uint16_t MapWindowGetPixelColourPeep(const CoordsXY& c) auto* surfaceElement = map_get_surface_element_at(c); if (surfaceElement == nullptr) return 0; - uint16_t colour = TerrainColour[surfaceElement->GetSurfaceStyle()]; + + uint16_t colour = MapColour(PALETTE_INDEX_0); + const auto* surfaceObject = surfaceElement->GetSurfaceStyleObject(); + if (surfaceObject != nullptr) + colour = MapColour2(surfaceObject->MapColours[0], surfaceObject->MapColours[1]); + if (surfaceElement->GetWaterHeight() > 0) colour = WaterColour; diff --git a/src/openrct2/object/TerrainSurfaceObject.cpp b/src/openrct2/object/TerrainSurfaceObject.cpp index 05c7f433bd..7adf3629d7 100644 --- a/src/openrct2/object/TerrainSurfaceObject.cpp +++ b/src/openrct2/object/TerrainSurfaceObject.cpp @@ -94,6 +94,16 @@ void TerrainSurfaceObject::ReadJson(IReadObjectContext* context, json_t& root) { "smoothWithOther", TERRAIN_SURFACE_FLAGS::SMOOTH_WITH_OTHER }, { "canGrow", TERRAIN_SURFACE_FLAGS::CAN_GROW } }); + const auto mapColours = properties["mapColours"]; + const bool mapColoursAreValid = mapColours.is_array() && mapColours.size() == std::size(MapColours); + for (size_t i = 0; i < std::size(MapColours); i++) + { + if (mapColoursAreValid) + MapColours[i] = mapColours[i]; + else + MapColours[i] = PALETTE_INDEX_0; + } + for (auto& el : properties["special"]) { if (el.is_object()) diff --git a/src/openrct2/object/TerrainSurfaceObject.h b/src/openrct2/object/TerrainSurfaceObject.h index 60ed875d6b..0cbce2d7ba 100644 --- a/src/openrct2/object/TerrainSurfaceObject.h +++ b/src/openrct2/object/TerrainSurfaceObject.h @@ -53,6 +53,7 @@ public: uint8_t Rotations{}; money32 Price{}; TERRAIN_SURFACE_FLAGS Flags{}; + uint8_t MapColours[2]; void ReadJson(IReadObjectContext* context, json_t& root) override; void Load() override; From 1e1f370c8d20905ee97c50f0cbc31b8da73b0cdf Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Sat, 1 Jan 2022 18:38:31 +0100 Subject: [PATCH 2/4] Create PaletteIndex --- src/openrct2/interface/Colour.h | 4 +++- src/openrct2/object/TerrainSurfaceObject.h | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/openrct2/interface/Colour.h b/src/openrct2/interface/Colour.h index 0ae29c6492..26a98eccb3 100644 --- a/src/openrct2/interface/Colour.h +++ b/src/openrct2/interface/Colour.h @@ -13,6 +13,8 @@ #include +using PaletteIndex = uint8_t; + /** * Colour IDs as used by the colour dropdown, NOT palette indices. */ @@ -65,7 +67,7 @@ enum COLOUR_LIGHT_WATER = 10 }; -enum : uint8_t +enum : PaletteIndex { PALETTE_INDEX_0 = 0, // Transparent PALETTE_INDEX_10 = 10, // Black (0-dark), Dark grey (0) diff --git a/src/openrct2/object/TerrainSurfaceObject.h b/src/openrct2/object/TerrainSurfaceObject.h index 0cbce2d7ba..9663e7d40b 100644 --- a/src/openrct2/object/TerrainSurfaceObject.h +++ b/src/openrct2/object/TerrainSurfaceObject.h @@ -53,7 +53,7 @@ public: uint8_t Rotations{}; money32 Price{}; TERRAIN_SURFACE_FLAGS Flags{}; - uint8_t MapColours[2]; + PaletteIndex MapColours[2]; void ReadJson(IReadObjectContext* context, json_t& root) override; void Load() override; From 0e86d9577ce9944f2d6e233d1de24e763396711a Mon Sep 17 00:00:00 2001 From: Michael Steenbeek Date: Sun, 2 Jan 2022 17:07:36 +0100 Subject: [PATCH 3/4] Default-initialise MapColours Co-authored-by: Ted John --- src/openrct2/object/TerrainSurfaceObject.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/openrct2/object/TerrainSurfaceObject.h b/src/openrct2/object/TerrainSurfaceObject.h index 9663e7d40b..c20df180d2 100644 --- a/src/openrct2/object/TerrainSurfaceObject.h +++ b/src/openrct2/object/TerrainSurfaceObject.h @@ -53,7 +53,7 @@ public: uint8_t Rotations{}; money32 Price{}; TERRAIN_SURFACE_FLAGS Flags{}; - PaletteIndex MapColours[2]; + PaletteIndex MapColours[2]{}; void ReadJson(IReadObjectContext* context, json_t& root) override; void Load() override; From 07fff9ec1872e83e318601bcbf4a4578c5e5a2c2 Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Sun, 2 Jan 2022 17:33:31 +0100 Subject: [PATCH 4/4] Use v1.2.5 objects release --- CMakeLists.txt | 4 ++-- openrct2.proj | 4 ++-- shell.nix | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 566f3a8a96..0803ff3130 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -64,9 +64,9 @@ set(TITLE_SEQUENCE_VERSION "0.1.2c") set(TITLE_SEQUENCE_URL "https://github.com/OpenRCT2/title-sequences/releases/download/v${TITLE_SEQUENCE_VERSION}/title-sequences.zip") set(TITLE_SEQUENCE_SHA1 "304d13a126c15bf2c86ff13b81a2f2cc1856ac8d") -set(OBJECTS_VERSION "1.2.4") +set(OBJECTS_VERSION "1.2.5") set(OBJECTS_URL "https://github.com/OpenRCT2/objects/releases/download/v${OBJECTS_VERSION}/objects.zip") -set(OBJECTS_SHA1 "c82605035f120188b7334a781a786ced9588e9af") +set(OBJECTS_SHA1 "cc1db6abf7d6f7bdf6dbcbca782548a2c3af27ad") set(REPLAYS_VERSION "0.0.62") set(REPLAYS_URL "https://github.com/OpenRCT2/replays/releases/download/v${REPLAYS_VERSION}/replays.zip") diff --git a/openrct2.proj b/openrct2.proj index 647db8e5a5..02f635aa28 100644 --- a/openrct2.proj +++ b/openrct2.proj @@ -46,8 +46,8 @@ 058b9df80244c03f1633cb06e9f70471a29ebb8e https://github.com/OpenRCT2/title-sequences/releases/download/v0.1.2c/title-sequences.zip 304d13a126c15bf2c86ff13b81a2f2cc1856ac8d - https://github.com/OpenRCT2/objects/releases/download/v1.2.4/objects.zip - c82605035f120188b7334a781a786ced9588e9af + https://github.com/OpenRCT2/objects/releases/download/v1.2.5/objects.zip + cc1db6abf7d6f7bdf6dbcbca782548a2c3af27ad https://github.com/OpenRCT2/replays/releases/download/v0.0.62/replays.zip 0B234FA152AFA49F5204ADA97CBAAE39A538961B diff --git a/shell.nix b/shell.nix index ea2fb5fc47..06783fcb4f 100644 --- a/shell.nix +++ b/shell.nix @@ -15,8 +15,8 @@ let objects-src = pkgs.fetchFromGitHub { owner = "OpenRCT2"; repo = "objects"; - rev = "v1.2.4"; - sha256 = "d01e5f1d2c95ba8ee295c457ae6215c048728ab07adc3db58a08f3cf2b1fa179"; + rev = "v1.2.5"; + sha256 = "e6b1f6985e38966672450e9c17473c730562f3f340fe07c93df618f3a8e809bb"; }; title-sequences-src = pkgs.fetchFromGitHub {