mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2025-02-22 05:31:54 -05:00
Implement Skip Scarecrow's Song
This commit is contained in:
parent
3aefd4c519
commit
8d2f63419f
@ -685,7 +685,7 @@ namespace Logic {
|
||||
MasterSword = MasterSword || IsAdult;
|
||||
BiggoronSword = BiggoronSword || ProgressiveGiantKnife >= 2;
|
||||
|
||||
ScarecrowSong = ScarecrowSong || (ChildScarecrow && AdultScarecrow);
|
||||
ScarecrowSong = ScarecrowSong || FreeScarecrow || (ChildScarecrow && AdultScarecrow);
|
||||
Scarecrow = Hookshot && 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 SkipEponaRace = Option::Bool("Skip Epona Race", {"Don't Skip", "Skip"}, {skipEponaRaceDesc});
|
||||
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 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});
|
||||
@ -2588,6 +2588,8 @@ namespace Settings {
|
||||
|
||||
CompleteMaskQuest.SetSelectedIndex(cvarSettings[RSK_COMPLETE_MASK_QUEST]);
|
||||
|
||||
FreeScarecrow.SetSelectedIndex(cvarSettings[RSK_SKIP_SCARECROWS_SONG]);
|
||||
|
||||
EnableGlitchCutscenes.SetSelectedIndex(cvarSettings[RSK_ENABLE_GLITCH_CUTSCENES]);
|
||||
|
||||
NightGSExpectSuns.SetSelectedIndex(cvarSettings[RSK_SKULLS_SUNS_SONG]);
|
||||
|
@ -346,7 +346,8 @@ static void WriteSettings(const bool printAll = false) {
|
||||
setting->GetName() == "Skip Epona Race" ||
|
||||
setting->GetName() == "Skip Tower Escape" ||
|
||||
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") {
|
||||
std::string settingName = menu->name + ":" + setting->GetName();
|
||||
jsonData["settings"][settingName] = setting->GetSelectedOptionText();
|
||||
|
@ -595,6 +595,7 @@ std::unordered_map<std::string, RandomizerSettingKey> SpoilerfileSettingNameToEn
|
||||
{ "Timesaver Settings:Skip Epona Race", RSK_SKIP_EPONA_RACE },
|
||||
{ "Timesaver Settings:Skip Tower Escape", RSK_SKIP_TOWER_ESCAPE },
|
||||
{ "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 },
|
||||
};
|
||||
|
||||
@ -823,6 +824,7 @@ void Randomizer::ParseRandomizerSettingsFile(const char* spoilerFileName) {
|
||||
case RSK_STARTING_DEKU_SHIELD:
|
||||
case RSK_STARTING_KOKIRI_SWORD:
|
||||
case RSK_COMPLETE_MASK_QUEST:
|
||||
case RSK_SKIP_SCARECROWS_SONG:
|
||||
case RSK_ENABLE_GLITCH_CUTSCENES:
|
||||
case RSK_BOMBCHUS_IN_LOGIC:
|
||||
if(it.value() == "Off") {
|
||||
@ -3466,6 +3468,7 @@ void GenerateRandomizerImgui() {
|
||||
cvarSettings[RSK_SKIP_EPONA_RACE] = CVar_GetS32("gRandomizeSkipEponaRace", 0);
|
||||
cvarSettings[RSK_SKIP_TOWER_ESCAPE] = CVar_GetS32("gRandomizeSkipTowerEscape", 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_SKULLS_SUNS_SONG] = CVar_GetS32("gRandomizeGsExpectSunsSong", 0);
|
||||
@ -4178,6 +4181,15 @@ void DrawRandoEditor(bool& open) {
|
||||
|
||||
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();
|
||||
|
||||
// COLUMN 2 - Item Pool & Hint Settings
|
||||
|
@ -1014,6 +1014,7 @@ typedef enum {
|
||||
RSK_SKIP_EPONA_RACE,
|
||||
RSK_SKIP_TOWER_ESCAPE,
|
||||
RSK_COMPLETE_MASK_QUEST,
|
||||
RSK_SKIP_SCARECROWS_SONG,
|
||||
RSK_ENABLE_GLITCH_CUTSCENES,
|
||||
RSK_SKULLS_SUNS_SONG,
|
||||
RSK_SHUFFLE_ADULT_TRADE,
|
||||
|
@ -23,8 +23,8 @@
|
||||
#endif
|
||||
|
||||
#include "UIWidgets.hpp"
|
||||
#include "include/global.h"
|
||||
#include "include/z64audio.h"
|
||||
#include "include/variables.h"
|
||||
|
||||
#define EXPERIMENTAL() \
|
||||
ImGui::PushStyleColor(ImGuiCol_Text, IM_COL32(255, 50, 50, 255)); \
|
||||
@ -689,8 +689,13 @@ namespace GameMenuBar {
|
||||
UIWidgets::PaddedEnhancementCheckbox("Better Owl", "gBetterOwl", true, false);
|
||||
UIWidgets::Tooltip("The default response to Kaepora Gaebora is always that you understood what he said");
|
||||
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::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::PaddedEnhancementCheckbox("Instant Putaway", "gInstantPutaway", true, false);
|
||||
UIWidgets::Tooltip("Allow Link to put items away without having to wait around");
|
||||
|
@ -118,10 +118,12 @@ void func_80A90264(EnKakasi2* this, GlobalContext* globalCtx) {
|
||||
|
||||
this->unk_194++;
|
||||
|
||||
if (((BREG(1) != 0) || ((CVar_GetS32("gSkipScarecrow", 0) != 0) &&
|
||||
(globalCtx->msgCtx.ocarinaAction == OCARINA_ACTION_FREE_PLAY) && gSaveContext.scarecrowSpawnSongSet)) &&
|
||||
(this->actor.xzDistToPlayer < this->maxSpawnDistance.x) &&
|
||||
(fabsf(player->actor.world.pos.y - this->actor.world.pos.y) < this->maxSpawnDistance.y)){
|
||||
bool skipScarecrow =
|
||||
(CVar_GetS32("gSkipScarecrow", 0) && gSaveContext.scarecrowSpawnSongSet && globalCtx->msgCtx.ocarinaAction == OCARINA_ACTION_FREE_PLAY) ||
|
||||
(gSaveContext.n64ddFlag && Randomizer_GetSettingValue(RSK_SKIP_SCARECROWS_SONG) && globalCtx->msgCtx.ocarinaAction == OCARINA_ACTION_FREE_PLAY);
|
||||
|
||||
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;
|
||||
Collider_InitCylinder(globalCtx, &this->collider);
|
||||
Collider_SetCylinder(globalCtx, &this->collider, &this->actor, &sCylinderInit);
|
||||
|
Loading…
x
Reference in New Issue
Block a user