mirror of
https://github.com/HarbourMasters/Shipwright
synced 2026-08-27 00:44:04 -04:00
Adjust fishing prize threshold when minigame weight adjusted (#7089)
cleanup IS_RANDO usage in randomizer hook_handlers.cpp
This commit is contained in:
@@ -1,9 +1,11 @@
|
||||
#include "soh/Enhancements/game-interactor/GameInteractor.h"
|
||||
#include "soh/ShipInit.hpp"
|
||||
#include "src/overlays/actors/ovl_Fishing/z_fishing.h"
|
||||
|
||||
extern "C" {
|
||||
#include <variables.h>
|
||||
#include <functions.h>
|
||||
#include <macros.h>
|
||||
extern PlayState* gPlayState;
|
||||
extern SaveContext gSaveContext;
|
||||
f32 Fishing_GetMinimumRequiredScore();
|
||||
@@ -18,6 +20,13 @@ void BuildFishingMessage(uint16_t* textId, bool* loadFromMessageTable) {
|
||||
void RegisterFishingMessages() {
|
||||
COND_ID_HOOK(OnOpenText, 0x40AE, CVarGetInteger(CVAR_ENHANCEMENT("CustomizeFishing"), 0), BuildFishingMessage);
|
||||
COND_ID_HOOK(OnOpenText, 0x4080, CVarGetInteger(CVAR_ENHANCEMENT("CustomizeFishing"), 0), BuildFishingMessage);
|
||||
|
||||
COND_VB_SHOULD(
|
||||
VB_SHOULD_GIVE_VANILLA_FISHING_PRIZE, (!IS_RANDO && CVarGetInteger(CVAR_ENHANCEMENT("CustomizeFishing"), 0)), {
|
||||
VBFishingData* fishData = va_arg(args, VBFishingData*);
|
||||
*should = fishData->fishWeight >= Fishing_GetMinimumRequiredScore() &&
|
||||
!(HIGH_SCORE(HS_FISHING) & (LINK_IS_CHILD ? HS_FISH_PRIZE_CHILD : HS_FISH_PRIZE_ADULT));
|
||||
});
|
||||
}
|
||||
|
||||
void RegisterHoverFishing() {
|
||||
@@ -58,7 +67,7 @@ void RegisterAllowFishingBlankB() {
|
||||
});
|
||||
}
|
||||
|
||||
static RegisterShipInitFunc initFunc(RegisterFishingMessages, { CVAR_ENHANCEMENT("CustomizeFishing") });
|
||||
static RegisterShipInitFunc initFunc(RegisterFishingMessages, { CVAR_ENHANCEMENT("CustomizeFishing"), "IS_RANDO" });
|
||||
static RegisterShipInitFunc initHoverFishing(RegisterHoverFishing, { CVAR_ENHANCEMENT("HoverFishing") });
|
||||
static RegisterShipInitFunc initAllowFishingBlankB(RegisterAllowFishingBlankB,
|
||||
{ CVAR_ENHANCEMENT("FishingBlankB"), "IS_RANDO" });
|
||||
|
||||
@@ -433,8 +433,6 @@ void RandomizerOnPlayerUpdateForRCQueueHandler() {
|
||||
rc != RC_MARKET_BOMBCHU_BOWLING_SECOND_PRIZE &&
|
||||
// Always show ItemGet animation for ice traps
|
||||
!(getItemEntry.modIndex == MOD_RANDOMIZER && getItemEntry.getItemId == RG_ICE_TRAP) &&
|
||||
// Always show ItemGet animation outside of randomizer to keep behaviour consistent in vanilla
|
||||
IS_RANDO &&
|
||||
(CVarGetInteger(CVAR_RANDOMIZER_ENHANCEMENT("TimeSavers.SkipGetItemAnimation"), SGIA_JUNK) == SGIA_ALL ||
|
||||
(CVarGetInteger(CVAR_RANDOMIZER_ENHANCEMENT("TimeSavers.SkipGetItemAnimation"), SGIA_JUNK) == SGIA_JUNK &&
|
||||
(
|
||||
@@ -543,7 +541,7 @@ void RandomizerOnItemReceiveHandler(GetItemEntry receivedItemEntry) {
|
||||
}
|
||||
|
||||
if (loc->GetRandomizerCheck() == RC_SPIRIT_TEMPLE_SILVER_GAUNTLETS_CHEST) {
|
||||
if (!CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Story"), IS_RANDO)) {
|
||||
if (!CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Story"), 1)) {
|
||||
static uint32_t updateHook;
|
||||
updateHook = GameInteractor::Instance->RegisterGameHook<GameInteractor::OnPlayerUpdate>([]() {
|
||||
Player* player = GET_PLAYER(gPlayState);
|
||||
@@ -784,15 +782,13 @@ bool ShouldGiveFishingPrize(f32 sFishOnHandLength) {
|
||||
? CVarGetInteger(CVAR_ENHANCEMENT("MinimumFishWeightChild"), 10)
|
||||
: 10;
|
||||
f32 score = sqrt(((f32)weight - 0.5f) / 0.0036f);
|
||||
return sFishOnHandLength >= score && (IS_RANDO ? !Flags_GetRandomizerInf(RAND_INF_CHILD_FISHING)
|
||||
: !(HIGH_SCORE(HS_FISHING) & HS_FISH_PRIZE_CHILD));
|
||||
return sFishOnHandLength >= score && !Flags_GetRandomizerInf(RAND_INF_CHILD_FISHING);
|
||||
} else {
|
||||
int32_t weight = CVarGetInteger(CVAR_ENHANCEMENT("CustomizeFishing"), 0)
|
||||
? CVarGetInteger(CVAR_ENHANCEMENT("MinimumFishWeightAdult"), 13)
|
||||
: 13;
|
||||
f32 score = sqrt(((f32)weight - 0.5f) / 0.0036f);
|
||||
return sFishOnHandLength >= score && (IS_RANDO ? !Flags_GetRandomizerInf(RAND_INF_ADULT_FISHING)
|
||||
: !(HIGH_SCORE(HS_FISHING) & HS_FISH_PRIZE_ADULT));
|
||||
return sFishOnHandLength >= score && !Flags_GetRandomizerInf(RAND_INF_ADULT_FISHING);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1985,48 +1981,44 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l
|
||||
break;
|
||||
}
|
||||
case VB_SHOULD_GIVE_VANILLA_FISHING_PRIZE: {
|
||||
VBFishingData* fishData = va_arg(args, VBFishingData*);
|
||||
*should = !IS_RANDO && ShouldGiveFishingPrize(fishData->fishWeight);
|
||||
// rando gives its prize via VB_GIVE_RANDO_FISHING_PRIZE instead
|
||||
*should = false;
|
||||
break;
|
||||
}
|
||||
case VB_GIVE_RANDO_FISHING_PRIZE: {
|
||||
if (IS_RANDO) {
|
||||
VBFishingData* fishData = va_arg(args, VBFishingData*);
|
||||
if (*fishData->sFishOnHandIsLoach) {
|
||||
if (!Flags_GetRandomizerInf(RAND_INF_CAUGHT_LOACH) &&
|
||||
OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_FISHSANITY) ==
|
||||
RO_FISHSANITY_HYRULE_LOACH) {
|
||||
Flags_SetRandomizerInf(RAND_INF_CAUGHT_LOACH);
|
||||
Message_StartTextbox(gPlayState, TEXT_FISHING_RELEASE_THIS_ONE, NULL);
|
||||
*should = true;
|
||||
fishData->actor->stateAndTimer = 20;
|
||||
}
|
||||
} else {
|
||||
if (ShouldGiveFishingPrize(fishData->fishWeight)) {
|
||||
if (LINK_IS_CHILD) {
|
||||
Flags_SetRandomizerInf(RAND_INF_CHILD_FISHING);
|
||||
HIGH_SCORE(HS_FISHING) |= HS_FISH_PRIZE_CHILD;
|
||||
} else {
|
||||
Flags_SetRandomizerInf(RAND_INF_ADULT_FISHING);
|
||||
HIGH_SCORE(HS_FISHING) |= HS_FISH_PRIZE_ADULT;
|
||||
}
|
||||
*should = true;
|
||||
*fishData->sSinkingLureLocation = (u8)Rand_ZeroFloat(3.999f) + 1;
|
||||
fishData->actor->stateAndTimer = 0;
|
||||
VBFishingData* fishData = va_arg(args, VBFishingData*);
|
||||
if (*fishData->sFishOnHandIsLoach) {
|
||||
if (!Flags_GetRandomizerInf(RAND_INF_CAUGHT_LOACH) &&
|
||||
OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_FISHSANITY) ==
|
||||
RO_FISHSANITY_HYRULE_LOACH) {
|
||||
Flags_SetRandomizerInf(RAND_INF_CAUGHT_LOACH);
|
||||
Message_StartTextbox(gPlayState, TEXT_FISHING_RELEASE_THIS_ONE, NULL);
|
||||
*should = true;
|
||||
fishData->actor->stateAndTimer = 20;
|
||||
}
|
||||
} else {
|
||||
if (ShouldGiveFishingPrize(fishData->fishWeight)) {
|
||||
if (LINK_IS_CHILD) {
|
||||
Flags_SetRandomizerInf(RAND_INF_CHILD_FISHING);
|
||||
HIGH_SCORE(HS_FISHING) |= HS_FISH_PRIZE_CHILD;
|
||||
} else {
|
||||
Flags_SetRandomizerInf(RAND_INF_ADULT_FISHING);
|
||||
HIGH_SCORE(HS_FISHING) |= HS_FISH_PRIZE_ADULT;
|
||||
}
|
||||
*should = true;
|
||||
*fishData->sSinkingLureLocation = (u8)Rand_ZeroFloat(3.999f) + 1;
|
||||
fishData->actor->stateAndTimer = 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case VB_GIVE_RANDO_GLITCH_FISHING_PRIZE: {
|
||||
if (IS_RANDO) {
|
||||
Fishing* fishing = va_arg(args, Fishing*);
|
||||
if (!Flags_GetRandomizerInf(RAND_INF_ADULT_FISHING)) {
|
||||
Flags_SetRandomizerInf(RAND_INF_ADULT_FISHING);
|
||||
}
|
||||
*should = true;
|
||||
fishing->stateAndTimer = 0;
|
||||
Fishing* fishing = va_arg(args, Fishing*);
|
||||
if (!Flags_GetRandomizerInf(RAND_INF_ADULT_FISHING)) {
|
||||
Flags_SetRandomizerInf(RAND_INF_ADULT_FISHING);
|
||||
}
|
||||
*should = true;
|
||||
fishing->stateAndTimer = 0;
|
||||
break;
|
||||
}
|
||||
case VB_TRADE_TIMER_EYEDROPS: {
|
||||
|
||||
Reference in New Issue
Block a user