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