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

Rename RCTG1Header and its fields

This commit is contained in:
Gymnasiast
2025-12-27 15:17:49 +01:00
parent 7236631db5
commit 16a0e7727e
11 changed files with 66 additions and 67 deletions

View File

@@ -53,8 +53,8 @@ namespace OpenRCT2::CommandLine::Sprite
// keep sprite file entirely in memory until ready to write out a complete,
// correct file
SpriteFile spriteFile;
spriteFile.Header.num_entries = 0;
spriteFile.Header.total_size = 0;
spriteFile.Header.numEntries = 0;
spriteFile.Header.totalSize = 0;
fprintf(stdout, "Building: %s\n", spriteFilePath);

View File

@@ -34,12 +34,12 @@ namespace OpenRCT2::CommandLine::Sprite
uint32_t numEntries = fileHeaderSize / sizeof(RCTG1Element);
RCTG1Header header = {};
header.num_entries = numEntries;
header.total_size = fileDataSize;
G1Header header = {};
header.numEntries = numEntries;
header.totalSize = fileDataSize;
FileStream outputStream(outputPath, FileMode::write);
outputStream.Write(&header, sizeof(RCTG1Header));
outputStream.Write(&header, sizeof(G1Header));
auto g1Elements32 = std::make_unique<RCTG1Element[]>(numEntries);
fileHeader.Read(g1Elements32.get(), numEntries * sizeof(RCTG1Element));
for (uint32_t i = 0; i < numEntries; i++)

View File

@@ -35,8 +35,8 @@ namespace OpenRCT2::CommandLine::Sprite
return -1;
}
printf("sprites: %u\n", spriteFile->Header.num_entries);
printf("data size: %u\n", spriteFile->Header.total_size);
printf("sprites: %u\n", spriteFile->Header.numEntries);
printf("data size: %u\n", spriteFile->Header.totalSize);
return 0;
}
@@ -49,7 +49,7 @@ namespace OpenRCT2::CommandLine::Sprite
return -1;
}
if (spriteIndex < 0 || spriteIndex >= static_cast<int32_t>(spriteFile->Header.num_entries))
if (spriteIndex < 0 || spriteIndex >= static_cast<int32_t>(spriteFile->Header.numEntries))
{
fprintf(stderr, "Sprite #%d does not exist in sprite file.\n", spriteIndex);
return -1;

View File

@@ -35,7 +35,7 @@ namespace OpenRCT2::CommandLine::Sprite
return -1;
}
if (spriteIndex < 0 || spriteIndex >= static_cast<int32_t>(spriteFile->Header.num_entries))
if (spriteIndex < 0 || spriteIndex >= static_cast<int32_t>(spriteFile->Header.numEntries))
{
fprintf(stderr, "Sprite #%d does not exist in sprite file.\n", spriteIndex);
return -1;

View File

@@ -46,7 +46,7 @@ namespace OpenRCT2::CommandLine::Sprite
return -1;
}
const uint32_t maxIndex = spriteFile->Header.num_entries;
const uint32_t maxIndex = spriteFile->Header.numEntries;
const int32_t numbers = static_cast<int32_t>(std::floor(std::log10(maxIndex) + 1));
std::ostringstream oss; // TODO: Remove when C++20 is enabled and std::format can be used

View File

