Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

VBify #4255

Merged
merged 51 commits into from
Oct 7, 2024
Merged

VBify #4255

Show file tree
Hide file tree
Changes from 41 commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
c2e38f0
Convert ocarina buttons & skip scarecrow song to VB
Pepe20129 Jul 25, 2024
94d24b8
Move most of boss rush & rupee/key counters to VB
Pepe20129 Jul 25, 2024
b8b5644
Move BossRush_HandleCompleteBoss to VB
Pepe20129 Jul 25, 2024
d675284
Convert boss timestamps to VB
Pepe20129 Jul 25, 2024
5368b19
Move being able to open doors to VB
Pepe20129 Jul 25, 2024
103b8c2
Convert Entrance_OverrideWeatherState to VB
Pepe20129 Jul 25, 2024
fb01c9e
Move boss souls to hook_handlers.cpp
Pepe20129 Jul 25, 2024
e486bf8
Update hook_handlers.cpp
Pepe20129 Jul 25, 2024
77f0be1
Move infinite upgrades to hook_handlers.cpp
Pepe20129 Jul 25, 2024
2f0c4ed
Move skeleton key to hook_handlers.cpp
Pepe20129 Jul 25, 2024
8b2399a
Move swim and child wallet to hook_handlers.cpp
Pepe20129 Jul 25, 2024
54f9c7f
Move ganons boss key to hook_handlers.cpp
Pepe20129 Jul 25, 2024
d5950dd
Move triforce hunt to hook_handlers.cpp
Pepe20129 Jul 25, 2024
cad6a62
Move randomizer sheik spawn to hook_handlers.cpp
Pepe20129 Jul 25, 2024
0ed968d
Update BossRush.h
Pepe20129 Jul 26, 2024
96961e7
Convert spoiling items to VB
Pepe20129 Jul 26, 2024
3e40809
Move load game stuff to hook_handlers.cpp
Pepe20129 Jul 26, 2024
aa4bfae
Move warp song handling to hook_handlers.cpp
Pepe20129 Jul 26, 2024
dd60e61
Convert being able to play bowling to VB
Pepe20129 Jul 26, 2024
01edf35
Move shooting gallery man handling to hook_handlers.cpp
Pepe20129 Jul 26, 2024
88056b7
Move spirit temple silver block removal to hook_handlers.cpp
Pepe20129 Jul 26, 2024
1f47980
Fix build
Pepe20129 Jul 26, 2024
35a7327
Move last beehive stuff to hook_handlers.cpp
Pepe20129 Jul 26, 2024
96337e8
Fix build
Pepe20129 Jul 26, 2024
cc4e753
Add VB_CLOSE_PAUSE_MENU
Pepe20129 Jul 31, 2024
3103520
Add VB_BE_ABLE_TO_SAVE
Pepe20129 Jul 31, 2024
8ebc176
Add VB_RENDER_YES_ON_CONTINUE_PROMPT
Pepe20129 Jul 31, 2024
56e5554
Add VB_SPAWN_BLUE_WARP
Pepe20129 Jul 31, 2024
e3a779e
Add VB_BLUE_WARP_ADULT_WARP_OUT
Pepe20129 Jul 31, 2024
a3b985d
Add VB_BG_BREAKWALL_BREAK
Pepe20129 Jul 31, 2024
25cb867
Convert Saria stuff to VB
Pepe20129 Jul 31, 2024
b635a26
Remove now unused check
Pepe20129 Jul 31, 2024
4b6ef88
Add VB_GANON_HEAL_BEFORE_FIGHT
Pepe20129 Jul 31, 2024
e3ae8d0
Merge branch 'develop-rando' into vbify
Pepe20129 Aug 18, 2024
1fcc73d
Update hook_handlers.cpp
Pepe20129 Aug 18, 2024
2d51825
Fix blue warp offsets
Pepe20129 Aug 24, 2024
4044918
Fixes from review
Pepe20129 Sep 6, 2024
90d4caf
Improve documentation
Pepe20129 Sep 6, 2024
024f118
Update BossRush.cpp
Pepe20129 Sep 6, 2024
fd470c1
Fix my stupidity
Pepe20129 Sep 9, 2024
c06f155
Fix #4327
Pepe20129 Sep 9, 2024
9ccb8d2
Update hook_handlers.cpp
Pepe20129 Sep 10, 2024
257ffa7
Fix blue warps
Pepe20129 Sep 10, 2024
70b69b8
Use ultralib types & clean header
Pepe20129 Sep 10, 2024
8607cf0
Replace options amount macro with BR_OPTIONS_MAX
Pepe20129 Sep 10, 2024
df79a30
Remove unused includes
Pepe20129 Sep 10, 2024
dace913
Remove accidental line doubling
Pepe20129 Sep 12, 2024
2ec2736
Merge branch 'develop-rando' into vbify
Pepe20129 Sep 26, 2024
ccc3f55
Tweaks to boss rush (#6)
garrettjoecox Oct 2, 2024
149ccf9
Merge branch 'develop-rando' into vbify
Pepe20129 Oct 7, 2024
a15763f
Update GameInteractor_HookTable.h
Pepe20129 Oct 7, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
279 changes: 243 additions & 36 deletions soh/soh/Enhancements/boss-rush/BossRush.cpp
Original file line number Diff line number Diff line change
@@ -1,13 +1,27 @@
#include "BossRush.h"
#include "soh/OTRGlobals.h"
#include "functions.h"
#include "macros.h"
#include "variables.h"
#include "soh/Enhancements/game-interactor/GameInteractor.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"

#include <array>
#include <string>
#include <vector>

extern "C" {
#include "functions.h"
#include "macros.h"
#include "variables.h"
#include "src/overlays/actors/ovl_Boss_Goma/z_boss_goma.h"
#include "src/overlays/actors/ovl_Boss_Mo/z_boss_mo.h"
#include "src/overlays/actors/ovl_Door_Warp1/z_door_warp1.h"
extern PlayState* gPlayState;

Gfx* KaleidoScope_QuadTextureIA8(Gfx* gfx, void* texture, s16 width, s16 height, u16 point);
#include "textures/icon_item_nes_static/icon_item_nes_static.h"
#include "textures/icon_item_ger_static/icon_item_ger_static.h"
#include "textures/icon_item_fra_static/icon_item_fra_static.h"
}

typedef struct BossRushSetting {
std::array<std::string, LANGUAGE_MAX> name;
std::vector<std::array<std::string, LANGUAGE_MAX>> choices;
Expand Down Expand Up @@ -168,8 +182,44 @@ void BossRush_SpawnBlueWarps(PlayState* play) {
}
}

void BossRush_HandleBlueWarp(PlayState* play, f32 warpPosX, f32 warpPosZ) {
void BossRush_SetEquipment(uint8_t linkAge) {
std::array<u8, 8> brButtonItems;
std::array<u8, 7> brCButtonSlots;

// Set Child Equipment.
if (linkAge == LINK_AGE_CHILD) {
brButtonItems = {
ITEM_SWORD_KOKIRI, ITEM_STICK, ITEM_NUT, ITEM_BOMB, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE
};

brCButtonSlots = { SLOT_STICK, SLOT_NUT, SLOT_BOMB, SLOT_NONE, SLOT_NONE, SLOT_NONE, SLOT_NONE };

Inventory_ChangeEquipment(EQUIP_TYPE_SWORD, EQUIP_VALUE_SWORD_KOKIRI);
Inventory_ChangeEquipment(EQUIP_TYPE_SHIELD, EQUIP_VALUE_SHIELD_DEKU);
// Set Adult equipment.
} else {
brButtonItems = { ITEM_SWORD_MASTER, ITEM_BOW, ITEM_HAMMER, ITEM_BOMB,
ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE };

brCButtonSlots = { SLOT_BOW, SLOT_HAMMER, SLOT_BOMB, SLOT_NONE, SLOT_NONE, SLOT_NONE, SLOT_NONE };

Inventory_ChangeEquipment(EQUIP_TYPE_SWORD, EQUIP_VALUE_SWORD_MASTER);
Inventory_ChangeEquipment(EQUIP_TYPE_SHIELD, EQUIP_VALUE_SHIELD_MIRROR);
Inventory_ChangeEquipment(EQUIP_TYPE_TUNIC, EQUIP_VALUE_TUNIC_GORON);
}

// Button Items
for (int button = 0; button < ARRAY_COUNT(gSaveContext.equips.buttonItems); button++) {
gSaveContext.equips.buttonItems[button] = brButtonItems[button];
}

// C buttons
for (int button = 0; button < ARRAY_COUNT(gSaveContext.equips.cButtonSlots); button++) {
gSaveContext.equips.cButtonSlots[button] = brCButtonSlots[button];
}
}

void BossRush_HandleBlueWarp(PlayState* play, f32 warpPosX, f32 warpPosZ) {
// If warping from Chamber of Sages, choose the correct boss room to teleport to.
if (play->sceneNum == SCENE_CHAMBER_OF_THE_SAGES) {
// Gohma & Phantom Ganon
Expand Down Expand Up @@ -223,6 +273,10 @@ void BossRush_HandleBlueWarp(PlayState* play, f32 warpPosX, f32 warpPosZ) {
}
}
}

play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FADE_WHITE;
gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE_SLOW;
}

void BossRush_HandleBlueWarpHeal(PlayState* play) {
Expand All @@ -235,10 +289,6 @@ void BossRush_HandleBlueWarpHeal(PlayState* play) {
}

void BossRush_HandleCompleteBoss(PlayState* play) {
if (!IS_BOSS_RUSH) {
return;
}

gSaveContext.isBossRushPaused = 1;
switch (play->sceneNum) {
case SCENE_DEKU_TREE_BOSS:
Expand Down Expand Up @@ -450,40 +500,197 @@ void BossRush_InitSave() {
}
}

void BossRush_SetEquipment(uint8_t linkAge) {

std::array<u8, 8> brButtonItems;
std::array<u8, 7> brCButtonSlots;

// Set Child Equipment.
if (linkAge == LINK_AGE_CHILD) {
brButtonItems = {
ITEM_SWORD_KOKIRI, ITEM_STICK, ITEM_NUT, ITEM_BOMB, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE
};

brCButtonSlots = { SLOT_STICK, SLOT_NUT, SLOT_BOMB, SLOT_NONE, SLOT_NONE, SLOT_NONE, SLOT_NONE };
static void* sSavePromptNoChoiceTexs[] = {
(void*)gPauseNoENGTex,
(void*)gPauseNoGERTex,
(void*)gPauseNoFRATex
};

Inventory_ChangeEquipment(EQUIP_TYPE_SWORD, EQUIP_VALUE_SWORD_KOKIRI);
Inventory_ChangeEquipment(EQUIP_TYPE_SHIELD, EQUIP_VALUE_SHIELD_DEKU);
// Set Adult equipment.
} else {
brButtonItems = { ITEM_SWORD_MASTER, ITEM_BOW, ITEM_HAMMER, ITEM_BOMB,
ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE };
void BossRush_OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, void* optionalArg) {
switch (id) {
// Allow not healing before ganon
case VB_GANON_HEAL_BEFORE_FIGHT: {
if (gSaveContext.bossRushOptions[BR_OPTIONS_HEAL] == BR_CHOICE_HEAL_NEVER) {
*should = false;
}
break;
}
// Replace the blue warp transitions with ones that lead back to the chamber of sages
case VB_BLUE_WARP_APPLY_ENTRANCE_AND_CUTSCENE: {
DoorWarp1* blueWarp = static_cast<DoorWarp1*>(optionalArg);
BossRush_HandleBlueWarp(gPlayState, blueWarp->actor.world.pos.x, blueWarp->actor.world.pos.z);
*should = false;
break;
}
// Spawn clean blue warps (no ruto, adult animation, etc)
case VB_SPAWN_BLUE_WARP: {
switch (gPlayState->sceneNum) {
case SCENE_DEKU_TREE_BOSS: {
BossGoma* bossGoma = static_cast<BossGoma*>(optionalArg);
static Vec3f roomCenter = { -150.0f, 0.0f, -350.0f };
Vec3f childPos = roomCenter;

for (s32 i = 0; i < 10000; i++) {
if ((fabsf(childPos.x - GET_PLAYER(gPlayState)->actor.world.pos.x) < 100.0f &&
fabsf(childPos.z - GET_PLAYER(gPlayState)->actor.world.pos.z) < 100.0f) ||
(fabsf(childPos.x - bossGoma->actor.world.pos.x) < 150.0f &&
fabsf(childPos.z - bossGoma->actor.world.pos.z) < 150.0f)) {
childPos.x = Rand_CenteredFloat(400.0f) + -150.0f;
childPos.z = Rand_CenteredFloat(400.0f) + -350.0f;
} else {
break;
}
}
Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_DOOR_WARP1, childPos.x, bossGoma->actor.world.pos.y, childPos.z, 0, 0, 0, WARP_DUNGEON_ADULT, false);
break;
}
case SCENE_DODONGOS_CAVERN_BOSS: {
Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_DOOR_WARP1, -890.0f, -1523.76f, -3304.0f, 0, 0, 0, WARP_DUNGEON_ADULT, false);
break;
}
case SCENE_JABU_JABU_BOSS: {
static Vec3f sWarpPos[] = {
{ 10.0f, 0.0f, 30.0f },
{ 260.0f, 0.0f, -470.0f },
{ -240.0f, 0.0f, -470.0f },
};

s32 sp7C = 2;
for (s32 i = 2; i > 0; i -= 1) {
if (Math_Vec3f_DistXYZ(&sWarpPos[i], &GET_PLAYER(gPlayState)->actor.world.pos) <
Math_Vec3f_DistXYZ(&sWarpPos[i - 1], &GET_PLAYER(gPlayState)->actor.world.pos)) {
sp7C = i - 1;
}
}

Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_DOOR_WARP1, sWarpPos[sp7C].x, sWarpPos[sp7C].y, sWarpPos[sp7C].z, 0, 0, 0, WARP_DUNGEON_ADULT, false);
break;
}
case SCENE_FOREST_TEMPLE_BOSS: {
Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_DOOR_WARP1, 14.0f, -33.0f, -3315.0f, 0, 0, 0, WARP_DUNGEON_ADULT, true);
break;
}
case SCENE_FIRE_TEMPLE_BOSS: {
Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_DOOR_WARP1, 0.0f, 100.0f, 0.0f, 0, 0, 0, WARP_DUNGEON_ADULT, true);
break;
}
case SCENE_WATER_TEMPLE_BOSS: {
BossMo* bossMo = static_cast<BossMo*>(optionalArg);
Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_DOOR_WARP1, bossMo->actor.world.pos.x, -280.0f, bossMo->actor.world.pos.z, 0, 0, 0, WARP_DUNGEON_ADULT, true);
break;
}
case SCENE_SPIRIT_TEMPLE_BOSS: {
Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_DOOR_WARP1, 600.0f, 230.0f, 0.0f, 0, 0, 0, WARP_DUNGEON_ADULT, true);
break;
}
case SCENE_SHADOW_TEMPLE_BOSS: {
Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_DOOR_WARP1, -50.0f, 0.0f, 400.0f, 0, 0, 0, WARP_DUNGEON_ADULT, true);
break;
}
default: {
SPDLOG_WARN("[BossRush]: Blue warp spawned in unhandled scene, ignoring");
return;
}
}
*should = false;
break;
}
// Skip past the "Save?" window when pressing B while paused and instead close the menu.
case VB_CLOSE_PAUSE_MENU: {
if (CHECK_BTN_ALL(gPlayState->state.input[0].press.button, BTN_B)) {
*should = true;
}
break;
}
// Show "No" twice because the player can't continue.
case VB_RENDER_YES_ON_CONTINUE_PROMPT: {
Gfx** disp = static_cast<Gfx**>(optionalArg);
*disp = KaleidoScope_QuadTextureIA8(*disp, sSavePromptNoChoiceTexs[gSaveContext.language], 48, 16, 12);
*should = false;
break;
}
// Break the dodongo breakable floor immediately so the player can jump in the hole immediately.
case VB_BG_BREAKWALL_BREAK: {
*should = true;
break;
}
// Skip past the "Save?" window when dying and go to the "Continue?" screen immediately.
case VB_TRANSITION_TO_SAVE_SCREEN_ON_DEATH: {
PauseContext* pauseCtx = static_cast<PauseContext*>(optionalArg);
pauseCtx->state = 0xF;
*should = false;
break;
}
// Prevent saving
case VB_BE_ABLE_TO_SAVE:
// Disable doors so the player can't leave the boss rooms backwards.
case VB_BE_ABLE_TO_OPEN_DOORS:
// There's no heart containers in boss rush
case VB_SPAWN_HEART_CONTAINER:
// Rupees are useless in boss rush
case VB_RENDER_RUPEE_COUNTER: {
*should = false;
break;
}
// Prevent warning spam
default: {
Pepe20129 marked this conversation as resolved.
Show resolved Hide resolved
break;
}
}
}

