1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-26 08:14:38 +01:00

Fix #19494: RCT1 sloped gates not imported correctly

This commit is contained in:
Michael Steenbeek
2024-01-28 14:56:38 +01:00
committed by GitHub
parent 8dd5014bc4
commit 396af1f34c
4 changed files with 78 additions and 1 deletions

View File

@@ -7,6 +7,7 @@
- Improved: [#21227] Entrance style dropdown is now sorted alphabetically everywhere.
- Change: [#21200] Raise maximum lift speeds of the Reverser Coaster, Side Friction Coaster, and Virginia Reel for RCT1 parity.
- Change: [#21225] Raise maximum allowed misc entities to 1600.
- Fix: [#19494] RCT1 fence gate walls not imported properly if they were placed on slopes.
- Fix: [#20196] New scenarios start with an incorrect temperature.
- Fix: [#20255] Images from the last hovered-over coaster in the object selection are not freed.
- Fix: [#20616] Confirmation button in the track designers quit prompt has the wrong text.

View File

@@ -1191,6 +1191,70 @@ namespace RCT1
return map[largeSceneryType];
}
int32_t MapSlopedWall(uint8_t wallType)
{
static constexpr uint8_t map[] =
{
RCT1_WALL_TYPE_MESH_FENCE, // RCT1_WALL_TYPE_MESH_FENCE,
RCT1_WALL_TYPE_MESH_FENCE, // RCT1_WALL_TYPE_MESH_FENCE_WITH_GATE,
RCT1_WALL_TYPE_ROMAN, // RCT1_WALL_TYPE_ROMAN,
RCT1_WALL_TYPE_EGYPTIAN, // RCT1_WALL_TYPE_EGYPTIAN,
RCT1_WALL_TYPE_HEDGE, // RCT1_WALL_TYPE_HEDGE,
RCT1_WALL_TYPE_HEDGE, // RCT1_WALL_TYPE_HEDGE_WITH_GATE,
RCT1_WALL_TYPE_BLUE_PLAYING_CARDS, // RCT1_WALL_TYPE_BLUE_PLAYING_CARDS,
RCT1_WALL_TYPE_RED_PLAYING_CARDS, // RCT1_WALL_TYPE_RED_PLAYING_CARDS,
RCT1_WALL_TYPE_WHITE_RAILING, // RCT1_WALL_TYPE_WHITE_RAILING,
RCT1_WALL_TYPE_WHITE_RAILING, // RCT1_WALL_TYPE_WHITE_RAILING_WITH_GATE,
RCT1_WALL_TYPE_MARTIAN, // RCT1_WALL_TYPE_MARTIAN,
RCT1_WALL_TYPE_GLASS_SMOOTH, // RCT1_WALL_TYPE_GLASS_SMOOTH,
RCT1_WALL_TYPE_WOODEN_PANEL_FENCE, // RCT1_WALL_TYPE_WOODEN_PANEL_FENCE,
RCT1_WALL_TYPE_WOODEN_PANEL_FENCE, // RCT1_WALL_TYPE_WOODEN_PANEL_FENCE_WITH_GATE,
RCT1_WALL_TYPE_WOODEN_POST_FENCE, // RCT1_WALL_TYPE_WOODEN_POST_FENCE,
RCT1_WALL_TYPE_RED_WOODEN_POST_FENCE, // RCT1_WALL_TYPE_RED_WOODEN_POST_FENCE,
RCT1_WALL_TYPE_BARBED_WIRE, // RCT1_WALL_TYPE_BARBED_WIRE,
RCT1_WALL_TYPE_BARBED_WIRE, // RCT1_WALL_TYPE_BARBED_WIRE_WITH_GATE,
RCT1_WALL_TYPE_PRIMITIVE_TALL_WOOD_FENCE, // RCT1_WALL_TYPE_PRIMITIVE_TALL_WOOD_FENCE,
RCT1_WALL_TYPE_PRIMITIVE_SHORT_WOOD_FENCE, // RCT1_WALL_TYPE_PRIMITIVE_SHORT_WOOD_FENCE,
RCT1_WALL_TYPE_IRON_RAILING, // RCT1_WALL_TYPE_IRON_RAILING,
RCT1_WALL_TYPE_IRON_RAILING, // RCT1_WALL_TYPE_IRON_RAILING_WITH_GATE,
RCT1_WALL_TYPE_GLASS_PANELS, // RCT1_WALL_TYPE_GLASS_PANELS,
RCT1_WALL_TYPE_BONE_FENCE, // RCT1_WALL_TYPE_BONE_FENCE,
RCT1_WALL_TYPE_BRICK, // RCT1_WALL_TYPE_BRICK,
RCT1_WALL_TYPE_BRICK, // RCT1_WALL_TYPE_BRICK_WITH_GATE,
RCT1_WALL_TYPE_WHITE_WOODEN_PANEL_FENCE, // RCT1_WALL_TYPE_WHITE_WOODEN_PANEL_FENCE,
RCT1_WALL_TYPE_RED_WOODEN_PANEL_FENCE, // RCT1_WALL_TYPE_RED_WOODEN_PANEL_FENCE,
RCT1_WALL_TYPE_STONE, // RCT1_WALL_TYPE_STONE,
RCT1_WALL_TYPE_STONE, // RCT1_WALL_TYPE_STONE_WITH_GATE,
RCT1_WALL_TYPE_WOODEN_FENCE, // RCT1_WALL_TYPE_WOODEN_FENCE,
RCT1_WALL_TYPE_JUNGLE, // RCT1_WALL_TYPE_JUNGLE,
RCT1_WALL_TYPE_CONIFER_HEDGE, // RCT1_WALL_TYPE_CONIFER_HEDGE,
RCT1_WALL_TYPE_CONIFER_HEDGE, // RCT1_WALL_TYPE_CONIFER_HEDGE_WITH_GATE,
RCT1_WALL_TYPE_SMALL_BROWN_CASTLE, // RCT1_WALL_TYPE_SMALL_BROWN_CASTLE,
RCT1_WALL_TYPE_SMALL_GREY_CASTLE, // RCT1_WALL_TYPE_SMALL_GREY_CASTLE,
RCT1_WALL_TYPE_ROMAN_COLUMN, // RCT1_WALL_TYPE_ROMAN_COLUMN,
RCT1_WALL_TYPE_LARGE_BROWN_CASTLE, // RCT1_WALL_TYPE_LARGE_BROWN_CASTLE,
RCT1_WALL_TYPE_LARGE_BROWN_CASTLE_CROSS, // RCT1_WALL_TYPE_LARGE_BROWN_CASTLE_CROSS,
RCT1_WALL_TYPE_LARGE_BROWN_CASTLE_GATE, // RCT1_WALL_TYPE_LARGE_BROWN_CASTLE_GATE,
RCT1_WALL_TYPE_LARGE_BROWN_CASTLE_WINDOW, // RCT1_WALL_TYPE_LARGE_BROWN_CASTLE_WINDOW,
RCT1_WALL_TYPE_MEDIUM_BROWN_CASTLE, // RCT1_WALL_TYPE_MEDIUM_BROWN_CASTLE,
RCT1_WALL_TYPE_LARGE_GREY_CASTLE, // RCT1_WALL_TYPE_LARGE_GREY_CASTLE,
RCT1_WALL_TYPE_LARGE_GREY_CASTLE_CROSS, // RCT1_WALL_TYPE_LARGE_GREY_CASTLE_CROSS,
RCT1_WALL_TYPE_LARGE_GREY_CASTLE_GATE, // RCT1_WALL_TYPE_LARGE_GREY_CASTLE_GATE,
RCT1_WALL_TYPE_LARGE_GREY_CASTLE_WINDOW, // RCT1_WALL_TYPE_LARGE_GREY_CASTLE_WINDOW,
RCT1_WALL_TYPE_MEDIUM_GREY_CASTLE, // RCT1_WALL_TYPE_MEDIUM_GREY_CASTLE,
RCT1_WALL_TYPE_CREEPY, // RCT1_WALL_TYPE_CREEPY,
RCT1_WALL_TYPE_CREEPY_GATE, // RCT1_WALL_TYPE_CREEPY_GATE,
RCT1_WALL_TYPE_BARBED_WIRE_WITH_SNOW, // RCT1_WALL_TYPE_BARBED_WIRE_WITH_SNOW,
RCT1_WALL_TYPE_WOODEN_PANEL_FENCE_WITH_SNOW, // RCT1_WALL_TYPE_WOODEN_PANEL_FENCE_WITH_SNOW,
RCT1_WALL_TYPE_WOODEN_POST_FENCE_WITH_SNOW, // RCT1_WALL_TYPE_WOODEN_POST_FENCE_WITH_SNOW,
};
if (wallType < std::size(map))
return map[wallType];
return -1;
}
std::string_view GetWallObject(uint8_t wallType)
{
static constexpr const char * map[] =

View File

@@ -38,6 +38,10 @@ namespace RCT1
std::string_view GetVehicleObject(uint8_t vehicleType);
std::string_view GetSmallSceneryObject(uint8_t smallSceneryType);
std::string_view GetLargeSceneryObject(uint8_t largeSceneryType);
/**
* Most sloped gates look like their ungated counterpart. This function maps these gates.
*/
int32_t MapSlopedWall(uint8_t wallType);
std::string_view GetWallObject(uint8_t wallType);
std::string_view GetPathSurfaceObject(uint8_t pathType);
std::string_view GetPathAddtionObject(uint8_t pathAdditionType);

View File

@@ -13,6 +13,7 @@
#include "../localisation/Formatting.h"
#include "../localisation/Localisation.h"
#include "../object/ObjectList.h"
#include "../rct1/Tables.h"
#include "../rct2/RCT2.h"
#include "../ride/Ride.h"
#include "../ride/Track.h"
@@ -407,7 +408,14 @@ int32_t RCT12WallElement::GetRCT1WallType(int32_t edge) const
if (typeB != 0x0F)
{
return typeA | (typeB << 2);
int32_t index = typeA | (typeB << 2);
auto slope = GetRCT1Slope();
auto edgeSlope = GetWallSlopeFromEdgeSlope(slope, edge & 3);
if (edgeSlope & (EDGE_SLOPE_UPWARDS | EDGE_SLOPE_DOWNWARDS))
index = RCT1::MapSlopedWall(index);
return index;
}
return -1;