@@ -20,13 +20,13 @@ namespace OpenRCT2::CommandLine::Sprite
FileStream stream(path, FileMode::open);
SpriteFile spriteFile;
stream.Read(&spriteFile.Header, sizeof(RCTG1Header));
stream.Read(&spriteFile.Header, sizeof(G1Header));
if (spriteFile.Header.num_entries > 0)
if (spriteFile.Header.numEntries > 0)
{
spriteFile.Entries.reserve(spriteFile.Header.num_entries);
spriteFile.Entries.reserve(spriteFile.Header.numEntries);
for (uint32_t i = 0; i < spriteFile.Header.num_entries; ++i)
for (uint32_t i = 0; i < spriteFile.Header.numEntries; ++i)
{
RCTG1Element entry32bit{};
stream.Read(&entry32bit, sizeof(entry32bit));
@@ -41,8 +41,8 @@ namespace OpenRCT2::CommandLine::Sprite
entry.zoomedOffset = entry32bit.zoomed_offset;
spriteFile.Entries.push_back(std::move(entry));
}
spriteFile.Data.resize(spriteFile.Header.total_size);
stream.Read(spriteFile.Data.data(), spriteFile.Header.total_size);
spriteFile.Data.resize(spriteFile.Header.totalSize);
stream.Read(spriteFile.Data.data(), spriteFile.Header.totalSize);
}
spriteFile.MakeEntriesAbsolute();
return spriteFile;
@@ -75,15 +75,15 @@ namespace OpenRCT2::CommandLine::Sprite
void SpriteFile::AddImage(ImageImporter::ImportResult& image)
{
Header.num_entries++;
Header.numEntries++;
// New image will have its data inserted after previous image
uint8_t* newElementOffset = reinterpret_cast<uint8_t*>(static_cast<uintptr_t>(Header.total_size));
Header.total_size += static_cast<uint32_t>(image.Buffer.size());
Entries.reserve(Header.num_entries);
uint8_t* newElementOffset = reinterpret_cast<uint8_t*>(static_cast<uintptr_t>(Header.totalSize));
Header.totalSize += static_cast<uint32_t>(image.Buffer.size());
Entries.reserve(Header.numEntries);
{
ScopedRelativeSpriteFile scopedRelative(*this);
Data.reserve(Header.total_size);
Data.reserve(Header.totalSize);
Entries.push_back(image.Element);
Entries.back().offset = newElementOffset;
const auto& buffer = image.Buffer;
@@ -96,9 +96,9 @@ namespace OpenRCT2::CommandLine::Sprite
try
{
FileStream stream(path, FileMode::write);
stream.Write(&Header, sizeof(RCTG1Header));
stream.Write(&Header, sizeof(G1Header));
if (Header.num_entries > 0)
if (Header.numEntries > 0)
{
ScopedRelativeSpriteFile scopedRelative(*this);
@@ -116,7 +116,7 @@ namespace OpenRCT2::CommandLine::Sprite
stream.Write(&entry32bit, sizeof(entry32bit));
}
stream.Write(Data.data(), Header.total_size);
stream.Write(Data.data(), Header.totalSize);
}
return true;
}

View File

@@ -19,7 +19,7 @@ namespace OpenRCT2::CommandLine::Sprite
class SpriteFile
{
public:
RCTG1Header Header{};
G1Header Header{};
std::vector<G1Element> Entries;
std::vector<uint8_t> Data;
void AddImage(ImageImporter::ImportResult& image);

View File

@@ -455,25 +455,25 @@ bool GfxLoadG1(const IPlatformEnvironment& env)
{
auto path = env.FindFile(DirBase::rct2, DirId::data, u8"g1.dat");
auto fs = FileStream(path, FileMode::open);
_g1.header = fs.ReadValue<RCTG1Header>();
_g1.header = fs.ReadValue<G1Header>();
LOG_VERBOSE("g1.dat, number of entries: %u", _g1.header.num_entries);
LOG_VERBOSE("g1.dat, number of entries: %u", _g1.header.numEntries);
if (_g1.header.num_entries < SPR_G1_END)
if (_g1.header.numEntries < SPR_G1_END)
{
throw std::runtime_error("Not enough elements in g1.dat");
}
// Read element headers
bool is_rctc = _g1.header.num_entries == SPR_RCTC_G1_END;
_g1.elements.resize(_g1.header.num_entries);
ReadAndConvertGxDat(&fs, _g1.header.num_entries, is_rctc, _g1.elements.data());
bool is_rctc = _g1.header.numEntries == SPR_RCTC_G1_END;
_g1.elements.resize(_g1.header.numEntries);
ReadAndConvertGxDat(&fs, _g1.header.numEntries, is_rctc, _g1.elements.data());
// Read element data
_g1.data = fs.ReadArray<uint8_t>(_g1.header.total_size);
_g1.data = fs.ReadArray<uint8_t>(_g1.header.totalSize);
// Fix entry data offsets
for (uint32_t i = 0; i < _g1.header.num_entries; i++)
for (uint32_t i = 0; i < _g1.header.numEntries; i++)
{
if (_g1.elements[i].offset == nullptr)
{
@@ -539,19 +539,19 @@ static bool GfxLoadOpenRCT2Gx(std::string filename, Gx& target, size_t expectedN
try
{
auto fs = FileStream(path, FileMode::open);
target.header = fs.ReadValue<RCTG1Header>();
target.header = fs.ReadValue<G1Header>();
// Read element headers
target.elements.resize(target.header.num_entries);
ReadAndConvertGxDat(&fs, target.header.num_entries, false, target.elements.data());
target.elements.resize(target.header.numEntries);
ReadAndConvertGxDat(&fs, target.header.numEntries, false, target.elements.data());
// Read element data
target.data = fs.ReadArray<uint8_t>(target.header.total_size);
target.data = fs.ReadArray<uint8_t>(target.header.totalSize);
if (target.header.num_entries != expectedNumItems)
if (target.header.numEntries != expectedNumItems)
{
std::string errorMessage = "Mismatched " + filename + " size.\nExpected: " + std::to_string(expectedNumItems)
+ "\nActual: " + std::to_string(target.header.num_entries) + "\n" + filename
+ "\nActual: " + std::to_string(target.header.numEntries) + "\n" + filename
+ " may be installed improperly.\nPath to " + filename + ": " + path;
LOG_ERROR(errorMessage.c_str());
@@ -568,7 +568,7 @@ static bool GfxLoadOpenRCT2Gx(std::string filename, Gx& target, size_t expectedN
}
// Fix entry data offsets
for (uint32_t i = 0; i < target.header.num_entries; i++)
for (uint32_t i = 0; i < target.header.numEntries; i++)
{
if (target.elements[i].offset == nullptr)
{
@@ -622,8 +622,8 @@ bool GfxLoadCsg()
size_t fileHeaderSize = fileHeader.GetLength();
size_t fileDataSize = fileData.GetLength();
_csg.header.num_entries = static_cast<uint32_t>(fileHeaderSize / sizeof(RCTG1Element));
_csg.header.total_size = static_cast<uint32_t>(fileDataSize);
_csg.header.numEntries = static_cast<uint32_t>(fileHeaderSize / sizeof(RCTG1Element));
_csg.header.totalSize = static_cast<uint32_t>(fileDataSize);
if (!CsgIsUsable(_csg))
{
@@ -632,14 +632,14 @@ bool GfxLoadCsg()
}
// Read element headers
_csg.elements.resize(_csg.header.num_entries);
ReadAndConvertGxDat(&fileHeader, _csg.header.num_entries, false, _csg.elements.data());
_csg.elements.resize(_csg.header.numEntries);
ReadAndConvertGxDat(&fileHeader, _csg.header.numEntries, false, _csg.elements.data());
// Read element data
_csg.data = fileData.ReadArray<uint8_t>(_csg.header.total_size);
_csg.data = fileData.ReadArray<uint8_t>(_csg.header.totalSize);
// Fix entry data offsets
for (uint32_t i = 0; i < _csg.header.num_entries; i++)
for (uint32_t i = 0; i < _csg.header.numEntries; i++)
{
if (_csg.elements[i].offset == nullptr)
{
@@ -675,14 +675,14 @@ std::optional<Gx> GfxLoadGx(const std::vector<uint8_t>& buffer)
OpenRCT2::MemoryStream istream(buffer.data(), buffer.size());
Gx gx;
gx.header = istream.ReadValue<RCTG1Header>();
gx.header = istream.ReadValue<G1Header>();
// Read element headers
gx.elements.resize(gx.header.num_entries);
ReadAndConvertGxDat(&istream, gx.header.num_entries, false, gx.elements.data());
gx.elements.resize(gx.header.numEntries);
ReadAndConvertGxDat(&istream, gx.header.numEntries, false, gx.elements.data());
// Read element data
gx.data = istream.ReadArray<uint8_t>(gx.header.total_size);
gx.data = istream.ReadArray<uint8_t>(gx.header.totalSize);
return std::make_optional(std::move(gx));
}
@@ -1046,7 +1046,7 @@ const G1Element* GfxGetG1Element(ImageIndex image_id)
else if (offset < SPR_G2_END)
{
size_t idx = offset - SPR_G2_BEGIN;
if (idx < _g2.header.num_entries)
if (idx < _g2.header.numEntries)
{
return &_g2.elements[idx];
}
@@ -1056,7 +1056,7 @@ const G1Element* GfxGetG1Element(ImageIndex image_id)
else if (offset < SPR_FONTS_END)
{
size_t idx = offset - SPR_FONTS_BEGIN;
if (idx < _fonts.header.num_entries)
if (idx < _fonts.header.numEntries)
{
return &_fonts.elements[idx];
}
@@ -1066,7 +1066,7 @@ const G1Element* GfxGetG1Element(ImageIndex image_id)
else if (offset < SPR_TRACKS_END)
{
size_t idx = offset - SPR_TRACKS_BEGIN;
if (idx < _tracks.header.num_entries)
if (idx < _tracks.header.numEntries)
{
return &_tracks.elements[idx];
}
@@ -1078,7 +1078,7 @@ const G1Element* GfxGetG1Element(ImageIndex image_id)
if (IsCsgLoaded())
{
size_t idx = offset - SPR_CSG_BEGIN;
if (idx < _csg.header.num_entries)
if (idx < _csg.header.numEntries)
{
return &_csg.elements[idx];
}

View File

@@ -77,17 +77,17 @@ struct G1Element
};
#pragma pack(push, 1)
struct RCTG1Header
struct G1Header
{
uint32_t num_entries = 0;
uint32_t total_size = 0;
uint32_t numEntries = 0;
uint32_t totalSize = 0;
};
static_assert(sizeof(RCTG1Header) == 8);
static_assert(sizeof(G1Header) == 8);
#pragma pack(pop)
struct Gx
{
RCTG1Header header;
G1Header header;
std::vector<G1Element> elements;
std::unique_ptr<uint8_t[]> data;
};

View File

@@ -231,7 +231,7 @@ namespace OpenRCT2
if (gxData.has_value())
{
// Fix entry data offsets
for (uint32_t i = 0; i < gxData->header.num_entries; i++)
for (uint32_t i = 0; i < gxData->header.numEntries; i++)
{
if (gxData->elements[i].offset == nullptr)
{
@@ -248,7 +248,7 @@ namespace OpenRCT2
size_t placeHoldersAdded = 0;
for (auto i : range)
{
if (i >= 0 && (i < static_cast<int32_t>(gxData->header.num_entries)))
if (i >= 0 && (i < static_cast<int32_t>(gxData->header.numEntries)))
{
result.push_back(std::make_unique<RequiredImage>(gxData->elements[i]));
}
@@ -268,7 +268,7 @@ namespace OpenRCT2
}
else
{
for (int i = 0; i < static_cast<int32_t>(gxData->header.num_entries); i++)
for (int i = 0; i < static_cast<int32_t>(gxData->header.numEntries); i++)
result.push_back(std::make_unique<RequiredImage>(gxData->elements[i]));
}
}

View File

@@ -62,8 +62,7 @@ bool RCT1DataPresentAtLocation(u8string_view path)
bool CsgIsUsable(const Gx& csg)
{
return csg.header.total_size == RCT1::Limits::kLLCsg1DatFileSize
&& csg.header.num_entries == RCT1::Limits::kNumLLCsgEntries;
return csg.header.totalSize == RCT1::Limits::kLLCsg1DatFileSize && csg.header.numEntries == RCT1::Limits::kNumLLCsgEntries;
}
bool CsgAtLocationIsUsable(u8string_view path)
@@ -86,7 +85,7 @@ bool CsgAtLocationIsUsable(u8string_view path)
size_t fileDataSize = fileData.GetLength();
Gx csg = {};
csg.header.num_entries = static_cast<uint32_t>(fileHeaderSize / sizeof(RCTG1Element));
csg.header.total_size = static_cast<uint32_t>(fileDataSize);
csg.header.numEntries = static_cast<uint32_t>(fileHeaderSize / sizeof(RCTG1Element));
csg.header.totalSize = static_cast<uint32_t>(fileDataSize);
return CsgIsUsable(csg);
}