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:
@@ -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);
|
||||
|
||||
|
||||
@@ -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++)
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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];
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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]));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user