mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2025-07-14 09:03:00 -07:00
Implement keyrings (#1869)
* Implement keyrings * ADD: French GIMessage * Remove cvar include * Rename maxKeys to numOfKeysOnKeyring Co-authored-by: PurpleHato <linkvssangoku.jr@gmail.com>
This commit is contained in:
parent
fb0b71ea54
commit
dda4a13bc3
8 changed files with 207 additions and 15 deletions
|
@ -874,7 +874,7 @@ void GenerateItemPool() {
|
||||||
//Keys
|
//Keys
|
||||||
|
|
||||||
//For key rings, need to add as many junk items as "missing" keys
|
//For key rings, need to add as many junk items as "missing" keys
|
||||||
if (KeyRings) {
|
if (KeyRings.IsNot(KEYRINGS_OFF)) {
|
||||||
uint8_t ringJunkAmt = 0;
|
uint8_t ringJunkAmt = 0;
|
||||||
for (auto dungeon : dungeonList) {
|
for (auto dungeon : dungeonList) {
|
||||||
if (dungeon->HasKeyRing()) {
|
if (dungeon->HasKeyRing()) {
|
||||||
|
|
|
@ -208,7 +208,8 @@ namespace Settings {
|
||||||
Option LACSRewardCount = Option::U8 ("Reward Count", {NumOpts(0, 9)}, {lacsRewardCountDesc}, OptionCategory::Setting, 1, true);
|
Option LACSRewardCount = Option::U8 ("Reward Count", {NumOpts(0, 9)}, {lacsRewardCountDesc}, OptionCategory::Setting, 1, true);
|
||||||
Option LACSDungeonCount = Option::U8 ("Dungeon Count", {NumOpts(0, 8)}, {lacsDungeonCountDesc}, OptionCategory::Setting, 1, true);
|
Option LACSDungeonCount = Option::U8 ("Dungeon Count", {NumOpts(0, 8)}, {lacsDungeonCountDesc}, OptionCategory::Setting, 1, true);
|
||||||
Option LACSTokenCount = Option::U8 ("Token Count", {NumOpts(0, 100)}, {lacsTokenCountDesc}, OptionCategory::Setting, 1, true);
|
Option LACSTokenCount = Option::U8 ("Token Count", {NumOpts(0, 100)}, {lacsTokenCountDesc}, OptionCategory::Setting, 1, true);
|
||||||
Option KeyRings = Option::Bool("Key Rings", {"Off", "On"}, {keyRingDesc});
|
Option KeyRings = Option::U8 ("Key Rings", {"Off", "Random", "Count", "Selection"}, {keyRingDesc});
|
||||||
|
Option KeyRingsRandomCount = Option::U8 ("Keyring Dungeon Count", {NumOpts(0, 8)}, {keyRingDesc}, OptionCategory::Setting, 1);
|
||||||
Option RingFortress = Option::Bool("Gerudo Fortress", {"Off", "On"}, {keyRingDesc}, OptionCategory::Setting);
|
Option RingFortress = Option::Bool("Gerudo Fortress", {"Off", "On"}, {keyRingDesc}, OptionCategory::Setting);
|
||||||
Option RingForest = Option::Bool("Forest Temple", {"Off", "On"}, {keyRingDesc}, OptionCategory::Setting);
|
Option RingForest = Option::Bool("Forest Temple", {"Off", "On"}, {keyRingDesc}, OptionCategory::Setting);
|
||||||
Option RingFire = Option::Bool("Fire Temple", {"Off", "On"}, {keyRingDesc}, OptionCategory::Setting);
|
Option RingFire = Option::Bool("Fire Temple", {"Off", "On"}, {keyRingDesc}, OptionCategory::Setting);
|
||||||
|
@ -232,6 +233,7 @@ namespace Settings {
|
||||||
&LACSDungeonCount,
|
&LACSDungeonCount,
|
||||||
&LACSTokenCount,
|
&LACSTokenCount,
|
||||||
&KeyRings,
|
&KeyRings,
|
||||||
|
&KeyRingsRandomCount,
|
||||||
&RingFortress,
|
&RingFortress,
|
||||||
&RingForest,
|
&RingForest,
|
||||||
&RingFire,
|
&RingFire,
|
||||||
|
@ -2013,7 +2015,7 @@ namespace Settings {
|
||||||
LACSTokenCount.Hide();
|
LACSTokenCount.Hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (KeyRings) {
|
if (KeyRings.IsNot(KEYRINGS_OFF)) {
|
||||||
for (Option *option : keyRingOptions) {
|
for (Option *option : keyRingOptions) {
|
||||||
option->Unhide();
|
option->Unhide();
|
||||||
}
|
}
|
||||||
|
@ -2614,6 +2616,17 @@ namespace Settings {
|
||||||
LACSDungeonCount.SetSelectedIndex(cvarSettings[RSK_LACS_DUNGEON_COUNT]);
|
LACSDungeonCount.SetSelectedIndex(cvarSettings[RSK_LACS_DUNGEON_COUNT]);
|
||||||
LACSTokenCount.SetSelectedIndex(cvarSettings[RSK_LACS_TOKEN_COUNT]);
|
LACSTokenCount.SetSelectedIndex(cvarSettings[RSK_LACS_TOKEN_COUNT]);
|
||||||
|
|
||||||
|
KeyRings.SetSelectedIndex(cvarSettings[RSK_KEYRINGS]);
|
||||||
|
KeyRingsRandomCount.SetSelectedIndex(cvarSettings[RSK_KEYRINGS_RANDOM_COUNT]);
|
||||||
|
RingForest.SetSelectedIndex(cvarSettings[RSK_KEYRINGS_FOREST_TEMPLE]);
|
||||||
|
RingFire.SetSelectedIndex(cvarSettings[RSK_KEYRINGS_FIRE_TEMPLE]);
|
||||||
|
RingWater.SetSelectedIndex(cvarSettings[RSK_KEYRINGS_WATER_TEMPLE]);
|
||||||
|
RingSpirit.SetSelectedIndex(cvarSettings[RSK_KEYRINGS_SPIRIT_TEMPLE]);
|
||||||
|
RingShadow.SetSelectedIndex(cvarSettings[RSK_KEYRINGS_SHADOW_TEMPLE]);
|
||||||
|
RingWell.SetSelectedIndex(cvarSettings[RSK_KEYRINGS_BOTTOM_OF_THE_WELL]);
|
||||||
|
RingGtg.SetSelectedIndex(cvarSettings[RSK_KEYRINGS_GTG]);
|
||||||
|
RingCastle.SetSelectedIndex(cvarSettings[RSK_KEYRINGS_GANONS_CASTLE]);
|
||||||
|
|
||||||
NumRequiredCuccos.SetSelectedIndex(cvarSettings[RSK_CUCCO_COUNT]);
|
NumRequiredCuccos.SetSelectedIndex(cvarSettings[RSK_CUCCO_COUNT]);
|
||||||
BigPoeTargetCount.SetSelectedIndex(cvarSettings[RSK_BIG_POE_COUNT]-1);
|
BigPoeTargetCount.SetSelectedIndex(cvarSettings[RSK_BIG_POE_COUNT]-1);
|
||||||
|
|
||||||
|
@ -2699,11 +2712,22 @@ namespace Settings {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::vector<uint8_t> randKeyRingDungeons = {};
|
||||||
//Set key ring for each dungeon
|
//Set key ring for each dungeon
|
||||||
for (size_t i = 0; i < dungeons.size(); i++) {
|
for (size_t i = 0; i < dungeons.size(); i++) {
|
||||||
dungeons[i]->ClearKeyRing();
|
dungeons[i]->ClearKeyRing();
|
||||||
|
if (dungeons[i]->GetSmallKeyCount() > 0) {
|
||||||
|
randKeyRingDungeons.push_back(i);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (KeyRings) {
|
if (KeyRings.Is(KEYRINGS_RANDOM) || KeyRings.Is(KEYRINGS_RANDOM_COUNT)) {
|
||||||
|
int keyRingCount = KeyRings.Is(KEYRINGS_RANDOM_COUNT) ? KeyRingsRandomCount.Value<uint8_t>() : Random(0, randKeyRingDungeons.size());
|
||||||
|
Shuffle(randKeyRingDungeons);
|
||||||
|
|
||||||
|
for (uint8_t i = 0; i < keyRingCount; i++) {
|
||||||
|
dungeons[randKeyRingDungeons[i]]->SetKeyRing();
|
||||||
|
}
|
||||||
|
} else if (KeyRings.Is(KEYRINGS_SELECTION)) {
|
||||||
if (RingWell) {
|
if (RingWell) {
|
||||||
BottomOfTheWell.SetKeyRing();
|
BottomOfTheWell.SetKeyRing();
|
||||||
}
|
}
|
||||||
|
|
|
@ -202,6 +202,13 @@ typedef enum {
|
||||||
GERUDOKEYS_ANYWHERE,
|
GERUDOKEYS_ANYWHERE,
|
||||||
} GerudoKeysSetting;
|
} GerudoKeysSetting;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
KEYRINGS_OFF,
|
||||||
|
KEYRINGS_RANDOM,
|
||||||
|
KEYRINGS_RANDOM_COUNT,
|
||||||
|
KEYRINGS_SELECTION,
|
||||||
|
} KeyRingsSetting;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
BOSSKEYSANITY_START_WITH,
|
BOSSKEYSANITY_START_WITH,
|
||||||
BOSSKEYSANITY_VANILLA,
|
BOSSKEYSANITY_VANILLA,
|
||||||
|
@ -925,6 +932,7 @@ void UpdateSettings(std::unordered_map<RandomizerSettingKey, uint8_t> cvarSettin
|
||||||
extern Option LACSDungeonCount;
|
extern Option LACSDungeonCount;
|
||||||
extern Option LACSTokenCount;
|
extern Option LACSTokenCount;
|
||||||
extern Option KeyRings;
|
extern Option KeyRings;
|
||||||
|
extern Option KeyRingsRandomCount;
|
||||||
extern Option RingFortress;
|
extern Option RingFortress;
|
||||||
extern Option RingForest;
|
extern Option RingForest;
|
||||||
extern Option RingFire;
|
extern Option RingFire;
|
||||||
|
|
|
@ -88,6 +88,54 @@ extern "C" void Randomizer_DrawBossKey(GlobalContext* globalCtx, GetItemEntry* g
|
||||||
CLOSE_DISPS(globalCtx->state.gfxCtx);
|
CLOSE_DISPS(globalCtx->state.gfxCtx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern "C" void Randomizer_DrawKeyRing(GlobalContext* globalCtx, GetItemEntry* getItemEntry) {
|
||||||
|
s32 pad;
|
||||||
|
|
||||||
|
s16 color_slot = getItemEntry->getItemId - RG_FOREST_TEMPLE_KEY_RING;
|
||||||
|
s16 colors[9][3] = {
|
||||||
|
{ 4, 195, 46 }, // Forest Temple
|
||||||
|
{ 237, 95, 95 }, // Fire Temple
|
||||||
|
{ 85, 180, 223 }, // Water Temple
|
||||||
|
{ 222, 158, 47 }, // Spirit Temple
|
||||||
|
{ 126, 16, 177 }, // Shadow Temple
|
||||||
|
{ 227, 110, 255 }, // Bottom of the Well
|
||||||
|
{ 221, 212, 60 }, // Gerudo Training Grounds
|
||||||
|
{ 255, 255, 255 }, // Theive's Hideout (unused)
|
||||||
|
{ 80, 80, 80 } // Ganon's Castle
|
||||||
|
};
|
||||||
|
|
||||||
|
OPEN_DISPS(globalCtx->state.gfxCtx);
|
||||||
|
|
||||||
|
func_80093D18(globalCtx->state.gfxCtx);
|
||||||
|
|
||||||
|
gsDPSetGrayscaleColor(POLY_OPA_DISP++, colors[color_slot][0], colors[color_slot][1], colors[color_slot][2], 255);
|
||||||
|
gsSPGrayscale(POLY_OPA_DISP++, true);
|
||||||
|
|
||||||
|
Matrix_Scale(0.5f, 0.5f, 0.5f, MTXMODE_APPLY);
|
||||||
|
Matrix_RotateZ(0.8f, MTXMODE_APPLY);
|
||||||
|
Matrix_RotateX(-2.16f, MTXMODE_APPLY);
|
||||||
|
Matrix_RotateY(-0.56f, MTXMODE_APPLY);
|
||||||
|
Matrix_RotateZ(-0.86f, MTXMODE_APPLY);
|
||||||
|
Matrix_Translate(28.29f, 0, 0, MTXMODE_APPLY);
|
||||||
|
Matrix_Translate(-(3.12f * 2), -(-0.34f * 2), -(17.53f * 2), MTXMODE_APPLY);
|
||||||
|
Matrix_RotateX(-(-0.31f * 2), MTXMODE_APPLY);
|
||||||
|
Matrix_RotateY(-(0.19f * 2), MTXMODE_APPLY);
|
||||||
|
Matrix_RotateZ(-(0.20f * 2), MTXMODE_APPLY);
|
||||||
|
for (int i = 0; i < 5; i++) {
|
||||||
|
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx, (char*)__FILE__, __LINE__),
|
||||||
|
G_MTX_MODELVIEW | G_MTX_LOAD);
|
||||||
|
Matrix_Translate(3.12f, -0.34f, 17.53f, MTXMODE_APPLY);
|
||||||
|
Matrix_RotateX(-0.31f, MTXMODE_APPLY);
|
||||||
|
Matrix_RotateY(0.19f, MTXMODE_APPLY);
|
||||||
|
Matrix_RotateZ(0.20f, MTXMODE_APPLY);
|
||||||
|
gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gGiSmallKeyDL);
|
||||||
|
}
|
||||||
|
|
||||||
|
gsSPGrayscale(POLY_OPA_DISP++, false);
|
||||||
|
|
||||||
|
CLOSE_DISPS(globalCtx->state.gfxCtx);
|
||||||
|
}
|
||||||
|
|
||||||
extern "C" void Randomizer_DrawDoubleDefense(GlobalContext* globalCtx, GetItemEntry getItemEntry) {
|
extern "C" void Randomizer_DrawDoubleDefense(GlobalContext* globalCtx, GetItemEntry getItemEntry) {
|
||||||
s32 pad;
|
s32 pad;
|
||||||
OPEN_DISPS(globalCtx->state.gfxCtx);
|
OPEN_DISPS(globalCtx->state.gfxCtx);
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
typedef struct GlobalContext GlobalContext;
|
typedef struct GlobalContext GlobalContext;
|
||||||
|
|
||||||
extern "C" void Randomizer_DrawSmallKey(GlobalContext* globalCtx, GetItemEntry* getItemEntry);
|
extern "C" void Randomizer_DrawSmallKey(GlobalContext* globalCtx, GetItemEntry* getItemEntry);
|
||||||
|
extern "C" void Randomizer_DrawKeyRing(GlobalContext* globalCtx, GetItemEntry* getItemEntry);
|
||||||
extern "C" void Randomizer_DrawBossKey(GlobalContext* globalCtx, GetItemEntry* getItemEntry);
|
extern "C" void Randomizer_DrawBossKey(GlobalContext* globalCtx, GetItemEntry* getItemEntry);
|
||||||
extern "C" void Randomizer_DrawDoubleDefense(GlobalContext* globalCtx, GetItemEntry getItemEntry);
|
extern "C" void Randomizer_DrawDoubleDefense(GlobalContext* globalCtx, GetItemEntry getItemEntry);
|
||||||
|
|
||||||
|
|
|
@ -1133,16 +1133,6 @@ ItemObtainability Randomizer::GetItemObtainabilityFromRandomizerGet(RandomizerGe
|
||||||
case RG_HINT:
|
case RG_HINT:
|
||||||
case RG_MAX:
|
case RG_MAX:
|
||||||
case RG_SOLD_OUT:
|
case RG_SOLD_OUT:
|
||||||
// TODO: Implement key rings
|
|
||||||
case RG_FOREST_TEMPLE_KEY_RING:
|
|
||||||
case RG_FIRE_TEMPLE_KEY_RING:
|
|
||||||
case RG_WATER_TEMPLE_KEY_RING:
|
|
||||||
case RG_SPIRIT_TEMPLE_KEY_RING:
|
|
||||||
case RG_SHADOW_TEMPLE_KEY_RING:
|
|
||||||
case RG_BOTTOM_OF_THE_WELL_KEY_RING:
|
|
||||||
case RG_GERUDO_TRAINING_GROUNDS_KEY_RING:
|
|
||||||
case RG_GERUDO_FORTRESS_KEY_RING:
|
|
||||||
case RG_GANONS_CASTLE_KEY_RING:
|
|
||||||
return CANT_OBTAIN_MISC;
|
return CANT_OBTAIN_MISC;
|
||||||
|
|
||||||
// Equipment
|
// Equipment
|
||||||
|
@ -2450,6 +2440,16 @@ void GenerateRandomizerImgui() {
|
||||||
cvarSettings[RSK_SUNLIGHT_ARROWS] = CVar_GetS32("gRandomizeSunlightArrows", 0);
|
cvarSettings[RSK_SUNLIGHT_ARROWS] = CVar_GetS32("gRandomizeSunlightArrows", 0);
|
||||||
cvarSettings[RSK_KEYSANITY] = CVar_GetS32("gRandomizeKeysanity", 2);
|
cvarSettings[RSK_KEYSANITY] = CVar_GetS32("gRandomizeKeysanity", 2);
|
||||||
cvarSettings[RSK_GERUDO_KEYS] = CVar_GetS32("gRandomizeGerudoKeys", 0);
|
cvarSettings[RSK_GERUDO_KEYS] = CVar_GetS32("gRandomizeGerudoKeys", 0);
|
||||||
|
cvarSettings[RSK_KEYRINGS] = CVar_GetS32("gRandomizeShuffleKeyRings", 0);
|
||||||
|
cvarSettings[RSK_KEYRINGS_RANDOM_COUNT] = CVar_GetS32("gRandomizeShuffleKeyRingsRandomCount", 0);
|
||||||
|
cvarSettings[RSK_KEYRINGS_FOREST_TEMPLE] = CVar_GetS32("gRandomizeShuffleKeyRingsForestTemple", 0);
|
||||||
|
cvarSettings[RSK_KEYRINGS_FIRE_TEMPLE] = CVar_GetS32("gRandomizeShuffleKeyRingsFireTemple", 0);
|
||||||
|
cvarSettings[RSK_KEYRINGS_WATER_TEMPLE] = CVar_GetS32("gRandomizeShuffleKeyRingsWaterTemple", 0);
|
||||||
|
cvarSettings[RSK_KEYRINGS_SPIRIT_TEMPLE] = CVar_GetS32("gRandomizeShuffleKeyRingsSpiritTemple", 0);
|
||||||
|
cvarSettings[RSK_KEYRINGS_SHADOW_TEMPLE] = CVar_GetS32("gRandomizeShuffleKeyRingsShadowTemple", 0);
|
||||||
|
cvarSettings[RSK_KEYRINGS_BOTTOM_OF_THE_WELL] = CVar_GetS32("gRandomizeShuffleKeyRingsBottomOfTheWell", 0);
|
||||||
|
cvarSettings[RSK_KEYRINGS_GTG] = CVar_GetS32("gRandomizeShuffleKeyRingsGTG", 0);
|
||||||
|
cvarSettings[RSK_KEYRINGS_GANONS_CASTLE] = CVar_GetS32("gRandomizeShuffleKeyRingsGanonsCastle", 0);
|
||||||
cvarSettings[RSK_BOSS_KEYSANITY] = CVar_GetS32("gRandomizeBossKeysanity", 2);
|
cvarSettings[RSK_BOSS_KEYSANITY] = CVar_GetS32("gRandomizeBossKeysanity", 2);
|
||||||
cvarSettings[RSK_GANONS_BOSS_KEY] = CVar_GetS32("gRandomizeShuffleGanonBossKey", 1);
|
cvarSettings[RSK_GANONS_BOSS_KEY] = CVar_GetS32("gRandomizeShuffleGanonBossKey", 1);
|
||||||
cvarSettings[RSK_LACS_STONE_COUNT] = CVar_GetS32("gRandomizeLacsStoneCount", 3);
|
cvarSettings[RSK_LACS_STONE_COUNT] = CVar_GetS32("gRandomizeLacsStoneCount", 3);
|
||||||
|
@ -2571,6 +2571,7 @@ void DrawRandoEditor(bool& open) {
|
||||||
"Any Dungeon", "Overworld", "Anywhere",
|
"Any Dungeon", "Overworld", "Anywhere",
|
||||||
"LACS-Vanilla", "LACS-Medallions", "LACS-Stones",
|
"LACS-Vanilla", "LACS-Medallions", "LACS-Stones",
|
||||||
"LACS-Rewards", "LACS-Dungeons", "LACS-Tokens"};
|
"LACS-Rewards", "LACS-Dungeons", "LACS-Tokens"};
|
||||||
|
const char* randoShuffleKeyRings[4] = { "Off", "Random", "Count", "Selection" };
|
||||||
|
|
||||||
// Misc Settings
|
// Misc Settings
|
||||||
const char* randoGossipStoneHints[4] = { "No Hints", "Need Nothing", "Mask of Truth", "Stone of Agony" };
|
const char* randoGossipStoneHints[4] = { "No Hints", "Need Nothing", "Mask of Truth", "Stone of Agony" };
|
||||||
|
@ -2583,7 +2584,7 @@ void DrawRandoEditor(bool& open) {
|
||||||
const char* randoItemPool[4] = { "Plentiful", "Balanced", "Scarce", "Minimal" };
|
const char* randoItemPool[4] = { "Plentiful", "Balanced", "Scarce", "Minimal" };
|
||||||
const char* randoIceTraps[5] = { "Off", "Normal", "Extra", "Mayhem", "Onslaught" };
|
const char* randoIceTraps[5] = { "Off", "Normal", "Extra", "Mayhem", "Onslaught" };
|
||||||
|
|
||||||
ImGui::SetNextWindowSize(ImVec2(920, 563), ImGuiCond_FirstUseEver);
|
ImGui::SetNextWindowSize(ImVec2(920, 600), ImGuiCond_FirstUseEver);
|
||||||
if (!ImGui::Begin("Randomizer Editor", &open, ImGuiWindowFlags_NoFocusOnAppearing)) {
|
if (!ImGui::Begin("Randomizer Editor", &open, ImGuiWindowFlags_NoFocusOnAppearing)) {
|
||||||
ImGui::End();
|
ImGui::End();
|
||||||
return;
|
return;
|
||||||
|
@ -3152,6 +3153,44 @@ void DrawRandoEditor(bool& open) {
|
||||||
);
|
);
|
||||||
UIWidgets::EnhancementCombobox("gRandomizeKeysanity", randoShuffleSmallKeys, 6, 2);
|
UIWidgets::EnhancementCombobox("gRandomizeKeysanity", randoShuffleSmallKeys, 6, 2);
|
||||||
|
|
||||||
|
UIWidgets::PaddedSeparator();
|
||||||
|
|
||||||
|
// Key Rings
|
||||||
|
ImGui::Text(Settings::KeyRings.GetName().c_str());
|
||||||
|
UIWidgets::InsertHelpHoverText(
|
||||||
|
"Keyrings will replace all small keys from a particular dungeon with a single keyring that awards all keys for it's associated dungeon\n"
|
||||||
|
"\n"
|
||||||
|
"Off - No dungeons will have their keys replaced with keyrings.\n"
|
||||||
|
"\n"
|
||||||
|
"Random - A random amount of dungeons(0-8) will have their keys replaced with keyrings.\n"
|
||||||
|
"\n"
|
||||||
|
"Count - A specified amount of randomly selected dungeons will have their keys replaced with keyrings.\n"
|
||||||
|
"\n"
|
||||||
|
"Selection - Hand select which dungeons will have their keys replaced with keyrings."
|
||||||
|
);
|
||||||
|
UIWidgets::EnhancementCombobox("gRandomizeShuffleKeyRings", randoShuffleKeyRings, 4, 0);
|
||||||
|
ImGui::PopItemWidth();
|
||||||
|
switch (CVar_GetS32("gRandomizeShuffleKeyRings", 0)) {
|
||||||
|
case 2:
|
||||||
|
ImGui::Dummy(ImVec2(0.0f, 0.0f));
|
||||||
|
UIWidgets::EnhancementSliderInt("Key Ring Count: %d", "##RandomizeShuffleKeyRingsRandomCount",
|
||||||
|
"gRandomizeShuffleKeyRingsRandomCount", 1, 8, "", 8, true);
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
UIWidgets::EnhancementCheckbox("Forest Temple##RandomizeShuffleKeyRings", "gRandomizeShuffleKeyRingsForestTemple");
|
||||||
|
UIWidgets::EnhancementCheckbox("Fire Temple##RandomizeShuffleKeyRings", "gRandomizeShuffleKeyRingsFireTemple");
|
||||||
|
UIWidgets::EnhancementCheckbox("Water Temple##RandomizeShuffleKeyRings", "gRandomizeShuffleKeyRingsWaterTemple");
|
||||||
|
UIWidgets::EnhancementCheckbox("Spirit Temple##RandomizeShuffleKeyRings", "gRandomizeShuffleKeyRingsSpiritTemple");
|
||||||
|
UIWidgets::EnhancementCheckbox("Shadow Temple##RandomizeShuffleKeyRings", "gRandomizeShuffleKeyRingsShadowTemple");
|
||||||
|
UIWidgets::EnhancementCheckbox("Bottom of the Well##RandomizeShuffleKeyRings", "gRandomizeShuffleKeyRingsBottomOfTheWell");
|
||||||
|
UIWidgets::EnhancementCheckbox("GTG##RandomizeShuffleKeyRings", "gRandomizeShuffleKeyRingsGTG");
|
||||||
|
UIWidgets::EnhancementCheckbox("Ganon's Castle##RandomizeShuffleKeyRings", "gRandomizeShuffleKeyRingsGanonsCastle");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
ImGui::PushItemWidth(-FLT_MIN);
|
||||||
|
|
||||||
UIWidgets::PaddedSeparator();
|
UIWidgets::PaddedSeparator();
|
||||||
|
|
||||||
// Gerudo Keys
|
// Gerudo Keys
|
||||||
|
@ -4066,6 +4105,34 @@ void Randomizer::CreateCustomMessages() {
|
||||||
GIMESSAGE_NO_GERMAN(RG_GANONS_CASTLE_SMALL_KEY, ITEM_KEY_SMALL, "You found a %rGanon's Castle &%wSmall Key!",
|
GIMESSAGE_NO_GERMAN(RG_GANONS_CASTLE_SMALL_KEY, ITEM_KEY_SMALL, "You found a %rGanon's Castle &%wSmall Key!",
|
||||||
"Vous obtenez une %rPetite Clé %w&du %Château de Ganon%w!"),
|
"Vous obtenez une %rPetite Clé %w&du %Château de Ganon%w!"),
|
||||||
|
|
||||||
|
GIMESSAGE_NO_GERMAN(RG_GERUDO_FORTRESS_KEY_RING, ITEM_KEY_SMALL,
|
||||||
|
"You found a %yThieves Hideout &%wKeyring!",
|
||||||
|
"Vous obtenez un trousseau de&clés du %yRepaire des Voleurs%w!"),
|
||||||
|
GIMESSAGE_NO_GERMAN(RG_FOREST_TEMPLE_KEY_RING, ITEM_KEY_SMALL,
|
||||||
|
"You found a %gForest Temple &%wKeyring!",
|
||||||
|
"Vous obtenez un trousseau de&clés du %gTemple de la Forêt%w!"),
|
||||||
|
GIMESSAGE_NO_GERMAN(RG_FIRE_TEMPLE_KEY_RING, ITEM_KEY_SMALL,
|
||||||
|
"You found a %rFire Temple &%wKeyring!",
|
||||||
|
"Vous obtenez un trousseau de&clés du %rTemple du Feu%w!"),
|
||||||
|
GIMESSAGE_NO_GERMAN(RG_WATER_TEMPLE_KEY_RING, ITEM_KEY_SMALL,
|
||||||
|
"You found a %bWater Temple &%wKeyring!",
|
||||||
|
"Vous obtenez un trousseau de&clés du %bTemple de l'Eau%w!"),
|
||||||
|
GIMESSAGE_NO_GERMAN(RG_SPIRIT_TEMPLE_KEY_RING, ITEM_KEY_SMALL,
|
||||||
|
"You found a %ySpirit Temple &%wKeyring!",
|
||||||
|
"Vous obtenez un trousseau de&clés du %yTemple de l'Esprit%w!"),
|
||||||
|
GIMESSAGE_NO_GERMAN(RG_SHADOW_TEMPLE_KEY_RING, ITEM_KEY_SMALL,
|
||||||
|
"You found a %pShadow Temple &%wKeyring!",
|
||||||
|
"Vous obtenez un trousseau de&clés du %pTemple de l'Ombre%w!"),
|
||||||
|
GIMESSAGE_NO_GERMAN(RG_BOTTOM_OF_THE_WELL_KEY_RING, ITEM_KEY_SMALL,
|
||||||
|
"You found a %pBottom of the &Well %wKeyring!",
|
||||||
|
"Vous obtenez un trousseau de&clés du %pPuits%w!"),
|
||||||
|
GIMESSAGE_NO_GERMAN(RG_GERUDO_TRAINING_GROUNDS_KEY_RING, ITEM_KEY_SMALL,
|
||||||
|
"You found a %yGerudo Training &Grounds %wKeyring!",
|
||||||
|
"Vous obtenez un trousseau de&clés du %yGymnase Gerudo%w!"),
|
||||||
|
GIMESSAGE_NO_GERMAN(RG_GANONS_CASTLE_KEY_RING, ITEM_KEY_SMALL,
|
||||||
|
"You found a %rGanon's Castle &%wKeyring!",
|
||||||
|
"Vous obtenez un trousseau de&clés du %rChâteau de Ganon%w!"),
|
||||||
|
|
||||||
GIMESSAGE_NO_GERMAN(RG_FOREST_TEMPLE_BOSS_KEY, ITEM_KEY_BOSS, "You found the %gForest Temple &%wBoss Key!",
|
GIMESSAGE_NO_GERMAN(RG_FOREST_TEMPLE_BOSS_KEY, ITEM_KEY_BOSS, "You found the %gForest Temple &%wBoss Key!",
|
||||||
"Vous obtenez la %rClé d'or %wdu&%gTemple de la Forêt%w!"),
|
"Vous obtenez la %rClé d'or %wdu&%gTemple de la Forêt%w!"),
|
||||||
GIMESSAGE_NO_GERMAN(RG_FIRE_TEMPLE_BOSS_KEY, ITEM_KEY_BOSS, "You found the %rFire Temple &%wBoss Key!",
|
GIMESSAGE_NO_GERMAN(RG_FIRE_TEMPLE_BOSS_KEY, ITEM_KEY_BOSS, "You found the %rFire Temple &%wBoss Key!",
|
||||||
|
@ -4201,6 +4268,15 @@ void InitRandoItemTable() {
|
||||||
GET_ITEM(RG_BOTTOM_OF_THE_WELL_SMALL_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, RG_BOTTOM_OF_THE_WELL_SMALL_KEY),
|
GET_ITEM(RG_BOTTOM_OF_THE_WELL_SMALL_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, RG_BOTTOM_OF_THE_WELL_SMALL_KEY),
|
||||||
GET_ITEM(RG_GERUDO_TRAINING_GROUNDS_SMALL_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, RG_GERUDO_TRAINING_GROUNDS_SMALL_KEY),
|
GET_ITEM(RG_GERUDO_TRAINING_GROUNDS_SMALL_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, RG_GERUDO_TRAINING_GROUNDS_SMALL_KEY),
|
||||||
GET_ITEM(RG_GANONS_CASTLE_SMALL_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, RG_GANONS_CASTLE_SMALL_KEY),
|
GET_ITEM(RG_GANONS_CASTLE_SMALL_KEY, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, RG_GANONS_CASTLE_SMALL_KEY),
|
||||||
|
GET_ITEM(RG_GERUDO_FORTRESS_KEY_RING, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, RG_GERUDO_FORTRESS_KEY_RING),
|
||||||
|
GET_ITEM(RG_FOREST_TEMPLE_KEY_RING, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, RG_FOREST_TEMPLE_KEY_RING),
|
||||||
|
GET_ITEM(RG_FIRE_TEMPLE_KEY_RING, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, RG_FIRE_TEMPLE_KEY_RING),
|
||||||
|
GET_ITEM(RG_WATER_TEMPLE_KEY_RING, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, RG_WATER_TEMPLE_KEY_RING),
|
||||||
|
GET_ITEM(RG_SPIRIT_TEMPLE_KEY_RING, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, RG_SPIRIT_TEMPLE_KEY_RING),
|
||||||
|
GET_ITEM(RG_SHADOW_TEMPLE_KEY_RING, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, RG_SHADOW_TEMPLE_KEY_RING),
|
||||||
|
GET_ITEM(RG_BOTTOM_OF_THE_WELL_KEY_RING, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, RG_BOTTOM_OF_THE_WELL_KEY_RING),
|
||||||
|
GET_ITEM(RG_GERUDO_TRAINING_GROUNDS_KEY_RING, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, RG_GERUDO_TRAINING_GROUNDS_KEY_RING),
|
||||||
|
GET_ITEM(RG_GANONS_CASTLE_KEY_RING, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY, MOD_RANDOMIZER, RG_GANONS_CASTLE_KEY_RING),
|
||||||
GET_ITEM(RG_FOREST_TEMPLE_BOSS_KEY, OBJECT_GI_BOSSKEY, GID_KEY_BOSS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_BOSS_KEY, MOD_RANDOMIZER, RG_FOREST_TEMPLE_BOSS_KEY),
|
GET_ITEM(RG_FOREST_TEMPLE_BOSS_KEY, OBJECT_GI_BOSSKEY, GID_KEY_BOSS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_BOSS_KEY, MOD_RANDOMIZER, RG_FOREST_TEMPLE_BOSS_KEY),
|
||||||
GET_ITEM(RG_FIRE_TEMPLE_BOSS_KEY, OBJECT_GI_BOSSKEY, GID_KEY_BOSS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_BOSS_KEY, MOD_RANDOMIZER, RG_FIRE_TEMPLE_BOSS_KEY),
|
GET_ITEM(RG_FIRE_TEMPLE_BOSS_KEY, OBJECT_GI_BOSSKEY, GID_KEY_BOSS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_BOSS_KEY, MOD_RANDOMIZER, RG_FIRE_TEMPLE_BOSS_KEY),
|
||||||
GET_ITEM(RG_WATER_TEMPLE_BOSS_KEY, OBJECT_GI_BOSSKEY, GID_KEY_BOSS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_BOSS_KEY, MOD_RANDOMIZER, RG_WATER_TEMPLE_BOSS_KEY),
|
GET_ITEM(RG_WATER_TEMPLE_BOSS_KEY, OBJECT_GI_BOSSKEY, GID_KEY_BOSS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_BOSS_KEY, MOD_RANDOMIZER, RG_WATER_TEMPLE_BOSS_KEY),
|
||||||
|
@ -4238,6 +4314,8 @@ void InitRandoItemTable() {
|
||||||
if (randoGetItemTable[i].itemId >= RG_FOREST_TEMPLE_SMALL_KEY && randoGetItemTable[i].itemId <= RG_GANONS_CASTLE_SMALL_KEY
|
if (randoGetItemTable[i].itemId >= RG_FOREST_TEMPLE_SMALL_KEY && randoGetItemTable[i].itemId <= RG_GANONS_CASTLE_SMALL_KEY
|
||||||
&& randoGetItemTable[i].itemId != RG_GERUDO_FORTRESS_SMALL_KEY) {
|
&& randoGetItemTable[i].itemId != RG_GERUDO_FORTRESS_SMALL_KEY) {
|
||||||
randoGetItemTable[i].drawFunc = (CustomDrawFunc)Randomizer_DrawSmallKey;
|
randoGetItemTable[i].drawFunc = (CustomDrawFunc)Randomizer_DrawSmallKey;
|
||||||
|
} else if (randoGetItemTable[i].itemId >= RG_FOREST_TEMPLE_KEY_RING && randoGetItemTable[i].itemId <= RG_GANONS_CASTLE_KEY_RING) {
|
||||||
|
randoGetItemTable[i].drawFunc = (CustomDrawFunc)Randomizer_DrawKeyRing;
|
||||||
} else if (randoGetItemTable[i].itemId >= RG_FOREST_TEMPLE_BOSS_KEY && randoGetItemTable[i].itemId <= RG_GANONS_CASTLE_BOSS_KEY) {
|
} else if (randoGetItemTable[i].itemId >= RG_FOREST_TEMPLE_BOSS_KEY && randoGetItemTable[i].itemId <= RG_GANONS_CASTLE_BOSS_KEY) {
|
||||||
randoGetItemTable[i].drawFunc = (CustomDrawFunc)Randomizer_DrawBossKey;
|
randoGetItemTable[i].drawFunc = (CustomDrawFunc)Randomizer_DrawBossKey;
|
||||||
} else if (randoGetItemTable[i].itemId == RG_DOUBLE_DEFENSE) {
|
} else if (randoGetItemTable[i].itemId == RG_DOUBLE_DEFENSE) {
|
||||||
|
|
|
@ -1041,6 +1041,16 @@ typedef enum {
|
||||||
RSK_LACS_REWARD_COUNT,
|
RSK_LACS_REWARD_COUNT,
|
||||||
RSK_LACS_DUNGEON_COUNT,
|
RSK_LACS_DUNGEON_COUNT,
|
||||||
RSK_LACS_TOKEN_COUNT,
|
RSK_LACS_TOKEN_COUNT,
|
||||||
|
RSK_KEYRINGS,
|
||||||
|
RSK_KEYRINGS_RANDOM_COUNT,
|
||||||
|
RSK_KEYRINGS_FOREST_TEMPLE,
|
||||||
|
RSK_KEYRINGS_FIRE_TEMPLE,
|
||||||
|
RSK_KEYRINGS_WATER_TEMPLE,
|
||||||
|
RSK_KEYRINGS_SPIRIT_TEMPLE,
|
||||||
|
RSK_KEYRINGS_SHADOW_TEMPLE,
|
||||||
|
RSK_KEYRINGS_BOTTOM_OF_THE_WELL,
|
||||||
|
RSK_KEYRINGS_GTG,
|
||||||
|
RSK_KEYRINGS_GANONS_CASTLE,
|
||||||
RSK_MAX
|
RSK_MAX
|
||||||
} RandomizerSettingKey;
|
} RandomizerSettingKey;
|
||||||
|
|
||||||
|
|
|
@ -2356,10 +2356,12 @@ u16 Randomizer_Item_Give(GlobalContext* globalCtx, GetItemEntry giEntry) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if ((item >= RG_FOREST_TEMPLE_SMALL_KEY && item <= RG_GANONS_CASTLE_SMALL_KEY) ||
|
} else if ((item >= RG_FOREST_TEMPLE_SMALL_KEY && item <= RG_GANONS_CASTLE_SMALL_KEY) ||
|
||||||
|
(item >= RG_FOREST_TEMPLE_KEY_RING && item <= RG_GANONS_CASTLE_KEY_RING) ||
|
||||||
(item >= RG_FOREST_TEMPLE_BOSS_KEY && item <= RG_GANONS_CASTLE_BOSS_KEY) ||
|
(item >= RG_FOREST_TEMPLE_BOSS_KEY && item <= RG_GANONS_CASTLE_BOSS_KEY) ||
|
||||||
(item >= RG_DEKU_TREE_MAP && item <= RG_ICE_CAVERN_MAP) ||
|
(item >= RG_DEKU_TREE_MAP && item <= RG_ICE_CAVERN_MAP) ||
|
||||||
(item >= RG_DEKU_TREE_COMPASS && item <= RG_ICE_CAVERN_COMPASS)) {
|
(item >= RG_DEKU_TREE_COMPASS && item <= RG_ICE_CAVERN_COMPASS)) {
|
||||||
int mapIndex = gSaveContext.mapIndex;
|
int mapIndex = gSaveContext.mapIndex;
|
||||||
|
int numOfKeysOnKeyring = 0;
|
||||||
switch (item) {
|
switch (item) {
|
||||||
case RG_DEKU_TREE_MAP:
|
case RG_DEKU_TREE_MAP:
|
||||||
case RG_DEKU_TREE_COMPASS:
|
case RG_DEKU_TREE_COMPASS:
|
||||||
|
@ -2376,37 +2378,49 @@ u16 Randomizer_Item_Give(GlobalContext* globalCtx, GetItemEntry giEntry) {
|
||||||
case RG_FOREST_TEMPLE_MAP:
|
case RG_FOREST_TEMPLE_MAP:
|
||||||
case RG_FOREST_TEMPLE_COMPASS:
|
case RG_FOREST_TEMPLE_COMPASS:
|
||||||
case RG_FOREST_TEMPLE_SMALL_KEY:
|
case RG_FOREST_TEMPLE_SMALL_KEY:
|
||||||
|
case RG_FOREST_TEMPLE_KEY_RING:
|
||||||
case RG_FOREST_TEMPLE_BOSS_KEY:
|
case RG_FOREST_TEMPLE_BOSS_KEY:
|
||||||
mapIndex = SCENE_BMORI1;
|
mapIndex = SCENE_BMORI1;
|
||||||
|
numOfKeysOnKeyring = FOREST_TEMPLE_SMALL_KEY_MAX;
|
||||||
break;
|
break;
|
||||||
case RG_FIRE_TEMPLE_MAP:
|
case RG_FIRE_TEMPLE_MAP:
|
||||||
case RG_FIRE_TEMPLE_COMPASS:
|
case RG_FIRE_TEMPLE_COMPASS:
|
||||||
case RG_FIRE_TEMPLE_SMALL_KEY:
|
case RG_FIRE_TEMPLE_SMALL_KEY:
|
||||||
|
case RG_FIRE_TEMPLE_KEY_RING:
|
||||||
case RG_FIRE_TEMPLE_BOSS_KEY:
|
case RG_FIRE_TEMPLE_BOSS_KEY:
|
||||||
mapIndex = SCENE_HIDAN;
|
mapIndex = SCENE_HIDAN;
|
||||||
|
numOfKeysOnKeyring = FIRE_TEMPLE_SMALL_KEY_MAX;
|
||||||
break;
|
break;
|
||||||
case RG_WATER_TEMPLE_MAP:
|
case RG_WATER_TEMPLE_MAP:
|
||||||
case RG_WATER_TEMPLE_COMPASS:
|
case RG_WATER_TEMPLE_COMPASS:
|
||||||
case RG_WATER_TEMPLE_SMALL_KEY:
|
case RG_WATER_TEMPLE_SMALL_KEY:
|
||||||
|
case RG_WATER_TEMPLE_KEY_RING:
|
||||||
case RG_WATER_TEMPLE_BOSS_KEY:
|
case RG_WATER_TEMPLE_BOSS_KEY:
|
||||||
mapIndex = SCENE_MIZUSIN;
|
mapIndex = SCENE_MIZUSIN;
|
||||||
|
numOfKeysOnKeyring = WATER_TEMPLE_SMALL_KEY_MAX;
|
||||||
break;
|
break;
|
||||||
case RG_SPIRIT_TEMPLE_MAP:
|
case RG_SPIRIT_TEMPLE_MAP:
|
||||||
case RG_SPIRIT_TEMPLE_COMPASS:
|
case RG_SPIRIT_TEMPLE_COMPASS:
|
||||||
case RG_SPIRIT_TEMPLE_SMALL_KEY:
|
case RG_SPIRIT_TEMPLE_SMALL_KEY:
|
||||||
|
case RG_SPIRIT_TEMPLE_KEY_RING:
|
||||||
case RG_SPIRIT_TEMPLE_BOSS_KEY:
|
case RG_SPIRIT_TEMPLE_BOSS_KEY:
|
||||||
mapIndex = SCENE_JYASINZOU;
|
mapIndex = SCENE_JYASINZOU;
|
||||||
|
numOfKeysOnKeyring = SPIRIT_TEMPLE_SMALL_KEY_MAX;
|
||||||
break;
|
break;
|
||||||
case RG_SHADOW_TEMPLE_MAP:
|
case RG_SHADOW_TEMPLE_MAP:
|
||||||
case RG_SHADOW_TEMPLE_COMPASS:
|
case RG_SHADOW_TEMPLE_COMPASS:
|
||||||
case RG_SHADOW_TEMPLE_SMALL_KEY:
|
case RG_SHADOW_TEMPLE_SMALL_KEY:
|
||||||
|
case RG_SHADOW_TEMPLE_KEY_RING:
|
||||||
case RG_SHADOW_TEMPLE_BOSS_KEY:
|
case RG_SHADOW_TEMPLE_BOSS_KEY:
|
||||||
mapIndex = SCENE_HAKADAN;
|
mapIndex = SCENE_HAKADAN;
|
||||||
|
numOfKeysOnKeyring = SHADOW_TEMPLE_SMALL_KEY_MAX;
|
||||||
break;
|
break;
|
||||||
case RG_BOTTOM_OF_THE_WELL_MAP:
|
case RG_BOTTOM_OF_THE_WELL_MAP:
|
||||||
case RG_BOTTOM_OF_THE_WELL_COMPASS:
|
case RG_BOTTOM_OF_THE_WELL_COMPASS:
|
||||||
case RG_BOTTOM_OF_THE_WELL_SMALL_KEY:
|
case RG_BOTTOM_OF_THE_WELL_SMALL_KEY:
|
||||||
|
case RG_BOTTOM_OF_THE_WELL_KEY_RING:
|
||||||
mapIndex = SCENE_HAKADANCH;
|
mapIndex = SCENE_HAKADANCH;
|
||||||
|
numOfKeysOnKeyring = BOTTOM_OF_THE_WELL_SMALL_KEY_MAX;
|
||||||
break;
|
break;
|
||||||
case RG_ICE_CAVERN_MAP:
|
case RG_ICE_CAVERN_MAP:
|
||||||
case RG_ICE_CAVERN_COMPASS:
|
case RG_ICE_CAVERN_COMPASS:
|
||||||
|
@ -2416,13 +2430,19 @@ u16 Randomizer_Item_Give(GlobalContext* globalCtx, GetItemEntry giEntry) {
|
||||||
mapIndex = SCENE_GANON;
|
mapIndex = SCENE_GANON;
|
||||||
break;
|
break;
|
||||||
case RG_GERUDO_TRAINING_GROUNDS_SMALL_KEY:
|
case RG_GERUDO_TRAINING_GROUNDS_SMALL_KEY:
|
||||||
|
case RG_GERUDO_TRAINING_GROUNDS_KEY_RING:
|
||||||
mapIndex = SCENE_MEN;
|
mapIndex = SCENE_MEN;
|
||||||
|
numOfKeysOnKeyring = GERUDO_TRAINING_GROUNDS_SMALL_KEY_MAX;
|
||||||
break;
|
break;
|
||||||
case RG_GERUDO_FORTRESS_SMALL_KEY:
|
case RG_GERUDO_FORTRESS_SMALL_KEY:
|
||||||
|
case RG_GERUDO_FORTRESS_KEY_RING:
|
||||||
mapIndex = SCENE_GERUDOWAY;
|
mapIndex = SCENE_GERUDOWAY;
|
||||||
|
numOfKeysOnKeyring = GERUDO_FORTRESS_SMALL_KEY_MAX;
|
||||||
break;
|
break;
|
||||||
case RG_GANONS_CASTLE_SMALL_KEY:
|
case RG_GANONS_CASTLE_SMALL_KEY:
|
||||||
|
case RG_GANONS_CASTLE_KEY_RING:
|
||||||
mapIndex = SCENE_GANONTIKA;
|
mapIndex = SCENE_GANONTIKA;
|
||||||
|
numOfKeysOnKeyring = GERUDO_FORTRESS_SMALL_KEY_MAX;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2434,6 +2454,9 @@ u16 Randomizer_Item_Give(GlobalContext* globalCtx, GetItemEntry giEntry) {
|
||||||
gSaveContext.inventory.dungeonKeys[mapIndex]++;
|
gSaveContext.inventory.dungeonKeys[mapIndex]++;
|
||||||
return RG_NONE;
|
return RG_NONE;
|
||||||
}
|
}
|
||||||
|
} else if ((item >= RG_FOREST_TEMPLE_KEY_RING) && (item <= RG_GANONS_CASTLE_KEY_RING)) {
|
||||||
|
gSaveContext.inventory.dungeonKeys[mapIndex] = numOfKeysOnKeyring;
|
||||||
|
return RG_NONE;
|
||||||
} else {
|
} else {
|
||||||
int bitmask;
|
int bitmask;
|
||||||
if ((item >= RG_DEKU_TREE_MAP) && (item <= RG_ICE_CAVERN_MAP)) {
|
if ((item >= RG_DEKU_TREE_MAP) && (item <= RG_ICE_CAVERN_MAP)) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue