mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2025-04-28 13:17:58 +03: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_MM2, "Running Man (Adult 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));
|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@ typedef enum TimerDisplay {
|
|||
DISPLAY_IN_GAME_TIMER,
|
||||
DISPLAY_TIME_OF_DAY,
|
||||
DISPLAY_CONDITIONAL_TIMER,
|
||||
DISPLAY_NAVI_TIMER
|
||||
DISPLAY_NAVI_TIMER,
|
||||
} TimerDisplay;
|
||||
|
||||
typedef enum NaviTimerValues {
|
||||
|
@ -34,4 +34,4 @@ typedef struct {
|
|||
const char* timeEnable;
|
||||
} TimeObject;
|
||||
|
||||
extern const std::vector<TimeObject> timeDisplayList;
|
||||
extern const std::vector<TimeObject> timeDisplayList;
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
{ sequenceId, { sequenceId, label, sfxKey, category, canBeReplaced, canBeUsedAsReplacement } }
|
||||
|
||||
AudioCollection::AudioCollection() {
|
||||
// clang-format off
|
||||
// (originalSequenceId, label, sfxKey, category, canBeReplaced, canBeUsedAsReplacement),
|
||||
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_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) {
|
||||
|
|
|
@ -618,7 +618,7 @@ void AudioEditor::DrawElement() {
|
|||
{SEQ_SFX, true },
|
||||
{SEQ_VOICE, 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
|
||||
|
@ -772,7 +772,7 @@ void AudioEditor::DrawElement() {
|
|||
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() {
|
||||
for (auto type : allTypes) {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#include "BossRush.h"
|
||||
#include "BossRush.h"
|
||||
#include "soh/OTRGlobals.h"
|
||||
#include "soh/Enhancements/game-interactor/GameInteractor.h"
|
||||
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
|
||||
|
@ -34,7 +34,7 @@ BossRushSetting BossRushOptions[BR_OPTIONS_MAX] = {
|
|||
{ "All", "Alle", "Tous" },
|
||||
{ "Child", "Kind", "Enfant" },
|
||||
{ "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" },
|
||||
{ "3", "3", "3" },
|
||||
{ "5", "5", "5" },
|
||||
{ "7", "7", "7" }
|
||||
{ "7", "7", "7" },
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -53,7 +53,7 @@ BossRushSetting BossRushOptions[BR_OPTIONS_MAX] = {
|
|||
{
|
||||
{ "Limited", "Limitiert", "Limitées" },
|
||||
{ "Full", "Voll", "Pleines" },
|
||||
{ "Maxed", "Maximum", "Maximum" }
|
||||
{ "Maxed", "Maximum", "Maximum" },
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -61,28 +61,28 @@ BossRushSetting BossRushOptions[BR_OPTIONS_MAX] = {
|
|||
{
|
||||
{ "Before Ganondorf", "Vor Ganondorf", "Avant Ganondorf" },
|
||||
{ "Every Boss", "Bei jedem Boss", "Tous les Boss" },
|
||||
{ "Never", "Niemals", "Jamais" }
|
||||
{ "Never", "Niemals", "Jamais" },
|
||||
}
|
||||
},
|
||||
{
|
||||
{ "HYPER BOSSES:", "HYPER-BOSSE:", "HYPER BOSS:" },
|
||||
{
|
||||
{ "No", "Nein", "Non" },
|
||||
{ "Yes", "Ja", "Oui" }
|
||||
{ "Yes", "Ja", "Oui" },
|
||||
}
|
||||
},
|
||||
{
|
||||
{ "MAGIC:", "MAGIE:", "MAGIE:" },
|
||||
{
|
||||
{ "Single", "Einzel", "Simple" },
|
||||
{ "Double", "Doppel", "Double" }
|
||||
{ "Double", "Doppel", "Double" },
|
||||
}
|
||||
},
|
||||
{
|
||||
{ "BIG. SWORD:", "BIG.-SCHWERT:", "EPÉE DE BIG.:" },
|
||||
{
|
||||
{ "No", "Nein", "Non" },
|
||||
{ "Yes", "Ja", "Oui" }
|
||||
{ "Yes", "Ja", "Oui" },
|
||||
}
|
||||
},
|
||||
{
|
||||
|
@ -93,35 +93,35 @@ BossRushSetting BossRushOptions[BR_OPTIONS_MAX] = {
|
|||
{ "Fairy", "Fee", "Fée" },
|
||||
{ "Red Potion", "Rotes Elixier", "Potion Rouge" },
|
||||
{ "Green Potion", "Grünes Elixier", "Potion Verte" },
|
||||
{ "Blue Potion", "Blaues Elixier", "Potion Bleue" }
|
||||
{ "Blue Potion", "Blaues Elixier", "Potion Bleue" },
|
||||
}
|
||||
},
|
||||
{
|
||||
{ "LONGSHOT:", "ENTERHAKEN:", "SUPER GRAPPIN:" },
|
||||
{
|
||||
{ "No", "Nein", "Non" },
|
||||
{ "Yes", "Ja", "Oui" }
|
||||
{ "Yes", "Ja", "Oui" },
|
||||
}
|
||||
},
|
||||
{
|
||||
{ "HOVER BOOTS:", "GLEITSTIEFEL:", "BOTTES DES AIRS:" },
|
||||
{
|
||||
{ "No", "Nein", "Non" },
|
||||
{ "Yes", "Ja", "Oui" }
|
||||
{ "Yes", "Ja", "Oui" },
|
||||
}
|
||||
},
|
||||
{
|
||||
{ "BUNNY HOOD:", "HASENOHREN:", "MASQUE DU LAPIN:" },
|
||||
{
|
||||
{ "No", "Nein", "Non" },
|
||||
{ "Yes", "Ja", "Oui" }
|
||||
{ "Yes", "Ja", "Oui" },
|
||||
}
|
||||
},
|
||||
{
|
||||
{ "TIMER:", "TIMER:", "TIMER:" },
|
||||
{
|
||||
{ "Yes", "Ja", "Oui" },
|
||||
{ "No", "Nein", "Non" }
|
||||
{ "No", "Nein", "Non" },
|
||||
}
|
||||
}
|
||||
};
|
||||
|
@ -507,7 +507,7 @@ void BossRush_InitSave() {
|
|||
static void* sSavePromptNoChoiceTexs[] = {
|
||||
(void*)gPauseNoENGTex,
|
||||
(void*)gPauseNoGERTex,
|
||||
(void*)gPauseNoFRATex
|
||||
(void*)gPauseNoFRATex,
|
||||
};
|
||||
|
||||
void BossRush_OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_list originalArgs) {
|
||||
|
|
|
@ -37,28 +37,28 @@ typedef enum {
|
|||
typedef enum {
|
||||
BR_CHOICE_AMMO_LIMITED,
|
||||
BR_CHOICE_AMMO_FULL,
|
||||
BR_CHOICE_AMMO_MAXED
|
||||
BR_CHOICE_AMMO_MAXED,
|
||||
} BossRushAmmoChoices;
|
||||
|
||||
typedef enum {
|
||||
BR_CHOICE_HEAL_GANONDORF,
|
||||
BR_CHOICE_HEAL_EVERYBOSS,
|
||||
BR_CHOICE_HEAL_NEVER
|
||||
BR_CHOICE_HEAL_NEVER,
|
||||
} BossRushHealChoices;
|
||||
|
||||
typedef enum {
|
||||
BR_CHOICE_HYPERBOSSES_NO,
|
||||
BR_CHOICE_HYPERBOSSES_YES
|
||||
BR_CHOICE_HYPERBOSSES_YES,
|
||||
} BossRushHyperBossesChoices;
|
||||
|
||||
typedef enum {
|
||||
BR_CHOICE_MAGIC_SINGLE,
|
||||
BR_CHOICE_MAGIC_DOUBLE
|
||||
BR_CHOICE_MAGIC_DOUBLE,
|
||||
} BossRushMagicChoices;
|
||||
|
||||
typedef enum {
|
||||
BR_CHOICE_BGS_NO,
|
||||
BR_CHOICE_BGS_YES
|
||||
BR_CHOICE_BGS_YES,
|
||||
} BossRushBgsChoices;
|
||||
|
||||
typedef enum {
|
||||
|
@ -72,20 +72,20 @@ typedef enum {
|
|||
|
||||
typedef enum {
|
||||
BR_CHOICE_LONGSHOT_NO,
|
||||
BR_CHOICE_LONGSHOT_YES
|
||||
BR_CHOICE_LONGSHOT_YES,
|
||||
} BossRushLongshotChoices;
|
||||
|
||||
typedef enum {
|
||||
BR_CHOICE_HOVERBOOTS_NO,
|
||||
BR_CHOICE_HOVERBOOTS_YES
|
||||
BR_CHOICE_HOVERBOOTS_YES,
|
||||
} BossRushHoverBootsChoices;
|
||||
|
||||
typedef enum {
|
||||
BR_CHOICE_BUNNYHOOD_NO,
|
||||
BR_CHOICE_BUNNYHOOD_YES
|
||||
BR_CHOICE_BUNNYHOOD_YES,
|
||||
} BossRushBunnyHoodChoices;
|
||||
|
||||
typedef enum {
|
||||
BR_CHOICE_TIMER_YES,
|
||||
BR_CHOICE_TIMER_NO
|
||||
BR_CHOICE_TIMER_NO,
|
||||
} BossRushTimerChoices;
|
||||
|
|
|
@ -119,6 +119,7 @@ Color_RGBA8 ColorRGBA8(uint8_t r, uint8_t g, uint8_t b, uint8_t a) {
|
|||
supportsAlpha, supportsRainbow, advancedOption \
|
||||
} }
|
||||
|
||||
// clang-format off
|
||||
/*
|
||||
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.IronKnuckles", "Iron Knuckles", COSMETICS_GROUP_NPC, ColorRGBA8(245, 255, 205, 255), false, true, false),
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
static const char* MarginCvarList[] {
|
||||
CVAR_COSMETIC("HUD.Hearts"),
|
||||
|
@ -461,7 +463,7 @@ static const char* MarginCvarList[] {
|
|||
CVAR_COSMETIC("HUD.ArcheryScore"),
|
||||
CVAR_COSMETIC("HUD.TitleCard.Map"),
|
||||
CVAR_COSMETIC("HUD.TitleCard.Boss"),
|
||||
CVAR_COSMETIC("HUD.IGT")
|
||||
CVAR_COSMETIC("HUD.IGT"),
|
||||
};
|
||||
|
||||
static const char* MarginCvarNonAnchor[] {
|
||||
|
@ -469,7 +471,7 @@ static const char* MarginCvarNonAnchor[] {
|
|||
CVAR_COSMETIC("HUD.Timers"),
|
||||
CVAR_COSMETIC("HUD.ArcheryScore"),
|
||||
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) {
|
||||
|
|
|
@ -25,7 +25,7 @@ typedef enum {
|
|||
COSMETICS_GROUP_NAVI,
|
||||
COSMETICS_GROUP_IVAN,
|
||||
COSMETICS_GROUP_MESSAGE,
|
||||
COSMETICS_GROUP_MAX
|
||||
COSMETICS_GROUP_MAX,
|
||||
} CosmeticGroup;
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
typedef enum {
|
||||
COLORSCHEME_N64,
|
||||
COLORSCHEME_GAMECUBE
|
||||
COLORSCHEME_GAMECUBE,
|
||||
} DefaultColorScheme;
|
||||
|
||||
typedef enum {
|
||||
|
@ -15,5 +15,5 @@ typedef enum {
|
|||
ANCHOR_RIGHT,
|
||||
ANCHOR_NONE,
|
||||
HIDDEN,
|
||||
ANCHOR_TO_LIFE_METER
|
||||
ANCHOR_TO_LIFE_METER,
|
||||
} 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 },
|
||||
{ "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" },
|
||||
{ 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 = {
|
||||
{ "0", ITEM_KOKIRI_EMERALD },
|
||||
|
@ -44,7 +44,7 @@ static const std::unordered_map<std::string, ItemID> altarIcons = {
|
|||
{ "m", ITEM_DUNGEON_MAP },
|
||||
{ "C", ITEM_COMPASS },
|
||||
{ "s", ITEM_SKULL_TOKEN },
|
||||
{ "g", ITEM_MASK_GORON }
|
||||
{ "g", ITEM_MASK_GORON },
|
||||
};
|
||||
|
||||
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 },
|
||||
{ "õ", 7 }, { "ö", 7 }, { "÷", 11 }, { "ø", 9 }, { "ù", 7 }, { "ú", 7 }, { "û", 7 }, { "ü", 7 },
|
||||
{ "ý", 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_,
|
||||
|
|
|
@ -181,7 +181,7 @@ static const char* msgStaticTbl[] =
|
|||
gFadingMessageBackgroundTex,
|
||||
gMessageContinueTriangleTex,
|
||||
gMessageEndSquareTex,
|
||||
gMessageArrowTex
|
||||
gMessageArrowTex,
|
||||
};
|
||||
|
||||
void MessageDebug_StartTextBox(const char* tableId, uint16_t textId, uint8_t language) {
|
||||
|
|
|
@ -42,7 +42,7 @@ typedef enum {
|
|||
LIST,
|
||||
TARGET,
|
||||
HELD,
|
||||
INTERACT
|
||||
INTERACT,
|
||||
} RetrievalMethod;
|
||||
|
||||
std::array<const char*, 12> acMapping = {
|
||||
|
@ -230,7 +230,7 @@ static std::vector<u16> noParamsActors = {
|
|||
ACTOR_UNSET_15D,
|
||||
ACTOR_UNSET_161,
|
||||
ACTOR_UNSET_180,
|
||||
ACTOR_UNSET_1AA
|
||||
ACTOR_UNSET_1AA,
|
||||
};
|
||||
|
||||
static std::unordered_map<u16, std::function<s16(s16)>> actorSpecificData;
|
||||
|
@ -402,7 +402,7 @@ void CreateActorSpecificData() {
|
|||
"Zora Tunic",
|
||||
"Goron Tunic",
|
||||
"Bombs (Special)",
|
||||
"Bombchus"
|
||||
"Bombchus",
|
||||
};
|
||||
|
||||
int selectedItem = params & 0xFF;
|
||||
|
@ -439,7 +439,7 @@ void CreateActorSpecificData() {
|
|||
"Zora Tunic",
|
||||
"Goron Tunic",
|
||||
"Bombs (Special)",
|
||||
"Bombchus"
|
||||
"Bombchus",
|
||||
};
|
||||
|
||||
int selectedItem = params & 0xFF;
|
||||
|
@ -519,7 +519,7 @@ void CreateActorSpecificData() {
|
|||
"Bombs (5) (35 Rupees)",
|
||||
"Red Potion (40 Rupees)",
|
||||
"Red Potion (50 Rupees)",
|
||||
"Randomizer Item"
|
||||
"Randomizer Item",
|
||||
};
|
||||
int selectedItem = params;
|
||||
if (ImGui::Combo("Type", &selectedItem, items, IM_ARRAYSIZE(items))) {
|
||||
|
@ -537,7 +537,7 @@ void CreateActorSpecificData() {
|
|||
"Spawned Falling (2)",
|
||||
//"INVALID",
|
||||
"Ceiling Spot Spawner",
|
||||
"On Floor"
|
||||
"On Floor",
|
||||
};
|
||||
int selectedItem = params > 3 ? params - 1 : params;
|
||||
if (ImGui::Combo("Type", &selectedItem, items, IM_ARRAYSIZE(items))) {
|
||||
|
@ -568,7 +568,7 @@ void CreateActorSpecificData() {
|
|||
"Magic Fire",
|
||||
"Magic Wind",
|
||||
"Magic Dark",
|
||||
"Bullet Bag"
|
||||
"Bullet Bag",
|
||||
};
|
||||
int selectedItem = params;
|
||||
if (ImGui::Combo("Type", &selectedItem, items, IM_ARRAYSIZE(items))) {
|
||||
|
@ -587,7 +587,7 @@ void CreateActorSpecificData() {
|
|||
"Spawner",
|
||||
"Revive Death",
|
||||
"Heal",
|
||||
"Heal Big"
|
||||
"Heal Big",
|
||||
};
|
||||
int selectedItem = params;
|
||||
if (ImGui::Combo("Type", &selectedItem, items, IM_ARRAYSIZE(items))) {
|
||||
|
@ -601,7 +601,7 @@ void CreateActorSpecificData() {
|
|||
static const char* items[] = {
|
||||
"Cutscene", //0
|
||||
"Normal", //1
|
||||
"Laser" //100
|
||||
"Laser", //100
|
||||
};
|
||||
int selectedItem = params == 100 ? 2 : params;
|
||||
if (ImGui::Combo("Type", &selectedItem, items, IM_ARRAYSIZE(items))) {
|
||||
|
@ -647,7 +647,7 @@ void CreateActorSpecificData() {
|
|||
"UNK 7",
|
||||
"Orange",
|
||||
"Green",
|
||||
"Red"
|
||||
"Red",
|
||||
};
|
||||
int selectedItem = params + 2;
|
||||
if (ImGui::Combo("Type", &selectedItem, items, IM_ARRAYSIZE(items))) {
|
||||
|
@ -716,7 +716,7 @@ void CreateActorSpecificData() {
|
|||
"Switch Flag Fall Small",
|
||||
"9",
|
||||
"10",
|
||||
"Switch Flag Big"
|
||||
"Switch Flag Big",
|
||||
};
|
||||
|
||||
int type = (params >> 12) & 0xF;
|
||||
|
|
|
@ -1659,7 +1659,7 @@ const std::vector<std::string> state1 = {
|
|||
"In Item Cutscene",
|
||||
"In Cutscene",
|
||||
"30", //Unknown
|
||||
"Floor collision disabled"
|
||||
"Floor collision disabled",
|
||||
};
|
||||
|
||||
const std::vector<std::string> state2 = {
|
||||
|
@ -1694,7 +1694,7 @@ const std::vector<std::string> state2 = {
|
|||
"Idling",
|
||||
"Disabled draw func",
|
||||
"Sword Lunge",
|
||||
"Void out"
|
||||
"Void out",
|
||||
};
|
||||
|
||||
const std::vector<std::string> state3 = {
|
||||
|
@ -1705,7 +1705,7 @@ const std::vector<std::string> state3 = {
|
|||
"Check Floor Water Collision",
|
||||
"Force Pull Ocarina",
|
||||
"Restore Nayru's Love",
|
||||
"Travelling to Hook Target"
|
||||
"Travelling to Hook Target",
|
||||
};
|
||||
|
||||
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);
|
||||
|
||||
// clang-format off
|
||||
std::vector<ValueTableElement> valueTable = {
|
||||
{ "Time", "gSaveContext.dayTime", "TIME:", TYPE_U16, false, []() -> void* { return &gSaveContext.dayTime; }, 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
|
||||
*/
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
extern "C" void ValueViewer_Draw(GfxPrint* printer) {
|
||||
for (int i = 0; i < valueTable.size(); i++) {
|
||||
|
|
|
@ -11,14 +11,14 @@ typedef enum {
|
|||
CSMC_DISABLED,
|
||||
CSMC_BOTH,
|
||||
CSMC_TEXTURE,
|
||||
CSMC_SIZE
|
||||
CSMC_SIZE,
|
||||
} ChestStyleMatchesContentsType;
|
||||
|
||||
typedef enum {
|
||||
SGIA_DISABLED,
|
||||
SGIA_JUNK,
|
||||
SGIA_ALL,
|
||||
SGIA_SIZE
|
||||
SGIA_SIZE,
|
||||
} SkipGetItemAnimationType;
|
||||
|
||||
typedef enum {
|
||||
|
@ -31,7 +31,7 @@ typedef enum {
|
|||
typedef enum {
|
||||
BUNNY_HOOD_VANILLA,
|
||||
BUNNY_HOOD_FAST,
|
||||
BUNNY_HOOD_FAST_AND_JUMP
|
||||
BUNNY_HOOD_FAST_AND_JUMP,
|
||||
} BunnyHoodMode;
|
||||
|
||||
typedef enum {
|
||||
|
@ -55,7 +55,7 @@ typedef enum {
|
|||
typedef enum {
|
||||
BOOTSEQUENCE_DEFAULT,
|
||||
BOOTSEQUENCE_AUTHENTIC,
|
||||
BOOTSEQUENCE_FILESELECT
|
||||
BOOTSEQUENCE_FILESELECT,
|
||||
} BootSequenceType;
|
||||
|
||||
typedef enum {
|
||||
|
|
|
@ -709,6 +709,7 @@ void SetupDisplayNames() {
|
|||
// 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)
|
||||
|
||||
// clang-format off
|
||||
strcpy(itemTimestampDisplayName[ITEM_BOW], "Fairy Bow: ");
|
||||
strcpy(itemTimestampDisplayName[ITEM_ARROW_FIRE], "Fire Arrows: ");
|
||||
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_FOUND_GREG], "Greg Found: ");
|
||||
strcpy(itemTimestampDisplayName[TIMESTAMP_TRIFORCE_COMPLETED], "Triforce Completed: ");
|
||||
// clang-format on
|
||||
}
|
||||
|
||||
void SetupDisplayColors() {
|
||||
|
|
|
@ -715,7 +715,8 @@ void RegisterEnemyDefeatCounts() {
|
|||
break;
|
||||
|
||||
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]++;
|
||||
}
|
||||
break;
|
||||
|
@ -833,8 +834,8 @@ void RegisterRandomizedEnemySizes() {
|
|||
randomNumber = rand() % 200;
|
||||
// Between 100% and 300% size.
|
||||
randomScale = 1.0f + (randomNumber / 100);
|
||||
// Small actor
|
||||
} else {
|
||||
// Small actor
|
||||
randomNumber = rand() % 90;
|
||||
// Between 10% and 100% size.
|
||||
randomScale = 0.1f + (randomNumber / 100);
|
||||
|
|
|
@ -22,6 +22,7 @@ using namespace std::literals::string_literals;
|
|||
namespace Rando {
|
||||
|
||||
void StaticData::HintTable_Init() {
|
||||
// clang-format off
|
||||
/*--------------------------
|
||||
| GENERAL TEXT |
|
||||
---------------------------*/
|
||||
|
@ -46,12 +47,13 @@ void StaticData::HintTable_Init() {
|
|||
"Man erzählt sich, daß #[[2]]# #[[1]]# horte.",
|
||||
/*french*/ "Selon moi, #[[2]]# recèle #[[1]]#.", {QM_RED, QM_GREEN}));
|
||||
// /*spanish*/ "Según dicen, #[[2]]# acapara #[[1]]#."
|
||||
// clang-format on
|
||||
|
||||
HintTable_Init_Item();
|
||||
HintTable_Init_Exclude_Overworld();
|
||||
HintTable_Init_Exclude_Dungeon();
|
||||
|
||||
|
||||
// clang-format off
|
||||
/*--------------------------
|
||||
| SOMETIMES HINT TEXT |
|
||||
---------------------------*/
|
||||
|
@ -2418,5 +2420,6 @@ void StaticData::HintTable_Init() {
|
|||
/*german*/ "&Man kann darauf die Worte&%r\"Master Quest\"%w entziffern...",
|
||||
/*french*/ "&Étrange... les mots %r\"Master&Quest\"%w sont gravés dessus."));
|
||||
|
||||
// clang-format on
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,10 +4,12 @@
|
|||
|
||||
namespace Rando {
|
||||
void StaticData::HintTable_Init_Exclude_Dungeon() {
|
||||
/*--------------------------
|
||||
| DEKU TREE |
|
||||
---------------------------*/
|
||||
hintTextTable[RHT_DEKU_TREE_MAP_CHEST] = HintText(CustomMessage("They say that in the #center of the Deku Tree# lies #[[1]]#.",
|
||||
// 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]]#.",
|
||||
/*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}));
|
||||
// /*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*/ "",
|
||||
/*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 {
|
||||
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]]#.",
|
||||
/*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 }));
|
||||
|
||||
// clang-format on
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,7 +5,8 @@
|
|||
namespace Rando {
|
||||
|
||||
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"),
|
||||
// /*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"));
|
||||
// /*spanish*/Algo Misterioso
|
||||
|
||||
// clang-format on
|
||||
}
|
||||
}
|
||||
|
|
|
@ -149,7 +149,7 @@ const std::array<RandomizerGet, 44> easyItems = {
|
|||
RG_PIECE_OF_HEART,
|
||||
};
|
||||
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,
|
||||
|
@ -184,7 +184,9 @@ const std::array<RandomizerGet, 43> normalItems = {
|
|||
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,
|
||||
|
|
|
@ -41,7 +41,7 @@ typedef struct {
|
|||
|
||||
typedef enum PlandoTabs {
|
||||
TAB_HINTS,
|
||||
TAB_LOCATIONS
|
||||
TAB_LOCATIONS,
|
||||
} PlandoTabs;
|
||||
|
||||
typedef enum PlandoHints {
|
||||
|
@ -49,4 +49,4 @@ typedef enum PlandoHints {
|
|||
HINT_ALL,
|
||||
} PlandoHints;
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
|
|
@ -59,6 +59,7 @@ void RegisterShuffleCows() {
|
|||
static RegisterShipInitFunc initFunc(RegisterShuffleCows, { "IS_RANDO" });
|
||||
|
||||
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_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));
|
||||
|
@ -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_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));
|
||||
|
||||
// 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() {
|
||||
// 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_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));
|
||||
|
@ -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_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));
|
||||
|
||||
// clang-format on
|
||||
}
|
||||
|
||||
static RegisterShipInitFunc initFunc(Rando::StaticData::RegisterFairyLocations);
|
||||
|
|
|
@ -45,6 +45,7 @@ void ShuffleFreestanding_OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* sh
|
|||
}
|
||||
|
||||
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_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));
|
||||
|
@ -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_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));
|
||||
|
||||
// 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() {
|
||||
// clang-format off
|
||||
// Overworld Pots
|
||||
// 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));
|
||||
|
@ -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_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));
|
||||
|
||||
// clang-format on
|
||||
}
|
||||
|
||||
static RegisterShipInitFunc initFunc(Rando::StaticData::RegisterPotLocations);
|
||||
static RegisterShipInitFunc initFunc(Rando::StaticData::RegisterPotLocations);
|
||||
|
|
|
@ -856,6 +856,7 @@ int EntranceShuffler::ShuffleAllEntrances() {
|
|||
mCurNumRandomizedEntrances = 0;
|
||||
|
||||
std::vector<EntranceInfoPair> entranceShuffleTable = {
|
||||
// clang-format off
|
||||
// Type Parent Region Connected Region Index
|
||||
{ { 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 } },
|
||||
|
@ -1161,6 +1162,7 @@ int EntranceShuffler::ShuffleAllEntrances() {
|
|||
NO_RETURN_ENTRANCE },
|
||||
{ { EntranceType::BlueWarp, RR_SHADOW_TEMPLE_BOSS_ROOM, RR_GRAVEYARD_WARP_PAD_REGION, ENTR_GRAVEYARD_SHADOW_TEMPLE_BLUE_WARP },
|
||||
NO_RETURN_ENTRANCE },
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
std::map<std::string, PriorityEntrance> priorityEntranceTable = {
|
||||
|
|
|
@ -580,6 +580,7 @@ extern "C" {
|
|||
}
|
||||
|
||||
void Rando::StaticData::RegisterFishLocations() {
|
||||
// clang-format off
|
||||
// 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_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_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);
|
||||
// clang-format on
|
||||
}
|
||||
|
||||
static RegisterShipInitFunc initFunc(Rando::StaticData::RegisterFishLocations);
|
||||
|
|
|
@ -14,7 +14,7 @@ typedef struct {
|
|||
|
||||
typedef enum {
|
||||
FSO_SOURCE_RANDO,
|
||||
FSO_SOURCE_CVARS
|
||||
FSO_SOURCE_CVARS,
|
||||
} FishsanityOptionsSource;
|
||||
|
||||
typedef enum {
|
||||
|
|
|
@ -2047,15 +2047,15 @@ void RandomizerOnActorInitHandler(void* actorRef) {
|
|||
return;
|
||||
}
|
||||
|
||||
if (
|
||||
// If child is in the adult shooting gallery or adult in the child shooting gallery, then despawn the shooting gallery man
|
||||
actor->id == ACTOR_EN_SYATEKI_MAN &&
|
||||
RAND_GET_OPTION(RSK_SHUFFLE_INTERIOR_ENTRANCES) &&
|
||||
(
|
||||
(LINK_IS_CHILD && Entrance_SceneAndSpawnAre(SCENE_SHOOTING_GALLERY, 0x00)) || //Kakariko Village -> Adult Shooting Gallery, index 003B in the entrance table
|
||||
(LINK_IS_ADULT && Entrance_SceneAndSpawnAre(SCENE_SHOOTING_GALLERY, 0x01)) //Market -> Child Shooting Gallery, index 016D in the entrance table
|
||||
)
|
||||
) {
|
||||
// If child is in the adult shooting gallery or adult in the child shooting gallery, then despawn the shooting
|
||||
// gallery man
|
||||
if (actor->id == ACTOR_EN_SYATEKI_MAN && RAND_GET_OPTION(RSK_SHUFFLE_INTERIOR_ENTRANCES) &&
|
||||
((LINK_IS_CHILD &&
|
||||
// Kakariko Village -> Adult Shooting Gallery, index 003B in the entrance table
|
||||
Entrance_SceneAndSpawnAre(SCENE_SHOOTING_GALLERY, 0x00)) ||
|
||||
(LINK_IS_ADULT &&
|
||||
// Market -> Child Shooting Gallery, index 016D in the entrance table
|
||||
Entrance_SceneAndSpawnAre(SCENE_SHOOTING_GALLERY, 0x01)))) {
|
||||
Actor_Kill(actor);
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -12,6 +12,8 @@ std::unordered_map<std::string, RandomizerGet> Rando::StaticData::itemNameToEnum
|
|||
|
||||
void Rando::StaticData::InitItemTable() {
|
||||
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);
|
||||
// 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);
|
||||
|
@ -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_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
|
||||
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
|
||||
|
|
|
@ -261,6 +261,7 @@ void RegionTable_Init() {
|
|||
//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, {}, {}, {}));
|
||||
|
||||
// clang-format off
|
||||
areaTable[RR_ROOT] = Region("Root", "", {RA_LINKS_POCKET}, NO_DAY_NIGHT_CYCLE, {
|
||||
//Events
|
||||
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;}),
|
||||
});
|
||||
|
||||
// clang-format on
|
||||
|
||||
// Overworld
|
||||
RegionTable_Init_KokiriForest();
|
||||
RegionTable_Init_LostWoods();
|
||||
|
@ -571,4 +574,4 @@ Rando::Entrance* GetEntrance(const std::string name) {
|
|||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
using namespace Rando;
|
||||
|
||||
void RegionTable_Init_BottomOfTheWell() {
|
||||
// clang-format off
|
||||
// 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, {}, {}, {
|
||||
//Exits
|
||||
|
@ -293,4 +294,5 @@ void RegionTable_Init_BottomOfTheWell() {
|
|||
});
|
||||
|
||||
#pragma endregion
|
||||
}
|
||||
// clang-format on
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
using namespace Rando;
|
||||
|
||||
void RegionTable_Init_DekuTree() {
|
||||
// clang-format off
|
||||
// Vanilla/MQ Decider
|
||||
areaTable[RR_DEKU_TREE_ENTRYWAY] = Region("Deku Tree Entryway", "Deku Tree", {RA_DEKU_TREE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||
//Exits
|
||||
|
@ -360,4 +361,6 @@ void RegionTable_Init_DekuTree() {
|
|||
Entrance(RR_DEKU_TREE_BOSS_ENTRYWAY, []{return true;}),
|
||||
Entrance(RR_KF_OUTSIDE_DEKU_TREE, []{return logic->DekuTreeClear;}, false),
|
||||
});
|
||||
}
|
||||
|
||||
// clang-format on
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
using namespace Rando;
|
||||
|
||||
void RegionTable_Init_DodongosCavern() {
|
||||
// clang-format off
|
||||
// Vanilla/MQ Decider
|
||||
areaTable[RR_DODONGOS_CAVERN_ENTRYWAY] = Region("Dodongos Cavern Entryway", "Dodongos Cavern", {RA_DODONGOS_CAVERN}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||
//Exits
|
||||
|
@ -541,4 +542,6 @@ void RegionTable_Init_DodongosCavern() {
|
|||
Entrance(RR_DODONGOS_CAVERN_BOSS_ENTRYWAY, []{return true;}),
|
||||
Entrance(RR_DEATH_MOUNTAIN_TRAIL, []{return logic->DodongosCavernClear;}, false),
|
||||
});
|
||||
}
|
||||
|
||||
// clang-format on
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
using namespace Rando;
|
||||
|
||||
void RegionTable_Init_FireTemple() {
|
||||
// clang-format off
|
||||
// Vanilla/MQ Decider
|
||||
areaTable[RR_FIRE_TEMPLE_ENTRYWAY] = Region("Fire Temple Entryway", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||
//Exits
|
||||
|
@ -715,4 +716,6 @@ void RegionTable_Init_FireTemple() {
|
|||
Entrance(RR_FIRE_TEMPLE_BOSS_ENTRYWAY, []{return false;}),
|
||||
Entrance(RR_DMC_CENTRAL_LOCAL, []{return logic->FireTempleClear;}, false),
|
||||
});
|
||||
}
|
||||
|
||||
// clang-format on
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
using namespace Rando;
|
||||
|
||||
void RegionTable_Init_ForestTemple() {
|
||||
// clang-format off
|
||||
// Vanilla/MQ Decider
|
||||
areaTable[RR_FOREST_TEMPLE_ENTRYWAY] = Region("Forest Temple Entryway", "Forest Temple", {RA_FOREST_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||
//Exits
|
||||
|
@ -610,4 +611,6 @@ void RegionTable_Init_ForestTemple() {
|
|||
Entrance(RR_FOREST_TEMPLE_BOSS_ENTRYWAY, []{return false;}),
|
||||
Entrance(RR_SACRED_FOREST_MEADOW, []{return logic->ForestTempleClear;}, false),
|
||||
});
|
||||
}
|
||||
|
||||
// clang-format on
|
||||
}
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
using namespace Rando;
|
||||
|
||||
void RegionTable_Init_GanonsCastle() {
|
||||
// clang-format off
|
||||
// Vanilla/MQ Decider
|
||||
areaTable[RR_GANONS_CASTLE_ENTRYWAY] = Region("Ganon's Castle Entryway", "Ganon's Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||
//Exits
|
||||
|
@ -511,4 +512,5 @@ void RegionTable_Init_GanonsCastle() {
|
|||
}, {});
|
||||
|
||||
#pragma endregion
|
||||
}
|
||||
// clang-format on
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
using namespace Rando;
|
||||
|
||||
void RegionTable_Init_GerudoTrainingGround() {
|
||||
// clang-format off
|
||||
// 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, {}, {}, {
|
||||
//Exits
|
||||
|
@ -321,4 +322,5 @@ void RegionTable_Init_GerudoTrainingGround() {
|
|||
});
|
||||
|
||||
#pragma endregion
|
||||
}
|
||||
// clang-format on
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
using namespace Rando;
|
||||
|
||||
void RegionTable_Init_IceCavern() {
|
||||
// clang-format off
|
||||
// Vanilla/MQ Decider
|
||||
areaTable[RR_ICE_CAVERN_ENTRYWAY] = Region("Ice Cavern Entryway", "Ice Cavern", {RA_ICE_CAVERN}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||
//Exits
|
||||
|
@ -144,4 +145,5 @@ void RegionTable_Init_IceCavern() {
|
|||
}, {});
|
||||
|
||||
#pragma endregion
|
||||
}
|
||||
// clang-format on
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
using namespace Rando;
|
||||
|
||||
void RegionTable_Init_JabuJabusBelly() {
|
||||
// clang-format off
|
||||
// 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, {}, {}, {
|
||||
//Exits
|
||||
|
@ -356,4 +357,6 @@ void RegionTable_Init_JabuJabusBelly() {
|
|||
Entrance(RR_JABU_JABUS_BELLY_BOSS_ENTRYWAY, []{return false;}),
|
||||
Entrance(RR_ZORAS_FOUNTAIN, []{return logic->JabuJabusBellyClear;}, false),
|
||||
});
|
||||
}
|
||||
|
||||
// clang-format on
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
using namespace Rando;
|
||||
|
||||
void RegionTable_Init_ShadowTemple() {
|
||||
// clang-format off
|
||||
// Vanilla/MQ Decider
|
||||
areaTable[RR_SHADOW_TEMPLE_ENTRYWAY] = Region("Shadow Temple Entryway", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||
//Exits
|
||||
|
@ -409,4 +410,6 @@ void RegionTable_Init_ShadowTemple() {
|
|||
Entrance(RR_SHADOW_TEMPLE_BOSS_ENTRYWAY, []{return false;}),
|
||||
Entrance(RR_GRAVEYARD_WARP_PAD_REGION, []{return logic->ShadowTempleClear;}, false),
|
||||
});
|
||||
}
|
||||
|
||||
// clang-format on
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
using namespace Rando;
|
||||
|
||||
void RegionTable_Init_SpiritTemple() {
|
||||
// clang-format off
|
||||
// Vanilla/MQ Decider
|
||||
areaTable[RR_SPIRIT_TEMPLE_ENTRYWAY] = Region("Spirit Temple Entryway", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||
//Exits
|
||||
|
@ -554,4 +555,6 @@ void RegionTable_Init_SpiritTemple() {
|
|||
Entrance(RR_SPIRIT_TEMPLE_BOSS_ENTRYWAY, []{return false;}),
|
||||
Entrance(RR_DESERT_COLOSSUS, []{return logic->SpiritTempleClear;}, false),
|
||||
});
|
||||
}
|
||||
|
||||
// clang-format on
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
using namespace Rando;
|
||||
|
||||
void RegionTable_Init_WaterTemple() {
|
||||
// clang-format off
|
||||
// Vanilla/MQ Decider
|
||||
areaTable[RR_WATER_TEMPLE_ENTRYWAY] = Region("Water Temple Entryway", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||
//Exits
|
||||
|
@ -735,4 +736,6 @@ void RegionTable_Init_WaterTemple() {
|
|||
Entrance(RR_WATER_TEMPLE_BOSS_ENTRYWAY, []{return false;}),
|
||||
Entrance(RR_LAKE_HYLIA, []{return logic->WaterTempleClear;}, false),
|
||||
});
|
||||
}
|
||||
|
||||
// clang-format on
|
||||
}
|
||||
|
|
|
@ -9,6 +9,7 @@ using namespace Rando;
|
|||
*/
|
||||
|
||||
void RegionTable_Init_GerudoFortress() {
|
||||
// clang-format off
|
||||
areaTable[RR_GERUDO_FORTRESS] = Region("Gerudo Fortress", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {
|
||||
//Events
|
||||
EventAccess(&logic->CarpenterRescue, []{return logic->CanFinishGerudoFortress();}),
|
||||
|
@ -78,4 +79,6 @@ void RegionTable_Init_GerudoFortress() {
|
|||
//Exits
|
||||
Entrance(RR_GERUDO_FORTRESS, []{return true;}),
|
||||
});
|
||||
}
|
||||
|
||||
// clang-format on
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
using namespace Rando;
|
||||
|
||||
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
|
||||
//{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, {}, {}, {
|
||||
|
@ -114,4 +115,6 @@ void RegionTable_Init_CastleGrounds() {
|
|||
Entrance(RR_GANONS_CASTLE_GROUNDS, []{return logic->BuiltRainbowBridge;}),
|
||||
Entrance(RR_GANONS_CASTLE_ENTRYWAY, []{return logic->IsAdult;}),
|
||||
});
|
||||
}
|
||||
|
||||
// clang-format on
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
using namespace Rando;
|
||||
|
||||
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, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_DMC_UPPER_LOCAL, []{return logic->FireTimer() >= 48;}),
|
||||
|
@ -142,4 +143,6 @@ void RegionTable_Init_DeathMountainCrater() {
|
|||
//Exits
|
||||
Entrance(RR_DMC_CENTRAL_LOCAL, []{return logic->FireTimer() >= 48 && logic->CanUse(RG_DISTANT_SCARECROW);}),
|
||||
});
|
||||
}
|
||||
|
||||
// clang-format on
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
using namespace Rando;
|
||||
|
||||
void RegionTable_Init_DeathMountainTrail() {
|
||||
// clang-format off
|
||||
areaTable[RR_DEATH_MOUNTAIN_TRAIL] = Region("Death Mountain", "Death Mountain", {RA_DEATH_MOUNTAIN_TRAIL}, DAY_NIGHT_CYCLE, {
|
||||
//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));}),
|
||||
|
@ -98,4 +99,6 @@ void RegionTable_Init_DeathMountainTrail() {
|
|||
//Exits
|
||||
Entrance(RR_DEATH_MOUNTAIN_SUMMIT, []{return true;}),
|
||||
});
|
||||
}
|
||||
|
||||
// clang-format on
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
using namespace Rando;
|
||||
|
||||
void RegionTable_Init_DesertColossus() {
|
||||
// clang-format off
|
||||
areaTable[RR_DESERT_COLOSSUS] = Region("Desert Colossus", "Desert Colossus", {RA_DESERT_COLOSSUS}, DAY_NIGHT_CYCLE, {
|
||||
//Events
|
||||
EventAccess(&logic->FairyPond, []{return logic->FairyPond || logic->CanUse(RG_SONG_OF_STORMS);}),
|
||||
|
@ -74,4 +75,6 @@ void RegionTable_Init_DesertColossus() {
|
|||
//Exits
|
||||
Entrance(RR_DESERT_COLOSSUS, []{return true;}),
|
||||
});
|
||||
}
|
||||
|
||||
// clang-format on
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
using namespace Rando;
|
||||
|
||||
void RegionTable_Init_GerudoValley() {
|
||||
// clang-format off
|
||||
areaTable[RR_GERUDO_VALLEY] = Region("Gerudo Valley", "Gerudo Valley", {RA_GERUDO_VALLEY}, DAY_NIGHT_CYCLE, {
|
||||
//Events
|
||||
EventAccess(&logic->BugRock, []{return logic->BugRock || logic->IsChild;}),
|
||||
|
@ -108,4 +109,6 @@ void RegionTable_Init_GerudoValley() {
|
|||
//Exits
|
||||
Entrance(RR_GV_FORTRESS_SIDE, []{return true;}),
|
||||
});
|
||||
}
|
||||
|
||||
// clang-format on
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
using namespace Rando;
|
||||
|
||||
void RegionTable_Init_GoronCity() {
|
||||
// clang-format off
|
||||
areaTable[RR_GORON_CITY] = Region("Goron City", "Goron City", {RA_GORON_CITY}, NO_DAY_NIGHT_CYCLE, {
|
||||
//Events
|
||||
EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairyExceptSuns();}),
|
||||
|
@ -108,4 +109,6 @@ void RegionTable_Init_GoronCity() {
|
|||
//Exits
|
||||
Entrance(RR_GC_GROTTO_PLATFORM, []{return true;}),
|
||||
});
|
||||
}
|
||||
|
||||
// clang-format on
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
using namespace Rando;
|
||||
|
||||
void RegionTable_Init_Graveyard() {
|
||||
// clang-format off
|
||||
areaTable[RR_THE_GRAVEYARD] = Region("The Graveyard", "The Graveyard", {RA_THE_GRAVEYARD}, NO_DAY_NIGHT_CYCLE, {
|
||||
//Events
|
||||
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_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;
|
||||
|
||||
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, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_GF_OUTSIDE_GATE, []{return true;}),
|
||||
|
@ -35,4 +36,6 @@ void RegionTable_Init_HauntedWasteland() {
|
|||
Entrance(RR_DESERT_COLOSSUS, []{return true;}),
|
||||
Entrance(RR_HAUNTED_WASTELAND, []{return ctx->GetTrickOption(RT_HW_REVERSE) || false;}),
|
||||
});
|
||||
}
|
||||
|
||||
// clang-format on
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
using namespace Rando;
|
||||
|
||||
void RegionTable_Init_HyruleField() {
|
||||
// clang-format off
|
||||
areaTable[RR_HYRULE_FIELD] = Region("Hyrule Field", "Hyrule Field", {RA_HYRULE_FIELD}, DAY_NIGHT_CYCLE, {
|
||||
//Events
|
||||
EventAccess(&logic->BigPoeKill, []{return logic->CanUse(RG_FAIRY_BOW) && logic->CanUse(RG_EPONA) && logic->HasBottle();}),
|
||||
|
@ -140,4 +141,6 @@ void RegionTable_Init_HyruleField() {
|
|||
//Exits
|
||||
Entrance(RR_HYRULE_FIELD, []{return true;}),
|
||||
});
|
||||
}
|
||||
|
||||
// clang-format on
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
using namespace Rando;
|
||||
|
||||
void RegionTable_Init_Kakariko() {
|
||||
// clang-format off
|
||||
areaTable[RR_KAKARIKO_VILLAGE] = Region("Kakariko Village", "Kakariko Village", {RA_KAKARIKO_VILLAGE}, NO_DAY_NIGHT_CYCLE, {
|
||||
//Events
|
||||
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_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;
|
||||
|
||||
void RegionTable_Init_KokiriForest() {
|
||||
// clang-format off
|
||||
areaTable[RR_KOKIRI_FOREST] = Region("Kokiri Forest", "Kokiri Forest", {RA_KOKIRI_FOREST}, NO_DAY_NIGHT_CYCLE, {
|
||||
//Events
|
||||
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
|
||||
Entrance(RR_KOKIRI_FOREST, []{return true;})
|
||||
});
|
||||
}
|
||||
|
||||
// clang-format on
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
using namespace Rando;
|
||||
|
||||
void RegionTable_Init_LakeHylia() {
|
||||
// clang-format off
|
||||
areaTable[RR_LAKE_HYLIA] = Region("Lake Hylia", "Lake Hylia", {RA_LAKE_HYLIA}, DAY_NIGHT_CYCLE, {
|
||||
//Events
|
||||
EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairy();}),
|
||||
|
@ -128,4 +129,6 @@ void RegionTable_Init_LakeHylia() {
|
|||
//Exits
|
||||
Entrance(RR_LAKE_HYLIA, []{return true;}),
|
||||
});
|
||||
|
||||
// clang-format on
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
using namespace Rando;
|
||||
|
||||
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, {
|
||||
//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);}),
|
||||
|
@ -71,4 +72,6 @@ void RegionTable_Init_LonLonRanch() {
|
|||
//Exits
|
||||
Entrance(RR_LON_LON_RANCH, []{return true;}),
|
||||
});
|
||||
|
||||
// clang-format on
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
using namespace Rando;
|
||||
|
||||
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, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_KOKIRI_FOREST, []{return true;})
|
||||
|
@ -128,4 +129,6 @@ void RegionTable_Init_LostWoods() {
|
|||
Entrance(RR_HYRULE_FIELD, []{return true;}),
|
||||
Entrance(RR_THE_LOST_WOODS, []{return logic->CanUse(RG_LONGSHOT);}),
|
||||
});
|
||||
}
|
||||
|
||||
// clang-format on
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
using namespace Rando;
|
||||
|
||||
void RegionTable_Init_Market() {
|
||||
// clang-format off
|
||||
areaTable[RR_MARKET_ENTRANCE] = Region("Market Entrance", "Market Entrance", {RA_THE_MARKET}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_HYRULE_FIELD, []{return logic->IsAdult || logic->AtDay;}),
|
||||
|
@ -214,4 +215,6 @@ void RegionTable_Init_Market() {
|
|||
//Exits
|
||||
Entrance(RR_MARKET_BACK_ALLEY, []{return true;}),
|
||||
});
|
||||
|
||||
// clang-format on
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
using namespace Rando;
|
||||
|
||||
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, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_LW_BEYOND_MIDO, []{return true;}),
|
||||
|
@ -71,4 +72,6 @@ void RegionTable_Init_SacredForestMeadow() {
|
|||
//Exits
|
||||
Entrance(RR_SACRED_FOREST_MEADOW, []{return true;}),
|
||||
});
|
||||
}
|
||||
|
||||
// clang-format on
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
using namespace Rando;
|
||||
|
||||
void RegionTable_Init_TempleOfTime() {
|
||||
// clang-format off
|
||||
areaTable[RR_TOT_ENTRANCE] = Region("ToT Entrance", "ToT Entrance", {RA_THE_MARKET}, NO_DAY_NIGHT_CYCLE, {
|
||||
//Events
|
||||
EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairyExceptSuns();}),
|
||||
|
@ -51,4 +52,6 @@ void RegionTable_Init_TempleOfTime() {
|
|||
//Exits
|
||||
Entrance(RR_TEMPLE_OF_TIME, []{return true;}),
|
||||
});
|
||||
}
|
||||
|
||||
// clang-format on
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
using namespace Rando;
|
||||
|
||||
void RegionTable_Init_ZorasDomain() {
|
||||
// clang-format off
|
||||
areaTable[RR_ZORAS_DOMAIN] = Region("Zoras Domain", "Zoras Domain", {RA_ZORAS_DOMAIN}, NO_DAY_NIGHT_CYCLE, {
|
||||
//Events
|
||||
EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairyExceptSuns();}),
|
||||
|
@ -90,4 +91,6 @@ void RegionTable_Init_ZorasDomain() {
|
|||
//Exits
|
||||
Entrance(RR_ZORAS_DOMAIN_ISLAND, []{return true;}),
|
||||
});
|
||||
}
|
||||
|
||||
// clang-format on
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
using namespace Rando;
|
||||
|
||||
void RegionTable_Init_ZorasFountain() {
|
||||
// clang-format off
|
||||
areaTable[RR_ZORAS_FOUNTAIN] = Region("Zoras Fountain", "Zoras Fountain", {RA_ZORAS_FOUNTAIN}, NO_DAY_NIGHT_CYCLE, {
|
||||
//Events
|
||||
EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairyExceptSuns();}),
|
||||
|
@ -61,4 +62,6 @@ void RegionTable_Init_ZorasFountain() {
|
|||
//Exits
|
||||
Entrance(RR_ZORAS_FOUNTAIN, []{return true;}),
|
||||
});
|
||||
}
|
||||
|
||||
// clang-format on
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
using namespace Rando;
|
||||
|
||||
void RegionTable_Init_ZoraRiver() {
|
||||
// clang-format off
|
||||
areaTable[RR_ZR_FRONT] = Region("ZR Front", "Zora River", {RA_ZORAS_RIVER}, DAY_NIGHT_CYCLE, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_ZR_GS_TREE, logic->IsChild && logic->CanKillEnemy(RE_GOLD_SKULLTULA, ED_CLOSE)),
|
||||
|
@ -104,4 +105,6 @@ void RegionTable_Init_ZoraRiver() {
|
|||
//Exits
|
||||
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",
|
||||
"Tiberium", "TokKul", "Toys", "Turnips", "Upvotes",
|
||||
"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] = {
|
||||
|
@ -205,7 +205,7 @@ std::unordered_map<s16, s16> getItemIdToItemId = {
|
|||
{ GI_PRESCRIPTION, ITEM_PRESCRIPTION },
|
||||
{ GI_FROG, ITEM_FROG },
|
||||
{ GI_EYEDROPS, ITEM_EYEDROPS },
|
||||
{ GI_CLAIM_CHECK, ITEM_CLAIM_CHECK }
|
||||
{ GI_CLAIM_CHECK, ITEM_CLAIM_CHECK },
|
||||
};
|
||||
|
||||
#pragma optimize("", off)
|
||||
|
@ -400,12 +400,12 @@ void Randomizer::LoadMerchantMessages() {
|
|||
}
|
||||
|
||||
std::map<s32, TrialKey> trialFlagToTrialKey = {
|
||||
{ EVENTCHKINF_COMPLETED_LIGHT_TRIAL, TK_LIGHT_TRIAL, },
|
||||
{ EVENTCHKINF_COMPLETED_FOREST_TRIAL, TK_FOREST_TRIAL, },
|
||||
{ EVENTCHKINF_COMPLETED_FIRE_TRIAL, TK_FIRE_TRIAL, },
|
||||
{ EVENTCHKINF_COMPLETED_WATER_TRIAL, TK_WATER_TRIAL, },
|
||||
{ EVENTCHKINF_COMPLETED_SPIRIT_TRIAL, TK_SPIRIT_TRIAL, },
|
||||
{ EVENTCHKINF_COMPLETED_SHADOW_TRIAL, TK_SHADOW_TRIAL, }
|
||||
{ EVENTCHKINF_COMPLETED_LIGHT_TRIAL, TK_LIGHT_TRIAL },
|
||||
{ EVENTCHKINF_COMPLETED_FOREST_TRIAL, TK_FOREST_TRIAL },
|
||||
{ EVENTCHKINF_COMPLETED_FIRE_TRIAL, TK_FIRE_TRIAL },
|
||||
{ EVENTCHKINF_COMPLETED_WATER_TRIAL, TK_WATER_TRIAL },
|
||||
{ EVENTCHKINF_COMPLETED_SPIRIT_TRIAL, TK_SPIRIT_TRIAL },
|
||||
{ EVENTCHKINF_COMPLETED_SHADOW_TRIAL, TK_SHADOW_TRIAL },
|
||||
};
|
||||
|
||||
bool Randomizer::IsTrialRequired(s32 trialFlag) {
|
||||
|
@ -2272,7 +2272,7 @@ void RandomizerSettingsWindow::DrawElement() {
|
|||
{RA_BOTTOM_OF_THE_WELL, true},
|
||||
{RA_ICE_CAVERN, true},
|
||||
{RA_GERUDO_TRAINING_GROUND, true},
|
||||
{RA_GANONS_CASTLE, true}
|
||||
{RA_GANONS_CASTLE, true},
|
||||
};
|
||||
static std::unordered_map<RandomizerArea, bool> areaTreeEnabled {
|
||||
{RA_NONE, true},
|
||||
|
@ -2307,7 +2307,7 @@ void RandomizerSettingsWindow::DrawElement() {
|
|||
{RA_BOTTOM_OF_THE_WELL, true},
|
||||
{RA_ICE_CAVERN, true},
|
||||
{RA_GERUDO_TRAINING_GROUND, true},
|
||||
{RA_GANONS_CASTLE, true}
|
||||
{RA_GANONS_CASTLE, true},
|
||||
};
|
||||
|
||||
static std::map<Rando::Tricks::Tag, bool> showTag {
|
||||
|
|
|
@ -13,11 +13,11 @@
|
|||
// which doesn't exist yet.
|
||||
typedef enum {
|
||||
MOD_NONE,
|
||||
MOD_RANDOMIZER
|
||||
MOD_RANDOMIZER,
|
||||
} ModIndex;
|
||||
typedef enum {
|
||||
TABLE_VANILLA = MOD_NONE,
|
||||
TABLE_RANDOMIZER = MOD_RANDOMIZER
|
||||
TABLE_RANDOMIZER = MOD_RANDOMIZER,
|
||||
} TableIndex;
|
||||
|
||||
typedef struct {
|
||||
|
@ -5666,12 +5666,12 @@ typedef struct FishIdentity {
|
|||
|
||||
typedef enum {
|
||||
TRACKER_WINDOW_FLOATING,
|
||||
TRACKER_WINDOW_WINDOW
|
||||
TRACKER_WINDOW_WINDOW,
|
||||
} TrackerWindowType;
|
||||
|
||||
typedef enum {
|
||||
TRACKER_DISPLAY_ALWAYS,
|
||||
TRACKER_DISPLAY_COMBO_BUTTON
|
||||
TRACKER_DISPLAY_COMBO_BUTTON,
|
||||
} TrackerDisplayType;
|
||||
|
||||
typedef enum {
|
||||
|
@ -5774,7 +5774,7 @@ typedef enum {
|
|||
WL_MID,
|
||||
WL_HIGH,
|
||||
WL_LOW_OR_MID,
|
||||
WL_HIGH_OR_MID
|
||||
WL_HIGH_OR_MID,
|
||||
} RandoWaterLevel;
|
||||
|
||||
#define ENTRANCE_GROTTO_LOAD_START 0x0700
|
||||
|
|
|
@ -59,6 +59,7 @@ typedef struct {
|
|||
} DungeonEntranceInfo;
|
||||
|
||||
static DungeonEntranceInfo dungeons[] = {
|
||||
// clang-format off
|
||||
//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_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_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 },
|
||||
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
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
|
||||
// ENTR_HYRULE_FIELD_10 and ENTR_POTION_SHOP_KAKARIKO_1 have been repurposed for entrance randomizer
|
||||
const EntranceData entranceData[] = {
|
||||
// clang-format off
|
||||
//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_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_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"}
|
||||
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
// 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
|
||||
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_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
|
||||
|
@ -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_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
|
||||
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
// Information necessary for setting up returning from a grotto
|
||||
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_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
|
||||
|
@ -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_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
|
||||
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
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 = {
|
||||
// clang-format off
|
||||
// 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
|
||||
// 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_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})}
|
||||
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
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){
|
||||
if (output.contains(string)){
|
||||
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 {
|
||||
output[string] = key;
|
||||
|
@ -237,7 +241,8 @@ std::unordered_map<std::string, uint32_t> StaticData::PopulateTranslationMap(std
|
|||
for (std::string string: strings){
|
||||
if (output.contains(string)){
|
||||
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 {
|
||||
output[string] = key;
|
||||
|
|
|
@ -63,6 +63,7 @@ std::vector<SplitObject> splitList;
|
|||
std::vector<SplitObject> emptyList;
|
||||
|
||||
std::vector<SplitObject> splitObjectList = {
|
||||
// clang-format off
|
||||
{ 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_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_LOST_WOODS, "Forest Escape", "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 = {
|
||||
// clang-format off
|
||||
{ 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_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_SINGLE_MAGIC, { ITEM_SINGLE_MAGIC, ITEM_DOUBLE_MAGIC } },
|
||||
{ ITEM_SKULL_TOKEN, { } }
|
||||
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
std::string removeSpecialCharacters(const std::string& str) {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#include "OTRGlobals.h"
|
||||
#include "OTRGlobals.h"
|
||||
#include "OTRAudio.h"
|
||||
#include <iostream>
|
||||
#include <algorithm>
|
||||
|
@ -579,6 +579,7 @@ extern "C" void OTRAudio_Exit() {
|
|||
|
||||
extern "C" void VanillaItemTable_Init() {
|
||||
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_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),
|
||||
|
@ -705,6 +706,7 @@ extern "C" void VanillaItemTable_Init() {
|
|||
GET_ITEM_NONE,
|
||||
GET_ITEM_NONE,
|
||||
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);
|
||||
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_WALLET_ADULT, GI_WALLET_ADULT },
|
||||
{ ITEM_WALLET_GIANT, GI_WALLET_GIANT },
|
||||
{ ITEM_WEIRD_EGG, GI_WEIRD_EGG }
|
||||
{ ITEM_WEIRD_EGG, GI_WEIRD_EGG },
|
||||
};
|
||||
|
||||
extern "C" GetItemID RetrieveGetItemIDFromItemID(ItemID itemID) {
|
||||
|
@ -1523,7 +1525,7 @@ std::map<std::string, SoundFontSample*> cachedCustomSFs;
|
|||
|
||||
extern "C" SoundFontSample* ReadCustomSample(const char* path) {
|
||||
return nullptr;
|
||||
/*
|
||||
/*
|
||||
if (!ExtensionCache.contains(path))
|
||||
return nullptr;
|
||||
|
||||
|
@ -1576,7 +1578,7 @@ extern "C" SoundFontSample* ReadCustomSample(const char* path) {
|
|||
}
|
||||
|
||||
return nullptr;
|
||||
*/
|
||||
*/
|
||||
}
|
||||
|
||||
ImFont* OTRGlobals::CreateFontWithSize(float size, std::string fontPath) {
|
||||
|
@ -2070,7 +2072,7 @@ extern "C" bool Randomizer_IsCheckShuffled(RandomizerCheck rc) {
|
|||
}
|
||||
|
||||
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() {
|
||||
|
|
|
@ -125,7 +125,7 @@ std::map<uint32_t, ItemMapEntry> itemMapping = {
|
|||
ITEM_MAP_ENTRY(ITEM_DUNGEON_MAP),
|
||||
ITEM_MAP_ENTRY(ITEM_KEY_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 = {
|
||||
|
|
|
@ -605,6 +605,7 @@ static bool invert_matrix(const float m[16], float invOut[16]) {
|
|||
float inv[16], det;
|
||||
int i;
|
||||
|
||||
// clang-format off
|
||||
inv[0] = m[5] * m[10] * m[15] -
|
||||
m[5] * m[11] * m[14] -
|
||||
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[8] * m[1] * m[6] -
|
||||
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];
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue