Merge branch 'develop' of garrettjoecox.github.com:HarbourMasters/Shipwright into let-it-snow

This commit is contained in:
Garrett Cox 2024-12-09 19:42:34 -06:00
commit 4162a818b1
33 changed files with 202 additions and 143 deletions

@ -1 +1 @@
Subproject commit 467f36589b0d6fe6c7f9d248945650a459bce768 Subproject commit c872b1ff18b793a97385ccf1c864c3fc04051cc7

@ -1 +1 @@
Subproject commit 0302eab051a7e0e5a8dc208aca5b00899a91808c Subproject commit d252cc241e0ff2270a289abba274ed43bd0b1792

View file

@ -86,7 +86,7 @@ static void OnPresentChange() {
uint32_t giftsCollected = CVarGetInteger(CVAR("GiftsCollected"), 0); uint32_t giftsCollected = CVarGetInteger(CVAR("GiftsCollected"), 0);
giftsCollected++; giftsCollected++;
CVarSetInteger(CVAR("GiftsCollected"), giftsCollected); CVarSetInteger(CVAR("GiftsCollected"), giftsCollected);
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
std::string msg = std::to_string(giftsCollected).c_str(); std::string msg = std::to_string(giftsCollected).c_str();
msg += " Gifts in Inventory."; msg += " Gifts in Inventory.";
Notification::Emit({ Notification::Emit({
@ -117,7 +117,7 @@ static void OnPresentChange() {
vanillaQueuedItemEntry = Rando::StaticData::RetrieveItem(RG_TRIFORCE_PIECE).GetGIEntry_Copy(); vanillaQueuedItemEntry = Rando::StaticData::RetrieveItem(RG_TRIFORCE_PIECE).GetGIEntry_Copy();
giftsCollected -= giftsRequired; giftsCollected -= giftsRequired;
CVarSetInteger(CVAR("GiftsCollected"), giftsCollected); CVarSetInteger(CVAR("GiftsCollected"), giftsCollected);
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
std::string msg = std::to_string(giftsCollected).c_str(); std::string msg = std::to_string(giftsCollected).c_str();
msg += " Gifts in Inventory."; msg += " Gifts in Inventory.";

View file

@ -27,7 +27,7 @@ static void OnConfigurationChanged() {
COND_HOOK(OnSaveFile, CVarGetInteger(CVAR("BombArrows.Enabled"), 0), [](int32_t file) { COND_HOOK(OnSaveFile, CVarGetInteger(CVAR("BombArrows.Enabled"), 0), [](int32_t file) {
std::string cvar = StringHelper::Sprintf("%s%d", CVAR("BombArrows.Save"), file); std::string cvar = StringHelper::Sprintf("%s%d", CVAR("BombArrows.Save"), file);
CVarSetInteger(cvar.c_str(), CVarGetInteger(CVAR("BombArrows.Active"), 0)); CVarSetInteger(cvar.c_str(), CVarGetInteger(CVAR("BombArrows.Active"), 0));
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
}); });
COND_HOOK(OnLoadFile, CVarGetInteger(CVAR("BombArrows.Enabled"), 0), [](int32_t file) { COND_HOOK(OnLoadFile, CVarGetInteger(CVAR("BombArrows.Enabled"), 0), [](int32_t file) {
@ -39,13 +39,13 @@ static void OnConfigurationChanged() {
std::string cvarFrom = StringHelper::Sprintf("%s%d", CVAR("BombArrows.Save"), from); std::string cvarFrom = StringHelper::Sprintf("%s%d", CVAR("BombArrows.Save"), from);
std::string cvarTo = StringHelper::Sprintf("%s%d", CVAR("BombArrows.Save"), to); std::string cvarTo = StringHelper::Sprintf("%s%d", CVAR("BombArrows.Save"), to);
CVarSetInteger(cvarTo.c_str(), CVarGetInteger(cvarFrom.c_str(), 0)); CVarSetInteger(cvarTo.c_str(), CVarGetInteger(cvarFrom.c_str(), 0));
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
}); });
COND_HOOK(OnDeleteFile, CVarGetInteger(CVAR("BombArrows.Enabled"), 0), [](int32_t file) { COND_HOOK(OnDeleteFile, CVarGetInteger(CVAR("BombArrows.Enabled"), 0), [](int32_t file) {
std::string cvar = StringHelper::Sprintf("%s%d", CVAR("BombArrows.Save"), file); std::string cvar = StringHelper::Sprintf("%s%d", CVAR("BombArrows.Save"), file);
CVarSetInteger(cvar.c_str(), 0); CVarSetInteger(cvar.c_str(), 0);
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
}); });
COND_ID_HOOK(OnActorInit, ACTOR_EN_ARROW, CVarGetInteger(CVAR("BombArrows.Enabled"), 0), [](void* actorRef) { COND_ID_HOOK(OnActorInit, ACTOR_EN_ARROW, CVarGetInteger(CVAR("BombArrows.Enabled"), 0), [](void* actorRef) {

View file

@ -389,7 +389,7 @@ void AudioCollection::RemoveFromShufflePool(SequenceInfo* seqInfo) {
excludedSequences.insert(seqInfo); excludedSequences.insert(seqInfo);
includedSequences.erase(seqInfo); includedSequences.erase(seqInfo);
CVarSetInteger(cvarKey.c_str(), 1); CVarSetInteger(cvarKey.c_str(), 1);
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }
void AudioCollection::AddToShufflePool(SequenceInfo* seqInfo) { void AudioCollection::AddToShufflePool(SequenceInfo* seqInfo) {
@ -397,7 +397,7 @@ void AudioCollection::AddToShufflePool(SequenceInfo* seqInfo) {
includedSequences.insert(seqInfo); includedSequences.insert(seqInfo);
excludedSequences.erase(seqInfo); excludedSequences.erase(seqInfo);
CVarClear(cvarKey.c_str()); CVarClear(cvarKey.c_str());
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }
void AudioCollection::InitializeShufflePool() { void AudioCollection::InitializeShufflePool() {

View file

@ -204,7 +204,7 @@ void Draw_SfxTab(const std::string& tabId, SeqType type) {
auto currentBGM = func_800FA0B4(SEQ_PLAYER_BGM_MAIN); auto currentBGM = func_800FA0B4(SEQ_PLAYER_BGM_MAIN);
auto prevReplacement = AudioCollection::Instance->GetReplacementSequence(currentBGM); auto prevReplacement = AudioCollection::Instance->GetReplacementSequence(currentBGM);
ResetGroup(map, type); ResetGroup(map, type);
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
auto curReplacement = AudioCollection::Instance->GetReplacementSequence(currentBGM); auto curReplacement = AudioCollection::Instance->GetReplacementSequence(currentBGM);
if (type == SEQ_BGM_WORLD && prevReplacement != curReplacement) { if (type == SEQ_BGM_WORLD && prevReplacement != curReplacement) {
ReplayCurrentBGM(); ReplayCurrentBGM();
@ -215,7 +215,7 @@ void Draw_SfxTab(const std::string& tabId, SeqType type) {
auto currentBGM = func_800FA0B4(SEQ_PLAYER_BGM_MAIN); auto currentBGM = func_800FA0B4(SEQ_PLAYER_BGM_MAIN);
auto prevReplacement = AudioCollection::Instance->GetReplacementSequence(currentBGM); auto prevReplacement = AudioCollection::Instance->GetReplacementSequence(currentBGM);
RandomizeGroup(type); RandomizeGroup(type);
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
auto curReplacement = AudioCollection::Instance->GetReplacementSequence(currentBGM); auto curReplacement = AudioCollection::Instance->GetReplacementSequence(currentBGM);
if (type == SEQ_BGM_WORLD && prevReplacement != curReplacement) { if (type == SEQ_BGM_WORLD && prevReplacement != curReplacement) {
ReplayCurrentBGM(); ReplayCurrentBGM();
@ -226,7 +226,7 @@ void Draw_SfxTab(const std::string& tabId, SeqType type) {
auto currentBGM = func_800FA0B4(SEQ_PLAYER_BGM_MAIN); auto currentBGM = func_800FA0B4(SEQ_PLAYER_BGM_MAIN);
auto prevReplacement = AudioCollection::Instance->GetReplacementSequence(currentBGM); auto prevReplacement = AudioCollection::Instance->GetReplacementSequence(currentBGM);
LockGroup(map, type); LockGroup(map, type);
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
auto curReplacement = AudioCollection::Instance->GetReplacementSequence(currentBGM); auto curReplacement = AudioCollection::Instance->GetReplacementSequence(currentBGM);
if (type == SEQ_BGM_WORLD && prevReplacement != curReplacement) { if (type == SEQ_BGM_WORLD && prevReplacement != curReplacement) {
ReplayCurrentBGM(); ReplayCurrentBGM();
@ -237,7 +237,7 @@ void Draw_SfxTab(const std::string& tabId, SeqType type) {
auto currentBGM = func_800FA0B4(SEQ_PLAYER_BGM_MAIN); auto currentBGM = func_800FA0B4(SEQ_PLAYER_BGM_MAIN);
auto prevReplacement = AudioCollection::Instance->GetReplacementSequence(currentBGM); auto prevReplacement = AudioCollection::Instance->GetReplacementSequence(currentBGM);
UnlockGroup(map, type); UnlockGroup(map, type);
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
auto curReplacement = AudioCollection::Instance->GetReplacementSequence(currentBGM); auto curReplacement = AudioCollection::Instance->GetReplacementSequence(currentBGM);
if (type == SEQ_BGM_WORLD && prevReplacement != curReplacement) { if (type == SEQ_BGM_WORLD && prevReplacement != curReplacement) {
ReplayCurrentBGM(); ReplayCurrentBGM();
@ -282,7 +282,7 @@ void Draw_SfxTab(const std::string& tabId, SeqType type) {
if (ImGui::Selectable(seqData.label.c_str())) { if (ImGui::Selectable(seqData.label.c_str())) {
CVarSetInteger(cvarKey.c_str(), value); CVarSetInteger(cvarKey.c_str(), value);
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
UpdateCurrentBGM(defaultValue, type); UpdateCurrentBGM(defaultValue, type);
} }
@ -302,7 +302,7 @@ void Draw_SfxTab(const std::string& tabId, SeqType type) {
if (ImGui::Button(resetButton.c_str())) { if (ImGui::Button(resetButton.c_str())) {
CVarClear(cvarKey.c_str()); CVarClear(cvarKey.c_str());
CVarClear(cvarLockKey.c_str()); CVarClear(cvarLockKey.c_str());
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
UpdateCurrentBGM(defaultValue, seqData.category); UpdateCurrentBGM(defaultValue, seqData.category);
} }
UIWidgets::Tooltip("Reset to default"); UIWidgets::Tooltip("Reset to default");
@ -323,7 +323,7 @@ void Draw_SfxTab(const std::string& tabId, SeqType type) {
if (locked) { if (locked) {
CVarClear(cvarLockKey.c_str()); CVarClear(cvarLockKey.c_str());
} }
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
UpdateCurrentBGM(defaultValue, type); UpdateCurrentBGM(defaultValue, type);
} }
} }
@ -336,7 +336,7 @@ void Draw_SfxTab(const std::string& tabId, SeqType type) {
} else { } else {
CVarSetInteger(cvarLockKey.c_str(), 1); CVarSetInteger(cvarLockKey.c_str(), 1);
} }
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }
UIWidgets::Tooltip(locked ? "Sound locked" : "Sound unlocked"); UIWidgets::Tooltip(locked ? "Sound locked" : "Sound unlocked");
} }
@ -516,7 +516,7 @@ void AudioEditor::DrawElement() {
const std::string resetButton = "Reset##linkVoiceFreqMultiplier"; const std::string resetButton = "Reset##linkVoiceFreqMultiplier";
if (ImGui::Button(resetButton.c_str())) { if (ImGui::Button(resetButton.c_str())) {
CVarSetFloat(CVAR_AUDIO("LinkVoiceFreqMultiplier"), 1.0f); CVarSetFloat(CVAR_AUDIO("LinkVoiceFreqMultiplier"), 1.0f);
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }
ImGui::NewLine(); ImGui::NewLine();
@ -704,14 +704,14 @@ void AudioEditor_RandomizeAll() {
RandomizeGroup(type); RandomizeGroup(type);
} }
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
ReplayCurrentBGM(); ReplayCurrentBGM();
} }
void AudioEditor_RandomizeGroup(SeqType group) { void AudioEditor_RandomizeGroup(SeqType group) {
RandomizeGroup(group); RandomizeGroup(group);
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
ReplayCurrentBGM(); ReplayCurrentBGM();
} }
@ -720,14 +720,14 @@ void AudioEditor_ResetAll() {
ResetGroup(AudioCollection::Instance->GetAllSequences(), type); ResetGroup(AudioCollection::Instance->GetAllSequences(), type);
} }
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
ReplayCurrentBGM(); ReplayCurrentBGM();
} }
void AudioEditor_ResetGroup(SeqType group) { void AudioEditor_ResetGroup(SeqType group) {
ResetGroup(AudioCollection::Instance->GetAllSequences(), group); ResetGroup(AudioCollection::Instance->GetAllSequences(), group);
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
ReplayCurrentBGM(); ReplayCurrentBGM();
} }
@ -736,7 +736,7 @@ void AudioEditor_LockAll() {
LockGroup(AudioCollection::Instance->GetAllSequences(), type); LockGroup(AudioCollection::Instance->GetAllSequences(), type);
} }
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }
void AudioEditor_UnlockAll() { void AudioEditor_UnlockAll() {
@ -744,5 +744,5 @@ void AudioEditor_UnlockAll() {
UnlockGroup(AudioCollection::Instance->GetAllSequences(), type); UnlockGroup(AudioCollection::Instance->GetAllSequences(), type);
} }
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }

View file

@ -84,7 +84,7 @@ void SohInputEditorWindow::UpdateElement() {
} }
} }
Ship::Context::GetInstance()->GetWindow()->GetGui()->BlockImGuiGamepadNavigation(); Ship::Context::GetInstance()->GetWindow()->GetGui()->BlockGamepadNavigation();
} else { } else {
if (mGameInputBlockTimer != INT32_MAX) { if (mGameInputBlockTimer != INT32_MAX) {
mGameInputBlockTimer--; mGameInputBlockTimer--;
@ -95,13 +95,13 @@ void SohInputEditorWindow::UpdateElement() {
} }
} }
if (Ship::Context::GetInstance()->GetWindow()->GetGui()->ImGuiGamepadNavigationEnabled()) { if (Ship::Context::GetInstance()->GetWindow()->GetGui()->GamepadNavigationEnabled()) {
mMappingInputBlockTimer = ImGui::GetIO().Framerate / 3; mMappingInputBlockTimer = ImGui::GetIO().Framerate / 3;
} else { } else {
mMappingInputBlockTimer = INT32_MAX; mMappingInputBlockTimer = INT32_MAX;
} }
Ship::Context::GetInstance()->GetWindow()->GetGui()->UnblockImGuiGamepadNavigation(); Ship::Context::GetInstance()->GetWindow()->GetGui()->UnblockGamepadNavigation();
} }
} }
@ -1109,7 +1109,7 @@ void SohInputEditorWindow::DrawLEDSection(uint8_t port) {
color.b = colorVec.z * 255.0; color.b = colorVec.z * 255.0;
CVarSetColor24(CVAR_SETTING("LEDPort1Color"), color); CVarSetColor24(CVAR_SETTING("LEDPort1Color"), color);
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }
ImGui::SameLine(); ImGui::SameLine();
ImGui::Text("Custom Color"); ImGui::Text("Custom Color");
@ -1525,7 +1525,7 @@ void SohInputEditorWindow::DrawMapping(CustomButtonMap& mapping, float labelWidt
} }
if (ImGui::Selectable(i->second, i->first == currentButton)) { if (ImGui::Selectable(i->second, i->first == currentButton)) {
CVarSetInteger(mapping.cVarName, i->first); CVarSetInteger(mapping.cVarName, i->first);
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }
} }
ImGui::EndCombo(); ImGui::EndCombo();

View file

@ -130,7 +130,7 @@ Color_RGBA8 ColorRGBA8(uint8_t r, uint8_t g, uint8_t b, uint8_t a) {
# Silly Options # Silly Options
Lets get this one out of the way, probably the only thing that will be consistent between silly options is how they are rendered Lets get this one out of the way, probably the only thing that will be consistent between silly options is how they are rendered
on the ImGui tab. So when adding one just make sure it follows the same general pattern as the rest. Notably: on the ImGui tab. So when adding one just make sure it follows the same general pattern as the rest. Notably:
- Make sure to SaveConsoleVariablesOnNextTick(), forgetting this will not persist your changes - Make sure to SaveConsoleVariablesNextFrame(), forgetting this will not persist your changes
- Make sure reset properly resets the value - Make sure reset properly resets the value
- Depending on your use case you may or may not have to split the cvar into two values (cvar.Changed & cvar.Value) - Depending on your use case you may or may not have to split the cvar into two values (cvar.Changed & cvar.Value)
@ -1443,7 +1443,7 @@ void Draw_Placements(){
if (ImGui::Button("Reset##EnemyHealthBarWidth")) { if (ImGui::Button("Reset##EnemyHealthBarWidth")) {
CVarClear(CVAR_COSMETIC("HUD.EnemyHealthBar.Width.Value")); CVarClear(CVAR_COSMETIC("HUD.EnemyHealthBar.Width.Value"));
CVarClear(CVAR_COSMETIC("HUD.EnemyHealthBar.Width.Changed")); CVarClear(CVAR_COSMETIC("HUD.EnemyHealthBar.Width.Changed"));
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }
ImGui::NewLine(); ImGui::NewLine();
ImGui::EndTable(); ImGui::EndTable();
@ -1455,7 +1455,7 @@ void Reset_Option_Single(const char* Button_Title, const char* name) {
ImGui::SameLine(); ImGui::SameLine();
if (ImGui::Button(Button_Title)) { if (ImGui::Button(Button_Title)) {
CVarClear(name); CVarClear(name);
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }
} }
@ -1464,7 +1464,7 @@ void Reset_Option_Double(const char* Button_Title, const char* name) {
if (ImGui::Button(Button_Title)) { if (ImGui::Button(Button_Title)) {
CVarClear((std::string(name) + ".Value").c_str()); CVarClear((std::string(name) + ".Value").c_str());
CVarClear((std::string(name) + ".Changed").c_str()); CVarClear((std::string(name) + ".Changed").c_str());
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }
} }
@ -1472,7 +1472,7 @@ void DrawSillyTab() {
ImGui::BeginDisabled(CVarGetInteger(CVAR_SETTING("DisableChanges"), 0)); ImGui::BeginDisabled(CVarGetInteger(CVAR_SETTING("DisableChanges"), 0));
if (CVarGetInteger("gLetItSnow", 0)) { if (CVarGetInteger("gLetItSnow", 0)) {
if (UIWidgets::EnhancementCheckbox("Let It Snow", "gLetItSnow")) { if (UIWidgets::EnhancementCheckbox("Let It Snow", "gLetItSnow")) {
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }
} }
if (UIWidgets::EnhancementSliderFloat("Link Body Scale: %.3fx", "##Link_BodyScale", CVAR_COSMETIC("Link.BodyScale.Value"), 0.001f, 0.025f, "", 0.01f, true)) { if (UIWidgets::EnhancementSliderFloat("Link Body Scale: %.3fx", "##Link_BodyScale", CVAR_COSMETIC("Link.BodyScale.Value"), 0.001f, 0.025f, "", 0.01f, true)) {
@ -1482,7 +1482,7 @@ void DrawSillyTab() {
if (ImGui::Button("Reset##Link_BodyScale")) { if (ImGui::Button("Reset##Link_BodyScale")) {
CVarClear(CVAR_COSMETIC("Link.BodyScale.Value")); CVarClear(CVAR_COSMETIC("Link.BodyScale.Value"));
CVarClear(CVAR_COSMETIC("Link.BodyScale.Changed")); CVarClear(CVAR_COSMETIC("Link.BodyScale.Changed"));
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
if (gPlayState != nullptr) { if (gPlayState != nullptr) {
static Player* player = GET_PLAYER(gPlayState); static Player* player = GET_PLAYER(gPlayState);
player->actor.scale.x = 0.01f; player->actor.scale.x = 0.01f;
@ -1737,7 +1737,7 @@ void DrawCosmeticRow(CosmeticOption& cosmeticOption) {
CVarSetInteger((cosmeticOption.changedCvar), 1); CVarSetInteger((cosmeticOption.changedCvar), 1);
ApplySideEffects(cosmeticOption); ApplySideEffects(cosmeticOption);
ApplyOrResetCustomGfxPatches(); ApplyOrResetCustomGfxPatches();
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }
ImGui::SameLine(); ImGui::SameLine();
ImGui::Text("%s", cosmeticOption.label.c_str()); ImGui::Text("%s", cosmeticOption.label.c_str());
@ -1746,7 +1746,7 @@ void DrawCosmeticRow(CosmeticOption& cosmeticOption) {
if (ImGui::Button(("Random##" + cosmeticOption.label).c_str())) { if (ImGui::Button(("Random##" + cosmeticOption.label).c_str())) {
RandomizeColor(cosmeticOption); RandomizeColor(cosmeticOption);
ApplyOrResetCustomGfxPatches(); ApplyOrResetCustomGfxPatches();
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }
if (cosmeticOption.supportsRainbow) { if (cosmeticOption.supportsRainbow) {
ImGui::SameLine(); ImGui::SameLine();
@ -1756,21 +1756,21 @@ void DrawCosmeticRow(CosmeticOption& cosmeticOption) {
CVarSetInteger((cosmeticOption.changedCvar), 1); CVarSetInteger((cosmeticOption.changedCvar), 1);
ApplySideEffects(cosmeticOption); ApplySideEffects(cosmeticOption);
ApplyOrResetCustomGfxPatches(); ApplyOrResetCustomGfxPatches();
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }
} }
ImGui::SameLine(); ImGui::SameLine();
bool isLocked = (bool)CVarGetInteger((cosmeticOption.lockedCvar), 0); bool isLocked = (bool)CVarGetInteger((cosmeticOption.lockedCvar), 0);
if (ImGui::Checkbox(("Locked##" + cosmeticOption.label).c_str(), &isLocked)) { if (ImGui::Checkbox(("Locked##" + cosmeticOption.label).c_str(), &isLocked)) {
CVarSetInteger((cosmeticOption.lockedCvar), isLocked); CVarSetInteger((cosmeticOption.lockedCvar), isLocked);
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }
if (CVarGetInteger((cosmeticOption.changedCvar), 0)) { if (CVarGetInteger((cosmeticOption.changedCvar), 0)) {
ImGui::SameLine(); ImGui::SameLine();
if (ImGui::Button(("Reset##" + cosmeticOption.label).c_str())) { if (ImGui::Button(("Reset##" + cosmeticOption.label).c_str())) {
ResetColor(cosmeticOption); ResetColor(cosmeticOption);
ApplyOrResetCustomGfxPatches(); ApplyOrResetCustomGfxPatches();
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }
} }
} }
@ -1787,7 +1787,7 @@ void DrawCosmeticGroup(CosmeticGroup cosmeticGroup) {
} }
} }
ApplyOrResetCustomGfxPatches(); ApplyOrResetCustomGfxPatches();
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }
ImGui::SameLine(); ImGui::SameLine();
if (ImGui::Button(("Reset##" + label).c_str())) { if (ImGui::Button(("Reset##" + label).c_str())) {
@ -1797,7 +1797,7 @@ void DrawCosmeticGroup(CosmeticGroup cosmeticGroup) {
} }
} }
ApplyOrResetCustomGfxPatches(); ApplyOrResetCustomGfxPatches();
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }
for (auto& [id, cosmeticOption] : cosmeticOptions) { for (auto& [id, cosmeticOption] : cosmeticOptions) {
if (cosmeticOption.group == cosmeticGroup && (!cosmeticOption.advancedOption || CVarGetInteger(CVAR_COSMETIC("AdvancedMode"), 0))) { if (cosmeticOption.group == cosmeticGroup && (!cosmeticOption.advancedOption || CVarGetInteger(CVAR_COSMETIC("AdvancedMode"), 0))) {
@ -1827,7 +1827,7 @@ void CosmeticsEditorWindow::DrawElement() {
CVarSetInteger(cosmeticOption.lockedCvar, 1); CVarSetInteger(cosmeticOption.lockedCvar, 1);
} }
} }
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }
ImGui::SameLine(); ImGui::SameLine();
if (ImGui::Button("Unlock All Advanced", ImVec2(ImGui::GetContentRegionAvail().x, 30.0f))) { if (ImGui::Button("Unlock All Advanced", ImVec2(ImGui::GetContentRegionAvail().x, 30.0f))) {
@ -1836,7 +1836,7 @@ void CosmeticsEditorWindow::DrawElement() {
CVarSetInteger(cosmeticOption.lockedCvar, 0); CVarSetInteger(cosmeticOption.lockedCvar, 0);
} }
} }
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }
} }
UIWidgets::EnhancementCheckbox("Sync Rainbow colors", CVAR_COSMETIC("RainbowSync")); UIWidgets::EnhancementCheckbox("Sync Rainbow colors", CVAR_COSMETIC("RainbowSync"));
@ -1855,7 +1855,7 @@ void CosmeticsEditorWindow::DrawElement() {
} }
} }
ApplyOrResetCustomGfxPatches(); ApplyOrResetCustomGfxPatches();
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }
if (ImGui::Button("Lock All", ImVec2(ImGui::GetContentRegionAvail().x / 2, 30.0f))) { if (ImGui::Button("Lock All", ImVec2(ImGui::GetContentRegionAvail().x / 2, 30.0f))) {
@ -1864,7 +1864,7 @@ void CosmeticsEditorWindow::DrawElement() {
CVarSetInteger(cosmeticOption.lockedCvar, 1); CVarSetInteger(cosmeticOption.lockedCvar, 1);
} }
} }
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }
ImGui::SameLine(); ImGui::SameLine();
if (ImGui::Button("Unlock All", ImVec2(ImGui::GetContentRegionAvail().x, 30.0f))) { if (ImGui::Button("Unlock All", ImVec2(ImGui::GetContentRegionAvail().x, 30.0f))) {
@ -1873,7 +1873,7 @@ void CosmeticsEditorWindow::DrawElement() {
CVarSetInteger(cosmeticOption.lockedCvar, 0); CVarSetInteger(cosmeticOption.lockedCvar, 0);
} }
} }
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }
if (ImGui::Button("Rainbow All", ImVec2(ImGui::GetContentRegionAvail().x / 2, 30.0f))) { if (ImGui::Button("Rainbow All", ImVec2(ImGui::GetContentRegionAvail().x / 2, 30.0f))) {
@ -1888,7 +1888,7 @@ void CosmeticsEditorWindow::DrawElement() {
CVarSetInteger(cosmeticOption.rainbowCvar, 1); CVarSetInteger(cosmeticOption.rainbowCvar, 1);
} }
} }
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }
ImGui::SameLine(); ImGui::SameLine();
if (ImGui::Button("Un-Rainbow All", ImVec2(ImGui::GetContentRegionAvail().x, 30.0f))) { if (ImGui::Button("Un-Rainbow All", ImVec2(ImGui::GetContentRegionAvail().x, 30.0f))) {
@ -1903,7 +1903,7 @@ void CosmeticsEditorWindow::DrawElement() {
CVarSetInteger(cosmeticOption.rainbowCvar, 0); CVarSetInteger(cosmeticOption.rainbowCvar, 0);
} }
} }
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }
if (ImGui::BeginTabBar("CosmeticsContextTabBar", ImGuiTabBarFlags_NoCloseWithMiddleMouseButton)) { if (ImGui::BeginTabBar("CosmeticsContextTabBar", ImGuiTabBarFlags_NoCloseWithMiddleMouseButton)) {
@ -1928,7 +1928,7 @@ void CosmeticsEditorWindow::DrawElement() {
if (ImGui::Button("Reset##Trails_Duration")) { if (ImGui::Button("Reset##Trails_Duration")) {
CVarClear(CVAR_COSMETIC("Trails.Duration.Value")); CVarClear(CVAR_COSMETIC("Trails.Duration.Value"));
CVarClear(CVAR_COSMETIC("Trails.Duration.Changed")); CVarClear(CVAR_COSMETIC("Trails.Duration.Changed"));
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }
ImGui::EndTabItem(); ImGui::EndTabItem();
} }
@ -2000,7 +2000,7 @@ void CosmeticsEditorWindow::InitElement() {
cosmeticOption.currentColor.z = cvarColor.b / 255.0f; cosmeticOption.currentColor.z = cvarColor.b / 255.0f;
cosmeticOption.currentColor.w = cvarColor.a / 255.0f; cosmeticOption.currentColor.w = cvarColor.a / 255.0f;
} }
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
ApplyOrResetCustomGfxPatches(); ApplyOrResetCustomGfxPatches();
ApplyAuthenticGfxPatches(); ApplyAuthenticGfxPatches();
@ -2017,7 +2017,7 @@ void CosmeticsEditor_RandomizeAll() {
} }
} }
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
ApplyOrResetCustomGfxPatches(); ApplyOrResetCustomGfxPatches();
} }
@ -2030,7 +2030,7 @@ void CosmeticsEditor_RandomizeGroup(CosmeticGroup group) {
} }
} }
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
ApplyOrResetCustomGfxPatches(); ApplyOrResetCustomGfxPatches();
} }
@ -2041,7 +2041,7 @@ void CosmeticsEditor_ResetAll() {
} }
} }
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
ApplyOrResetCustomGfxPatches(); ApplyOrResetCustomGfxPatches();
} }
@ -2052,6 +2052,6 @@ void CosmeticsEditor_ResetGroup(CosmeticGroup group) {
} }
} }
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
ApplyOrResetCustomGfxPatches(); ApplyOrResetCustomGfxPatches();
} }

View file

@ -1596,5 +1596,5 @@ void DebugConsole_Init(void) {
{"group_name", Ship::ArgumentType::TEXT, true}, {"group_name", Ship::ArgumentType::TEXT, true},
}}); }});
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }

View file

@ -309,6 +309,8 @@ typedef enum {
// Vanilla condition: !EVENTCHKINF_PULLED_MASTER_SWORD_FROM_PEDESTAL // Vanilla condition: !EVENTCHKINF_PULLED_MASTER_SWORD_FROM_PEDESTAL
VB_PLAY_PULL_MASTER_SWORD_CS, VB_PLAY_PULL_MASTER_SWORD_CS,
VB_PLAY_DROP_FISH_FOR_JABU_CS, VB_PLAY_DROP_FISH_FOR_JABU_CS,
// Opt: *EnKz
VB_PLAY_MWEEP_CS,
// Vanilla condition: player->getItemId == GI_GAUNTLETS_SILVER // Vanilla condition: player->getItemId == GI_GAUNTLETS_SILVER
VB_PLAY_NABOORU_CAPTURED_CS, VB_PLAY_NABOORU_CAPTURED_CS,
VB_PLAY_ZELDAS_LULLABY_CS, VB_PLAY_ZELDAS_LULLABY_CS,

View file

@ -477,7 +477,7 @@ void GameInteractor::RawAction::SetCosmeticsColor(uint8_t cosmeticCategory, uint
break; break;
} }
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
ApplyOrResetCustomGfxPatches(); ApplyOrResetCustomGfxPatches();
} }

