Dampe's Hut open all night when Dampe is out (#5937)
This commit is contained in:
37
soh/soh/Enhancements/TimeSavers/DampeAllNight.cpp
Normal file
37
soh/soh/Enhancements/TimeSavers/DampeAllNight.cpp
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
|
||||||
|
#include "soh/OTRGlobals.h"
|
||||||
|
#include "soh/ShipInit.hpp"
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
#include "src/overlays/actors/ovl_En_Door/z_en_door.h"
|
||||||
|
extern SaveContext gSaveContext;
|
||||||
|
extern PlayState* gPlayState;
|
||||||
|
}
|
||||||
|
|
||||||
|
static constexpr int32_t CVAR_DAMPE_ALL_NIGHT_DEFAULT = 0;
|
||||||
|
#define CVAR_DAMPE_ALL_NIGHT_NAME CVAR_ENHANCEMENT("DampeAllNight")
|
||||||
|
#define CVAR_DAMPE_ALL_NIGHT_VALUE CVarGetInteger(CVAR_DAMPE_ALL_NIGHT_NAME, CVAR_DAMPE_ALL_NIGHT_DEFAULT)
|
||||||
|
|
||||||
|
static constexpr s16 DAMPE_HUT_DOOR_OPEN = 447;
|
||||||
|
static constexpr s16 DAMPE_HUT_DOOR_CLOSED = 774;
|
||||||
|
|
||||||
|
static bool DampeIsResting() {
|
||||||
|
return LINK_IS_ADULT || gPlayState->sceneNum != SCENE_GRAVEYARD;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void OpenDampeHutDoor(void* refActor) {
|
||||||
|
EnDoor* enDoor = static_cast<EnDoor*>(refActor);
|
||||||
|
s16* params = &enDoor->actor.params;
|
||||||
|
|
||||||
|
if (*params == DAMPE_HUT_DOOR_CLOSED && !DampeIsResting()) {
|
||||||
|
*params = DAMPE_HUT_DOOR_OPEN;
|
||||||
|
EnDoor_SetupType(enDoor, gPlayState);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void RegisterDampeAllNight() {
|
||||||
|
COND_VB_SHOULD(VB_DAMPE_IN_GRAVEYARD_DESPAWN, CVAR_DAMPE_ALL_NIGHT_VALUE, { *should = DampeIsResting(); });
|
||||||
|
COND_ID_HOOK(OnActorInit, ACTOR_EN_DOOR, CVAR_DAMPE_ALL_NIGHT_VALUE, OpenDampeHutDoor);
|
||||||
|
}
|
||||||
|
|
||||||
|
static RegisterShipInitFunc initFunc(RegisterDampeAllNight, { CVAR_DAMPE_ALL_NIGHT_NAME });
|
||||||
@@ -709,11 +709,6 @@ void TimeSaverOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_li
|
|||||||
*should = false;
|
*should = false;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case VB_DAMPE_IN_GRAVEYARD_DESPAWN:
|
|
||||||
if (CVarGetInteger(CVAR_ENHANCEMENT("DampeAllNight"), 0)) {
|
|
||||||
*should = LINK_IS_ADULT || gPlayState->sceneNum != SCENE_GRAVEYARD;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case VB_BE_VALID_GRAVEDIGGING_SPOT:
|
case VB_BE_VALID_GRAVEDIGGING_SPOT:
|
||||||
if (CVarGetInteger(CVAR_ENHANCEMENT("DampeWin"), IS_RANDO)) {
|
if (CVarGetInteger(CVAR_ENHANCEMENT("DampeWin"), IS_RANDO)) {
|
||||||
EnTk* enTk = va_arg(args, EnTk*);
|
EnTk* enTk = va_arg(args, EnTk*);
|
||||||
|
|||||||
Reference in New Issue
Block a user