diff --git a/soh/soh/Enhancements/randomizer/3drando/settings.cpp b/soh/soh/Enhancements/randomizer/3drando/settings.cpp index f36dade6d..41a83dd33 100644 --- a/soh/soh/Enhancements/randomizer/3drando/settings.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/settings.cpp @@ -2595,6 +2595,8 @@ namespace Settings { StartingDekuShield.SetSelectedIndex(cvarSettings[RSK_STARTING_DEKU_SHIELD]); StartingKokiriSword.SetSelectedIndex(cvarSettings[RSK_STARTING_KOKIRI_SWORD]); + StartingSkulltulaToken.SetSelectedIndex(cvarSettings[RSK_STARTING_SKULLTULA_TOKEN]); + MapsAndCompasses.SetSelectedIndex(cvarSettings[RSK_STARTING_MAPS_COMPASSES]); // RANDOTODO: Implement disabling ammo drops. Currently only "On" (index 0) or "On + Bombchus" (index 1) is implemented. diff --git a/soh/soh/Enhancements/randomizer/3drando/spoiler_log.cpp b/soh/soh/Enhancements/randomizer/3drando/spoiler_log.cpp index b48f7bef9..32be2d679 100644 --- a/soh/soh/Enhancements/randomizer/3drando/spoiler_log.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/spoiler_log.cpp @@ -440,6 +440,7 @@ static void WriteStartingInventory() { // to see if the name is one of the 3 we're using rn if (setting->GetName() == "Start with Consumables" || setting->GetName() == "Start with Max Rupees" || + setting->GetName() == "Gold Skulltula Tokens" || setting->GetName() == "Start with Fairy Ocarina" || setting->GetName() == "Start with Kokiri Sword" || setting->GetName() == "Start with Deku Shield") { diff --git a/soh/soh/Enhancements/randomizer/randomizer.cpp b/soh/soh/Enhancements/randomizer/randomizer.cpp index 297ec0995..0c6f70d65 100644 --- a/soh/soh/Enhancements/randomizer/randomizer.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer.cpp @@ -233,6 +233,7 @@ std::unordered_map SpoilerfileSettingNameToEn { "Skip Child Zelda", RSK_SKIP_CHILD_ZELDA }, { "Start with Consumables", RSK_STARTING_CONSUMABLES }, { "Start with Max Rupees", RSK_FULL_WALLETS }, + { "Gold Skulltula Tokens", RSK_STARTING_SKULLTULA_TOKEN }, { "Timesaver Settings:Cuccos to return", RSK_CUCCO_COUNT }, { "Timesaver Settings:Big Poe Target Count", RSK_BIG_POE_COUNT }, { "Timesaver Settings:Skip Child Stealth", RSK_SKIP_CHILD_STEALTH }, @@ -670,6 +671,7 @@ void Randomizer::ParseRandomizerSettingsFile(const char* spoilerFileName) { case RSK_TRIAL_COUNT: case RSK_BIG_POE_COUNT: case RSK_CUCCO_COUNT: + case RSK_STARTING_SKULLTULA_TOKEN: numericValueString = it.value(); gSaveContext.randoSettings[index].value = std::stoi(numericValueString); break; @@ -2556,6 +2558,7 @@ void GenerateRandomizerImgui() { cvarSettings[RSK_SHUFFLE_KOKIRI_SWORD] = CVar_GetS32("gRandomizeShuffleKokiriSword", 0) || CVar_GetS32("gRandomizeStartingKokiriSword", 0); cvarSettings[RSK_STARTING_DEKU_SHIELD] = CVar_GetS32("gRandomizeStartingDekuShield", 0); + cvarSettings[RSK_STARTING_SKULLTULA_TOKEN] = CVar_GetS32("gRandomizeStartingSkulltulaToken", 0); cvarSettings[RSK_STARTING_MAPS_COMPASSES] = CVar_GetS32("gRandomizeStartingMapsCompasses", 2); cvarSettings[RSK_SHUFFLE_DUNGEON_REWARDS] = CVar_GetS32("gRandomizeShuffleDungeonReward", 0); cvarSettings[RSK_SHUFFLE_SONGS] = CVar_GetS32("gRandomizeShuffleSongs", 0); @@ -3949,6 +3952,8 @@ void DrawRandoEditor(bool& open) { UIWidgets::EnhancementCheckbox(Settings::StartingConsumables.GetName().c_str(), "gRandomizeStartingConsumables"); UIWidgets::PaddedSeparator(); + UIWidgets::EnhancementSliderInt("Gold Skulltula Tokens: %d", "##RandoStartingSkulltulaToken", "gRandomizeStartingSkulltulaToken", 0, 100, "", 0, true); + UIWidgets::PaddedSeparator(); ImGui::EndChild(); diff --git a/soh/soh/Enhancements/randomizer/randomizerTypes.h b/soh/soh/Enhancements/randomizer/randomizerTypes.h index 66e12f592..82689cd8d 100644 --- a/soh/soh/Enhancements/randomizer/randomizerTypes.h +++ b/soh/soh/Enhancements/randomizer/randomizerTypes.h @@ -1066,6 +1066,7 @@ typedef enum { RSK_MIX_INTERIOR_ENTRANCES, RSK_MIX_GROTTO_ENTRANCES, RSK_DECOUPLED_ENTRANCES, + RSK_STARTING_SKULLTULA_TOKEN, RSK_MAX } RandomizerSettingKey; diff --git a/soh/src/code/z_sram.c b/soh/src/code/z_sram.c index 406cba1fb..9337e7ce8 100644 --- a/soh/src/code/z_sram.c +++ b/soh/src/code/z_sram.c @@ -414,6 +414,11 @@ void Sram_InitSave(FileChooseContext* fileChooseCtx) { if(Randomizer_GetSettingValue(RSK_STARTING_KOKIRI_SWORD)) Item_Give(NULL, ITEM_SWORD_KOKIRI); if(Randomizer_GetSettingValue(RSK_STARTING_DEKU_SHIELD)) Item_Give(NULL, ITEM_SHIELD_DEKU); + if(Randomizer_GetSettingValue(RSK_STARTING_SKULLTULA_TOKEN)) { + gSaveContext.inventory.questItems |= gBitFlags[QUEST_SKULL_TOKEN]; + gSaveContext.inventory.gsTokens = Randomizer_GetSettingValue(RSK_STARTING_SKULLTULA_TOKEN); + } + if(Randomizer_GetSettingValue(RSK_STARTING_OCARINA)) { INV_CONTENT(ITEM_OCARINA_FAIRY) = ITEM_OCARINA_FAIRY; }