View file

@ -73,7 +73,7 @@ void DrawPresetSelector(PresetType presetTypeId) {
if (selectedPresetId != 0) { if (selectedPresetId != 0) {
applyPreset(selectedPresetDef.entries); applyPreset(selectedPresetDef.entries);
} }
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
if (presetTypeId == PRESET_TYPE_RANDOMIZER){ if (presetTypeId == PRESET_TYPE_RANDOMIZER){
Rando::Context::GetInstance()->GetSettings()->ReloadOptions(); Rando::Context::GetInstance()->GetSettings()->ReloadOptions();
} }

View file

@ -19,6 +19,6 @@ void RandoMain::GenerateRando(std::set<RandomizerCheck> excludedLocations, std::
Rando::Context::GetInstance()->SetSeedGenerated(GenerateRandomizer(excludedLocations, enabledTricks, seedString)); Rando::Context::GetInstance()->SetSeedGenerated(GenerateRandomizer(excludedLocations, enabledTricks, seedString));
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
Rando::Context::GetInstance()->SetPlandoLoaded(false); Rando::Context::GetInstance()->SetPlandoLoaded(false);
} }

View file

@ -208,7 +208,7 @@ bool Option::RenderCheckbox() {
if (CustomCheckbox(name.c_str(), &val, disabled, disabledGraphic)) { if (CustomCheckbox(name.c_str(), &val, disabled, disabledGraphic)) {
CVarSetInteger(cvarName.c_str(), val); CVarSetInteger(cvarName.c_str(), val);
changed = true; changed = true;
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }
if (!description.empty()) { if (!description.empty()) {
UIWidgets::InsertHelpHoverText(description.c_str()); UIWidgets::InsertHelpHoverText(description.c_str());
@ -228,7 +228,7 @@ bool Option::RenderTristateCheckbox() {
if (CustomCheckboxTristate(name.c_str(), &val, disabled, disabledGraphic)) { if (CustomCheckboxTristate(name.c_str(), &val, disabled, disabledGraphic)) {
CVarSetInteger(cvarName.c_str(), val); CVarSetInteger(cvarName.c_str(), val);
changed = true; changed = true;
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }
if (!description.empty()) { if (!description.empty()) {
UIWidgets::InsertHelpHoverText(description.c_str()); UIWidgets::InsertHelpHoverText(description.c_str());
@ -250,7 +250,7 @@ bool Option::RenderCombobox() {
selected = options.size(); selected = options.size();
CVarSetInteger(cvarName.c_str(), selected); CVarSetInteger(cvarName.c_str(), selected);
changed = true; changed = true;
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }
if (!description.empty()) { if (!description.empty()) {
UIWidgets::InsertHelpHoverText(description.c_str()); UIWidgets::InsertHelpHoverText(description.c_str());
@ -263,7 +263,7 @@ bool Option::RenderCombobox() {
CVarSetInteger(cvarName.c_str(), static_cast<int>(i)); CVarSetInteger(cvarName.c_str(), static_cast<int>(i));
changed = true; changed = true;
selected = i; selected = i;
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }
} }
} }
@ -328,7 +328,7 @@ bool Option::RenderSlider() {
if (changed) { if (changed) {
CVarSetInteger(cvarName.c_str(), val); CVarSetInteger(cvarName.c_str(), val);
SetFromCVar(); SetFromCVar();
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }
return changed; return changed;
} }

View file

@ -478,7 +478,8 @@ ItemObtainability Randomizer::GetItemObtainabilityFromRandomizerGet(RandomizerGe
(CUR_UPG_VALUE(UPG_STICKS) < 3 ? CAN_OBTAIN : CANT_OBTAIN_ALREADY_HAVE); (CUR_UPG_VALUE(UPG_STICKS) < 3 ? CAN_OBTAIN : CANT_OBTAIN_ALREADY_HAVE);
case RG_DEKU_STICK_1: case RG_DEKU_STICK_1:
case RG_BUY_DEKU_STICK_1: case RG_BUY_DEKU_STICK_1:
return CUR_UPG_VALUE(UPG_STICKS) ? CAN_OBTAIN : CANT_OBTAIN_NEED_UPGRADE; return CUR_UPG_VALUE(UPG_STICKS) || !OTRGlobals::Instance->gRandoContext->GetOption(RSK_SHUFFLE_DEKU_STICK_BAG).GetContextOptionIndex()
? CAN_OBTAIN : CANT_OBTAIN_NEED_UPGRADE;
case RG_PROGRESSIVE_NUT_UPGRADE: case RG_PROGRESSIVE_NUT_UPGRADE:
return infiniteUpgrades != RO_INF_UPGRADES_OFF ? return infiniteUpgrades != RO_INF_UPGRADES_OFF ?
(Flags_GetRandomizerInf(RAND_INF_HAS_INFINITE_NUT_UPGRADE) ? CANT_OBTAIN_ALREADY_HAVE : CAN_OBTAIN) : (Flags_GetRandomizerInf(RAND_INF_HAS_INFINITE_NUT_UPGRADE) ? CANT_OBTAIN_ALREADY_HAVE : CAN_OBTAIN) :
@ -487,7 +488,8 @@ ItemObtainability Randomizer::GetItemObtainabilityFromRandomizerGet(RandomizerGe
case RG_DEKU_NUTS_10: case RG_DEKU_NUTS_10:
case RG_BUY_DEKU_NUTS_5: case RG_BUY_DEKU_NUTS_5:
case RG_BUY_DEKU_NUTS_10: case RG_BUY_DEKU_NUTS_10:
return CUR_UPG_VALUE(UPG_NUTS) ? CAN_OBTAIN : CANT_OBTAIN_NEED_UPGRADE; return CUR_UPG_VALUE(UPG_NUTS) || !OTRGlobals::Instance->gRandoContext->GetOption(RSK_SHUFFLE_DEKU_NUT_BAG).GetContextOptionIndex()
? CAN_OBTAIN : CANT_OBTAIN_NEED_UPGRADE;
case RG_PROGRESSIVE_BOMB_BAG: case RG_PROGRESSIVE_BOMB_BAG:
return infiniteUpgrades != RO_INF_UPGRADES_OFF ? return infiniteUpgrades != RO_INF_UPGRADES_OFF ?
(Flags_GetRandomizerInf(RAND_INF_HAS_INFINITE_BOMB_BAG) ? CANT_OBTAIN_ALREADY_HAVE : CAN_OBTAIN) : (Flags_GetRandomizerInf(RAND_INF_HAS_INFINITE_BOMB_BAG) ? CANT_OBTAIN_ALREADY_HAVE : CAN_OBTAIN) :
@ -1339,7 +1341,7 @@ void GenerateRandomizerImgui(std::string seed = "") {
RandoMain::GenerateRando(excludedLocations, enabledTricks, seed); RandoMain::GenerateRando(excludedLocations, enabledTricks, seed);
CVarSetInteger(CVAR_GENERAL("RandoGenerating"), 0); CVarSetInteger(CVAR_GENERAL("RandoGenerating"), 0);
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
generated = 1; generated = 1;
} }
@ -1511,7 +1513,7 @@ void RandomizerSettingsWindow::DrawElement() {
excludedLocationString += ","; excludedLocationString += ",";
} }
CVarSetString(CVAR_RANDOMIZER_SETTING("ExcludedLocations"), excludedLocationString.c_str()); CVarSetString(CVAR_RANDOMIZER_SETTING("ExcludedLocations"), excludedLocationString.c_str());
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }
ImGui::SameLine(); ImGui::SameLine();
ImGui::Text("%s", Rando::StaticData::GetLocation(location)->GetShortName().c_str()); ImGui::Text("%s", Rando::StaticData::GetLocation(location)->GetShortName().c_str());
@ -1556,7 +1558,7 @@ void RandomizerSettingsWindow::DrawElement() {
} else { } else {
CVarSetString(CVAR_RANDOMIZER_SETTING("ExcludedLocations"), excludedLocationString.c_str()); CVarSetString(CVAR_RANDOMIZER_SETTING("ExcludedLocations"), excludedLocationString.c_str());
} }
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }
ImGui::SameLine(); ImGui::SameLine();
ImGui::Text("%s", Rando::StaticData::GetLocation(location)->GetShortName().c_str()); ImGui::Text("%s", Rando::StaticData::GetLocation(location)->GetShortName().c_str());
@ -1726,7 +1728,7 @@ void RandomizerSettingsWindow::DrawElement() {
enabledTrickString += ","; enabledTrickString += ",";
} }
CVarClear(CVAR_RANDOMIZER_SETTING("EnabledTricks")); CVarClear(CVAR_RANDOMIZER_SETTING("EnabledTricks"));
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }
ImGui::SameLine(); ImGui::SameLine();
if (ImGui::Button("Enable All")) { if (ImGui::Button("Enable All")) {
@ -1741,7 +1743,7 @@ void RandomizerSettingsWindow::DrawElement() {
enabledTrickString += ","; enabledTrickString += ",";
} }
CVarSetString(CVAR_RANDOMIZER_SETTING("EnabledTricks"), enabledTrickString.c_str()); CVarSetString(CVAR_RANDOMIZER_SETTING("EnabledTricks"), enabledTrickString.c_str());
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }
} }
if (ImGui::BeginTable("trickTags", showTag.size(), ImGuiTableFlags_Resizable | ImGuiTableFlags_NoSavedSettings | ImGuiTableFlags_Borders)) { if (ImGui::BeginTable("trickTags", showTag.size(), ImGuiTableFlags_Resizable | ImGuiTableFlags_NoSavedSettings | ImGuiTableFlags_Borders)) {
@ -1796,7 +1798,7 @@ void RandomizerSettingsWindow::DrawElement() {
enabledTrickString += ","; enabledTrickString += ",";
} }
CVarSetString(CVAR_RANDOMIZER_SETTING("EnabledTricks"), enabledTrickString.c_str()); CVarSetString(CVAR_RANDOMIZER_SETTING("EnabledTricks"), enabledTrickString.c_str());
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }
ImGui::BeginChild("ChildTricksDisabled", ImVec2(0, -8), false, ImGuiWindowFlags_HorizontalScrollbar); ImGui::BeginChild("ChildTricksDisabled", ImVec2(0, -8), false, ImGuiWindowFlags_HorizontalScrollbar);
@ -1831,7 +1833,7 @@ void RandomizerSettingsWindow::DrawElement() {
enabledTrickString += ","; enabledTrickString += ",";
} }
CVarSetString(CVAR_RANDOMIZER_SETTING("EnabledTricks"), enabledTrickString.c_str()); CVarSetString(CVAR_RANDOMIZER_SETTING("EnabledTricks"), enabledTrickString.c_str());
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }
Rando::Tricks::DrawTagChips(option.GetTags()); Rando::Tricks::DrawTagChips(option.GetTags());
ImGui::SameLine(); ImGui::SameLine();
@ -1887,7 +1889,7 @@ void RandomizerSettingsWindow::DrawElement() {
} else { } else {
CVarSetString(CVAR_RANDOMIZER_SETTING("EnabledTricks"), enabledTrickString.c_str()); CVarSetString(CVAR_RANDOMIZER_SETTING("EnabledTricks"), enabledTrickString.c_str());
} }
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }
ImGui::BeginChild("ChildTricksEnabled", ImVec2(0, -8), false, ImGuiWindowFlags_HorizontalScrollbar); ImGui::BeginChild("ChildTricksEnabled", ImVec2(0, -8), false, ImGuiWindowFlags_HorizontalScrollbar);
@ -1926,7 +1928,7 @@ void RandomizerSettingsWindow::DrawElement() {
} else { } else {
CVarSetString(CVAR_RANDOMIZER_SETTING("EnabledTricks"), enabledTrickString.c_str()); CVarSetString(CVAR_RANDOMIZER_SETTING("EnabledTricks"), enabledTrickString.c_str());
} }
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }
Rando::Tricks::DrawTagChips(option.GetTags()); Rando::Tricks::DrawTagChips(option.GetTags());
ImGui::SameLine(); ImGui::SameLine();

