mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2024-12-23 08:38:52 -05:00
Port Dampe behavior to vanilla (#1364)
* Port Dampe behavior to vanilla * Add Dampe winning to Enhanced preset
This commit is contained in:
parent
b18cc9d628
commit
e97ba37a5e
@ -24,6 +24,7 @@
|
||||
|
||||
#include "UIWidgets.hpp"
|
||||
#include "include/z64audio.h"
|
||||
#include "soh/SaveManager.h"
|
||||
|
||||
#define EXPERIMENTAL() \
|
||||
ImGui::PushStyleColor(ImGuiCol_Text, IM_COL32(255, 50, 50, 255)); \
|
||||
@ -157,6 +158,8 @@ namespace GameMenuBar {
|
||||
CVar_SetS32("gBombchuDrops", 0);
|
||||
// Always Win Goron Pot
|
||||
CVar_SetS32("gGoronPot", 0);
|
||||
// Always Win Dampe Digging First Try
|
||||
CVar_SetS32("gDampeWin", 0);
|
||||
|
||||
// Change Red Potion Effect
|
||||
CVar_SetS32("gRedPotionEffect", 0);
|
||||
@ -379,6 +382,8 @@ namespace GameMenuBar {
|
||||
CVar_SetS32("gFastBoomerang", 1);
|
||||
// Mask Select in Inventory
|
||||
CVar_SetS32("gMaskSelect", 1);
|
||||
// Always Win Dampe Digging
|
||||
CVar_SetS32("gDampeWin", 1);
|
||||
|
||||
// Disable Navi Call Audio
|
||||
CVar_SetS32("gDisableNaviCallAudio", 1);
|
||||
@ -775,6 +780,9 @@ namespace GameMenuBar {
|
||||
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::PaddedEnhancementCheckbox("Always Win Goron Pot", "gGoronPot", true, false);
|
||||
UIWidgets::Tooltip("Always get the heart piece/purple rupee from the spinning Goron pot");
|
||||
UIWidgets::PaddedEnhancementCheckbox("Always Win Dampe Digging Game", "gDampeWin", true, false, SaveManager::Instance->IsRandoFile(),
|
||||
"This setting is always enabled in randomizer files", UIWidgets::CheckboxGraphics::Checkmark);
|
||||
UIWidgets::Tooltip("Always win the heart piece/purple rupee on the first dig in Dampe's grave digging game, just like in rando\nIn a rando file, this is unconditionally enabled");
|
||||
UIWidgets::Spacer(0);
|
||||
|
||||
if (ImGui::BeginMenu("Potion Values"))
|
||||
|
@ -1214,6 +1214,10 @@ void SaveManager::DeleteZeldaFile(int fileNum) {
|
||||
fileMetaInfo[fileNum].randoSave = false;
|
||||
}
|
||||
|
||||
bool SaveManager::IsRandoFile() {
|
||||
return gSaveContext.n64ddFlag != 0 ? true : false;
|
||||
}
|
||||
|
||||
// Functionality required to convert old saves into versioned saves
|
||||
|
||||
// DO NOT EDIT ANY OF THE FOLLOWING STRUCTS
|
||||
|
@ -57,6 +57,7 @@ public:
|
||||
|
||||
void CopyZeldaFile(int from, int to);
|
||||
void DeleteZeldaFile(int fileNum);
|
||||
bool IsRandoFile();
|
||||
|
||||
// Use a name of "" to save to an array. You must be in a SaveArray callback.
|
||||
template<typename T>
|
||||
|
@ -408,7 +408,7 @@ s32 EnTk_ChooseReward(EnTk* this) {
|
||||
f32 luck;
|
||||
s32 reward;
|
||||
|
||||
if (gSaveContext.n64ddFlag && !Flags_GetCollectible(gGlobalCtx, 0x1F) && this->heartPieceSpawned == 0) {
|
||||
if ((gSaveContext.n64ddFlag || CVar_GetS32("gDampeWin", 0)) && !Flags_GetCollectible(gGlobalCtx, 0x1F) && this->heartPieceSpawned == 0) {
|
||||
return 3;
|
||||
}
|
||||
|
||||
@ -604,7 +604,7 @@ void EnTk_Dig(EnTk* this, GlobalContext* globalCtx) {
|
||||
|
||||
this->rewardTimer = 0;
|
||||
|
||||
if (this->validDigHere == 1 || gSaveContext.n64ddFlag) {
|
||||
if (this->validDigHere == 1 || gSaveContext.n64ddFlag || CVar_GetS32("gDampeWin", 0)) {
|
||||
rewardOrigin.x = 0.0f;
|
||||
rewardOrigin.y = 0.0f;
|
||||
rewardOrigin.z = -40.0f;
|
||||
@ -620,21 +620,21 @@ void EnTk_Dig(EnTk* this, GlobalContext* globalCtx) {
|
||||
|
||||
// merging in dampe tour fix seems messy, so i'm just wrapping this whole thing
|
||||
// in an n64dd check for now
|
||||
if(gSaveContext.n64ddFlag) {
|
||||
if (gSaveContext.n64ddFlag || CVar_GetS32("gDampeWin", 0)) {
|
||||
if (this->currentReward == 3) {
|
||||
/*
|
||||
* Upgrade the purple rupee reward to the heart piece if this
|
||||
* is the first grand prize dig.
|
||||
*/
|
||||
if (!(gSaveContext.itemGetInf[1] & 0x1000) && !gSaveContext.n64ddFlag) {
|
||||
if (!(gSaveContext.itemGetInf[1] & 0x1000) && !(gSaveContext.n64ddFlag || CVar_GetS32("gDampeWin", 0))) {
|
||||
gSaveContext.itemGetInf[1] |= 0x1000;
|
||||
this->currentReward = 4;
|
||||
} else if (gSaveContext.n64ddFlag && !Flags_GetCollectible(gGlobalCtx, 0x1F) && this->heartPieceSpawned == 0) {
|
||||
} else if ((gSaveContext.n64ddFlag || CVar_GetS32("gDampeWin", 0)) && !Flags_GetCollectible(gGlobalCtx, 0x1F) && this->heartPieceSpawned == 0) {
|
||||
this->currentReward = 4;
|
||||
}
|
||||
}
|
||||
|
||||
if (gSaveContext.n64ddFlag && this->currentReward == 4) {
|
||||
if ((gSaveContext.n64ddFlag || CVar_GetS32("gDampeWin", 0)) && this->currentReward == 4) {
|
||||
Actor_Spawn(&globalCtx->actorCtx, globalCtx, ACTOR_EN_ITEM00, rewardPos.x, rewardPos.y, rewardPos.z, 0,
|
||||
0, 0, 0x1F06);
|
||||
this->heartPieceSpawned = 1;
|
||||
@ -670,7 +670,7 @@ void EnTk_Dig(EnTk* this, GlobalContext* globalCtx) {
|
||||
|
||||
if (this->skelAnime.curFrame >= 32.0f && this->rewardTimer == 10) {
|
||||
/* Play a reward sound shortly after digging */
|
||||
if (!gSaveContext.n64ddFlag && this->validDigHere == 0) {
|
||||
if (!(gSaveContext.n64ddFlag || CVar_GetS32("gDampeWin", 0)) && this->validDigHere == 0) {
|
||||
/* Bad dig spot */
|
||||
Audio_PlayActorSound2(&this->actor, NA_SE_SY_ERROR);
|
||||
} else if (this->currentReward == 4) {
|
||||
|
Loading…
Reference in New Issue
Block a user