mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2024-08-13 17:03:47 -04:00
Merge branch 'rando-next' of https://github.com/HarbourMasters/Shipwright into shopsanity
This commit is contained in:
commit
8a3d1352d7
@ -685,7 +685,7 @@ namespace Logic {
|
|||||||
MasterSword = MasterSword || IsAdult;
|
MasterSword = MasterSword || IsAdult;
|
||||||
BiggoronSword = BiggoronSword || ProgressiveGiantKnife >= 2;
|
BiggoronSword = BiggoronSword || ProgressiveGiantKnife >= 2;
|
||||||
|
|
||||||
ScarecrowSong = ScarecrowSong || (ChildScarecrow && AdultScarecrow);
|
ScarecrowSong = ScarecrowSong || FreeScarecrow || (ChildScarecrow && AdultScarecrow);
|
||||||
Scarecrow = Hookshot && CanPlay(ScarecrowSong);
|
Scarecrow = Hookshot && CanPlay(ScarecrowSong);
|
||||||
DistantScarecrow = Longshot && CanPlay(ScarecrowSong);
|
DistantScarecrow = Longshot && CanPlay(ScarecrowSong);
|
||||||
|
|
||||||
|
@ -258,7 +258,7 @@ namespace Settings {
|
|||||||
Option SkipTowerEscape = Option::Bool("Skip Tower Escape", {"Don't Skip", "Skip"}, {skipTowerEscapeDesc}, OptionCategory::Setting, SKIP);
|
Option SkipTowerEscape = Option::Bool("Skip Tower Escape", {"Don't Skip", "Skip"}, {skipTowerEscapeDesc}, OptionCategory::Setting, SKIP);
|
||||||
Option SkipEponaRace = Option::Bool("Skip Epona Race", {"Don't Skip", "Skip"}, {skipEponaRaceDesc});
|
Option SkipEponaRace = Option::Bool("Skip Epona Race", {"Don't Skip", "Skip"}, {skipEponaRaceDesc});
|
||||||
Option SkipMinigamePhases = Option::Bool("Minigames repetitions", {"Don't Skip", "Skip"}, {skipMinigamePhasesDesc});
|
Option SkipMinigamePhases = Option::Bool("Minigames repetitions", {"Don't Skip", "Skip"}, {skipMinigamePhasesDesc});
|
||||||
Option FreeScarecrow = Option::Bool("Free Scarecrow", {"Off", "On"}, {freeScarecrowDesc});
|
Option FreeScarecrow = Option::Bool("Skip Scarecrow's Song", {"Off", "On"}, {freeScarecrowDesc});
|
||||||
Option FourPoesCutscene = Option::Bool("Four Poes Cutscene", {"Don't Skip", "Skip"}, {fourPoesDesc}, OptionCategory::Setting, SKIP);
|
Option FourPoesCutscene = Option::Bool("Four Poes Cutscene", {"Don't Skip", "Skip"}, {fourPoesDesc}, OptionCategory::Setting, SKIP);
|
||||||
Option LakeHyliaOwl = Option::Bool("Lake Hylia Owl", {"Don't Skip", "Skip"}, {lakeHyliaOwlDesc}, OptionCategory::Setting, SKIP);
|
Option LakeHyliaOwl = Option::Bool("Lake Hylia Owl", {"Don't Skip", "Skip"}, {lakeHyliaOwlDesc}, OptionCategory::Setting, SKIP);
|
||||||
Option BigPoeTargetCount = Option::U8 ("Big Poe Target Count", {NumOpts(1, 10)}, {bigPoeTargetCountDesc});
|
Option BigPoeTargetCount = Option::U8 ("Big Poe Target Count", {NumOpts(1, 10)}, {bigPoeTargetCountDesc});
|
||||||
@ -2562,8 +2562,10 @@ namespace Settings {
|
|||||||
|
|
||||||
MapsAndCompasses.SetSelectedIndex(cvarSettings[RSK_STARTING_MAPS_COMPASSES]);
|
MapsAndCompasses.SetSelectedIndex(cvarSettings[RSK_STARTING_MAPS_COMPASSES]);
|
||||||
|
|
||||||
|
// RANDOTODO: Implement disabling ammo drops. Currently only "On" (index 0) or "On + Bombchus" (index 1) is implemented.
|
||||||
|
AmmoDrops.SetSelectedIndex(cvarSettings[RSK_ENABLE_BOMBCHU_DROPS]);
|
||||||
|
|
||||||
BombchusInLogic.SetSelectedIndex(cvarSettings[RSK_BOMBCHUS_IN_LOGIC]);
|
BombchusInLogic.SetSelectedIndex(cvarSettings[RSK_BOMBCHUS_IN_LOGIC]);
|
||||||
AmmoDrops.SetSelectedIndex(AMMODROPS_VANILLA); // Ensure logic knows bombchu drops aren't implemented yet
|
|
||||||
|
|
||||||
StartingConsumables.SetSelectedIndex(cvarSettings[RSK_STARTING_CONSUMABLES]);
|
StartingConsumables.SetSelectedIndex(cvarSettings[RSK_STARTING_CONSUMABLES]);
|
||||||
StartingMaxRupees.SetSelectedIndex(cvarSettings[RSK_FULL_WALLETS]);
|
StartingMaxRupees.SetSelectedIndex(cvarSettings[RSK_FULL_WALLETS]);
|
||||||
@ -2589,6 +2591,8 @@ namespace Settings {
|
|||||||
|
|
||||||
CompleteMaskQuest.SetSelectedIndex(cvarSettings[RSK_COMPLETE_MASK_QUEST]);
|
CompleteMaskQuest.SetSelectedIndex(cvarSettings[RSK_COMPLETE_MASK_QUEST]);
|
||||||
|
|
||||||
|
FreeScarecrow.SetSelectedIndex(cvarSettings[RSK_SKIP_SCARECROWS_SONG]);
|
||||||
|
|
||||||
EnableGlitchCutscenes.SetSelectedIndex(cvarSettings[RSK_ENABLE_GLITCH_CUTSCENES]);
|
EnableGlitchCutscenes.SetSelectedIndex(cvarSettings[RSK_ENABLE_GLITCH_CUTSCENES]);
|
||||||
|
|
||||||
NightGSExpectSuns.SetSelectedIndex(cvarSettings[RSK_SKULLS_SUNS_SONG]);
|
NightGSExpectSuns.SetSelectedIndex(cvarSettings[RSK_SKULLS_SUNS_SONG]);
|
||||||
|
@ -347,6 +347,7 @@ static void WriteSettings(const bool printAll = false) {
|
|||||||
setting->GetName() == "Skip Tower Escape" ||
|
setting->GetName() == "Skip Tower Escape" ||
|
||||||
setting->GetName() == "Skip Child Stealth" ||
|
setting->GetName() == "Skip Child Stealth" ||
|
||||||
setting->GetName() == "Complete Mask Quest" ||
|
setting->GetName() == "Complete Mask Quest" ||
|
||||||
|
setting->GetName() == "Skip Scarecrow's Song" ||
|
||||||
setting->GetName() == "Enable Glitch-Useful Cutscenes") {
|
setting->GetName() == "Enable Glitch-Useful Cutscenes") {
|
||||||
std::string settingName = menu->name + ":" + setting->GetName();
|
std::string settingName = menu->name + ":" + setting->GetName();
|
||||||
jsonData["settings"][settingName] = setting->GetSelectedOptionText();
|
jsonData["settings"][settingName] = setting->GetSelectedOptionText();
|
||||||
|
@ -583,6 +583,7 @@ std::unordered_map<std::string, RandomizerSettingKey> SpoilerfileSettingNameToEn
|
|||||||
{ "Shuffle Dungeon Items:Gerudo Fortress Keys", RSK_GERUDO_KEYS },
|
{ "Shuffle Dungeon Items:Gerudo Fortress Keys", RSK_GERUDO_KEYS },
|
||||||
{ "Shuffle Dungeon Items:Boss Keys", RSK_BOSS_KEYSANITY },
|
{ "Shuffle Dungeon Items:Boss Keys", RSK_BOSS_KEYSANITY },
|
||||||
{ "Shuffle Dungeon Items:Ganon's Boss Key", RSK_GANONS_BOSS_KEY },
|
{ "Shuffle Dungeon Items:Ganon's Boss Key", RSK_GANONS_BOSS_KEY },
|
||||||
|
{ "World Settings:Ammo Drops", RSK_ENABLE_BOMBCHU_DROPS },
|
||||||
{ "World Settings:Bombchus in Logic", RSK_BOMBCHUS_IN_LOGIC },
|
{ "World Settings:Bombchus in Logic", RSK_BOMBCHUS_IN_LOGIC },
|
||||||
{ "Misc Settings:Gossip Stone Hints", RSK_GOSSIP_STONE_HINTS },
|
{ "Misc Settings:Gossip Stone Hints", RSK_GOSSIP_STONE_HINTS },
|
||||||
{ "Misc Settings:Hint Clarity", RSK_HINT_CLARITY },
|
{ "Misc Settings:Hint Clarity", RSK_HINT_CLARITY },
|
||||||
@ -596,6 +597,7 @@ std::unordered_map<std::string, RandomizerSettingKey> SpoilerfileSettingNameToEn
|
|||||||
{ "Timesaver Settings:Skip Epona Race", RSK_SKIP_EPONA_RACE },
|
{ "Timesaver Settings:Skip Epona Race", RSK_SKIP_EPONA_RACE },
|
||||||
{ "Timesaver Settings:Skip Tower Escape", RSK_SKIP_TOWER_ESCAPE },
|
{ "Timesaver Settings:Skip Tower Escape", RSK_SKIP_TOWER_ESCAPE },
|
||||||
{ "Timesaver Settings:Complete Mask Quest", RSK_COMPLETE_MASK_QUEST },
|
{ "Timesaver Settings:Complete Mask Quest", RSK_COMPLETE_MASK_QUEST },
|
||||||
|
{ "Timesaver Settings:Skip Scarecrow's Song", RSK_SKIP_SCARECROWS_SONG },
|
||||||
{ "Timesaver Settings:Enable Glitch-Useful Cutscenes", RSK_ENABLE_GLITCH_CUTSCENES },
|
{ "Timesaver Settings:Enable Glitch-Useful Cutscenes", RSK_ENABLE_GLITCH_CUTSCENES },
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -979,6 +981,7 @@ void Randomizer::ParseRandomizerSettingsFile(const char* spoilerFileName) {
|
|||||||
case RSK_STARTING_DEKU_SHIELD:
|
case RSK_STARTING_DEKU_SHIELD:
|
||||||
case RSK_STARTING_KOKIRI_SWORD:
|
case RSK_STARTING_KOKIRI_SWORD:
|
||||||
case RSK_COMPLETE_MASK_QUEST:
|
case RSK_COMPLETE_MASK_QUEST:
|
||||||
|
case RSK_SKIP_SCARECROWS_SONG:
|
||||||
case RSK_ENABLE_GLITCH_CUTSCENES:
|
case RSK_ENABLE_GLITCH_CUTSCENES:
|
||||||
case RSK_BOMBCHUS_IN_LOGIC:
|
case RSK_BOMBCHUS_IN_LOGIC:
|
||||||
if(it.value() == "Off") {
|
if(it.value() == "Off") {
|
||||||
@ -987,6 +990,16 @@ void Randomizer::ParseRandomizerSettingsFile(const char* spoilerFileName) {
|
|||||||
gSaveContext.randoSettings[index].value = 1;
|
gSaveContext.randoSettings[index].value = 1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
// Uses Ammo Drops option for now. "Off" not yet implemented
|
||||||
|
case RSK_ENABLE_BOMBCHU_DROPS:
|
||||||
|
if (it.value() == "On") {
|
||||||
|
gSaveContext.randoSettings[index].value = 0;
|
||||||
|
} else if (it.value() == "On + Bombchu") {
|
||||||
|
gSaveContext.randoSettings[index].value = 1;
|
||||||
|
} else if (it.value() == "Off") {
|
||||||
|
gSaveContext.randoSettings[index].value = 2;
|
||||||
|
}
|
||||||
|
break;
|
||||||
case RSK_STARTING_MAPS_COMPASSES:
|
case RSK_STARTING_MAPS_COMPASSES:
|
||||||
if(it.value() == "Start With") {
|
if(it.value() == "Start With") {
|
||||||
gSaveContext.randoSettings[index].value = 0;
|
gSaveContext.randoSettings[index].value = 0;
|
||||||
@ -1479,15 +1492,15 @@ ItemObtainability Randomizer::GetItemObtainabilityFromRandomizerGet(RandomizerGe
|
|||||||
case RG_BUY_BOMBCHU_10:
|
case RG_BUY_BOMBCHU_10:
|
||||||
case RG_BUY_BOMBCHU_20:
|
case RG_BUY_BOMBCHU_20:
|
||||||
case RG_BUY_BOMBCHU_5:
|
case RG_BUY_BOMBCHU_5:
|
||||||
|
case RG_BOMBCHU_DROP:
|
||||||
// If Bombchus aren't in logic, you need a bomb bag to purchase them
|
// If Bombchus aren't in logic, you need a bomb bag to purchase them
|
||||||
// If they are in logic, you need to have already obtained them somewhere else
|
// If they are in logic, you need to have already obtained them somewhere else
|
||||||
|
// Bombchu Drop is only used as a bowling reward, so it needs the same logic
|
||||||
if (GetRandoSettingValue(RSK_BOMBCHUS_IN_LOGIC)) {
|
if (GetRandoSettingValue(RSK_BOMBCHUS_IN_LOGIC)) {
|
||||||
return INV_CONTENT(ITEM_BOMBCHU) == ITEM_BOMBCHU ? CAN_OBTAIN : CANT_OBTAIN_NEED_UPGRADE;
|
return INV_CONTENT(ITEM_BOMBCHU) == ITEM_BOMBCHU ? CAN_OBTAIN : CANT_OBTAIN_NEED_UPGRADE;
|
||||||
} else {
|
} else {
|
||||||
return CUR_UPG_VALUE(UPG_BOMB_BAG) ? CAN_OBTAIN : CANT_OBTAIN_NEED_UPGRADE;
|
return CUR_UPG_VALUE(UPG_BOMB_BAG) ? CAN_OBTAIN : CANT_OBTAIN_NEED_UPGRADE;
|
||||||
}
|
}
|
||||||
case RG_BOMBCHU_DROP:
|
|
||||||
return INV_CONTENT(ITEM_BOMBCHU) == ITEM_BOMBCHU ? CAN_OBTAIN : CANT_OBTAIN_NEED_UPGRADE;
|
|
||||||
case RG_PROGRESSIVE_HOOKSHOT:
|
case RG_PROGRESSIVE_HOOKSHOT:
|
||||||
switch (INV_CONTENT(ITEM_HOOKSHOT)) {
|
switch (INV_CONTENT(ITEM_HOOKSHOT)) {
|
||||||
case ITEM_NONE:
|
case ITEM_NONE:
|
||||||
@ -1846,7 +1859,13 @@ GetItemID Randomizer::GetItemIdFromRandomizerGet(RandomizerGet randoGet, GetItem
|
|||||||
return GI_OCARINA_OOT;
|
return GI_OCARINA_OOT;
|
||||||
}
|
}
|
||||||
case RG_PROGRESSIVE_BOMBCHUS:
|
case RG_PROGRESSIVE_BOMBCHUS:
|
||||||
|
if (INV_CONTENT(ITEM_BOMBCHU) == ITEM_NONE) {
|
||||||
return GI_BOMBCHUS_20;
|
return GI_BOMBCHUS_20;
|
||||||
|
}
|
||||||
|
if (AMMO(ITEM_BOMBCHU) < 5) {
|
||||||
|
return GI_BOMBCHUS_10;
|
||||||
|
}
|
||||||
|
return GI_BOMBCHUS_5;
|
||||||
case RG_BOMBCHU_5:
|
case RG_BOMBCHU_5:
|
||||||
case RG_BUY_BOMBCHU_5:
|
case RG_BUY_BOMBCHU_5:
|
||||||
case RG_BOMBCHU_DROP:
|
case RG_BOMBCHU_DROP:
|
||||||
@ -3963,6 +3982,7 @@ void GenerateRandomizerImgui() {
|
|||||||
cvarSettings[RSK_SHUFFLE_COWS] = CVar_GetS32("gRandomizeShuffleCows", 0);
|
cvarSettings[RSK_SHUFFLE_COWS] = CVar_GetS32("gRandomizeShuffleCows", 0);
|
||||||
cvarSettings[RSK_SHUFFLE_ADULT_TRADE] = CVar_GetS32("gRandomizeShuffleAdultTrade", 0);
|
cvarSettings[RSK_SHUFFLE_ADULT_TRADE] = CVar_GetS32("gRandomizeShuffleAdultTrade", 0);
|
||||||
cvarSettings[RSK_SHUFFLE_MAGIC_BEANS] = CVar_GetS32("gRandomizeShuffleBeans", 0);
|
cvarSettings[RSK_SHUFFLE_MAGIC_BEANS] = CVar_GetS32("gRandomizeShuffleBeans", 0);
|
||||||
|
cvarSettings[RSK_ENABLE_BOMBCHU_DROPS] = CVar_GetS32("gRandomizeEnableBombchuDrops", 0);
|
||||||
cvarSettings[RSK_BOMBCHUS_IN_LOGIC] = CVar_GetS32("gRandomizeBombchusInLogic", 0);
|
cvarSettings[RSK_BOMBCHUS_IN_LOGIC] = CVar_GetS32("gRandomizeBombchusInLogic", 0);
|
||||||
cvarSettings[RSK_SKIP_CHILD_ZELDA] = CVar_GetS32("gRandomizeSkipChildZelda", 0);
|
cvarSettings[RSK_SKIP_CHILD_ZELDA] = CVar_GetS32("gRandomizeSkipChildZelda", 0);
|
||||||
|
|
||||||
@ -4000,6 +4020,7 @@ void GenerateRandomizerImgui() {
|
|||||||
cvarSettings[RSK_SKIP_EPONA_RACE] = CVar_GetS32("gRandomizeSkipEponaRace", 0);
|
cvarSettings[RSK_SKIP_EPONA_RACE] = CVar_GetS32("gRandomizeSkipEponaRace", 0);
|
||||||
cvarSettings[RSK_SKIP_TOWER_ESCAPE] = CVar_GetS32("gRandomizeSkipTowerEscape", 0);
|
cvarSettings[RSK_SKIP_TOWER_ESCAPE] = CVar_GetS32("gRandomizeSkipTowerEscape", 0);
|
||||||
cvarSettings[RSK_COMPLETE_MASK_QUEST] = CVar_GetS32("gRandomizeCompleteMaskQuest", 0);
|
cvarSettings[RSK_COMPLETE_MASK_QUEST] = CVar_GetS32("gRandomizeCompleteMaskQuest", 0);
|
||||||
|
cvarSettings[RSK_SKIP_SCARECROWS_SONG] = CVar_GetS32("gRandomizeSkipScarecrowsSong", 0);
|
||||||
cvarSettings[RSK_ENABLE_GLITCH_CUTSCENES] = CVar_GetS32("gRandomizeEnableGlitchCutscenes", 0);
|
cvarSettings[RSK_ENABLE_GLITCH_CUTSCENES] = CVar_GetS32("gRandomizeEnableGlitchCutscenes", 0);
|
||||||
|
|
||||||
cvarSettings[RSK_SKULLS_SUNS_SONG] = CVar_GetS32("gRandomizeGsExpectSunsSong", 0);
|
cvarSettings[RSK_SKULLS_SUNS_SONG] = CVar_GetS32("gRandomizeGsExpectSunsSong", 0);
|
||||||
@ -4727,6 +4748,15 @@ void DrawRandoEditor(bool& open) {
|
|||||||
|
|
||||||
UIWidgets::PaddedSeparator();
|
UIWidgets::PaddedSeparator();
|
||||||
|
|
||||||
|
// Skip Scarecrow Song
|
||||||
|
UIWidgets::EnhancementCheckbox(Settings::FreeScarecrow.GetName().c_str(),
|
||||||
|
"gRandomizeSkipScarecrowsSong");
|
||||||
|
UIWidgets::InsertHelpHoverText(
|
||||||
|
"Start with the ability to summon Pierre the scarecrow. Pulling out an ocarina in the usual locations will automatically summon him."
|
||||||
|
);
|
||||||
|
|
||||||
|
UIWidgets::PaddedSeparator();
|
||||||
|
|
||||||
ImGui::EndChild();
|
ImGui::EndChild();
|
||||||
|
|
||||||
// COLUMN 2 - Item Pool & Hint Settings
|
// COLUMN 2 - Item Pool & Hint Settings
|
||||||
@ -4853,6 +4883,14 @@ void DrawRandoEditor(bool& open) {
|
|||||||
|
|
||||||
UIWidgets::PaddedSeparator();
|
UIWidgets::PaddedSeparator();
|
||||||
|
|
||||||
|
// Enable Bombchu Drops
|
||||||
|
UIWidgets::EnhancementCheckbox("Enable Bombchu Drops", "gRandomizeEnableBombchuDrops");
|
||||||
|
UIWidgets::InsertHelpHoverText(
|
||||||
|
"Once you obtain bombchus for the first time, refills can be found in bushes and other places where bomb drops can normally spawn."
|
||||||
|
);
|
||||||
|
|
||||||
|
UIWidgets::PaddedSeparator();
|
||||||
|
|
||||||
UIWidgets::EnhancementCheckbox("WIP - Blue Fire Arrows", "gRandomizeBlueIceArrows", true, "In development");
|
UIWidgets::EnhancementCheckbox("WIP - Blue Fire Arrows", "gRandomizeBlueIceArrows", true, "In development");
|
||||||
UIWidgets::InsertHelpHoverText(
|
UIWidgets::InsertHelpHoverText(
|
||||||
"Ice Arrows act like Blue Fire, making them able to melt red ice. "
|
"Ice Arrows act like Blue Fire, making them able to melt red ice. "
|
||||||
|
@ -1015,10 +1015,12 @@ typedef enum {
|
|||||||
RSK_SKIP_EPONA_RACE,
|
RSK_SKIP_EPONA_RACE,
|
||||||
RSK_SKIP_TOWER_ESCAPE,
|
RSK_SKIP_TOWER_ESCAPE,
|
||||||
RSK_COMPLETE_MASK_QUEST,
|
RSK_COMPLETE_MASK_QUEST,
|
||||||
|
RSK_SKIP_SCARECROWS_SONG,
|
||||||
RSK_ENABLE_GLITCH_CUTSCENES,
|
RSK_ENABLE_GLITCH_CUTSCENES,
|
||||||
RSK_SKULLS_SUNS_SONG,
|
RSK_SKULLS_SUNS_SONG,
|
||||||
RSK_SHUFFLE_ADULT_TRADE,
|
RSK_SHUFFLE_ADULT_TRADE,
|
||||||
RSK_SHUFFLE_MAGIC_BEANS,
|
RSK_SHUFFLE_MAGIC_BEANS,
|
||||||
|
RSK_ENABLE_BOMBCHU_DROPS,
|
||||||
RSK_BOMBCHUS_IN_LOGIC,
|
RSK_BOMBCHUS_IN_LOGIC,
|
||||||
RSK_LINKS_POCKET
|
RSK_LINKS_POCKET
|
||||||
} RandomizerSettingKey;
|
} RandomizerSettingKey;
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "UIWidgets.hpp"
|
#include "UIWidgets.hpp"
|
||||||
|
#include "include/global.h"
|
||||||
#include "include/z64audio.h"
|
#include "include/z64audio.h"
|
||||||
|
|
||||||
#define EXPERIMENTAL() \
|
#define EXPERIMENTAL() \
|
||||||
@ -688,8 +689,13 @@ namespace GameMenuBar {
|
|||||||
UIWidgets::PaddedEnhancementCheckbox("Better Owl", "gBetterOwl", true, false);
|
UIWidgets::PaddedEnhancementCheckbox("Better Owl", "gBetterOwl", true, false);
|
||||||
UIWidgets::Tooltip("The default response to Kaepora Gaebora is always that you understood what he said");
|
UIWidgets::Tooltip("The default response to Kaepora Gaebora is always that you understood what he said");
|
||||||
UIWidgets::PaddedEnhancementCheckbox("Fast Ocarina Playback", "gFastOcarinaPlayback", true, false);
|
UIWidgets::PaddedEnhancementCheckbox("Fast Ocarina Playback", "gFastOcarinaPlayback", true, false);
|
||||||
|
bool forceSkipScarecrow = gSaveContext.n64ddFlag &&
|
||||||
|
OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SKIP_SCARECROWS_SONG);
|
||||||
|
const char* forceSkipScarecrowText =
|
||||||
|
"This setting is forcefully enabled because a savefile\nwith \"Skip Scarecrow Song\" is loaded";
|
||||||
UIWidgets::Tooltip("Skip the part where the Ocarina playback is called when you play a song");
|
UIWidgets::Tooltip("Skip the part where the Ocarina playback is called when you play a song");
|
||||||
UIWidgets::PaddedEnhancementCheckbox("Skip Scarecrow Song", "gSkipScarecrow", true, false);
|
UIWidgets::PaddedEnhancementCheckbox("Skip Scarecrow Song", "gSkipScarecrow", true, false,
|
||||||
|
forceSkipScarecrow, forceSkipScarecrowText, UIWidgets::CheckboxGraphics::Checkmark);
|
||||||
UIWidgets::Tooltip("Pierre appears when Ocarina is pulled out. Requires learning scarecrow song.");
|
UIWidgets::Tooltip("Pierre appears when Ocarina is pulled out. Requires learning scarecrow song.");
|
||||||
UIWidgets::PaddedEnhancementCheckbox("Instant Putaway", "gInstantPutaway", true, false);
|
UIWidgets::PaddedEnhancementCheckbox("Instant Putaway", "gInstantPutaway", true, false);
|
||||||
UIWidgets::Tooltip("Allow Link to put items away without having to wait around");
|
UIWidgets::Tooltip("Allow Link to put items away without having to wait around");
|
||||||
@ -745,7 +751,12 @@ namespace GameMenuBar {
|
|||||||
);
|
);
|
||||||
UIWidgets::PaddedEnhancementCheckbox("No Random Drops", "gNoRandomDrops", true, false);
|
UIWidgets::PaddedEnhancementCheckbox("No Random Drops", "gNoRandomDrops", true, false);
|
||||||
UIWidgets::Tooltip("Disables random drops, except from the Goron Pot, Dampe, and bosses");
|
UIWidgets::Tooltip("Disables random drops, except from the Goron Pot, Dampe, and bosses");
|
||||||
UIWidgets::PaddedEnhancementCheckbox("Enable Bombchu Drops", "gBombchuDrops", true, false);
|
bool forceEnableBombchuDrops = gSaveContext.n64ddFlag &&
|
||||||
|
OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_ENABLE_BOMBCHU_DROPS) == 1;
|
||||||
|
const char* forceEnableBombchuDropsText =
|
||||||
|
"This setting is forcefully enabled because a savefile\nwith \"Enable Bombchu Drops\" is loaded.";
|
||||||
|
UIWidgets::PaddedEnhancementCheckbox("Enable Bombchu Drops", "gBombchuDrops", true, false,
|
||||||
|
forceEnableBombchuDrops, forceEnableBombchuDropsText, UIWidgets::CheckboxGraphics::Checkmark);
|
||||||
UIWidgets::Tooltip("Bombchus will sometimes drop in place of bombs");
|
UIWidgets::Tooltip("Bombchus will sometimes drop in place of bombs");
|
||||||
UIWidgets::PaddedEnhancementCheckbox("No Heart Drops", "gNoHeartDrops", true, false);
|
UIWidgets::PaddedEnhancementCheckbox("No Heart Drops", "gNoHeartDrops", true, false);
|
||||||
UIWidgets::Tooltip("Disables heart drops, but not heart placements, like from a Deku Scrub running off\nThis simulates Hero Mode from other games in the series");
|
UIWidgets::Tooltip("Disables heart drops, but not heart placements, like from a Deku Scrub running off\nThis simulates Hero Mode from other games in the series");
|
||||||
|
@ -1649,6 +1649,10 @@ extern "C" GetItemEntry ItemTable_RetrieveEntry(s16 tableID, s16 getItemID) {
|
|||||||
extern "C" GetItemEntry Randomizer_GetItemFromActor(s16 actorId, s16 sceneNum, s16 actorParams, GetItemID ogId) {
|
extern "C" GetItemEntry Randomizer_GetItemFromActor(s16 actorId, s16 sceneNum, s16 actorParams, GetItemID ogId) {
|
||||||
s16 getItemModIndex;
|
s16 getItemModIndex;
|
||||||
RandomizerCheck randomizerCheck = OTRGlobals::Instance->gRandomizer->GetCheckFromActor(actorId, sceneNum, actorParams);
|
RandomizerCheck randomizerCheck = OTRGlobals::Instance->gRandomizer->GetCheckFromActor(actorId, sceneNum, actorParams);
|
||||||
|
// if we got unknown check here, we don't need to do anything else, just return the ogId.
|
||||||
|
if (randomizerCheck == RC_UNKNOWN_CHECK) {
|
||||||
|
return ItemTable_RetrieveEntry(MOD_NONE, ogId);
|
||||||
|
}
|
||||||
if (OTRGlobals::Instance->gRandomizer->CheckContainsVanillaItem(randomizerCheck)) {
|
if (OTRGlobals::Instance->gRandomizer->CheckContainsVanillaItem(randomizerCheck)) {
|
||||||
getItemModIndex = MOD_NONE;
|
getItemModIndex = MOD_NONE;
|
||||||
} else {
|
} else {
|
||||||
@ -1665,6 +1669,11 @@ extern "C" GetItemEntry Randomizer_GetItemFromActor(s16 actorId, s16 sceneNum, s
|
|||||||
|
|
||||||
extern "C" GetItemEntry Randomizer_GetItemFromKnownCheck(RandomizerCheck randomizerCheck, GetItemID ogId) {
|
extern "C" GetItemEntry Randomizer_GetItemFromKnownCheck(RandomizerCheck randomizerCheck, GetItemID ogId) {
|
||||||
s16 getItemModIndex;
|
s16 getItemModIndex;
|
||||||
|
|
||||||
|
// if we got unknown check here, we don't need to do anything else, just return the ogId.
|
||||||
|
if (randomizerCheck == RC_UNKNOWN_CHECK) {
|
||||||
|
return ItemTable_RetrieveEntry(MOD_NONE, ogId);
|
||||||
|
}
|
||||||
if (OTRGlobals::Instance->gRandomizer->CheckContainsVanillaItem(randomizerCheck)) {
|
if (OTRGlobals::Instance->gRandomizer->CheckContainsVanillaItem(randomizerCheck)) {
|
||||||
getItemModIndex = MOD_NONE;
|
getItemModIndex = MOD_NONE;
|
||||||
} else {
|
} else {
|
||||||
|
@ -1507,7 +1507,8 @@ s16 func_8001F404(s16 dropId) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CVar_GetS32("gBombchuDrops", 0) &&
|
if ((CVar_GetS32("gBombchuDrops", 0) ||
|
||||||
|
(gSaveContext.n64ddFlag && Randomizer_GetSettingValue(RSK_ENABLE_BOMBCHU_DROPS) == 1)) &&
|
||||||
(dropId == ITEM00_BOMBS_A || dropId == ITEM00_BOMBS_B || dropId == ITEM00_BOMBS_SPECIAL)) {
|
(dropId == ITEM00_BOMBS_A || dropId == ITEM00_BOMBS_B || dropId == ITEM00_BOMBS_SPECIAL)) {
|
||||||
dropId = EnItem00_ConvertBombDropToBombchu(dropId);
|
dropId = EnItem00_ConvertBombDropToBombchu(dropId);
|
||||||
}
|
}
|
||||||
|
@ -101,6 +101,9 @@ void GiveLinksPocketItem() {
|
|||||||
GetItemEntry getItemEntry = Randomizer_GetItemFromKnownCheck(RC_LINKS_POCKET, RG_NONE);
|
GetItemEntry getItemEntry = Randomizer_GetItemFromKnownCheck(RC_LINKS_POCKET, RG_NONE);
|
||||||
|
|
||||||
if (getItemEntry.modIndex == MOD_NONE) {
|
if (getItemEntry.modIndex == MOD_NONE) {
|
||||||
|
if (getItemEntry.getItemId == GI_SWORD_BGS) {
|
||||||
|
gSaveContext.bgsFlag = true;
|
||||||
|
}
|
||||||
Item_Give(NULL, getItemEntry.itemId);
|
Item_Give(NULL, getItemEntry.itemId);
|
||||||
} else if (getItemEntry.modIndex == MOD_RANDOMIZER) {
|
} else if (getItemEntry.modIndex == MOD_RANDOMIZER) {
|
||||||
Randomizer_Item_Give(NULL, getItemEntry);
|
Randomizer_Item_Give(NULL, getItemEntry);
|
||||||
@ -400,6 +403,9 @@ void Sram_InitSave(FileChooseContext* fileChooseCtx) {
|
|||||||
s32 giid = getItem.getItemId;
|
s32 giid = getItem.getItemId;
|
||||||
|
|
||||||
if (getItem.modIndex == MOD_NONE) {
|
if (getItem.modIndex == MOD_NONE) {
|
||||||
|
if (getItem.getItemId == GI_SWORD_BGS) {
|
||||||
|
gSaveContext.bgsFlag = true;
|
||||||
|
}
|
||||||
Item_Give(NULL, getItem.itemId);
|
Item_Give(NULL, getItem.itemId);
|
||||||
} else if (getItem.modIndex == MOD_RANDOMIZER) {
|
} else if (getItem.modIndex == MOD_RANDOMIZER) {
|
||||||
Randomizer_Item_Give(NULL, getItem);
|
Randomizer_Item_Give(NULL, getItem);
|
||||||
|
@ -118,10 +118,12 @@ void func_80A90264(EnKakasi2* this, GlobalContext* globalCtx) {
|
|||||||
|
|
||||||
this->unk_194++;
|
this->unk_194++;
|
||||||
|
|
||||||
if (((BREG(1) != 0) || ((CVar_GetS32("gSkipScarecrow", 0) != 0) &&
|
bool skipScarecrow = globalCtx->msgCtx.ocarinaAction == OCARINA_ACTION_FREE_PLAY &&
|
||||||
(globalCtx->msgCtx.ocarinaAction == OCARINA_ACTION_FREE_PLAY) && gSaveContext.scarecrowSpawnSongSet)) &&
|
((CVar_GetS32("gSkipScarecrow", 0) && gSaveContext.scarecrowSpawnSongSet) ||
|
||||||
(this->actor.xzDistToPlayer < this->maxSpawnDistance.x) &&
|
(gSaveContext.n64ddFlag && Randomizer_GetSettingValue(RSK_SKIP_SCARECROWS_SONG)));
|
||||||
(fabsf(player->actor.world.pos.y - this->actor.world.pos.y) < this->maxSpawnDistance.y)){
|
|
||||||
|
if ((BREG(1) != 0) || skipScarecrow && (this->actor.xzDistToPlayer < this->maxSpawnDistance.x) &&
|
||||||
|
(fabsf(player->actor.world.pos.y - this->actor.world.pos.y) < this->maxSpawnDistance.y)) {
|
||||||
this->actor.draw = func_80A90948;
|
this->actor.draw = func_80A90948;
|
||||||
Collider_InitCylinder(globalCtx, &this->collider);
|
Collider_InitCylinder(globalCtx, &this->collider);
|
||||||
Collider_SetCylinder(globalCtx, &this->collider, &this->actor, &sCylinderInit);
|
Collider_SetCylinder(globalCtx, &this->collider, &this->actor, &sCylinderInit);
|
||||||
|
Loading…
Reference in New Issue
Block a user