View file

@ -1376,7 +1376,7 @@ void ItemTrackerSettingsWindow::DrawElement() {
CVarSetFloat(CVAR_TRACKER_ITEM("BgColorG"), ChromaKeyBackground.y); CVarSetFloat(CVAR_TRACKER_ITEM("BgColorG"), ChromaKeyBackground.y);
CVarSetFloat(CVAR_TRACKER_ITEM("BgColorB"), ChromaKeyBackground.z); CVarSetFloat(CVAR_TRACKER_ITEM("BgColorB"), ChromaKeyBackground.z);
CVarSetFloat(CVAR_TRACKER_ITEM("BgColorA"), ChromaKeyBackground.w); CVarSetFloat(CVAR_TRACKER_ITEM("BgColorA"), ChromaKeyBackground.w);
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }
ImGui::PopItemWidth(); ImGui::PopItemWidth();

View file

@ -35,7 +35,7 @@ extern SaveContext gSaveContext;
extern PlayState* gPlayState; extern PlayState* gPlayState;
extern int32_t D_8011D3AC; extern int32_t D_8011D3AC;
extern void func_808ADEF0(BgSpot03Taki* bgSpot03Taki, PlayState* play); extern void BgSpot03Taki_HandleWaterfallState(BgSpot03Taki* bgSpot03Taki, PlayState* play);
extern void BgSpot03Taki_ApplyOpeningAlpha(BgSpot03Taki* bgSpot03Taki, s32 bufferIndex); extern void BgSpot03Taki_ApplyOpeningAlpha(BgSpot03Taki* bgSpot03Taki, s32 bufferIndex);
extern void func_80AF36EC(EnRu2* enRu2, PlayState* play); extern void func_80AF36EC(EnRu2* enRu2, PlayState* play);
@ -212,6 +212,7 @@ void TimeSaverOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_li
s16* csId = va_arg(args, s16*); s16* csId = va_arg(args, s16*);
BgSpot03Taki* taki = NULL; BgSpot03Taki* taki = NULL;
switch (*csId) { switch (*csId) {
case 3150:
case 4180: case 4180:
case 4100: case 4100:
*should = false; *should = false;
@ -306,6 +307,7 @@ void TimeSaverOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_li
case ACTOR_BG_YDAN_MARUTA: case ACTOR_BG_YDAN_MARUTA:
case ACTOR_BG_SPOT18_SHUTTER: case ACTOR_BG_SPOT18_SHUTTER:
case ACTOR_BG_SPOT05_SOKO: case ACTOR_BG_SPOT05_SOKO:
case ACTOR_BG_SPOT06_OBJECTS:
case ACTOR_BG_SPOT18_BASKET: case ACTOR_BG_SPOT18_BASKET:
case ACTOR_BG_HIDAN_CURTAIN: case ACTOR_BG_HIDAN_CURTAIN:
case ACTOR_BG_MORI_HINERI: case ACTOR_BG_MORI_HINERI:
@ -404,6 +406,14 @@ void TimeSaverOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_li
} }
break; break;
} }
case VB_PLAY_MWEEP_CS: {
if (CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Story"), 0)) {
*should = false;
Inventory_ReplaceItem(gPlayState, ITEM_LETTER_RUTO, ITEM_BOTTLE);
Flags_SetEventChkInf(EVENTCHKINF_KING_ZORA_MOVED);
}
break;
}
case VB_PLAY_EYEDROP_CREATION_ANIM: case VB_PLAY_EYEDROP_CREATION_ANIM:
case VB_PLAY_EYEDROPS_CS: case VB_PLAY_EYEDROPS_CS:
case VB_PLAY_DROP_FISH_FOR_JABU_CS: case VB_PLAY_DROP_FISH_FOR_JABU_CS:
@ -814,7 +824,7 @@ void TimeSaverOnActorInitHandler(void* actorRef) {
} }
BgSpot03Taki* bgSpot03 = static_cast<BgSpot03Taki*>(innerActorRef); BgSpot03Taki* bgSpot03 = static_cast<BgSpot03Taki*>(innerActorRef);
if (bgSpot03->actionFunc == func_808ADEF0) { if (bgSpot03->actionFunc == BgSpot03Taki_HandleWaterfallState) {
bgSpot03->actionFunc = BgSpot03Taki_KeepOpen; bgSpot03->actionFunc = BgSpot03Taki_KeepOpen;
bgSpot03->state = WATERFALL_OPENED; bgSpot03->state = WATERFALL_OPENED;
bgSpot03->openingAlpha = 0.0f; bgSpot03->openingAlpha = 0.0f;

View file

@ -774,13 +774,13 @@ void TimeSplitsDrawOptionsMenu() {
color.b = windowColor.z * 255.0; color.b = windowColor.z * 255.0;
color.a = windowColor.w * 255.0; color.a = windowColor.w * 255.0;
CVarSetColor("TimeSplits.WindowColor", color); CVarSetColor("TimeSplits.WindowColor", color);
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }
ImGui::SameLine(); ImGui::SameLine();
if (ImGui::Button("Reset")) { if (ImGui::Button("Reset")) {
windowColor = { 0.0f, 0.0f, 0.0f, 1.0f }; windowColor = { 0.0f, 0.0f, 0.0f, 1.0f };
CVarSetColor("TimeSplits.WindowColor", {0, 0, 0, 1}); CVarSetColor("TimeSplits.WindowColor", {0, 0, 0, 1});
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }
if (UIWidgets::PaddedEnhancementSliderFloat("Window Size: %.1fx", "##windowSize", if (UIWidgets::PaddedEnhancementSliderFloat("Window Size: %.1fx", "##windowSize",

View file

@ -1045,16 +1045,16 @@ void InitTTSBank() {
initData->ResourceVersion = 0; initData->ResourceVersion = 0;
sceneMap = std::static_pointer_cast<Ship::Json>( sceneMap = std::static_pointer_cast<Ship::Json>(
Ship::Context::GetInstance()->GetResourceManager()->LoadResource("accessibility/texts/scenes" + languageSuffix, true, initData))->Data; Ship::Context::GetInstance()->GetResourceManager()->LoadResource("accessibility/texts/scenes" + languageSuffix, 0, true, initData))->Data;
miscMap = std::static_pointer_cast<Ship::Json>( miscMap = std::static_pointer_cast<Ship::Json>(
Ship::Context::GetInstance()->GetResourceManager()->LoadResource("accessibility/texts/misc" + languageSuffix, true, initData))->Data; Ship::Context::GetInstance()->GetResourceManager()->LoadResource("accessibility/texts/misc" + languageSuffix, 0, true, initData))->Data;
kaleidoMap = std::static_pointer_cast<Ship::Json>( kaleidoMap = std::static_pointer_cast<Ship::Json>(
Ship::Context::GetInstance()->GetResourceManager()->LoadResource("accessibility/texts/kaleidoscope" + languageSuffix, true, initData))->Data; Ship::Context::GetInstance()->GetResourceManager()->LoadResource("accessibility/texts/kaleidoscope" + languageSuffix, 0, true, initData))->Data;
fileChooseMap = std::static_pointer_cast<Ship::Json>( fileChooseMap = std::static_pointer_cast<Ship::Json>(
Ship::Context::GetInstance()->GetResourceManager()->LoadResource("accessibility/texts/filechoose" + languageSuffix, true, initData))->Data; Ship::Context::GetInstance()->GetResourceManager()->LoadResource("accessibility/texts/filechoose" + languageSuffix, 0, true, initData))->Data;
} }
void RegisterOnSetGameLanguageHook() { void RegisterOnSetGameLanguageHook() {

View file

@ -788,14 +788,14 @@ void CrowdControl::DrawMenu() {
ImGui::Text("Host & Port"); ImGui::Text("Host & Port");
if (UIWidgets::InputString("##Host", &host)) { if (UIWidgets::InputString("##Host", &host)) {
CVarSetString(CVAR_REMOTE_CROWD_CONTROL("Host"), host.c_str()); CVarSetString(CVAR_REMOTE_CROWD_CONTROL("Host"), host.c_str());
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }
ImGui::SameLine(); ImGui::SameLine();
ImGui::PushItemWidth(ImGui::GetFontSize() * 5); ImGui::PushItemWidth(ImGui::GetFontSize() * 5);
if (ImGui::InputScalar("##Port", ImGuiDataType_U16, &port)) { if (ImGui::InputScalar("##Port", ImGuiDataType_U16, &port)) {
CVarSetInteger(CVAR_REMOTE_CROWD_CONTROL("Port"), port); CVarSetInteger(CVAR_REMOTE_CROWD_CONTROL("Port"), port);
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }
ImGui::PopItemWidth(); ImGui::PopItemWidth();
ImGui::EndDisabled(); ImGui::EndDisabled();
@ -807,11 +807,11 @@ void CrowdControl::DrawMenu() {
if (ImGui::Button(buttonLabel, ImVec2(-1.0f, 0.0f))) { if (ImGui::Button(buttonLabel, ImVec2(-1.0f, 0.0f))) {
if (isEnabled) { if (isEnabled) {
CVarClear(CVAR_REMOTE_CROWD_CONTROL("Enabled")); CVarClear(CVAR_REMOTE_CROWD_CONTROL("Enabled"));
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
Disable(); Disable();
} else { } else {
CVarSetInteger(CVAR_REMOTE_CROWD_CONTROL("Enabled"), 1); CVarSetInteger(CVAR_REMOTE_CROWD_CONTROL("Enabled"), 1);
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
Enable(); Enable();
} }
} }

View file

@ -514,14 +514,14 @@ void Sail::DrawMenu() {
ImGui::Text("Host & Port"); ImGui::Text("Host & Port");
if (UIWidgets::InputString("##Host", &host)) { if (UIWidgets::InputString("##Host", &host)) {
CVarSetString(CVAR_REMOTE_SAIL("Host"), host.c_str()); CVarSetString(CVAR_REMOTE_SAIL("Host"), host.c_str());
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }
ImGui::SameLine(); ImGui::SameLine();
ImGui::PushItemWidth(ImGui::GetFontSize() * 5); ImGui::PushItemWidth(ImGui::GetFontSize() * 5);
if (ImGui::InputScalar("##Port", ImGuiDataType_U16, &port)) { if (ImGui::InputScalar("##Port", ImGuiDataType_U16, &port)) {
CVarSetInteger(CVAR_REMOTE_SAIL("Port"), port); CVarSetInteger(CVAR_REMOTE_SAIL("Port"), port);
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }
ImGui::PopItemWidth(); ImGui::PopItemWidth();
ImGui::EndDisabled(); ImGui::EndDisabled();
@ -533,11 +533,11 @@ void Sail::DrawMenu() {
if (ImGui::Button(buttonLabel, ImVec2(-1.0f, 0.0f))) { if (ImGui::Button(buttonLabel, ImVec2(-1.0f, 0.0f))) {
if (isEnabled) { if (isEnabled) {
CVarClear(CVAR_REMOTE_SAIL("Enabled")); CVarClear(CVAR_REMOTE_SAIL("Enabled"));
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
Disable(); Disable();
} else { } else {
CVarSetInteger(CVAR_REMOTE_SAIL("Enabled"), 1); CVarSetInteger(CVAR_REMOTE_SAIL("Enabled"), 1);
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
Enable(); Enable();
} }
} }

View file

@ -349,8 +349,8 @@ OTRGlobals::OTRGlobals() {
context->InitWindow({ sohInputEditorWindow }); context->InitWindow({ sohInputEditorWindow });
auto overlay = context->GetInstance()->GetWindow()->GetGui()->GetGameOverlay(); auto overlay = context->GetInstance()->GetWindow()->GetGui()->GetGameOverlay();
overlay->LoadFont("Press Start 2P", "fonts/PressStart2P-Regular.ttf", 12.0f); overlay->LoadFont("Press Start 2P", 12.0f, "fonts/PressStart2P-Regular.ttf");
overlay->LoadFont("Fipps", "fonts/Fipps-Regular.otf", 32.0f); overlay->LoadFont("Fipps", 32.0f, "fonts/Fipps-Regular.otf");
overlay->SetCurrentFont(CVarGetString(CVAR_GAME_OVERLAY_FONT, "Press Start 2P")); overlay->SetCurrentFont(CVarGetString(CVAR_GAME_OVERLAY_FONT, "Press Start 2P"));
context->InitAudio({ .SampleRate = 44100, .SampleLength = 1024, .DesiredBuffered = 2480 }); context->InitAudio({ .SampleRate = 44100, .SampleLength = 1024, .DesiredBuffered = 2480 });
@ -2461,7 +2461,7 @@ void SoH_ProcessDroppedFiles(std::string filePath) {
gui->GetGuiWindow("Stats")->Hide(); gui->GetGuiWindow("Stats")->Hide();
std::dynamic_pointer_cast<Ship::ConsoleWindow>(Ship::Context::GetInstance()->GetWindow()->GetGui()->GetGuiWindow("Console"))->ClearBindings(); std::dynamic_pointer_cast<Ship::ConsoleWindow>(Ship::Context::GetInstance()->GetWindow()->GetGui()->GetGuiWindow("Console"))->ClearBindings();
gui->SaveConsoleVariablesOnNextTick(); gui->SaveConsoleVariablesNextFrame();
uint32_t finalHash = boost::hash_32<std::string>{}(configJson.dump()); uint32_t finalHash = boost::hash_32<std::string>{}(configJson.dump());
gui->GetGameOverlay()->TextDrawNotification(30.0f, true, "Configuration Loaded. Hash: %d", finalHash); gui->GetGameOverlay()->TextDrawNotification(30.0f, true, "Configuration Loaded. Hash: %d", finalHash);

View file

@ -254,7 +254,7 @@ void DrawSettingsMenu() {
}; };
ImGui::Text("Audio API (Needs reload)"); ImGui::Text("Audio API (Needs reload)");
auto currentAudioBackend = Ship::Context::GetInstance()->GetAudio()->GetAudioBackend(); auto currentAudioBackend = Ship::Context::GetInstance()->GetAudio()->GetCurrentAudioBackend();
if (Ship::Context::GetInstance()->GetAudio()->GetAvailableAudioBackends()->size() <= 1) { if (Ship::Context::GetInstance()->GetAudio()->GetAvailableAudioBackends()->size() <= 1) {
UIWidgets::DisableComponent(ImGui::GetStyle().Alpha * 0.5f); UIWidgets::DisableComponent(ImGui::GetStyle().Alpha * 0.5f);
@ -263,7 +263,7 @@ void DrawSettingsMenu() {
for (uint8_t i = 0; i < Ship::Context::GetInstance()->GetAudio()->GetAvailableAudioBackends()->size(); i++) { for (uint8_t i = 0; i < Ship::Context::GetInstance()->GetAudio()->GetAvailableAudioBackends()->size(); i++) {
auto backend = Ship::Context::GetInstance()->GetAudio()->GetAvailableAudioBackends()->data()[i]; auto backend = Ship::Context::GetInstance()->GetAudio()->GetAvailableAudioBackends()->data()[i];
if (ImGui::Selectable(audioBackendNames[backend], backend == currentAudioBackend)) { if (ImGui::Selectable(audioBackendNames[backend], backend == currentAudioBackend)) {
Ship::Context::GetInstance()->GetAudio()->SetAudioBackend(backend); Ship::Context::GetInstance()->GetAudio()->SetCurrentAudioBackend(backend);
} }
} }
ImGui::EndCombo(); ImGui::EndCombo();
@ -435,7 +435,7 @@ void DrawSettingsMenu() {
currentFps = 60; currentFps = 60;
} }
CVarSetInteger(CVAR_SETTING("InterpolationFPS"), currentFps); CVarSetInteger(CVAR_SETTING("InterpolationFPS"), currentFps);
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
#else #else
bool matchingRefreshRate = bool matchingRefreshRate =
CVarGetInteger(CVAR_SETTING("MatchRefreshRate"), 0) && Ship::Context::GetInstance()->GetWindow()->GetWindowBackend() != Ship::WindowBackend::FAST3D_DXGI_DX11; CVarGetInteger(CVAR_SETTING("MatchRefreshRate"), 0) && Ship::Context::GetInstance()->GetWindow()->GetWindowBackend() != Ship::WindowBackend::FAST3D_DXGI_DX11;
@ -464,7 +464,7 @@ void DrawSettingsMenu() {
int hz = Ship::Context::GetInstance()->GetWindow()->GetCurrentRefreshRate(); int hz = Ship::Context::GetInstance()->GetWindow()->GetCurrentRefreshRate();
if (hz >= 20 && hz <= 360) { if (hz >= 20 && hz <= 360) {
CVarSetInteger(CVAR_SETTING("InterpolationFPS"), hz); CVarSetInteger(CVAR_SETTING("InterpolationFPS"), hz);
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }
} }
} else { } else {
@ -672,7 +672,7 @@ void DrawEnhancementsMenu() {
CVarSetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipMiscInteractions"), newValue); CVarSetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipMiscInteractions"), newValue);
CVarSetInteger(CVAR_ENHANCEMENT("TimeSavers.DisableTitleCard"), newValue); CVarSetInteger(CVAR_ENHANCEMENT("TimeSavers.DisableTitleCard"), newValue);
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }
g->CurrentItemFlags = backup_item_flags; g->CurrentItemFlags = backup_item_flags;
UIWidgets::PaddedEnhancementCheckbox("Skip Intro", CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Intro"), false, false, false, "", UIWidgets::CheckboxGraphics::Cross, IS_RANDO); UIWidgets::PaddedEnhancementCheckbox("Skip Intro", CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Intro"), false, false, false, "", UIWidgets::CheckboxGraphics::Cross, IS_RANDO);
@ -913,7 +913,7 @@ void DrawEnhancementsMenu() {
std::for_each(itemCountMessageCVars, itemCountMessageCVars + numOptions, std::for_each(itemCountMessageCVars, itemCountMessageCVars + numOptions,
[newValue](const char* cvar) { CVarSetInteger(cvar, newValue); }); [newValue](const char* cvar) { CVarSetInteger(cvar, newValue); });
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }
g->CurrentItemFlags = backup_item_flags; g->CurrentItemFlags = backup_item_flags;
@ -1849,7 +1849,7 @@ void DrawCheatsMenu() {
if (UIWidgets::PaddedEnhancementCheckbox("I promise I have read the warning", CVAR_CHEAT("SaveStatePromise"), true, if (UIWidgets::PaddedEnhancementCheckbox("I promise I have read the warning", CVAR_CHEAT("SaveStatePromise"), true,
false)) { false)) {
CVarSetInteger(CVAR_CHEAT("SaveStatesEnabled"), 0); CVarSetInteger(CVAR_CHEAT("SaveStatesEnabled"), 0);
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }
if (CVarGetInteger(CVAR_CHEAT("SaveStatePromise"), 0) == 1) { if (CVarGetInteger(CVAR_CHEAT("SaveStatePromise"), 0) == 1) {
UIWidgets::PaddedEnhancementCheckbox("I understand, enable save states", CVAR_CHEAT("SaveStatesEnabled"), true, UIWidgets::PaddedEnhancementCheckbox("I understand, enable save states", CVAR_CHEAT("SaveStatesEnabled"), true,
@ -1944,7 +1944,7 @@ void DrawCheatsMenu() {
CVarSetInteger(CVAR_CHEAT("BetaQuestWorld"), betaQuestWorld); CVarSetInteger(CVAR_CHEAT("BetaQuestWorld"), betaQuestWorld);
std::reinterpret_pointer_cast<Ship::ConsoleWindow>(Ship::Context::GetInstance()->GetWindow()->GetGui()->GetGuiWindow("Console"))->Dispatch("reset"); std::reinterpret_pointer_cast<Ship::ConsoleWindow>(Ship::Context::GetInstance()->GetWindow()->GetGui()->GetGuiWindow("Console"))->Dispatch("reset");
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }
if (!isBetaQuestEnabled) { if (!isBetaQuestEnabled) {

View file

@ -238,7 +238,7 @@ namespace UIWidgets {
bool val = (bool)CVarGetInteger(cvarName, defaultValue); bool val = (bool)CVarGetInteger(cvarName, defaultValue);
if (CustomCheckbox(text, &val, disabled, disabledGraphic)) { if (CustomCheckbox(text, &val, disabled, disabledGraphic)) {
CVarSetInteger(cvarName, val); CVarSetInteger(cvarName, val);
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
changed = true; changed = true;
} }
@ -257,7 +257,7 @@ namespace UIWidgets {
int val = CVarGetInteger(cvarName, defaultValue); int val = CVarGetInteger(cvarName, defaultValue);
if (CustomCheckboxTristate(text, &val, disabled, disabledGraphic)) { if (CustomCheckboxTristate(text, &val, disabled, disabledGraphic)) {
CVarSetInteger(cvarName, val); CVarSetInteger(cvarName, val);
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
changed = true; changed = true;
} }
@ -297,7 +297,7 @@ namespace UIWidgets {
CVarSetInteger(cvarName, i); CVarSetInteger(cvarName, i);
selected = i; selected = i;
changed = true; changed = true;
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }
} }
} }
@ -310,7 +310,7 @@ namespace UIWidgets {
if (disabledValue >= 0 && selected != disabledValue) { if (disabledValue >= 0 && selected != disabledValue) {
CVarSetInteger(cvarName, disabledValue); CVarSetInteger(cvarName, disabledValue);
changed = true; changed = true;
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} }
} }
@ -400,7 +400,7 @@ namespace UIWidgets {
if (changed && (oldVal != val)) { if (changed && (oldVal != val)) {
CVarSetInteger(cvarName, val); CVarSetInteger(cvarName, val);
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} else { } else {
changed = false; changed = false;
} }
@ -501,7 +501,7 @@ namespace UIWidgets {
ss << std::setprecision(ticks + 1) << std::setiosflags(std::ios_base::fixed) << val; ss << std::setprecision(ticks + 1) << std::setiosflags(std::ios_base::fixed) << val;
val = std::stof(ss.str()); val = std::stof(ss.str());
CVarSetFloat(cvarName, val); CVarSetFloat(cvarName, val);
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
} else { } else {
changed = false; changed = false;
} }
@ -550,7 +550,7 @@ namespace UIWidgets {
int val = CVarGetInteger(cvarName, 0); int val = CVarGetInteger(cvarName, 0);
if (ImGui::RadioButton(make_invisible.c_str(), id == val)) { if (ImGui::RadioButton(make_invisible.c_str(), id == val)) {
CVarSetInteger(cvarName, id); CVarSetInteger(cvarName, id);
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
ret = true; ret = true;
} }
ImGui::SameLine(); ImGui::SameLine();
@ -577,7 +577,7 @@ namespace UIWidgets {
CVarSetColor(cvarName, colorsRGBA); CVarSetColor(cvarName, colorsRGBA);
CVarSetInteger(Cvar_RBM.c_str(), 0); //On click disable rainbow mode. CVarSetInteger(Cvar_RBM.c_str(), 0); //On click disable rainbow mode.
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
changed = true; changed = true;
} }
Tooltip("Revert colors to the game's original colors (GameCube version)\nOverwrites previously chosen color"); Tooltip("Revert colors to the game's original colors (GameCube version)\nOverwrites previously chosen color");
@ -602,7 +602,7 @@ namespace UIWidgets {
NewColors.b = fmin(fmax(colors->z * 255, 0), 255); NewColors.b = fmin(fmax(colors->z * 255, 0), 255);
CVarSetColor(cvarName, NewColors); CVarSetColor(cvarName, NewColors);
CVarSetInteger(Cvar_RBM.c_str(), 0); // On click disable rainbow mode. CVarSetInteger(Cvar_RBM.c_str(), 0); // On click disable rainbow mode.
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
changed = true; changed = true;
} }
Tooltip("Chooses a random color\nOverwrites previously chosen color"); Tooltip("Chooses a random color\nOverwrites previously chosen color");
@ -663,7 +663,7 @@ namespace UIWidgets {
colors.a = 255.0; colors.a = 255.0;
CVarSetColor(cvarName, colors); CVarSetColor(cvarName, colors);
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
changed = true; changed = true;
} }
} }
@ -679,7 +679,7 @@ namespace UIWidgets {
colors.a = ColorRGBA.w * 255.0; colors.a = ColorRGBA.w * 255.0;
CVarSetColor(cvarName, colors); CVarSetColor(cvarName, colors);
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesOnNextTick(); Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
changed = true; changed = true;
} }
} }

View file

@ -12,6 +12,7 @@
#include "soh/Enhancements/enhancementTypes.h" #include "soh/Enhancements/enhancementTypes.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h" #include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
#include "soh/OTRGlobals.h" #include "soh/OTRGlobals.h"
#include "soh/ResourceManagerHelpers.h"
#include "soh/SaveManager.h" #include "soh/SaveManager.h"
#include "soh/framebuffer_effects.h" #include "soh/framebuffer_effects.h"
@ -1336,15 +1337,16 @@ void Play_Draw(PlayState* play) {
// Track render size when paused and that a copy was performed // Track render size when paused and that a copy was performed
static u32 lastPauseWidth; static u32 lastPauseWidth;
static u32 lastPauseHeight; static u32 lastPauseHeight;
static u8 hasCapturedPauseBuffer; static bool lastAltAssets;
u8 recapturePauseBuffer = false; static bool hasCapturedPauseBuffer;
bool recapturePauseBuffer = false;
// If the size has changed or dropped frames leading to the buffer not being copied, // If the size has changed, alt assets toggled, or dropped frames leading to the buffer not being copied,
// set the prerender state back to setup to copy a new frame. // set the prerender state back to setup to copy a new frame.
// This requires not rendering kaleido during this copy to avoid kaleido being copied // This requires not rendering kaleido during this copy to avoid kaleido itself being copied too.
if ((R_PAUSE_MENU_MODE == 2 || R_PAUSE_MENU_MODE == 3) && if ((R_PAUSE_MENU_MODE == 2 || R_PAUSE_MENU_MODE == 3) &&
(lastPauseWidth != OTRGetGameRenderWidth() || lastPauseHeight != OTRGetGameRenderHeight() || (lastPauseWidth != OTRGetGameRenderWidth() || lastPauseHeight != OTRGetGameRenderHeight() ||
!hasCapturedPauseBuffer)) { lastAltAssets != ResourceMgr_IsAltAssetsEnabled() || !hasCapturedPauseBuffer)) {
R_PAUSE_MENU_MODE = 1; R_PAUSE_MENU_MODE = 1;
recapturePauseBuffer = true; recapturePauseBuffer = true;
} }
@ -1603,6 +1605,7 @@ void Play_Draw(PlayState* play) {
// #region SOH [Port] Custom handling for pause prerender background capture // #region SOH [Port] Custom handling for pause prerender background capture
lastPauseWidth = OTRGetGameRenderWidth(); lastPauseWidth = OTRGetGameRenderWidth();
lastPauseHeight = OTRGetGameRenderHeight(); lastPauseHeight = OTRGetGameRenderHeight();
lastAltAssets = ResourceMgr_IsAltAssetsEnabled();
hasCapturedPauseBuffer = false; hasCapturedPauseBuffer = false;
FB_CopyToFramebuffer(&gfxP, 0, gPauseFrameBuffer, false, &hasCapturedPauseBuffer); FB_CopyToFramebuffer(&gfxP, 0, gPauseFrameBuffer, false, &hasCapturedPauseBuffer);

View file

@ -14,7 +14,7 @@ void BgSpot01Idomizu_Destroy(Actor* thisx, PlayState* play);
void BgSpot01Idomizu_Update(Actor* thisx, PlayState* play); void BgSpot01Idomizu_Update(Actor* thisx, PlayState* play);
void BgSpot01Idomizu_Draw(Actor* thisx, PlayState* play); void BgSpot01Idomizu_Draw(Actor* thisx, PlayState* play);
void func_808ABB84(BgSpot01Idomizu* this, PlayState* play); void BgSpot01Idomizu_UpdateWaterLevel(BgSpot01Idomizu* this, PlayState* play);
const ActorInit Bg_Spot01_Idomizu_InitVars = { const ActorInit Bg_Spot01_Idomizu_InitVars = {
ACTOR_BG_SPOT01_IDOMIZU, ACTOR_BG_SPOT01_IDOMIZU,
@ -42,14 +42,14 @@ void BgSpot01Idomizu_Init(Actor* thisx, PlayState* play) {
} else { } else {
this->waterHeight = 52.0f; this->waterHeight = 52.0f;
} }
this->actionFunc = func_808ABB84; this->actionFunc = BgSpot01Idomizu_UpdateWaterLevel;
this->actor.world.pos.y = this->waterHeight; this->actor.world.pos.y = this->waterHeight;
} }
void BgSpot01Idomizu_Destroy(Actor* thisx, PlayState* play) { void BgSpot01Idomizu_Destroy(Actor* thisx, PlayState* play) {
} }
void func_808ABB84(BgSpot01Idomizu* this, PlayState* play) { void BgSpot01Idomizu_UpdateWaterLevel(BgSpot01Idomizu* this, PlayState* play) {
if (Flags_GetEventChkInf(EVENTCHKINF_DRAINED_WELL_IN_KAKARIKO)) { if (Flags_GetEventChkInf(EVENTCHKINF_DRAINED_WELL_IN_KAKARIKO)) {
this->waterHeight = -550.0f; this->waterHeight = -550.0f;
} }

View file

@ -15,7 +15,7 @@ void BgSpot03Taki_Destroy(Actor* thisx, PlayState* play);
void BgSpot03Taki_Update(Actor* thisx, PlayState* play); void BgSpot03Taki_Update(Actor* thisx, PlayState* play);
void BgSpot03Taki_Draw(Actor* thisx, PlayState* play); void BgSpot03Taki_Draw(Actor* thisx, PlayState* play);
void func_808ADEF0(BgSpot03Taki* this, PlayState* play); void BgSpot03Taki_HandleWaterfallState(BgSpot03Taki* this, PlayState* play);
const ActorInit Bg_Spot03_Taki_InitVars = { const ActorInit Bg_Spot03_Taki_InitVars = {
ACTOR_BG_SPOT03_TAKI, ACTOR_BG_SPOT03_TAKI,
@ -60,7 +60,7 @@ void BgSpot03Taki_Init(Actor* thisx, PlayState* play) {
this->openingAlpha = 255.0f; this->openingAlpha = 255.0f;
BgSpot03Taki_ApplyOpeningAlpha(this, 0); BgSpot03Taki_ApplyOpeningAlpha(this, 0);
BgSpot03Taki_ApplyOpeningAlpha(this, 1); BgSpot03Taki_ApplyOpeningAlpha(this, 1);
this->actionFunc = func_808ADEF0; this->actionFunc = BgSpot03Taki_HandleWaterfallState;
} }
void BgSpot03Taki_Destroy(Actor* thisx, PlayState* play) { void BgSpot03Taki_Destroy(Actor* thisx, PlayState* play) {
@ -69,7 +69,7 @@ void BgSpot03Taki_Destroy(Actor* thisx, PlayState* play) {
DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId); DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId);
} }
void func_808ADEF0(BgSpot03Taki* this, PlayState* play) { void BgSpot03Taki_HandleWaterfallState(BgSpot03Taki* this, PlayState* play) {
if (this->state == WATERFALL_CLOSED) { if (this->state == WATERFALL_CLOSED) {
if (Flags_GetSwitch(play, this->switchFlag)) { if (Flags_GetSwitch(play, this->switchFlag)) {
this->state = WATERFALL_OPENING_ANIMATED; this->state = WATERFALL_OPENING_ANIMATED;

View file

@ -179,7 +179,8 @@ void func_808BA2CC(BgTokiHikari* this, PlayState* play) {
gSPMatrix(POLY_XLU_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), gSPMatrix(POLY_XLU_DISP++, MATRIX_NEWMTX(play->state.gfxCtx),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayListOffset(POLY_XLU_DISP++, object_toki_objects_DL_0009C0, 10); // SOH [Port] Index adjust 11 -> 14 (for LUS marker and gsSPVertex) to account for our extraction size changes
gSPDisplayListOffset(POLY_XLU_DISP++, object_toki_objects_DL_0009C0, 10 + 2 + 1);
Matrix_Pop(); Matrix_Pop();
CLOSE_DISPS(play->state.gfxCtx); CLOSE_DISPS(play->state.gfxCtx);
} }

View file

@ -91,7 +91,7 @@ void EnBombf_Init(Actor* thisx, PlayState* play) {
EnBombf* this = (EnBombf*)thisx; EnBombf* this = (EnBombf*)thisx;
Actor_SetScale(thisx, 0.01f); Actor_SetScale(thisx, 0.01f);
this->unk_200 = 1; this->isFuseEnabled = 1;
Collider_InitCylinder(play, &this->bombCollider); Collider_InitCylinder(play, &this->bombCollider);
Collider_InitJntSph(play, &this->explosionCollider); Collider_InitJntSph(play, &this->explosionCollider);
Collider_SetCylinder(play, &this->bombCollider, thisx, &sCylinderInit); Collider_SetCylinder(play, &this->bombCollider, thisx, &sCylinderInit);
@ -174,7 +174,7 @@ void EnBombf_GrowBomb(EnBombf* this, PlayState* play) {
(EnBombf*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOMBF, this->actor.world.pos.x, (EnBombf*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_BOMBF, this->actor.world.pos.x,
this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, 0, true); this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, 0, true);
if (bombFlower != NULL) { if (bombFlower != NULL) {
bombFlower->unk_200 = 1; bombFlower->isFuseEnabled = 1;
bombFlower->timer = 0; bombFlower->timer = 0;
this->timer = 180; this->timer = 180;
this->actor.flags &= ~ACTOR_FLAG_TARGETABLE; this->actor.flags &= ~ACTOR_FLAG_TARGETABLE;
@ -323,7 +323,7 @@ void EnBombf_Update(Actor* thisx, PlayState* play) {
s32 pad[2]; s32 pad[2];
EnBombf* this = (EnBombf*)thisx; EnBombf* this = (EnBombf*)thisx;
if ((this->unk_200 != 0) && (this->timer != 0)) { if ((this->isFuseEnabled != 0) && (this->timer != 0)) {
this->timer--; this->timer--;
} }
@ -367,7 +367,7 @@ void EnBombf_Update(Actor* thisx, PlayState* play) {
if ((this->bombCollider.base.acFlags & AC_HIT) || ((this->bombCollider.base.ocFlags1 & OC1_HIT) && if ((this->bombCollider.base.acFlags & AC_HIT) || ((this->bombCollider.base.ocFlags1 & OC1_HIT) &&
(this->bombCollider.base.oc->category == ACTORCAT_ENEMY))) { (this->bombCollider.base.oc->category == ACTORCAT_ENEMY))) {
this->unk_200 = 1; this->isFuseEnabled = 1;
this->timer = 0; this->timer = 0;
} else { } else {
// if a lit stick touches the bomb, set timer to 100 // if a lit stick touches the bomb, set timer to 100
@ -376,7 +376,7 @@ void EnBombf_Update(Actor* thisx, PlayState* play) {
} }
} }
if (this->unk_200 != 0) { if (this->isFuseEnabled != 0) {
dustAccel.y = 0.2f; dustAccel.y = 0.2f;
effPos = thisx->world.pos; effPos = thisx->world.pos;
effPos.y += 25.0f; effPos.y += 25.0f;

View file

@ -15,7 +15,7 @@ typedef struct EnBombf {
/* 0x01B8 */ ColliderJntSphElement explosionColliderItems[1]; /* 0x01B8 */ ColliderJntSphElement explosionColliderItems[1];
/* 0x01F8 */ s16 timer; /* 0x01F8 */ s16 timer;
/* 0x01FC */ EnBombfActionFunc actionFunc; /* 0x01FC */ EnBombfActionFunc actionFunc;
/* 0x0200 */ s32 unk_200; /* 0x0200 */ s32 isFuseEnabled;
/* 0x0204 */ u8 bumpOn; /* 0x0204 */ u8 bumpOn;
/* 0x0206 */ s16 flashSpeedScale; /* 0x0206 */ s16 flashSpeedScale;
/* 0x0208 */ f32 flashIntensity; /* 0x0208 */ f32 flashIntensity;

View file

@ -737,6 +737,8 @@ void EnBox_CreateExtraChestTextures() {
gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, gChristmasGreenTreasureChestSideAndTopTex), gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, gChristmasGreenTreasureChestSideAndTopTex),
}; };
Gfx gNoOp[] = { gsDPNoOp() };
Gfx* frontCmd = ResourceMgr_LoadGfxByName(gTreasureChestChestFrontDL); Gfx* frontCmd = ResourceMgr_LoadGfxByName(gTreasureChestChestFrontDL);
int frontIndex = 0; int frontIndex = 0;
while (frontCmd->words.w0 >> 24 != G_ENDDL) { while (frontCmd->words.w0 >> 24 != G_ENDDL) {
@ -745,6 +747,20 @@ void EnBox_CreateExtraChestTextures() {
gKeyTreasureChestChestFrontDL[frontIndex] = *frontCmd; gKeyTreasureChestChestFrontDL[frontIndex] = *frontCmd;
gChristmasRedTreasureChestChestFrontDL[frontIndex] = *frontCmd; gChristmasRedTreasureChestChestFrontDL[frontIndex] = *frontCmd;
gChristmasGreenTreasureChestChestFrontDL[frontIndex] = *frontCmd; gChristmasGreenTreasureChestChestFrontDL[frontIndex] = *frontCmd;
// Set the second instruction of img OTR hash opcode to noop, since we will replace it with the
// OTR filepath opcode below
if (frontCmd->words.w0 >> 24 == G_SETTIMG_OTR_HASH) {
frontIndex++;
++frontCmd;
gSkullTreasureChestChestFrontDL[frontIndex] = gNoOp[0];
gGoldTreasureChestChestFrontDL[frontIndex] = gNoOp[0];
gKeyTreasureChestChestFrontDL[frontIndex] = gNoOp[0];
gChristmasRedTreasureChestChestFrontDL[frontIndex] = gNoOp[0];
gChristmasGreenTreasureChestChestFrontDL[frontIndex] = gNoOp[0];
}
frontIndex++; frontIndex++;
++frontCmd; ++frontCmd;
} }
@ -783,6 +799,20 @@ void EnBox_CreateExtraChestTextures() {
gKeyTreasureChestChestSideAndLidDL[sideIndex] = *sideCmd; gKeyTreasureChestChestSideAndLidDL[sideIndex] = *sideCmd;
gChristmasRedTreasureChestChestSideAndLidDL[sideIndex] = *sideCmd; gChristmasRedTreasureChestChestSideAndLidDL[sideIndex] = *sideCmd;
gChristmasGreenTreasureChestChestSideAndLidDL[sideIndex] = *sideCmd; gChristmasGreenTreasureChestChestSideAndLidDL[sideIndex] = *sideCmd;
// Set the second instruction of img OTR hash opcode to noop, since we will replace it with the
// OTR filepath opcode below
if (sideCmd->words.w0 >> 24 == G_SETTIMG_OTR_HASH) {
sideIndex++;
++sideCmd;
gSkullTreasureChestChestSideAndLidDL[sideIndex] = gNoOp[0];
gGoldTreasureChestChestSideAndLidDL[sideIndex] = gNoOp[0];
gKeyTreasureChestChestSideAndLidDL[sideIndex] = gNoOp[0];
gChristmasRedTreasureChestChestSideAndLidDL[sideIndex] = gNoOp[0];
gChristmasGreenTreasureChestChestSideAndLidDL[sideIndex] = gNoOp[0];
}
sideIndex++; sideIndex++;
++sideCmd; ++sideCmd;
} }

View file

@ -437,17 +437,23 @@ void EnKz_SetupMweep(EnKz* this, PlayState* play) {
Vec3f pos; Vec3f pos;
Vec3f initPos; Vec3f initPos;
this->cutsceneCamera = Play_CreateSubCamera(play); bool shouldPlayCutscene = GameInteractor_Should(VB_PLAY_MWEEP_CS, true);
this->gameplayCamera = play->activeCamera;
Play_ChangeCameraStatus(play, this->gameplayCamera, CAM_STAT_WAIT); if (shouldPlayCutscene) {
Play_ChangeCameraStatus(play, this->cutsceneCamera, CAM_STAT_ACTIVE); this->cutsceneCamera = Play_CreateSubCamera(play);
this->gameplayCamera = play->activeCamera;
Play_ChangeCameraStatus(play, this->gameplayCamera, CAM_STAT_WAIT);
Play_ChangeCameraStatus(play, this->cutsceneCamera, CAM_STAT_ACTIVE);
}
pos = this->actor.world.pos; pos = this->actor.world.pos;
initPos = this->actor.home.pos; initPos = this->actor.home.pos;
pos.y += 60.0f; pos.y += 60.0f;
initPos.y += -100.0f; initPos.y += -100.0f;
initPos.z += 260.0f; initPos.z += 260.0f;
Play_CameraSetAtEye(play, this->cutsceneCamera, &pos, &initPos); if (shouldPlayCutscene) {
Player_SetCsActionWithHaltedActors(play, &this->actor, 8); Play_CameraSetAtEye(play, this->cutsceneCamera, &pos, &initPos);
Player_SetCsActionWithHaltedActors(play, &this->actor, 8);
}
this->actor.speedXZ = 0.1f * CVarGetFloat(CVAR_ENHANCEMENT("MweepSpeed"), 1.0f); this->actor.speedXZ = 0.1f * CVarGetFloat(CVAR_ENHANCEMENT("MweepSpeed"), 1.0f);
this->actionFunc = EnKz_Mweep; this->actionFunc = EnKz_Mweep;
} }
@ -462,7 +468,9 @@ void EnKz_Mweep(EnKz* this, PlayState* play) {
pos.y += 60.0f; pos.y += 60.0f;
initPos.y += -100.0f; initPos.y += -100.0f;
initPos.z += 260.0f; initPos.z += 260.0f;
Play_CameraSetAtEye(play, this->cutsceneCamera, &pos, &initPos); if (GameInteractor_Should(VB_PLAY_MWEEP_CS, true)) {
Play_CameraSetAtEye(play, this->cutsceneCamera, &pos, &initPos);
}
if ((EnKz_FollowPath(this, play) == 1) && (this->waypoint == 0)) { if ((EnKz_FollowPath(this, play) == 1) && (this->waypoint == 0)) {
Animation_ChangeByInfo(&this->skelanime, sAnimationInfo, ENKZ_ANIM_1); Animation_ChangeByInfo(&this->skelanime, sAnimationInfo, ENKZ_ANIM_1);
Inventory_ReplaceItem(play, ITEM_LETTER_RUTO, ITEM_BOTTLE); Inventory_ReplaceItem(play, ITEM_LETTER_RUTO, ITEM_BOTTLE);
@ -477,9 +485,11 @@ void EnKz_Mweep(EnKz* this, PlayState* play) {
} }
void EnKz_StopMweep(EnKz* this, PlayState* play) { void EnKz_StopMweep(EnKz* this, PlayState* play) {
Play_ChangeCameraStatus(play, this->gameplayCamera, CAM_STAT_ACTIVE); if (GameInteractor_Should(VB_PLAY_MWEEP_CS, true)) {
Play_ClearCamera(play, this->cutsceneCamera); Play_ChangeCameraStatus(play, this->gameplayCamera, CAM_STAT_ACTIVE);
Player_SetCsActionWithHaltedActors(play, &this->actor, 7); Play_ClearCamera(play, this->cutsceneCamera);
Player_SetCsActionWithHaltedActors(play, &this->actor, 7);
}
this->actionFunc = EnKz_Wait; this->actionFunc = EnKz_Wait;
} }

View file

@ -108,7 +108,8 @@ void OceffWipe4_Draw(Actor* thisx, PlayState* play) {
gSPDisplayList(POLY_XLU_DISP++, sMaterial2DL); gSPDisplayList(POLY_XLU_DISP++, sMaterial2DL);
gSPDisplayList(POLY_XLU_DISP++, Gfx_TwoTexScroll(play->state.gfxCtx, 0, scroll * 2, scroll * (-2), 32, 64, 1, gSPDisplayList(POLY_XLU_DISP++, Gfx_TwoTexScroll(play->state.gfxCtx, 0, scroll * 2, scroll * (-2), 32, 64, 1,
scroll * (-1), scroll, 32, 32)); scroll * (-1), scroll, 32, 32));
gSPDisplayListOffset(POLY_XLU_DISP++, sMaterial2DL, 11); // SOH [Port] Index adjust 11 -> 14 (for LUS marker and load texture) to account for our extraction size changes
gSPDisplayListOffset(POLY_XLU_DISP++, sMaterial2DL, 11 + 2 + 1);
CLOSE_DISPS(play->state.gfxCtx); CLOSE_DISPS(play->state.gfxCtx);
} }