Break up shuffle pot options to dungeon/overworld/all

This commit is contained in:
aMannus
2024-01-05 14:19:40 +01:00
parent 76c2c5c4e5
commit 8c78154aff
5 changed files with 46 additions and 7 deletions
@@ -751,8 +751,31 @@ void GenerateItemPool() {
PlaceVanillaCowMilk();
}
if (ctx->GetOption(RSK_SHUFFLE_POTS)) {
AddItemToMainPool(RG_GREEN_RUPEE);
// Shuffle Pots
if (ctx->GetOption(RSK_SHUFFLE_POTS).Is(RO_SHUFFLE_POTS_OFF)) {
for (RandomizerCheck loc : ctx->GetLocations(ctx->allLocations, Category::cPot)) {
ctx->PlaceItemInLocation(loc, RG_GREEN_RUPEE, false, true);
}
} else if (ctx->GetOption(RSK_SHUFFLE_POTS).Is(RO_SHUFFLE_POTS_DUNGEONS)) {
for (RandomizerCheck loc : ctx->GetLocations(ctx->allLocations, Category::cPot)) {
if (Rando::StaticData::GetLocation(loc)->IsOverworld()) {
ctx->PlaceItemInLocation((RandomizerCheck)loc, RG_GREEN_RUPEE, false, true);
} else {
AddItemToMainPool(RG_GREEN_RUPEE);
}
}
} else if (ctx->GetOption(RSK_SHUFFLE_POTS).Is(RO_SHUFFLE_POTS_OVERWORLD)) {
for (RandomizerCheck loc : ctx->GetLocations(ctx->allLocations, Category::cPot)) {
if (Rando::StaticData::GetLocation(loc)->IsDungeon()) {
ctx->PlaceItemInLocation((RandomizerCheck)loc, RG_GREEN_RUPEE, false, true);
} else {
AddItemToMainPool(RG_GREEN_RUPEE);
}
}
} else {
for (RandomizerCheck loc : ctx->GetLocations(ctx->allLocations, Category::cPot)) {
AddItemToMainPool(RG_GREEN_RUPEE);
}
}
if (ctx->GetOption(RSK_SHUFFLE_MAGIC_BEANS)) {
@@ -233,8 +233,16 @@ void Settings::CreateOptionDescriptions() {
"\n"
"The Gerudo Card is required to enter the Gerudo Training Grounds, opening "
"the gate to Haunted Wasteland and the Horseback Archery minigame.";
mOptionDescriptions[RSK_SHUFFLE_POTS] =
"Freestanding pots will drop a randomized item the first time they're broken and collected. Pots will have a different appearance when they hold a randomized item.";
mOptionDescriptions[RSK_SHUFFLE_POTS] = "Freestanding pots will drop a randomized item the first time they're broken and collected."
" Pots will have a different appearance when they hold a randomized item.\n"
"\n"
"Off - Pots will not be shuffled.\n"
"\n"
"Dungeons - Only shuffle pots that are within dungeons.\n"
"\n"
"Overworld - Only shuffle pots that are outside of dungeons.\n"
"\n"
"All pots - Shuffle all pots.";
mOptionDescriptions[RSK_SHOPSANITY] = "Off - All shop items will be the same as vanilla.\n"
"\n"
"0 Items - Vanilla shop items will be shuffled among different shops.\n"
@@ -4968,6 +4968,14 @@ typedef enum {
RO_TOKENSANITY_ALL,
} RandoOptionTokensanity;
// Shuffle Pots settings (off, dungeons, overworld, all)
typedef enum {
RO_SHUFFLE_POTS_OFF,
RO_SHUFFLE_POTS_DUNGEONS,
RO_SHUFFLE_POTS_OVERWORLD,
RO_SHUFFLE_POTS_ALL,
} RandoOptionShufflePots;
//Link's Pocket Settings (dungeon reward, advancement, anything, nothing)
typedef enum {
RO_LINKS_POCKET_DUNGEON_REWARD,
+2 -2
View File
@@ -106,7 +106,7 @@ void Settings::CreateOptions() {
mOptions[RSK_SHUFFLE_OCARINA_BUTTONS] = Option::Bool("Shuffle Ocarina Buttons", "gRandomizeShuffleOcarinaButtons", mOptionDescriptions[RSK_SHUFFLE_OCARINA_BUTTONS]);
mOptions[RSK_SHUFFLE_WEIRD_EGG] = Option::Bool("Shuffle Weird Egg", "gRandomizeShuffleWeirdEgg", mOptionDescriptions[RSK_SHUFFLE_WEIRD_EGG]);
mOptions[RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD] = Option::Bool("Shuffle Gerudo Membership Card", "gRandomizeShuffleGerudoToken", mOptionDescriptions[RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD]);
mOptions[RSK_SHUFFLE_POTS] = Option::Bool("Shuffle Pot Contents", "gRandomizeShufflePotContents", mOptionDescriptions[RSK_SHUFFLE_POTS]);
mOptions[RSK_SHUFFLE_POTS] = Option::U8("Shuffle Pots", {"Off", "Dungeons", "Overworld", "All Pots"}, OptionCategory::Setting, "gRandomizeShufflePots", mOptionDescriptions[RSK_SHUFFLE_POTS], WidgetType::Combobox, RO_SHUFFLE_POTS_OFF);
mOptions[RSK_SHUFFLE_MAGIC_BEANS] = Option::Bool("Shuffle Magic Beans", "gRandomizeShuffleBeans", mOptionDescriptions[RSK_SHUFFLE_MAGIC_BEANS]);
mOptions[RSK_SHUFFLE_MERCHANTS] = Option::U8("Shuffle Merchants", {"Off", "On (No Hints)", "On (With Hints)"}, OptionCategory::Setting, "gRandomizeShuffleMerchants", mOptionDescriptions[RSK_SHUFFLE_MERCHANTS], WidgetType::Combobox, RO_SHUFFLE_MERCHANTS_OFF);
mOptions[RSK_SHUFFLE_FROG_SONG_RUPEES] = Option::Bool("Shuffle Frog Song Rupees", "gRandomizeShuffleFrogSongRupees", mOptionDescriptions[RSK_SHUFFLE_FROG_SONG_RUPEES]);
@@ -1022,7 +1022,7 @@ void Settings::CreateOptions() {
{ "Shuffle Settings:Link's Pocket", RSK_LINKS_POCKET },
{ "Shuffle Settings:Shuffle Songs", RSK_SHUFFLE_SONGS },
{ "Shuffle Settings:Shuffle Gerudo Membership Card", RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD },
{ "Shuffle Settings:Shuffle Pot Contents", RSK_SHUFFLE_POTS },
{ "Shuffle Settings:Shuffle Pots", RSK_SHUFFLE_POTS },
{ "Shuffle Settings:Shopsanity", RSK_SHOPSANITY },
{ "Shuffle Settings:Shopsanity Prices", RSK_SHOPSANITY_PRICES },
{ "Shuffle Settings:Affordable Prices", RSK_SHOPSANITY_PRICES_AFFORDABLE },
@@ -6666,7 +6666,7 @@ s32 func_8083E5A8(Player* this, PlayState* play) {
// this specifically for items coming from bushes/rocks/enemies when the player has already picked that item up.
uint8_t skipItemCutsceneRando = IS_RANDO && Item_CheckObtainability(giEntry.itemId) != ITEM_NONE && isDropToSkip;
// Automatically skip the pickup messages for very frequent items coming from pots with "Shuffle Pot Contents" on.
// Automatically skip the pickup messages for very frequent items coming from pots with "Shuffle Pots" on.
uint8_t isPotItemToSkip = interactedActor->id == ACTOR_EN_ITEM00 &&
interactedActor->params == ITEM00_SMALL_KEY &&
(giEntry.itemId == ITEM_RUPEE_GREEN || giEntry.itemId == ITEM_RUPEE_BLUE ||