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:
@@ -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
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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!
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -11,5 +11,5 @@
|
||||
|
||||
enum
|
||||
{
|
||||
MAP_ELEM_SMALL_SCENERY_COLOUR_FLAG_NEEDS_SUPPORTS = (1 << 5),
|
||||
MAP_ELEM_SMALL_SCENERY_FLAGS2_NEEDS_SUPPORTS = (1 << 0),
|
||||
};
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user