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:
committed by
GitHub
parent
8dd5014bc4
commit
396af1f34c
@@ -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 designer’s quit prompt has the wrong text.
|
||||
|
||||
@@ -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[] =
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user