7#include <yaml-cpp/yaml.h>
12enum class RomhackKind {
21constexpr uint32_t GAMECONFIG_MAGIC = 0x46434B42;
22constexpr uint16_t GAMECONFIG_VERSION = 1;
24enum class ConfigSectionType : uint16_t {
34 WARP_DESTINATIONS = 10,
37 CUSTOM_CODE_INFO = 13,
40enum class CustomCodeKind : uint16_t {
47enum class CodeConstantKey : uint16_t {
58 RED_FEATHERS_NORMAL_MAX,
59 GOLD_FEATHERS_NORMAL_MAX,
61 RED_FEATHERS_CHEATO_MAX,
62 GOLD_FEATHERS_CHEATO_MAX,
67 WARP_EXIT_BANJOS_HOUSE,
71 HIDE_COLLECTIBLES_LEVEL,
76inline bool IsRomhack(
const std::vector<uint8_t>& rom) {
77 return rom.size() > 0x1000000;
80RomhackKind ClassifyRomhack(
const std::vector<uint8_t>& rom);
83bool TrySynthesizeRomConfig(YAML::Node& config,
const std::string& cartHash,
const std::filesystem::path& romPath,
84 const std::vector<uint8_t>& rom);
87std::vector<char> BuildGameConfigBlob(
const std::vector<uint8_t>& rom,
const std::string& romName);
90bool HasCustomCodeBlob(
const std::vector<uint8_t>& rom);
96bool GetCustomCodeBlobInfo(
const std::vector<uint8_t>& rom, CustomCodeKind& outKind,
char outSha1Hex[41]);
99void EmitAssetHashes(
const std::filesystem::path& romPath,
const std::filesystem::path& outputPath);
104size_t CountModifiedSlots(
const std::vector<uint8_t>& rom,
const std::filesystem::path& hashesYamlPath);
108const std::string& GetBaselineAssetHash(uint32_t assetId);
113int GetVanillaWarpDest(uint32_t warpIndex);