From 6262be5d2515757d5ed53f2d5efb3fdadbd255e3 Mon Sep 17 00:00:00 2001 From: Aaron Kimbrell Date: Mon, 26 Oct 2026 20:33:41 -0500 Subject: [PATCH] fix: name the fourth flair colour byte padding The client never sets or reads it, so it holds leftover memory. Co-Authored-By: Claude Opus 5.5 --- dZoneManager/Raw.cpp | 2 +- dZoneManager/Raw.h | 4 +++- tests/dGameTests/dZoneManagerTests/RawTests.cpp | 2 +- tests/dGameTests/dZoneManagerTests/TerrainTestWriter.h | 2 +- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/dZoneManager/Raw.cpp b/dZoneManager/Raw.cpp index bc97a583e..28e302d0d 100644 --- a/dZoneManager/Raw.cpp +++ b/dZoneManager/Raw.cpp @@ -69,7 +69,7 @@ NiPoint3 Chunk::GridToWorldPos(uint32_t i, uint32_t j) const { BinaryIO::BinaryRead(stream, flair.colorR); BinaryIO::BinaryRead(stream, flair.colorG); BinaryIO::BinaryRead(stream, flair.colorB); - BinaryIO::BinaryRead(stream, flair.colorA); + BinaryIO::BinaryRead(stream, flair.padding); return true; } catch (const std::exception&) { return false; diff --git a/dZoneManager/Raw.h b/dZoneManager/Raw.h index 33de6fa83..eb83d8a90 100644 --- a/dZoneManager/Raw.h +++ b/dZoneManager/Raw.h @@ -25,8 +25,10 @@ struct FlairAttributes { uint8_t colorR; uint8_t colorG; uint8_t colorB; - uint8_t colorA; + // Padding: never set when a flair is placed, so it holds leftover memory; nothing reads it + uint8_t padding; }; +static_assert(sizeof(FlairAttributes) == 36, "a flair record in the .raw is 36 bytes"); /** * @brief Mesh triangle structure diff --git a/tests/dGameTests/dZoneManagerTests/RawTests.cpp b/tests/dGameTests/dZoneManagerTests/RawTests.cpp index 52b381057..4050f0d4d 100644 --- a/tests/dGameTests/dZoneManagerTests/RawTests.cpp +++ b/tests/dGameTests/dZoneManagerTests/RawTests.cpp @@ -104,7 +104,7 @@ TEST_F(RawTest, ReadsEveryPartOfVersion32) { EXPECT_EQ(flair.colorR, 10); EXPECT_EQ(flair.colorG, 20); EXPECT_EQ(flair.colorB, 30); - EXPECT_EQ(flair.colorA, 40); + EXPECT_EQ(flair.padding, 40); EXPECT_TRUE(raw.chunks[2].flairs.empty()); EXPECT_EQ(chunk.vertSize, 4); diff --git a/tests/dGameTests/dZoneManagerTests/TerrainTestWriter.h b/tests/dGameTests/dZoneManagerTests/TerrainTestWriter.h index ac7c2d8a2..d9ea5a117 100644 --- a/tests/dGameTests/dZoneManagerTests/TerrainTestWriter.h +++ b/tests/dGameTests/dZoneManagerTests/TerrainTestWriter.h @@ -76,7 +76,7 @@ namespace TerrainTestWriter { WriteBytes(stream, chunk.blendMapSize); } - // Flair: id, scale, position, rotation, RGBA (36 bytes) + // Flair: id, scale, position, rotation, RGB, padding byte (36 bytes) Write(stream, chunk.flairCount); for (uint32_t i = 0; i < chunk.flairCount; ++i) { Write(stream, 500 + i);