7#include <yaml-cpp/yaml.h>
12enum class RomhackKind {
21constexpr uint32_t GAMECONFIG_MAGIC = 0x46434B42;
22constexpr uint16_t GAMECONFIG_VERSION = 1;
24constexpr const char* GAMECONFIG_MODDING_NAME =
"assets/aGameConfig";
26enum class ConfigSectionType : uint16_t {
36 WARP_DESTINATIONS = 10,
39 CUSTOM_CODE_INFO = 13,
42enum class CustomCodeKind : uint16_t {
49enum class CodeConstantKey : uint16_t {
60 RED_FEATHERS_NORMAL_MAX,
61 GOLD_FEATHERS_NORMAL_MAX,
63 RED_FEATHERS_CHEATO_MAX,
64 GOLD_FEATHERS_CHEATO_MAX,
69 WARP_EXIT_BANJOS_HOUSE,
73 HIDE_COLLECTIBLES_LEVEL,
78inline bool IsRomhack(
const std::vector<uint8_t>& rom) {
79 return rom.size() > 0x1000000;
140 std::vector<Constant> constants;
141 std::vector<WorldMap> worldByMap;
142 std::vector<LairReturn> returnToLair;
143 std::vector<Music> music;
144 std::vector<Sky> skybox;
145 std::vector<LevelModels> levelModels;
146 std::vector<Title> titles;
147 std::vector<Warp> warps;
148 std::vector<NoteDoor> noteDoors;
149 std::vector<Puzzle> puzzles;
150 bool hasCustomCode =
false;
151 uint32_t customCodeRamBase = 0;
152 uint8_t customCodeSha1[20] = {};
153 CustomCodeKind customCodeKind = CustomCodeKind::NONE;
154 bool hasRomHash =
false;
155 uint8_t romHash[20] = {};
158bool ReadGameConfig(
const std::vector<char>& blob,
GameConfigData& out, std::string& error);
161bool GameConfigFromYaml(
const std::string& text,
GameConfigData& out, std::string& error);
162const char* CodeConstantName(uint16_t key);
164RomhackKind ClassifyRomhack(
const std::vector<uint8_t>& rom);
167bool TrySynthesizeRomConfig(YAML::Node& config,
const std::string& cartHash,
const std::filesystem::path& romPath,
168 const std::vector<uint8_t>& rom);
171std::vector<char> BuildGameConfigBlob(
const std::vector<uint8_t>& rom,
const std::string& romName);
174bool HasCustomCodeBlob(
const std::vector<uint8_t>& rom);
180bool GetCustomCodeBlobInfo(
const std::vector<uint8_t>& rom, CustomCodeKind& outKind,
char outSha1Hex[41]);
183void EmitAssetHashes(
const std::filesystem::path& romPath,
const std::filesystem::path& outputPath);
188size_t CountModifiedSlots(
const std::vector<uint8_t>& rom,
const std::filesystem::path& hashesYamlPath);
192const std::string& GetBaselineAssetHash(uint32_t assetId);
197int GetVanillaWarpDest(uint32_t warpIndex);
Definition ConfigFactory.h:85
Definition ConfigFactory.h:93
Definition ConfigFactory.h:112
Definition ConfigFactory.h:98
Definition ConfigFactory.h:128
Definition ConfigFactory.h:132
Definition ConfigFactory.h:103
Definition ConfigFactory.h:108
Definition ConfigFactory.h:120
Definition ConfigFactory.h:124
Definition ConfigFactory.h:89
Definition ConfigFactory.h:84