Merge branch 'anchor-next' of garrettjoecox.github.com:garrettjoecox/OOT into let-it-snow

This commit is contained in:
Garrett Cox
2024-12-16 12:34:52 -06:00
68 changed files with 2634 additions and 32 deletions
+4
View File
@@ -2215,6 +2215,10 @@ void Player_PlaySfx(Actor* actor, u16 sfxId) {
// Audio_PlaySoundGeneral(sfxId, &actor->projectedPos, 4, &D_801333E0 , &D_801333E0, &D_801333E8);
Audio_PlaySoundGeneral(sfxId, &actor->projectedPos, 4, &freqMultiplier, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
}
if (actor->id == ACTOR_PLAYER) {
GameInteractor_ExecuteOnPlayerSfx(sfxId);
}
}
void Audio_PlayActorSound2(Actor* actor, u16 sfxId) {
+7
View File
@@ -775,6 +775,13 @@ void EnItem00_Update(Actor* thisx, PlayState* play) {
EnItem00* this = (EnItem00*)thisx;
s32 pad;
// #region SOH [Co-op]
if (Flags_GetCollectible(play, this->collectibleFlag)) {
Actor_Kill(&this->actor);
return;
}
// #endregion
// Rotate some drops when 3D drops are on, otherwise reset rotation back to 0 for billboard effect
if (
(this->actor.params == ITEM00_HEART && this->unk_15A >= 0) ||
@@ -211,7 +211,9 @@ void func_8086ED50(BgBombwall* this, PlayState* play) {
}
void func_8086ED70(BgBombwall* this, PlayState* play) {
if (this->collider.base.acFlags & AC_HIT) {
// #region SOH [Co-op]
if ((this->collider.base.acFlags & AC_HIT) || Flags_GetSwitch(play, this->dyna.actor.params & 0x3F)) {
// #endregion
this->collider.base.acFlags &= ~AC_HIT;
func_8086EDFC(this, play);
Flags_SetSwitch(play, this->dyna.actor.params & 0x3F);
@@ -277,7 +277,9 @@ void BgBreakwall_Wait(BgBreakwall* this, PlayState* play) {
}
}
if (GameInteractor_Should(VB_BG_BREAKWALL_BREAK, this->collider.base.acFlags & 2 || blueFireArrowHit)) {
// #region SOH [Co-op]
if (GameInteractor_Should(VB_BG_BREAKWALL_BREAK, this->collider.base.acFlags & 2 || blueFireArrowHit) || Flags_GetSwitch(play, this->dyna.actor.params & 0x3F)) {
// #endregion
Vec3f effectPos;
s32 wallType = ((this->dyna.actor.params >> 13) & 3) & 0xFF;
@@ -268,7 +268,9 @@ void func_80882E54(BgHakaZou* this, PlayState* play) {
}
void func_80883000(BgHakaZou* this, PlayState* play) {
if (this->collider.base.acFlags & AC_HIT) {
// #region SOH [Co-op]
if ((this->collider.base.acFlags & AC_HIT) || Flags_GetSwitch(play, this->switchFlag)) {
// #endregion
Flags_SetSwitch(play, this->switchFlag);
if (this->dyna.actor.params == STA_GIANT_BIRD_STATUE) {
@@ -126,8 +126,10 @@ void BgHidanDalm_Destroy(Actor* thisx, PlayState* play) {
void BgHidanDalm_Wait(BgHidanDalm* this, PlayState* play) {
Player* player = GET_PLAYER(play);
if ((this->collider.base.acFlags & AC_HIT) && !Player_InCsMode(play) &&
(player->meleeWeaponAnimation == 22 || player->meleeWeaponAnimation == 23)) {
// #region SOH [Co-op]
if (((this->collider.base.acFlags & AC_HIT) && !Player_InCsMode(play) &&
(player->meleeWeaponAnimation == 22 || player->meleeWeaponAnimation == 23)) || Flags_GetSwitch(play, this->switchFlag)) {
// #endregion
this->collider.base.acFlags &= ~AC_HIT;
if ((this->collider.elements[0].info.bumperFlags & BUMP_HIT) ||
(this->collider.elements[1].info.bumperFlags & BUMP_HIT)) {
@@ -278,7 +278,9 @@ void func_80888734(BgHidanHamstep* this) {
}
void func_808887C4(BgHidanHamstep* this, PlayState* play) {
if (this->collider.base.acFlags & AC_HIT) {
// #region SOH [Co-op]
if ((this->collider.base.acFlags & AC_HIT) || Flags_GetSwitch(play, (this->dyna.actor.params >> 8) & 0xFF)) {
// #endregion
OnePointCutscene_Init(play, 3310, 100, &this->dyna.actor, MAIN_CAM);
Audio_PlayActorSound2(&this->dyna.actor, NA_SE_EV_HAMMER_SWITCH);
this->collider.base.acFlags = AC_NONE;
@@ -201,7 +201,9 @@ void func_8088960C(BgHidanHrock* this, PlayState* play) {
}
void func_808896B8(BgHidanHrock* this, PlayState* play) {
if (this->collider.base.acFlags & 2) {
// #region SOH [Co-op]
if ((this->collider.base.acFlags & 2) || Flags_GetSwitch(play, this->unk_16A)) {
// #endregion
this->collider.base.acFlags &= ~2;
this->actionFunc = func_808894B0;
this->dyna.actor.flags |= ACTOR_FLAG_UPDATE_WHILE_CULLED;
@@ -303,7 +303,9 @@ void BgHidanKowarerukabe_Update(Actor* thisx, PlayState* play) {
BgHidanKowarerukabe* this = (BgHidanKowarerukabe*)thisx;
s32 pad;
if (Actor_GetCollidedExplosive(play, &this->collider.base) != NULL) {
// #region SOH [Co-op]
if ((Actor_GetCollidedExplosive(play, &this->collider.base) != NULL) || Flags_GetSwitch(play, (this->dyna.actor.params >> 8) & 0x3F)) {
// #endregion
BgHidanKowarerukabe_Break(this, play);
Flags_SetSwitch(play, (this->dyna.actor.params >> 8) & 0x3F);
@@ -333,10 +333,12 @@ void func_8089107C(BgIceShelter* this, PlayState* play) {
MeltOnIceArrowHit(this, this->cylinder2, type, play);
}
// Default blue fire check
if (this->cylinder1.base.acFlags & AC_HIT) {
// #region SOH [Co-op]
if ((this->cylinder1.base.acFlags & AC_HIT) || Flags_GetSwitch(play, this->dyna.actor.params & 0x3F)) {
this->cylinder1.base.acFlags &= ~AC_HIT;
if ((this->cylinder1.base.ac != NULL) && (this->cylinder1.base.ac->id == ACTOR_EN_ICE_HONO)) {
if (((this->cylinder1.base.ac != NULL) && (this->cylinder1.base.ac->id == ACTOR_EN_ICE_HONO)) || Flags_GetSwitch(play, this->dyna.actor.params & 0x3F)) {
// #endregion
if (type == 4) {
if (this->dyna.actor.parent != NULL) {
this->dyna.actor.parent->freezeTimer = 50;
@@ -142,7 +142,9 @@ void BgJyaBombchuiwa_SetupWaitForExplosion(BgJyaBombchuiwa* this, PlayState* pla
}
void BgJyaBombchuiwa_WaitForExplosion(BgJyaBombchuiwa* this, PlayState* play) {
if ((this->collider.base.acFlags & AC_HIT) || (this->timer > 0)) {
// #region SOH [Co-op]
if (((this->collider.base.acFlags & AC_HIT) || (this->timer > 0)) || Flags_GetSwitch(play, this->actor.params & 0x3F)) {
// #endregion
if (this->timer == 0) {
OnePointCutscene_Init(play, 3410, -99, &this->actor, MAIN_CAM);
}
@@ -163,7 +163,9 @@ void BgJyaBombiwa_Break(BgJyaBombiwa* this, PlayState* play) {
void BgJyaBombiwa_Update(Actor* thisx, PlayState* play) {
BgJyaBombiwa* this = (BgJyaBombiwa*)thisx;
if (this->collider.base.acFlags & AC_HIT) {
// #region SOH [Co-op]
if ((this->collider.base.acFlags & AC_HIT) || Flags_GetSwitch(play, this->dyna.actor.params & 0x3F)) {
// #endregion
BgJyaBombiwa_Break(this, play);
Flags_SetSwitch(play, this->dyna.actor.params & 0x3F);
SoundSource_PlaySfxAtFixedWorldPos(play, &this->dyna.actor.world.pos, 40, NA_SE_EV_WALL_BROKEN);
@@ -467,7 +467,9 @@ void BgMizuBwall_SpawnDebris(BgMizuBwall* this, PlayState* play) {
void BgMizuBwall_Idle(BgMizuBwall* this, PlayState* play) {
BgMizuBwall_SetAlpha(this, play);
if (this->collider.base.acFlags & AC_HIT) {
// #region SOH [Co-op]
if ((this->collider.base.acFlags & AC_HIT) || Flags_GetSwitch(play, ((u16)this->dyna.actor.params >> 8) & 0x3F)) {
// #endregion
this->collider.base.acFlags &= ~AC_HIT;
Flags_SetSwitch(play, ((u16)this->dyna.actor.params >> 8) & 0x3F);
this->breakTimer = 1;
@@ -183,7 +183,9 @@ void BgSpot08Bakudankabe_Destroy(Actor* thisx, PlayState* play) {
void BgSpot08Bakudankabe_Update(Actor* thisx, PlayState* play) {
BgSpot08Bakudankabe* this = (BgSpot08Bakudankabe*)thisx;
if (this->collider.base.acFlags & AC_HIT) {
// #region SOH [Co-op]
if ((this->collider.base.acFlags & AC_HIT) || Flags_GetSwitch(play, (this->dyna.actor.params & 0x3F))) {
// #endregion
func_808B0324(this, play);
Flags_SetSwitch(play, (this->dyna.actor.params & 0x3F));
SoundSource_PlaySfxAtFixedWorldPos(play, &this->dyna.actor.world.pos, 40, NA_SE_EV_WALL_BROKEN);
@@ -135,7 +135,9 @@ void BgSpot11Bakudankabe_Destroy(Actor* thisx, PlayState* play) {
void BgSpot11Bakudankabe_Update(Actor* thisx, PlayState* play) {
BgSpot11Bakudankabe* this = (BgSpot11Bakudankabe*)thisx;
if (this->collider.base.acFlags & AC_HIT) {
// #region SOH [Co-op]
if ((this->collider.base.acFlags & AC_HIT) || Flags_GetSwitch(play, (this->dyna.actor.params & 0x3F))) {
// #endregion
func_808B2218(this, play);
Flags_SetSwitch(play, (this->dyna.actor.params & 0x3F));
SoundSource_PlaySfxAtFixedWorldPos(play, &D_808B2738, 40, NA_SE_EV_WALL_BROKEN);
@@ -114,7 +114,9 @@ void BgSpot17Bakudankabe_Destroy(Actor* thisx, PlayState* play) {
void BgSpot17Bakudankabe_Update(Actor* thisx, PlayState* play) {
BgSpot17Bakudankabe* this = (BgSpot17Bakudankabe*)thisx;
if (this->dyna.actor.xzDistToPlayer < 650.0f && func_80033684(play, &this->dyna.actor) != NULL) {
// #region SOH [Co-op]
if ((this->dyna.actor.xzDistToPlayer < 650.0f && func_80033684(play, &this->dyna.actor) != NULL) || Flags_GetSwitch(play, (this->dyna.actor.params & 0x3F))) {
// #endregion
func_808B6BC0(this, play);
Flags_SetSwitch(play, (this->dyna.actor.params & 0x3F));
SoundSource_PlaySfxAtFixedWorldPos(play, &this->dyna.actor.world.pos, 40, NA_SE_EV_WALL_BROKEN);
@@ -146,7 +146,9 @@ void func_808BEFF4(BgYdanMaruta* this, PlayState* play) {
}
void func_808BF078(BgYdanMaruta* this, PlayState* play) {
if (this->collider.base.acFlags & AC_HIT) {
// #region SOH [Co-op]
if ((this->collider.base.acFlags & AC_HIT) || Flags_GetSwitch(play, this->switchFlag)) {
// #endregion
this->unk_16A = 20;
Flags_SetSwitch(play, this->switchFlag);
Sfx_PlaySfxCentered(NA_SE_SY_CORRECT_CHIME);
@@ -282,6 +282,12 @@ void BgYdanSp_FloorWebIdle(BgYdanSp* this, PlayState* play) {
webPos.x = this->dyna.actor.world.pos.x;
webPos.y = this->dyna.actor.world.pos.y - 50.0f;
webPos.z = this->dyna.actor.world.pos.z;
// #region SOH [Co-op]
if (Flags_GetSwitch(play, this->isDestroyedSwitchFlag)) {
BgYdanSp_BurnWeb(this, play);
return;
}
// #endregion
if (Player_IsBurningStickInRange(play, &webPos, 70.0f, 50.0f) != 0) {
this->dyna.actor.home.pos.x = player->meleeWeaponInfo[0].tip.x;
this->dyna.actor.home.pos.z = player->meleeWeaponInfo[0].tip.z;
@@ -411,6 +417,11 @@ void BgYdanSp_WallWebIdle(BgYdanSp* this, PlayState* play) {
BgYdanSp_BurnWeb(this, play);
}
}
// #region SOH [Co-op]
if (Flags_GetSwitch(play, this->isDestroyedSwitchFlag)) {
BgYdanSp_BurnWeb(this, play);
}
// #endregion
CollisionCheck_SetAC(play, &play->colChkCtx, &this->trisCollider.base);
}
@@ -6,6 +6,7 @@
#include "z_door_gerudo.h"
#include "objects/object_door_gerudo/object_door_gerudo.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
#define FLAGS 0
@@ -103,6 +104,7 @@ void func_8099485C(DoorGerudo* this, PlayState* play) {
gSaveContext.inventory.dungeonKeys[gSaveContext.mapIndex] -= 1;
Flags_SetSwitch(play, this->dyna.actor.params & 0x3F);
Audio_PlayActorSound2(&this->dyna.actor, NA_SE_EV_CHAIN_KEY_UNLOCK);
GameInteractor_ExecuteOnDungeonKeyUsedHooks(gSaveContext.mapIndex);
} else {
s32 direction = func_80994750(this, play);
@@ -379,6 +379,7 @@ void func_80996B0C(DoorShutter* this, PlayState* play) {
if (this->doorType != SHUTTER_BOSS) {
gSaveContext.inventory.dungeonKeys[gSaveContext.mapIndex]--;
Audio_PlayActorSound2(&this->dyna.actor, NA_SE_EV_CHAIN_KEY_UNLOCK);
GameInteractor_ExecuteOnDungeonKeyUsedHooks(gSaveContext.mapIndex);
} else {
Audio_PlayActorSound2(&this->dyna.actor, NA_SE_EV_CHAIN_KEY_UNLOCK_B);
}
@@ -645,6 +646,11 @@ void DoorShutter_Update(Actor* thisx, PlayState* play) {
if (!(player->stateFlags1 & (PLAYER_STATE1_TALKING | PLAYER_STATE1_DEAD | PLAYER_STATE1_GETTING_ITEM | PLAYER_STATE1_IN_ITEM_CS)) || (this->actionFunc == DoorShutter_SetupType)) {
this->actionFunc(this, play);
}
// #region SOH [Co-op]
if (Flags_GetSwitch(play, this->dyna.actor.params & 0x3F)) {
DECR(this->unk_16E);
}
// #endregion
}
Gfx* func_80997838(PlayState* play, DoorShutter* this, Gfx* p) {
@@ -11,6 +11,7 @@
#include "objects/object_mizu_objects/object_mizu_objects.h"
#include "objects/object_haka_door/object_haka_door.h"
#include "soh/ResourceManagerHelpers.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
#include "soh/Enhancements/Holiday/Archez.h"
@@ -206,6 +207,7 @@ void EnDoor_Idle(EnDoor* this, PlayState* play) {
gSaveContext.inventory.dungeonKeys[gSaveContext.mapIndex]--;
Flags_SetSwitch(play, this->actor.params & 0x3F);
Audio_PlayActorSound2(&this->actor, NA_SE_EV_CHAIN_KEY_UNLOCK);
GameInteractor_ExecuteOnDungeonKeyUsedHooks(gSaveContext.mapIndex);
}
} else if (!Player_InCsMode(play)) {
if (fabsf(playerPosRelToDoor.y) < 20.0f && fabsf(playerPosRelToDoor.x) < 20.0f &&
@@ -233,6 +235,11 @@ void EnDoor_Idle(EnDoor* this, PlayState* play) {
this->actionFunc = EnDoor_AjarOpen;
}
}
// #region SOH [Co-op]
if (Flags_GetSwitch(play, this->actor.params & 0x3F)) {
DECR(this->lockTimer);
}
// #endregion
}
void EnDoor_WaitForCheck(EnDoor* this, PlayState* play) {
@@ -149,6 +149,13 @@ void func_80AFB950(EnSi* this, PlayState* play) {
void EnSi_Update(Actor* thisx, PlayState* play) {
EnSi* this = (EnSi*)thisx;
// #region SOH [Co-op]
if (GET_GS_FLAGS((thisx->params & 0x1F00) >> 8) & (thisx->params & 0xFF)) {
Actor_Kill(&this->actor);
return;
}
// #endregion
Actor_MoveXZGravity(&this->actor);
Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4);
this->actionFunc(this, play);
@@ -916,6 +916,13 @@ void func_80B0E9BC(EnSw* this, PlayState* play) {
void EnSw_Update(Actor* thisx, PlayState* play) {
EnSw* this = (EnSw*)thisx;
// #region SOH [Co-op]
if (GET_GS_FLAGS((thisx->params & 0x1F00) >> 8) & (thisx->params & 0xFF)) {
Actor_Kill(&this->actor);
return;
}
// #endregion
SkelAnime_Update(&this->skelAnime);
func_80B0C9F0(this, play);
this->actionFunc(this, play);
@@ -55,6 +55,13 @@ void ItemBHeart_Destroy(Actor* thisx, PlayState* play) {
void ItemBHeart_Update(Actor* thisx, PlayState* play) {
ItemBHeart* this = (ItemBHeart*)thisx;
// #region SOH [Co-op]
if (Flags_GetCollectible(play, 0x1F)) {
Actor_Kill(&this->actor);
return;
}
// #endregion
func_80B85264(this, play);
Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4);
if (Actor_HasParent(&this->actor, play)) {
@@ -125,8 +125,10 @@ void ObjBombiwa_Update(Actor* thisx, PlayState* play) {
ObjBombiwa* this = (ObjBombiwa*)thisx;
s32 pad;
// #region SOH [Co-op]
if ((func_80033684(play, &this->actor) != NULL) ||
((this->collider.base.acFlags & AC_HIT) && (this->collider.info.acHitInfo->toucher.dmgFlags & 0x40000040))) {
((this->collider.base.acFlags & AC_HIT) && (this->collider.info.acHitInfo->toucher.dmgFlags & 0x40000040)) || Flags_GetSwitch(play, this->actor.params & 0x3F)) {
// #endregion
ObjBombiwa_Break(this, play);
Flags_SetSwitch(play, this->actor.params & 0x3F);
SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 80, NA_SE_EV_WALL_BROKEN);
@@ -171,10 +171,12 @@ void ObjHamishi_Update(Actor* thisx, PlayState* play) {
ObjHamishi_Shake(this);
if ((this->collider.base.acFlags & AC_HIT) && (this->collider.info.acHitInfo->toucher.dmgFlags & 0x40000040)) {
// #region SOH [Co-op]
if (((this->collider.base.acFlags & AC_HIT) && (this->collider.info.acHitInfo->toucher.dmgFlags & 0x40000040)) || Flags_GetSwitch(play, this->actor.params & 0x3F)) {
this->collider.base.acFlags &= ~AC_HIT;
this->hitCount++;
if (this->hitCount < 2) {
if (this->hitCount < 2 && !Flags_GetSwitch(play, this->actor.params & 0x3F)) {
// #endregion
this->shakeFrames = 15;
this->shakePosSize = 2.0f;
this->shakeRotSize = 400.0f;