1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-15 19:13:07 +01:00

Split of Needs supports changes from OpenRCT2/OpenRCT2#19446 (#19759)

This commit is contained in:
Duncan
2023-04-04 08:52:07 +01:00
committed by GitHub
parent a794c982ba
commit c0bd64f778
9 changed files with 46 additions and 30 deletions

View File

@@ -43,7 +43,7 @@
// It is used for making sure only compatible builds get connected, even within
// single OpenRCT2 version.
#define NETWORK_STREAM_VERSION "3"
#define NETWORK_STREAM_VERSION "4"
#define NETWORK_STREAM_ID OPENRCT2_VERSION "-" NETWORK_STREAM_VERSION

View File

@@ -1099,6 +1099,22 @@ namespace OpenRCT2
it.element->SetInvisible(true);
}
}
else if (
it.element->GetType() == TileElementType::SmallScenery && os.GetHeader().TargetVersion < 22)
{
auto* sceneryElement = it.element->AsSmallScenery();
// Previous formats stored the needs supports flag in the primary colour
// We have moved it into a flags field to support extended colour sets
bool needsSupports = sceneryElement->GetPrimaryColour()
& RCT12_SMALL_SCENERY_ELEMENT_NEEDS_SUPPORTS_FLAG;
if (needsSupports)
{
sceneryElement->SetPrimaryColour(
sceneryElement->GetPrimaryColour()
& ~RCT12_SMALL_SCENERY_ELEMENT_NEEDS_SUPPORTS_FLAG);
sceneryElement->SetNeedsSupports();
}
}
}
}
ParkEntranceUpdateLocations();

View File

@@ -9,10 +9,10 @@ struct ObjectRepositoryItem;
namespace OpenRCT2
{
// Current version that is saved.
constexpr uint32_t PARK_FILE_CURRENT_VERSION = 21;
constexpr uint32_t PARK_FILE_CURRENT_VERSION = 22;
// The minimum version that is forwards compatible with the current version.
constexpr uint32_t PARK_FILE_MIN_VERSION = 21;
constexpr uint32_t PARK_FILE_MIN_VERSION = 22;
// 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!

View File

@@ -311,17 +311,17 @@ uint8_t RCT12SmallSceneryElement::GetSceneryQuadrant() const
colour_t RCT12SmallSceneryElement::GetPrimaryColour() const
{
return Colour1 & TILE_ELEMENT_COLOUR_MASK;
return Colour1 & RCT12_TILE_ELEMENT_COLOUR_MASK;
}
colour_t RCT12SmallSceneryElement::GetSecondaryColour() const
{
return Colour2 & TILE_ELEMENT_COLOUR_MASK;
return Colour2 & RCT12_TILE_ELEMENT_COLOUR_MASK;
}
bool RCT12SmallSceneryElement::NeedsSupports() const
{
return Colour1 & MAP_ELEM_SMALL_SCENERY_COLOUR_FLAG_NEEDS_SUPPORTS;
return Colour1 & RCT12_SMALL_SCENERY_ELEMENT_NEEDS_SUPPORTS_FLAG;
}
uint32_t RCT12LargeSceneryElement::GetEntryIndex() const
@@ -335,17 +335,18 @@ uint16_t RCT12LargeSceneryElement::GetSequenceIndex() const
}
colour_t RCT12LargeSceneryElement::GetPrimaryColour() const
{
return Colour[0] & TILE_ELEMENT_COLOUR_MASK;
return Colour[0] & RCT12_TILE_ELEMENT_COLOUR_MASK;
}
colour_t RCT12LargeSceneryElement::GetSecondaryColour() const
{
return Colour[1] & TILE_ELEMENT_COLOUR_MASK;
return Colour[1] & RCT12_TILE_ELEMENT_COLOUR_MASK;
}
uint8_t RCT12LargeSceneryElement::GetBannerIndex() const
{
return (Type & 0xC0) | (((Colour[0]) & ~TILE_ELEMENT_COLOUR_MASK) >> 2) | (((Colour[1]) & ~TILE_ELEMENT_COLOUR_MASK) >> 5);
return (Type & 0xC0) | (((Colour[0]) & ~RCT12_TILE_ELEMENT_COLOUR_MASK) >> 2)
| (((Colour[1]) & ~RCT12_TILE_ELEMENT_COLOUR_MASK) >> 5);
}
uint8_t RCT12WallElement::GetEntryIndex() const
@@ -360,19 +361,19 @@ uint8_t RCT12WallElement::GetSlope() const
colour_t RCT12WallElement::GetPrimaryColour() const
{
return Colour1 & TILE_ELEMENT_COLOUR_MASK;
return Colour1 & RCT12_TILE_ELEMENT_COLOUR_MASK;
}
colour_t RCT12WallElement::GetSecondaryColour() const
{
uint8_t secondaryColour = (Colour1 & ~TILE_ELEMENT_COLOUR_MASK) >> 5;
uint8_t secondaryColour = (Colour1 & ~RCT12_TILE_ELEMENT_COLOUR_MASK) >> 5;
secondaryColour |= (Flags & 0x60) >> 2;
return secondaryColour;
}
colour_t RCT12WallElement::GetTertiaryColour() const
{
return Colour3 & TILE_ELEMENT_COLOUR_MASK;
return Colour3 & RCT12_TILE_ELEMENT_COLOUR_MASK;
}
uint8_t RCT12WallElement::GetAnimationFrame() const