brCButtonSlots = { SLOT_BOW, SLOT_HAMMER, SLOT_BOMB, SLOT_NONE, SLOT_NONE, SLOT_NONE, SLOT_NONE };
void BossRush_OnActorInitHandler(void* actorRef) {
Actor* actor = static_cast<Actor*>(actorRef);

Inventory_ChangeEquipment(EQUIP_TYPE_SWORD, EQUIP_VALUE_SWORD_MASTER);
Inventory_ChangeEquipment(EQUIP_TYPE_SHIELD, EQUIP_VALUE_SHIELD_MIRROR);
Inventory_ChangeEquipment(EQUIP_TYPE_TUNIC, EQUIP_VALUE_TUNIC_GORON);
if (actor->id == ACTOR_DEMO_SA && gPlayState->sceneNum == SCENE_CHAMBER_OF_THE_SAGES) {
BossRush_SpawnBlueWarps(gPlayState);
Actor_Kill(actor);
GET_PLAYER(gPlayState)->actor.world.rot.y = GET_PLAYER(gPlayState)->actor.shape.rot.y = 27306;
return;
}

// Button Items
for (int button = 0; button < ARRAY_COUNT(gSaveContext.equips.buttonItems); button++) {
gSaveContext.equips.buttonItems[button] = brButtonItems[button];
// Remove chests, mainly for the chest in King Dodongo's boss room.
// Remove bushes, used in Gohma's arena.
// Remove pots, used in Barinade's and Ganondorf's arenas.
if (actor->id == ACTOR_EN_KUSA || actor->id == ACTOR_OBJ_TSUBO || actor->id == ACTOR_EN_BOX) {
Actor_Kill(actor);
return;
}
}

// C buttons
for (int button = 0; button < ARRAY_COUNT(gSaveContext.equips.cButtonSlots); button++) {
gSaveContext.equips.cButtonSlots[button] = brCButtonSlots[button];
void BossRush_OnSceneInitHandler(int16_t sceneNum) {
// Unpause the timer when the scene loaded isn't the Chamber of Sages.
if (sceneNum != SCENE_CHAMBER_OF_THE_SAGES) {
gSaveContext.isBossRushPaused = 0;
}
}

void BossRush_OnBossDefeatHandler(void* refActor) {
BossRush_HandleCompleteBoss(gPlayState);
}

void BossRush_RegisterHooks() {
static uint32_t onVanillaBehaviorHook = 0;
static uint32_t onSceneInitHook = 0;
static uint32_t onActorInitHook = 0;
static uint32_t onBossDefeatHook = 0;

GameInteractor::Instance->RegisterGameHook<GameInteractor::OnLoadGame>([](int32_t fileNum) {
GameInteractor::Instance->UnregisterGameHook<GameInteractor::OnVanillaBehavior>(onVanillaBehaviorHook);
GameInteractor::Instance->UnregisterGameHook<GameInteractor::OnSceneInit>(onSceneInitHook);
GameInteractor::Instance->UnregisterGameHook<GameInteractor::OnActorInit>(onActorInitHook);
GameInteractor::Instance->UnregisterGameHook<GameInteractor::OnBossDefeat>(onBossDefeatHook);

onVanillaBehaviorHook = 0;
onSceneInitHook = 0;
onActorInitHook = 0;
onBossDefeatHook = 0;

if (!IS_BOSS_RUSH) return;

onVanillaBehaviorHook = GameInteractor::Instance->RegisterGameHook<GameInteractor::OnVanillaBehavior>(BossRush_OnVanillaBehaviorHandler);
onSceneInitHook = GameInteractor::Instance->RegisterGameHook<GameInteractor::OnSceneInit>(BossRush_OnSceneInitHandler);
onActorInitHook = GameInteractor::Instance->RegisterGameHook<GameInteractor::OnActorInit>(BossRush_OnActorInitHandler);
onBossDefeatHook = GameInteractor::Instance->RegisterGameHook<GameInteractor::OnBossDefeat>(BossRush_OnBossDefeatHandler);
});
}
3 changes: 1 addition & 2 deletions soh/soh/Enhancements/boss-rush/BossRush.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,10 @@ void BossRush_SpawnBlueWarps(PlayState* play);
void BossRush_HandleBlueWarp(PlayState* play, f32 warpPosX, f32 warpPosZ);
void BossRush_HandleBlueWarpHeal(PlayState* play);
void BossRush_InitSave();
void BossRush_SetEquipment(uint8_t linkAge);
void BossRush_HandleCompleteBoss(PlayState* play);
const char* BossRush_GetSettingName(uint8_t optionIndex, uint8_t language);
const char* BossRush_GetSettingChoiceName(uint8_t optionIndex, uint8_t choiceIndex, uint8_t language);
uint8_t BossRush_GetSettingOptionsAmount(uint8_t optionIndex);
void BossRush_RegisterHooks();
#ifdef __cplusplus
};
#endif
41 changes: 41 additions & 0 deletions soh/soh/Enhancements/game-interactor/GameInteractor.h
Original file line number Diff line number Diff line change
Expand Up @@ -242,6 +242,46 @@ typedef enum {
```
*/
VB_DRAW_AMMO_COUNT,
// Vanilla condition: true
VB_HAVE_OCARINA_NOTE_D4,
// Vanilla condition: true
VB_HAVE_OCARINA_NOTE_D5,
// Vanilla condition: true
VB_HAVE_OCARINA_NOTE_F4,
// Vanilla condition: true
VB_HAVE_OCARINA_NOTE_B4,
// Vanilla condition: true
VB_HAVE_OCARINA_NOTE_A4,
// Vanilla condition: false
VB_SKIP_SCARECROWS_SONG,
// Vanilla condition: true
VB_RENDER_RUPEE_COUNTER,
// Vanilla condition: true
VB_RENDER_KEY_COUNTER,
// Vanilla condition: true
VB_SPAWN_HEART_CONTAINER,
// Vanilla condition: true
VB_BE_ABLE_TO_OPEN_DOORS,
// Vanilla condition: true
VB_REVERT_SPOILING_ITEMS,
// Vanilla condition: Flags_GetEventChkInf(EVENTCHKINF_USED_DODONGOS_CAVERN_BLUE_WARP) || BREG(2)
VB_BE_ABLE_TO_PLAY_BOMBCHU_BOWLING,
// Vanilla condition: true
VB_BE_ABLE_TO_SAVE,
// Vanilla condition: true
VB_TRANSITION_TO_SAVE_SCREEN_ON_DEATH,
// Vanilla condition: true
VB_RENDER_YES_ON_CONTINUE_PROMPT,
// Vanilla condition: CHECK_BTN_ALL(input->press.button, BTN_START)
VB_CLOSE_PAUSE_MENU,
// Vanilla condition: true
VB_SPAWN_BLUE_WARP,
// Vanilla condition: this->warpTimer > sWarpTimerTarget && gSaveContext.nextCutsceneIndex == 0xFFEF
VB_BLUE_WARP_APPLY_ENTRANCE_AND_CUTSCENE,
// Vanilla condition: this->collider.base.acFlags & 2
VB_BG_BREAKWALL_BREAK,
// Vanilla condition: true
VB_GANON_HEAL_BEFORE_FIGHT,

/*** Play Cutscenes ***/

Expand Down Expand Up @@ -683,6 +723,7 @@ class GameInteractor {
DEFINE_HOOK(OnActorUpdate, (void* actor));
DEFINE_HOOK(OnActorKill, (void* actor));
DEFINE_HOOK(OnEnemyDefeat, (void* actor));
DEFINE_HOOK(OnBossDefeat, (void* actor));
DEFINE_HOOK(OnPlayerBonk, ());
DEFINE_HOOK(OnPlayDestroy, ());
DEFINE_HOOK(OnPlayDrawEnd, ());
Expand Down
Loading
Loading