Add version to replay file.

This commit is contained in:
Matt 2018-12-30 00:03:20 +01:00
parent c7ab757a86
commit 19ffc6208f
1 changed files with 25 additions and 2 deletions

View File

@ -78,6 +78,9 @@ namespace OpenRCT2
struct ReplayRecordData struct ReplayRecordData
{ {
uint32_t magic;
uint16_t version;
std::string networkId;
MemoryStream parkData; MemoryStream parkData;
MemoryStream spriteSpatialData; MemoryStream spriteSpatialData;
MemoryStream parkParams; MemoryStream parkParams;
@ -92,6 +95,9 @@ namespace OpenRCT2
class ReplayManager final : public IReplayManager class ReplayManager final : public IReplayManager
{ {
static constexpr uint16_t ReplayVersion = 1;
static constexpr uint32_t ReplayMagic = 0x5243524F; // ORCR.
enum class ReplayMode enum class ReplayMode
{ {
NONE = 0, NONE = 0,
@ -230,6 +236,9 @@ namespace OpenRCT2
return false; return false;
auto replayData = std::make_unique<ReplayRecordData>(); auto replayData = std::make_unique<ReplayRecordData>();
replayData->magic = ReplayMagic;
replayData->version = ReplayVersion;
replayData->networkId = network_get_version();
replayData->name = name; replayData->name = name;
replayData->tickStart = gCurrentTicks; replayData->tickStart = gCurrentTicks;
if (maxTicks != k_MaxReplayTicks) if (maxTicks != k_MaxReplayTicks)
@ -268,6 +277,7 @@ namespace OpenRCT2
_currentRecording->tickEnd = gCurrentTicks; _currentRecording->tickEnd = gCurrentTicks;
// Serialise Body.
DataSerialiser serialiser(true); DataSerialiser serialiser(true);
Serialise(serialiser, *_currentRecording); Serialise(serialiser, *_currentRecording);
@ -282,9 +292,9 @@ namespace OpenRCT2
FILE* fp = fopen(outFile.c_str(), "wb"); FILE* fp = fopen(outFile.c_str(), "wb");
if (fp) if (fp)
{ {
auto& stream = serialiser.GetStream(); const auto& stream = serialiser.GetStream();
fwrite(stream.GetData(), 1, stream.GetLength(), fp); fwrite(stream.GetData(), 1, stream.GetLength(), fp);
fclose(fp); fclose(fp);
result = true; result = true;
@ -618,6 +628,19 @@ namespace OpenRCT2
bool Serialise(DataSerialiser& serialiser, ReplayRecordData& data) bool Serialise(DataSerialiser& serialiser, ReplayRecordData& data)
{ {
serialiser << data.magic;
if (data.magic != ReplayMagic)
{
log_error("Magic does not match %08X", data.magic);
return false;
}
serialiser << data.version;
if (data.version != ReplayVersion)
{
log_error("Invalid version detected %04X", data.version);
return false;
}
serialiser << data.networkId;
serialiser << data.name; serialiser << data.name;
serialiser << data.parkData; serialiser << data.parkData;
serialiser << data.parkParams; serialiser << data.parkParams;