View File

@@ -47,6 +47,9 @@ constexpr const uint8_t RCT12_TILE_ELEMENT_SURFACE_EDGE_STYLE_MASK = 0xE0; //
constexpr const uint8_t RCT12_TILE_ELEMENT_SURFACE_WATER_HEIGHT_MASK = 0x1F; // in RCT12TileElement.properties.surface.terrain
constexpr const uint8_t RCT12_TILE_ELEMENT_SURFACE_TERRAIN_MASK = 0xE0; // in RCT12TileElement.properties.surface.terrain
constexpr const uint8_t RCT12_SMALL_SCENERY_ELEMENT_NEEDS_SUPPORTS_FLAG = 0x20;
constexpr const uint8_t RCT12_TILE_ELEMENT_COLOUR_MASK = 0b0001'1111;
constexpr const uint16_t RCT12_TILE_ELEMENT_LARGE_TYPE_MASK = 0x3FF;
constexpr uint16_t const RCT12_XY8_UNDEFINED = 0xFFFF;

View File

@@ -34,19 +34,19 @@ colour_t LargeSceneryElement::GetTertiaryColour() const
void LargeSceneryElement::SetPrimaryColour(colour_t newColour)
{
assert(newColour <= 31);
assert(newColour < COLOUR_COUNT);
Colour[0] = newColour;
}
void LargeSceneryElement::SetSecondaryColour(colour_t newColour)
{
assert(newColour <= 31);
assert(newColour < COLOUR_COUNT);
Colour[1] = newColour;
}
void LargeSceneryElement::SetTertiaryColour(colour_t newColour)
{
assert(newColour <= 31);
assert(newColour < COLOUR_COUNT);
Colour[2] = newColour;
}

View File

@@ -81,48 +81,45 @@ void SmallSceneryElement::IncreaseAge(const CoordsXY& sceneryPos)
colour_t SmallSceneryElement::GetPrimaryColour() const
{
return Colour[0] & TILE_ELEMENT_COLOUR_MASK;
return Colour[0];
}
colour_t SmallSceneryElement::GetSecondaryColour() const
{
return Colour[1] & TILE_ELEMENT_COLOUR_MASK;
return Colour[1];
}
colour_t SmallSceneryElement::GetTertiaryColour() const
{
return Colour[2] & TILE_ELEMENT_COLOUR_MASK;
return Colour[2];
}
void SmallSceneryElement::SetPrimaryColour(colour_t newColour)
{
assert(newColour <= 31);
Colour[0] &= ~TILE_ELEMENT_COLOUR_MASK;
assert(newColour < COLOUR_COUNT);
Colour[0] |= newColour;
}
void SmallSceneryElement::SetSecondaryColour(colour_t newColour)
{
assert(newColour <= 31);
Colour[1] &= ~TILE_ELEMENT_COLOUR_MASK;
assert(newColour < COLOUR_COUNT);
Colour[1] |= newColour;
}
void SmallSceneryElement::SetTertiaryColour(colour_t newColour)
{
assert(newColour <= 31);
Colour[2] &= ~TILE_ELEMENT_COLOUR_MASK;
assert(newColour < COLOUR_COUNT);
Colour[2] |= newColour;
}
bool SmallSceneryElement::NeedsSupports() const
{
return static_cast<bool>(Colour[0] & MAP_ELEM_SMALL_SCENERY_COLOUR_FLAG_NEEDS_SUPPORTS);
return static_cast<bool>(Flags2 & MAP_ELEM_SMALL_SCENERY_FLAGS2_NEEDS_SUPPORTS);
}
void SmallSceneryElement::SetNeedsSupports()
{
Colour[0] |= MAP_ELEM_SMALL_SCENERY_COLOUR_FLAG_NEEDS_SUPPORTS;
Flags2 |= MAP_ELEM_SMALL_SCENERY_FLAGS2_NEEDS_SUPPORTS;
}
const SmallSceneryEntry* SmallSceneryElement::GetEntry() const

View File

@@ -11,5 +11,5 @@
enum
{
MAP_ELEM_SMALL_SCENERY_COLOUR_FLAG_NEEDS_SUPPORTS = (1 << 5),
MAP_ELEM_SMALL_SCENERY_FLAGS2_NEEDS_SUPPORTS = (1 << 0),
};

View File

@@ -434,9 +434,10 @@ private:
ObjectEntryIndex entryIndex; // 5
uint8_t age; // 7
uint8_t Colour[3]; // 8
uint8_t Flags2; // B
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-private-field"
uint8_t Pad0B[5];
uint8_t Pad0B[4];
#pragma clang diagnostic pop
public:
@@ -702,8 +703,6 @@ enum
#define TILE_ELEMENT_DIRECTION_MASK 0b00000011
#define TILE_ELEMENT_OCCUPIED_QUADRANTS_MASK 0b00001111
#define TILE_ELEMENT_COLOUR_MASK 0b00011111
enum
{
LANDSCAPE_DOOR_CLOSED = 0,