Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,11 @@ DEFINE_HOOK(OnVanillaBehavior, (GIVanillaBehavior flag, bool* result, va_list or
DEFINE_HOOK(OnSaveFile, (int32_t fileNum, int32_t sectionID));
DEFINE_HOOK(OnLoadFile, (int32_t fileNum));
DEFINE_HOOK(OnDeleteFile, (int32_t fileNum));
DEFINE_HOOK(OnLinkAnimEnd, (SkelAnime * skelAnime));
DEFINE_HOOK(OnQPADamage, (uint32_t * dmgFlags));
DEFINE_HOOK(OnESS, ());
DEFINE_HOOK(OnWaitForPutaway, ());
DEFINE_HOOK(OnAnimationSetLoadFrame, (LinkAnimationHeader * animation, int32_t* frame));

DEFINE_HOOK(OnDialogMessage, ());
DEFINE_HOOK(OnPresentTitleCard, ());
Expand Down Expand Up @@ -85,6 +90,7 @@ DEFINE_HOOK(OnGenerationCompletion, ());
DEFINE_HOOK(OnSetGameLanguage, ());
DEFINE_HOOK(OnAssetAltChange, ());
DEFINE_HOOK(OnKaleidoUpdate, ());
DEFINE_HOOK(OnKaleidoMoveCursorFromSpecialPos, (PauseContext * pauseCtx, uint16_t* cursorItem));

// Messages
DEFINE_HOOK(OnOpenText, (uint16_t * textId, bool* loadFromMessageTable));
Expand Down
24 changes: 24 additions & 0 deletions soh/soh/Enhancements/game-interactor/GameInteractor_Hooks.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,26 @@ void GameInteractor_ExecuteOnCuccoOrChickenHatch() {
GameInteractor::Instance->ExecuteHooks<GameInteractor::OnCuccoOrChickenHatch>();
}

void GameInteractor_ExecuteOnLinkAnimEnd(SkelAnime* skelAnime) {
GameInteractor::Instance->ExecuteHooks<GameInteractor::OnLinkAnimEnd>(skelAnime);
}

void GameInteractor_ExecuteOnQPADamage(uint32_t* dmgFlags) {
GameInteractor::Instance->ExecuteHooks<GameInteractor::OnQPADamage>(dmgFlags);
}

void GameInteractor_ExecuteOnESS() {
GameInteractor::Instance->ExecuteHooks<GameInteractor::OnESS>();
}

void GameInteractor_ExecuteOnWaitForPutaway() {
GameInteractor::Instance->ExecuteHooks<GameInteractor::OnWaitForPutaway>();
}

void GameInteractor_ExecuteOnAnimationSetLoadFrame(LinkAnimationHeader* animation, int32_t* frame) {
GameInteractor::Instance->ExecuteHooks<GameInteractor::OnAnimationSetLoadFrame>(animation, frame);
}

void GameInteractor_ExecuteOnShopSlotChangeHooks(uint8_t cursorIndex, int16_t price) {
GameInteractor::Instance->ExecuteHooks<GameInteractor::OnShopSlotChange>(cursorIndex, price);
}
Expand Down Expand Up @@ -383,6 +403,10 @@ void GameInteractor_ExecuteOnKaleidoUpdate() {
GameInteractor::Instance->ExecuteHooks<GameInteractor::OnKaleidoUpdate>();
}

void GameInteractor_ExecuteOnKaleidoMoveCursorFromSpecialPos(PauseContext* pauseCtx, uint16_t* cursorItem) {
GameInteractor::Instance->ExecuteHooks<GameInteractor::OnKaleidoMoveCursorFromSpecialPos>(pauseCtx, cursorItem);
}

// MARK: Messages
void GameInteractor_ExecuteOnOpenText(uint16_t* textId, bool* loadFromMessageTable) {
GameInteractor::Instance->ExecuteHooks<GameInteractor::OnOpenText>(textId, loadFromMessageTable);
Expand Down
6 changes: 6 additions & 0 deletions soh/soh/Enhancements/game-interactor/GameInteractor_Hooks.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,11 @@ void GameInteractor_ExecuteOnPlayerSfx(u16 sfxId);
void GameInteractor_ExecuteOnOcarinaSongAction();
void GameInteractor_ExecuteOnOcarinaNote(uint8_t note, float modulator, int8_t bend);
void GameInteractor_ExecuteOnCuccoOrChickenHatch();
void GameInteractor_ExecuteOnLinkAnimEnd(SkelAnime* skelAnime);
void GameInteractor_ExecuteOnQPADamage(uint32_t* dmgFlags);
void GameInteractor_ExecuteOnESS();
void GameInteractor_ExecuteOnWaitForPutaway();
void GameInteractor_ExecuteOnAnimationSetLoadFrame(LinkAnimationHeader* animation, int32_t* frame);
bool GameInteractor_ShouldActorInit(void* actor);
void GameInteractor_ExecuteOnActorInit(void* actor);
void GameInteractor_ExecuteOnActorSpawn(void* actor);
Expand Down Expand Up @@ -96,6 +101,7 @@ void GameInteractor_RegisterOnAssetAltChange(void (*fn)(void));

// Mark: - Pause Menu
void GameInteractor_ExecuteOnKaleidoUpdate();
void GameInteractor_ExecuteOnKaleidoMoveCursorFromSpecialPos(PauseContext* pauseCtx, uint16_t* cursorItem);

// MARK: - Messages
void GameInteractor_ExecuteOnOpenText(uint16_t* textId, bool* loadFromMessageTable);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2965,7 +2965,23 @@ typedef enum {
// ```
// #### `args`
// - `*int32_t (camId)`
VB_SHOULD_LOAD_BG_IMAGE
VB_SHOULD_LOAD_BG_IMAGE,

// #### `result`
// ```c
// false
// ```
// #### `args`
// - None
VB_SKIP_FORCE_PLAY_OCARINA,

// #### `result`
// ```c
// true
// ```
// #### `args`
// - None
VB_HOVER_WITH_ISG,
} GIVanillaBehavior;

#endif
Original file line number Diff line number Diff line change
Expand Up @@ -2154,6 +2154,80 @@ void StaticData::HintTable_Init_Item() {
CustomMessage("a four legged friend", /*german*/"ein vierbeiniger Freund", /*french*/"un puissant animal")});
// /*spanish*/una amiga cuadrúpeda

hintTextTable[RHT_ABILITY_ISG] = HintText(CustomMessage("ISG", /*german*/"ISG", /*french*/"ISG"),
// /*spanish*/ISG
{
CustomMessage("a flashy weapon", /*german*/"ISG", /*french*/"ISG")
// /*spanish*/ISG
}, {
CustomMessage("a permanent hitbox", /*german*/"ISG", /*french*/"ISG")});
// /*spanish*/ISG

hintTextTable[RHT_ABILITY_OI] = HintText(CustomMessage("OI", /*german*/"OI", /*french*/"OI"),
// /*spanish*/OI
{
CustomMessage("a musical bottle", /*german*/"OI", /*french*/"OI")
// /*spanish*/OI
}, {
CustomMessage("a potato of any color", /*german*/"OI", /*french*/"OI")});
// /*spanish*/OI
hintTextTable[RHT_ABILITY_QPA] = HintText(CustomMessage("QPA", /*german*/"QPA", /*french*/"QPA"),
// /*spanish*/QPA
{
CustomMessage("some funky damage", /*german*/"QPA", /*french*/"QPA")
// /*spanish*/QPA
}, {
CustomMessage("some fast hands", /*german*/"QPA", /*french*/"QPA")});
// /*spanish*/QPA
hintTextTable[RHT_ABILITY_HESS] = HintText(CustomMessage("Extended Superslide", /*german*/"Extended Superslide", /*french*/"Extended Superslide"),
// /*spanish*/Extended Superslide
{
CustomMessage("some explosive speed", /*german*/"Extended Superslide", /*french*/"Extended Superslide")
// /*spanish*/Extended Superslide
}, {
CustomMessage("some slick feet", /*german*/"Extended Superslide", /*french*/"Extended Superslide")});
// /*spanish*/Extended Superslide
hintTextTable[RHT_ABILITY_SUPERSLIDE] = HintText(CustomMessage("Superslide", /*german*/"Superslide", /*french*/"Superslide"),
// /*spanish*/Superslide
{
CustomMessage("some straight line speed", /*german*/"Superslide", /*french*/"Superslide")
// /*spanish*/Superslide
}, {
CustomMessage("some shield power", /*german*/"Superslide", /*french*/"Superslide")});
// /*spanish*/Superslide
hintTextTable[RHT_ABILITY_HOVER] = HintText(CustomMessage("Hovering", /*german*/"Hovering", /*french*/"Hovering"),
// /*spanish*/Hovering
{
CustomMessage("a weightless trick", /*german*/"Hovering", /*french*/"Hovering")
// /*spanish*/Hovering
}, {
CustomMessage("gravityn't", /*german*/"Hovering", /*french*/"Hovering")});
// /*spanish*/Hovering
hintTextTable[RHT_ABILITY_EQUIP_SWAP] = HintText(CustomMessage("Equip Swap", /*german*/"Equip Swap", /*french*/"Equip Swap"),
// /*spanish*/Equip Swap
{
CustomMessage("an unbufferable ability", /*german*/"Equip Swap", /*french*/"Equip Swap")
// /*spanish*/Equip Swap
}, {
CustomMessage("a timeless talent", /*german*/"Equip Swap", /*french*/"Equip Swap")});
// /*spanish*/Equip Swap
hintTextTable[RHT_ABILITY_GROUND_JUMP] = HintText(CustomMessage("Ground Jump", /*german*/"Ground Jump", /*french*/"Ground Jump"),
// /*spanish*/Ground Jump
{
CustomMessage("a little leap", /*german*/"Ground Jump", /*french*/"Ground Jump")
// /*spanish*/Ground Jump
}, {
CustomMessage("a beginner's trick", /*german*/"Ground Jump", /*french*/"Ground Jump")});
// /*spanish*/Ground Jump
hintTextTable[RHT_ABILITY_WEIRDSHOT] = HintText(CustomMessage("Weirdshot", /*german*/"Weirdshot", /*french*/"Weirdshot"),
// /*spanish*/Weirdshot
{
CustomMessage("a weird shot", /*german*/"Weirdshot", /*french*/"Weirdshot")
// /*spanish*/Weirdshot
}, {
CustomMessage("a mangled animation", /*german*/"Weirdshot", /*french*/"Weirdshot")});
// /*spanish*/Weirdshot

//What is this used for?
hintTextTable[RHT_HINT_MYSTERIOUS] = HintText(CustomMessage("something mysterious", /*german*/"etwas Mysteriöses", /*french*/"un sacré mystère"));
// /*spanish*/algo misterioso
Expand Down
28 changes: 28 additions & 0 deletions soh/soh/Enhancements/randomizer/3drando/item_pool.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -406,6 +406,34 @@ void GenerateItemPool() {
int powerBracelet = ctx->GetOption(RSK_SHUFFLE_GRAB) ? 1 : 0;
AddItemToPool(RG_PROGRESSIVE_STRENGTH, 4 + powerBracelet, 3 + powerBracelet, 3 + powerBracelet, 3 + powerBracelet);

if (ctx->GetOption(RSK_SHUFFLE_ISG)) {
AddItemToPool(RG_ABILITY_ISG, 2, 1, 1, 1, false);
}
if (ctx->GetOption(RSK_SHUFFLE_OI)) {
AddItemToPool(RG_ABILITY_OI, 2, 1, 1, 1, false);
}
if (ctx->GetOption(RSK_SHUFFLE_QPA)) {
AddItemToPool(RG_ABILITY_QPA, 2, 1, 1, 1, false);
}
if (ctx->GetOption(RSK_SHUFFLE_HESS)) {
AddItemToPool(RG_ABILITY_HESS, 2, 1, 1, 1, false);
}
if (ctx->GetOption(RSK_SHUFFLE_SUPERSLIDE)) {
AddItemToPool(RG_ABILITY_SUPERSLIDE, 2, 1, 1, 1, false);
}
if (ctx->GetOption(RSK_SHUFFLE_HOVER)) {
AddItemToPool(RG_ABILITY_HOVER, 2, 1, 1, 1, false);
}
if (ctx->GetOption(RSK_SHUFFLE_EQUIP_SWAP)) {
AddItemToPool(RG_ABILITY_EQUIP_SWAP, 2, 1, 1, 1, false);
}
if (ctx->GetOption(RSK_SHUFFLE_GROUND_JUMP)) {
AddItemToPool(RG_ABILITY_GROUND_JUMP, 2, 1, 1, 1, false);
}
if (ctx->GetOption(RSK_SHUFFLE_WEIRDSHOT)) {
AddItemToPool(RG_ABILITY_WEIRDSHOT, 2, 1, 1, 1, false);
}

if (ctx->GetOption(RSK_SHUFFLE_CLIMB)) {
AddItemToPool(RG_CLIMB, 2, 1, 1, 1);
}
Expand Down
Loading
Loading