Torch
Loading...
Searching...
No Matches
GhostRecordFactory.h
1#pragma once
2
3#include <factories/BaseFactory.h>
4
5namespace FZX {
6
7typedef struct GhostMachineInfo {
8 /* 0x00 */ uint8_t character;
9 /* 0x01 */ uint8_t customType;
10 /* 0x02 */ uint8_t frontType;
11 /* 0x03 */ uint8_t rearType;
12 /* 0x04 */ uint8_t wingType;
13 /* 0x05 */ uint8_t logo;
14 /* 0x06 */ uint8_t number;
15 /* 0x07 */ uint8_t decal;
16 /* 0x08 */ uint8_t bodyR;
17 /* 0x09 */ uint8_t bodyG;
18 /* 0x0A */ uint8_t bodyB;
19 /* 0x0B */ uint8_t numberR;
20 /* 0x0C */ uint8_t numberG;
21 /* 0x0D */ uint8_t numberB;
22 /* 0x0E */ uint8_t decalR;
23 /* 0x0F */ uint8_t decalG;
24 /* 0x10 */ uint8_t decalB;
25 /* 0x11 */ uint8_t cockpitR;
26 /* 0x12 */ uint8_t cockpitG;
27 /* 0x13 */ uint8_t cockpitB;
29
30class GhostRecordData : public IParsedData {
31public:
32 // Records
33 uint16_t mRecordChecksum;
34 uint16_t mGhostType;
35 int32_t mReplayChecksum;
36 int32_t mCourseEncoding;
37 int32_t mRaceTime;
38 uint16_t mUnk10;
39 std::string mTrackName; // empty for normal tracks
40 GhostMachineInfo mGhostMachineInfo;
41
42 // Data
43 uint16_t mDataChecksum;
44 std::vector<int32_t> mLapTimes;
45 int32_t mReplayEnd;
46 uint32_t mReplaySize;
47 std::vector<int8_t> mReplayData;
48
49 GhostRecordData(uint16_t recordChecksum, uint16_t ghostType, int32_t replayChecksum, int32_t courseEncoding, int32_t raceTime, uint16_t unk_10, std::string trackName, GhostMachineInfo& ghostMachineInfo, uint16_t dataChecksum, std::vector<int32_t> lapTimes, int32_t replayEnd, uint32_t replaySize, std::vector<int8_t> replayData) :
50 mRecordChecksum(recordChecksum),
51 mGhostType(ghostType),
52 mReplayChecksum(replayChecksum),
53 mCourseEncoding(courseEncoding),
54 mRaceTime(raceTime),
55 mUnk10(unk_10),
56 mTrackName(trackName),
57 mGhostMachineInfo(ghostMachineInfo),
58 mDataChecksum(dataChecksum),
59 mLapTimes(std::move(lapTimes)),
60 mReplayEnd(replayEnd),
61 mReplaySize(replaySize),
62 mReplayData(std::move(replayData)) {}
63
64 uint16_t Save_CalculateChecksum(void* data, int32_t size);
65 uint16_t CalculateRecordChecksum(void);
66 uint16_t CalculateDataChecksum(void);
67 int32_t CalculateReplayChecksum(void);
68};
69
71 ExportResult Export(std::ostream& write, std::shared_ptr<IParsedData> data, std::string& entryName, YAML::Node& node, std::string* replacement) override;
72};
73
75 ExportResult Export(std::ostream& write, std::shared_ptr<IParsedData> data, std::string& entryName, YAML::Node& node, std::string* replacement) override;
76};
77
79 ExportResult Export(std::ostream& write, std::shared_ptr<IParsedData> data, std::string& entryName, YAML::Node& node, std::string* replacement) override;
80};
81
83 ExportResult Export(std::ostream& write, std::shared_ptr<IParsedData> data, std::string& entryName, YAML::Node& node, std::string* replacement) override;
84};
85
87public:
88 std::optional<std::shared_ptr<IParsedData>> parse(std::vector<uint8_t>& buffer, YAML::Node& data) override;
89 std::optional<std::shared_ptr<IParsedData>> parse_modding(std::vector<uint8_t>& buffer, YAML::Node& data) override;
90 inline std::unordered_map<ExportType, std::shared_ptr<BaseExporter>> GetExporters() override {
91 return {
92 REGISTER(Code, GhostRecordCodeExporter)
93 REGISTER(Header, GhostRecordHeaderExporter)
94 REGISTER(Binary, GhostRecordBinaryExporter)
95 REGISTER(Modding, GhostRecordModdingExporter)
96 };
97 }
98 bool SupportModdedAssets() override { return true; }
99};
100} // namespace FZX
Definition BaseFactory.h:88
Definition BaseFactory.h:94
Definition GhostRecordFactory.h:74
Definition GhostRecordFactory.h:78
Definition GhostRecordFactory.h:86
Definition GhostRecordFactory.h:70
Definition GhostRecordFactory.h:82
Definition BaseFactory.h:80
Definition GhostRecordFactory.h:7