1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
#pragma once
#include "factories/BaseFactory.h"
#include "Companion.h"
#include "utils/Decompressor.h"
#include <sstream>
#include <iomanip>
#include <set>
namespace OoT {
// Cutscene field packing macros (matching OTRExporter's command_macros_base.h)
inline uint32_t CS_CMD_HH(uint16_t a, uint16_t b) { return ((uint32_t)b << 16) | (uint32_t)a; }
inline uint32_t CS_CMD_BBH(int8_t a, int8_t b, int16_t c) {
return ((uint32_t)(uint8_t)a) | ((uint32_t)(uint8_t)b << 8) | ((uint32_t)(uint16_t)c << 16);
}
inline uint32_t CS_CMD_HBB(uint16_t a, uint8_t b, uint8_t c) {
return (uint32_t)a | ((uint32_t)b << 16) | ((uint32_t)c << 24);
}
// Helper to read a sub-array from ROM given a segmented pointer
LUS::BinaryReader ReadSubArray(std::vector<uint8_t>& buffer, uint32_t segAddr, uint32_t size);
// Resolve a segmented pointer to an O2R asset path string
std::string ResolvePointer(uint32_t ptr);
// Build a scene-relative asset name from offset
std::string MakeAssetName(const std::string& baseName, const std::string& suffix, uint32_t offset);
// Serialize pathway data into OoTPath binary format.
std::vector<char> SerializePathways(std::vector<uint8_t>& buffer,
const std::vector<std::pair<uint8_t, uint32_t>>& pathways,
uint32_t writeCount, uint32_t repeats);
class CutsceneSerializer {
public:
static std::vector<char> Serialize(std::vector<uint8_t>& buffer, uint32_t segAddr);
private:
static uint32_t CalculateSize(std::vector<uint8_t>& buffer, uint32_t segAddr);
static std::vector<char> Write(std::vector<uint8_t>& buffer, uint32_t segAddr, uint32_t size);
static void WriteCameraCmd(LUS::BinaryReader& reader, LUS::BinaryWriter& w);
static void WriteSingleEntryCmd(LUS::BinaryReader& reader, LUS::BinaryWriter& w);
static void WriteEntryCountCmd(uint32_t cid, LUS::BinaryReader& reader, LUS::BinaryWriter& w);
static bool IsCameraCmd(uint32_t id);
static bool IsSingleEntryCmd(uint32_t id);
static bool IsSmallEntryCmd(uint32_t id);
static bool IsHandledCmd(uint32_t id);
static const std::set<uint32_t> sUnimplementedCmds;
};
} // namespace OoT
|