mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2025-08-19 13:00:11 -07:00
prep for clang format (#5202)
This commit is contained in:
parent
0f1fb1e5de
commit
aabeffa254
76 changed files with 299 additions and 134 deletions
|
@ -462,7 +462,7 @@ static constexpr std::pair<u16, const char*> actorDescriptionData[] = {
|
||||||
{ ACTOR_EN_ZL4, "Zelda (Child)" },
|
{ ACTOR_EN_ZL4, "Zelda (Child)" },
|
||||||
{ ACTOR_EN_MM2, "Running Man (Adult Era)" },
|
{ ACTOR_EN_MM2, "Running Man (Adult Era)" },
|
||||||
{ ACTOR_BG_JYA_BLOCK, "Silver Block (Child Era)" },
|
{ ACTOR_BG_JYA_BLOCK, "Silver Block (Child Era)" },
|
||||||
{ ACTOR_OBJ_WARP2BLOCK, "Navi Infospot (Green, Time Block)" }
|
{ ACTOR_OBJ_WARP2BLOCK, "Navi Infospot (Green, Time Block)" },
|
||||||
};
|
};
|
||||||
static std::unordered_map<u16, const char*> actorDescriptions = std::unordered_map<u16, const char*>(std::begin(actorDescriptionData), std::end(actorDescriptionData));
|
static std::unordered_map<u16, const char*> actorDescriptions = std::unordered_map<u16, const char*>(std::begin(actorDescriptionData), std::end(actorDescriptionData));
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@ typedef enum TimerDisplay {
|
||||||
DISPLAY_IN_GAME_TIMER,
|
DISPLAY_IN_GAME_TIMER,
|
||||||
DISPLAY_TIME_OF_DAY,
|
DISPLAY_TIME_OF_DAY,
|
||||||
DISPLAY_CONDITIONAL_TIMER,
|
DISPLAY_CONDITIONAL_TIMER,
|
||||||
DISPLAY_NAVI_TIMER
|
DISPLAY_NAVI_TIMER,
|
||||||
} TimerDisplay;
|
} TimerDisplay;
|
||||||
|
|
||||||
typedef enum NaviTimerValues {
|
typedef enum NaviTimerValues {
|
||||||
|
@ -34,4 +34,4 @@ typedef struct {
|
||||||
const char* timeEnable;
|
const char* timeEnable;
|
||||||
} TimeObject;
|
} TimeObject;
|
||||||
|
|
||||||
extern const std::vector<TimeObject> timeDisplayList;
|
extern const std::vector<TimeObject> timeDisplayList;
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
{ sequenceId, { sequenceId, label, sfxKey, category, canBeReplaced, canBeUsedAsReplacement } }
|
{ sequenceId, { sequenceId, label, sfxKey, category, canBeReplaced, canBeUsedAsReplacement } }
|
||||||
|
|
||||||
AudioCollection::AudioCollection() {
|
AudioCollection::AudioCollection() {
|
||||||
|
// clang-format off
|
||||||
// (originalSequenceId, label, sfxKey, category, canBeReplaced, canBeUsedAsReplacement),
|
// (originalSequenceId, label, sfxKey, category, canBeReplaced, canBeUsedAsReplacement),
|
||||||
sequenceMap = {
|
sequenceMap = {
|
||||||
|
|
||||||
|
@ -328,7 +329,7 @@ AudioCollection::AudioCollection() {
|
||||||
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x88_YOBI, "NA_SE_VO_DUMMY_0x88_YOBI", "NA_SE_VO_DUMMY_0x88_YOBI", SEQ_VOICE, true, false), // ..
|
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x88_YOBI, "NA_SE_VO_DUMMY_0x88_YOBI", "NA_SE_VO_DUMMY_0x88_YOBI", SEQ_VOICE, true, false), // ..
|
||||||
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x89_YOBI, "NA_SE_VO_DUMMY_0x89_YOBI", "NA_SE_VO_DUMMY_0x89_YOBI", SEQ_VOICE, true, false), // ..
|
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x89_YOBI, "NA_SE_VO_DUMMY_0x89_YOBI", "NA_SE_VO_DUMMY_0x89_YOBI", SEQ_VOICE, true, false), // ..
|
||||||
};
|
};
|
||||||
|
// clang-format on
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string AudioCollection::GetCvarKey(std::string sfxKey) {
|
std::string AudioCollection::GetCvarKey(std::string sfxKey) {
|
||||||
|
|
|
@ -618,7 +618,7 @@ void AudioEditor::DrawElement() {
|
||||||
{SEQ_SFX, true },
|
{SEQ_SFX, true },
|
||||||
{SEQ_VOICE, true },
|
{SEQ_VOICE, true },
|
||||||
{SEQ_INSTRUMENT, true},
|
{SEQ_INSTRUMENT, true},
|
||||||
{SEQ_BGM_CUSTOM, true}
|
{SEQ_BGM_CUSTOM, true},
|
||||||
};
|
};
|
||||||
|
|
||||||
// make temporary sets because removing from the set we're iterating through crashes ImGui
|
// make temporary sets because removing from the set we're iterating through crashes ImGui
|
||||||
|
@ -772,7 +772,7 @@ void AudioEditor::DrawElement() {
|
||||||
UIWidgets::PopStyleTabs();
|
UIWidgets::PopStyleTabs();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<SeqType> allTypes = { SEQ_BGM_WORLD, SEQ_BGM_EVENT, SEQ_BGM_BATTLE, SEQ_OCARINA, SEQ_FANFARE, SEQ_INSTRUMENT, SEQ_SFX, SEQ_VOICE };
|
std::vector<SeqType> allTypes = { SEQ_BGM_WORLD, SEQ_BGM_EVENT, SEQ_BGM_BATTLE, SEQ_OCARINA, SEQ_FANFARE, SEQ_INSTRUMENT, SEQ_SFX, SEQ_VOICE, };
|
||||||
|
|
||||||
void AudioEditor_RandomizeAll() {
|
void AudioEditor_RandomizeAll() {
|
||||||
for (auto type : allTypes) {
|
for (auto type : allTypes) {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#include "BossRush.h"
|
#include "BossRush.h"
|
||||||
#include "soh/OTRGlobals.h"
|
#include "soh/OTRGlobals.h"
|
||||||
#include "soh/Enhancements/game-interactor/GameInteractor.h"
|
#include "soh/Enhancements/game-interactor/GameInteractor.h"
|
||||||
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
|
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
|
||||||
|
@ -34,7 +34,7 @@ BossRushSetting BossRushOptions[BR_OPTIONS_MAX] = {
|
||||||
{ "All", "Alle", "Tous" },
|
{ "All", "Alle", "Tous" },
|
||||||
{ "Child", "Kind", "Enfant" },
|
{ "Child", "Kind", "Enfant" },
|
||||||
{ "Adult", "Erwachsener", "Adulte" },
|
{ "Adult", "Erwachsener", "Adulte" },
|
||||||
{ "Ganondorf & Ganon", "Ganondorf & Ganon", "Ganondorf & Ganon" }
|
{ "Ganondorf & Ganon", "Ganondorf & Ganon", "Ganondorf & Ganon" },
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -45,7 +45,7 @@ BossRushSetting BossRushOptions[BR_OPTIONS_MAX] = {
|
||||||
{ "20", "20", "20" },
|
{ "20", "20", "20" },
|
||||||
{ "3", "3", "3" },
|
{ "3", "3", "3" },
|
||||||
{ "5", "5", "5" },
|
{ "5", "5", "5" },
|
||||||
{ "7", "7", "7" }
|
{ "7", "7", "7" },
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -53,7 +53,7 @@ BossRushSetting BossRushOptions[BR_OPTIONS_MAX] = {
|
||||||
{
|
{
|
||||||
{ "Limited", "Limitiert", "Limitées" },
|
{ "Limited", "Limitiert", "Limitées" },
|
||||||
{ "Full", "Voll", "Pleines" },
|
{ "Full", "Voll", "Pleines" },
|
||||||
{ "Maxed", "Maximum", "Maximum" }
|
{ "Maxed", "Maximum", "Maximum" },
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -61,28 +61,28 @@ BossRushSetting BossRushOptions[BR_OPTIONS_MAX] = {
|
||||||
{
|
{
|
||||||
{ "Before Ganondorf", "Vor Ganondorf", "Avant Ganondorf" },
|
{ "Before Ganondorf", "Vor Ganondorf", "Avant Ganondorf" },
|
||||||
{ "Every Boss", "Bei jedem Boss", "Tous les Boss" },
|
{ "Every Boss", "Bei jedem Boss", "Tous les Boss" },
|
||||||
{ "Never", "Niemals", "Jamais" }
|
{ "Never", "Niemals", "Jamais" },
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "HYPER BOSSES:", "HYPER-BOSSE:", "HYPER BOSS:" },
|
{ "HYPER BOSSES:", "HYPER-BOSSE:", "HYPER BOSS:" },
|
||||||
{
|
{
|
||||||
{ "No", "Nein", "Non" },
|
{ "No", "Nein", "Non" },
|
||||||
{ "Yes", "Ja", "Oui" }
|
{ "Yes", "Ja", "Oui" },
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "MAGIC:", "MAGIE:", "MAGIE:" },
|
{ "MAGIC:", "MAGIE:", "MAGIE:" },
|
||||||
{
|
{
|
||||||
{ "Single", "Einzel", "Simple" },
|
{ "Single", "Einzel", "Simple" },
|
||||||
{ "Double", "Doppel", "Double" }
|
{ "Double", "Doppel", "Double" },
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "BIG. SWORD:", "BIG.-SCHWERT:", "EPÉE DE BIG.:" },
|
{ "BIG. SWORD:", "BIG.-SCHWERT:", "EPÉE DE BIG.:" },
|
||||||
{
|
{
|
||||||
{ "No", "Nein", "Non" },
|
{ "No", "Nein", "Non" },
|
||||||
{ "Yes", "Ja", "Oui" }
|
{ "Yes", "Ja", "Oui" },
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -93,35 +93,35 @@ BossRushSetting BossRushOptions[BR_OPTIONS_MAX] = {
|
||||||
{ "Fairy", "Fee", "Fée" },
|
{ "Fairy", "Fee", "Fée" },
|
||||||
{ "Red Potion", "Rotes Elixier", "Potion Rouge" },
|
{ "Red Potion", "Rotes Elixier", "Potion Rouge" },
|
||||||
{ "Green Potion", "Grünes Elixier", "Potion Verte" },
|
{ "Green Potion", "Grünes Elixier", "Potion Verte" },
|
||||||
{ "Blue Potion", "Blaues Elixier", "Potion Bleue" }
|
{ "Blue Potion", "Blaues Elixier", "Potion Bleue" },
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "LONGSHOT:", "ENTERHAKEN:", "SUPER GRAPPIN:" },
|
{ "LONGSHOT:", "ENTERHAKEN:", "SUPER GRAPPIN:" },
|
||||||
{
|
{
|
||||||
{ "No", "Nein", "Non" },
|
{ "No", "Nein", "Non" },
|
||||||
{ "Yes", "Ja", "Oui" }
|
{ "Yes", "Ja", "Oui" },
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "HOVER BOOTS:", "GLEITSTIEFEL:", "BOTTES DES AIRS:" },
|
{ "HOVER BOOTS:", "GLEITSTIEFEL:", "BOTTES DES AIRS:" },
|
||||||
{
|
{
|
||||||
{ "No", "Nein", "Non" },
|
{ "No", "Nein", "Non" },
|
||||||
{ "Yes", "Ja", "Oui" }
|
{ "Yes", "Ja", "Oui" },
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "BUNNY HOOD:", "HASENOHREN:", "MASQUE DU LAPIN:" },
|
{ "BUNNY HOOD:", "HASENOHREN:", "MASQUE DU LAPIN:" },
|
||||||
{
|
{
|
||||||
{ "No", "Nein", "Non" },
|
{ "No", "Nein", "Non" },
|
||||||
{ "Yes", "Ja", "Oui" }
|
{ "Yes", "Ja", "Oui" },
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
{ "TIMER:", "TIMER:", "TIMER:" },
|
{ "TIMER:", "TIMER:", "TIMER:" },
|
||||||
{
|
{
|
||||||
{ "Yes", "Ja", "Oui" },
|
{ "Yes", "Ja", "Oui" },
|
||||||
{ "No", "Nein", "Non" }
|
{ "No", "Nein", "Non" },
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -507,7 +507,7 @@ void BossRush_InitSave() {
|
||||||
static void* sSavePromptNoChoiceTexs[] = {
|
static void* sSavePromptNoChoiceTexs[] = {
|
||||||
(void*)gPauseNoENGTex,
|
(void*)gPauseNoENGTex,
|
||||||
(void*)gPauseNoGERTex,
|
(void*)gPauseNoGERTex,
|
||||||
(void*)gPauseNoFRATex
|
(void*)gPauseNoFRATex,
|
||||||
};
|
};
|
||||||
|
|
||||||
void BossRush_OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_list originalArgs) {
|
void BossRush_OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_list originalArgs) {
|
||||||
|
|
|
@ -37,28 +37,28 @@ typedef enum {
|
||||||
typedef enum {
|
typedef enum {
|
||||||
BR_CHOICE_AMMO_LIMITED,
|
BR_CHOICE_AMMO_LIMITED,
|
||||||
BR_CHOICE_AMMO_FULL,
|
BR_CHOICE_AMMO_FULL,
|
||||||
BR_CHOICE_AMMO_MAXED
|
BR_CHOICE_AMMO_MAXED,
|
||||||
} BossRushAmmoChoices;
|
} BossRushAmmoChoices;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
BR_CHOICE_HEAL_GANONDORF,
|
BR_CHOICE_HEAL_GANONDORF,
|
||||||
BR_CHOICE_HEAL_EVERYBOSS,
|
BR_CHOICE_HEAL_EVERYBOSS,
|
||||||
BR_CHOICE_HEAL_NEVER
|
BR_CHOICE_HEAL_NEVER,
|
||||||
} BossRushHealChoices;
|
} BossRushHealChoices;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
BR_CHOICE_HYPERBOSSES_NO,
|
BR_CHOICE_HYPERBOSSES_NO,
|
||||||
BR_CHOICE_HYPERBOSSES_YES
|
BR_CHOICE_HYPERBOSSES_YES,
|
||||||
} BossRushHyperBossesChoices;
|
} BossRushHyperBossesChoices;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
BR_CHOICE_MAGIC_SINGLE,
|
BR_CHOICE_MAGIC_SINGLE,
|
||||||
BR_CHOICE_MAGIC_DOUBLE
|
BR_CHOICE_MAGIC_DOUBLE,
|
||||||
} BossRushMagicChoices;
|
} BossRushMagicChoices;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
BR_CHOICE_BGS_NO,
|
BR_CHOICE_BGS_NO,
|
||||||
BR_CHOICE_BGS_YES
|
BR_CHOICE_BGS_YES,
|
||||||
} BossRushBgsChoices;
|
} BossRushBgsChoices;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
@ -72,20 +72,20 @@ typedef enum {
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
BR_CHOICE_LONGSHOT_NO,
|
BR_CHOICE_LONGSHOT_NO,
|
||||||
BR_CHOICE_LONGSHOT_YES
|
BR_CHOICE_LONGSHOT_YES,
|
||||||
} BossRushLongshotChoices;
|
} BossRushLongshotChoices;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
BR_CHOICE_HOVERBOOTS_NO,
|
BR_CHOICE_HOVERBOOTS_NO,
|
||||||
BR_CHOICE_HOVERBOOTS_YES
|
BR_CHOICE_HOVERBOOTS_YES,
|
||||||
} BossRushHoverBootsChoices;
|
} BossRushHoverBootsChoices;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
BR_CHOICE_BUNNYHOOD_NO,
|
BR_CHOICE_BUNNYHOOD_NO,
|
||||||
BR_CHOICE_BUNNYHOOD_YES
|
BR_CHOICE_BUNNYHOOD_YES,
|
||||||
} BossRushBunnyHoodChoices;
|
} BossRushBunnyHoodChoices;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
BR_CHOICE_TIMER_YES,
|
BR_CHOICE_TIMER_YES,
|
||||||
BR_CHOICE_TIMER_NO
|
BR_CHOICE_TIMER_NO,
|
||||||
} BossRushTimerChoices;
|
} BossRushTimerChoices;
|
||||||
|
|
|
@ -119,6 +119,7 @@ Color_RGBA8 ColorRGBA8(uint8_t r, uint8_t g, uint8_t b, uint8_t a) {
|
||||||
supportsAlpha, supportsRainbow, advancedOption \
|
supportsAlpha, supportsRainbow, advancedOption \
|
||||||
} }
|
} }
|
||||||
|
|
||||||
|
// clang-format off
|
||||||
/*
|
/*
|
||||||
So, you would like to add a new cosmetic option? BUCKLE UP
|
So, you would like to add a new cosmetic option? BUCKLE UP
|
||||||
|
|
||||||
|
@ -439,6 +440,7 @@ static std::map<std::string, CosmeticOption> cosmeticOptions = {
|
||||||
COSMETIC_OPTION("NPC.MetalTrap", "Metal Trap", COSMETICS_GROUP_NPC, ColorRGBA8(255, 255, 255, 255), false, true, true),
|
COSMETIC_OPTION("NPC.MetalTrap", "Metal Trap", COSMETICS_GROUP_NPC, ColorRGBA8(255, 255, 255, 255), false, true, true),
|
||||||
COSMETIC_OPTION("NPC.IronKnuckles", "Iron Knuckles", COSMETICS_GROUP_NPC, ColorRGBA8(245, 255, 205, 255), false, true, false),
|
COSMETIC_OPTION("NPC.IronKnuckles", "Iron Knuckles", COSMETICS_GROUP_NPC, ColorRGBA8(245, 255, 205, 255), false, true, false),
|
||||||
};
|
};
|
||||||
|
// clang-format on
|
||||||
|
|
||||||
static const char* MarginCvarList[] {
|
static const char* MarginCvarList[] {
|
||||||
CVAR_COSMETIC("HUD.Hearts"),
|
CVAR_COSMETIC("HUD.Hearts"),
|
||||||
|
@ -461,7 +463,7 @@ static const char* MarginCvarList[] {
|
||||||
CVAR_COSMETIC("HUD.ArcheryScore"),
|
CVAR_COSMETIC("HUD.ArcheryScore"),
|
||||||
CVAR_COSMETIC("HUD.TitleCard.Map"),
|
CVAR_COSMETIC("HUD.TitleCard.Map"),
|
||||||
CVAR_COSMETIC("HUD.TitleCard.Boss"),
|
CVAR_COSMETIC("HUD.TitleCard.Boss"),
|
||||||
CVAR_COSMETIC("HUD.IGT")
|
CVAR_COSMETIC("HUD.IGT"),
|
||||||
};
|
};
|
||||||
|
|
||||||
static const char* MarginCvarNonAnchor[] {
|
static const char* MarginCvarNonAnchor[] {
|
||||||
|
@ -469,7 +471,7 @@ static const char* MarginCvarNonAnchor[] {
|
||||||
CVAR_COSMETIC("HUD.Timers"),
|
CVAR_COSMETIC("HUD.Timers"),
|
||||||
CVAR_COSMETIC("HUD.ArcheryScore"),
|
CVAR_COSMETIC("HUD.ArcheryScore"),
|
||||||
CVAR_COSMETIC("HUD.TitleCard.Map"),
|
CVAR_COSMETIC("HUD.TitleCard.Map"),
|
||||||
CVAR_COSMETIC("HUD.TitleCard.Boss")
|
CVAR_COSMETIC("HUD.TitleCard.Boss"),
|
||||||
};
|
};
|
||||||
|
|
||||||
void SetMarginAll(const char* ButtonName, bool SetActivated, const char* tooltip) {
|
void SetMarginAll(const char* ButtonName, bool SetActivated, const char* tooltip) {
|
||||||
|
|
|
@ -25,7 +25,7 @@ typedef enum {
|
||||||
COSMETICS_GROUP_NAVI,
|
COSMETICS_GROUP_NAVI,
|
||||||
COSMETICS_GROUP_IVAN,
|
COSMETICS_GROUP_IVAN,
|
||||||
COSMETICS_GROUP_MESSAGE,
|
COSMETICS_GROUP_MESSAGE,
|
||||||
COSMETICS_GROUP_MAX
|
COSMETICS_GROUP_MAX,
|
||||||
} CosmeticGroup;
|
} CosmeticGroup;
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
typedef enum {
|
typedef enum {
|
||||||
COLORSCHEME_N64,
|
COLORSCHEME_N64,
|
||||||
COLORSCHEME_GAMECUBE
|
COLORSCHEME_GAMECUBE,
|
||||||
} DefaultColorScheme;
|
} DefaultColorScheme;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
@ -15,5 +15,5 @@ typedef enum {
|
||||||
ANCHOR_RIGHT,
|
ANCHOR_RIGHT,
|
||||||
ANCHOR_NONE,
|
ANCHOR_NONE,
|
||||||
HIDDEN,
|
HIDDEN,
|
||||||
ANCHOR_TO_LIFE_METER
|
ANCHOR_TO_LIFE_METER,
|
||||||
} PosType;
|
} PosType;
|
||||||
|
|
|
@ -18,11 +18,11 @@ static const std::unordered_map<std::string, char> textBoxSpecialCharacters = {
|
||||||
};
|
};
|
||||||
static const std::unordered_map<std::string, std::string> percentColors = { { "w", QM_WHITE }, { "r", QM_RED }, { "g", QM_GREEN },
|
static const std::unordered_map<std::string, std::string> percentColors = { { "w", QM_WHITE }, { "r", QM_RED }, { "g", QM_GREEN },
|
||||||
{ "b", QM_BLUE }, { "c", QM_LBLUE }, { "p", QM_PINK },
|
{ "b", QM_BLUE }, { "c", QM_LBLUE }, { "p", QM_PINK },
|
||||||
{ "y", QM_YELLOW }, { "B", QM_BLACK } };
|
{ "y", QM_YELLOW }, { "B", QM_BLACK }, };
|
||||||
|
|
||||||
static const std::unordered_map<std::string, std::string> colorToPercent = { { QM_WHITE, "%w" }, { QM_RED, "%r"}, { QM_GREEN, "%g" },
|
static const std::unordered_map<std::string, std::string> colorToPercent = { { QM_WHITE, "%w" }, { QM_RED, "%r"}, { QM_GREEN, "%g" },
|
||||||
{ QM_BLUE, "%b" }, { QM_LBLUE, "%c"}, { QM_PINK, "%p" },
|
{ QM_BLUE, "%b" }, { QM_LBLUE, "%c"}, { QM_PINK, "%p" },
|
||||||
{ QM_YELLOW, "%y" }, { QM_BLACK, "%B" } };
|
{ QM_YELLOW, "%y" }, { QM_BLACK, "%B" }, };
|
||||||
|
|
||||||
static const std::unordered_map<std::string, ItemID> altarIcons = {
|
static const std::unordered_map<std::string, ItemID> altarIcons = {
|
||||||
{ "0", ITEM_KOKIRI_EMERALD },
|
{ "0", ITEM_KOKIRI_EMERALD },
|
||||||
|
@ -44,7 +44,7 @@ static const std::unordered_map<std::string, ItemID> altarIcons = {
|
||||||
{ "m", ITEM_DUNGEON_MAP },
|
{ "m", ITEM_DUNGEON_MAP },
|
||||||
{ "C", ITEM_COMPASS },
|
{ "C", ITEM_COMPASS },
|
||||||
{ "s", ITEM_SKULL_TOKEN },
|
{ "s", ITEM_SKULL_TOKEN },
|
||||||
{ "g", ITEM_MASK_GORON }
|
{ "g", ITEM_MASK_GORON },
|
||||||
};
|
};
|
||||||
|
|
||||||
static std::map<std::string, int> pixelWidthTable = {
|
static std::map<std::string, int> pixelWidthTable = {
|
||||||
|
@ -72,7 +72,7 @@ static std::map<std::string, int> pixelWidthTable = {
|
||||||
{ "í", 5 }, { "î", 5 }, { "ï", 5 }, { "ð", 7 }, { "ñ", 7 }, { "ò", 7 }, { "ó", 7 }, { "ô", 7 },
|
{ "í", 5 }, { "î", 5 }, { "ï", 5 }, { "ð", 7 }, { "ñ", 7 }, { "ò", 7 }, { "ó", 7 }, { "ô", 7 },
|
||||||
{ "õ", 7 }, { "ö", 7 }, { "÷", 11 }, { "ø", 9 }, { "ù", 7 }, { "ú", 7 }, { "û", 7 }, { "ü", 7 },
|
{ "õ", 7 }, { "ö", 7 }, { "÷", 11 }, { "ø", 9 }, { "ù", 7 }, { "ú", 7 }, { "û", 7 }, { "ü", 7 },
|
||||||
{ "ý", 8 }, { "þ", 8 }, { "ÿ", 8 }, { "Œ", 11 }, { "œ", 11 }, { "„", 5 }, { "”", 5 }, { "€", 10 },
|
{ "ý", 8 }, { "þ", 8 }, { "ÿ", 8 }, { "Œ", 11 }, { "œ", 11 }, { "„", 5 }, { "”", 5 }, { "€", 10 },
|
||||||
{ "Ÿ", 10 }, { "~", 8 }
|
{ "Ÿ", 10 }, { "~", 8 },
|
||||||
};
|
};
|
||||||
|
|
||||||
CustomMessage::CustomMessage(std::string english_, std::string german_, std::string french_, TextBoxType type_,
|
CustomMessage::CustomMessage(std::string english_, std::string german_, std::string french_, TextBoxType type_,
|
||||||
|
|
|
@ -181,7 +181,7 @@ static const char* msgStaticTbl[] =
|
||||||
gFadingMessageBackgroundTex,
|
gFadingMessageBackgroundTex,
|
||||||
gMessageContinueTriangleTex,
|
gMessageContinueTriangleTex,
|
||||||
gMessageEndSquareTex,
|
gMessageEndSquareTex,
|
||||||
gMessageArrowTex
|
gMessageArrowTex,
|
||||||
};
|
};
|
||||||
|
|
||||||
void MessageDebug_StartTextBox(const char* tableId, uint16_t textId, uint8_t language) {
|
void MessageDebug_StartTextBox(const char* tableId, uint16_t textId, uint8_t language) {
|
||||||
|
|
|
@ -42,7 +42,7 @@ typedef enum {
|
||||||
LIST,
|
LIST,
|
||||||
TARGET,
|
TARGET,
|
||||||
HELD,
|
HELD,
|
||||||
INTERACT
|
INTERACT,
|
||||||
} RetrievalMethod;
|
} RetrievalMethod;
|
||||||
|
|
||||||
std::array<const char*, 12> acMapping = {
|
std::array<const char*, 12> acMapping = {
|
||||||
|
@ -230,7 +230,7 @@ static std::vector<u16> noParamsActors = {
|
||||||
ACTOR_UNSET_15D,
|
ACTOR_UNSET_15D,
|
||||||
ACTOR_UNSET_161,
|
ACTOR_UNSET_161,
|
||||||
ACTOR_UNSET_180,
|
ACTOR_UNSET_180,
|
||||||
ACTOR_UNSET_1AA
|
ACTOR_UNSET_1AA,
|
||||||
};
|
};
|
||||||
|
|
||||||
static std::unordered_map<u16, std::function<s16(s16)>> actorSpecificData;
|
static std::unordered_map<u16, std::function<s16(s16)>> actorSpecificData;
|
||||||
|
@ -402,7 +402,7 @@ void CreateActorSpecificData() {
|
||||||
"Zora Tunic",
|
"Zora Tunic",
|
||||||
"Goron Tunic",
|
"Goron Tunic",
|
||||||
"Bombs (Special)",
|
"Bombs (Special)",
|
||||||
"Bombchus"
|
"Bombchus",
|
||||||
};
|
};
|
||||||
|
|
||||||
int selectedItem = params & 0xFF;
|
int selectedItem = params & 0xFF;
|
||||||
|
@ -439,7 +439,7 @@ void CreateActorSpecificData() {
|
||||||
"Zora Tunic",
|
"Zora Tunic",
|
||||||
"Goron Tunic",
|
"Goron Tunic",
|
||||||
"Bombs (Special)",
|
"Bombs (Special)",
|
||||||
"Bombchus"
|
"Bombchus",
|
||||||
};
|
};
|
||||||
|
|
||||||
int selectedItem = params & 0xFF;
|
int selectedItem = params & 0xFF;
|
||||||
|
@ -519,7 +519,7 @@ void CreateActorSpecificData() {
|
||||||
"Bombs (5) (35 Rupees)",
|
"Bombs (5) (35 Rupees)",
|
||||||
"Red Potion (40 Rupees)",
|
"Red Potion (40 Rupees)",
|
||||||
"Red Potion (50 Rupees)",
|
"Red Potion (50 Rupees)",
|
||||||
"Randomizer Item"
|
"Randomizer Item",
|
||||||
};
|
};
|
||||||
int selectedItem = params;
|
int selectedItem = params;
|
||||||
if (ImGui::Combo("Type", &selectedItem, items, IM_ARRAYSIZE(items))) {
|
if (ImGui::Combo("Type", &selectedItem, items, IM_ARRAYSIZE(items))) {
|
||||||
|
@ -537,7 +537,7 @@ void CreateActorSpecificData() {
|
||||||
"Spawned Falling (2)",
|
"Spawned Falling (2)",
|
||||||
//"INVALID",
|
//"INVALID",
|
||||||
"Ceiling Spot Spawner",
|
"Ceiling Spot Spawner",
|
||||||
"On Floor"
|
"On Floor",
|
||||||
};
|
};
|
||||||
int selectedItem = params > 3 ? params - 1 : params;
|
int selectedItem = params > 3 ? params - 1 : params;
|
||||||
if (ImGui::Combo("Type", &selectedItem, items, IM_ARRAYSIZE(items))) {
|
if (ImGui::Combo("Type", &selectedItem, items, IM_ARRAYSIZE(items))) {
|
||||||
|
@ -568,7 +568,7 @@ void CreateActorSpecificData() {
|
||||||
"Magic Fire",
|
"Magic Fire",
|
||||||
"Magic Wind",
|
"Magic Wind",
|
||||||
"Magic Dark",
|
"Magic Dark",
|
||||||
"Bullet Bag"
|
"Bullet Bag",
|
||||||
};
|
};
|
||||||
int selectedItem = params;
|
int selectedItem = params;
|
||||||
if (ImGui::Combo("Type", &selectedItem, items, IM_ARRAYSIZE(items))) {
|
if (ImGui::Combo("Type", &selectedItem, items, IM_ARRAYSIZE(items))) {
|
||||||
|
@ -587,7 +587,7 @@ void CreateActorSpecificData() {
|
||||||
"Spawner",
|
"Spawner",
|
||||||
"Revive Death",
|
"Revive Death",
|
||||||
"Heal",
|
"Heal",
|
||||||
"Heal Big"
|
"Heal Big",
|
||||||
};
|
};
|
||||||
int selectedItem = params;
|
int selectedItem = params;
|
||||||
if (ImGui::Combo("Type", &selectedItem, items, IM_ARRAYSIZE(items))) {
|
if (ImGui::Combo("Type", &selectedItem, items, IM_ARRAYSIZE(items))) {
|
||||||
|
@ -601,7 +601,7 @@ void CreateActorSpecificData() {
|
||||||
static const char* items[] = {
|
static const char* items[] = {
|
||||||
"Cutscene", //0
|
"Cutscene", //0
|
||||||
"Normal", //1
|
"Normal", //1
|
||||||
"Laser" //100
|
"Laser", //100
|
||||||
};
|
};
|
||||||
int selectedItem = params == 100 ? 2 : params;
|
int selectedItem = params == 100 ? 2 : params;
|
||||||
if (ImGui::Combo("Type", &selectedItem, items, IM_ARRAYSIZE(items))) {
|
if (ImGui::Combo("Type", &selectedItem, items, IM_ARRAYSIZE(items))) {
|
||||||
|
@ -647,7 +647,7 @@ void CreateActorSpecificData() {
|
||||||
"UNK 7",
|
"UNK 7",
|
||||||
"Orange",
|
"Orange",
|
||||||
"Green",
|
"Green",
|
||||||
"Red"
|
"Red",
|
||||||
};
|
};
|
||||||
int selectedItem = params + 2;
|
int selectedItem = params + 2;
|
||||||
if (ImGui::Combo("Type", &selectedItem, items, IM_ARRAYSIZE(items))) {
|
if (ImGui::Combo("Type", &selectedItem, items, IM_ARRAYSIZE(items))) {
|
||||||
|
@ -716,7 +716,7 @@ void CreateActorSpecificData() {
|
||||||
"Switch Flag Fall Small",
|
"Switch Flag Fall Small",
|
||||||
"9",
|
"9",
|
||||||
"10",
|
"10",
|
||||||
"Switch Flag Big"
|
"Switch Flag Big",
|
||||||
};
|
};
|
||||||
|
|
||||||
int type = (params >> 12) & 0xF;
|
int type = (params >> 12) & 0xF;
|
||||||
|
|
|
@ -1659,7 +1659,7 @@ const std::vector<std::string> state1 = {
|
||||||
"In Item Cutscene",
|
"In Item Cutscene",
|
||||||
"In Cutscene",
|
"In Cutscene",
|
||||||
"30", //Unknown
|
"30", //Unknown
|
||||||
"Floor collision disabled"
|
"Floor collision disabled",
|
||||||
};
|
};
|
||||||
|
|
||||||
const std::vector<std::string> state2 = {
|
const std::vector<std::string> state2 = {
|
||||||
|
@ -1694,7 +1694,7 @@ const std::vector<std::string> state2 = {
|
||||||
"Idling",
|
"Idling",
|
||||||
"Disabled draw func",
|
"Disabled draw func",
|
||||||
"Sword Lunge",
|
"Sword Lunge",
|
||||||
"Void out"
|
"Void out",
|
||||||
};
|
};
|
||||||
|
|
||||||
const std::vector<std::string> state3 = {
|
const std::vector<std::string> state3 = {
|
||||||
|
@ -1705,7 +1705,7 @@ const std::vector<std::string> state3 = {
|
||||||
"Check Floor Water Collision",
|
"Check Floor Water Collision",
|
||||||
"Force Pull Ocarina",
|
"Force Pull Ocarina",
|
||||||
"Restore Nayru's Love",
|
"Restore Nayru's Love",
|
||||||
"Travelling to Hook Target"
|
"Travelling to Hook Target",
|
||||||
};
|
};
|
||||||
|
|
||||||
class SaveEditorWindow : public Ship::GuiWindow {
|
class SaveEditorWindow : public Ship::GuiWindow {
|
||||||
|
|
|
@ -22,6 +22,7 @@ s32 GfxPrint_Printf(GfxPrint* printer, const char* fmt, ...);
|
||||||
|
|
||||||
ImVec4 WHITE = ImVec4(1.0f, 1.0f, 1.0f, 1.0f);
|
ImVec4 WHITE = ImVec4(1.0f, 1.0f, 1.0f, 1.0f);
|
||||||
|
|
||||||
|
// clang-format off
|
||||||
std::vector<ValueTableElement> valueTable = {
|
std::vector<ValueTableElement> valueTable = {
|
||||||
{ "Time", "gSaveContext.dayTime", "TIME:", TYPE_U16, false, []() -> void* { return &gSaveContext.dayTime; }, WHITE },
|
{ "Time", "gSaveContext.dayTime", "TIME:", TYPE_U16, false, []() -> void* { return &gSaveContext.dayTime; }, WHITE },
|
||||||
{ "Age", "gSaveContext.linkAge", "AGE:", TYPE_S32, false, []() -> void* { return &gSaveContext.linkAge; }, WHITE },
|
{ "Age", "gSaveContext.linkAge", "AGE:", TYPE_S32, false, []() -> void* { return &gSaveContext.linkAge; }, WHITE },
|
||||||
|
@ -71,6 +72,7 @@ std::vector<ValueTableElement> valueTable = {
|
||||||
"Deku Tree Warp Timer" u16 0x801F83A2
|
"Deku Tree Warp Timer" u16 0x801F83A2
|
||||||
*/
|
*/
|
||||||
};
|
};
|
||||||
|
// clang-format on
|
||||||
|
|
||||||
extern "C" void ValueViewer_Draw(GfxPrint* printer) {
|
extern "C" void ValueViewer_Draw(GfxPrint* printer) {
|
||||||
for (int i = 0; i < valueTable.size(); i++) {
|
for (int i = 0; i < valueTable.size(); i++) {
|
||||||
|
|
|
@ -11,14 +11,14 @@ typedef enum {
|
||||||
CSMC_DISABLED,
|
CSMC_DISABLED,
|
||||||
CSMC_BOTH,
|
CSMC_BOTH,
|
||||||
CSMC_TEXTURE,
|
CSMC_TEXTURE,
|
||||||
CSMC_SIZE
|
CSMC_SIZE,
|
||||||
} ChestStyleMatchesContentsType;
|
} ChestStyleMatchesContentsType;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
SGIA_DISABLED,
|
SGIA_DISABLED,
|
||||||
SGIA_JUNK,
|
SGIA_JUNK,
|
||||||
SGIA_ALL,
|
SGIA_ALL,
|
||||||
SGIA_SIZE
|
SGIA_SIZE,
|
||||||
} SkipGetItemAnimationType;
|
} SkipGetItemAnimationType;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
@ -31,7 +31,7 @@ typedef enum {
|
||||||
typedef enum {
|
typedef enum {
|
||||||
BUNNY_HOOD_VANILLA,
|
BUNNY_HOOD_VANILLA,
|
||||||
BUNNY_HOOD_FAST,
|
BUNNY_HOOD_FAST,
|
||||||
BUNNY_HOOD_FAST_AND_JUMP
|
BUNNY_HOOD_FAST_AND_JUMP,
|
||||||
} BunnyHoodMode;
|
} BunnyHoodMode;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
@ -55,7 +55,7 @@ typedef enum {
|
||||||
typedef enum {
|
typedef enum {
|
||||||
BOOTSEQUENCE_DEFAULT,
|
BOOTSEQUENCE_DEFAULT,
|
||||||
BOOTSEQUENCE_AUTHENTIC,
|
BOOTSEQUENCE_AUTHENTIC,
|
||||||
BOOTSEQUENCE_FILESELECT
|
BOOTSEQUENCE_FILESELECT,
|
||||||
} BootSequenceType;
|
} BootSequenceType;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
|
|
@ -709,6 +709,7 @@ void SetupDisplayNames() {
|
||||||
// To add a timestamp for an item or event, add it to this list and ensure
|
// To add a timestamp for an item or event, add it to this list and ensure
|
||||||
// it has a corresponding entry in the enum (see gameplaystats.h)
|
// it has a corresponding entry in the enum (see gameplaystats.h)
|
||||||
|
|
||||||
|
// clang-format off
|
||||||
strcpy(itemTimestampDisplayName[ITEM_BOW], "Fairy Bow: ");
|
strcpy(itemTimestampDisplayName[ITEM_BOW], "Fairy Bow: ");
|
||||||
strcpy(itemTimestampDisplayName[ITEM_ARROW_FIRE], "Fire Arrows: ");
|
strcpy(itemTimestampDisplayName[ITEM_ARROW_FIRE], "Fire Arrows: ");
|
||||||
strcpy(itemTimestampDisplayName[ITEM_DINS_FIRE], "Din's Fire: ");
|
strcpy(itemTimestampDisplayName[ITEM_DINS_FIRE], "Din's Fire: ");
|
||||||
|
@ -799,6 +800,7 @@ void SetupDisplayNames() {
|
||||||
strcpy(itemTimestampDisplayName[TIMESTAMP_BOSSRUSH_FINISH], "Boss Rush Finished: ");
|
strcpy(itemTimestampDisplayName[TIMESTAMP_BOSSRUSH_FINISH], "Boss Rush Finished: ");
|
||||||
strcpy(itemTimestampDisplayName[TIMESTAMP_FOUND_GREG], "Greg Found: ");
|
strcpy(itemTimestampDisplayName[TIMESTAMP_FOUND_GREG], "Greg Found: ");
|
||||||
strcpy(itemTimestampDisplayName[TIMESTAMP_TRIFORCE_COMPLETED], "Triforce Completed: ");
|
strcpy(itemTimestampDisplayName[TIMESTAMP_TRIFORCE_COMPLETED], "Triforce Completed: ");
|
||||||
|
// clang-format on
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetupDisplayColors() {
|
void SetupDisplayColors() {
|
||||||
|
|
|
@ -715,7 +715,8 @@ void RegisterEnemyDefeatCounts() {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ACTOR_EN_TP:
|
case ACTOR_EN_TP:
|
||||||
if (actor->params == TAILPASARAN_HEAD) { // Only count the head, otherwise each body segment will increment
|
// Only count the head, otherwise each body segment will increment
|
||||||
|
if (actor->params == TAILPASARAN_HEAD) {
|
||||||
gSaveContext.ship.stats.count[COUNT_ENEMIES_DEFEATED_TAILPASARAN]++;
|
gSaveContext.ship.stats.count[COUNT_ENEMIES_DEFEATED_TAILPASARAN]++;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -833,8 +834,8 @@ void RegisterRandomizedEnemySizes() {
|
||||||
randomNumber = rand() % 200;
|
randomNumber = rand() % 200;
|
||||||
// Between 100% and 300% size.
|
// Between 100% and 300% size.
|
||||||
randomScale = 1.0f + (randomNumber / 100);
|
randomScale = 1.0f + (randomNumber / 100);
|
||||||
// Small actor
|
|
||||||
} else {
|
} else {
|
||||||
|
// Small actor
|
||||||
randomNumber = rand() % 90;
|
randomNumber = rand() % 90;
|
||||||
// Between 10% and 100% size.
|
// Between 10% and 100% size.
|
||||||
randomScale = 0.1f + (randomNumber / 100);
|
randomScale = 0.1f + (randomNumber / 100);
|
||||||
|
|
|
@ -22,6 +22,7 @@ using namespace std::literals::string_literals;
|
||||||
namespace Rando {
|
namespace Rando {
|
||||||
|
|
||||||
void StaticData::HintTable_Init() {
|
void StaticData::HintTable_Init() {
|
||||||
|
// clang-format off
|
||||||
/*--------------------------
|
/*--------------------------
|
||||||
| GENERAL TEXT |
|
| GENERAL TEXT |
|
||||||
---------------------------*/
|
---------------------------*/
|
||||||
|
@ -46,12 +47,13 @@ void StaticData::HintTable_Init() {
|
||||||
"Man erzählt sich, daß #[[2]]# #[[1]]# horte.",
|
"Man erzählt sich, daß #[[2]]# #[[1]]# horte.",
|
||||||
/*french*/ "Selon moi, #[[2]]# recèle #[[1]]#.", {QM_RED, QM_GREEN}));
|
/*french*/ "Selon moi, #[[2]]# recèle #[[1]]#.", {QM_RED, QM_GREEN}));
|
||||||
// /*spanish*/ "Según dicen, #[[2]]# acapara #[[1]]#."
|
// /*spanish*/ "Según dicen, #[[2]]# acapara #[[1]]#."
|
||||||
|
// clang-format on
|
||||||
|
|
||||||
HintTable_Init_Item();
|
HintTable_Init_Item();
|
||||||
HintTable_Init_Exclude_Overworld();
|
HintTable_Init_Exclude_Overworld();
|
||||||
HintTable_Init_Exclude_Dungeon();
|
HintTable_Init_Exclude_Dungeon();
|
||||||
|
|
||||||
|
// clang-format off
|
||||||
/*--------------------------
|
/*--------------------------
|
||||||
| SOMETIMES HINT TEXT |
|
| SOMETIMES HINT TEXT |
|
||||||
---------------------------*/
|
---------------------------*/
|
||||||
|
@ -2418,5 +2420,6 @@ void StaticData::HintTable_Init() {
|
||||||
/*german*/ "&Man kann darauf die Worte&%r\"Master Quest\"%w entziffern...",
|
/*german*/ "&Man kann darauf die Worte&%r\"Master Quest\"%w entziffern...",
|
||||||
/*french*/ "&Étrange... les mots %r\"Master&Quest\"%w sont gravés dessus."));
|
/*french*/ "&Étrange... les mots %r\"Master&Quest\"%w sont gravés dessus."));
|
||||||
|
|
||||||
|
// clang-format on
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,10 +4,12 @@
|
||||||
|
|
||||||
namespace Rando {
|
namespace Rando {
|
||||||
void StaticData::HintTable_Init_Exclude_Dungeon() {
|
void StaticData::HintTable_Init_Exclude_Dungeon() {
|
||||||
/*--------------------------
|
// clang-format off
|
||||||
| DEKU TREE |
|
|
||||||
---------------------------*/
|
/*--------------------------
|
||||||
hintTextTable[RHT_DEKU_TREE_MAP_CHEST] = HintText(CustomMessage("They say that in the #center of the Deku Tree# lies #[[1]]#.",
|
| DEKU TREE |
|
||||||
|
---------------------------*/
|
||||||
|
hintTextTable[RHT_DEKU_TREE_MAP_CHEST] = HintText(CustomMessage("They say that in the #center of the Deku Tree# lies #[[1]]#.",
|
||||||
/*german*/ "Man erzählt sich, daß im #Zentrum des Deku-Baums# #[[1]]# läge.",
|
/*german*/ "Man erzählt sich, daß im #Zentrum des Deku-Baums# #[[1]]# läge.",
|
||||||
/*french*/ "Selon moi, #le centre de l'Arbre Mojo# recèle #[[1]]#.", {QM_RED, QM_GREEN}));
|
/*french*/ "Selon moi, #le centre de l'Arbre Mojo# recèle #[[1]]#.", {QM_RED, QM_GREEN}));
|
||||||
// /*spanish*/ Según dicen, al #centro del Gran Árbol Deku# yace #[[1]]#.
|
// /*spanish*/ Según dicen, al #centro del Gran Árbol Deku# yace #[[1]]#.
|
||||||
|
@ -2173,5 +2175,6 @@ hintTextTable[RHT_SHADOW_TEMPLE_MAP_CHEST] = HintText(CustomMessage("They say th
|
||||||
/*german*/ "",
|
/*german*/ "",
|
||||||
/*french*/ "Selon moi, un #coeur dans le Château de Ganon# cache #[[1]]#.", {QM_RED, QM_GREEN}));
|
/*french*/ "Selon moi, un #coeur dans le Château de Ganon# cache #[[1]]#.", {QM_RED, QM_GREEN}));
|
||||||
|
|
||||||
|
// clang-format on
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
namespace Rando {
|
namespace Rando {
|
||||||
void StaticData::HintTable_Init_Exclude_Overworld() {
|
void StaticData::HintTable_Init_Exclude_Overworld() {
|
||||||
|
// clang-format off
|
||||||
|
|
||||||
hintTextTable[RHT_KF_KOKIRI_SWORD_CHEST] = HintText(CustomMessage("They say that the #hidden treasure of the Kokiri# is #[[1]]#.",
|
hintTextTable[RHT_KF_KOKIRI_SWORD_CHEST] = HintText(CustomMessage("They say that the #hidden treasure of the Kokiri# is #[[1]]#.",
|
||||||
/*german*/ "Man erzählt sich, daß der #versteckte Schatz der Kokiri# #[[1]]# sei.",
|
/*german*/ "Man erzählt sich, daß der #versteckte Schatz der Kokiri# #[[1]]# sei.",
|
||||||
|
@ -1954,5 +1955,6 @@ void StaticData::HintTable_Init_Exclude_Overworld() {
|
||||||
|
|
||||||
hintTextTable[RHT_GRAVEYARD_ROYAL_FAMILYS_TOMB_SUN_FAIRY] = HintText(CustomMessage("They say that #calling the sun in a royal tomb# reveals #[[1]]#.", { QM_RED, QM_GREEN }));
|
hintTextTable[RHT_GRAVEYARD_ROYAL_FAMILYS_TOMB_SUN_FAIRY] = HintText(CustomMessage("They say that #calling the sun in a royal tomb# reveals #[[1]]#.", { QM_RED, QM_GREEN }));
|
||||||
|
|
||||||
|
// clang-format on
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,8 @@
|
||||||
namespace Rando {
|
namespace Rando {
|
||||||
|
|
||||||
void StaticData::HintTable_Init_Item() {
|
void StaticData::HintTable_Init_Item() {
|
||||||
|
// clang-format off
|
||||||
|
|
||||||
hintTextTable[RHT_KOKIRI_SWORD] = HintText(CustomMessage("the Kokiri Sword", /*german*/"das Kokiri-Schwert", /*french*/"l'Épée Kokiri"),
|
hintTextTable[RHT_KOKIRI_SWORD] = HintText(CustomMessage("the Kokiri Sword", /*german*/"das Kokiri-Schwert", /*french*/"l'Épée Kokiri"),
|
||||||
// /*spanish*/la Espada Kokiri
|
// /*spanish*/la Espada Kokiri
|
||||||
{
|
{
|
||||||
|
@ -2169,5 +2170,6 @@ void StaticData::HintTable_Init_Item() {
|
||||||
hintTextTable[RHT_MYSTERIOUS_ITEM_CAPITAL] = HintText(CustomMessage("Mysterious Item", /*german*/"Mysteriöser Gegenstand", /*french*/"Objet Mystérieux"));
|
hintTextTable[RHT_MYSTERIOUS_ITEM_CAPITAL] = HintText(CustomMessage("Mysterious Item", /*german*/"Mysteriöser Gegenstand", /*french*/"Objet Mystérieux"));
|
||||||
// /*spanish*/Algo Misterioso
|
// /*spanish*/Algo Misterioso
|
||||||
|
|
||||||
|
// clang-format on
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -149,7 +149,7 @@ const std::array<RandomizerGet, 44> easyItems = {
|
||||||
RG_PIECE_OF_HEART,
|
RG_PIECE_OF_HEART,
|
||||||
};
|
};
|
||||||
const std::array<RandomizerGet, 43> normalItems = {
|
const std::array<RandomizerGet, 43> normalItems = {
|
||||||
RG_PIECE_OF_HEART, //35 pieces of heart
|
// 35 pieces of heart
|
||||||
RG_PIECE_OF_HEART,
|
RG_PIECE_OF_HEART,
|
||||||
RG_PIECE_OF_HEART,
|
RG_PIECE_OF_HEART,
|
||||||
RG_PIECE_OF_HEART,
|
RG_PIECE_OF_HEART,
|
||||||
|
@ -184,7 +184,9 @@ const std::array<RandomizerGet, 43> normalItems = {
|
||||||
RG_PIECE_OF_HEART,
|
RG_PIECE_OF_HEART,
|
||||||
RG_PIECE_OF_HEART,
|
RG_PIECE_OF_HEART,
|
||||||
RG_PIECE_OF_HEART,
|
RG_PIECE_OF_HEART,
|
||||||
RG_HEART_CONTAINER, //8 heart containers
|
RG_PIECE_OF_HEART,
|
||||||
|
// 8 heart containers
|
||||||
|
RG_HEART_CONTAINER,
|
||||||
RG_HEART_CONTAINER,
|
RG_HEART_CONTAINER,
|
||||||
RG_HEART_CONTAINER,
|
RG_HEART_CONTAINER,
|
||||||
RG_HEART_CONTAINER,
|
RG_HEART_CONTAINER,
|
||||||
|
|
|
@ -41,7 +41,7 @@ typedef struct {
|
||||||
|
|
||||||
typedef enum PlandoTabs {
|
typedef enum PlandoTabs {
|
||||||
TAB_HINTS,
|
TAB_HINTS,
|
||||||
TAB_LOCATIONS
|
TAB_LOCATIONS,
|
||||||
} PlandoTabs;
|
} PlandoTabs;
|
||||||
|
|
||||||
typedef enum PlandoHints {
|
typedef enum PlandoHints {
|
||||||
|
@ -49,4 +49,4 @@ typedef enum PlandoHints {
|
||||||
HINT_ALL,
|
HINT_ALL,
|
||||||
} PlandoHints;
|
} PlandoHints;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -59,6 +59,7 @@ void RegisterShuffleCows() {
|
||||||
static RegisterShipInitFunc initFunc(RegisterShuffleCows, { "IS_RANDO" });
|
static RegisterShipInitFunc initFunc(RegisterShuffleCows, { "IS_RANDO" });
|
||||||
|
|
||||||
void Rando::StaticData::RegisterCowLocations() {
|
void Rando::StaticData::RegisterCowLocations() {
|
||||||
|
// clang-format-off
|
||||||
locationTable[RC_KF_LINKS_HOUSE_COW] = Location::Base(RC_KF_LINKS_HOUSE_COW, RCQUEST_BOTH, RCTYPE_COW, ACTOR_EN_COW, SCENE_LINKS_HOUSE, 0x00, "Links House Cow", RHT_KF_LINKS_HOUSE_COW, RG_MILK, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COWS_MILKED_KF_LINKS_HOUSE_COW));
|
locationTable[RC_KF_LINKS_HOUSE_COW] = Location::Base(RC_KF_LINKS_HOUSE_COW, RCQUEST_BOTH, RCTYPE_COW, ACTOR_EN_COW, SCENE_LINKS_HOUSE, 0x00, "Links House Cow", RHT_KF_LINKS_HOUSE_COW, RG_MILK, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COWS_MILKED_KF_LINKS_HOUSE_COW));
|
||||||
locationTable[RC_HF_COW_GROTTO_COW] = Location::Base(RC_HF_COW_GROTTO_COW, RCQUEST_BOTH, RCTYPE_COW, RCAREA_HYRULE_FIELD, ACTOR_EN_COW, SCENE_GROTTOS, TWO_ACTOR_PARAMS(3485, -291), "Cow Grotto Cow", RHT_HF_COW_GROTTO_COW, RG_MILK, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COWS_MILKED_HF_COW_GROTTO_COW));
|
locationTable[RC_HF_COW_GROTTO_COW] = Location::Base(RC_HF_COW_GROTTO_COW, RCQUEST_BOTH, RCTYPE_COW, RCAREA_HYRULE_FIELD, ACTOR_EN_COW, SCENE_GROTTOS, TWO_ACTOR_PARAMS(3485, -291), "Cow Grotto Cow", RHT_HF_COW_GROTTO_COW, RG_MILK, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COWS_MILKED_HF_COW_GROTTO_COW));
|
||||||
locationTable[RC_LLR_STABLES_LEFT_COW] = Location::Base(RC_LLR_STABLES_LEFT_COW, RCQUEST_BOTH, RCTYPE_COW, ACTOR_EN_COW, SCENE_STABLE, TWO_ACTOR_PARAMS(-122, -254), "Stables Left Cow", RHT_LLR_STABLES_LEFT_COW, RG_MILK, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COWS_MILKED_LLR_STABLES_LEFT_COW));
|
locationTable[RC_LLR_STABLES_LEFT_COW] = Location::Base(RC_LLR_STABLES_LEFT_COW, RCQUEST_BOTH, RCTYPE_COW, ACTOR_EN_COW, SCENE_STABLE, TWO_ACTOR_PARAMS(-122, -254), "Stables Left Cow", RHT_LLR_STABLES_LEFT_COW, RG_MILK, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COWS_MILKED_LLR_STABLES_LEFT_COW));
|
||||||
|
@ -69,6 +70,8 @@ void Rando::StaticData::RegisterCowLocations() {
|
||||||
locationTable[RC_DMT_COW_GROTTO_COW] = Location::Base(RC_DMT_COW_GROTTO_COW, RCQUEST_BOTH, RCTYPE_COW, RCAREA_DEATH_MOUNTAIN_TRAIL, ACTOR_EN_COW, SCENE_GROTTOS, TWO_ACTOR_PARAMS(2444, -471), "Cow Grotto Cow", RHT_DMT_COW_GROTTO_COW, RG_MILK, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COWS_MILKED_DMT_COW_GROTTO_COW));
|
locationTable[RC_DMT_COW_GROTTO_COW] = Location::Base(RC_DMT_COW_GROTTO_COW, RCQUEST_BOTH, RCTYPE_COW, RCAREA_DEATH_MOUNTAIN_TRAIL, ACTOR_EN_COW, SCENE_GROTTOS, TWO_ACTOR_PARAMS(2444, -471), "Cow Grotto Cow", RHT_DMT_COW_GROTTO_COW, RG_MILK, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COWS_MILKED_DMT_COW_GROTTO_COW));
|
||||||
locationTable[RC_GV_COW] = Location::Base(RC_GV_COW, RCQUEST_BOTH, RCTYPE_COW, ACTOR_EN_COW, SCENE_GERUDO_VALLEY, 0x00, "Cow", RHT_GV_COW, RG_MILK, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COWS_MILKED_GV_COW));
|
locationTable[RC_GV_COW] = Location::Base(RC_GV_COW, RCQUEST_BOTH, RCTYPE_COW, ACTOR_EN_COW, SCENE_GERUDO_VALLEY, 0x00, "Cow", RHT_GV_COW, RG_MILK, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COWS_MILKED_GV_COW));
|
||||||
locationTable[RC_JABU_JABUS_BELLY_MQ_COW] = Location::Base(RC_JABU_JABUS_BELLY_MQ_COW, RCQUEST_MQ, RCTYPE_COW, ACTOR_EN_COW, SCENE_JABU_JABU, 0x00, "MQ Cow", RHT_JABU_JABUS_BELLY_MQ_COW, RG_MILK, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COWS_MILKED_JABU_JABUS_BELLY_MQ_COW));
|
locationTable[RC_JABU_JABUS_BELLY_MQ_COW] = Location::Base(RC_JABU_JABUS_BELLY_MQ_COW, RCQUEST_MQ, RCTYPE_COW, ACTOR_EN_COW, SCENE_JABU_JABU, 0x00, "MQ Cow", RHT_JABU_JABUS_BELLY_MQ_COW, RG_MILK, SpoilerCollectionCheck::RandomizerInf(RAND_INF_COWS_MILKED_JABU_JABUS_BELLY_MQ_COW));
|
||||||
|
|
||||||
|
// clang-format-on
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterShipInitFunc registerFunc(Rando::StaticData::RegisterCowLocations);
|
static RegisterShipInitFunc registerFunc(Rando::StaticData::RegisterCowLocations);
|
||||||
|
|
|
@ -185,6 +185,7 @@ void ShuffleFairies_UnregisterHooks() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Rando::StaticData::RegisterFairyLocations() {
|
void Rando::StaticData::RegisterFairyLocations() {
|
||||||
|
// clang-format off
|
||||||
locationTable[RC_SFM_FAIRY_GROTTO_FAIRY_1] = Location::Fairy(RC_SFM_FAIRY_GROTTO_FAIRY_1, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_FAIRYS_FOUNTAIN, 0x1800, "Grotto Fairy 1", RHT_SFM_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SFM_FAIRY_GROTTO_FAIRY_1));
|
locationTable[RC_SFM_FAIRY_GROTTO_FAIRY_1] = Location::Fairy(RC_SFM_FAIRY_GROTTO_FAIRY_1, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_FAIRYS_FOUNTAIN, 0x1800, "Grotto Fairy 1", RHT_SFM_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SFM_FAIRY_GROTTO_FAIRY_1));
|
||||||
locationTable[RC_SFM_FAIRY_GROTTO_FAIRY_2] = Location::Fairy(RC_SFM_FAIRY_GROTTO_FAIRY_2, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_FAIRYS_FOUNTAIN, 0x1801, "Grotto Fairy 2", RHT_SFM_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SFM_FAIRY_GROTTO_FAIRY_2));
|
locationTable[RC_SFM_FAIRY_GROTTO_FAIRY_2] = Location::Fairy(RC_SFM_FAIRY_GROTTO_FAIRY_2, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_FAIRYS_FOUNTAIN, 0x1801, "Grotto Fairy 2", RHT_SFM_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SFM_FAIRY_GROTTO_FAIRY_2));
|
||||||
locationTable[RC_SFM_FAIRY_GROTTO_FAIRY_3] = Location::Fairy(RC_SFM_FAIRY_GROTTO_FAIRY_3, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_FAIRYS_FOUNTAIN, 0x1802, "Grotto Fairy 3", RHT_SFM_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SFM_FAIRY_GROTTO_FAIRY_3));
|
locationTable[RC_SFM_FAIRY_GROTTO_FAIRY_3] = Location::Fairy(RC_SFM_FAIRY_GROTTO_FAIRY_3, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_FAIRYS_FOUNTAIN, 0x1802, "Grotto Fairy 3", RHT_SFM_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SFM_FAIRY_GROTTO_FAIRY_3));
|
||||||
|
@ -404,6 +405,8 @@ void Rando::StaticData::RegisterFairyLocations() {
|
||||||
locationTable[RC_SHADOW_TEMPLE_MQ_WIND_HINT_SUN_FAIRY] = Location::Fairy(RC_SHADOW_TEMPLE_MQ_WIND_HINT_SUN_FAIRY, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(0x1000, -127), "MQ Wind Hint Sun's Song Fairy", RHT_SHADOW_TEMPLE_WIND_HINT_SUN_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_WIND_HINT_SUN_FAIRY));
|
locationTable[RC_SHADOW_TEMPLE_MQ_WIND_HINT_SUN_FAIRY] = Location::Fairy(RC_SHADOW_TEMPLE_MQ_WIND_HINT_SUN_FAIRY, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(0x1000, -127), "MQ Wind Hint Sun's Song Fairy", RHT_SHADOW_TEMPLE_WIND_HINT_SUN_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_WIND_HINT_SUN_FAIRY));
|
||||||
locationTable[RC_BOTTOM_OF_THE_WELL_MQ_CELL_SUN_FAIRY] = Location::Fairy(RC_BOTTOM_OF_THE_WELL_MQ_CELL_SUN_FAIRY, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(0x1000, -437), "MQ East Cell Sun's Song Fairy", RHT_BOTTOM_OF_THE_WELL_MQ_CELL_SUN_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_CELL_SUN_FAIRY));
|
locationTable[RC_BOTTOM_OF_THE_WELL_MQ_CELL_SUN_FAIRY] = Location::Fairy(RC_BOTTOM_OF_THE_WELL_MQ_CELL_SUN_FAIRY, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(0x1000, -437), "MQ East Cell Sun's Song Fairy", RHT_BOTTOM_OF_THE_WELL_MQ_CELL_SUN_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_CELL_SUN_FAIRY));
|
||||||
locationTable[RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY] = Location::Fairy(RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(0x1000, -1458), "MQ Basement Sun's Song Fairy", RHT_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY));
|
locationTable[RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY] = Location::Fairy(RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(0x1000, -1458), "MQ Basement Sun's Song Fairy", RHT_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY));
|
||||||
|
|
||||||
|
// clang-format on
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterShipInitFunc initFunc(Rando::StaticData::RegisterFairyLocations);
|
static RegisterShipInitFunc initFunc(Rando::StaticData::RegisterFairyLocations);
|
||||||
|
|
|
@ -45,6 +45,7 @@ void ShuffleFreestanding_OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* sh
|
||||||
}
|
}
|
||||||
|
|
||||||
void Rando::StaticData::RegisterFreestandingLocations() {
|
void Rando::StaticData::RegisterFreestandingLocations() {
|
||||||
|
// clang-format off
|
||||||
locationTable[RC_KF_BOULDER_RUPEE_2] = Location::Collectable(RC_KF_BOULDER_RUPEE_2, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-712, 1857), "Boulder Maze Second Rupee", RHT_KOKIRI_FOREST_RUPEE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BOULDER_RUPEE_2));
|
locationTable[RC_KF_BOULDER_RUPEE_2] = Location::Collectable(RC_KF_BOULDER_RUPEE_2, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-712, 1857), "Boulder Maze Second Rupee", RHT_KOKIRI_FOREST_RUPEE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BOULDER_RUPEE_2));
|
||||||
locationTable[RC_KF_BOULDER_RUPEE_1] = Location::Collectable(RC_KF_BOULDER_RUPEE_1, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-1009, 1556), "Boulder Maze First Rupee", RHT_KOKIRI_FOREST_RUPEE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BOULDER_RUPEE_1));
|
locationTable[RC_KF_BOULDER_RUPEE_1] = Location::Collectable(RC_KF_BOULDER_RUPEE_1, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-1009, 1556), "Boulder Maze First Rupee", RHT_KOKIRI_FOREST_RUPEE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BOULDER_RUPEE_1));
|
||||||
locationTable[RC_KF_BRIDGE_RUPEE] = Location::Collectable(RC_KF_BRIDGE_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(2, -45), "Bridge Rupee", RHT_KOKIRI_FOREST_RUPEE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BRIDGE_RUPEE));
|
locationTable[RC_KF_BRIDGE_RUPEE] = Location::Collectable(RC_KF_BRIDGE_RUPEE, RCQUEST_BOTH, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(2, -45), "Bridge Rupee", RHT_KOKIRI_FOREST_RUPEE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BRIDGE_RUPEE));
|
||||||
|
@ -275,6 +276,8 @@ void Rando::StaticData::RegisterFreestandingLocations() {
|
||||||
locationTable[RC_GANONS_CASTLE_MQ_WATER_TRIAL_HEART] = Location::Collectable(RC_GANONS_CASTLE_MQ_WATER_TRIAL_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1743, -528), "MQ Water Trial Heart", RHT_GANONS_CASTLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_WATER_TRIAL_HEART));
|
locationTable[RC_GANONS_CASTLE_MQ_WATER_TRIAL_HEART] = Location::Collectable(RC_GANONS_CASTLE_MQ_WATER_TRIAL_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1743, -528), "MQ Water Trial Heart", RHT_GANONS_CASTLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_WATER_TRIAL_HEART));
|
||||||
locationTable[RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_RIGHT_HEART] = Location::Collectable(RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_RIGHT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2506, -1096), "MQ Light Trial Right Heart", RHT_GANONS_CASTLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_LIGHT_TRIAL_RIGHT_HEART));
|
locationTable[RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_RIGHT_HEART] = Location::Collectable(RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_RIGHT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2506, -1096), "MQ Light Trial Right Heart", RHT_GANONS_CASTLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_LIGHT_TRIAL_RIGHT_HEART));
|
||||||
locationTable[RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_LEFT_HEART] = Location::Collectable(RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_LEFT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2655, -549), "MQ Light Trial Left Heart", RHT_GANONS_CASTLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_LIGHT_TRIAL_LEFT_HEART));
|
locationTable[RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_LEFT_HEART] = Location::Collectable(RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_LEFT_HEART, RCQUEST_MQ, RCTYPE_FREESTANDING, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2655, -549), "MQ Light Trial Left Heart", RHT_GANONS_CASTLE_HEART, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_LIGHT_TRIAL_LEFT_HEART));
|
||||||
|
|
||||||
|
// clang-format on
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterShipInitFunc initFunc(Rando::StaticData::RegisterFreestandingLocations);
|
static RegisterShipInitFunc initFunc(Rando::StaticData::RegisterFreestandingLocations);
|
||||||
|
|
|
@ -95,6 +95,7 @@ void ShufflePots_OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va
|
||||||
}
|
}
|
||||||
|
|
||||||
void Rando::StaticData::RegisterPotLocations() {
|
void Rando::StaticData::RegisterPotLocations() {
|
||||||
|
// clang-format off
|
||||||
// Overworld Pots
|
// Overworld Pots
|
||||||
// Randomizer Check Randomizer Check Quest Area Scene ID Params Short Name Hint Text Key Vanilla Spoiler Collection Check
|
// Randomizer Check Randomizer Check Quest Area Scene ID Params Short Name Hint Text Key Vanilla Spoiler Collection Check
|
||||||
locationTable[RC_KF_LINKS_HOUSE_POT] = Location::Pot(RC_KF_LINKS_HOUSE_POT, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_LINKS_HOUSE, TWO_ACTOR_PARAMS(-118, 51), "Links House Pot", RHT_POT_KOKIRI_FOREST, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_LINKS_HOUSE_POT));
|
locationTable[RC_KF_LINKS_HOUSE_POT] = Location::Pot(RC_KF_LINKS_HOUSE_POT, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_LINKS_HOUSE, TWO_ACTOR_PARAMS(-118, 51), "Links House Pot", RHT_POT_KOKIRI_FOREST, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_LINKS_HOUSE_POT));
|
||||||
|
@ -643,6 +644,8 @@ void Rando::StaticData::RegisterPotLocations() {
|
||||||
locationTable[RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_POT_2] = Location::Pot(RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_POT_2, RCQUEST_MQ, RCAREA_GERUDO_TRAINING_GROUND, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-324, -177), "MQ Lobby Left Pot 2", RHT_POT_GERUDO_TRAINING_GROUND, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_POT_2));
|
locationTable[RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_POT_2] = Location::Pot(RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_POT_2, RCQUEST_MQ, RCAREA_GERUDO_TRAINING_GROUND, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-324, -177), "MQ Lobby Left Pot 2", RHT_POT_GERUDO_TRAINING_GROUND, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_POT_2));
|
||||||
locationTable[RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_1] = Location::Pot(RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_1, RCQUEST_MQ, RCAREA_GERUDO_TRAINING_GROUND, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(199, -79), "MQ Lobby Right Pot 1", RHT_POT_GERUDO_TRAINING_GROUND, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_1));
|
locationTable[RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_1] = Location::Pot(RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_1, RCQUEST_MQ, RCAREA_GERUDO_TRAINING_GROUND, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(199, -79), "MQ Lobby Right Pot 1", RHT_POT_GERUDO_TRAINING_GROUND, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_1));
|
||||||
locationTable[RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_2] = Location::Pot(RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_2, RCQUEST_MQ, RCAREA_GERUDO_TRAINING_GROUND, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(197, -179), "MQ Lobby Right Pot 2", RHT_POT_GERUDO_TRAINING_GROUND, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_2));
|
locationTable[RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_2] = Location::Pot(RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_2, RCQUEST_MQ, RCAREA_GERUDO_TRAINING_GROUND, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(197, -179), "MQ Lobby Right Pot 2", RHT_POT_GERUDO_TRAINING_GROUND, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_2));
|
||||||
|
|
||||||
|
// clang-format on
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterShipInitFunc initFunc(Rando::StaticData::RegisterPotLocations);
|
static RegisterShipInitFunc initFunc(Rando::StaticData::RegisterPotLocations);
|
||||||
|
|
|
@ -856,6 +856,7 @@ int EntranceShuffler::ShuffleAllEntrances() {
|
||||||
mCurNumRandomizedEntrances = 0;
|
mCurNumRandomizedEntrances = 0;
|
||||||
|
|
||||||
std::vector<EntranceInfoPair> entranceShuffleTable = {
|
std::vector<EntranceInfoPair> entranceShuffleTable = {
|
||||||
|
// clang-format off
|
||||||
// Type Parent Region Connected Region Index
|
// Type Parent Region Connected Region Index
|
||||||
{ { EntranceType::Dungeon, RR_KF_OUTSIDE_DEKU_TREE, RR_DEKU_TREE_ENTRYWAY, ENTR_DEKU_TREE_ENTRANCE },
|
{ { EntranceType::Dungeon, RR_KF_OUTSIDE_DEKU_TREE, RR_DEKU_TREE_ENTRYWAY, ENTR_DEKU_TREE_ENTRANCE },
|
||||||
{ EntranceType::Dungeon, RR_DEKU_TREE_ENTRYWAY, RR_KF_OUTSIDE_DEKU_TREE, ENTR_KOKIRI_FOREST_OUTSIDE_DEKU_TREE } },
|
{ EntranceType::Dungeon, RR_DEKU_TREE_ENTRYWAY, RR_KF_OUTSIDE_DEKU_TREE, ENTR_KOKIRI_FOREST_OUTSIDE_DEKU_TREE } },
|
||||||
|
@ -1161,6 +1162,7 @@ int EntranceShuffler::ShuffleAllEntrances() {
|
||||||
NO_RETURN_ENTRANCE },
|
NO_RETURN_ENTRANCE },
|
||||||
{ { EntranceType::BlueWarp, RR_SHADOW_TEMPLE_BOSS_ROOM, RR_GRAVEYARD_WARP_PAD_REGION, ENTR_GRAVEYARD_SHADOW_TEMPLE_BLUE_WARP },
|
{ { EntranceType::BlueWarp, RR_SHADOW_TEMPLE_BOSS_ROOM, RR_GRAVEYARD_WARP_PAD_REGION, ENTR_GRAVEYARD_SHADOW_TEMPLE_BLUE_WARP },
|
||||||
NO_RETURN_ENTRANCE },
|
NO_RETURN_ENTRANCE },
|
||||||
|
// clang-format on
|
||||||
};
|
};
|
||||||
|
|
||||||
std::map<std::string, PriorityEntrance> priorityEntranceTable = {
|
std::map<std::string, PriorityEntrance> priorityEntranceTable = {
|
||||||
|
|
|
@ -580,6 +580,7 @@ extern "C" {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Rando::StaticData::RegisterFishLocations() {
|
void Rando::StaticData::RegisterFishLocations() {
|
||||||
|
// clang-format off
|
||||||
// Fishing Pond
|
// Fishing Pond
|
||||||
locationTable[RC_LH_CHILD_FISH_1] = Location::Fish(RC_LH_CHILD_FISH_1, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 100, RAND_INF_CHILD_FISH_1, "Child Pond Fish 1", RHT_LH_POND_FISH, RG_NONE);
|
locationTable[RC_LH_CHILD_FISH_1] = Location::Fish(RC_LH_CHILD_FISH_1, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 100, RAND_INF_CHILD_FISH_1, "Child Pond Fish 1", RHT_LH_POND_FISH, RG_NONE);
|
||||||
locationTable[RC_LH_CHILD_FISH_2] = Location::Fish(RC_LH_CHILD_FISH_2, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 101, RAND_INF_CHILD_FISH_2, "Child Pond Fish 2", RHT_LH_POND_FISH, RG_NONE);
|
locationTable[RC_LH_CHILD_FISH_2] = Location::Fish(RC_LH_CHILD_FISH_2, RCQUEST_BOTH, ACTOR_FISHING, SCENE_FISHING_POND, 101, RAND_INF_CHILD_FISH_2, "Child Pond Fish 2", RHT_LH_POND_FISH, RG_NONE);
|
||||||
|
@ -630,6 +631,7 @@ void Rando::StaticData::RegisterFishLocations() {
|
||||||
locationTable[RC_ZD_FISH_3] = Location::Fish(RC_ZD_FISH_3, RCQUEST_BOTH, ACTOR_EN_FISH, SCENE_ZORAS_DOMAIN, -1 ^ 2, RAND_INF_ZD_FISH_3, "Fish 3", RHT_ZD_FISH, RG_FISH);
|
locationTable[RC_ZD_FISH_3] = Location::Fish(RC_ZD_FISH_3, RCQUEST_BOTH, ACTOR_EN_FISH, SCENE_ZORAS_DOMAIN, -1 ^ 2, RAND_INF_ZD_FISH_3, "Fish 3", RHT_ZD_FISH, RG_FISH);
|
||||||
locationTable[RC_ZD_FISH_4] = Location::Fish(RC_ZD_FISH_4, RCQUEST_BOTH, ACTOR_EN_FISH, SCENE_ZORAS_DOMAIN, -1 ^ 3, RAND_INF_ZD_FISH_4, "Fish 4", RHT_ZD_FISH, RG_FISH);
|
locationTable[RC_ZD_FISH_4] = Location::Fish(RC_ZD_FISH_4, RCQUEST_BOTH, ACTOR_EN_FISH, SCENE_ZORAS_DOMAIN, -1 ^ 3, RAND_INF_ZD_FISH_4, "Fish 4", RHT_ZD_FISH, RG_FISH);
|
||||||
locationTable[RC_ZD_FISH_5] = Location::Fish(RC_ZD_FISH_5, RCQUEST_BOTH, ACTOR_EN_FISH, SCENE_ZORAS_DOMAIN, -1 ^ 4, RAND_INF_ZD_FISH_5, "Fish 5", RHT_ZD_FISH, RG_FISH);
|
locationTable[RC_ZD_FISH_5] = Location::Fish(RC_ZD_FISH_5, RCQUEST_BOTH, ACTOR_EN_FISH, SCENE_ZORAS_DOMAIN, -1 ^ 4, RAND_INF_ZD_FISH_5, "Fish 5", RHT_ZD_FISH, RG_FISH);
|
||||||
|
// clang-format on
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterShipInitFunc initFunc(Rando::StaticData::RegisterFishLocations);
|
static RegisterShipInitFunc initFunc(Rando::StaticData::RegisterFishLocations);
|
||||||
|
|
|
@ -14,7 +14,7 @@ typedef struct {
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
FSO_SOURCE_RANDO,
|
FSO_SOURCE_RANDO,
|
||||||
FSO_SOURCE_CVARS
|
FSO_SOURCE_CVARS,
|
||||||
} FishsanityOptionsSource;
|
} FishsanityOptionsSource;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
|
|
@ -2047,15 +2047,15 @@ void RandomizerOnActorInitHandler(void* actorRef) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (
|
// If child is in the adult shooting gallery or adult in the child shooting gallery, then despawn the shooting
|
||||||
// If child is in the adult shooting gallery or adult in the child shooting gallery, then despawn the shooting gallery man
|
// gallery man
|
||||||
actor->id == ACTOR_EN_SYATEKI_MAN &&
|
if (actor->id == ACTOR_EN_SYATEKI_MAN && RAND_GET_OPTION(RSK_SHUFFLE_INTERIOR_ENTRANCES) &&
|
||||||
RAND_GET_OPTION(RSK_SHUFFLE_INTERIOR_ENTRANCES) &&
|
((LINK_IS_CHILD &&
|
||||||
(
|
// Kakariko Village -> Adult Shooting Gallery, index 003B in the entrance table
|
||||||
(LINK_IS_CHILD && Entrance_SceneAndSpawnAre(SCENE_SHOOTING_GALLERY, 0x00)) || //Kakariko Village -> Adult Shooting Gallery, index 003B in the entrance table
|
Entrance_SceneAndSpawnAre(SCENE_SHOOTING_GALLERY, 0x00)) ||
|
||||||
(LINK_IS_ADULT && Entrance_SceneAndSpawnAre(SCENE_SHOOTING_GALLERY, 0x01)) //Market -> Child Shooting Gallery, index 016D in the entrance table
|
(LINK_IS_ADULT &&
|
||||||
)
|
// Market -> Child Shooting Gallery, index 016D in the entrance table
|
||||||
) {
|
Entrance_SceneAndSpawnAre(SCENE_SHOOTING_GALLERY, 0x01)))) {
|
||||||
Actor_Kill(actor);
|
Actor_Kill(actor);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,6 +12,8 @@ std::unordered_map<std::string, RandomizerGet> Rando::StaticData::itemNameToEnum
|
||||||
|
|
||||||
void Rando::StaticData::InitItemTable() {
|
void Rando::StaticData::InitItemTable() {
|
||||||
auto logic = Context::GetInstance()->GetLogic();
|
auto logic = Context::GetInstance()->GetLogic();
|
||||||
|
|
||||||
|
// clang-format off
|
||||||
itemTable[RG_NONE] = Item(RG_NONE, Text{ "No Item", "Rien", "Kein Artikel" }, ITEMTYPE_EVENT, GI_RUPEE_GREEN, false, LOGIC_NONE, RHT_NONE, ITEM_NONE, 0, 0, 0, 0, 0, ITEM_CATEGORY_JUNK, MOD_NONE);
|
itemTable[RG_NONE] = Item(RG_NONE, Text{ "No Item", "Rien", "Kein Artikel" }, ITEMTYPE_EVENT, GI_RUPEE_GREEN, false, LOGIC_NONE, RHT_NONE, ITEM_NONE, 0, 0, 0, 0, 0, ITEM_CATEGORY_JUNK, MOD_NONE);
|
||||||
// Randomizer Get Randomizer Get Name Text Type Get Item ID Adv. Logic Value Hint Text Key Item ID Object ID Draw ID Text ID field Chest Animation Item Category Mod Index
|
// Randomizer Get Randomizer Get Name Text Type Get Item ID Adv. Logic Value Hint Text Key Item ID Object ID Draw ID Text ID field Chest Animation Item Category Mod Index
|
||||||
itemTable[RG_KOKIRI_SWORD] = Item(RG_KOKIRI_SWORD, Text{ "Kokiri Sword", "Épée Kokiri", "Kokiri-Schwert" }, ITEMTYPE_EQUIP, GI_SWORD_KOKIRI, true, LOGIC_KOKIRI_SWORD, RHT_KOKIRI_SWORD, ITEM_SWORD_KOKIRI, OBJECT_GI_SWORD_1, GID_SWORD_KOKIRI, 0xA4, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE);
|
itemTable[RG_KOKIRI_SWORD] = Item(RG_KOKIRI_SWORD, Text{ "Kokiri Sword", "Épée Kokiri", "Kokiri-Schwert" }, ITEMTYPE_EQUIP, GI_SWORD_KOKIRI, true, LOGIC_KOKIRI_SWORD, RHT_KOKIRI_SWORD, ITEM_SWORD_KOKIRI, OBJECT_GI_SWORD_1, GID_SWORD_KOKIRI, 0xA4, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE);
|
||||||
|
@ -402,6 +404,8 @@ void Rando::StaticData::InitItemTable() {
|
||||||
itemTable[RG_MAGIC_DOUBLE] = Item(RG_MAGIC_DOUBLE, Text{ "Enhanced Magic Meter", "Jauge de Magie améliorée", "Verbessertes Magisches Maß" }, ITEMTYPE_ITEM, 0x8A, true, LOGIC_PROGRESSIVE_MAGIC, RHT_MAGIC_DOUBLE, RG_MAGIC_DOUBLE, OBJECT_GI_MAGICPOT, GID_MAGIC_LARGE, 0xE8, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER);
|
itemTable[RG_MAGIC_DOUBLE] = Item(RG_MAGIC_DOUBLE, Text{ "Enhanced Magic Meter", "Jauge de Magie améliorée", "Verbessertes Magisches Maß" }, ITEMTYPE_ITEM, 0x8A, true, LOGIC_PROGRESSIVE_MAGIC, RHT_MAGIC_DOUBLE, RG_MAGIC_DOUBLE, OBJECT_GI_MAGICPOT, GID_MAGIC_LARGE, 0xE8, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_LESSER, MOD_RANDOMIZER);
|
||||||
itemTable[RG_TRIFORCE_PIECE] = Item(RG_TRIFORCE_PIECE, Text{ "Triforce Piece", "Triforce Piece", "Triforce-Fragment" }, ITEMTYPE_ITEM, 0xDF, true, LOGIC_TRIFORCE_PIECES, RHT_TRIFORCE_PIECE, RG_TRIFORCE_PIECE, OBJECT_GI_BOMB_2, GID_TRIFORCE_PIECE, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER);
|
itemTable[RG_TRIFORCE_PIECE] = Item(RG_TRIFORCE_PIECE, Text{ "Triforce Piece", "Triforce Piece", "Triforce-Fragment" }, ITEMTYPE_ITEM, 0xDF, true, LOGIC_TRIFORCE_PIECES, RHT_TRIFORCE_PIECE, RG_TRIFORCE_PIECE, OBJECT_GI_BOMB_2, GID_TRIFORCE_PIECE, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER);
|
||||||
|
|
||||||
|
// clang-format on
|
||||||
|
|
||||||
// Init itemNameToEnum
|
// Init itemNameToEnum
|
||||||
for (auto& item : itemTable) {
|
for (auto& item : itemTable) {
|
||||||
// Easiest way to filter out all the empty values from the array, since we still technically want the 0/RG_NONE
|
// Easiest way to filter out all the empty values from the array, since we still technically want the 0/RG_NONE
|
||||||
|
|
|
@ -261,6 +261,7 @@ void RegionTable_Init() {
|
||||||
//locations which appear in both MQ and Vanilla dungeons don't get set in both areas.
|
//locations which appear in both MQ and Vanilla dungeons don't get set in both areas.
|
||||||
areaTable.fill(Region("Invalid Region", "Invalid Region", {}, NO_DAY_NIGHT_CYCLE, {}, {}, {}));
|
areaTable.fill(Region("Invalid Region", "Invalid Region", {}, NO_DAY_NIGHT_CYCLE, {}, {}, {}));
|
||||||
|
|
||||||
|
// clang-format off
|
||||||
areaTable[RR_ROOT] = Region("Root", "", {RA_LINKS_POCKET}, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_ROOT] = Region("Root", "", {RA_LINKS_POCKET}, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&logic->KakarikoVillageGateOpen, []{return ctx->GetOption(RSK_KAK_GATE).Is(RO_KAK_GATE_OPEN);}),
|
EventAccess(&logic->KakarikoVillageGateOpen, []{return ctx->GetOption(RSK_KAK_GATE).Is(RO_KAK_GATE_OPEN);}),
|
||||||
|
@ -326,6 +327,8 @@ void RegionTable_Init() {
|
||||||
Entrance(RR_TEMPLE_OF_TIME, []{return true;}),
|
Entrance(RR_TEMPLE_OF_TIME, []{return true;}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// clang-format on
|
||||||
|
|
||||||
// Overworld
|
// Overworld
|
||||||
RegionTable_Init_KokiriForest();
|
RegionTable_Init_KokiriForest();
|
||||||
RegionTable_Init_LostWoods();
|
RegionTable_Init_LostWoods();
|
||||||
|
@ -571,4 +574,4 @@ Rando::Entrance* GetEntrance(const std::string name) {
|
||||||
}
|
}
|
||||||
|
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
using namespace Rando;
|
using namespace Rando;
|
||||||
|
|
||||||
void RegionTable_Init_BottomOfTheWell() {
|
void RegionTable_Init_BottomOfTheWell() {
|
||||||
|
// clang-format off
|
||||||
// Vanilla/MQ Decider
|
// Vanilla/MQ Decider
|
||||||
areaTable[RR_BOTTOM_OF_THE_WELL_ENTRYWAY] = Region("Bottom of the Well Entryway", "Bottom of the Well", {RA_BOTTOM_OF_THE_WELL}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_BOTTOM_OF_THE_WELL_ENTRYWAY] = Region("Bottom of the Well Entryway", "Bottom of the Well", {RA_BOTTOM_OF_THE_WELL}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
|
@ -293,4 +294,5 @@ void RegionTable_Init_BottomOfTheWell() {
|
||||||
});
|
});
|
||||||
|
|
||||||
#pragma endregion
|
#pragma endregion
|
||||||
}
|
// clang-format on
|
||||||
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
using namespace Rando;
|
using namespace Rando;
|
||||||
|
|
||||||
void RegionTable_Init_DekuTree() {
|
void RegionTable_Init_DekuTree() {
|
||||||
|
// clang-format off
|
||||||
// Vanilla/MQ Decider
|
// Vanilla/MQ Decider
|
||||||
areaTable[RR_DEKU_TREE_ENTRYWAY] = Region("Deku Tree Entryway", "Deku Tree", {RA_DEKU_TREE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_DEKU_TREE_ENTRYWAY] = Region("Deku Tree Entryway", "Deku Tree", {RA_DEKU_TREE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
|
@ -360,4 +361,6 @@ void RegionTable_Init_DekuTree() {
|
||||||
Entrance(RR_DEKU_TREE_BOSS_ENTRYWAY, []{return true;}),
|
Entrance(RR_DEKU_TREE_BOSS_ENTRYWAY, []{return true;}),
|
||||||
Entrance(RR_KF_OUTSIDE_DEKU_TREE, []{return logic->DekuTreeClear;}, false),
|
Entrance(RR_KF_OUTSIDE_DEKU_TREE, []{return logic->DekuTreeClear;}, false),
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
// clang-format on
|
||||||
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
using namespace Rando;
|
using namespace Rando;
|
||||||
|
|
||||||
void RegionTable_Init_DodongosCavern() {
|
void RegionTable_Init_DodongosCavern() {
|
||||||
|
// clang-format off
|
||||||
// Vanilla/MQ Decider
|
// Vanilla/MQ Decider
|
||||||
areaTable[RR_DODONGOS_CAVERN_ENTRYWAY] = Region("Dodongos Cavern Entryway", "Dodongos Cavern", {RA_DODONGOS_CAVERN}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_DODONGOS_CAVERN_ENTRYWAY] = Region("Dodongos Cavern Entryway", "Dodongos Cavern", {RA_DODONGOS_CAVERN}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
|
@ -541,4 +542,6 @@ void RegionTable_Init_DodongosCavern() {
|
||||||
Entrance(RR_DODONGOS_CAVERN_BOSS_ENTRYWAY, []{return true;}),
|
Entrance(RR_DODONGOS_CAVERN_BOSS_ENTRYWAY, []{return true;}),
|
||||||
Entrance(RR_DEATH_MOUNTAIN_TRAIL, []{return logic->DodongosCavernClear;}, false),
|
Entrance(RR_DEATH_MOUNTAIN_TRAIL, []{return logic->DodongosCavernClear;}, false),
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
// clang-format on
|
||||||
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
using namespace Rando;
|
using namespace Rando;
|
||||||
|
|
||||||
void RegionTable_Init_FireTemple() {
|
void RegionTable_Init_FireTemple() {
|
||||||
|
// clang-format off
|
||||||
// Vanilla/MQ Decider
|
// Vanilla/MQ Decider
|
||||||
areaTable[RR_FIRE_TEMPLE_ENTRYWAY] = Region("Fire Temple Entryway", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_FIRE_TEMPLE_ENTRYWAY] = Region("Fire Temple Entryway", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
|
@ -715,4 +716,6 @@ void RegionTable_Init_FireTemple() {
|
||||||
Entrance(RR_FIRE_TEMPLE_BOSS_ENTRYWAY, []{return false;}),
|
Entrance(RR_FIRE_TEMPLE_BOSS_ENTRYWAY, []{return false;}),
|
||||||
Entrance(RR_DMC_CENTRAL_LOCAL, []{return logic->FireTempleClear;}, false),
|
Entrance(RR_DMC_CENTRAL_LOCAL, []{return logic->FireTempleClear;}, false),
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
// clang-format on
|
||||||
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
using namespace Rando;
|
using namespace Rando;
|
||||||
|
|
||||||
void RegionTable_Init_ForestTemple() {
|
void RegionTable_Init_ForestTemple() {
|
||||||
|
// clang-format off
|
||||||
// Vanilla/MQ Decider
|
// Vanilla/MQ Decider
|
||||||
areaTable[RR_FOREST_TEMPLE_ENTRYWAY] = Region("Forest Temple Entryway", "Forest Temple", {RA_FOREST_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_FOREST_TEMPLE_ENTRYWAY] = Region("Forest Temple Entryway", "Forest Temple", {RA_FOREST_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
|
@ -610,4 +611,6 @@ void RegionTable_Init_ForestTemple() {
|
||||||
Entrance(RR_FOREST_TEMPLE_BOSS_ENTRYWAY, []{return false;}),
|
Entrance(RR_FOREST_TEMPLE_BOSS_ENTRYWAY, []{return false;}),
|
||||||
Entrance(RR_SACRED_FOREST_MEADOW, []{return logic->ForestTempleClear;}, false),
|
Entrance(RR_SACRED_FOREST_MEADOW, []{return logic->ForestTempleClear;}, false),
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
// clang-format on
|
||||||
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
using namespace Rando;
|
using namespace Rando;
|
||||||
|
|
||||||
void RegionTable_Init_GanonsCastle() {
|
void RegionTable_Init_GanonsCastle() {
|
||||||
|
// clang-format off
|
||||||
// Vanilla/MQ Decider
|
// Vanilla/MQ Decider
|
||||||
areaTable[RR_GANONS_CASTLE_ENTRYWAY] = Region("Ganon's Castle Entryway", "Ganon's Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_GANONS_CASTLE_ENTRYWAY] = Region("Ganon's Castle Entryway", "Ganon's Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
|
@ -511,4 +512,5 @@ void RegionTable_Init_GanonsCastle() {
|
||||||
}, {});
|
}, {});
|
||||||
|
|
||||||
#pragma endregion
|
#pragma endregion
|
||||||
}
|
// clang-format on
|
||||||
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
using namespace Rando;
|
using namespace Rando;
|
||||||
|
|
||||||
void RegionTable_Init_GerudoTrainingGround() {
|
void RegionTable_Init_GerudoTrainingGround() {
|
||||||
|
// clang-format off
|
||||||
// Vanilla/MQ Decider
|
// Vanilla/MQ Decider
|
||||||
areaTable[RR_GERUDO_TRAINING_GROUND_ENTRYWAY] = Region("Gerudo Training Ground Entryway", "Gerudo Training Ground", {RA_GERUDO_TRAINING_GROUND}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_GERUDO_TRAINING_GROUND_ENTRYWAY] = Region("Gerudo Training Ground Entryway", "Gerudo Training Ground", {RA_GERUDO_TRAINING_GROUND}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
|
@ -321,4 +322,5 @@ void RegionTable_Init_GerudoTrainingGround() {
|
||||||
});
|
});
|
||||||
|
|
||||||
#pragma endregion
|
#pragma endregion
|
||||||
}
|
// clang-format on
|
||||||
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
using namespace Rando;
|
using namespace Rando;
|
||||||
|
|
||||||
void RegionTable_Init_IceCavern() {
|
void RegionTable_Init_IceCavern() {
|
||||||
|
// clang-format off
|
||||||
// Vanilla/MQ Decider
|
// Vanilla/MQ Decider
|
||||||
areaTable[RR_ICE_CAVERN_ENTRYWAY] = Region("Ice Cavern Entryway", "Ice Cavern", {RA_ICE_CAVERN}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_ICE_CAVERN_ENTRYWAY] = Region("Ice Cavern Entryway", "Ice Cavern", {RA_ICE_CAVERN}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
|
@ -144,4 +145,5 @@ void RegionTable_Init_IceCavern() {
|
||||||
}, {});
|
}, {});
|
||||||
|
|
||||||
#pragma endregion
|
#pragma endregion
|
||||||
}
|
// clang-format on
|
||||||
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
using namespace Rando;
|
using namespace Rando;
|
||||||
|
|
||||||
void RegionTable_Init_JabuJabusBelly() {
|
void RegionTable_Init_JabuJabusBelly() {
|
||||||
|
// clang-format off
|
||||||
// Vanilla/MQ Decider
|
// Vanilla/MQ Decider
|
||||||
areaTable[RR_JABU_JABUS_BELLY_ENTRYWAY] = Region("Jabu Jabus Belly Entryway", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_JABU_JABUS_BELLY_ENTRYWAY] = Region("Jabu Jabus Belly Entryway", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
|
@ -356,4 +357,6 @@ void RegionTable_Init_JabuJabusBelly() {
|
||||||
Entrance(RR_JABU_JABUS_BELLY_BOSS_ENTRYWAY, []{return false;}),
|
Entrance(RR_JABU_JABUS_BELLY_BOSS_ENTRYWAY, []{return false;}),
|
||||||
Entrance(RR_ZORAS_FOUNTAIN, []{return logic->JabuJabusBellyClear;}, false),
|
Entrance(RR_ZORAS_FOUNTAIN, []{return logic->JabuJabusBellyClear;}, false),
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
// clang-format on
|
||||||
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
using namespace Rando;
|
using namespace Rando;
|
||||||
|
|
||||||
void RegionTable_Init_ShadowTemple() {
|
void RegionTable_Init_ShadowTemple() {
|
||||||
|
// clang-format off
|
||||||
// Vanilla/MQ Decider
|
// Vanilla/MQ Decider
|
||||||
areaTable[RR_SHADOW_TEMPLE_ENTRYWAY] = Region("Shadow Temple Entryway", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_SHADOW_TEMPLE_ENTRYWAY] = Region("Shadow Temple Entryway", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
|
@ -409,4 +410,6 @@ void RegionTable_Init_ShadowTemple() {
|
||||||
Entrance(RR_SHADOW_TEMPLE_BOSS_ENTRYWAY, []{return false;}),
|
Entrance(RR_SHADOW_TEMPLE_BOSS_ENTRYWAY, []{return false;}),
|
||||||
Entrance(RR_GRAVEYARD_WARP_PAD_REGION, []{return logic->ShadowTempleClear;}, false),
|
Entrance(RR_GRAVEYARD_WARP_PAD_REGION, []{return logic->ShadowTempleClear;}, false),
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
// clang-format on
|
||||||
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
using namespace Rando;
|
using namespace Rando;
|
||||||
|
|
||||||
void RegionTable_Init_SpiritTemple() {
|
void RegionTable_Init_SpiritTemple() {
|
||||||
|
// clang-format off
|
||||||
// Vanilla/MQ Decider
|
// Vanilla/MQ Decider
|
||||||
areaTable[RR_SPIRIT_TEMPLE_ENTRYWAY] = Region("Spirit Temple Entryway", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_SPIRIT_TEMPLE_ENTRYWAY] = Region("Spirit Temple Entryway", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
|
@ -554,4 +555,6 @@ void RegionTable_Init_SpiritTemple() {
|
||||||
Entrance(RR_SPIRIT_TEMPLE_BOSS_ENTRYWAY, []{return false;}),
|
Entrance(RR_SPIRIT_TEMPLE_BOSS_ENTRYWAY, []{return false;}),
|
||||||
Entrance(RR_DESERT_COLOSSUS, []{return logic->SpiritTempleClear;}, false),
|
Entrance(RR_DESERT_COLOSSUS, []{return logic->SpiritTempleClear;}, false),
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
// clang-format on
|
||||||
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
using namespace Rando;
|
using namespace Rando;
|
||||||
|
|
||||||
void RegionTable_Init_WaterTemple() {
|
void RegionTable_Init_WaterTemple() {
|
||||||
|
// clang-format off
|
||||||
// Vanilla/MQ Decider
|
// Vanilla/MQ Decider
|
||||||
areaTable[RR_WATER_TEMPLE_ENTRYWAY] = Region("Water Temple Entryway", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_WATER_TEMPLE_ENTRYWAY] = Region("Water Temple Entryway", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
|
@ -735,4 +736,6 @@ void RegionTable_Init_WaterTemple() {
|
||||||
Entrance(RR_WATER_TEMPLE_BOSS_ENTRYWAY, []{return false;}),
|
Entrance(RR_WATER_TEMPLE_BOSS_ENTRYWAY, []{return false;}),
|
||||||
Entrance(RR_LAKE_HYLIA, []{return logic->WaterTempleClear;}, false),
|
Entrance(RR_LAKE_HYLIA, []{return logic->WaterTempleClear;}, false),
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
// clang-format on
|
||||||
|
}
|
||||||
|
|
|
@ -9,6 +9,7 @@ using namespace Rando;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void RegionTable_Init_GerudoFortress() {
|
void RegionTable_Init_GerudoFortress() {
|
||||||
|
// clang-format off
|
||||||
areaTable[RR_GERUDO_FORTRESS] = Region("Gerudo Fortress", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_GERUDO_FORTRESS] = Region("Gerudo Fortress", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&logic->CarpenterRescue, []{return logic->CanFinishGerudoFortress();}),
|
EventAccess(&logic->CarpenterRescue, []{return logic->CanFinishGerudoFortress();}),
|
||||||
|
@ -78,4 +79,6 @@ void RegionTable_Init_GerudoFortress() {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_GERUDO_FORTRESS, []{return true;}),
|
Entrance(RR_GERUDO_FORTRESS, []{return true;}),
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
// clang-format on
|
||||||
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
using namespace Rando;
|
using namespace Rando;
|
||||||
|
|
||||||
void RegionTable_Init_CastleGrounds() {
|
void RegionTable_Init_CastleGrounds() {
|
||||||
|
// clang-format off
|
||||||
//With multi-area support {RA_CASTLE_GROUNDS} is not strictly required anymore, as any interior here could inherit both
|
//With multi-area support {RA_CASTLE_GROUNDS} is not strictly required anymore, as any interior here could inherit both
|
||||||
//{RA_HYRULE_CASTLE} and {RA_OUTSIDE_GANONS_CASTLE}, but a setting to merge the latter 2 into the former may be preferred
|
//{RA_HYRULE_CASTLE} and {RA_OUTSIDE_GANONS_CASTLE}, but a setting to merge the latter 2 into the former may be preferred
|
||||||
areaTable[RR_CASTLE_GROUNDS] = Region("Castle Grounds", "Castle Grounds", {RA_CASTLE_GROUNDS}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_CASTLE_GROUNDS] = Region("Castle Grounds", "Castle Grounds", {RA_CASTLE_GROUNDS}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
|
@ -114,4 +115,6 @@ void RegionTable_Init_CastleGrounds() {
|
||||||
Entrance(RR_GANONS_CASTLE_GROUNDS, []{return logic->BuiltRainbowBridge;}),
|
Entrance(RR_GANONS_CASTLE_GROUNDS, []{return logic->BuiltRainbowBridge;}),
|
||||||
Entrance(RR_GANONS_CASTLE_ENTRYWAY, []{return logic->IsAdult;}),
|
Entrance(RR_GANONS_CASTLE_ENTRYWAY, []{return logic->IsAdult;}),
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
// clang-format on
|
||||||
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
using namespace Rando;
|
using namespace Rando;
|
||||||
|
|
||||||
void RegionTable_Init_DeathMountainCrater() {
|
void RegionTable_Init_DeathMountainCrater() {
|
||||||
|
// clang-format off
|
||||||
areaTable[RR_DMC_UPPER_NEARBY] = Region("DMC Upper Nearby", "Death Mountain Crater", {RA_DEATH_MOUNTAIN_CRATER}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_DMC_UPPER_NEARBY] = Region("DMC Upper Nearby", "Death Mountain Crater", {RA_DEATH_MOUNTAIN_CRATER}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_DMC_UPPER_LOCAL, []{return logic->FireTimer() >= 48;}),
|
Entrance(RR_DMC_UPPER_LOCAL, []{return logic->FireTimer() >= 48;}),
|
||||||
|
@ -142,4 +143,6 @@ void RegionTable_Init_DeathMountainCrater() {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_DMC_CENTRAL_LOCAL, []{return logic->FireTimer() >= 48 && logic->CanUse(RG_DISTANT_SCARECROW);}),
|
Entrance(RR_DMC_CENTRAL_LOCAL, []{return logic->FireTimer() >= 48 && logic->CanUse(RG_DISTANT_SCARECROW);}),
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
// clang-format on
|
||||||
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
using namespace Rando;
|
using namespace Rando;
|
||||||
|
|
||||||
void RegionTable_Init_DeathMountainTrail() {
|
void RegionTable_Init_DeathMountainTrail() {
|
||||||
|
// clang-format off
|
||||||
areaTable[RR_DEATH_MOUNTAIN_TRAIL] = Region("Death Mountain", "Death Mountain", {RA_DEATH_MOUNTAIN_TRAIL}, DAY_NIGHT_CYCLE, {
|
areaTable[RR_DEATH_MOUNTAIN_TRAIL] = Region("Death Mountain", "Death Mountain", {RA_DEATH_MOUNTAIN_TRAIL}, DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&logic->BeanPlantFairy, []{return logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS) && (logic->HasExplosives() || logic->HasItem(RG_GORONS_BRACELET));}),
|
EventAccess(&logic->BeanPlantFairy, []{return logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS) && (logic->HasExplosives() || logic->HasItem(RG_GORONS_BRACELET));}),
|
||||||
|
@ -98,4 +99,6 @@ void RegionTable_Init_DeathMountainTrail() {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_DEATH_MOUNTAIN_SUMMIT, []{return true;}),
|
Entrance(RR_DEATH_MOUNTAIN_SUMMIT, []{return true;}),
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
// clang-format on
|
||||||
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
using namespace Rando;
|
using namespace Rando;
|
||||||
|
|
||||||
void RegionTable_Init_DesertColossus() {
|
void RegionTable_Init_DesertColossus() {
|
||||||
|
// clang-format off
|
||||||
areaTable[RR_DESERT_COLOSSUS] = Region("Desert Colossus", "Desert Colossus", {RA_DESERT_COLOSSUS}, DAY_NIGHT_CYCLE, {
|
areaTable[RR_DESERT_COLOSSUS] = Region("Desert Colossus", "Desert Colossus", {RA_DESERT_COLOSSUS}, DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&logic->FairyPond, []{return logic->FairyPond || logic->CanUse(RG_SONG_OF_STORMS);}),
|
EventAccess(&logic->FairyPond, []{return logic->FairyPond || logic->CanUse(RG_SONG_OF_STORMS);}),
|
||||||
|
@ -74,4 +75,6 @@ void RegionTable_Init_DesertColossus() {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_DESERT_COLOSSUS, []{return true;}),
|
Entrance(RR_DESERT_COLOSSUS, []{return true;}),
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
// clang-format on
|
||||||
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
using namespace Rando;
|
using namespace Rando;
|
||||||
|
|
||||||
void RegionTable_Init_GerudoValley() {
|
void RegionTable_Init_GerudoValley() {
|
||||||
|
// clang-format off
|
||||||
areaTable[RR_GERUDO_VALLEY] = Region("Gerudo Valley", "Gerudo Valley", {RA_GERUDO_VALLEY}, DAY_NIGHT_CYCLE, {
|
areaTable[RR_GERUDO_VALLEY] = Region("Gerudo Valley", "Gerudo Valley", {RA_GERUDO_VALLEY}, DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&logic->BugRock, []{return logic->BugRock || logic->IsChild;}),
|
EventAccess(&logic->BugRock, []{return logic->BugRock || logic->IsChild;}),
|
||||||
|
@ -108,4 +109,6 @@ void RegionTable_Init_GerudoValley() {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_GV_FORTRESS_SIDE, []{return true;}),
|
Entrance(RR_GV_FORTRESS_SIDE, []{return true;}),
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
// clang-format on
|
||||||
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
using namespace Rando;
|
using namespace Rando;
|
||||||
|
|
||||||
void RegionTable_Init_GoronCity() {
|
void RegionTable_Init_GoronCity() {
|
||||||
|
// clang-format off
|
||||||
areaTable[RR_GORON_CITY] = Region("Goron City", "Goron City", {RA_GORON_CITY}, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_GORON_CITY] = Region("Goron City", "Goron City", {RA_GORON_CITY}, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairyExceptSuns();}),
|
EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairyExceptSuns();}),
|
||||||
|
@ -108,4 +109,6 @@ void RegionTable_Init_GoronCity() {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_GC_GROTTO_PLATFORM, []{return true;}),
|
Entrance(RR_GC_GROTTO_PLATFORM, []{return true;}),
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
// clang-format on
|
||||||
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
using namespace Rando;
|
using namespace Rando;
|
||||||
|
|
||||||
void RegionTable_Init_Graveyard() {
|
void RegionTable_Init_Graveyard() {
|
||||||
|
// clang-format off
|
||||||
areaTable[RR_THE_GRAVEYARD] = Region("The Graveyard", "The Graveyard", {RA_THE_GRAVEYARD}, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_THE_GRAVEYARD] = Region("The Graveyard", "The Graveyard", {RA_THE_GRAVEYARD}, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&logic->ButterflyFairy, []{return logic->ButterflyFairy || (logic->CanUse(RG_STICKS) && logic->AtDay);}),
|
EventAccess(&logic->ButterflyFairy, []{return logic->ButterflyFairy || (logic->CanUse(RG_STICKS) && logic->AtDay);}),
|
||||||
|
@ -120,4 +121,6 @@ void RegionTable_Init_Graveyard() {
|
||||||
Entrance(RR_THE_GRAVEYARD, []{return true;}),
|
Entrance(RR_THE_GRAVEYARD, []{return true;}),
|
||||||
Entrance(RR_SHADOW_TEMPLE_ENTRYWAY, []{return logic->CanUse(RG_DINS_FIRE) || (ctx->GetTrickOption(RT_GY_SHADOW_FIRE_ARROWS) && logic->IsAdult && logic->CanUse(RG_FIRE_ARROWS));}),
|
Entrance(RR_SHADOW_TEMPLE_ENTRYWAY, []{return logic->CanUse(RG_DINS_FIRE) || (ctx->GetTrickOption(RT_GY_SHADOW_FIRE_ARROWS) && logic->IsAdult && logic->CanUse(RG_FIRE_ARROWS));}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// clang-format on
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
using namespace Rando;
|
using namespace Rando;
|
||||||
|
|
||||||
void RegionTable_Init_HauntedWasteland() {
|
void RegionTable_Init_HauntedWasteland() {
|
||||||
|
// clang-format off
|
||||||
areaTable[RR_WASTELAND_NEAR_FORTRESS] = Region("Wasteland Near Fortress", "Haunted Wasteland", {RA_HAUNTED_WASTELAND}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_WASTELAND_NEAR_FORTRESS] = Region("Wasteland Near Fortress", "Haunted Wasteland", {RA_HAUNTED_WASTELAND}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_GF_OUTSIDE_GATE, []{return true;}),
|
Entrance(RR_GF_OUTSIDE_GATE, []{return true;}),
|
||||||
|
@ -35,4 +36,6 @@ void RegionTable_Init_HauntedWasteland() {
|
||||||
Entrance(RR_DESERT_COLOSSUS, []{return true;}),
|
Entrance(RR_DESERT_COLOSSUS, []{return true;}),
|
||||||
Entrance(RR_HAUNTED_WASTELAND, []{return ctx->GetTrickOption(RT_HW_REVERSE) || false;}),
|
Entrance(RR_HAUNTED_WASTELAND, []{return ctx->GetTrickOption(RT_HW_REVERSE) || false;}),
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
// clang-format on
|
||||||
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
using namespace Rando;
|
using namespace Rando;
|
||||||
|
|
||||||
void RegionTable_Init_HyruleField() {
|
void RegionTable_Init_HyruleField() {
|
||||||
|
// clang-format off
|
||||||
areaTable[RR_HYRULE_FIELD] = Region("Hyrule Field", "Hyrule Field", {RA_HYRULE_FIELD}, DAY_NIGHT_CYCLE, {
|
areaTable[RR_HYRULE_FIELD] = Region("Hyrule Field", "Hyrule Field", {RA_HYRULE_FIELD}, DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&logic->BigPoeKill, []{return logic->CanUse(RG_FAIRY_BOW) && logic->CanUse(RG_EPONA) && logic->HasBottle();}),
|
EventAccess(&logic->BigPoeKill, []{return logic->CanUse(RG_FAIRY_BOW) && logic->CanUse(RG_EPONA) && logic->HasBottle();}),
|
||||||
|
@ -140,4 +141,6 @@ void RegionTable_Init_HyruleField() {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_HYRULE_FIELD, []{return true;}),
|
Entrance(RR_HYRULE_FIELD, []{return true;}),
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
// clang-format on
|
||||||
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
using namespace Rando;
|
using namespace Rando;
|
||||||
|
|
||||||
void RegionTable_Init_Kakariko() {
|
void RegionTable_Init_Kakariko() {
|
||||||
|
// clang-format off
|
||||||
areaTable[RR_KAKARIKO_VILLAGE] = Region("Kakariko Village", "Kakariko Village", {RA_KAKARIKO_VILLAGE}, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_KAKARIKO_VILLAGE] = Region("Kakariko Village", "Kakariko Village", {RA_KAKARIKO_VILLAGE}, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&logic->BugRock, []{return true;}),
|
EventAccess(&logic->BugRock, []{return true;}),
|
||||||
|
@ -239,4 +240,6 @@ void RegionTable_Init_Kakariko() {
|
||||||
Entrance(RR_KAKARIKO_VILLAGE, []{return logic->IsAdult || logic->HasItem(RG_BRONZE_SCALE) || logic->DrainWell;}),
|
Entrance(RR_KAKARIKO_VILLAGE, []{return logic->IsAdult || logic->HasItem(RG_BRONZE_SCALE) || logic->DrainWell;}),
|
||||||
Entrance(RR_BOTTOM_OF_THE_WELL_ENTRYWAY, []{return logic->IsChild || (logic->DrainWell && ctx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES).IsNot(RO_DUNGEON_ENTRANCE_SHUFFLE_OFF));}),
|
Entrance(RR_BOTTOM_OF_THE_WELL_ENTRYWAY, []{return logic->IsChild || (logic->DrainWell && ctx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES).IsNot(RO_DUNGEON_ENTRANCE_SHUFFLE_OFF));}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// clang-format on
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
using namespace Rando;
|
using namespace Rando;
|
||||||
|
|
||||||
void RegionTable_Init_KokiriForest() {
|
void RegionTable_Init_KokiriForest() {
|
||||||
|
// clang-format off
|
||||||
areaTable[RR_KOKIRI_FOREST] = Region("Kokiri Forest", "Kokiri Forest", {RA_KOKIRI_FOREST}, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_KOKIRI_FOREST] = Region("Kokiri Forest", "Kokiri Forest", {RA_KOKIRI_FOREST}, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&logic->BeanPlantFairy, []{return logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS);}),
|
EventAccess(&logic->BeanPlantFairy, []{return logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS);}),
|
||||||
|
@ -149,4 +150,6 @@ void RegionTable_Init_KokiriForest() {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_KOKIRI_FOREST, []{return true;})
|
Entrance(RR_KOKIRI_FOREST, []{return true;})
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
// clang-format on
|
||||||
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
using namespace Rando;
|
using namespace Rando;
|
||||||
|
|
||||||
void RegionTable_Init_LakeHylia() {
|
void RegionTable_Init_LakeHylia() {
|
||||||
|
// clang-format off
|
||||||
areaTable[RR_LAKE_HYLIA] = Region("Lake Hylia", "Lake Hylia", {RA_LAKE_HYLIA}, DAY_NIGHT_CYCLE, {
|
areaTable[RR_LAKE_HYLIA] = Region("Lake Hylia", "Lake Hylia", {RA_LAKE_HYLIA}, DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairy();}),
|
EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairy();}),
|
||||||
|
@ -128,4 +129,6 @@ void RegionTable_Init_LakeHylia() {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_LAKE_HYLIA, []{return true;}),
|
Entrance(RR_LAKE_HYLIA, []{return true;}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// clang-format on
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
using namespace Rando;
|
using namespace Rando;
|
||||||
|
|
||||||
void RegionTable_Init_LonLonRanch() {
|
void RegionTable_Init_LonLonRanch() {
|
||||||
|
// clang-format off
|
||||||
areaTable[RR_LON_LON_RANCH] = Region("Lon Lon Ranch", "Lon Lon Ranch", {RA_LON_LON_RANCH}, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_LON_LON_RANCH] = Region("Lon Lon Ranch", "Lon Lon Ranch", {RA_LON_LON_RANCH}, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&logic->FreedEpona, []{return logic->FreedEpona || ((logic->HasItem(RG_CHILD_WALLET) || ctx->GetOption(RSK_SKIP_EPONA_RACE)) && logic->CanUse(RG_EPONAS_SONG) && logic->IsAdult && logic->AtDay);}),
|
EventAccess(&logic->FreedEpona, []{return logic->FreedEpona || ((logic->HasItem(RG_CHILD_WALLET) || ctx->GetOption(RSK_SKIP_EPONA_RACE)) && logic->CanUse(RG_EPONAS_SONG) && logic->IsAdult && logic->AtDay);}),
|
||||||
|
@ -71,4 +72,6 @@ void RegionTable_Init_LonLonRanch() {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_LON_LON_RANCH, []{return true;}),
|
Entrance(RR_LON_LON_RANCH, []{return true;}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// clang-format on
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
using namespace Rando;
|
using namespace Rando;
|
||||||
|
|
||||||
void RegionTable_Init_LostWoods() {
|
void RegionTable_Init_LostWoods() {
|
||||||
|
// clang-format off
|
||||||
areaTable[RR_LW_FOREST_EXIT] = Region("LW Forest Exit", "Lost Woods", {RA_THE_LOST_WOODS}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_LW_FOREST_EXIT] = Region("LW Forest Exit", "Lost Woods", {RA_THE_LOST_WOODS}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_KOKIRI_FOREST, []{return true;})
|
Entrance(RR_KOKIRI_FOREST, []{return true;})
|
||||||
|
@ -128,4 +129,6 @@ void RegionTable_Init_LostWoods() {
|
||||||
Entrance(RR_HYRULE_FIELD, []{return true;}),
|
Entrance(RR_HYRULE_FIELD, []{return true;}),
|
||||||
Entrance(RR_THE_LOST_WOODS, []{return logic->CanUse(RG_LONGSHOT);}),
|
Entrance(RR_THE_LOST_WOODS, []{return logic->CanUse(RG_LONGSHOT);}),
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
// clang-format on
|
||||||
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
using namespace Rando;
|
using namespace Rando;
|
||||||
|
|
||||||
void RegionTable_Init_Market() {
|
void RegionTable_Init_Market() {
|
||||||
|
// clang-format off
|
||||||
areaTable[RR_MARKET_ENTRANCE] = Region("Market Entrance", "Market Entrance", {RA_THE_MARKET}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_MARKET_ENTRANCE] = Region("Market Entrance", "Market Entrance", {RA_THE_MARKET}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_HYRULE_FIELD, []{return logic->IsAdult || logic->AtDay;}),
|
Entrance(RR_HYRULE_FIELD, []{return logic->IsAdult || logic->AtDay;}),
|
||||||
|
@ -214,4 +215,6 @@ void RegionTable_Init_Market() {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_MARKET_BACK_ALLEY, []{return true;}),
|
Entrance(RR_MARKET_BACK_ALLEY, []{return true;}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// clang-format on
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
using namespace Rando;
|
using namespace Rando;
|
||||||
|
|
||||||
void RegionTable_Init_SacredForestMeadow() {
|
void RegionTable_Init_SacredForestMeadow() {
|
||||||
|
// clang-format off
|
||||||
areaTable[RR_SFM_ENTRYWAY] = Region("SFM Entryway", "Sacred Forest Meadow", {RA_SACRED_FOREST_MEADOW}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_SFM_ENTRYWAY] = Region("SFM Entryway", "Sacred Forest Meadow", {RA_SACRED_FOREST_MEADOW}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_LW_BEYOND_MIDO, []{return true;}),
|
Entrance(RR_LW_BEYOND_MIDO, []{return true;}),
|
||||||
|
@ -71,4 +72,6 @@ void RegionTable_Init_SacredForestMeadow() {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_SACRED_FOREST_MEADOW, []{return true;}),
|
Entrance(RR_SACRED_FOREST_MEADOW, []{return true;}),
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
// clang-format on
|
||||||
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
using namespace Rando;
|
using namespace Rando;
|
||||||
|
|
||||||
void RegionTable_Init_TempleOfTime() {
|
void RegionTable_Init_TempleOfTime() {
|
||||||
|
// clang-format off
|
||||||
areaTable[RR_TOT_ENTRANCE] = Region("ToT Entrance", "ToT Entrance", {RA_THE_MARKET}, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_TOT_ENTRANCE] = Region("ToT Entrance", "ToT Entrance", {RA_THE_MARKET}, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairyExceptSuns();}),
|
EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairyExceptSuns();}),
|
||||||
|
@ -51,4 +52,6 @@ void RegionTable_Init_TempleOfTime() {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_TEMPLE_OF_TIME, []{return true;}),
|
Entrance(RR_TEMPLE_OF_TIME, []{return true;}),
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
// clang-format on
|
||||||
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
using namespace Rando;
|
using namespace Rando;
|
||||||
|
|
||||||
void RegionTable_Init_ZorasDomain() {
|
void RegionTable_Init_ZorasDomain() {
|
||||||
|
// clang-format off
|
||||||
areaTable[RR_ZORAS_DOMAIN] = Region("Zoras Domain", "Zoras Domain", {RA_ZORAS_DOMAIN}, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_ZORAS_DOMAIN] = Region("Zoras Domain", "Zoras Domain", {RA_ZORAS_DOMAIN}, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairyExceptSuns();}),
|
EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairyExceptSuns();}),
|
||||||
|
@ -90,4 +91,6 @@ void RegionTable_Init_ZorasDomain() {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_ZORAS_DOMAIN_ISLAND, []{return true;}),
|
Entrance(RR_ZORAS_DOMAIN_ISLAND, []{return true;}),
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
// clang-format on
|
||||||
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
using namespace Rando;
|
using namespace Rando;
|
||||||
|
|
||||||
void RegionTable_Init_ZorasFountain() {
|
void RegionTable_Init_ZorasFountain() {
|
||||||
|
// clang-format off
|
||||||
areaTable[RR_ZORAS_FOUNTAIN] = Region("Zoras Fountain", "Zoras Fountain", {RA_ZORAS_FOUNTAIN}, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_ZORAS_FOUNTAIN] = Region("Zoras Fountain", "Zoras Fountain", {RA_ZORAS_FOUNTAIN}, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairyExceptSuns();}),
|
EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairyExceptSuns();}),
|
||||||
|
@ -61,4 +62,6 @@ void RegionTable_Init_ZorasFountain() {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_ZORAS_FOUNTAIN, []{return true;}),
|
Entrance(RR_ZORAS_FOUNTAIN, []{return true;}),
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
// clang-format on
|
||||||
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
using namespace Rando;
|
using namespace Rando;
|
||||||
|
|
||||||
void RegionTable_Init_ZoraRiver() {
|
void RegionTable_Init_ZoraRiver() {
|
||||||
|
// clang-format off
|
||||||
areaTable[RR_ZR_FRONT] = Region("ZR Front", "Zora River", {RA_ZORAS_RIVER}, DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_ZR_FRONT] = Region("ZR Front", "Zora River", {RA_ZORAS_RIVER}, DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_ZR_GS_TREE, logic->IsChild && logic->CanKillEnemy(RE_GOLD_SKULLTULA, ED_CLOSE)),
|
LOCATION(RC_ZR_GS_TREE, logic->IsChild && logic->CanKillEnemy(RE_GOLD_SKULLTULA, ED_CLOSE)),
|
||||||
|
@ -104,4 +105,6 @@ void RegionTable_Init_ZoraRiver() {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_ZORAS_RIVER, []{return true;}),
|
Entrance(RR_ZORAS_RIVER, []{return true;}),
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
// clang-format on
|
||||||
|
}
|
||||||
|
|
|
@ -100,7 +100,7 @@ static const char* englishRupeeNames[175] = {
|
||||||
"Studs", "Super Sea Snails", "Talent", "Teef", "Telecrystals",
|
"Studs", "Super Sea Snails", "Talent", "Teef", "Telecrystals",
|
||||||
"Tiberium", "TokKul", "Toys", "Turnips", "Upvotes",
|
"Tiberium", "TokKul", "Toys", "Turnips", "Upvotes",
|
||||||
"V-Bucks", "Vespene Gas", "Watts", "Widgets", "Woolongs",
|
"V-Bucks", "Vespene Gas", "Watts", "Widgets", "Woolongs",
|
||||||
"World Dollars", "Wumpa Fruit", "Yen", "Zenny", "Zorkmids"
|
"World Dollars", "Wumpa Fruit", "Yen", "Zenny", "Zorkmids",
|
||||||
};
|
};
|
||||||
|
|
||||||
static const char* germanRupeeNames[65] = {
|
static const char* germanRupeeNames[65] = {
|
||||||
|
@ -205,7 +205,7 @@ std::unordered_map<s16, s16> getItemIdToItemId = {
|
||||||
{ GI_PRESCRIPTION, ITEM_PRESCRIPTION },
|
{ GI_PRESCRIPTION, ITEM_PRESCRIPTION },
|
||||||
{ GI_FROG, ITEM_FROG },
|
{ GI_FROG, ITEM_FROG },
|
||||||
{ GI_EYEDROPS, ITEM_EYEDROPS },
|
{ GI_EYEDROPS, ITEM_EYEDROPS },
|
||||||
{ GI_CLAIM_CHECK, ITEM_CLAIM_CHECK }
|
{ GI_CLAIM_CHECK, ITEM_CLAIM_CHECK },
|
||||||
};
|
};
|
||||||
|
|
||||||
#pragma optimize("", off)
|
#pragma optimize("", off)
|
||||||
|
@ -400,12 +400,12 @@ void Randomizer::LoadMerchantMessages() {
|
||||||
}
|
}
|
||||||
|
|
||||||
std::map<s32, TrialKey> trialFlagToTrialKey = {
|
std::map<s32, TrialKey> trialFlagToTrialKey = {
|
||||||
{ EVENTCHKINF_COMPLETED_LIGHT_TRIAL, TK_LIGHT_TRIAL, },
|
{ EVENTCHKINF_COMPLETED_LIGHT_TRIAL, TK_LIGHT_TRIAL },
|
||||||
{ EVENTCHKINF_COMPLETED_FOREST_TRIAL, TK_FOREST_TRIAL, },
|
{ EVENTCHKINF_COMPLETED_FOREST_TRIAL, TK_FOREST_TRIAL },
|
||||||
{ EVENTCHKINF_COMPLETED_FIRE_TRIAL, TK_FIRE_TRIAL, },
|
{ EVENTCHKINF_COMPLETED_FIRE_TRIAL, TK_FIRE_TRIAL },
|
||||||
{ EVENTCHKINF_COMPLETED_WATER_TRIAL, TK_WATER_TRIAL, },
|
{ EVENTCHKINF_COMPLETED_WATER_TRIAL, TK_WATER_TRIAL },
|
||||||
{ EVENTCHKINF_COMPLETED_SPIRIT_TRIAL, TK_SPIRIT_TRIAL, },
|
{ EVENTCHKINF_COMPLETED_SPIRIT_TRIAL, TK_SPIRIT_TRIAL },
|
||||||
{ EVENTCHKINF_COMPLETED_SHADOW_TRIAL, TK_SHADOW_TRIAL, }
|
{ EVENTCHKINF_COMPLETED_SHADOW_TRIAL, TK_SHADOW_TRIAL },
|
||||||
};
|
};
|
||||||
|
|
||||||
bool Randomizer::IsTrialRequired(s32 trialFlag) {
|
bool Randomizer::IsTrialRequired(s32 trialFlag) {
|
||||||
|
@ -2272,7 +2272,7 @@ void RandomizerSettingsWindow::DrawElement() {
|
||||||
{RA_BOTTOM_OF_THE_WELL, true},
|
{RA_BOTTOM_OF_THE_WELL, true},
|
||||||
{RA_ICE_CAVERN, true},
|
{RA_ICE_CAVERN, true},
|
||||||
{RA_GERUDO_TRAINING_GROUND, true},
|
{RA_GERUDO_TRAINING_GROUND, true},
|
||||||
{RA_GANONS_CASTLE, true}
|
{RA_GANONS_CASTLE, true},
|
||||||
};
|
};
|
||||||
static std::unordered_map<RandomizerArea, bool> areaTreeEnabled {
|
static std::unordered_map<RandomizerArea, bool> areaTreeEnabled {
|
||||||
{RA_NONE, true},
|
{RA_NONE, true},
|
||||||
|
@ -2307,7 +2307,7 @@ void RandomizerSettingsWindow::DrawElement() {
|
||||||
{RA_BOTTOM_OF_THE_WELL, true},
|
{RA_BOTTOM_OF_THE_WELL, true},
|
||||||
{RA_ICE_CAVERN, true},
|
{RA_ICE_CAVERN, true},
|
||||||
{RA_GERUDO_TRAINING_GROUND, true},
|
{RA_GERUDO_TRAINING_GROUND, true},
|
||||||
{RA_GANONS_CASTLE, true}
|
{RA_GANONS_CASTLE, true},
|
||||||
};
|
};
|
||||||
|
|
||||||
static std::map<Rando::Tricks::Tag, bool> showTag {
|
static std::map<Rando::Tricks::Tag, bool> showTag {
|
||||||
|
|
|
@ -13,11 +13,11 @@
|
||||||
// which doesn't exist yet.
|
// which doesn't exist yet.
|
||||||
typedef enum {
|
typedef enum {
|
||||||
MOD_NONE,
|
MOD_NONE,
|
||||||
MOD_RANDOMIZER
|
MOD_RANDOMIZER,
|
||||||
} ModIndex;
|
} ModIndex;
|
||||||
typedef enum {
|
typedef enum {
|
||||||
TABLE_VANILLA = MOD_NONE,
|
TABLE_VANILLA = MOD_NONE,
|
||||||
TABLE_RANDOMIZER = MOD_RANDOMIZER
|
TABLE_RANDOMIZER = MOD_RANDOMIZER,
|
||||||
} TableIndex;
|
} TableIndex;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -5666,12 +5666,12 @@ typedef struct FishIdentity {
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
TRACKER_WINDOW_FLOATING,
|
TRACKER_WINDOW_FLOATING,
|
||||||
TRACKER_WINDOW_WINDOW
|
TRACKER_WINDOW_WINDOW,
|
||||||
} TrackerWindowType;
|
} TrackerWindowType;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
TRACKER_DISPLAY_ALWAYS,
|
TRACKER_DISPLAY_ALWAYS,
|
||||||
TRACKER_DISPLAY_COMBO_BUTTON
|
TRACKER_DISPLAY_COMBO_BUTTON,
|
||||||
} TrackerDisplayType;
|
} TrackerDisplayType;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
@ -5774,7 +5774,7 @@ typedef enum {
|
||||||
WL_MID,
|
WL_MID,
|
||||||
WL_HIGH,
|
WL_HIGH,
|
||||||
WL_LOW_OR_MID,
|
WL_LOW_OR_MID,
|
||||||
WL_HIGH_OR_MID
|
WL_HIGH_OR_MID,
|
||||||
} RandoWaterLevel;
|
} RandoWaterLevel;
|
||||||
|
|
||||||
#define ENTRANCE_GROTTO_LOAD_START 0x0700
|
#define ENTRANCE_GROTTO_LOAD_START 0x0700
|
||||||
|
|
|
@ -59,6 +59,7 @@ typedef struct {
|
||||||
} DungeonEntranceInfo;
|
} DungeonEntranceInfo;
|
||||||
|
|
||||||
static DungeonEntranceInfo dungeons[] = {
|
static DungeonEntranceInfo dungeons[] = {
|
||||||
|
// clang-format off
|
||||||
//entryway exit, boss, reverse, bluewarp, dungeon scene, boss scene
|
//entryway exit, boss, reverse, bluewarp, dungeon scene, boss scene
|
||||||
{ ENTR_DEKU_TREE_ENTRANCE, ENTR_KOKIRI_FOREST_OUTSIDE_DEKU_TREE, ENTR_DEKU_TREE_BOSS_ENTRANCE, ENTR_DEKU_TREE_BOSS_DOOR, ENTR_KOKIRI_FOREST_DEKU_TREE_BLUE_WARP, SCENE_DEKU_TREE, SCENE_DEKU_TREE_BOSS },
|
{ ENTR_DEKU_TREE_ENTRANCE, ENTR_KOKIRI_FOREST_OUTSIDE_DEKU_TREE, ENTR_DEKU_TREE_BOSS_ENTRANCE, ENTR_DEKU_TREE_BOSS_DOOR, ENTR_KOKIRI_FOREST_DEKU_TREE_BLUE_WARP, SCENE_DEKU_TREE, SCENE_DEKU_TREE_BOSS },
|
||||||
{ ENTR_DODONGOS_CAVERN_ENTRANCE, ENTR_DEATH_MOUNTAIN_TRAIL_OUTSIDE_DODONGOS_CAVERN, ENTR_DODONGOS_CAVERN_BOSS_ENTRANCE, ENTR_DODONGOS_CAVERN_BOSS_DOOR, ENTR_DEATH_MOUNTAIN_TRAIL_DODONGO_BLUE_WARP, SCENE_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN_BOSS },
|
{ ENTR_DODONGOS_CAVERN_ENTRANCE, ENTR_DEATH_MOUNTAIN_TRAIL_OUTSIDE_DODONGOS_CAVERN, ENTR_DODONGOS_CAVERN_BOSS_ENTRANCE, ENTR_DODONGOS_CAVERN_BOSS_DOOR, ENTR_DEATH_MOUNTAIN_TRAIL_DODONGO_BLUE_WARP, SCENE_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN_BOSS },
|
||||||
|
@ -68,6 +69,8 @@ static DungeonEntranceInfo dungeons[] = {
|
||||||
{ ENTR_WATER_TEMPLE_ENTRANCE, ENTR_LAKE_HYLIA_OUTSIDE_TEMPLE, ENTR_WATER_TEMPLE_BOSS_ENTRANCE, ENTR_WATER_TEMPLE_BOSS_DOOR, ENTR_LAKE_HYLIA_WATER_TEMPLE_BLUE_WARP, SCENE_WATER_TEMPLE, SCENE_WATER_TEMPLE_BOSS },
|
{ ENTR_WATER_TEMPLE_ENTRANCE, ENTR_LAKE_HYLIA_OUTSIDE_TEMPLE, ENTR_WATER_TEMPLE_BOSS_ENTRANCE, ENTR_WATER_TEMPLE_BOSS_DOOR, ENTR_LAKE_HYLIA_WATER_TEMPLE_BLUE_WARP, SCENE_WATER_TEMPLE, SCENE_WATER_TEMPLE_BOSS },
|
||||||
{ ENTR_SPIRIT_TEMPLE_ENTRANCE, ENTR_DESERT_COLOSSUS_OUTSIDE_TEMPLE, ENTR_SPIRIT_TEMPLE_BOSS_ENTRANCE, ENTR_SPIRIT_TEMPLE_BOSS_DOOR, ENTR_DESERT_COLOSSUS_SPIRIT_TEMPLE_BLUE_WARP, SCENE_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE_BOSS },
|
{ ENTR_SPIRIT_TEMPLE_ENTRANCE, ENTR_DESERT_COLOSSUS_OUTSIDE_TEMPLE, ENTR_SPIRIT_TEMPLE_BOSS_ENTRANCE, ENTR_SPIRIT_TEMPLE_BOSS_DOOR, ENTR_DESERT_COLOSSUS_SPIRIT_TEMPLE_BLUE_WARP, SCENE_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE_BOSS },
|
||||||
{ ENTR_SHADOW_TEMPLE_ENTRANCE, ENTR_GRAVEYARD_OUTSIDE_TEMPLE, ENTR_SHADOW_TEMPLE_BOSS_ENTRANCE, ENTR_SHADOW_TEMPLE_BOSS_DOOR, ENTR_GRAVEYARD_SHADOW_TEMPLE_BLUE_WARP, SCENE_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE_BOSS },
|
{ ENTR_SHADOW_TEMPLE_ENTRANCE, ENTR_GRAVEYARD_OUTSIDE_TEMPLE, ENTR_SHADOW_TEMPLE_BOSS_ENTRANCE, ENTR_SHADOW_TEMPLE_BOSS_DOOR, ENTR_GRAVEYARD_SHADOW_TEMPLE_BLUE_WARP, SCENE_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE_BOSS },
|
||||||
|
|
||||||
|
// clang-format on
|
||||||
};
|
};
|
||||||
|
|
||||||
static s8 hasCopiedEntranceTable = 0;
|
static s8 hasCopiedEntranceTable = 0;
|
||||||
|
|
|
@ -74,6 +74,7 @@ static std::string groupTypeNames[] = {
|
||||||
// Entrance data for the tracker taken from the 3ds rando entrance tracker, and supplemented with scene/spawn info and meta search tags
|
// Entrance data for the tracker taken from the 3ds rando entrance tracker, and supplemented with scene/spawn info and meta search tags
|
||||||
// ENTR_HYRULE_FIELD_10 and ENTR_POTION_SHOP_KAKARIKO_1 have been repurposed for entrance randomizer
|
// ENTR_HYRULE_FIELD_10 and ENTR_POTION_SHOP_KAKARIKO_1 have been repurposed for entrance randomizer
|
||||||
const EntranceData entranceData[] = {
|
const EntranceData entranceData[] = {
|
||||||
|
// clang-format off
|
||||||
//index, reverse, scenes (and spawns), source name, destination name, source group, destination group, type, metaTag, oneExit
|
//index, reverse, scenes (and spawns), source name, destination name, source group, destination group, type, metaTag, oneExit
|
||||||
{ ENTR_LINKS_HOUSE_CHILD_SPAWN, -1, SINGLE_SCENE_INFO(SCENE_LINKS_HOUSE), "Child Spawn", "Link's House", ENTRANCE_GROUP_ONE_WAY, ENTRANCE_GROUP_ONE_WAY, ENTRANCE_TYPE_ONE_WAY},
|
{ ENTR_LINKS_HOUSE_CHILD_SPAWN, -1, SINGLE_SCENE_INFO(SCENE_LINKS_HOUSE), "Child Spawn", "Link's House", ENTRANCE_GROUP_ONE_WAY, ENTRANCE_GROUP_ONE_WAY, ENTRANCE_TYPE_ONE_WAY},
|
||||||
{ ENTR_HYRULE_FIELD_10, -1, SINGLE_SCENE_INFO(SCENE_TEMPLE_OF_TIME), "Adult Spawn", "Temple of Time", ENTRANCE_GROUP_ONE_WAY, ENTRANCE_GROUP_ONE_WAY, ENTRANCE_TYPE_ONE_WAY},
|
{ ENTR_HYRULE_FIELD_10, -1, SINGLE_SCENE_INFO(SCENE_TEMPLE_OF_TIME), "Adult Spawn", "Temple of Time", ENTRANCE_GROUP_ONE_WAY, ENTRANCE_GROUP_ONE_WAY, ENTRANCE_TYPE_ONE_WAY},
|
||||||
|
@ -380,6 +381,8 @@ const EntranceData entranceData[] = {
|
||||||
{ ENTR_INSIDE_GANONS_CASTLE_ENTRANCE, ENTR_CASTLE_GROUNDS_RAINBOW_BRIDGE_EXIT, SINGLE_SCENE_INFO(SCENE_OUTSIDE_GANONS_CASTLE), "OGC Rainbow Bridge Exit", "Inside Ganon's Castle Entrance", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DUNGEON, "outside ganon's castle,gc", 1},
|
{ ENTR_INSIDE_GANONS_CASTLE_ENTRANCE, ENTR_CASTLE_GROUNDS_RAINBOW_BRIDGE_EXIT, SINGLE_SCENE_INFO(SCENE_OUTSIDE_GANONS_CASTLE), "OGC Rainbow Bridge Exit", "Inside Ganon's Castle Entrance", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DUNGEON, "outside ganon's castle,gc", 1},
|
||||||
{ ENTR_POTION_SHOP_KAKARIKO_1, ENTR_GREAT_FAIRYS_FOUNTAIN_MAGIC_OGC_DD, {{ SCENE_GREAT_FAIRYS_FOUNTAIN_MAGIC, 0x02 }}, "OGC Great Fairy Fountain", "OGC Behind Pillar", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_INTERIOR, "outside ganon's castle"},
|
{ ENTR_POTION_SHOP_KAKARIKO_1, ENTR_GREAT_FAIRYS_FOUNTAIN_MAGIC_OGC_DD, {{ SCENE_GREAT_FAIRYS_FOUNTAIN_MAGIC, 0x02 }}, "OGC Great Fairy Fountain", "OGC Behind Pillar", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_INTERIOR, "outside ganon's castle"},
|
||||||
{ ENTR_CASTLE_GROUNDS_RAINBOW_BRIDGE_EXIT, ENTR_INSIDE_GANONS_CASTLE_ENTRANCE, SINGLE_SCENE_INFO(SCENE_INSIDE_GANONS_CASTLE), "Inside Ganon's Castle Entrance", "OGC Rainbow Bridge Exit", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DUNGEON, "outside ganon's castle,gc"}
|
{ ENTR_CASTLE_GROUNDS_RAINBOW_BRIDGE_EXIT, ENTR_INSIDE_GANONS_CASTLE_ENTRANCE, SINGLE_SCENE_INFO(SCENE_INSIDE_GANONS_CASTLE), "Inside Ganon's Castle Entrance", "OGC Rainbow Bridge Exit", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DUNGEON, "outside ganon's castle,gc"}
|
||||||
|
|
||||||
|
// clang-format on
|
||||||
};
|
};
|
||||||
|
|
||||||
// Check if Link is in the area and return that scene/entrance for tracking
|
// Check if Link is in the area and return that scene/entrance for tracking
|
||||||
|
|
|
@ -12,6 +12,7 @@ extern PlayState* gPlayState;
|
||||||
|
|
||||||
// Information necessary for entering each grotto
|
// Information necessary for entering each grotto
|
||||||
static const GrottoLoadInfo grottoLoadTable[NUM_GROTTOS] = {
|
static const GrottoLoadInfo grottoLoadTable[NUM_GROTTOS] = {
|
||||||
|
// clang-format off
|
||||||
{.entranceIndex = ENTR_GROTTOS_10, .content = 0xFD, .scene = SCENE_DESERT_COLOSSUS}, // Desert Colossus -> Colossus Grotto
|
{.entranceIndex = ENTR_GROTTOS_10, .content = 0xFD, .scene = SCENE_DESERT_COLOSSUS}, // Desert Colossus -> Colossus Grotto
|
||||||
{.entranceIndex = ENTR_GROTTOS_4, .content = 0xEF, .scene = SCENE_LAKE_HYLIA}, // Lake Hylia -> LH Grotto
|
{.entranceIndex = ENTR_GROTTOS_4, .content = 0xEF, .scene = SCENE_LAKE_HYLIA}, // Lake Hylia -> LH Grotto
|
||||||
{.entranceIndex = ENTR_GROTTOS_10, .content = 0xEB, .scene = SCENE_ZORAS_RIVER}, // Zora River -> ZR Storms Grotto
|
{.entranceIndex = ENTR_GROTTOS_10, .content = 0xEB, .scene = SCENE_ZORAS_RIVER}, // Zora River -> ZR Storms Grotto
|
||||||
|
@ -45,10 +46,13 @@ static const GrottoLoadInfo grottoLoadTable[NUM_GROTTOS] = {
|
||||||
{.entranceIndex = ENTR_GROTTOS_10, .content = 0xF0, .scene = SCENE_GERUDO_VALLEY}, // GV Fortress Side -> GV Storms Grotto
|
{.entranceIndex = ENTR_GROTTOS_10, .content = 0xF0, .scene = SCENE_GERUDO_VALLEY}, // GV Fortress Side -> GV Storms Grotto
|
||||||
{.entranceIndex = ENTR_GROTTOS_6, .content = 0xF2, .scene = SCENE_GERUDO_VALLEY}, // GV Grotto Ledge -> GV Octorok Grotto
|
{.entranceIndex = ENTR_GROTTOS_6, .content = 0xF2, .scene = SCENE_GERUDO_VALLEY}, // GV Grotto Ledge -> GV Octorok Grotto
|
||||||
{.entranceIndex = ENTR_GROTTOS_12, .content = 0xF3, .scene = SCENE_LOST_WOODS}, // LW Beyond Mido -> Deku Theater
|
{.entranceIndex = ENTR_GROTTOS_12, .content = 0xF3, .scene = SCENE_LOST_WOODS}, // LW Beyond Mido -> Deku Theater
|
||||||
|
|
||||||
|
// clang-format on
|
||||||
};
|
};
|
||||||
|
|
||||||
// Information necessary for setting up returning from a grotto
|
// Information necessary for setting up returning from a grotto
|
||||||
static const GrottoReturnInfo grottoReturnTable[NUM_GROTTOS] = {
|
static const GrottoReturnInfo grottoReturnTable[NUM_GROTTOS] = {
|
||||||
|
// clang-format off
|
||||||
{.entranceIndex = ENTR_DESERT_COLOSSUS_EAST_EXIT, .room = 0x00, .angle = 0xA71C, .pos = {.x = 62.5078f, .y = -32.0f, .z = -1296.2f}}, // Colossus Grotto -> Desert Colossus
|
{.entranceIndex = ENTR_DESERT_COLOSSUS_EAST_EXIT, .room = 0x00, .angle = 0xA71C, .pos = {.x = 62.5078f, .y = -32.0f, .z = -1296.2f}}, // Colossus Grotto -> Desert Colossus
|
||||||
{.entranceIndex = ENTR_LAKE_HYLIA_NORTH_EXIT, .room = 0x00, .angle = 0x0000, .pos = {.x = -3039.34f, .y = -1033.0f, .z = 6080.74f}}, // LH Grotto -> Lake Hylia
|
{.entranceIndex = ENTR_LAKE_HYLIA_NORTH_EXIT, .room = 0x00, .angle = 0x0000, .pos = {.x = -3039.34f, .y = -1033.0f, .z = 6080.74f}}, // LH Grotto -> Lake Hylia
|
||||||
{.entranceIndex = ENTR_ZORAS_RIVER_WEST_EXIT, .room = 0x00, .angle = 0x0000, .pos = {.x = -1630.05f, .y = 100.0f, .z = -132.104f}}, // ZR Storms Grotto -> Zora River
|
{.entranceIndex = ENTR_ZORAS_RIVER_WEST_EXIT, .room = 0x00, .angle = 0x0000, .pos = {.x = -1630.05f, .y = 100.0f, .z = -132.104f}}, // ZR Storms Grotto -> Zora River
|
||||||
|
@ -82,6 +86,8 @@ static const GrottoReturnInfo grottoReturnTable[NUM_GROTTOS] = {
|
||||||
{.entranceIndex = ENTR_GERUDO_VALLEY_WEST_EXIT, .room = 0x00, .angle = 0x9555, .pos = {.x = -1326.34f, .y = 15.0f, .z = -983.994f}}, // GV Storms Grotto -> GV Fortress Side
|
{.entranceIndex = ENTR_GERUDO_VALLEY_WEST_EXIT, .room = 0x00, .angle = 0x9555, .pos = {.x = -1326.34f, .y = 15.0f, .z = -983.994f}}, // GV Storms Grotto -> GV Fortress Side
|
||||||
{.entranceIndex = ENTR_GERUDO_VALLEY_EAST_EXIT, .room = 0x00, .angle = 0x8000, .pos = {.x = 291.513f, .y = -555.0f, .z = 1478.39f}}, // GV Octorok Grotto -> GV Grotto Ledge
|
{.entranceIndex = ENTR_GERUDO_VALLEY_EAST_EXIT, .room = 0x00, .angle = 0x8000, .pos = {.x = 291.513f, .y = -555.0f, .z = 1478.39f}}, // GV Octorok Grotto -> GV Grotto Ledge
|
||||||
{.entranceIndex = ENTR_LOST_WOODS_NORTH_EXIT, .room = 0x06, .angle = 0x4000, .pos = {.x = 109.281f, .y = -20.0f, .z = -1601.42f}}, // Deku Theater -> LW Beyond Mido
|
{.entranceIndex = ENTR_LOST_WOODS_NORTH_EXIT, .room = 0x06, .angle = 0x4000, .pos = {.x = 109.281f, .y = -20.0f, .z = -1601.42f}}, // Deku Theater -> LW Beyond Mido
|
||||||
|
|
||||||
|
// clang-format on
|
||||||
};
|
};
|
||||||
|
|
||||||
static s16 grottoExitList[NUM_GROTTOS] = {0};
|
static s16 grottoExitList[NUM_GROTTOS] = {0};
|
||||||
|
|
|
@ -187,6 +187,7 @@ std::unordered_map<uint32_t, RandomizerHintTextKey> StaticData::trialData = {
|
||||||
};
|
};
|
||||||
|
|
||||||
std::unordered_map<RandomizerHint, StaticHintInfo> StaticData::staticHintInfoMap = {
|
std::unordered_map<RandomizerHint, StaticHintInfo> StaticData::staticHintInfoMap = {
|
||||||
|
// clang-format off
|
||||||
// RH_GANONDORF_HINT is special cased due to being different based on master sword shuffle
|
// RH_GANONDORF_HINT is special cased due to being different based on master sword shuffle
|
||||||
// Altar hints are special cased due to special hint marking rules
|
// Altar hints are special cased due to special hint marking rules
|
||||||
// warp song hints are special cased due to entrances not being done properly yet
|
// warp song hints are special cased due to entrances not being done properly yet
|
||||||
|
@ -211,6 +212,8 @@ std::unordered_map<RandomizerHint, StaticHintInfo> StaticData::staticHintInfoMap
|
||||||
{RH_KAK_50_SKULLS_HINT, StaticHintInfo(HINT_TYPE_ITEM, {RHT_SKULLS_HINT}, RSK_KAK_50_SKULLS_HINT, true, {RC_KAK_50_GOLD_SKULLTULA_REWARD}, {}, {}, false, 50)},
|
{RH_KAK_50_SKULLS_HINT, StaticHintInfo(HINT_TYPE_ITEM, {RHT_SKULLS_HINT}, RSK_KAK_50_SKULLS_HINT, true, {RC_KAK_50_GOLD_SKULLTULA_REWARD}, {}, {}, false, 50)},
|
||||||
{RH_KAK_100_SKULLS_HINT, StaticHintInfo(HINT_TYPE_ITEM, {RHT_SKULLS_HINT}, RSK_KAK_100_SKULLS_HINT, true, {RC_KAK_100_GOLD_SKULLTULA_REWARD}, {}, {}, false, 100)},
|
{RH_KAK_100_SKULLS_HINT, StaticHintInfo(HINT_TYPE_ITEM, {RHT_SKULLS_HINT}, RSK_KAK_100_SKULLS_HINT, true, {RC_KAK_100_GOLD_SKULLTULA_REWARD}, {}, {}, false, 100)},
|
||||||
{RH_MASK_SHOP_HINT, StaticHintInfo(HINT_TYPE_ITEM, {RHT_MASK_SHOP_HINT}, RSK_MASK_SHOP_HINT, true, {RC_DEKU_THEATER_SKULL_MASK, RC_DEKU_THEATER_MASK_OF_TRUTH}, {}, {RC_MASK_SHOP_HINT})}
|
{RH_MASK_SHOP_HINT, StaticHintInfo(HINT_TYPE_ITEM, {RHT_MASK_SHOP_HINT}, RSK_MASK_SHOP_HINT, true, {RC_DEKU_THEATER_SKULL_MASK, RC_DEKU_THEATER_MASK_OF_TRUTH}, {}, {RC_MASK_SHOP_HINT})}
|
||||||
|
|
||||||
|
// clang-format on
|
||||||
};
|
};
|
||||||
|
|
||||||
std::unordered_map<std::string, uint32_t> StaticData::PopulateTranslationMap(std::unordered_map<uint32_t, CustomMessage> input){
|
std::unordered_map<std::string, uint32_t> StaticData::PopulateTranslationMap(std::unordered_map<uint32_t, CustomMessage> input){
|
||||||
|
@ -220,7 +223,8 @@ std::unordered_map<std::string, uint32_t> StaticData::PopulateTranslationMap(std
|
||||||
for (std::string string: strings){
|
for (std::string string: strings){
|
||||||
if (output.contains(string)){
|
if (output.contains(string)){
|
||||||
if (output[string] != key){
|
if (output[string] != key){
|
||||||
SPDLOG_DEBUG("\tREPEATED STRING IN " + message.GetEnglish(MF_CLEAN) + "\n\n"); //RANDOTODO should this cause an error of some kind?
|
//RANDOTODO should this cause an error of some kind?
|
||||||
|
SPDLOG_DEBUG("\tREPEATED STRING IN " + message.GetEnglish(MF_CLEAN) + "\n\n");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
output[string] = key;
|
output[string] = key;
|
||||||
|
@ -237,7 +241,8 @@ std::unordered_map<std::string, uint32_t> StaticData::PopulateTranslationMap(std
|
||||||
for (std::string string: strings){
|
for (std::string string: strings){
|
||||||
if (output.contains(string)){
|
if (output.contains(string)){
|
||||||
if (output[string] != key){
|
if (output[string] != key){
|
||||||
SPDLOG_DEBUG("\tREPEATED STRING WITH " + string + "\n\n"); //RANDOTODO should this cause an error of some kind?
|
//RANDOTODO should this cause an error of some kind?
|
||||||
|
SPDLOG_DEBUG("\tREPEATED STRING WITH " + string + "\n\n");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
output[string] = key;
|
output[string] = key;
|
||||||
|
|
|
@ -63,6 +63,7 @@ std::vector<SplitObject> splitList;
|
||||||
std::vector<SplitObject> emptyList;
|
std::vector<SplitObject> emptyList;
|
||||||
|
|
||||||
std::vector<SplitObject> splitObjectList = {
|
std::vector<SplitObject> splitObjectList = {
|
||||||
|
// clang-format off
|
||||||
{ SPLIT_TYPE_ITEM, ITEM_STICK, "Deku Stick", "ITEM_STICK", COLOR_WHITE },
|
{ SPLIT_TYPE_ITEM, ITEM_STICK, "Deku Stick", "ITEM_STICK", COLOR_WHITE },
|
||||||
{ SPLIT_TYPE_ITEM, ITEM_NUT, "Deku Nut", "ITEM_NUT", COLOR_WHITE },
|
{ SPLIT_TYPE_ITEM, ITEM_NUT, "Deku Nut", "ITEM_NUT", COLOR_WHITE },
|
||||||
{ SPLIT_TYPE_ITEM, ITEM_BOMB, "Bomb", "ITEM_BOMB", COLOR_WHITE },
|
{ SPLIT_TYPE_ITEM, ITEM_BOMB, "Bomb", "ITEM_BOMB", COLOR_WHITE },
|
||||||
|
@ -205,9 +206,12 @@ std::vector<SplitObject> splitObjectList = {
|
||||||
{ SPLIT_TYPE_MISC, SCENE_ZORAS_RIVER, "Lost Woods Escape", "SPECIAL_SPLIT_ENTRANCE", COLOR_WHITE },
|
{ SPLIT_TYPE_MISC, SCENE_ZORAS_RIVER, "Lost Woods Escape", "SPECIAL_SPLIT_ENTRANCE", COLOR_WHITE },
|
||||||
{ SPLIT_TYPE_MISC, SCENE_LOST_WOODS, "Forest Escape", "SPECIAL_SPLIT_ENTRANCE", COLOR_WHITE },
|
{ SPLIT_TYPE_MISC, SCENE_LOST_WOODS, "Forest Escape", "SPECIAL_SPLIT_ENTRANCE", COLOR_WHITE },
|
||||||
{ SPLIT_TYPE_MISC, SCENE_KAKARIKO_VILLAGE, "Watchtower Death", "SPECIAL_SPLIT_ENTRANCE", COLOR_WHITE },
|
{ SPLIT_TYPE_MISC, SCENE_KAKARIKO_VILLAGE, "Watchtower Death", "SPECIAL_SPLIT_ENTRANCE", COLOR_WHITE },
|
||||||
|
|
||||||
|
// clang-format on
|
||||||
};
|
};
|
||||||
|
|
||||||
std::map<uint32_t, std::vector<uint32_t>> popupList = {
|
std::map<uint32_t, std::vector<uint32_t>> popupList = {
|
||||||
|
// clang-format off
|
||||||
{ ITEM_STICK, { ITEM_STICK, ITEM_STICK_UPGRADE_20, ITEM_STICK_UPGRADE_30 } },
|
{ ITEM_STICK, { ITEM_STICK, ITEM_STICK_UPGRADE_20, ITEM_STICK_UPGRADE_30 } },
|
||||||
{ ITEM_NUT, { ITEM_NUT, ITEM_NUT_UPGRADE_30, ITEM_NUT_UPGRADE_40 } },
|
{ ITEM_NUT, { ITEM_NUT, ITEM_NUT_UPGRADE_30, ITEM_NUT_UPGRADE_40 } },
|
||||||
{ ITEM_BOMB, { ITEM_BOMB_BAG_20, ITEM_BOMB_BAG_30, ITEM_BOMB_BAG_40 } },
|
{ ITEM_BOMB, { ITEM_BOMB_BAG_20, ITEM_BOMB_BAG_30, ITEM_BOMB_BAG_40 } },
|
||||||
|
@ -229,6 +233,8 @@ std::map<uint32_t, std::vector<uint32_t>> popupList = {
|
||||||
{ ITEM_WALLET_ADULT, { ITEM_WALLET_ADULT, ITEM_WALLET_GIANT } },
|
{ ITEM_WALLET_ADULT, { ITEM_WALLET_ADULT, ITEM_WALLET_GIANT } },
|
||||||
{ ITEM_SINGLE_MAGIC, { ITEM_SINGLE_MAGIC, ITEM_DOUBLE_MAGIC } },
|
{ ITEM_SINGLE_MAGIC, { ITEM_SINGLE_MAGIC, ITEM_DOUBLE_MAGIC } },
|
||||||
{ ITEM_SKULL_TOKEN, { } }
|
{ ITEM_SKULL_TOKEN, { } }
|
||||||
|
|
||||||
|
// clang-format on
|
||||||
};
|
};
|
||||||
|
|
||||||
std::string removeSpecialCharacters(const std::string& str) {
|
std::string removeSpecialCharacters(const std::string& str) {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#include "OTRGlobals.h"
|
#include "OTRGlobals.h"
|
||||||
#include "OTRAudio.h"
|
#include "OTRAudio.h"
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
@ -579,6 +579,7 @@ extern "C" void OTRAudio_Exit() {
|
||||||
|
|
||||||
extern "C" void VanillaItemTable_Init() {
|
extern "C" void VanillaItemTable_Init() {
|
||||||
static GetItemEntry getItemTable[] = {
|
static GetItemEntry getItemTable[] = {
|
||||||
|
// clang-format off
|
||||||
GET_ITEM(ITEM_BOMBS_5, OBJECT_GI_BOMB_1, GID_BOMB, 0x32, 0x59, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, GI_BOMBS_5),
|
GET_ITEM(ITEM_BOMBS_5, OBJECT_GI_BOMB_1, GID_BOMB, 0x32, 0x59, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, GI_BOMBS_5),
|
||||||
GET_ITEM(ITEM_NUTS_5, OBJECT_GI_NUTS, GID_NUTS, 0x34, 0x0C, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, GI_NUTS_5),
|
GET_ITEM(ITEM_NUTS_5, OBJECT_GI_NUTS, GID_NUTS, 0x34, 0x0C, CHEST_ANIM_SHORT, ITEM_CATEGORY_JUNK, MOD_NONE, GI_NUTS_5),
|
||||||
GET_ITEM(ITEM_BOMBCHU, OBJECT_GI_BOMB_2, GID_BOMBCHU, 0x33, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_BOMBCHUS_10),
|
GET_ITEM(ITEM_BOMBCHU, OBJECT_GI_BOMB_2, GID_BOMBCHU, 0x33, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_MAJOR, MOD_NONE, GI_BOMBCHUS_10),
|
||||||
|
@ -705,6 +706,7 @@ extern "C" void VanillaItemTable_Init() {
|
||||||
GET_ITEM_NONE,
|
GET_ITEM_NONE,
|
||||||
GET_ITEM_NONE,
|
GET_ITEM_NONE,
|
||||||
GET_ITEM_NONE // GI_MAX - if you need to add to this table insert it before this entry.
|
GET_ITEM_NONE // GI_MAX - if you need to add to this table insert it before this entry.
|
||||||
|
// clang-format on
|
||||||
};
|
};
|
||||||
ItemTableManager::Instance->AddItemTable(MOD_NONE);
|
ItemTableManager::Instance->AddItemTable(MOD_NONE);
|
||||||
for (uint8_t i = 0; i < ARRAY_COUNT(getItemTable); i++) {
|
for (uint8_t i = 0; i < ARRAY_COUNT(getItemTable); i++) {
|
||||||
|
@ -841,7 +843,7 @@ std::unordered_map<ItemID, GetItemID> ItemIDtoGetItemIDMap {
|
||||||
{ ITEM_TUNIC_ZORA, GI_TUNIC_ZORA },
|
{ ITEM_TUNIC_ZORA, GI_TUNIC_ZORA },
|
||||||
{ ITEM_WALLET_ADULT, GI_WALLET_ADULT },
|
{ ITEM_WALLET_ADULT, GI_WALLET_ADULT },
|
||||||
{ ITEM_WALLET_GIANT, GI_WALLET_GIANT },
|
{ ITEM_WALLET_GIANT, GI_WALLET_GIANT },
|
||||||
{ ITEM_WEIRD_EGG, GI_WEIRD_EGG }
|
{ ITEM_WEIRD_EGG, GI_WEIRD_EGG },
|
||||||
};
|
};
|
||||||
|
|
||||||
extern "C" GetItemID RetrieveGetItemIDFromItemID(ItemID itemID) {
|
extern "C" GetItemID RetrieveGetItemIDFromItemID(ItemID itemID) {
|
||||||
|
@ -1523,7 +1525,7 @@ std::map<std::string, SoundFontSample*> cachedCustomSFs;
|
||||||
|
|
||||||
extern "C" SoundFontSample* ReadCustomSample(const char* path) {
|
extern "C" SoundFontSample* ReadCustomSample(const char* path) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
/*
|
/*
|
||||||
if (!ExtensionCache.contains(path))
|
if (!ExtensionCache.contains(path))
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
|
@ -1576,7 +1578,7 @@ extern "C" SoundFontSample* ReadCustomSample(const char* path) {
|
||||||
}
|
}
|
||||||
|
|
||||||
return nullptr;
|
return nullptr;
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
ImFont* OTRGlobals::CreateFontWithSize(float size, std::string fontPath) {
|
ImFont* OTRGlobals::CreateFontWithSize(float size, std::string fontPath) {
|
||||||
|
@ -2070,7 +2072,7 @@ extern "C" bool Randomizer_IsCheckShuffled(RandomizerCheck rc) {
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" GetItemEntry GetItemMystery() {
|
extern "C" GetItemEntry GetItemMystery() {
|
||||||
return { ITEM_NONE_FE, 0, 0, 0, 0, 0, 0, ITEM_NONE_FE, 0, false, ITEM_FROM_NPC, ITEM_CATEGORY_JUNK, NULL, MOD_RANDOMIZER, (CustomDrawFunc)Randomizer_DrawMysteryItem };
|
return GET_ITEM_MYSTERY;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" uint8_t Randomizer_IsSeedGenerated() {
|
extern "C" uint8_t Randomizer_IsSeedGenerated() {
|
||||||
|
|
|
@ -125,7 +125,7 @@ std::map<uint32_t, ItemMapEntry> itemMapping = {
|
||||||
ITEM_MAP_ENTRY(ITEM_DUNGEON_MAP),
|
ITEM_MAP_ENTRY(ITEM_DUNGEON_MAP),
|
||||||
ITEM_MAP_ENTRY(ITEM_KEY_SMALL),
|
ITEM_MAP_ENTRY(ITEM_KEY_SMALL),
|
||||||
ITEM_MAP_ENTRY(ITEM_MAGIC_SMALL),
|
ITEM_MAP_ENTRY(ITEM_MAGIC_SMALL),
|
||||||
ITEM_MAP_ENTRY(ITEM_MAGIC_LARGE)
|
ITEM_MAP_ENTRY(ITEM_MAGIC_LARGE),
|
||||||
};
|
};
|
||||||
|
|
||||||
std::map<uint32_t, ItemMapEntry> gregMapping = {
|
std::map<uint32_t, ItemMapEntry> gregMapping = {
|
||||||
|
|
|
@ -605,6 +605,7 @@ static bool invert_matrix(const float m[16], float invOut[16]) {
|
||||||
float inv[16], det;
|
float inv[16], det;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
// clang-format off
|
||||||
inv[0] = m[5] * m[10] * m[15] -
|
inv[0] = m[5] * m[10] * m[15] -
|
||||||
m[5] * m[11] * m[14] -
|
m[5] * m[11] * m[14] -
|
||||||
m[9] * m[6] * m[15] +
|
m[9] * m[6] * m[15] +
|
||||||
|
@ -716,6 +717,7 @@ static bool invert_matrix(const float m[16], float invOut[16]) {
|
||||||
m[4] * m[2] * m[9] +
|
m[4] * m[2] * m[9] +
|
||||||
m[8] * m[1] * m[6] -
|
m[8] * m[1] * m[6] -
|
||||||
m[8] * m[2] * m[5];
|
m[8] * m[2] * m[5];
|
||||||
|
// clang-format on
|
||||||
|
|
||||||
det = m[0] * inv[0] + m[1] * inv[4] + m[2] * inv[8] + m[3] * inv[12];
|
det = m[0] * inv[0] + m[1] * inv[4] + m[2] * inv[8] + m[3] * inv[12];
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue