From 255c4599bf847013d323d7ec7b6db81c072bdd1b Mon Sep 17 00:00:00 2001 From: Blythe Date: Fri, 14 Apr 2023 23:56:23 -0500 Subject: [PATCH 01/12] ovl_En_Slime & object_slime OK and documented (#1175) * decomped init, draw * started slime * finished func decomp en_slime * object_slime and en_slime updates * updated a few names * finished up some naming * en_slime and object_slime OK and documented * slime xml cleanup * Code cleanup round 1 * Cleanup 1 - missed a note * Fixed improper use of bgcheck flags * Some cleanup * Namefix, name cleanup * Function name cleanup, misc cleanup * More name cleanup (pre-merge) * Update color filter flag constants * Tidying --------- Co-authored-by: Blythe Hospelhorn <35576053+bhospelhorn@users.noreply.github.com> --- assets/xml/objects/object_slime.xml | 23 +- spec | 4 +- src/overlays/actors/ovl_En_Slime/z_en_slime.c | 1273 +++++++++++++++-- src/overlays/actors/ovl_En_Slime/z_en_slime.h | 34 +- tools/disasm/functions.txt | 74 +- tools/disasm/variables.txt | 28 +- 6 files changed, 1263 insertions(+), 173 deletions(-) diff --git a/assets/xml/objects/object_slime.xml b/assets/xml/objects/object_slime.xml index f17633eff..c8516e45f 100644 --- a/assets/xml/objects/object_slime.xml +++ b/assets/xml/objects/object_slime.xml @@ -1,14 +1,17 @@  + - - - - - - - - - - + + + + + + + + + + + + diff --git a/spec b/spec index a10cb67ce..dcf76f66b 100644 --- a/spec +++ b/spec @@ -2558,9 +2558,7 @@ beginseg name "ovl_En_Slime" compress include "build/src/overlays/actors/ovl_En_Slime/z_en_slime.o" - include "build/data/ovl_En_Slime/ovl_En_Slime.data.o" - include "build/data/ovl_En_Slime/ovl_En_Slime.bss.o" - include "build/data/ovl_En_Slime/ovl_En_Slime.reloc.o" + include "build/src/overlays/actors/ovl_En_Slime/ovl_En_Slime_reloc.o" endseg beginseg diff --git a/src/overlays/actors/ovl_En_Slime/z_en_slime.c b/src/overlays/actors/ovl_En_Slime/z_en_slime.c index 2b8e5f4c6..55d6cd8e0 100644 --- a/src/overlays/actors/ovl_En_Slime/z_en_slime.c +++ b/src/overlays/actors/ovl_En_Slime/z_en_slime.c @@ -10,30 +10,62 @@ #define THIS ((EnSlime*)thisx) +#define ICE_BLOCK_TIMER_MAX 254 +#define ICE_BLOCK_UNUSED (ICE_BLOCK_TIMER_MAX + 1) + +typedef enum EnSlimeEyeTexture { + /* 0 */ EN_SLIME_EYETEX_OPEN, + /* 1 */ EN_SLIME_EYETEX_HALF, + /* 2 */ EN_SLIME_EYETEX_CLOSED, + /* 3 */ EN_SLIME_EYETEX_HALF2, + /* 4 */ EN_SLIME_EYETEX_MAX +} EnSlimeEyeTexture; + +typedef enum EnSlimeDamageEffect { + /* 0x0 */ EN_SLIME_DMGEFF_NORMAL, + /* 0x1 */ EN_SLIME_DMGEFF_STUN, + /* 0x3 */ EN_SLIME_DMGEFF_FREEZE = 0x3, + /* 0x4 */ EN_SLIME_DMGEFF_LIGHT, + /* 0x5 */ EN_SLIME_DMGEFF_ELECTRIC, + /* 0xE */ EN_SLIME_DMGEFF_HOOKSHOT = 0xE, + /* 0xF */ EN_SLIME_DMGEFF_BLUNT, +} EnSlimeDamageEffect; + void EnSlime_Init(Actor* thisx, PlayState* play); void EnSlime_Destroy(Actor* thisx, PlayState* play); void EnSlime_Update(Actor* thisx, PlayState* play); void EnSlime_Draw(Actor* thisx, PlayState* play); -void func_80A2F140(EnSlime* this, PlayState* play); -void func_80A2F1A4(EnSlime* this, PlayState* play); -void func_80A2F418(EnSlime* this, PlayState* play); -void func_80A2F6CC(EnSlime* this, PlayState* play); -void func_80A2F8E0(EnSlime* this, PlayState* play); -void func_80A2FA88(EnSlime* this, PlayState* play); -void func_80A2FBA0(EnSlime* this, PlayState* play); -void func_80A2FE38(EnSlime* this, PlayState* play); -void func_80A30344(EnSlime* this, PlayState* play); -void func_80A304B8(EnSlime* this, PlayState* play); -void func_80A30820(EnSlime* this, PlayState* play); -void func_80A30944(EnSlime* this, PlayState* play); -void func_80A30A20(EnSlime* this, PlayState* play); -void func_80A30AE4(EnSlime* this, PlayState* play); -void func_80A30C2C(EnSlime* this, PlayState* play); -void func_80A30CEC(EnSlime* this, PlayState* play); +void EnSlime_SetupInitializeIdle(EnSlime* this); +void EnSlime_InitializeIdle(EnSlime* this, PlayState* play); +void EnSlime_SetupIdle(EnSlime* this); +void EnSlime_Idle(EnSlime* this, PlayState* play); +void EnSlime_SetupMoveInDirection(EnSlime* this); +void EnSlime_MoveInDirection(EnSlime* this, PlayState* play); +void EnSlime_SetupMoveToHome(EnSlime* this); +void EnSlime_MoveToHome(EnSlime* this, PlayState* play); +void EnSlime_SetupTurnToPlayer(EnSlime* this); +void EnSlime_TurnToPlayer(EnSlime* this, PlayState* play); +void EnSlime_SetupJump(EnSlime* this); +void EnSlime_Jump(EnSlime* this, PlayState* play); +void EnSlime_SetupLand(EnSlime* this); +void EnSlime_Land(EnSlime* this, PlayState* play); +void EnSlime_ReactToBluntHit(EnSlime* this, PlayState* play); +void EnSlime_Damaged(EnSlime* this, PlayState* play); +void EnSlime_SetupDead(EnSlime* this); +void EnSlime_Dead(EnSlime* this, PlayState* play); +void EnSlime_SpawnIceBlock(EnSlime* this, PlayState* play); +void EnSlime_SetupIceBlock(EnSlime* this); +void EnSlime_IceBlock(EnSlime* this, PlayState* play); +void EnSlime_Stun(EnSlime* this, PlayState* play); +void EnSlime_SetupIceBlockThaw(EnSlime* this); +void EnSlime_IceBlockThaw(EnSlime* this, PlayState* play); +void EnSlime_SetupWaitForRevive(EnSlime* this); +void EnSlime_WaitForRevive(EnSlime* this, PlayState* play); +void EnSlime_SetupRevive(EnSlime* this); +void EnSlime_Revive(EnSlime* this, PlayState* play); -#if 0 -ActorInit En_Slime_InitVars = { +const ActorInit En_Slime_InitVars = { ACTOR_EN_SLIME, ACTORCAT_ENEMY, FLAGS, @@ -45,146 +77,1171 @@ ActorInit En_Slime_InitVars = { (ActorFunc)EnSlime_Draw, }; -// static ColliderCylinderInit sCylinderInit = { -static ColliderCylinderInit D_80A31AF0 = { - { COLTYPE_NONE, AT_ON | AT_TYPE_ENEMY, AC_ON | AC_TYPE_PLAYER, OC1_ON | OC1_TYPE_ALL, OC2_TYPE_1, COLSHAPE_CYLINDER, }, - { ELEMTYPE_UNK0, { 0xF7CFFFFF, 0x00, 0x04 }, { 0xF7CFFFFF, 0x00, 0x00 }, TOUCH_ON | TOUCH_SFX_HARD, BUMP_ON | BUMP_HOOKABLE, OCELEM_ON, }, +static ColliderCylinderInit sCylinderInit = { + { + COLTYPE_NONE, + AT_ON | AT_TYPE_ENEMY, + AC_ON | AC_TYPE_PLAYER, + OC1_ON | OC1_TYPE_ALL, + OC2_TYPE_1, + COLSHAPE_CYLINDER, + }, + { + ELEMTYPE_UNK0, + { 0xF7CFFFFF, 0x00, 0x04 }, + { 0xF7CFFFFF, 0x00, 0x00 }, + TOUCH_ON | TOUCH_SFX_HARD, + BUMP_ON | BUMP_HOOKABLE, + OCELEM_ON, + }, { 22, 35, 0, { 0, 0, 0 } }, }; -// static DamageTable sDamageTable = { -static DamageTable D_80A31B1C = { - /* Deku Nut */ DMG_ENTRY(0, 0x1), - /* Deku Stick */ DMG_ENTRY(3, 0x0), - /* Horse trample */ DMG_ENTRY(1, 0x0), - /* Explosives */ DMG_ENTRY(1, 0x0), - /* Zora boomerang */ DMG_ENTRY(1, 0x0), - /* Normal arrow */ DMG_ENTRY(1, 0x0), - /* UNK_DMG_0x06 */ DMG_ENTRY(0, 0x0), - /* Hookshot */ DMG_ENTRY(0, 0xE), - /* Goron punch */ DMG_ENTRY(0, 0xF), - /* Sword */ DMG_ENTRY(1, 0x0), - /* Goron pound */ DMG_ENTRY(0, 0xF), - /* Fire arrow */ DMG_ENTRY(2, 0x0), - /* Ice arrow */ DMG_ENTRY(2, 0x3), - /* Light arrow */ DMG_ENTRY(2, 0x4), - /* Goron spikes */ DMG_ENTRY(1, 0x0), - /* Deku spin */ DMG_ENTRY(1, 0x0), - /* Deku bubble */ DMG_ENTRY(0, 0xF), - /* Deku launch */ DMG_ENTRY(2, 0x0), - /* UNK_DMG_0x12 */ DMG_ENTRY(0, 0x1), - /* Zora barrier */ DMG_ENTRY(1, 0x5), - /* Normal shield */ DMG_ENTRY(0, 0x0), - /* Light ray */ DMG_ENTRY(0, 0x0), - /* Thrown object */ DMG_ENTRY(0, 0xF), - /* Zora punch */ DMG_ENTRY(1, 0x0), - /* Spin attack */ DMG_ENTRY(1, 0x0), - /* Sword beam */ DMG_ENTRY(0, 0x0), - /* Normal Roll */ DMG_ENTRY(0, 0x0), - /* UNK_DMG_0x1B */ DMG_ENTRY(0, 0x0), - /* UNK_DMG_0x1C */ DMG_ENTRY(0, 0x0), - /* Unblockable */ DMG_ENTRY(0, 0x0), - /* UNK_DMG_0x1E */ DMG_ENTRY(0, 0x0), - /* Powder Keg */ DMG_ENTRY(1, 0x0), +static DamageTable sDamageTable = { + /* Deku Nut */ DMG_ENTRY(0, EN_SLIME_DMGEFF_STUN), + /* Deku Stick */ DMG_ENTRY(3, EN_SLIME_DMGEFF_NORMAL), + /* Horse trample */ DMG_ENTRY(1, EN_SLIME_DMGEFF_NORMAL), + /* Explosives */ DMG_ENTRY(1, EN_SLIME_DMGEFF_NORMAL), + /* Zora boomerang */ DMG_ENTRY(1, EN_SLIME_DMGEFF_NORMAL), + /* Normal arrow */ DMG_ENTRY(1, EN_SLIME_DMGEFF_NORMAL), + /* UNK_DMG_0x06 */ DMG_ENTRY(0, EN_SLIME_DMGEFF_NORMAL), + /* Hookshot */ DMG_ENTRY(0, EN_SLIME_DMGEFF_HOOKSHOT), + /* Goron punch */ DMG_ENTRY(0, EN_SLIME_DMGEFF_BLUNT), + /* Sword */ DMG_ENTRY(1, EN_SLIME_DMGEFF_NORMAL), + /* Goron pound */ DMG_ENTRY(0, EN_SLIME_DMGEFF_BLUNT), + /* Fire arrow */ DMG_ENTRY(2, EN_SLIME_DMGEFF_NORMAL), + /* Ice arrow */ DMG_ENTRY(2, EN_SLIME_DMGEFF_FREEZE), + /* Light arrow */ DMG_ENTRY(2, EN_SLIME_DMGEFF_LIGHT), + /* Goron spikes */ DMG_ENTRY(1, EN_SLIME_DMGEFF_NORMAL), + /* Deku spin */ DMG_ENTRY(1, EN_SLIME_DMGEFF_NORMAL), + /* Deku bubble */ DMG_ENTRY(0, EN_SLIME_DMGEFF_BLUNT), + /* Deku launch */ DMG_ENTRY(2, EN_SLIME_DMGEFF_NORMAL), + /* UNK_DMG_0x12 */ DMG_ENTRY(0, EN_SLIME_DMGEFF_STUN), + /* Zora barrier */ DMG_ENTRY(1, EN_SLIME_DMGEFF_ELECTRIC), + /* Normal shield */ DMG_ENTRY(0, EN_SLIME_DMGEFF_NORMAL), + /* Light ray */ DMG_ENTRY(0, EN_SLIME_DMGEFF_NORMAL), + /* Thrown object */ DMG_ENTRY(0, EN_SLIME_DMGEFF_BLUNT), + /* Zora punch */ DMG_ENTRY(1, EN_SLIME_DMGEFF_NORMAL), + /* Spin attack */ DMG_ENTRY(1, EN_SLIME_DMGEFF_NORMAL), + /* Sword beam */ DMG_ENTRY(0, EN_SLIME_DMGEFF_NORMAL), + /* Normal Roll */ DMG_ENTRY(0, EN_SLIME_DMGEFF_NORMAL), + /* UNK_DMG_0x1B */ DMG_ENTRY(0, EN_SLIME_DMGEFF_NORMAL), + /* UNK_DMG_0x1C */ DMG_ENTRY(0, EN_SLIME_DMGEFF_NORMAL), + /* Unblockable */ DMG_ENTRY(0, EN_SLIME_DMGEFF_NORMAL), + /* UNK_DMG_0x1E */ DMG_ENTRY(0, EN_SLIME_DMGEFF_NORMAL), + /* Powder Keg */ DMG_ENTRY(1, EN_SLIME_DMGEFF_NORMAL), }; -// sColChkInfoInit -static CollisionCheckInfoInit D_80A31B3C = { 1, 22, 35, 60 }; +static CollisionCheckInfoInit sColChkInfoInit = { 1, 22, 35, 60 }; -// static InitChainEntry sInitChain[] = { -static InitChainEntry D_80A31B54[] = { +static TexturePtr sEyeTextures[] = { + gChuchuEyeOpenTex, + gChuchuEyeHalfTex, + gChuchuEyeClosedTex, + gChuchuEyeHalfTex, +}; + +static InitChainEntry sInitChain[] = { ICHAIN_F32(gravity, -2, ICHAIN_CONTINUE), ICHAIN_F32(targetArrowOffset, 6000, ICHAIN_STOP), }; -#endif +static s32 sTexturesDesegmented = false; -extern ColliderCylinderInit D_80A31AF0; -extern DamageTable D_80A31B1C; -extern CollisionCheckInfoInit D_80A31B3C; -extern InitChainEntry D_80A31B54[]; +static Color_RGBA8 sBubblePrimColor = { 255, 255, 255, 255 }; +static Color_RGBA8 sBubbleEnvColor = { 150, 150, 150, 0 }; +static Vec3f sBubbleAccel = { 0.0f, -0.8f, 0.0f }; -extern UNK_TYPE D_060004C0; -extern UNK_TYPE D_06000828; +static Color_RGBA8 sPrimColors[] = { + { 255, 255, 255, 255 }, + { 255, 255, 0, 255 }, + { 255, 255, 200, 255 }, + { 225, 200, 255, 255 }, +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/EnSlime_Init.s") +static Color_RGBA8 sEnvColors[] = { + { 140, 255, 195, 255 }, + { 50, 255, 0, 255 }, + { 255, 180, 0, 255 }, + { 255, 50, 155, 255 }, +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/EnSlime_Destroy.s") +static Vec3f sLimbPosOffsets[EN_SLIME_LIMBPOS_COUNT] = { + { 2000.0f, 2000.0f, 0.0f }, { -1500.0f, 2500.0f, -500.0f }, { -500.0f, 1000.0f, 2500.0f }, + { 0.0f, 4000.0f, 0.0f }, { 0.0f, 2000.0f, -2000.0f }, +}; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A2EFAC.s") +AnimatedMaterial* sSlimeTexAnim; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A2F028.s") +void EnSlime_Init(Actor* thisx, PlayState* play) { + EnSlime* this = THIS; + s32 reviveTimeSeconds; + s32 i; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A2F0A8.s") + Actor_ProcessInitChain(&this->actor, sInitChain); + Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); + CollisionCheck_SetInfo(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit); + ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 38.0f); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A2F110.s") + this->iceBlockTimer = ICE_BLOCK_UNUSED; + this->eyeTexIndex = EN_SLIME_EYETEX_OPEN; + this->wobbleRot.y = 0.0f; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A2F140.s") + // Sets maximum distance chuchu will move from its home before turning around. + if (this->actor.shape.rot.x <= 0) { + this->distLimit = 30000.0f; + } else { + this->distLimit = this->actor.shape.rot.x * 40.0f; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A2F180.s") + this->actor.shape.rot.x = 0; + reviveTimeSeconds = EN_SLIME_GET_REVIVE_TIME(&this->actor); + this->actor.shape.rot.z = 0; + this->actor.params &= 0xFF; + if (reviveTimeSeconds == 0xFF) { + reviveTimeSeconds = 0; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A2F1A4.s") + // Upper byte of actorParams at init is # of seconds past 10s to revive. + this->reviveTime = (reviveTimeSeconds * 20) + 200; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A2F354.s") + // Update addresses of texture assets (if another instance hasn't already) + if (!sTexturesDesegmented) { + for (i = 0; i < EN_SLIME_EYETEX_MAX; i++) { + sEyeTextures[i] = Lib_SegmentedToVirtual(sEyeTextures[i]); + } + sSlimeTexAnim = Lib_SegmentedToVirtual(gChuchuSlimeFlowTexAnim); + sTexturesDesegmented = true; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A2F418.s") + // Set hint IDs and drop item icon depending on chuchu color + if (EN_SLIME_GET_TYPE(&this->actor) == EN_SLIME_TYPE_YELLOW) { + this->itemDropTex = Lib_SegmentedToVirtual(gDropArrows1Tex); + this->actor.hintId = TATL_HINT_ID_YELLOW_CHUCHU; + } else if (EN_SLIME_GET_TYPE(&this->actor) == EN_SLIME_TYPE_GREEN) { + this->itemDropTex = Lib_SegmentedToVirtual(gDropMagicSmallTex); + this->actor.hintId = TATL_HINT_ID_GREEN_CHUCHU; + } else if (EN_SLIME_GET_TYPE(&this->actor) == EN_SLIME_TYPE_RED) { + this->itemDropTex = Lib_SegmentedToVirtual(gDropRecoveryHeartTex); + this->actor.hintId = TATL_HINT_ID_RED_CHUCHU; + } else { + this->actor.hintId = TATL_HINT_ID_BLUE_CHUCHU; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A2F684.s") + // Sets actor scale and initial action func + EnSlime_SetupInitializeIdle(this); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A2F6CC.s") +void EnSlime_Destroy(Actor* thisx, PlayState* play) { + EnSlime* this = THIS; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A2F8B4.s") + Collider_DestroyCylinder(play, &this->collider); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A2F8E0.s") +/** + * Upon immobilization via ice arrow (for chuchu types outside of blue), + * initialize ice visual effects before chuchu enters immobile state. + */ +void EnSlime_Freeze(EnSlime* this) { + this->drawDmgEffType = ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX; + this->drawDmgEffScale = 0.4f; + this->collider.base.colType = COLTYPE_HIT3; + this->drawDmgEffFrozenSteamScale = 0.6f; + this->drawDmgEffAlpha = 1.0f; + this->timer = 80; + this->actor.flags &= ~ACTOR_FLAG_400; + Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_XLU, 80); +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A2F9A0.s") +/** + * If stunned ice effect is active (ie. non-blue chuchu was frozen by ice arrow), + * initialize thaw and spawn thawing effect. + */ +void EnSlime_Thaw(EnSlime* this, PlayState* play) { + if (this->drawDmgEffType == ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) { + this->drawDmgEffType = 0; // So it's not triggered again until Freeze has been called again. + this->collider.base.colType = COLTYPE_NONE; + this->drawDmgEffAlpha = 0.0f; + Actor_SpawnIceEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), 2, 0.2f, 0.2f); + this->actor.flags |= ACTOR_FLAG_200; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A2FA88.s") +/** + * If blink animation is in progress, advance to next frame. + * If eyes are open, randomly (5% chance) initialize new blink cycle. + */ +void EnSlime_Blink(EnSlime* this) { + if (this->eyeTexIndex != EN_SLIME_EYETEX_OPEN) { + this->eyeTexIndex++; + if (this->eyeTexIndex == EN_SLIME_EYETEX_MAX) { + this->eyeTexIndex = EN_SLIME_EYETEX_OPEN; + } + } else if (Rand_ZeroOne() < 0.05f) { + this->eyeTexIndex = EN_SLIME_EYETEX_HALF; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A2FB60.s") +/** + * Set the actor's initial scale and action function. + */ +void EnSlime_SetupInitializeIdle(EnSlime* this) { + this->actor.scale.x = 0.008f; + this->actor.scale.z = 0.008f; + this->actor.scale.y = 0.011f; + this->actionFunc = EnSlime_InitializeIdle; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A2FBA0.s") +/** + * Once actor touches the ground, it starts its idle behavior. + * This function is only called right after the actor is first initialized. + * It is not set as the action function again. + */ +void EnSlime_InitializeIdle(EnSlime* this, PlayState* play) { + if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { + this->actor.flags &= ~ACTOR_FLAG_10; + EnSlime_SetupIdle(this); + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A2FD94.s") +/** + * Set or restore idle action state. + * Sets timer to 25 and cycles to SitIdle action. + */ +void EnSlime_SetupIdle(EnSlime* this) { + this->timer = 25; + this->actor.speed = 0.0f; + this->actionFunc = EnSlime_Idle; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A2FE38.s") +/** + * Sit idle for one frame, updating rotation and scale to give + * the actor an amorphous, oozing effect. + * Chuchu will engage player if player is visible and + * close enough to it. + */ +void EnSlime_Idle(EnSlime* this, PlayState* play) { + f32 timerFactor; + f32 scale; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A30018.s") + this->timer--; + timerFactor = sqrtf(this->timer) * 0.2f; + EnSlime_Blink(this); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A30344.s") + scale = ((sin_rad(this->timer * (2.0f * M_PI / 5.0f)) * (0.13f * timerFactor)) + 1.0f) * 0.01f; + this->actor.scale.x = scale; + this->actor.scale.z = scale; + if (this->timer < 24) { + this->actor.scale.y = ((cos_rad(this->timer * (2.0f * M_PI / 5.0f)) * (0.05f * timerFactor)) + 1.0f) * 0.01f; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A30454.s") + this->actor.shape.rot.x = randPlusMinusPoint5Scaled(0x200) * timerFactor; + this->actor.shape.rot.z = randPlusMinusPoint5Scaled(0x200) * timerFactor; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A304B8.s") + // If player is not wearing the stone mask, is within 280 units of the chuchu, + // and the chuchu is facing the player, initialize chase/attack cycle. + if ((Player_GetMask(play) != PLAYER_MASK_STONE) && (this->actor.xzDistToPlayer < 280.0f) && + Actor_IsFacingPlayer(&this->actor, 0x5000)) { + EnSlime_SetupTurnToPlayer(this); + } else if (this->timer == 0) { + // Start moving (remaining idle) + EnSlime_SetupMoveInDirection(this); + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A3072C.s") +/** + * Reset the action timer (to 120), then select a new direction for + * chuchu to move. + */ +void EnSlime_SetupMoveInDirection(EnSlime* this) { + this->timer = 120; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A30778.s") + // If actor is more than 120 units from its home, set the new direction to be towards its home. + // Otherwise, the new direction to move is pretty much random. + if (Actor_WorldDistXZToPoint(&this->actor, &this->actor.home.pos) > 120.0f) { + this->idleRotY = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos); + } else if (Rand_ZeroOne() < 0.7f) { + this->idleRotY = (s32)randPlusMinusPoint5Scaled(0x4000) + this->actor.shape.rot.y; + } + this->actor.world.rot.y = this->actor.shape.rot.y; + this->actionFunc = EnSlime_MoveInDirection; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A30820.s") +/** + * While moving idle, update rotation, speed, scale in a sinusoidal fashion to + * give oozing effect. + * If actor has hit a wall or is too far from home, turn around. + * Chuchu will engage player during idle movement if player is visible and + * close enough to it. + */ +void EnSlime_MoveInDirection(EnSlime* this, PlayState* play) { + f32 sinFactor; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A30924.s") + EnSlime_Blink(this); + this->timer--; + Math_ApproachS(&this->actor.shape.rot.y, this->idleRotY, 4, 0x100); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A30944.s") + // If actor is touching a wall, set target rotation to match wall where it is touching. + // If actor is more than 120 units from its home, turn around to face home. + if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) { + this->idleRotY = this->actor.wallYaw; + } else if (Actor_WorldDistXZToPoint(&this->actor, &this->actor.home.pos) > 120.0f) { + this->idleRotY = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos); + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A309C8.s") + // Update actor scale, xz speed, and rotation to provide amorphous effect + sinFactor = fabsf(sin_rad(this->timer * (M_PI / 24))); + Math_StepToF(&this->actor.scale.z, ((0.15f * sinFactor) + 1.0f) * 0.01f, 0.0002f); + Math_StepToF(&this->actor.scale.x, (1.0f - (0.2f * sinFactor)) * 0.01f, 0.0002f); + Math_StepToF(&this->actor.scale.y, (1.0f - (0.1f * sinFactor)) * 0.01f, 0.0002f); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A30A20.s") + this->actor.speed = (0.8f * sinFactor) + 0.2f; + this->actor.shape.rot.x = 0x800 * sinFactor; + this->actor.world.rot.y = this->actor.shape.rot.y; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A30A90.s") + if (Actor_WorldDistXZToPoint(&this->actor, &this->actor.home.pos) > this->distLimit) { + // If actor is too far from home, start return home cycle + EnSlime_SetupMoveToHome(this); + } else if ((Player_GetMask(play) != PLAYER_MASK_STONE) && (this->actor.xzDistToPlayer < 280.0f) && + (Actor_IsFacingPlayer(&this->actor, 0x5000))) { + // If player is close enough to chuchu while not wearing the stone mask, and the chuchu is facing player, + // initialize attack cycle + EnSlime_SetupTurnToPlayer(this); + } else if (this->timer == 0) { + // If move timer runs out, restart idle cycle (sit in place for 25 frames) + EnSlime_SetupIdle(this); + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A30AE4.s") +/** + * Reset the action timer (to 24), then set the target y angle to face home. + */ +void EnSlime_SetupMoveToHome(EnSlime* this) { + this->timer = 24; + this->idleRotY = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos); + this->actor.world.rot.y = this->actor.shape.rot.y; + this->actionFunc = EnSlime_MoveToHome; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A30BE0.s") +/** + * While moving towards home point, update rotation, speed, scale + * in a sinusoidal fashion to give oozing effect. + * If actor has hit a wall, turn around. + * Once it is close enough to home point, return to idle cycle. + * Chuchu will not engage player while the return home cycle is active. + */ +void EnSlime_MoveToHome(EnSlime* this, PlayState* play) { + f32 timerFactor; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A30C2C.s") + EnSlime_Blink(this); + this->timer--; + Math_ApproachS(&this->actor.shape.rot.y, this->idleRotY, 4, 0x400); + if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) { + // If hit wall, turn around. + this->idleRotY = this->actor.wallYaw; + } else { + this->idleRotY = Actor_WorldYawTowardPoint(&this->actor, &this->actor.home.pos); + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A30C68.s") + timerFactor = fabsf(sin_rad(this->timer * (M_PI / 24))); + Math_StepToF(&this->actor.scale.z, ((0.15f * timerFactor) + 1.0f) * 0.01f, 0.0002f); + Math_StepToF(&this->actor.scale.x, (1.0f - (0.2f * timerFactor)) * 0.01f, 0.0002f); + Math_StepToF(&this->actor.scale.y, (1.0f - (0.1f * timerFactor)) * 0.01f, 0.0002f); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A30CEC.s") + this->actor.speed = (0.8f * timerFactor) + 0.2f; + this->actor.shape.rot.x = 0x800 * timerFactor; + this->actor.world.rot.y = this->actor.shape.rot.y; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/func_80A30F98.s") + // Reset timer for use calculating wobble/ooze amount for frame + if (this->timer == 0) { + this->timer = 24; + } -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/EnSlime_Update.s") + // Only return to idle once actor is close enough to home point. + if (Actor_WorldDistXZToPoint(&this->actor, &this->actor.home.pos) < (this->distLimit * 0.8f)) { + EnSlime_SetupIdle(this); + } +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Slime/EnSlime_Draw.s") +void EnSlime_SetupTurnToPlayer(EnSlime* this) { + this->actor.shape.rot.x = 0; + this->actor.shape.rot.z = 0; + this->timer = 8; + this->actionFunc = EnSlime_TurnToPlayer; + this->actor.speed = 0.0f; +} + +/** + * Update actor angle and ooze effect as chuchu initially + * turns to face player. + */ +void EnSlime_TurnToPlayer(EnSlime* this, PlayState* play) { + f32 factorY; + f32 scaleXZ; + + this->timer--; + EnSlime_Blink(this); + Math_ApproachS(&this->actor.shape.rot.y, this->actor.yawTowardsPlayer, 4, 0x1000); + if (this->timer >= 0) { + factorY = 8 - this->timer; + scaleXZ = ((factorY * 0.04f) + 1.0f) * 0.01f; + this->actor.scale.x = scaleXZ; + this->actor.scale.y = (1.0f - (factorY * 0.05f)) * 0.01f; + this->actor.scale.z = scaleXZ; + } + if (this->timer < -2) { + EnSlime_SetupJump(this); + } +} + +/** + * If fewer than 120 units from the player, start a larger attack lunge. + * Otherwise, hop forward. + */ +void EnSlime_SetupJump(EnSlime* this) { + if (this->actor.xzDistToPlayer > 120.0f) { + this->actor.velocity.y = 11.0f; + this->actor.speed = 5.0f; + this->actor.gravity = -2.0f; + } else { + this->actor.velocity.y = 18.0f; + this->actor.speed = 7.0f; + this->actor.gravity = -3.5f; + } + this->actor.world.rot.y = this->actor.shape.rot.y; + this->timer = 12; + this->eyeTexIndex = EN_SLIME_EYETEX_OPEN; + Math_StepToF(&this->actor.scale.x, 0.008f, 0.0025f); + Math_StepToF(&this->actor.scale.y, 0.011f, 0.0025f); + this->actor.scale.z = this->actor.scale.x; + Actor_PlaySfx(&this->actor, NA_SE_EN_SLIME_JUMP); + this->actionFunc = EnSlime_Jump; +} + +/** + * Check for collision and whether actor has stopped falling. + * Update actor scale for slime effect. + * If collision, knockback actor. If actor has stopped moving + * in Y direction, initialize landing action. + */ +void EnSlime_Jump(EnSlime* this, PlayState* play) { + this->timer--; + if (this->collider.base.atFlags & AT_HIT) { + if (this->actor.speed > 0.0f) { + this->actor.speed *= -1.2f; + this->collider.base.atFlags &= ~AT_HIT; + } + } + Math_StepToF(&this->actor.scale.x, 0.008f, 0.0025f); + Math_StepToF(&this->actor.scale.y, 0.011f, 0.0025f); + this->actor.scale.z = this->actor.scale.x; + if ((this->actor.velocity.y < 0.0f) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) { + EnSlime_SetupLand(this); + } +} + +void EnSlime_SetupLand(EnSlime* this) { + this->timer = 15; + this->actor.scale.x = 0.0132f; + this->actor.scale.y = 0.0074399994f; + this->actor.scale.z = 0.0132f; + this->actor.speed = 0.0f; + this->actionFunc = EnSlime_Land; +} + +/** + * Update scale/rot for ooze jiggle effect (XZ), update Y scale + * to make it appear as though chuchu is compressing. + * If > 12 frames have passed since jump start, check again if player + * is in range and restart engage/jump cycle if so. + * If too far from home, initialize return home cycle + * (takes priority over player engage check). + * Otherwise if timer is up, return to idle. + */ +void EnSlime_Land(EnSlime* this, PlayState* play) { + f32 scaleY; + f32 rotXZ; + f32 scaleXZ; + + EnSlime_Blink(this); + this->timer--; + scaleY = ((this->timer / 5) + 1) * 1.6f; + rotXZ = sqrtf(this->timer) * 0.2f; + scaleXZ = ((cos_rad(this->timer * (2.0f * M_PI / 5.0f)) * (0.05f * scaleY)) + 1.0f) * 0.01f; + this->actor.scale.x = scaleXZ; + this->actor.scale.z = scaleXZ; + if (this->timer < 15) { + this->actor.scale.y = (1.0f - (sin_rad(this->timer * (2.0f * M_PI / 5.0f)) * (0.04f * scaleY))) * 0.01f; + } + this->actor.shape.rot.x = randPlusMinusPoint5Scaled(0x200) * rotXZ; + this->actor.shape.rot.z = randPlusMinusPoint5Scaled(0x200) * rotXZ; + + if (Actor_WorldDistXZToPoint(&this->actor, &this->actor.home.pos) > this->distLimit) { + EnSlime_SetupMoveToHome(this); + } else if ((Player_GetMask(play) != PLAYER_MASK_STONE) && (this->actor.xzDistToPlayer < 280.0f) && + (this->timer < 12)) { + EnSlime_SetupTurnToPlayer(this); + } else if (this->timer == 0) { + EnSlime_SetupIdle(this); + } +} + +/** + * Initialize reaction to receiving a blunt hit (such as with Goron Punch etc.) + * Chuchu does not take damage, but appears slide backwards. + */ +void EnSlime_SetupReactToBluntHit(EnSlime* this) { + this->actor.speed = 10.0f; + if (this->actor.velocity.y > 0.0f) { + this->actor.velocity.y = 0.0f; + } + this->collider.base.acFlags &= ~AC_ON; + this->timer = 30; + Actor_PlaySfx(&this->actor, NA_SE_EN_SLIME_DEFENCE); + if (this->collider.base.ac != NULL) { + this->actor.world.rot.y = Actor_WorldYawTowardActor(&this->actor, this->collider.base.ac) + 0x8000; + } else { + this->actor.world.rot.y = this->actor.yawTowardsPlayer + 0x8000; + } + this->actionFunc = EnSlime_ReactToBluntHit; +} + +/** + * Update reaction to receiving a blunt hit (such as with Goron Punch etc.) + * Update XZ speed and jiggle effect + * AC_ON flag is off until 15 frames of reaction remain. + * When timer is up, chuchu will choose whether to engage player, return home, + * or return to idle. + * If chuchu is too far from home, returning home will take precedence. + */ +void EnSlime_ReactToBluntHit(EnSlime* this, PlayState* play) { + f32 timerFactor; + f32 scale; + + EnSlime_Blink(this); + this->timer--; + Math_StepToF(&this->actor.speed, 0.0f, 1.0f); + timerFactor = sqrtf(this->timer); + if (this->timer < 30) { + scale = ((cos_rad(this->timer * (2.0f * M_PI / 5.0f)) * (0.08f * timerFactor)) + 1.0f) * 0.01f; + this->actor.scale.x = scale; + this->actor.scale.z = scale; + } + if (this->timer == 15) { + this->collider.base.acFlags |= AC_ON; + } + this->actor.scale.y = ((sin_rad((f32)this->timer * (2.0f * M_PI / 5.0f)) * (0.07f * timerFactor)) + 1.0f) * 0.01f; + this->actor.shape.rot.x = randPlusMinusPoint5Scaled(0x200) * timerFactor; + this->actor.shape.rot.z = randPlusMinusPoint5Scaled(0x200) * timerFactor; + + if (this->timer == 0) { + if (Actor_WorldDistXZToPoint(&this->actor, &this->actor.home.pos) > this->distLimit) { + EnSlime_SetupMoveToHome(this); + } else if ((this->actor.xzDistToPlayer < 280.0f) && (Player_GetMask(play) != PLAYER_MASK_STONE)) { + EnSlime_SetupTurnToPlayer(this); + } else { + EnSlime_SetupIdle(this); + } + } +} + +/** + * Spawn bubbles & splash, start actor rebuff wobble, + * push actor, and play sfx. + */ +void EnSlime_SetupDamaged(EnSlime* this, PlayState* play, s32 arg2) { + s32 i; + Vec3f effectVelocity; + Vec3f effectPos; + f32 ySin; + f32 yCos; + + this->collider.base.acFlags &= ~AC_ON; + if (this->actor.velocity.y > 0.0f) { + this->actor.velocity.y = 0.0f; + } + Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_RED, 255, COLORFILTER_BUFFLAG_XLU, 20); + this->timer = 20; + this->actor.speed = 10.0f; + if (arg2 == true) { + // This function changes actor's world Y rotation? + func_800BE504(&this->actor, &this->collider); + } + + this->eyeTexIndex = EN_SLIME_EYETEX_OPEN; + Actor_SetScale(&this->actor, 0.01f); + this->wobbleRot.x = Rand_ZeroOne() * (M_PI * 2.0f); + this->wobbleRot.z = Rand_ZeroOne() * (M_PI * 2.0f); + ySin = Math_SinS(this->actor.world.rot.y) * 10.0f; + yCos = Math_CosS(this->actor.world.rot.y) * 10.0f; + effectPos.x = this->actor.world.pos.x + ySin; + effectPos.y = this->actor.world.pos.y + 20.0f; + effectPos.z = this->actor.world.pos.z + yCos; + EffectSsGSplash_Spawn(play, &effectPos, NULL, NULL, 1, 550); + + for (i = 0; i < 10; i++) { + effectPos.x = randPlusMinusPoint5Scaled(40.0f) + this->actor.world.pos.x + ySin; + effectPos.y = randPlusMinusPoint5Scaled(10.0f) + this->actor.world.pos.y + 40.0f; + effectPos.z = randPlusMinusPoint5Scaled(40.0f) + this->actor.world.pos.z + yCos; + + effectVelocity.x = ((Rand_ZeroOne() * 3.5f) + 1.0f) * -Math_SinS(this->actor.world.rot.y); + effectVelocity.z = ((Rand_ZeroOne() * 3.5f) + 1.0f) * -Math_CosS(this->actor.world.rot.y); + + effectVelocity.y = (Rand_ZeroOne() * 6.0f) + 2.0f; + EffectSsDtBubble_SpawnCustomColor(play, &effectPos, &effectVelocity, &sBubbleAccel, &sBubblePrimColor, + &sBubbleEnvColor, Rand_S16Offset(40, 20), 20, 0); + } + + if (this->actor.colChkInfo.health == 0) { + Actor_PlaySfx(&this->actor, NA_SE_EN_SLIME_DEAD); + } else { + Actor_PlaySfx(&this->actor, NA_SE_EN_SLIME_DAMAGE); + } + this->actionFunc = EnSlime_Damaged; +} + +/** + * Update reaction to taking damage. + * Updates the rebuff wobble. + * Once timer drops to 0, actor initializes death cycle, re-engages player, or returns to idle. + */ +void EnSlime_Damaged(EnSlime* this, PlayState* play) { + this->timer--; + Math_StepToF(&this->actor.speed, 0.0f, 1.0f); + if ((this->timer % 5) == 0) { + this->wobbleRot.x = Rand_ZeroOne() * (M_PI * 2.0f); + this->wobbleRot.z = Rand_ZeroOne() * (M_PI * 2.0f); + } + if (this->timer == 0) { + if (this->actor.colChkInfo.health != 0) { + this->collider.base.acFlags |= AC_ON; + if ((this->actor.xzDistToPlayer < 280.0f) && (Player_GetMask(play) != PLAYER_MASK_STONE)) { + EnSlime_SetupTurnToPlayer(this); + } else { + EnSlime_SetupIdle(this); + } + } else { + SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 40, NA_SE_EN_SLIME_BREAK); + EnSlime_SetupDead(this); + } + } +} + +/** + * Disable AC_ON flag, make actor stop moving, and shrink the actor. + */ +void EnSlime_SetupDead(EnSlime* this) { + this->collider.base.acFlags &= ~AC_ON; + if (this->actor.velocity.y > 0.0f) { + this->actor.velocity.y = 0.0f; + } + Actor_SetScale(&this->actor, 0.01f); + this->actor.speed = 0.0f; + this->actionFunc = EnSlime_Dead; +} + +/** + * Spawn random effects (bubbles, splash) for death sequence. + * If chuchu is red, green, or yellow, spawn item drop. + * Shrink actor scale to 0. + * Call SetupWaitForRevive function for cleanup. + */ +void EnSlime_Dead(EnSlime* this, PlayState* play) { + s32 i; + Vec3f velocity; + Vec3f effectPos; + f32 randFloat; + s32 randSign; + + if (Math_StepToF(&this->actor.scale.x, 0.0f, 0.002f)) { + effectPos.x = this->actor.world.pos.x; + effectPos.y = this->actor.world.pos.y + 20.0f; + effectPos.z = this->actor.world.pos.z; + EffectSsGSplash_Spawn(play, &effectPos, NULL, NULL, 1, 800); + + for (i = 0; i < 15; i++) { + randFloat = Rand_ZeroOne(); + randSign = Rand_ZeroOne() < 0.5f ? -1 : 1; + velocity.x = randSign * ((randFloat * 2.5f) + 2.0f); + + randFloat = Rand_ZeroOne(); + randSign = Rand_ZeroOne() < 0.5f ? -1 : 1; + velocity.z = randSign * ((randFloat * 2.5f) + 2.0f); + + velocity.y = (Rand_ZeroOne() * 6.0f) + 2.0f; + EffectSsDtBubble_SpawnCustomColor(play, &effectPos, &velocity, &sBubbleAccel, &sBubblePrimColor, + &sBubbleEnvColor, Rand_S16Offset(40, 20), 20, 0); + } + + if (this->actor.params == EN_SLIME_TYPE_YELLOW) { + Item_DropCollectible(play, &this->actor.world.pos, ITEM00_ARROWS_10); + } else if (this->actor.params == EN_SLIME_TYPE_GREEN) { + Item_DropCollectible(play, &this->actor.world.pos, ITEM00_MAGIC_SMALL); + } else if (this->actor.params == EN_SLIME_TYPE_RED) { + Item_DropCollectible(play, &this->actor.world.pos, ITEM00_RECOVERY_HEART); + } + EnSlime_SetupWaitForRevive(this); + } + this->actor.scale.y = this->actor.scale.x; + this->actor.scale.z = this->actor.scale.x; +} + +/** + * Calculate a new "current" position value that is a multiple of 60 + * away from the "home" position. + * This is for use by blue chuchus frozen into an ice block so that + * their position is a multiple of the ice block size. + */ +f32 EnSlime_SnapIceBlockPosition(f32 currentPosition, f32 homePosition) { + s32 dist = currentPosition - homePosition; + + if (dist > 0) { + dist += 30; + } else { + dist -= 30; + } + + return ((dist / 60) * 60.0f) + homePosition; +} + +/** + * Prepare actor for ice block to spawn around it. + * The actor will stop moving, have AC_ON cleared, + * and target position will be snapped to + * a multiple of the size of an ice block. + */ +void EnSlime_SetupSpawnIceBlock(EnSlime* this) { + this->collider.base.acFlags &= ~AC_ON; + this->actor.flags &= ~ACTOR_FLAG_1; + this->drawDmgEffAlpha = 0.0f; + this->actor.speed = 0.0f; + this->actor.velocity.y = 0.0f; + this->actor.gravity = 0.0f; + this->iceBlockSnapPos.x = EnSlime_SnapIceBlockPosition(this->actor.world.pos.x, this->actor.home.pos.x); + this->iceBlockSnapPos.z = EnSlime_SnapIceBlockPosition(this->actor.world.pos.z, this->actor.home.pos.z); + Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_GRAY, COLORFILTER_INTENSITY_FLAG | 255, + COLORFILTER_BUFFLAG_XLU, 10); + this->eyeTexIndex = EN_SLIME_EYETEX_OPEN; + this->iceBlockTimer = ICE_BLOCK_TIMER_MAX; + this->actionFunc = EnSlime_SpawnIceBlock; +} + +/** + * Attempt to move the chuchu to snapped position and + * spawn an ice block actor as a child of the chuchu actor. + * If ice block spawn fails, chuchu returns to idle. + */ +void EnSlime_SpawnIceBlock(EnSlime* this, PlayState* play) { + s32 stepCheck; + + stepCheck = Math_StepToF(&this->actor.world.pos.x, this->iceBlockSnapPos.x, 10.0f); + stepCheck &= Math_StepToF(&this->actor.world.pos.z, this->iceBlockSnapPos.z, 10.0f); + + this->actor.colorFilterTimer = 10; + if (stepCheck) { + this->actor.child = + Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_OBJ_ICEBLOCK, this->actor.world.pos.x, + this->actor.world.pos.y + 30.0f, this->actor.world.pos.z, 0, 0, 0, 0); + if (this->actor.child != NULL) { + this->actor.child->cutscene = this->actor.cutscene; + EnSlime_SetupIceBlock(this); + } else { + this->actor.colorFilterTimer = 0; + this->collider.base.acFlags |= AC_ON; + this->iceBlockTimer = ICE_BLOCK_UNUSED; + this->actor.flags |= ACTOR_FLAG_1; + this->actor.gravity = -2.0f; + EnSlime_SetupIdle(this); + } + } +} + +void EnSlime_SetupIceBlock(EnSlime* this) { + this->actor.flags |= ACTOR_FLAG_10; + this->actionFunc = EnSlime_IceBlock; +} + +/** + * Decrement the ice block timer, or if it has hit zero, + * check to see if the ice block child actor link has been broken + * or if the block has shrunk sufficiently. + * If timer is up and ice block is sufficiently "gone", init thaw. + */ +void EnSlime_IceBlock(EnSlime* this, PlayState* play) { + if (this->iceBlockTimer == 0) { + if ((this->actor.child == NULL) || (this->actor.child->update == NULL) || + !(this->actor.child->scale.y >= 0.1f)) { + EnSlime_SetupIceBlockThaw(this); + } + } else { + this->actor.colorFilterTimer = 10; + if ((this->iceBlockTimer - 5) < 0) { + this->iceBlockTimer = 0; + } else { + this->iceBlockTimer -= 5; + } + } +} + +void EnSlime_SetupStun(EnSlime* this) { + this->actor.speed = 0.0f; + func_800BE504(&this->actor, &this->collider); + if (this->actor.velocity.y > 0.0f) { + this->actor.velocity.y = 0.0f; + } + this->actionFunc = EnSlime_Stun; +} + +/** + * Check the actor's timer to see whether stun has worn off. + * If so, either react to damage and initialize death, or start + * idly wobbling in a new direction. + */ +void EnSlime_Stun(EnSlime* this, PlayState* play) { + this->timer--; + if (this->timer == 0) { + EnSlime_Thaw(this, play); + if (this->actor.colChkInfo.health == 0) { + EnSlime_SetupDamaged(this, play, false); + } else { + this->actor.world.rot.y = this->actor.shape.rot.y; + EnSlime_SetupMoveInDirection(this); + } + } +} + +void EnSlime_SetupIceBlockThaw(EnSlime* this) { + this->actor.colorFilterTimer = 0; + this->actor.gravity = -2.0f; + Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_GRAY, COLORFILTER_INTENSITY_FLAG | 255, + COLORFILTER_BUFFLAG_XLU, 10); + this->actionFunc = EnSlime_IceBlockThaw; +} + +/** + * Update the actor's ice block timer to match state of ice block. + * When it reaches the "unset" value (255), return actor to idle. + */ +void EnSlime_IceBlockThaw(EnSlime* this, PlayState* play) { + s32 iceBlockTimerAdj; + + this->actor.colorFilterTimer = 10; + if ((this->actor.child != NULL) && (this->actor.child->update != NULL)) { + iceBlockTimerAdj = (0.1f - this->actor.child->scale.y) * 10.0f * 255.0f; + this->iceBlockTimer = CLAMP(iceBlockTimerAdj, 0, ICE_BLOCK_UNUSED); + } else { + this->actor.child = NULL; + iceBlockTimerAdj = this->iceBlockTimer + 10; + this->iceBlockTimer = CLAMP_MAX(iceBlockTimerAdj, ICE_BLOCK_UNUSED); + } + + if (this->iceBlockTimer == ICE_BLOCK_UNUSED) { + this->collider.base.acFlags |= AC_ON; + this->actor.flags |= ACTOR_FLAG_1; + this->actor.flags &= ~ACTOR_FLAG_10; + EnSlime_SetupIdle(this); + } +} + +/** + * Set speed to zero, and make undrawable. + * Initialize revive timer. + */ +void EnSlime_SetupWaitForRevive(EnSlime* this) { + this->actor.draw = NULL; + this->actor.flags |= ACTOR_FLAG_10; + this->drawDmgEffAlpha = 0.0f; + this->actor.gravity = 0.0f; + this->actor.velocity.y = 0.0f; + this->actor.speed = 0.0f; + this->collider.base.ocFlags1 &= ~OC1_ON; + this->timer = this->reviveTime; + this->actionFunc = EnSlime_WaitForRevive; +} + +/** + * Decrement the revival timer, or if it is zero, + * initialize revive. + */ +void EnSlime_WaitForRevive(EnSlime* this, PlayState* play) { + if (this->timer == 0) { + EnSlime_SetupRevive(this); + } else { + this->timer--; + } +} + +/** + * Re-enable drawing, reset the actor's health and home, + * and setup and initialize revive action. + */ +void EnSlime_SetupRevive(EnSlime* this) { + this->actor.draw = EnSlime_Draw; + this->actor.colChkInfo.health = sColChkInfoInit.health; + this->iceBlockTimer = ICE_BLOCK_UNUSED; + Math_Vec3f_Copy(&this->actor.world.pos, &this->actor.home.pos); + this->timer = 0; + this->actor.colorFilterTimer = 0; + this->actor.home.rot.y = this->actor.yawTowardsPlayer; + Actor_PlaySfx(&this->actor, NA_SE_EN_SLIME_SURFACE); + this->actor.gravity = -2.0f; + this->actionFunc = EnSlime_Revive; +} + +/** + * Update bubbling back up effect. After 21 frames, OC1_ON is set. + * After 28 frames, AC_ON is set and actor returns to idle movement. + */ +void EnSlime_Revive(EnSlime* this, PlayState* play) { + f32 rescaleFactor1; + f32 rescaleFactor2; + + this->timer++; + if (this->timer == 28) { + this->actor.flags &= ~ACTOR_FLAG_10; + this->actor.flags |= ACTOR_FLAG_1; + this->collider.base.acFlags |= AC_ON; + this->actor.shape.rot.y = this->actor.home.rot.y; + EnSlime_SetupMoveInDirection(this); + } else { + if (this->timer < 12) { + rescaleFactor1 = this->timer * 0.0008333333f; // This is about 1/1200, but (1.0f/1200.0f) does not match + this->reviveScale.x = rescaleFactor1; + this->reviveScale.z = rescaleFactor1; + this->reviveScale.y = 2.0f * rescaleFactor1; + this->reviveRotY = this->timer * (0x4000 / 10.0f); + } else if (this->timer < 20) { + rescaleFactor1 = (this->timer - 12) * (1.0f / 1600.0f); + rescaleFactor2 = 0.01f + rescaleFactor1; + this->reviveScale.x = rescaleFactor2; + this->reviveScale.z = rescaleFactor2; + this->reviveScale.y = 2.0f * (0.01f - rescaleFactor1); + this->reviveRotY = this->timer * (0x4000 / 10.0f); + } else if (this->timer < 24) { + rescaleFactor1 = (this->timer - 20) * 0.0033333332f; // This is about 1/300 + rescaleFactor2 = 0.015f - rescaleFactor1; + this->reviveScale.x = rescaleFactor2; + this->reviveScale.z = rescaleFactor2; + this->reviveScale.y = (2.0f * rescaleFactor1) + 0.01f; + Actor_SetScale(&this->actor, 1.5f * rescaleFactor1); + this->reviveRotY = ((23 - this->timer) * 7281.778f) + 10922.667f; + this->actor.shape.rot.y = (28 - this->timer) * (f32)0x1000; + } else { + Actor_SetScale(&this->actor, (((28 - this->timer) * 0.1f) + 1.0f) * 0.01f); + Math_Vec3f_Copy(&this->reviveScale, &gZeroVec3f); + this->actor.shape.rot.y = (28 - this->timer) * (f32)0x1000; + } + + if (this->timer == 21) { + this->collider.base.ocFlags1 |= OC1_ON; + } + + this->reviveRotY += this->actor.home.rot.y; + this->actor.shape.rot.y += this->actor.home.rot.y; + } +} + +/** + * Check actor AC hit since last update. If hit, initialize appropriate action cycle. + */ +void EnSlime_UpdateDamage(EnSlime* this, PlayState* play) { + if (this->collider.base.acFlags & AC_HIT) { + this->collider.base.acFlags &= ~AC_HIT; + + if ((this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) || + !(this->collider.info.acHitInfo->toucher.dmgFlags & 0xDB0B3)) { + + EnSlime_Thaw(this, play); + if ((this->actor.params == EN_SLIME_TYPE_BLUE) && + (this->actor.colChkInfo.damageEffect == EN_SLIME_DMGEFF_FREEZE)) { + // Blue chuchus take no damage from ice arrows. + this->actor.colChkInfo.damage = 0; + } + + if (Actor_ApplyDamage(&this->actor) == 0) { + Actor_SetDropFlag(&this->actor, &this->collider.info); + Enemy_StartFinishingBlow(play, &this->actor); + this->actor.flags &= ~ACTOR_FLAG_1; + } + + if (this->actor.colChkInfo.damageEffect == EN_SLIME_DMGEFF_BLUNT) { + EnSlime_SetupReactToBluntHit(this); + } else if (this->actor.colChkInfo.damageEffect == EN_SLIME_DMGEFF_STUN) { + this->timer = 40; + Actor_SetColorFilter(&this->actor, COLORFILTER_COLORFLAG_BLUE, 255, COLORFILTER_BUFFLAG_XLU, 40); + Actor_PlaySfx(&this->actor, NA_SE_EN_COMMON_FREEZE); + EnSlime_SetupStun(this); + } else if (this->actor.colChkInfo.damageEffect != EN_SLIME_DMGEFF_HOOKSHOT) { + if (this->actor.colChkInfo.damageEffect == EN_SLIME_DMGEFF_FREEZE) { + if (this->actor.params == EN_SLIME_TYPE_BLUE) { + EnSlime_SetupSpawnIceBlock(this); + } else { + EnSlime_Freeze(this); + if (this->actor.colChkInfo.health == 0) { + this->timer = 3; + this->collider.base.acFlags &= ~AC_ON; + } + EnSlime_SetupStun(this); + } + } else { + if (this->actor.colChkInfo.damageEffect == EN_SLIME_DMGEFF_LIGHT) { + this->drawDmgEffAlpha = 4.0f; + this->drawDmgEffScale = 0.4f; + this->drawDmgEffType = ACTOR_DRAW_DMGEFF_LIGHT_ORBS; + Actor_Spawn(&play->actorCtx, play, ACTOR_EN_CLEAR_TAG, this->collider.info.bumper.hitPos.x, + this->collider.info.bumper.hitPos.y, this->collider.info.bumper.hitPos.z, 0, 0, 0, + CLEAR_TAG_LARGE_LIGHT_RAYS); + } else if (this->actor.colChkInfo.damageEffect == EN_SLIME_DMGEFF_ELECTRIC) { + this->drawDmgEffType = ACTOR_DRAW_DMGEFF_ELECTRIC_SPARKS_LARGE; + this->drawDmgEffAlpha = 4.0f; + this->drawDmgEffScale = 0.4f; + } + EnSlime_SetupDamaged(this, play, true); + } + } + } + } +} + +void EnSlime_Update(Actor* thisx, PlayState* play) { + EnSlime* this = THIS; + s32 pad; + Player* player = GET_PLAYER(play); + + EnSlime_UpdateDamage(this, play); + this->actionFunc(this, play); + + // Note: Does not match if you use this->actor instead of thisx + thisx->shape.shadowAlpha = this->iceBlockTimer; + if (this->iceBlockTimer == ICE_BLOCK_UNUSED) { + if (thisx->scale.y > 0.0001f) { + thisx->targetArrowOffset = 60.0f / thisx->scale.y; + } + + if (this->collider.base.ocFlags1 & OC1_ON) { + Actor_MoveWithGravity(thisx); + Actor_UpdateBgCheckInfo(play, thisx, 20.0f, 35.0f, 40.0f, 0x1D); + } + + Collider_UpdateCylinder(thisx, &this->collider); + this->collider.dim.radius = sCylinderInit.dim.radius * (100.0f * thisx->scale.z); + this->collider.dim.height = sCylinderInit.dim.height * (100.0f * thisx->scale.y); + + if (this->actionFunc == EnSlime_Jump) { + CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base); + } + + if (this->collider.base.acFlags & AC_ON) { + CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base); + } + + if (player->stateFlags3 & PLAYER_STATE3_100) { + this->collider.base.ocFlags1 &= ~OC1_TYPE_PLAYER; + } else { + this->collider.base.ocFlags1 |= OC1_TYPE_PLAYER; + } + + if (this->collider.base.ocFlags1 & OC1_ON) { + CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); + } + + Actor_SetFocus(thisx, 15.0f); + if (this->drawDmgEffAlpha > 0.0f) { + if (this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) { + Math_StepToF(&this->drawDmgEffAlpha, 0.0f, 0.05f); + this->drawDmgEffScale = (this->drawDmgEffAlpha + 1.0f) * 0.2f; + this->drawDmgEffScale = CLAMP_MAX(this->drawDmgEffScale, 0.4f); + } else if (!Math_StepToF(&this->drawDmgEffFrozenSteamScale, 0.4f, 0.01f)) { + func_800B9010(thisx, NA_SE_EV_ICE_FREEZE - SFX_FLAG); + } + } + } +} + +void EnSlime_Draw(Actor* thisx, PlayState* play) { + s32 i; + EnSlime* this = THIS; + Vec3f wobbleScale; + Color_RGBA8* primColor; + Color_RGBA8* envColor; + s32 pad; + + OPEN_DISPS(play->state.gfxCtx); + + func_8012C28C(play->state.gfxCtx); + func_8012C2DC(play->state.gfxCtx); + func_800B8118(&this->actor, play, 0); + if (this->iceBlockTimer != ICE_BLOCK_UNUSED) { + gSPSegment(POLY_XLU_DISP++, 10, D_801AEFA0); + gDPSetPrimColor(POLY_XLU_DISP++, 0, 170, 255, 255, 255, 255); + gDPSetEnvColor(POLY_XLU_DISP++, 150, 255, 255, this->iceBlockTimer); + } else { + primColor = &sPrimColors[this->actor.params]; + envColor = &sEnvColors[this->actor.params]; + AnimatedMat_Draw(play, sSlimeTexAnim); + gDPSetPrimColor(POLY_XLU_DISP++, 0, 100, primColor->r, primColor->g, primColor->b, primColor->a); + gDPSetEnvColor(POLY_XLU_DISP++, envColor->r, envColor->g, envColor->b, 255); + } + + if (this->actionFunc == EnSlime_Damaged) { + wobbleScale.x = 1.0f - (sin_rad((f32)this->timer * (M_PI / 2.0f)) * 0.3f); + wobbleScale.y = (sin_rad((f32)this->timer * (M_PI / 2.0f)) * 0.3f) + 1.0f; + wobbleScale.z = 1.0f - (cos_rad((f32)this->timer * (M_PI / 2.0f)) * 0.3f); + + Matrix_RotateXFApply(this->wobbleRot.x); + Matrix_RotateZF(this->wobbleRot.z, MTXMODE_APPLY); + Matrix_Scale(wobbleScale.x, wobbleScale.y, wobbleScale.z, MTXMODE_APPLY); + Matrix_RotateZF(-this->wobbleRot.z, MTXMODE_APPLY); + Matrix_RotateXFApply(-this->wobbleRot.x); + } + + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_XLU_DISP++, gChuchuBodyDL); + + if (this->iceBlockTimer == ICE_BLOCK_UNUSED) { + // Ice block is not active + Scene_SetRenderModeXlu(play, 0, 1); + + gSPSegment(POLY_OPA_DISP++, 9, (u32)sEyeTextures[this->eyeTexIndex]); + gDPSetEnvColor(POLY_OPA_DISP++, 0, 30, 70, 255); + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_OPA_DISP++, gChuchuEyesDL); + + } else { + Scene_SetRenderModeXlu(play, 1, 2); + gSPSegment(POLY_XLU_DISP++, 9, (u32)sEyeTextures[this->eyeTexIndex]); + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_XLU_DISP++, gChuchuEyesDL); + } + + for (i = 0; i < EN_SLIME_LIMBPOS_COUNT; i++) { + Matrix_MultVec3f(&sLimbPosOffsets[i], &this->limbPos[i]); + } + + if (this->actionFunc == EnSlime_Revive) { + Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, MTXMODE_NEW); + Matrix_RotateYS(this->reviveRotY, MTXMODE_APPLY); + Matrix_Scale(this->reviveScale.x, this->reviveScale.y, this->reviveScale.z, MTXMODE_APPLY); + + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_XLU_DISP++, gChuchuPuddleDL); + } + + if ((this->actor.params != EN_SLIME_TYPE_BLUE) && (this->actor.scale.x > 0.0f)) { + POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP); + POLY_OPA_DISP = func_8012C724(POLY_OPA_DISP); + + Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y + (2000.0f * this->actor.scale.y), + this->actor.world.pos.z, MTXMODE_NEW); + Matrix_Scale(0.03f, 0.03f, 0.03f, MTXMODE_APPLY); + + gSPSegment(POLY_OPA_DISP++, 8, (u32)this->itemDropTex); + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_OPA_DISP++, gItemDropDL); + } + + Actor_DrawDamageEffects(play, &this->actor, this->limbPos, ARRAY_COUNT(this->limbPos), this->drawDmgEffScale, + this->drawDmgEffFrozenSteamScale, this->drawDmgEffAlpha, this->drawDmgEffType); + + CLOSE_DISPS(play->state.gfxCtx); +} diff --git a/src/overlays/actors/ovl_En_Slime/z_en_slime.h b/src/overlays/actors/ovl_En_Slime/z_en_slime.h index 0381a592a..0a40a117e 100644 --- a/src/overlays/actors/ovl_En_Slime/z_en_slime.h +++ b/src/overlays/actors/ovl_En_Slime/z_en_slime.h @@ -2,6 +2,13 @@ #define Z_EN_SLIME_H #include "global.h" +#include "objects/object_slime/object_slime.h" +#include "objects/gameplay_keep/gameplay_keep.h" + +#define EN_SLIME_LIMBPOS_COUNT 5 + +#define EN_SLIME_GET_TYPE(thisx) ((thisx)->params) +#define EN_SLIME_GET_REVIVE_TIME(thisx) ((((thisx)->params) >> 8) & 0xFF) struct EnSlime; @@ -10,7 +17,32 @@ typedef void (*EnSlimeActionFunc)(struct EnSlime*, PlayState*); typedef struct EnSlime { /* 0x000 */ Actor actor; /* 0x144 */ EnSlimeActionFunc actionFunc; - /* 0x148 */ char unk_148[0xC0]; + /* 0x148 */ u8 iceBlockTimer; + /* 0x149 */ u8 eyeTexIndex; + /* 0x14A */ u8 drawDmgEffType; + /* 0x14C */ s16 timer; + /* 0x14E */ s16 idleRotY; + /* 0x150 */ s16 reviveRotY; + /* 0x152 */ s16 reviveTime; + /* 0x154 */ union { + Vec3f iceBlockSnapPos; + Vec3f wobbleRot; + }; + /* 0x160 */ TexturePtr itemDropTex; + /* 0x164 */ f32 drawDmgEffAlpha; + /* 0x168 */ f32 drawDmgEffScale; + /* 0x16C */ f32 drawDmgEffFrozenSteamScale; + /* 0x170 */ f32 distLimit; + /* 0x174 */ Vec3f reviveScale; + /* 0x180 */ Vec3f limbPos[EN_SLIME_LIMBPOS_COUNT]; + /* 0x1BC */ ColliderCylinder collider; } EnSlime; // size = 0x208 +typedef enum EnSlimeType { + /* 0 */ EN_SLIME_TYPE_BLUE, + /* 1 */ EN_SLIME_TYPE_GREEN, + /* 2 */ EN_SLIME_TYPE_YELLOW, + /* 3 */ EN_SLIME_TYPE_RED, +} EnSlimeType; + #endif // Z_EN_SLIME_H diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 01917fd8c..c9f7ab6cd 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -10126,43 +10126,43 @@ 0x80A2EBE8:("DmSa_Draw",), 0x80A2EDA0:("EnSlime_Init",), 0x80A2EF80:("EnSlime_Destroy",), - 0x80A2EFAC:("func_80A2EFAC",), - 0x80A2F028:("func_80A2F028",), - 0x80A2F0A8:("func_80A2F0A8",), - 0x80A2F110:("func_80A2F110",), - 0x80A2F140:("func_80A2F140",), - 0x80A2F180:("func_80A2F180",), - 0x80A2F1A4:("func_80A2F1A4",), - 0x80A2F354:("func_80A2F354",), - 0x80A2F418:("func_80A2F418",), - 0x80A2F684:("func_80A2F684",), - 0x80A2F6CC:("func_80A2F6CC",), - 0x80A2F8B4:("func_80A2F8B4",), - 0x80A2F8E0:("func_80A2F8E0",), - 0x80A2F9A0:("func_80A2F9A0",), - 0x80A2FA88:("func_80A2FA88",), - 0x80A2FB60:("func_80A2FB60",), - 0x80A2FBA0:("func_80A2FBA0",), - 0x80A2FD94:("func_80A2FD94",), - 0x80A2FE38:("func_80A2FE38",), - 0x80A30018:("func_80A30018",), - 0x80A30344:("func_80A30344",), - 0x80A30454:("func_80A30454",), - 0x80A304B8:("func_80A304B8",), - 0x80A3072C:("func_80A3072C",), - 0x80A30778:("func_80A30778",), - 0x80A30820:("func_80A30820",), - 0x80A30924:("func_80A30924",), - 0x80A30944:("func_80A30944",), - 0x80A309C8:("func_80A309C8",), - 0x80A30A20:("func_80A30A20",), - 0x80A30A90:("func_80A30A90",), - 0x80A30AE4:("func_80A30AE4",), - 0x80A30BE0:("func_80A30BE0",), - 0x80A30C2C:("func_80A30C2C",), - 0x80A30C68:("func_80A30C68",), - 0x80A30CEC:("func_80A30CEC",), - 0x80A30F98:("func_80A30F98",), + 0x80A2EFAC:("EnSlime_Freeze",), + 0x80A2F028:("EnSlime_Thaw",), + 0x80A2F0A8:("EnSlime_Blink",), + 0x80A2F110:("EnSlime_SetupInitializeIdle",), + 0x80A2F140:("EnSlime_InitializeIdle",), + 0x80A2F180:("EnSlime_SetupIdle",), + 0x80A2F1A4:("EnSlime_Idle",), + 0x80A2F354:("EnSlime_SetupMoveInDirection",), + 0x80A2F418:("EnSlime_MoveInDirection",), + 0x80A2F684:("EnSlime_SetupMoveToHome",), + 0x80A2F6CC:("EnSlime_MoveToHome",), + 0x80A2F8B4:("EnSlime_SetupTurnToPlayer",), + 0x80A2F8E0:("EnSlime_TurnToPlayer",), + 0x80A2F9A0:("EnSlime_SetupJump",), + 0x80A2FA88:("EnSlime_Jump",), + 0x80A2FB60:("EnSlime_SetupLand",), + 0x80A2FBA0:("EnSlime_Land",), + 0x80A2FD94:("EnSlime_SetupReactToBluntHit",), + 0x80A2FE38:("EnSlime_ReactToBluntHit",), + 0x80A30018:("EnSlime_SetupDamaged",), + 0x80A30344:("EnSlime_Damaged",), + 0x80A30454:("EnSlime_SetupDead",), + 0x80A304B8:("EnSlime_Dead",), + 0x80A3072C:("EnSlime_SnapIceBlockPosition",), + 0x80A30778:("EnSlime_SetupSpawnIceBlock",), + 0x80A30820:("EnSlime_SpawnIceBlock",), + 0x80A30924:("EnSlime_SetupIceBlock",), + 0x80A30944:("EnSlime_IceBlock",), + 0x80A309C8:("EnSlime_SetupStun",), + 0x80A30A20:("EnSlime_Stun",), + 0x80A30A90:("EnSlime_SetupIceBlockThaw",), + 0x80A30AE4:("EnSlime_IceBlockThaw",), + 0x80A30BE0:("EnSlime_SetupWaitForRevive",), + 0x80A30C2C:("EnSlime_WaitForRevive",), + 0x80A30C68:("EnSlime_SetupRevive",), + 0x80A30CEC:("EnSlime_Revive",), + 0x80A30F98:("EnSlime_UpdateDamage",), 0x80A311E8:("EnSlime_Update",), 0x80A3148C:("EnSlime_Draw",), 0x80A32210:("EnPr_Init",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 0b44baae3..133034f3a 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -11152,19 +11152,19 @@ 0x80A2ECE0:("Dm_Sa_InitVars","UNK_TYPE1","",0x1), 0x80A2ED00:("sAnimationInfo","UNK_TYPE1","",0x1), 0x80A2ED20:("D_80A2ED20","f32","",0x4), - 0x80A31AD0:("En_Slime_InitVars","UNK_TYPE1","",0x1), - 0x80A31AF0:("D_80A31AF0","UNK_TYPE1","",0x1), - 0x80A31B1C:("D_80A31B1C","UNK_TYPE1","",0x1), - 0x80A31B3C:("D_80A31B3C","UNK_TYPE1","",0x1), - 0x80A31B44:("D_80A31B44","UNK_TYPE4","",0x4), - 0x80A31B54:("D_80A31B54","UNK_TYPE1","",0x1), - 0x80A31B5C:("D_80A31B5C","UNK_TYPE4","",0x4), - 0x80A31B60:("D_80A31B60","UNK_TYPE1","",0x1), - 0x80A31B64:("D_80A31B64","UNK_TYPE1","",0x1), - 0x80A31B68:("D_80A31B68","UNK_TYPE1","",0x1), - 0x80A31B74:("D_80A31B74","UNK_TYPE1","",0x1), - 0x80A31B84:("D_80A31B84","UNK_TYPE1","",0x1), - 0x80A31B94:("D_80A31B94","UNK_TYPE1","",0x1), + 0x80A31AD0:("En_Slime_InitVars","ActorInit","",0x1), + 0x80A31AF0:("sCylinderInit","ColliderCylinderInit","",0x1), + 0x80A31B1C:("sDamageTable","DamageTable","",0x1), + 0x80A31B3C:("sColChkInfoInit","CollisionCheckInfoInit","",0x1), + 0x80A31B44:("sEyeTextures","TexturePtr","",0x4), + 0x80A31B54:("sInitChain","InitChainEntry","",0x1), + 0x80A31B5C:("sTexturesDesegmented","s32","",0x1), + 0x80A31B60:("sBubblePrimColor","Color_RGBA8","",0x1), + 0x80A31B64:("sBubbleEnvColor","Color_RGBA8","",0x1), + 0x80A31B68:("sBubbleAccel","Vec3f","",0x1), + 0x80A31B74:("sPrimColors","Color_RGBA8","",0x4), + 0x80A31B84:("sEnvColors","Color_RGBA8","",0x4), + 0x80A31B94:("sLimbPosOffsets","Vec3f","",0x5), 0x80A31BD0:("D_80A31BD0","f32","",0x4), 0x80A31BD4:("D_80A31BD4","f32","",0x4), 0x80A31BD8:("D_80A31BD8","f32","",0x4), @@ -11249,7 +11249,7 @@ 0x80A31D14:("D_80A31D14","f32","",0x4), 0x80A31D18:("D_80A31D18","f32","",0x4), 0x80A31D1C:("D_80A31D1C","f32","",0x4), - 0x80A32200:("D_80A32200","UNK_TYPE1","",0x1), + 0x80A32200:("sSlimeTexAnim","AnimatedMaterial*","",0x1), 0x80A338A0:("D_80A338A0","UNK_TYPE1","",0x1), 0x80A338C0:("D_80A338C0","UNK_TYPE1","",0x1), 0x80A338D4:("En_Pr_InitVars","UNK_TYPE1","",0x1), From 8efba39749a90191d03ec4a046cb11d6ac9d2198 Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Tue, 18 Apr 2023 09:42:08 -0700 Subject: [PATCH 02/12] z_viszbuf (code_801420C0) OK (#1211) * first pass * Match * variables.txt * Update include/functions.h Co-authored-by: Anghelo Carvajal --------- Co-authored-by: angie --- include/functions.h | 9 +++--- include/variables.h | 2 +- include/z64.h | 6 ++-- spec | 2 +- src/code/code_801420C0.c | 7 ---- src/code/game.c | 58 ++++++++++++++++------------------ src/code/z_viszbuf.c | 56 ++++++++++++++++++++++++++++++++ tools/disasm/files.txt | 2 +- tools/disasm/functions.txt | 6 ++-- tools/disasm/variables.txt | 2 +- tools/sizes/code_functions.csv | 6 ++-- 11 files changed, 101 insertions(+), 55 deletions(-) delete mode 100644 src/code/code_801420C0.c create mode 100644 src/code/z_viszbuf.c diff --git a/include/functions.h b/include/functions.h index f87ec4ff6..aff5ae5a1 100644 --- a/include/functions.h +++ b/include/functions.h @@ -2133,9 +2133,10 @@ void VisMono_Destroy(VisMono* this); // void VisMono_DesaturateDList(Gfx* gfx); void VisMono_Draw(VisMono* this, Gfx** gfxp); // void VisMono_DrawOld(VisMono* this); -void func_801420C0(void* arg0); -void func_801420F4(void* arg0); -void func_80142100(void* arg0, Gfx** gfx, u32 arg2); + +void VisZbuf_Init(VisZbuf* this); +void VisZbuf_Destroy(VisZbuf* this); +void VisZbuf_Draw(VisZbuf* this, Gfx** gfxP, void* zbuffer); // void func_80147520(void); void func_80147564(PlayState* play); @@ -2374,7 +2375,7 @@ void AudioMgr_Init(AudioMgr* audioMgr, void* stack, OSPri pri, OSId id, SchedCon void Game_UpdateFramerateVariables(s32 divisor); void Game_SetFramerateDivisor(GameState* gameState, s32 divisor); -void GameState_SetFBFilter(Gfx** gfx, u32 arg1); +void GameState_SetFBFilter(Gfx** gfx, void* zbuffer); void Game_Nop80173534(GameState* gameState); void GameState_Draw(GameState* gameState, GraphicsContext* gfxCtx); void GameState_SetFrameBuffer(GraphicsContext* gfxCtx); diff --git a/include/variables.h b/include/variables.h index 745c019a8..90063b774 100644 --- a/include/variables.h +++ b/include/variables.h @@ -2440,7 +2440,7 @@ extern u8 sMotionBlurStatus; extern UNK_TYPE1 D_801F7FF0; extern struct_801F8010 D_801F8010; -extern struct_801F8020 D_801F8020; +extern VisZbuf sVisZbuf; extern VisMono sMonoColors; extern UNK_TYPE1 D_801F8048; extern FaultAddrConvClient sGraphFaultAddrConvClient; diff --git a/include/z64.h b/include/z64.h index b91333288..331077723 100644 --- a/include/z64.h +++ b/include/z64.h @@ -755,9 +755,9 @@ typedef struct { typedef struct { /* 0x0 */ u32 useRgba; /* 0x4 */ u32 setScissor; - /* 0x8 */ Color_RGBA8 primColor; - /* 0xC */ Color_RGBA8 envColor; -} struct_801F8020; // size = 0x10 + /* 0x8 */ Color_RGBA8_u32 primColor; + /* 0xC */ Color_RGBA8_u32 envColor; +} VisZbuf; // size = 0x10 typedef struct { /* 0x00 */ u32 unk_00; diff --git a/spec b/spec index dcf76f66b..417609b6f 100644 --- a/spec +++ b/spec @@ -527,7 +527,7 @@ beginseg include "build/data/code/code_80140CE0.data.o" include "build/src/code/code_80140E80.o" include "build/src/code/z_vismono.o" - include "build/src/code/code_801420C0.o" + include "build/src/code/z_viszbuf.o" include "build/src/code/z_vr_box.o" include "build/src/code/z_vr_box_draw.o" include "build/src/code/z_sram_NES.o" diff --git a/src/code/code_801420C0.c b/src/code/code_801420C0.c deleted file mode 100644 index 63c96571e..000000000 --- a/src/code/code_801420C0.c +++ /dev/null @@ -1,7 +0,0 @@ -#include "global.h" - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_801420C0/func_801420C0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_801420C0/func_801420F4.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/code_801420C0/func_80142100.s") diff --git a/src/code/game.c b/src/code/game.c index 4a4be5291..3ff4f9962 100644 --- a/src/code/game.c +++ b/src/code/game.c @@ -22,7 +22,7 @@ void Game_SetFramerateDivisor(GameState* gameState, s32 divisor) { Game_UpdateFramerateVariables(divisor); } -void GameState_SetFBFilter(Gfx** gfx, u32 arg1) { +void GameState_SetFBFilter(Gfx** gfx, void* zbuffer) { Gfx* dlist = *gfx; if ((R_FB_FILTER_TYPE > 0) && (R_FB_FILTER_TYPE < 5)) { @@ -31,33 +31,29 @@ void GameState_SetFBFilter(Gfx** gfx, u32 arg1) { D_801F8010.color.g = R_FB_FILTER_PRIM_COLOR(1); D_801F8010.color.b = R_FB_FILTER_PRIM_COLOR(2); D_801F8010.color.a = R_FB_FILTER_A; - func_80140D10(&D_801F8010, &dlist, arg1); - } else { - if ((R_FB_FILTER_TYPE == 5) || (R_FB_FILTER_TYPE == 6)) { - D_801F8020.useRgba = (R_FB_FILTER_TYPE == 6); - D_801F8020.primColor.r = R_FB_FILTER_PRIM_COLOR(0); - D_801F8020.primColor.g = R_FB_FILTER_PRIM_COLOR(1); - D_801F8020.primColor.b = R_FB_FILTER_PRIM_COLOR(2); - D_801F8020.primColor.a = R_FB_FILTER_A; - D_801F8020.envColor.r = R_FB_FILTER_ENV_COLOR(0); - D_801F8020.envColor.g = R_FB_FILTER_ENV_COLOR(1); - D_801F8020.envColor.b = R_FB_FILTER_ENV_COLOR(2); - D_801F8020.envColor.a = R_FB_FILTER_A; - func_80142100(&D_801F8020, &dlist, arg1); - } else { - if (R_FB_FILTER_TYPE == 7) { - sMonoColors.unk_00 = 0; - sMonoColors.primColor.r = R_FB_FILTER_PRIM_COLOR(0); - sMonoColors.primColor.g = R_FB_FILTER_PRIM_COLOR(1); - sMonoColors.primColor.b = R_FB_FILTER_PRIM_COLOR(2); - sMonoColors.primColor.a = R_FB_FILTER_A; - sMonoColors.envColor.r = R_FB_FILTER_ENV_COLOR(0); - sMonoColors.envColor.g = R_FB_FILTER_ENV_COLOR(1); - sMonoColors.envColor.b = R_FB_FILTER_ENV_COLOR(2); - sMonoColors.envColor.a = R_FB_FILTER_A; - VisMono_Draw(&sMonoColors, &dlist); - } - } + func_80140D10(&D_801F8010, &dlist, zbuffer); + } else if ((R_FB_FILTER_TYPE == 5) || (R_FB_FILTER_TYPE == 6)) { + sVisZbuf.useRgba = (R_FB_FILTER_TYPE == 6); + sVisZbuf.primColor.r = R_FB_FILTER_PRIM_COLOR(0); + sVisZbuf.primColor.g = R_FB_FILTER_PRIM_COLOR(1); + sVisZbuf.primColor.b = R_FB_FILTER_PRIM_COLOR(2); + sVisZbuf.primColor.a = R_FB_FILTER_A; + sVisZbuf.envColor.r = R_FB_FILTER_ENV_COLOR(0); + sVisZbuf.envColor.g = R_FB_FILTER_ENV_COLOR(1); + sVisZbuf.envColor.b = R_FB_FILTER_ENV_COLOR(2); + sVisZbuf.envColor.a = R_FB_FILTER_A; + VisZbuf_Draw(&sVisZbuf, &dlist, zbuffer); + } else if (R_FB_FILTER_TYPE == 7) { + sMonoColors.unk_00 = 0; + sMonoColors.primColor.r = R_FB_FILTER_PRIM_COLOR(0); + sMonoColors.primColor.g = R_FB_FILTER_PRIM_COLOR(1); + sMonoColors.primColor.b = R_FB_FILTER_PRIM_COLOR(2); + sMonoColors.primColor.a = R_FB_FILTER_A; + sMonoColors.envColor.r = R_FB_FILTER_ENV_COLOR(0); + sMonoColors.envColor.g = R_FB_FILTER_ENV_COLOR(1); + sMonoColors.envColor.b = R_FB_FILTER_ENV_COLOR(2); + sMonoColors.envColor.a = R_FB_FILTER_A; + VisMono_Draw(&sMonoColors, &dlist); } *gfx = dlist; @@ -76,7 +72,7 @@ void GameState_Draw(GameState* gameState, GraphicsContext* gfxCtx) { gSPDisplayList(OVERLAY_DISP++, nextDisplayList); if (R_FB_FILTER_TYPE && R_FB_FILTER_ENV_COLOR(3) == 0) { - GameState_SetFBFilter(&nextDisplayList, (u32)gfxCtx->zbuffer); + GameState_SetFBFilter(&nextDisplayList, gfxCtx->zbuffer); } if (R_ENABLE_ARENA_DBG < 0) { @@ -215,7 +211,7 @@ void GameState_Init(GameState* gameState, GameStateFunc init, GraphicsContext* g init(gameState); func_80140CE0(&D_801F8010); - func_801420C0(&D_801F8020); + VisZbuf_Init(&sVisZbuf); VisMono_Init(&sMonoColors); func_80140898(&D_801F8048); func_801773A0(&D_801F7FF0); @@ -237,7 +233,7 @@ void GameState_Destroy(GameState* gameState) { Rumble_Destroy(); func_801773C4(&D_801F7FF0); func_80140D04(&D_801F8010); - func_801420F4(&D_801F8020); + VisZbuf_Destroy(&sVisZbuf); VisMono_Destroy(&sMonoColors); func_80140900(&D_801F8048); THA_Destroy(&gameState->heap); diff --git a/src/code/z_viszbuf.c b/src/code/z_viszbuf.c new file mode 100644 index 000000000..9970a1e1b --- /dev/null +++ b/src/code/z_viszbuf.c @@ -0,0 +1,56 @@ +#include "global.h" + +#define VISZBUF_ZBUFFRAG_HEIGHT (TMEM_SIZE / (D_801FBBCC * G_IM_SIZ_16b_BYTES)) + +void VisZbuf_Init(VisZbuf* this) { + this->useRgba = false; + this->setScissor = false; + this->primColor.r = 255; + this->primColor.g = 255; + this->primColor.b = 255; + this->primColor.a = 255; + this->envColor.r = 0; + this->envColor.g = 0; + this->envColor.b = 0; + this->envColor.a = 255; +} + +void VisZbuf_Destroy(VisZbuf* this) { +} + +void VisZbuf_Draw(VisZbuf* this, Gfx** gfxP, void* zbuffer) { + Gfx* gfx = *gfxP; + s32 height = VISZBUF_ZBUFFRAG_HEIGHT; + s32 y; + s32 fmt = !this->useRgba ? G_IM_FMT_IA : G_IM_FMT_RGBA; + + if (zbuffer == NULL) { + return; + } + + gDPPipeSync(gfx++); + if (this->setScissor == true) { + gSPDisplayList(gfx++, D_0E000000.setScissor); + } + + gDPSetOtherMode(gfx++, + G_AD_DISABLE | G_CD_MAGICSQ | G_CK_NONE | G_TC_FILT | G_TF_POINT | G_TT_NONE | G_TL_TILE | + G_TD_CLAMP | G_TP_NONE | G_CYC_1CYCLE | G_PM_NPRIMITIVE, + G_AC_NONE | G_ZS_PRIM | G_RM_OPA_SURF | G_RM_OPA_SURF2); + gDPSetCombineLERP(gfx++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, + PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT); + gDPSetColor(gfx++, G_SETPRIMCOLOR, this->primColor.rgba); + gDPSetColor(gfx++, G_SETENVCOLOR, this->envColor.rgba); + + for (y = 0; y < (D_801FBBCE - height) + 1; y += height) { + gDPLoadTextureTile(gfx++, zbuffer, fmt, G_IM_SIZ_16b, D_801FBBCC, 0, 0, y, D_801FBBCC - 1, (y + height) - 1, 0, + G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, + G_TX_NOLOD); + + gSPTextureRectangle(gfx++, 0, y << 2, D_801FBBCC << 2, (y + height) << 2, G_TX_RENDERTILE, 0, y << 5, 1 << 10, + 1 << 10); + } + + gDPPipeSync(gfx++); + *gfxP = gfx; +} diff --git a/tools/disasm/files.txt b/tools/disasm/files.txt index 81701e140..372557384 100644 --- a/tools/disasm/files.txt +++ b/tools/disasm/files.txt @@ -431,7 +431,7 @@ 0x80140CE0 : "code_80140CE0", 0x80140E80 : "code_80140E80", 0x801418B0 : "z_vismono", - 0x801420C0 : "code_801420C0", + 0x801420C0 : "z_viszbuf", 0x80142440 : "z_vr_box", 0x801435A0 : "z_vr_box_draw", 0x80143A10 : "z_sram_NES", diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index c9f7ab6cd..aa6770307 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -2775,9 +2775,9 @@ 0x80141C34:("VisMono_DesaturateDList",), 0x80141E60:("VisMono_Draw",), 0x8014204C:("VisMono_DrawOld",), - 0x801420C0:("func_801420C0",), - 0x801420F4:("func_801420F4",), - 0x80142100:("func_80142100",), + 0x801420C0:("VisZbuf_Init",), + 0x801420F4:("VisZbuf_Destroy",), + 0x80142100:("VisZbuf_Draw",), 0x80142440:("func_80142440",), 0x80143148:("func_80143148",), 0x801431E8:("Skybox_Setup",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 133034f3a..38aa66512 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -4067,7 +4067,7 @@ 0x801F6FE8:("sSlowlyStack","u8","[4096]",0x1000), 0x801F7FF0:("D_801F7FF0","UNK_TYPE1","",0x1), 0x801F8010:("D_801F8010","struct_801F8010","",0x10), - 0x801F8020:("D_801F8020","struct_801F8020","",0x10), + 0x801F8020:("sVisZbuf","VisZbuf","",0x10), 0x801F8030:("sMonoColors","VisMono","",0x18), 0x801F8048:("D_801F8048","UNK_TYPE1","",0x1), 0x801F80D0:("sGraphFaultAddrConvClient","FaultAddrConvClient","",0xc), diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index 1d08b2962..a18086d38 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -2289,9 +2289,9 @@ asm/non_matchings/code/z_vismono/VisMono_DesaturateTLUT.s,VisMono_DesaturateTLUT asm/non_matchings/code/z_vismono/VisMono_DesaturateDList.s,VisMono_DesaturateDList,0x80141C34,0x8B asm/non_matchings/code/z_vismono/VisMono_Draw.s,VisMono_Draw,0x80141E60,0x7B asm/non_matchings/code/z_vismono/VisMono_DrawOld.s,VisMono_DrawOld,0x8014204C,0x1D -asm/non_matchings/code/code_801420C0/func_801420C0.s,func_801420C0,0x801420C0,0xD -asm/non_matchings/code/code_801420C0/func_801420F4.s,func_801420F4,0x801420F4,0x3 -asm/non_matchings/code/code_801420C0/func_80142100.s,func_80142100,0x80142100,0xD0 +asm/non_matchings/code/z_viszbuf/VisZbuf_Init.s,VisZbuf_Init,0x801420C0,0xD +asm/non_matchings/code/z_viszbuf/VisZbuf_Destroy.s,VisZbuf_Destroy,0x801420F4,0x3 +asm/non_matchings/code/z_viszbuf/VisZbuf_Draw.s,VisZbuf_Draw,0x80142100,0xD0 asm/non_matchings/code/z_vr_box/func_80142440.s,func_80142440,0x80142440,0x342 asm/non_matchings/code/z_vr_box/func_80143148.s,func_80143148,0x80143148,0x28 asm/non_matchings/code/z_vr_box/Skybox_Setup.s,Skybox_Setup,0x801431E8,0x4F From 3dd7a5a3993c5ef49921364a2402baa028461288 Mon Sep 17 00:00:00 2001 From: Anghelo Carvajal Date: Tue, 18 Apr 2023 14:21:01 -0400 Subject: [PATCH 03/12] Add --convert-statics=global-with-filename (#1217) --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 3a488dc84..892d0355b 100644 --- a/Makefile +++ b/Makefile @@ -90,7 +90,7 @@ OBJCOPY := $(MIPS_BINUTILS_PREFIX)objcopy OBJDUMP := $(MIPS_BINUTILS_PREFIX)objdump ASM_PROC := python3 tools/asm-processor/build.py -ASM_PROC_FLAGS := --input-enc=utf-8 --output-enc=euc-jp +ASM_PROC_FLAGS := --input-enc=utf-8 --output-enc=euc-jp --convert-statics=global-with-filename IINC := -Iinclude -Isrc -Iassets -Ibuild -I. From 44b04292cd7fa1b15facb8db18df9d3d2a321969 Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Wed, 19 Apr 2023 04:49:36 +1000 Subject: [PATCH 04/12] Match `DynaPoly_ExpandSRT` (#1203) * match DynaPoly_ExpandSRT * name variables * oops --- include/variables.h | 2 +- src/code/z_bgcheck.c | 307 ++++++++++++++++++------------------- tools/disasm/variables.txt | 2 +- 3 files changed, 155 insertions(+), 156 deletions(-) diff --git a/include/variables.h b/include/variables.h index 90063b774..4ef96eab2 100644 --- a/include/variables.h +++ b/include/variables.h @@ -2259,7 +2259,7 @@ extern char D_801ED950[80]; extern char D_801ED9A0[80]; extern Vec3f D_801ED9F0[3]; extern Vec3f D_801EDA18[3]; -extern MtxF D_801EDA40; +extern MtxF sModelToWorldMtxF; extern Vec3f D_801EDA80[3]; extern char D_801EDAA8[80]; extern char D_801EDAF8[80]; diff --git a/src/code/z_bgcheck.c b/src/code/z_bgcheck.c index ad04236fe..c0bfe8047 100644 --- a/src/code/z_bgcheck.c +++ b/src/code/z_bgcheck.c @@ -89,7 +89,7 @@ char D_801ED9A0[80]; char D_801EDAA8[80]; char D_801EDAF8[80]; -MtxF D_801EDA40; +MtxF sModelToWorldMtxF; void BgCheck_GetStaticLookupIndicesFromPos(CollisionContext* colCtx, Vec3f* pos, Vec3i* sector); f32 BgCheck_RaycastFloorDyna(DynaRaycast* dynaRaycast); @@ -954,12 +954,12 @@ s32 BgCheck_CheckStaticCeiling(StaticLookup* lookup, u16 xpFlags, CollisionConte s32 BgCheck_CheckLineAgainstSSList(StaticLineTest* arg0) { CollisionPoly* polyList; s32 result; - Vec3f polyIntersect; // sp7C + Vec3f polyIntersect; SSNode* curNode; u8* checkedPoly; f32 minY; f32 distSq; - BgLineVsPolyTest test; // sp50 + BgLineVsPolyTest test; s16 polyId; result = false; @@ -2855,38 +2855,28 @@ void BgCheck_CalcWaterboxDimensions(Vec3f* minPos, Vec3f* maxXPos, Vec3f* maxZPo } } -#ifdef NON_MATCHING /** * original name: DynaPolyInfo_expandSRT */ void DynaPoly_ExpandSRT(PlayState* play, DynaCollisionContext* dyna, s32 bgId, s32* vtxStartIndex, s32* polyStartIndex, s32* waterBoxStartIndex) { Actor* actor; - s32 pad; - s32 pad2; - f32 numVtxInverse; s32 i; - Vec3f pos; // sp170 + s32 j; + s32 wi; + f32 numVtxInverse; + Vec3f pos; Sphere16* sphere; Vec3s* dVtxList; Vec3s* point; - Vec3f newCenterPoint; // sp158 - + Vec3f newCenterPoint; f32 newRadiusSq; CollisionHeader* pbgdata; - Vec3f newVtx; // sp144 - Vec3f vtxA; // sp138 - Vec3f vtxB; // sp12C - Vec3f vtxC; // sp120 + Vec3f newVtx; + Vec3f vtxA; + Vec3f vtxB; + Vec3f vtxC; Vec3f newNormal; - s32 wi; - Vec3f spB8; // waterbox ? - Vec3f spAC; - Vec3f spA0; // waterbox ? - Vec3f sp94; - Vec3f sp88; // waterbox ? - Vec3f sp7C; - WaterBox* waterBox; pbgdata = dyna->bgActors[bgId].colHeader; sphere = &dyna->bgActors[bgId].boundingSphere; @@ -2897,12 +2887,15 @@ void DynaPoly_ExpandSRT(PlayState* play, DynaCollisionContext* dyna, s32 bgId, s pos = actor->world.pos; pos.y += actor->shape.yOffset * actor->scale.y; + //! FAKE: + if (pbgdata && pbgdata) {} + ScaleRotPos_SetValue(&dyna->bgActors[bgId].curTransform, &actor->scale, &actor->shape.rot, &pos); if (dyna->bgActorFlags[bgId] & 4) { return; } - // if(&pos){} // fake but considerably improves match. commented out to stop warnings + if (*waterBoxStartIndex + pbgdata->numWaterBoxes > DYNA_WATERBOX_MAX) { sprintf(D_801EDAA8, "water_poly Error:[MoveBG OSUGI!!!]"); sprintf(D_801EDAF8, "num = %d > %d\n", *waterBoxStartIndex + pbgdata->numWaterBoxes, DYNA_WATERBOX_MAX); @@ -2951,139 +2944,145 @@ void DynaPoly_ExpandSRT(PlayState* play, DynaCollisionContext* dyna, s32 bgId, s *polyStartIndex += pbgdata->numPolygons; *vtxStartIndex += pbgdata->numVertices; *waterBoxStartIndex += pbgdata->numWaterBoxes; - } else { - SkinMatrix_SetScaleRotateYRPTranslate( - &D_801EDA40, dyna->bgActors[bgId].curTransform.scale.x, dyna->bgActors[bgId].curTransform.scale.y, - dyna->bgActors[bgId].curTransform.scale.z, dyna->bgActors[bgId].curTransform.rot.x, - dyna->bgActors[bgId].curTransform.rot.y, dyna->bgActors[bgId].curTransform.rot.z, - dyna->bgActors[bgId].curTransform.pos.x, dyna->bgActors[bgId].curTransform.pos.y, - dyna->bgActors[bgId].curTransform.pos.z); - - if ((pbgdata->numVertices != 0) && (pbgdata->numPolygons != 0)) { - s32 j; - numVtxInverse = 1.0f / pbgdata->numVertices; - newCenterPoint.x = newCenterPoint.y = newCenterPoint.z = 0.0f; - for (i = 0; i < pbgdata->numVertices; i++) { - Vec3f vtx; // spF4 - Vec3f vtxT; // spE8 Vtx after mtx transform - - Math_Vec3s_ToVec3f(&vtx, &pbgdata->vtxList[i]); - SkinMatrix_Vec3fMtxFMultXYZ(&D_801EDA40, &vtx, &vtxT); - BgCheck_Vec3fToVec3s(&dyna->vtxList[*vtxStartIndex + i], &vtxT); - - if (i == 0) { - dyna->bgActors[bgId].minY = dyna->bgActors[bgId].maxY = vtxT.y; - } else if (vtxT.y < dyna->bgActors[bgId].minY) { - dyna->bgActors[bgId].minY = vtxT.y; - } else if (dyna->bgActors[bgId].maxY < vtxT.y) { - dyna->bgActors[bgId].maxY = vtxT.y; - } - newCenterPoint.x += vtxT.x; - newCenterPoint.y += vtxT.y; - newCenterPoint.z += vtxT.z; - } - - newCenterPoint.x *= numVtxInverse; - newCenterPoint.y *= numVtxInverse; - newCenterPoint.z *= numVtxInverse; - sphere->center.x = newCenterPoint.x; - sphere->center.y = newCenterPoint.y; - sphere->center.z = newCenterPoint.z; - newRadiusSq = -100.0f; - - for (i = 0, j = *vtxStartIndex; i < pbgdata->numVertices; i++, j++) { - f32 radiusSq; - - newVtx.x = dyna->vtxList[j].x; - newVtx.y = dyna->vtxList[j].y; - newVtx.z = dyna->vtxList[j].z; - radiusSq = Math3D_Vec3fDistSq(&newVtx, &newCenterPoint); - if (newRadiusSq < radiusSq) { - newRadiusSq = radiusSq; - } - } - - sphere->radius = sqrtf(newRadiusSq) * 1.1f; - - for (i = 0; i < pbgdata->numPolygons; i++) { - CollisionPoly* newPoly = &dyna->polyList[*polyStartIndex + i]; - f32 newNormMagnitude; - u32 vIA; - u32 vIB; - u32 vIC; - - *newPoly = pbgdata->polyList[i]; - - vIA = (COLPOLY_VTX_INDEX(newPoly->flags_vIA) + *vtxStartIndex); - vIB = (COLPOLY_VTX_INDEX(newPoly->flags_vIB) + *vtxStartIndex); - vIC = newPoly->vIC + *vtxStartIndex; - - newPoly->flags_vIA = vIA | ((*newPoly).flags_vIA & 0xE000); - newPoly->flags_vIB = vIB | ((*newPoly).flags_vIB & 0xE000); - newPoly->vIC = vIC; - dVtxList = dyna->vtxList; - vtxA.x = dVtxList[vIA].x; - vtxA.y = dVtxList[vIA].y; - vtxA.z = dVtxList[vIA].z; - vtxB.x = dVtxList[vIB].x; - vtxB.y = dVtxList[vIB].y; - vtxB.z = dVtxList[vIB].z; - vtxC.x = dVtxList[vIC].x; - vtxC.y = dVtxList[vIC].y; - vtxC.z = dVtxList[vIC].z; - Math3D_SurfaceNorm(&vtxA, &vtxB, &vtxC, &newNormal); - newNormMagnitude = Math3D_Vec3fMagnitude(&newNormal); - - if (!IS_ZERO(newNormMagnitude)) { - newNormal.x *= (1.0f / newNormMagnitude); - newNormal.y *= (1.0f / newNormMagnitude); - newNormal.z *= (1.0f / newNormMagnitude); - newPoly->normal.x = COLPOLY_SNORMAL(newNormal.x); - newPoly->normal.y = COLPOLY_SNORMAL(newNormal.y); - newPoly->normal.z = COLPOLY_SNORMAL(newNormal.z); - } - - newPoly->dist = func_80086D24(-DOTXYZ(newNormal, vtxA)); - if (newNormal.y > 0.5f) { - s16 polyId = *polyStartIndex + i; - - DynaSSNodeList_SetSSListHead(&dyna->polyNodes, &dyna->bgActors[bgId].dynaLookup.floor, &polyId); - } else if (newNormal.y < -0.8f) { - s16 polyId = *polyStartIndex + i; - - DynaSSNodeList_SetSSListHead(&dyna->polyNodes, &dyna->bgActors[bgId].dynaLookup.ceiling, &polyId); - } else { - s16 polyId = *polyStartIndex + i; - - DynaSSNodeList_SetSSListHead(&dyna->polyNodes, &dyna->bgActors[bgId].dynaLookup.wall, &polyId); - } - } - } - - if (pbgdata->numWaterBoxes > 0) { - for (wi = 0; wi < pbgdata->numWaterBoxes; wi++) { - Math_Vec3s_ToVec3f(&spB8, &pbgdata->waterBoxes[wi].minPos); - Math_Vec3f_Copy(&spA0, &spB8); - spA0.x += pbgdata->waterBoxes[wi].xLength; - Math_Vec3f_Copy(&sp88, &spB8); - sp88.z += pbgdata->waterBoxes[wi].zLength; - SkinMatrix_Vec3fMtxFMultXYZ(&D_801EDA40, &spB8, &spAC); - SkinMatrix_Vec3fMtxFMultXYZ(&D_801EDA40, &spA0, &sp94); - SkinMatrix_Vec3fMtxFMultXYZ(&D_801EDA40, &sp88, &sp7C); - waterBox = &dyna->waterBoxList.boxes[*waterBoxStartIndex + wi]; - BgCheck_CalcWaterboxDimensions(&spAC, &sp94, &sp7C, &waterBox->minPos, &waterBox->xLength, - &waterBox->zLength); - waterBox->properties = pbgdata->waterBoxes[wi].properties; - } - } - *polyStartIndex += pbgdata->numPolygons; - *vtxStartIndex += pbgdata->numVertices; - *waterBoxStartIndex += pbgdata->numWaterBoxes; + return; } + + SkinMatrix_SetScaleRotateYRPTranslate( + &sModelToWorldMtxF, dyna->bgActors[bgId].curTransform.scale.x, dyna->bgActors[bgId].curTransform.scale.y, + dyna->bgActors[bgId].curTransform.scale.z, dyna->bgActors[bgId].curTransform.rot.x, + dyna->bgActors[bgId].curTransform.rot.y, dyna->bgActors[bgId].curTransform.rot.z, + dyna->bgActors[bgId].curTransform.pos.x, dyna->bgActors[bgId].curTransform.pos.y, + dyna->bgActors[bgId].curTransform.pos.z); + + if ((pbgdata->numVertices != 0) && (pbgdata->numPolygons != 0)) { + f32 radiusSq; + + numVtxInverse = 1.0f / pbgdata->numVertices; + newCenterPoint.x = newCenterPoint.y = newCenterPoint.z = 0.0f; + for (i = 0; i < pbgdata->numVertices; i++) { + Vec3f vtx; + Vec3f vtxT; // Vtx after mtx transform + s32 pad; + + Math_Vec3s_ToVec3f(&vtx, &pbgdata->vtxList[i]); + SkinMatrix_Vec3fMtxFMultXYZ(&sModelToWorldMtxF, &vtx, &vtxT); + BgCheck_Vec3fToVec3s(&dyna->vtxList[*vtxStartIndex + (u32)i], &vtxT); + + if (i == 0) { + dyna->bgActors[bgId].minY = dyna->bgActors[bgId].maxY = vtxT.y; + } else if (vtxT.y < dyna->bgActors[bgId].minY) { + dyna->bgActors[bgId].minY = vtxT.y; + } else if (dyna->bgActors[bgId].maxY < vtxT.y) { + dyna->bgActors[bgId].maxY = vtxT.y; + } + newCenterPoint.x += vtxT.x; + newCenterPoint.y += vtxT.y; + newCenterPoint.z += vtxT.z; + } + + newCenterPoint.x *= numVtxInverse; + newCenterPoint.y *= numVtxInverse; + newCenterPoint.z *= numVtxInverse; + sphere->center.x = newCenterPoint.x; + sphere->center.y = newCenterPoint.y; + sphere->center.z = newCenterPoint.z; + newRadiusSq = -100.0f; + + for (i = 0, j = *vtxStartIndex; i < pbgdata->numVertices; i++, j++) { + newVtx.x = dyna->vtxList[j].x; + newVtx.y = dyna->vtxList[j].y; + newVtx.z = dyna->vtxList[j].z; + radiusSq = Math3D_Vec3fDistSq(&newVtx, &newCenterPoint); + if (newRadiusSq < radiusSq) { + newRadiusSq = radiusSq; + } + } + + sphere->radius = sqrtf(newRadiusSq) * 1.1f; + + for (i = 0; i < pbgdata->numPolygons; i++) { + CollisionPoly* newPoly = &dyna->polyList[*polyStartIndex + i]; + f32 newNormMagnitude; + u32 vIA; + u32 vIB; + u32 vIC; + + *newPoly = pbgdata->polyList[i]; + + vIA = (COLPOLY_VTX_INDEX(newPoly->flags_vIA) + *vtxStartIndex); + vIB = (COLPOLY_VTX_INDEX(newPoly->flags_vIB) + *vtxStartIndex); + vIC = newPoly->vIC + *vtxStartIndex; + + newPoly->flags_vIA = vIA | (newPoly->flags_vIA & 0xE000); + newPoly->flags_vIB = vIB | (newPoly->flags_vIB & 0xE000); + newPoly->vIC = vIC; + dVtxList = dyna->vtxList; + vtxA.x = dVtxList[vIA].x; + vtxA.y = dVtxList[vIA].y; + vtxA.z = dVtxList[vIA].z; + vtxB.x = dVtxList[vIB].x; + vtxB.y = dVtxList[vIB].y; + vtxB.z = dVtxList[vIB].z; + vtxC.x = dVtxList[vIC].x; + vtxC.y = dVtxList[vIC].y; + vtxC.z = dVtxList[vIC].z; + Math3D_SurfaceNorm(&vtxA, &vtxB, &vtxC, &newNormal); + newNormMagnitude = Math3D_Vec3fMagnitude(&newNormal); + + if (!IS_ZERO(newNormMagnitude)) { + newNormal.x *= 1.0f / newNormMagnitude; + newNormal.y *= 1.0f / newNormMagnitude; + newNormal.z *= 1.0f / newNormMagnitude; + newPoly->normal.x = COLPOLY_SNORMAL(newNormal.x); + newPoly->normal.y = COLPOLY_SNORMAL(newNormal.y); + newPoly->normal.z = COLPOLY_SNORMAL(newNormal.z); + } + + newPoly->dist = func_80086D24(-DOTXYZ(newNormal, vtxA)); + if (newNormal.y > 0.5f) { + s16 polyId = *polyStartIndex + i; + + DynaSSNodeList_SetSSListHead(&dyna->polyNodes, &dyna->bgActors[bgId].dynaLookup.floor, &polyId); + } else if (newNormal.y < -0.8f) { + s16 polyId = *polyStartIndex + i; + + DynaSSNodeList_SetSSListHead(&dyna->polyNodes, &dyna->bgActors[bgId].dynaLookup.ceiling, &polyId); + } else { + s16 polyId = *polyStartIndex + i; + + DynaSSNodeList_SetSSListHead(&dyna->polyNodes, &dyna->bgActors[bgId].dynaLookup.wall, &polyId); + } + } + } + + if (pbgdata->numWaterBoxes > 0) { + for (wi = 0; wi < pbgdata->numWaterBoxes; wi++) { + WaterBox* waterBox; + Vec3f modelMinPos; + Vec3f worldMinPos; + Vec3f modelMinPosXOffset; + Vec3f worldMinPosXOffset; + Vec3f modelMinPosZOffset; + Vec3f worldMinPosZOffset; + + Math_Vec3s_ToVec3f(&modelMinPos, &pbgdata->waterBoxes[wi].minPos); + Math_Vec3f_Copy(&modelMinPosXOffset, &modelMinPos); + modelMinPosXOffset.x += pbgdata->waterBoxes[wi].xLength; + Math_Vec3f_Copy(&modelMinPosZOffset, &modelMinPos); + modelMinPosZOffset.z += pbgdata->waterBoxes[wi].zLength; + SkinMatrix_Vec3fMtxFMultXYZ(&sModelToWorldMtxF, &modelMinPos, &worldMinPos); + SkinMatrix_Vec3fMtxFMultXYZ(&sModelToWorldMtxF, &modelMinPosXOffset, &worldMinPosXOffset); + SkinMatrix_Vec3fMtxFMultXYZ(&sModelToWorldMtxF, &modelMinPosZOffset, &worldMinPosZOffset); + waterBox = &dyna->waterBoxList.boxes[*waterBoxStartIndex + wi]; + BgCheck_CalcWaterboxDimensions(&worldMinPos, &worldMinPosXOffset, &worldMinPosZOffset, &waterBox->minPos, + &waterBox->xLength, &waterBox->zLength); + waterBox->properties = pbgdata->waterBoxes[wi].properties; + } + } + *polyStartIndex += pbgdata->numPolygons; + *vtxStartIndex += pbgdata->numVertices; + *waterBoxStartIndex += pbgdata->numWaterBoxes; } -#else -#pragma GLOBAL_ASM("asm/non_matchings/code/z_bgcheck/DynaPoly_ExpandSRT.s") -#endif void BgCheck_ResetFlagsIfLoadedActor(PlayState* play, DynaCollisionContext* dyna, Actor* actor) { DynaPolyActor* dynaActor; diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 38aa66512..dc5f57f8c 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -3862,7 +3862,7 @@ 0x801ED9A0:("D_801ED9A0","char","[80]",0x50), 0x801ED9F0:("D_801ED9F0","Vec3f","[3]",0x24), 0x801EDA18:("D_801EDA18","Vec3f","[3]",0x24), - 0x801EDA40:("D_801EDA40","MtxF","",0x40), + 0x801EDA40:("sModelToWorldMtxF","MtxF","",0x40), 0x801EDA80:("D_801EDA80","Vec3f","[3]",0x24), 0x801EDAA8:("D_801EDAA8","char","[80]",0x50), 0x801EDAF8:("D_801EDAF8","char","[80]",0x50), From a67d086addc1d0e226c28cadf58dda5e637d58ba Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Wed, 19 Apr 2023 06:02:56 +1000 Subject: [PATCH 05/12] Defines for flags passed to `Actor_UpdateBgCheckInfo` (#1197) * add flags * add comment * small fix --------- Co-authored-by: angie --- include/functions.h | 2 +- include/z64actor.h | 15 +++++++ src/code/z_actor.c | 42 +++++++++---------- src/code/z_en_item00.c | 4 +- .../actors/ovl_Bg_Icicle/z_bg_icicle.c | 2 +- .../ovl_Bg_Ikana_Dharma/z_bg_ikana_dharma.c | 5 ++- .../ovl_Bg_Kin2_Picture/z_bg_kin2_picture.c | 2 +- src/overlays/actors/ovl_Boss_02/z_boss_02.c | 2 +- src/overlays/actors/ovl_Boss_03/z_boss_03.c | 3 +- src/overlays/actors/ovl_Boss_04/z_boss_04.c | 5 ++- src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c | 2 +- src/overlays/actors/ovl_Dm_Al/z_dm_al.c | 2 +- src/overlays/actors/ovl_Dm_An/z_dm_an.c | 2 +- src/overlays/actors/ovl_Dm_Bal/z_dm_bal.c | 2 +- src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c | 2 +- src/overlays/actors/ovl_Dm_Nb/z_dm_nb.c | 2 +- src/overlays/actors/ovl_En_Ah/z_en_ah.c | 2 +- .../ovl_En_Akindonuts/z_en_akindonuts.c | 2 +- src/overlays/actors/ovl_En_Am/z_en_am.c | 4 +- src/overlays/actors/ovl_En_Ani/z_en_ani.c | 2 +- .../ovl_En_Attack_Niw/z_en_attack_niw.c | 4 +- src/overlays/actors/ovl_En_Az/z_en_az.c | 6 +-- src/overlays/actors/ovl_En_Baba/z_en_baba.c | 2 +- src/overlays/actors/ovl_En_Baguo/z_en_baguo.c | 4 +- .../actors/ovl_En_Baisen/z_en_baisen.c | 4 +- src/overlays/actors/ovl_En_Bat/z_en_bat.c | 8 ++-- src/overlays/actors/ovl_En_Bb/z_en_bb.c | 3 +- .../actors/ovl_En_Bba_01/z_en_bba_01.c | 2 +- .../actors/ovl_En_Bbfall/z_en_bbfall.c | 3 +- src/overlays/actors/ovl_En_Bee/z_en_bee.c | 4 +- .../actors/ovl_En_Bigpamet/z_en_bigpamet.c | 4 +- src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c | 2 +- .../actors/ovl_En_Bigslime/z_en_bigslime.c | 4 +- .../actors/ovl_En_Bji_01/z_en_bji_01.c | 2 +- src/overlays/actors/ovl_En_Bom/z_en_bom.c | 6 ++- .../ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c | 4 +- .../actors/ovl_En_Bom_Chu/z_en_bom_chu.c | 2 +- .../actors/ovl_En_Bombers/z_en_bombers.c | 4 +- .../actors/ovl_En_Bombers2/z_en_bombers2.c | 4 +- src/overlays/actors/ovl_En_Bombf/z_en_bombf.c | 8 +++- .../actors/ovl_En_Bomjima/z_en_bomjima.c | 4 +- .../actors/ovl_En_Bomjimb/z_en_bomjimb.c | 4 +- src/overlays/actors/ovl_En_Box/z_en_box.c | 3 +- .../actors/ovl_En_Bubble/z_en_bubble.c | 3 +- .../actors/ovl_En_Clear_Tag/z_en_clear_tag.c | 2 +- .../actors/ovl_En_Cne_01/z_en_cne_01.c | 2 +- .../actors/ovl_En_Col_Man/z_en_col_man.c | 4 +- src/overlays/actors/ovl_En_Cow/z_en_cow.c | 2 +- src/overlays/actors/ovl_En_Crow/z_en_crow.c | 3 +- src/overlays/actors/ovl_En_Daiku/z_en_daiku.c | 4 +- .../actors/ovl_En_Daiku2/z_en_daiku2.c | 4 +- .../actors/ovl_En_Dekubaba/z_en_dekubaba.c | 5 ++- .../actors/ovl_En_Dekunuts/z_en_dekunuts.c | 4 +- .../ovl_En_Demo_heishi/z_en_demo_heishi.c | 4 +- src/overlays/actors/ovl_En_Dg/z_en_dg.c | 2 +- .../actors/ovl_En_Dinofos/z_en_dinofos.c | 4 +- src/overlays/actors/ovl_En_Dno/z_en_dno.c | 6 +-- src/overlays/actors/ovl_En_Dnp/z_en_dnp.c | 2 +- src/overlays/actors/ovl_En_Dnq/z_en_dnq.c | 2 +- src/overlays/actors/ovl_En_Dns/z_en_dns.c | 2 +- .../actors/ovl_En_Dodongo/z_en_dodongo.c | 4 +- src/overlays/actors/ovl_En_Egol/z_en_egol.c | 4 +- .../actors/ovl_En_Elforg/z_en_elforg.c | 3 +- .../ovl_En_Ending_Hero/z_en_ending_hero.c | 4 +- .../ovl_En_Ending_Hero2/z_en_ending_hero2.c | 4 +- .../ovl_En_Ending_Hero3/z_en_ending_hero3.c | 4 +- .../ovl_En_Ending_Hero4/z_en_ending_hero4.c | 4 +- .../ovl_En_Ending_Hero5/z_en_ending_hero5.c | 4 +- .../ovl_En_Ending_Hero6/z_en_ending_hero6.c | 4 +- .../actors/ovl_En_Estone/z_en_estone.c | 3 +- src/overlays/actors/ovl_En_Famos/z_en_famos.c | 4 +- src/overlays/actors/ovl_En_Fg/z_en_fg.c | 7 ++-- .../actors/ovl_En_Firefly/z_en_firefly.c | 3 +- src/overlays/actors/ovl_En_Fish/z_en_fish.c | 22 +++++----- src/overlays/actors/ovl_En_Fish/z_en_fish.h | 2 +- src/overlays/actors/ovl_En_Fish2/z_en_fish2.c | 3 +- .../actors/ovl_En_Fishing/z_en_fishing.c | 9 ++-- .../actors/ovl_En_Floormas/z_en_floormas.c | 4 +- src/overlays/actors/ovl_En_Fu/z_en_fu.c | 2 +- .../actors/ovl_En_Fu_Mato/z_en_fu_mato.c | 6 ++- src/overlays/actors/ovl_En_Fz/z_en_fz.c | 2 +- .../actors/ovl_En_Gamelupy/z_en_gamelupy.c | 2 +- src/overlays/actors/ovl_En_Ge1/z_en_ge1.c | 3 +- src/overlays/actors/ovl_En_Ge2/z_en_ge2.c | 3 +- src/overlays/actors/ovl_En_Geg/z_en_geg.c | 2 +- src/overlays/actors/ovl_En_Gg/z_en_gg.c | 3 +- src/overlays/actors/ovl_En_Giant/z_en_giant.c | 2 +- src/overlays/actors/ovl_En_Gk/z_en_gk.c | 3 +- src/overlays/actors/ovl_En_Gm/z_en_gm.c | 2 +- src/overlays/actors/ovl_En_Go/z_en_go.c | 2 +- .../actors/ovl_En_Goroiwa/z_en_goroiwa.c | 3 +- .../ovl_En_Grasshopper/z_en_grasshopper.c | 4 +- src/overlays/actors/ovl_En_Gs/z_en_gs.c | 2 +- .../ovl_En_Guard_Nuts/z_en_guard_nuts.c | 4 +- .../actors/ovl_En_Guruguru/z_en_guruguru.c | 4 +- .../actors/ovl_En_Hakurock/z_en_hakurock.c | 3 +- .../actors/ovl_En_Heishi/z_en_heishi.c | 4 +- src/overlays/actors/ovl_En_Hg/z_en_hg.c | 2 +- .../ovl_En_Hidden_Nuts/z_en_hidden_nuts.c | 4 +- .../actors/ovl_En_Hint_Skb/z_en_hint_skb.c | 4 +- src/overlays/actors/ovl_En_Horse/z_en_horse.c | 7 +++- .../z_en_horse_link_child.c | 4 +- src/overlays/actors/ovl_En_Hs/z_en_hs.c | 2 +- src/overlays/actors/ovl_En_Ig/z_en_ig.c | 2 +- src/overlays/actors/ovl_En_Ik/z_en_ik.c | 4 +- src/overlays/actors/ovl_En_In/z_en_in.c | 2 +- .../actors/ovl_En_Insect/z_en_insect.c | 12 +++--- .../z_en_invisible_ruppe.c | 2 +- src/overlays/actors/ovl_En_Ishi/z_en_ishi.c | 8 +++- src/overlays/actors/ovl_En_Ja/z_en_ja.c | 2 +- src/overlays/actors/ovl_En_Jg/z_en_jg.c | 3 +- src/overlays/actors/ovl_En_Js/z_en_js.c | 2 +- .../actors/ovl_En_Kaizoku/z_en_kaizoku.c | 4 +- .../actors/ovl_En_Kakasi/z_en_kakasi.c | 3 +- src/overlays/actors/ovl_En_Kame/z_en_kame.c | 4 +- .../actors/ovl_En_Kanban/z_en_kanban.c | 10 +++-- .../actors/ovl_En_Karebaba/z_en_karebaba.c | 5 ++- .../actors/ovl_En_Kendo_Js/z_en_kendo_js.c | 2 +- src/overlays/actors/ovl_En_Kusa/z_en_kusa.c | 8 +++- src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c | 3 +- .../actors/ovl_En_Lift_Nuts/z_en_lift_nuts.c | 4 +- src/overlays/actors/ovl_En_Ma4/z_en_ma4.c | 4 +- .../actors/ovl_En_Ma_Yto/z_en_ma_yto.c | 2 +- .../actors/ovl_En_Ma_Yts/z_en_ma_yts.c | 2 +- .../actors/ovl_En_Minifrog/z_en_minifrog.c | 4 +- src/overlays/actors/ovl_En_Mk/z_en_mk.c | 2 +- src/overlays/actors/ovl_En_Mkk/z_en_mkk.c | 4 +- src/overlays/actors/ovl_En_Mm/z_en_mm.c | 4 +- src/overlays/actors/ovl_En_Mm3/z_en_mm3.c | 2 +- .../actors/ovl_En_Mushi2/z_en_mushi2.c | 3 +- src/overlays/actors/ovl_En_Muto/z_en_muto.c | 4 +- .../actors/ovl_En_Neo_Reeba/z_en_neo_reeba.c | 2 +- .../actors/ovl_En_Nimotsu/z_en_nimotsu.c | 2 +- src/overlays/actors/ovl_En_Niw/z_en_niw.c | 4 +- .../actors/ovl_En_Nutsball/z_en_nutsball.c | 3 +- src/overlays/actors/ovl_En_Nwc/z_en_nwc.c | 2 +- .../actors/ovl_En_Onpuman/z_en_onpuman.c | 2 +- src/overlays/actors/ovl_En_Ot/z_en_ot.c | 2 +- src/overlays/actors/ovl_En_Owl/z_en_owl.c | 4 +- .../actors/ovl_En_Pamera/z_en_pamera.c | 4 +- .../actors/ovl_En_Pametfrog/z_en_pametfrog.c | 4 +- src/overlays/actors/ovl_En_Paper/z_en_paper.c | 2 +- .../actors/ovl_En_Peehat/z_en_peehat.c | 2 +- src/overlays/actors/ovl_En_Pm/z_en_pm.c | 4 +- .../actors/ovl_En_Po_Fusen/z_en_po_fusen.c | 2 +- .../ovl_En_Po_Sisters/z_en_po_sisters.c | 2 +- src/overlays/actors/ovl_En_Poh/z_en_poh.c | 2 +- src/overlays/actors/ovl_En_Pp/z_en_pp.c | 4 +- src/overlays/actors/ovl_En_Pr/z_en_pr.c | 4 +- src/overlays/actors/ovl_En_Pr2/z_en_pr2.c | 8 +++- src/overlays/actors/ovl_En_Prz/z_en_prz.c | 4 +- src/overlays/actors/ovl_En_Pst/z_en_pst.c | 2 +- .../actors/ovl_En_Racedog/z_en_racedog.c | 2 +- .../actors/ovl_En_Rail_Skb/z_en_rail_skb.c | 2 +- .../actors/ovl_En_Railgibud/z_en_railgibud.c | 6 ++- src/overlays/actors/ovl_En_Rat/z_en_rat.c | 3 +- src/overlays/actors/ovl_En_Rd/z_en_rd.c | 4 +- src/overlays/actors/ovl_En_Rg/z_en_rg.c | 4 +- src/overlays/actors/ovl_En_Rr/z_en_rr.c | 4 +- src/overlays/actors/ovl_En_Ru/z_en_ru.c | 2 +- .../actors/ovl_En_Ruppecrow/z_en_ruppecrow.c | 3 +- src/overlays/actors/ovl_En_Rz/z_en_rz.c | 2 +- .../actors/ovl_En_S_Goro/z_en_s_goro.c | 2 +- src/overlays/actors/ovl_En_Sb/z_en_sb.c | 2 +- .../actors/ovl_En_Sc_Ruppe/z_en_sc_ruppe.c | 2 +- .../actors/ovl_En_Scopenuts/z_en_scopenuts.c | 2 +- .../actors/ovl_En_Sellnuts/z_en_sellnuts.c | 2 +- src/overlays/actors/ovl_En_Skb/z_en_skb.c | 4 +- .../actors/ovl_En_Snowman/z_en_snowman.c | 8 +++- src/overlays/actors/ovl_En_Ssh/z_en_ssh.c | 2 +- src/overlays/actors/ovl_En_St/z_en_st.c | 2 +- src/overlays/actors/ovl_En_Sth/z_en_sth.c | 2 +- .../ovl_En_Stone_heishi/z_en_stone_heishi.c | 4 +- .../ovl_En_Stop_heishi/z_en_stop_heishi.c | 4 +- .../actors/ovl_En_Suttari/z_en_suttari.c | 4 +- src/overlays/actors/ovl_En_Sw/z_en_sw.c | 4 +- .../ovl_En_Syateki_Wf/z_en_syateki_wf.c | 2 +- src/overlays/actors/ovl_En_Tab/z_en_tab.c | 2 +- .../ovl_En_Talk_Gibud/z_en_talk_gibud.c | 4 +- .../actors/ovl_En_Tanron2/z_en_tanron2.c | 2 +- .../actors/ovl_En_Tanron3/z_en_tanron3.c | 2 +- .../actors/ovl_En_Tanron5/z_en_tanron5.c | 4 +- .../actors/ovl_En_Tanron6/z_en_tanron6.c | 4 +- src/overlays/actors/ovl_En_Tg/z_en_tg.c | 2 +- .../actors/ovl_En_Thiefbird/z_en_thiefbird.c | 3 +- src/overlays/actors/ovl_En_Tite/z_en_tite.c | 7 ++-- src/overlays/actors/ovl_En_Tite/z_en_tite.h | 2 +- src/overlays/actors/ovl_En_Tk/z_en_tk.c | 4 +- .../actors/ovl_En_Torch2/z_en_torch2.c | 2 +- src/overlays/actors/ovl_En_Trt2/z_en_trt2.c | 2 +- src/overlays/actors/ovl_En_Tru/z_en_tru.c | 2 +- .../actors/ovl_En_Tru_Mt/z_en_tru_mt.c | 2 +- src/overlays/actors/ovl_En_Tsn/z_en_tsn.c | 2 +- .../actors/ovl_En_Tubo_Trap/z_en_tubo_trap.c | 4 +- src/overlays/actors/ovl_En_Vm/z_en_vm.c | 3 +- .../actors/ovl_En_Wallmas/z_en_wallmas.c | 4 +- .../ovl_En_Water_Effect/z_en_water_effect.c | 4 +- src/overlays/actors/ovl_En_Wf/z_en_wf.c | 4 +- src/overlays/actors/ovl_En_Wiz/z_en_wiz.c | 4 +- .../actors/ovl_En_Wiz_Fire/z_en_wiz_fire.c | 4 +- src/overlays/actors/ovl_En_Yb/z_en_yb.c | 2 +- src/overlays/actors/ovl_En_Zo/z_en_zo.c | 2 +- src/overlays/actors/ovl_En_Zob/z_en_zob.c | 2 +- src/overlays/actors/ovl_En_Zod/z_en_zod.c | 2 +- src/overlays/actors/ovl_En_Zog/z_en_zog.c | 2 +- .../actors/ovl_En_Zoraegg/z_en_zoraegg.c | 2 +- src/overlays/actors/ovl_En_Zos/z_en_zos.c | 2 +- src/overlays/actors/ovl_En_Zot/z_en_zot.c | 2 +- src/overlays/actors/ovl_En_Zov/z_en_zov.c | 2 +- src/overlays/actors/ovl_En_Zow/z_en_zow.c | 2 +- src/overlays/actors/ovl_Mir_Ray2/z_mir_ray2.c | 2 +- src/overlays/actors/ovl_Obj_Aqua/z_obj_aqua.c | 2 +- .../actors/ovl_Obj_Armos/z_obj_armos.c | 12 +++--- .../actors/ovl_Obj_Armos/z_obj_armos.h | 2 +- .../ovl_Obj_Bigicicle/z_obj_bigicicle.c | 2 +- src/overlays/actors/ovl_Obj_Comb/z_obj_comb.c | 2 +- .../ovl_Obj_Flowerpot/z_obj_flowerpot.c | 3 +- .../actors/ovl_Obj_Ghaka/z_obj_ghaka.c | 2 +- .../ovl_Obj_Grass_Carry/z_obj_grass_carry.c | 4 +- .../actors/ovl_Obj_Hakaisi/z_obj_hakaisi.c | 4 +- .../ovl_Obj_Kendo_Kanban/z_obj_kendo_kanban.c | 4 +- .../actors/ovl_Obj_Kibako/z_obj_kibako.c | 12 ++++-- .../ovl_Obj_Lupygamelift/z_obj_lupygamelift.c | 2 +- .../actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c | 14 +++---- .../actors/ovl_Obj_Pzlblock/z_obj_pzlblock.h | 2 +- .../ovl_Obj_Snowball2/z_obj_snowball2.c | 9 ++-- src/overlays/actors/ovl_Obj_Toge/z_obj_toge.c | 3 +- .../actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c | 2 +- .../actors/ovl_Obj_Tsubo/z_obj_tsubo.c | 13 ++++-- src/overlays/actors/ovl_Obj_Um/z_obj_um.c | 3 +- 230 files changed, 544 insertions(+), 323 deletions(-) diff --git a/include/functions.h b/include/functions.h index aff5ae5a1..b9b3b682b 100644 --- a/include/functions.h +++ b/include/functions.h @@ -667,7 +667,7 @@ s32 Actor_IsFacingAndNearPlayer(Actor* actor, f32 range, s16 maxAngleDiff); s32 Actor_ActorAIsFacingAndNearActorB(Actor* actorA, Actor* actorB, f32 range, s16 maxAngleDiff); void Actor_GetSlopeDirection(CollisionPoly* floorPoly, Vec3f* slopeNormal, s16* downwardSlopeYaw); -void Actor_UpdateBgCheckInfo(PlayState* play, Actor* actor, f32 wallCheckHeight, f32 wallCheckRadius, f32 ceilingCheckHeight, u32 flags); +void Actor_UpdateBgCheckInfo(PlayState* play, Actor* actor, f32 wallCheckHeight, f32 wallCheckRadius, f32 ceilingCheckHeight, u32 updBgCheckInfoFlags); Hilite* Hilite_DrawOpa(Vec3f* object, Vec3f* eye, Vec3f* lightDir, GraphicsContext* gfxCtx); void func_800B8050(Actor* actor, PlayState* play, s32 flag); void func_800B8118(Actor* actor, PlayState* play, s32 flag); diff --git a/include/z64actor.h b/include/z64actor.h index 86ea6e22c..5e9c35cf4 100644 --- a/include/z64actor.h +++ b/include/z64actor.h @@ -134,6 +134,7 @@ typedef struct { /* 0x18 */ Vec3f feetPos[2]; // Update by using `Actor_SetFeetPos` in PostLimbDrawOpa } ActorShape; // size = 0x30 +// Flags for bgCheckFlags #define BGCHECKFLAG_GROUND (1 << 0) // Standing on the ground #define BGCHECKFLAG_GROUND_TOUCH (1 << 1) // Has touched the ground (only active for 1 frame) #define BGCHECKFLAG_GROUND_LEAVE (1 << 2) // Has left the ground (only active for 1 frame) @@ -148,6 +149,20 @@ typedef struct { #define BGCHECKFLAG_PLAYER_800 (1 << 11) // #define BGCHECKFLAG_PLAYER_1000 (1 << 12) // +// Flags for Actor_UpdateBgCheckInfo +#define UPDBGCHECKINFO_FLAG_1 (1 << 0) // check wall +#define UPDBGCHECKINFO_FLAG_2 (1 << 1) // check ceiling +#define UPDBGCHECKINFO_FLAG_4 (1 << 2) // check floor and water +#define UPDBGCHECKINFO_FLAG_8 (1 << 3) +#define UPDBGCHECKINFO_FLAG_10 (1 << 4) +#define UPDBGCHECKINFO_FLAG_20 (1 << 5) // unused +#define UPDBGCHECKINFO_FLAG_40 (1 << 6) // disable water ripples +#define UPDBGCHECKINFO_FLAG_80 (1 << 7) +#define UPDBGCHECKINFO_FLAG_100 (1 << 8) +#define UPDBGCHECKINFO_FLAG_200 (1 << 9) +#define UPDBGCHECKINFO_FLAG_400 (1 << 10) // check water +#define UPDBGCHECKINFO_FLAG_800 (1 << 11) + typedef struct Actor { /* 0x000 */ s16 id; // Actor ID /* 0x002 */ u8 category; // Actor category. Refer to the corresponding enum for values diff --git a/src/code/z_actor.c b/src/code/z_actor.c index d3eea4ebe..db01bb345 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -1502,12 +1502,12 @@ void Actor_GetSlopeDirection(CollisionPoly* floorPoly, Vec3f* slopeNormal, s16* *downwardSlopeYaw = Math_Atan2S_XY(slopeNormal->z, slopeNormal->x); } -s32 func_800B761C(Actor* actor, f32 arg1, s32 arg2) { +s32 func_800B761C(Actor* actor, f32 arg1, s32 updBgCheckInfoFlags) { if (actor->bgCheckFlags & BGCHECKFLAG_GROUND) { actor->bgCheckFlags &= ~BGCHECKFLAG_GROUND; actor->bgCheckFlags |= BGCHECKFLAG_GROUND_LEAVE; - if ((actor->velocity.y < 0.0f) && (arg2 & 0x10)) { + if ((actor->velocity.y < 0.0f) && (updBgCheckInfoFlags & UPDBGCHECKINFO_FLAG_10)) { actor->velocity.y = 0.0f; } return false; @@ -1516,16 +1516,16 @@ s32 func_800B761C(Actor* actor, f32 arg1, s32 arg2) { return true; } -s32 func_800B7678(PlayState* play, Actor* actor, Vec3f* pos, s32 flags) { +s32 func_800B7678(PlayState* play, Actor* actor, Vec3f* pos, s32 updBgCheckInfoFlags) { f32 distToFloor; s32 bgId; - pos->y += (flags & 0x800) ? 10.0f : 50.0f; + pos->y += (updBgCheckInfoFlags & UPDBGCHECKINFO_FLAG_800) ? 10.0f : 50.0f; actor->floorHeight = BgCheck_EntityRaycastFloor5_2(play, &play->colCtx, &actor->floorPoly, &bgId, actor, pos); actor->bgCheckFlags &= ~(BGCHECKFLAG_GROUND_TOUCH | BGCHECKFLAG_GROUND_LEAVE | BGCHECKFLAG_GROUND_STRICT); if (actor->floorHeight <= BGCHECK_Y_MIN) { - return func_800B761C(actor, BGCHECK_Y_MIN, flags); + return func_800B761C(actor, BGCHECK_Y_MIN, updBgCheckInfoFlags); } distToFloor = actor->floorHeight - actor->world.pos.y; @@ -1551,9 +1551,9 @@ s32 func_800B7678(PlayState* play, Actor* actor, Vec3f* pos, s32 flags) { if (actor->velocity.y <= 0.0f) { if (!(actor->bgCheckFlags & BGCHECKFLAG_GROUND)) { actor->bgCheckFlags |= BGCHECKFLAG_GROUND_TOUCH; - } else if ((flags & 8) && (actor->gravity < 0.0f)) { + } else if ((updBgCheckInfoFlags & UPDBGCHECKINFO_FLAG_8) && (actor->gravity < 0.0f)) { actor->velocity.y = -4.0f; - } else if (!(flags & 0x100)) { + } else if (!(updBgCheckInfoFlags & UPDBGCHECKINFO_FLAG_100)) { actor->velocity.y = 0.0f; } @@ -1561,14 +1561,14 @@ s32 func_800B7678(PlayState* play, Actor* actor, Vec3f* pos, s32 flags) { BgCheck2_AttachToMesh(&play->colCtx, actor, (s32)actor->floorBgId); } } else { - return func_800B761C(actor, distToFloor, flags); + return func_800B761C(actor, distToFloor, updBgCheckInfoFlags); } return true; } void Actor_UpdateBgCheckInfo(PlayState* play, Actor* actor, f32 wallCheckHeight, f32 wallCheckRadius, - f32 ceilingCheckHeight, u32 flags) { + f32 ceilingCheckHeight, u32 updBgCheckInfoFlags) { f32 sp94 = actor->world.pos.y - actor->prevPos.y; s32 pad; Vec3f pos; @@ -1577,21 +1577,21 @@ void Actor_UpdateBgCheckInfo(PlayState* play, Actor* actor, f32 wallCheckHeight, BgCheck2_UpdateActorAttachedToMesh(&play->colCtx, actor->floorBgId, actor); } - if (flags & 1) { + if (updBgCheckInfoFlags & UPDBGCHECKINFO_FLAG_1) { s32 bgId; actor->bgCheckFlags &= ~BGCHECKFLAG_PLAYER_1000; - if ((!(flags & 0x80) && + if ((!(updBgCheckInfoFlags & UPDBGCHECKINFO_FLAG_80) && (BgCheck_EntitySphVsWall3(&play->colCtx, &pos, &actor->world.pos, &actor->prevPos, wallCheckRadius, &actor->wallPoly, &bgId, actor, wallCheckHeight))) || - ((flags & 0x80) && + ((updBgCheckInfoFlags & UPDBGCHECKINFO_FLAG_80) && (BgCheck_EntitySphVsWall4(&play->colCtx, &pos, &actor->world.pos, &actor->prevPos, wallCheckRadius, &actor->wallPoly, &bgId, actor, wallCheckHeight)))) { CollisionPoly* sp7C = actor->wallPoly; actor->bgCheckFlags |= BGCHECKFLAG_WALL; - if ((flags & 0x200) && (actor->bgCheckFlags & BGCHECKFLAG_PLAYER_1000) && ((s32)sp7C->normal.y > 0) && - (sqrtf(SQXYZ(actor->colChkInfo.displacement)) < 10.0f)) { + if ((updBgCheckInfoFlags & UPDBGCHECKINFO_FLAG_200) && (actor->bgCheckFlags & BGCHECKFLAG_PLAYER_1000) && + ((s32)sp7C->normal.y > 0) && (sqrtf(SQXYZ(actor->colChkInfo.displacement)) < 10.0f)) { actor->bgCheckFlags &= ~BGCHECKFLAG_WALL; } else if (actor->bgCheckFlags & BGCHECKFLAG_WALL) { Math_Vec3f_Copy(&actor->world.pos, &pos); @@ -1606,7 +1606,7 @@ void Actor_UpdateBgCheckInfo(PlayState* play, Actor* actor, f32 wallCheckHeight, pos.x = actor->world.pos.x; pos.z = actor->world.pos.z; - if (flags & 2) { + if (updBgCheckInfoFlags & UPDBGCHECKINFO_FLAG_2) { f32 y; pos.y = actor->prevPos.y + 4.0f; @@ -1618,12 +1618,12 @@ void Actor_UpdateBgCheckInfo(PlayState* play, Actor* actor, f32 wallCheckHeight, actor->bgCheckFlags &= ~BGCHECKFLAG_CEILING; } } - if (flags & 4) { + if (updBgCheckInfoFlags & UPDBGCHECKINFO_FLAG_4) { WaterBox* waterbox; f32 y; pos.y = actor->prevPos.y; - func_800B7678(play, actor, &pos, flags); + func_800B7678(play, actor, &pos, updBgCheckInfoFlags); y = actor->world.pos.y; if (WaterBox_GetSurface1(play, &play->colCtx, actor->world.pos.x, actor->world.pos.z, &y, &waterbox)) { @@ -1632,7 +1632,7 @@ void Actor_UpdateBgCheckInfo(PlayState* play, Actor* actor, f32 wallCheckHeight, actor->bgCheckFlags &= ~(BGCHECKFLAG_WATER | BGCHECKFLAG_WATER_TOUCH); } else if (!(actor->bgCheckFlags & BGCHECKFLAG_WATER)) { actor->bgCheckFlags |= (BGCHECKFLAG_WATER | BGCHECKFLAG_WATER_TOUCH); - if (!(flags & 0x40)) { + if (!(updBgCheckInfoFlags & UPDBGCHECKINFO_FLAG_40)) { Vec3f sp64; sp64.x = actor->world.pos.x; @@ -1652,7 +1652,7 @@ void Actor_UpdateBgCheckInfo(PlayState* play, Actor* actor, f32 wallCheckHeight, } } - if (flags & 0x400) { + if (updBgCheckInfoFlags & UPDBGCHECKINFO_FLAG_400) { WaterBox* waterbox; f32 y = actor->world.pos.y; @@ -1663,7 +1663,7 @@ void Actor_UpdateBgCheckInfo(PlayState* play, Actor* actor, f32 wallCheckHeight, actor->bgCheckFlags &= ~(BGCHECKFLAG_WATER | BGCHECKFLAG_WATER_TOUCH); } else if (!(actor->bgCheckFlags & BGCHECKFLAG_WATER)) { actor->bgCheckFlags |= (BGCHECKFLAG_WATER | BGCHECKFLAG_WATER_TOUCH); - if (!(flags & 0x40)) { + if (!(updBgCheckInfoFlags & UPDBGCHECKINFO_FLAG_40)) { Vec3f sp50; sp50.x = actor->world.pos.x; @@ -3726,7 +3726,7 @@ s16 Actor_TestFloorInDirection(Actor* actor, PlayState* play, f32 distance, s16 actor->world.pos.x += dx; actor->world.pos.z += dz; - Actor_UpdateBgCheckInfo(play, actor, 0.0f, 0.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); Math_Vec3f_Copy(&actor->world.pos, &actorPos); ret = actor->bgCheckFlags & BGCHECKFLAG_GROUND; diff --git a/src/code/z_en_item00.c b/src/code/z_en_item00.c index 3d78f00df..0c19236dc 100644 --- a/src/code/z_en_item00.c +++ b/src/code/z_en_item00.c @@ -507,7 +507,9 @@ void EnItem00_Update(Actor* thisx, PlayState* play) { if (this->actor.gravity != 0.0f) { Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 15.0f, 15.0f, 0x1D); + Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 15.0f, 15.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10); if (this->actor.floorHeight <= BGCHECK_Y_MIN) { Actor_Kill(&this->actor); diff --git a/src/overlays/actors/ovl_Bg_Icicle/z_bg_icicle.c b/src/overlays/actors/ovl_Bg_Icicle/z_bg_icicle.c index 5a16e6845..eabd3f3fe 100644 --- a/src/overlays/actors/ovl_Bg_Icicle/z_bg_icicle.c +++ b/src/overlays/actors/ovl_Bg_Icicle/z_bg_icicle.c @@ -183,7 +183,7 @@ void BgIcicle_Fall(BgIcicle* this, PlayState* play) { } else { Actor_MoveWithGravity(&this->dyna.actor); this->dyna.actor.world.pos.y += 40.0f; - Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 0.0f, 0.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); this->dyna.actor.world.pos.y -= 40.0f; CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base); } diff --git a/src/overlays/actors/ovl_Bg_Ikana_Dharma/z_bg_ikana_dharma.c b/src/overlays/actors/ovl_Bg_Ikana_Dharma/z_bg_ikana_dharma.c index 9fa7077f8..aead34d28 100644 --- a/src/overlays/actors/ovl_Bg_Ikana_Dharma/z_bg_ikana_dharma.c +++ b/src/overlays/actors/ovl_Bg_Ikana_Dharma/z_bg_ikana_dharma.c @@ -226,7 +226,7 @@ void BgIkanaDharma_Update(Actor* thisx, PlayState* play) { actorBelow = DynaPoly_GetActor(&play->colCtx, this->dyna.actor.floorBgId); if (actorBelow == NULL) { Actor_MoveWithGravity(&this->dyna.actor); - Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 0.0f, 0.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); if (this->dyna.actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) { s16 quakeIndex = Quake_Add(GET_ACTIVE_CAM(play), QUAKE_TYPE_3); @@ -250,7 +250,8 @@ void BgIkanaDharma_Update(Actor* thisx, PlayState* play) { wallCheckRadius = CLAMP_MIN(wallCheckRadius, 2.0f); Actor_MoveWithGravity(&this->dyna.actor); - Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 20.0f, wallCheckRadius, 0.0f, 5); + Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 20.0f, wallCheckRadius, 0.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4); } Actor_SetFocus(&this->dyna.actor, 40.0f); diff --git a/src/overlays/actors/ovl_Bg_Kin2_Picture/z_bg_kin2_picture.c b/src/overlays/actors/ovl_Bg_Kin2_Picture/z_bg_kin2_picture.c index 7bc3e8544..c55cd4e01 100644 --- a/src/overlays/actors/ovl_Bg_Kin2_Picture/z_bg_kin2_picture.c +++ b/src/overlays/actors/ovl_Bg_Kin2_Picture/z_bg_kin2_picture.c @@ -281,7 +281,7 @@ void BgKin2Picture_Fall(BgKin2Picture* this, PlayState* play) { } Actor_MoveWithGravity(&this->dyna.actor); - Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 0.0f, 0.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); if (this->dyna.actor.bgCheckFlags & BGCHECKFLAG_GROUND) { Math_StepToS(&this->step, 0x7D0, 0x78); diff --git a/src/overlays/actors/ovl_Boss_02/z_boss_02.c b/src/overlays/actors/ovl_Boss_02/z_boss_02.c index 003ba32e9..1454fefa3 100644 --- a/src/overlays/actors/ovl_Boss_02/z_boss_02.c +++ b/src/overlays/actors/ovl_Boss_02/z_boss_02.c @@ -993,7 +993,7 @@ void func_809DAB78(Boss02* this, PlayState* play) { this->unk_0B1C[i].y += this->unk_0164; Math_ApproachF(&this->unk_0B1C[i].x, -(M_PI / 2), 0.1f, 0.07f); Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 50.0f, 150.0f, 100.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 50.0f, 150.0f, 100.0f, UPDBGCHECKINFO_FLAG_4); if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { this->unk_0144 = 23; diff --git a/src/overlays/actors/ovl_Boss_03/z_boss_03.c b/src/overlays/actors/ovl_Boss_03/z_boss_03.c index 4dd27f211..4e15e8f7a 100644 --- a/src/overlays/actors/ovl_Boss_03/z_boss_03.c +++ b/src/overlays/actors/ovl_Boss_03/z_boss_03.c @@ -1993,7 +1993,8 @@ void Boss03_Update(Actor* thisx, PlayState* play2) { Math_ApproachS(&this->actor.shape.rot.z, 0, 0xA, 0x800); this->actor.world.pos.y -= 100.0f; this->actor.prevPos.y -= 100.0f; - Actor_UpdateBgCheckInfo(play, &this->actor, 50.0f, 150.0f, 100.0f, 5); + Actor_UpdateBgCheckInfo(play, &this->actor, 50.0f, 150.0f, 100.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4); this->actor.world.pos.y += 100.0f; this->actor.prevPos.y += 100.0f; } diff --git a/src/overlays/actors/ovl_Boss_04/z_boss_04.c b/src/overlays/actors/ovl_Boss_04/z_boss_04.c index 709ef43f8..6a6bc0c1d 100644 --- a/src/overlays/actors/ovl_Boss_04/z_boss_04.c +++ b/src/overlays/actors/ovl_Boss_04/z_boss_04.c @@ -197,7 +197,7 @@ void Boss04_Init(Actor* thisx, PlayState* play2) { this->unk_6F0 = this->unk_6E0 + ((this->unk_6E4 - this->unk_6E0) * 0.5f); this->actor.world.pos.x = this->unk_6E8; this->actor.world.pos.z = this->unk_6F0; - Actor_UpdateBgCheckInfo(play, &this->actor, 35.0f, 60.0f, 60.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 35.0f, 60.0f, 60.0f, UPDBGCHECKINFO_FLAG_4); if ((KREG(64) != 0) || CHECK_EVENTINF(EVENTINF_60)) { func_809ECD00(this, play); @@ -709,7 +709,8 @@ void Boss04_Update(Actor* thisx, PlayState* play2) { Actor_MoveWithGravity(&this->actor); this->actor.world.pos.y -= 100.0f; this->actor.prevPos.y -= 100.0f; - Actor_UpdateBgCheckInfo(play, &this->actor, 100.0f, 120.0f, 200.0f, 5); + Actor_UpdateBgCheckInfo(play, &this->actor, 100.0f, 120.0f, 200.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4); this->actor.world.pos.y += 100.0f; this->actor.prevPos.y += 100.0f; } diff --git a/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c b/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c index 1a1f4ae22..ccf41077d 100644 --- a/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c +++ b/src/overlays/actors/ovl_Dm_Ah/z_dm_ah.c @@ -181,7 +181,7 @@ void DmAh_Update(Actor* thisx, PlayState* play) { func_80C1D6E0(this, play); SkelAnime_Update(&this->skelAnime); func_80C1D458(this); - Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); } static Vec3f D_80C1DE14 = { 1000.0f, 0.0f, 0.0f }; diff --git a/src/overlays/actors/ovl_Dm_Al/z_dm_al.c b/src/overlays/actors/ovl_Dm_Al/z_dm_al.c index f81713731..2d1e58678 100644 --- a/src/overlays/actors/ovl_Dm_Al/z_dm_al.c +++ b/src/overlays/actors/ovl_Dm_Al/z_dm_al.c @@ -93,7 +93,7 @@ void DmAl_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); SkelAnime_Update(&this->skelAnime); - Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); } s32 DmAl_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* rot, Vec3s* pos, Actor* thisx) { diff --git a/src/overlays/actors/ovl_Dm_An/z_dm_an.c b/src/overlays/actors/ovl_Dm_An/z_dm_an.c index d536425b0..555a04cc5 100644 --- a/src/overlays/actors/ovl_Dm_An/z_dm_an.c +++ b/src/overlays/actors/ovl_Dm_An/z_dm_an.c @@ -264,7 +264,7 @@ void DmAn_Update(Actor* thisx, PlayState* play) { func_80C1C410(this, play); func_80C1C5B4(this); } - Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); } Vec3f D_80C1D2C8 = { 450.0f, 700.0f, -760.0f }; diff --git a/src/overlays/actors/ovl_Dm_Bal/z_dm_bal.c b/src/overlays/actors/ovl_Dm_Bal/z_dm_bal.c index b9c4cb33c..cfd804410 100644 --- a/src/overlays/actors/ovl_Dm_Bal/z_dm_bal.c +++ b/src/overlays/actors/ovl_Dm_Bal/z_dm_bal.c @@ -56,7 +56,7 @@ void DmBal_Init(Actor* thisx, PlayState* play) { ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 36.0f); SkelAnime_InitFlex(play, &this->skelAnime, &object_bal_Skel_00A6D0, &object_bal_Anim_0005FC, this->jointTable, this->morphTable, OBJECT_BAL_LIMB_MAX); - Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); this->timer = 60; this->eyeIndex = 0; this->keepEyesShut = false; diff --git a/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c b/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c index 5321abc92..177a21394 100644 --- a/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c +++ b/src/overlays/actors/ovl_Dm_Gm/z_dm_gm.c @@ -264,7 +264,7 @@ void DmGm_Update(Actor* thisx, PlayState* play) { func_80C24360(this, play); func_80C24504(this); } - Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); } Vec3f D_80C25218 = { 450.0f, 700.0f, -760.0f }; diff --git a/src/overlays/actors/ovl_Dm_Nb/z_dm_nb.c b/src/overlays/actors/ovl_Dm_Nb/z_dm_nb.c index 98f7bac48..e9fa1cddd 100644 --- a/src/overlays/actors/ovl_Dm_Nb/z_dm_nb.c +++ b/src/overlays/actors/ovl_Dm_Nb/z_dm_nb.c @@ -87,7 +87,7 @@ void DmNb_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); SkelAnime_Update(&this->skelAnime); - Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); } void DmNb_TransformLimbDraw(PlayState* play, s32 limbIndex, Actor* thisx) { diff --git a/src/overlays/actors/ovl_En_Ah/z_en_ah.c b/src/overlays/actors/ovl_En_Ah/z_en_ah.c index 5ea851023..d9fbeb6f0 100644 --- a/src/overlays/actors/ovl_En_Ah/z_en_ah.c +++ b/src/overlays/actors/ovl_En_Ah/z_en_ah.c @@ -557,7 +557,7 @@ void EnAh_Update(Actor* thisx, PlayState* play) { func_8013C964(&this->actor, play, radius, height, PLAYER_IA_NONE, this->unk_2D8 & 7); if (!(this->unk_2D8 & 0x10)) { Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); } func_80BD2BA4(this, play); } diff --git a/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c b/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c index d22c2d258..442ed1831 100644 --- a/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c +++ b/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c @@ -150,7 +150,7 @@ void func_80BECC7C(EnAkindonuts* this, PlayState* play) { } if (this->unk_32C & 2) { - Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 20.0f, 5); + Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 20.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4); } } diff --git a/src/overlays/actors/ovl_En_Am/z_en_am.c b/src/overlays/actors/ovl_En_Am/z_en_am.c index 73d9ffc57..31d137299 100644 --- a/src/overlays/actors/ovl_En_Am/z_en_am.c +++ b/src/overlays/actors/ovl_En_Am/z_en_am.c @@ -509,7 +509,9 @@ void EnAm_Update(Actor* thisx, PlayState* play) { } this->actionFunc(this, play); Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 30.0f, 100.0f, 0x1D); + Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 30.0f, 100.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10); Actor_SetFocus(&this->actor, 64.0f); Collider_UpdateCylinder(&this->actor, &this->enemyCollider); Collider_UpdateCylinder(&this->actor, &this->interactCollider); diff --git a/src/overlays/actors/ovl_En_Ani/z_en_ani.c b/src/overlays/actors/ovl_En_Ani/z_en_ani.c index b2a6456bc..6d6488383 100644 --- a/src/overlays/actors/ovl_En_Ani/z_en_ani.c +++ b/src/overlays/actors/ovl_En_Ani/z_en_ani.c @@ -291,7 +291,7 @@ void EnAni_Update(Actor* thisx, PlayState* play) { } Actor_UpdatePos(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); this->actionFunc(this, play); if (this->actor.xzDistToPlayer < 100.0f && !(this->stateFlags & ANI_STATE_CLIMBING)) { Actor_TrackPlayer(play, &this->actor, &this->headRot, &this->chestRot, this->actor.focus.pos); diff --git a/src/overlays/actors/ovl_En_Attack_Niw/z_en_attack_niw.c b/src/overlays/actors/ovl_En_Attack_Niw/z_en_attack_niw.c index 630d0e599..bb3e2f23a 100644 --- a/src/overlays/actors/ovl_En_Attack_Niw/z_en_attack_niw.c +++ b/src/overlays/actors/ovl_En_Attack_Niw/z_en_attack_niw.c @@ -366,7 +366,9 @@ void EnAttackNiw_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); - Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 60.0f, 0x1D); + Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 60.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10); if (this->actionFunc == EnAttackNiw_EnterViewFromOffscreen) { Actor_MoveWithoutGravity(&this->actor); diff --git a/src/overlays/actors/ovl_En_Az/z_en_az.c b/src/overlays/actors/ovl_En_Az/z_en_az.c index ff865d99f..3b2895983 100644 --- a/src/overlays/actors/ovl_En_Az/z_en_az.c +++ b/src/overlays/actors/ovl_En_Az/z_en_az.c @@ -273,7 +273,7 @@ void EnAz_Init(Actor* thisx, PlayState* play2) { this->collider.dim.height *= 1.2f; this->collider.dim.yShift *= 1.2f; } - Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 5); + Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4); if ((this->actor.bgCheckFlags & BGCHECKFLAG_WATER) && (this->actor.depthInWater > 22.0f)) { this->unk_374 |= 0x100; this->unk_376 |= 0x100; @@ -1660,9 +1660,9 @@ void EnAz_Update(Actor* thisx, PlayState* play2) { this->unk_39C = 0; } if (!(this->unk_374 & 0x1000)) { - Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 20.0f, 5); + Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 20.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4); } else { - Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 20.0f, 0x400); + Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 20.0f, UPDBGCHECKINFO_FLAG_400); this->unk_374 &= ~0x1000; } Collider_UpdateCylinder(&this->actor, &this->collider); diff --git a/src/overlays/actors/ovl_En_Baba/z_en_baba.c b/src/overlays/actors/ovl_En_Baba/z_en_baba.c index 3aad703de..5296260f9 100644 --- a/src/overlays/actors/ovl_En_Baba/z_en_baba.c +++ b/src/overlays/actors/ovl_En_Baba/z_en_baba.c @@ -748,7 +748,7 @@ void EnBaba_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); - Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); EnBaba_UpdateModel(this, play); } diff --git a/src/overlays/actors/ovl_En_Baguo/z_en_baguo.c b/src/overlays/actors/ovl_En_Baguo/z_en_baguo.c index 9a71c1864..14f4112eb 100644 --- a/src/overlays/actors/ovl_En_Baguo/z_en_baguo.c +++ b/src/overlays/actors/ovl_En_Baguo/z_en_baguo.c @@ -392,7 +392,9 @@ void EnBaguo_Update(Actor* thisx, PlayState* play) { } Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 60.0f, 0x1D); + Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 60.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10); if (this->action != NEJIRON_ACTION_INACTIVE) { CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base); } diff --git a/src/overlays/actors/ovl_En_Baisen/z_en_baisen.c b/src/overlays/actors/ovl_En_Baisen/z_en_baisen.c index 3021ffbd2..5479d6c1e 100644 --- a/src/overlays/actors/ovl_En_Baisen/z_en_baisen.c +++ b/src/overlays/actors/ovl_En_Baisen/z_en_baisen.c @@ -252,7 +252,9 @@ void EnBaisen_Update(Actor* thisx, PlayState* play) { } this->actionFunc(this, play); Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, 0x1D); + Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10); Actor_SetScale(&this->actor, 0.01f); if (this->unk290) { func_80BE871C(this); diff --git a/src/overlays/actors/ovl_En_Bat/z_en_bat.c b/src/overlays/actors/ovl_En_Bat/z_en_bat.c index 61b060110..9e2d8abe2 100644 --- a/src/overlays/actors/ovl_En_Bat/z_en_bat.c +++ b/src/overlays/actors/ovl_En_Bat/z_en_bat.c @@ -480,13 +480,15 @@ void EnBat_Update(Actor* thisx, PlayState* play) { } if (this->actionFunc == EnBat_DiveAttack) { - Actor_UpdateBgCheckInfo(play, &this->actor, 12.0f, 15.0f, 50.0f, 5); + Actor_UpdateBgCheckInfo(play, &this->actor, 12.0f, 15.0f, 50.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4); } else if ((this->actionFunc != EnBat_FlyIdle) || ((this->actor.xzDistToPlayer < 400.0f) && (this->actor.projectedPos.z > 0.0f))) { if (this->paramFlags & BAD_BAT_PARAMFLAG_0) { - Actor_UpdateBgCheckInfo(play, &this->actor, 12.0f, 15.0f, 50.0f, 5); + Actor_UpdateBgCheckInfo(play, &this->actor, 12.0f, 15.0f, 50.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4); } else { - Actor_UpdateBgCheckInfo(play, &this->actor, 12.0f, 15.0f, 50.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 12.0f, 15.0f, 50.0f, UPDBGCHECKINFO_FLAG_4); } } else { Math_Vec3f_Copy(&this->actor.prevPos, &prevPos); diff --git a/src/overlays/actors/ovl_En_Bb/z_en_bb.c b/src/overlays/actors/ovl_En_Bb/z_en_bb.c index c58344400..071515919 100644 --- a/src/overlays/actors/ovl_En_Bb/z_en_bb.c +++ b/src/overlays/actors/ovl_En_Bb/z_en_bb.c @@ -585,7 +585,8 @@ void EnBb_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); if ((this->actionFunc != EnBb_Dead) && (this->actionFunc != EnBb_WaitForRevive)) { Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 25.0f, 40.0f, 7); + Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 25.0f, 40.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4); this->collider.dim.worldSphere.center.x = this->actor.world.pos.x; this->collider.dim.worldSphere.center.y = this->actor.world.pos.y + 15.0f; diff --git a/src/overlays/actors/ovl_En_Bba_01/z_en_bba_01.c b/src/overlays/actors/ovl_En_Bba_01/z_en_bba_01.c index 1b9538146..b751a50d5 100644 --- a/src/overlays/actors/ovl_En_Bba_01/z_en_bba_01.c +++ b/src/overlays/actors/ovl_En_Bba_01/z_en_bba_01.c @@ -244,7 +244,7 @@ void EnBba01_Update(Actor* thisx, PlayState* play) { EnBba01_TestIsTalking(this, play); this->enHy.actionFunc(&this->enHy, play); - Actor_UpdateBgCheckInfo(play, &this->enHy.actor, 0.0f, 0.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->enHy.actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); EnBba01_UpdateModel(this, play); func_809CC270(this, play); } diff --git a/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.c b/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.c index 9b04d1e80..9e99d4fba 100644 --- a/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.c +++ b/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.c @@ -600,7 +600,8 @@ void EnBbfall_Update(Actor* thisx, PlayState* play) { if (this->actionFunc != EnBbfall_Dead) { Actor_MoveWithGravity(&this->actor); if (this->isBgCheckCollisionEnabled) { - Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 25.0f, 20.0f, 7); + Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 25.0f, 20.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4); } for (i = ARRAY_COUNT(this->flamePos) - 1; i >= 2; i--) { diff --git a/src/overlays/actors/ovl_En_Bee/z_en_bee.c b/src/overlays/actors/ovl_En_Bee/z_en_bee.c index ad45c3a66..80ad3e7a2 100644 --- a/src/overlays/actors/ovl_En_Bee/z_en_bee.c +++ b/src/overlays/actors/ovl_En_Bee/z_en_bee.c @@ -271,7 +271,9 @@ void EnBee_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 40.0f, 40.0f, 0x1D); + Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 40.0f, 40.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10); Collider_UpdateCylinder(&this->actor, &this->collider); CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); diff --git a/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.c b/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.c index 74fbbfc51..a78731e29 100644 --- a/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.c +++ b/src/overlays/actors/ovl_En_Bigpamet/z_en_bigpamet.c @@ -759,7 +759,9 @@ void EnBigpamet_Update(Actor* thisx, PlayState* play) { if ((this->actionFunc != func_80A281DC) && (this->actionFunc != func_80A282C8)) { Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 40.0f, 50.0f, 60.0f, 0x1F); + Actor_UpdateBgCheckInfo(play, &this->actor, 40.0f, 50.0f, 60.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4 | + UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10); func_80A276F4(this); Actor_SetFocus(&this->actor, 25.0f); diff --git a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c index db124dc97..30f857a89 100644 --- a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c +++ b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c @@ -1174,7 +1174,7 @@ void EnBigpo_Update(Actor* thisx, PlayState* play) { Actor_MoveWithGravity(&this->actor); } if (this->actionFunc == EnBigpo_LanternFalling) { - Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 27.0f, 60.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 27.0f, 60.0f, UPDBGCHECKINFO_FLAG_4); } if (this->actor.draw == EnBigpo_DrawScoopSoul) { diff --git a/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c b/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c index 803aafc3b..5eed1b1d5 100644 --- a/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c +++ b/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c @@ -2838,7 +2838,9 @@ void EnBigslime_UpdateGekko(Actor* thisx, PlayState* play) { Actor_MoveWithoutGravity(&this->actor); } - Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 40.0f, 80.0f, 0x1F); + Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 40.0f, 80.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4 | + UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10); this->gekkoCollider.dim.pos.x = (s16)this->actor.world.pos.x; this->gekkoCollider.dim.pos.z = (s16)this->actor.world.pos.z; if (this->gekkoCollider.base.acFlags & AC_ON) { diff --git a/src/overlays/actors/ovl_En_Bji_01/z_en_bji_01.c b/src/overlays/actors/ovl_En_Bji_01/z_en_bji_01.c index b0c4102c2..6cdca73a7 100644 --- a/src/overlays/actors/ovl_En_Bji_01/z_en_bji_01.c +++ b/src/overlays/actors/ovl_En_Bji_01/z_en_bji_01.c @@ -373,7 +373,7 @@ void EnBji01_Update(Actor* thisx, PlayState* play) { s32 pad; this->actionFunc(this, play); - Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); SkelAnime_Update(&this->skelAnime); if (this->blinkTimer-- <= 0) { diff --git a/src/overlays/actors/ovl_En_Bom/z_en_bom.c b/src/overlays/actors/ovl_En_Bom/z_en_bom.c index bdc59540b..a99e9063c 100644 --- a/src/overlays/actors/ovl_En_Bom/z_en_bom.c +++ b/src/overlays/actors/ovl_En_Bom/z_en_bom.c @@ -450,7 +450,7 @@ void EnBom_Update(Actor* thisx, PlayState* play) { this->unk_1FC--; Math_ApproachZeroF(&thisx->speed, 1.0f, 1.0f); Actor_MoveWithGravity(thisx); - Actor_UpdateBgCheckInfo(play, thisx, 35.0f, 10.0f, 36.0f, 4); + Actor_UpdateBgCheckInfo(play, thisx, 35.0f, 10.0f, 36.0f, UPDBGCHECKINFO_FLAG_4); if (this->unk_1FC == 0) { if (this->isPowderKeg) { gSaveContext.powderKegTimer = 0; @@ -476,7 +476,9 @@ void EnBom_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); - Actor_UpdateBgCheckInfo(play, thisx, 35.0f, 10.0f, 36.0f, 0x1F); + Actor_UpdateBgCheckInfo(play, thisx, 35.0f, 10.0f, 36.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4 | + UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10); if (thisx->params == BOMB_TYPE_BODY) { static Vec3us D_80872ED4[] = { { 40, 20, 100 }, diff --git a/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c b/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c index 8481b88a9..7217dbc65 100644 --- a/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c +++ b/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c @@ -630,7 +630,9 @@ void EnBomBowlMan_Update(Actor* thisx, PlayState* play) { this->unk_2F2 = (s32)Rand_ZeroFloat(60.0f) + 20; } } - Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, 0x1D); + Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10); } s32 EnBomBowlMan_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { diff --git a/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c b/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c index 40e93b861..a652e574f 100644 --- a/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c +++ b/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c @@ -177,7 +177,7 @@ void EnBomChu_WaitForRelease(EnBomChu* this, PlayState* play) { } else if (Actor_HasNoParent(&this->actor, play)) { player = GET_PLAYER(play); Math_Vec3f_Copy(&this->actor.world.pos, &player->actor.world.pos); - Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); this->actor.shape.rot.y = player->actor.shape.rot.y; this->actor.flags |= ACTOR_FLAG_1; diff --git a/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c b/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c index f96809878..5086513db 100644 --- a/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c +++ b/src/overlays/actors/ovl_En_Bombers/z_en_bombers.c @@ -487,7 +487,9 @@ void EnBombers_Update(Actor* thisx, PlayState* play) { } } - Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, 0x1D); + Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10); this->actor.uncullZoneForward = 500.0f; Collider_UpdateCylinder(&this->actor, &this->collider); CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); diff --git a/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.c b/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.c index d479e0745..0c3bdf745 100644 --- a/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.c +++ b/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.c @@ -400,7 +400,9 @@ void EnBombers2_Update(Actor* thisx, PlayState* play) { Collider_UpdateCylinder(&this->actor, &this->collider); CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); if (this->unk_2AC == 0) { - Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, 0x1D); + Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10); } Math_Vec3f_Copy(&this->actor.world.pos, &sp34); } diff --git a/src/overlays/actors/ovl_En_Bombf/z_en_bombf.c b/src/overlays/actors/ovl_En_Bombf/z_en_bombf.c index ea9ab2e22..2493d819b 100644 --- a/src/overlays/actors/ovl_En_Bombf/z_en_bombf.c +++ b/src/overlays/actors/ovl_En_Bombf/z_en_bombf.c @@ -336,7 +336,9 @@ void EnBombf_Update(Actor* thisx, PlayState* play) { if (this->actor.gravity != 0.0f) { DREG(6) = 1; - Actor_UpdateBgCheckInfo(play, &this->actor, 5.0f, 10.0f, 0.0f, 0x1F); + Actor_UpdateBgCheckInfo(play, &this->actor, 5.0f, 10.0f, 0.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4 | + UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10); DREG(6) = 0; } @@ -355,7 +357,9 @@ void EnBombf_Update(Actor* thisx, PlayState* play) { Actor_PlaySfx(&this->actor, NA_SE_EV_BOMB_BOUND); Actor_MoveWithGravity(&this->actor); DREG(6) = 1; - Actor_UpdateBgCheckInfo(play, &this->actor, 5.0f, 10.0f, 0.0f, 0x1F); + Actor_UpdateBgCheckInfo(play, &this->actor, 5.0f, 10.0f, 0.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4 | + UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10); DREG(6) = 0; this->actor.speed *= 0.7f; this->actor.bgCheckFlags &= ~BGCHECKFLAG_WALL; diff --git a/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c b/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c index 8f3b4d3f3..611c6144b 100644 --- a/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c +++ b/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c @@ -1044,7 +1044,9 @@ void EnBomjima_Update(Actor* thisx, PlayState* play) { } } - Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, 0x1D); + Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10); this->actor.uncullZoneForward = 500.0f; Collider_UpdateCylinder(&this->actor, &this->collider); CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); diff --git a/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.c b/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.c index c8de769c7..fc11e86c1 100644 --- a/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.c +++ b/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.c @@ -858,7 +858,9 @@ void EnBomjimb_Update(Actor* thisx, PlayState* play2) { } } - Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, 0x1D); + Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10); Collider_UpdateCylinder(&this->actor, &this->collider); CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base); diff --git a/src/overlays/actors/ovl_En_Box/z_en_box.c b/src/overlays/actors/ovl_En_Box/z_en_box.c index 4e6d3ae3a..6beedbdf8 100644 --- a/src/overlays/actors/ovl_En_Box/z_en_box.c +++ b/src/overlays/actors/ovl_En_Box/z_en_box.c @@ -612,7 +612,8 @@ void EnBox_Update(Actor* thisx, PlayState* play) { } if (!(this->movementFlags & ENBOX_MOVE_IMMOBILE)) { Actor_MoveWithGravity(&this->dyna.actor); - Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 0.0f, 0.0f, 0.0f, 0x1C); + Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 0.0f, 0.0f, 0.0f, + UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10); } Actor_SetFocus(&this->dyna.actor, 40.0f); if ((this->getItemId == GI_ICE_TRAP) && (this->actionFunc == EnBox_Open) && (this->skelAnime.curFrame > 45.0f) && diff --git a/src/overlays/actors/ovl_En_Bubble/z_en_bubble.c b/src/overlays/actors/ovl_En_Bubble/z_en_bubble.c index db6019b99..f08c3d413 100644 --- a/src/overlays/actors/ovl_En_Bubble/z_en_bubble.c +++ b/src/overlays/actors/ovl_En_Bubble/z_en_bubble.c @@ -392,7 +392,8 @@ void EnBubble_Update(Actor* thisx, PlayState* play) { EnBubble* this = (EnBubble*)thisx; Actor_UpdatePos(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 16.0f, 16.0f, 0.0f, 7); + Actor_UpdateBgCheckInfo(play, &this->actor, 16.0f, 16.0f, 0.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4); this->actionFunc(this, play); Actor_SetFocus(&this->actor, this->actor.shape.yOffset); } diff --git a/src/overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.c b/src/overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.c index e75d11bc6..15d087ea7 100644 --- a/src/overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.c +++ b/src/overlays/actors/ovl_En_Clear_Tag/z_en_clear_tag.c @@ -463,7 +463,7 @@ void EnClearTag_Init(Actor* thisx, PlayState* play) { } // Initialize flash effect - Actor_UpdateBgCheckInfo(play, &this->actor, 50.0f, 30.0f, 100.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 50.0f, 30.0f, 100.0f, UPDBGCHECKINFO_FLAG_4); pos = this->actor.world.pos; EnClearTag_CreateFlashEffect(this, &pos, sFlashMaxScale[thisx->params], this->actor.floorHeight); diff --git a/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.c b/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.c index 876914a2a..7fc741ebe 100644 --- a/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.c +++ b/src/overlays/actors/ovl_En_Cne_01/z_en_cne_01.c @@ -234,7 +234,7 @@ void EnCne01_Update(Actor* thisx, PlayState* play) { EnCne01_TestIsTalking(this, play); this->enHy.actionFunc(&this->enHy, play); - Actor_UpdateBgCheckInfo(play, &this->enHy.actor, 0.0f, 0.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->enHy.actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); EnCne01_UpdateModel(this, play); func_809CB4A0(this, play); } diff --git a/src/overlays/actors/ovl_En_Col_Man/z_en_col_man.c b/src/overlays/actors/ovl_En_Col_Man/z_en_col_man.c index 13ff0ce10..6f7d32de1 100644 --- a/src/overlays/actors/ovl_En_Col_Man/z_en_col_man.c +++ b/src/overlays/actors/ovl_En_Col_Man/z_en_col_man.c @@ -222,7 +222,9 @@ void EnColMan_Update(Actor* thisx, PlayState* play) { Actor_SetScale(&this->actor, this->scale); this->actionFunc(this, play); Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 30.0f, 30.0f, 0x1F); + Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 30.0f, 30.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4 | + UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10); Collider_UpdateCylinder(&this->actor, &this->collider); CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); } diff --git a/src/overlays/actors/ovl_En_Cow/z_en_cow.c b/src/overlays/actors/ovl_En_Cow/z_en_cow.c index 1de5d137e..beed3fb26 100644 --- a/src/overlays/actors/ovl_En_Cow/z_en_cow.c +++ b/src/overlays/actors/ovl_En_Cow/z_en_cow.c @@ -340,7 +340,7 @@ void EnCow_Update(Actor* thisx, PlayState* play2) { Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); if (SkelAnime_Update(&this->skelAnime)) { if (this->skelAnime.animation == &gCowChewAnim) { diff --git a/src/overlays/actors/ovl_En_Crow/z_en_crow.c b/src/overlays/actors/ovl_En_Crow/z_en_crow.c index 2bbee66d5..623d12f0e 100644 --- a/src/overlays/actors/ovl_En_Crow/z_en_crow.c +++ b/src/overlays/actors/ovl_En_Crow/z_en_crow.c @@ -507,7 +507,8 @@ void EnCrow_Update(Actor* thisx, PlayState* play) { height = 0.0f; Actor_MoveWithGravity(&this->actor); } - Actor_UpdateBgCheckInfo(play, &this->actor, 12.0f * scale, 25.0f * scale, 50.0f * scale, 7); + Actor_UpdateBgCheckInfo(play, &this->actor, 12.0f * scale, 25.0f * scale, 50.0f * scale, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4); } else { height = 0.0f; } diff --git a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c index b68634f81..b988155c7 100644 --- a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c +++ b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c @@ -278,7 +278,9 @@ void EnDaiku_Update(Actor* thisx, PlayState* play) { Actor_MoveWithGravity(&this->actor); Math_SmoothStepToS(&this->unk_260, this->unk_266, 1, 0xBB8, 0); Math_SmoothStepToS(&this->unk_25E, this->unk_264, 1, 0xBB8, 0); - Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, 0x1D); + Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10); this->actor.uncullZoneForward = 650.0f; Collider_UpdateCylinder(&this->actor, &this->collider); CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); diff --git a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c index e93cf4493..d8a8a78e8 100644 --- a/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c +++ b/src/overlays/actors/ovl_En_Daiku2/z_en_daiku2.c @@ -453,7 +453,9 @@ void EnDaiku2_Update(Actor* thisx, PlayState* play) { Actor_SetFocus(&this->actor, 65.0f); Actor_MoveWithGravity(&this->actor); Math_ApproachF(&this->unk_260, this->unk_264, 0.3f, 2.0f); - Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, 0x1D); + Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10); Collider_UpdateCylinder(&this->actor, &this->collider); CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); func_80BE7600(this, play); diff --git a/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c b/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c index d38f23224..e969abffa 100644 --- a/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c +++ b/src/overlays/actors/ovl_En_Dekubaba/z_en_dekubaba.c @@ -1186,9 +1186,10 @@ void EnDekubaba_Update(Actor* thisx, PlayState* play) { if (this->actionFunc == EnDekubaba_PrunedSomersaultDie) { Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, this->size * 15.0f, 10.0f, 5); + Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, this->size * 15.0f, 10.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4); } else if (this->actionFunc != EnDekubaba_DeadStickDrop) { - Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); if (this->boundFloor == NULL) { this->boundFloor = this->actor.floorPoly; } diff --git a/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c b/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c index b9e48e6db..2496a4cc2 100644 --- a/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c +++ b/src/overlays/actors/ovl_En_Dekunuts/z_en_dekunuts.c @@ -643,7 +643,9 @@ void EnDekunuts_Update(Actor* thisx, PlayState* play) { func_808BE73C(this, play); this->actionFunc(this, play); Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, this->collider.dim.radius, this->collider.dim.height, 0x1D); + Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, this->collider.dim.radius, this->collider.dim.height, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10); Collider_UpdateCylinder(&this->actor, &this->collider); if (this->collider.base.acFlags & AC_ON) { diff --git a/src/overlays/actors/ovl_En_Demo_heishi/z_en_demo_heishi.c b/src/overlays/actors/ovl_En_Demo_heishi/z_en_demo_heishi.c index 0d7de9cf1..986953d0f 100644 --- a/src/overlays/actors/ovl_En_Demo_heishi/z_en_demo_heishi.c +++ b/src/overlays/actors/ovl_En_Demo_heishi/z_en_demo_heishi.c @@ -160,7 +160,9 @@ void EnDemoheishi_Update(Actor* thisx, PlayState* play) { this->actor.shape.rot.y = this->actor.world.rot.y; this->actionFunc(this, play); Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, 0x1D); + Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10); Actor_SetScale(&this->actor, 0.01f); EnDemoheishi_SetHeadRotation(this); diff --git a/src/overlays/actors/ovl_En_Dg/z_en_dg.c b/src/overlays/actors/ovl_En_Dg/z_en_dg.c index 9b513ef67..3545ec951 100644 --- a/src/overlays/actors/ovl_En_Dg/z_en_dg.c +++ b/src/overlays/actors/ovl_En_Dg/z_en_dg.c @@ -237,7 +237,7 @@ void EnDg_UpdateCollision(EnDg* this, PlayState* play) { Collider_ResetCylinderOC(play, &this->collider.base); } - Actor_UpdateBgCheckInfo(play, &this->actor, 26.0f, 10.0f, 0.0f, 5); + Actor_UpdateBgCheckInfo(play, &this->actor, 26.0f, 10.0f, 0.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4); } void EnDg_GetFloorRot(EnDg* this, Vec3f* floorRot) { diff --git a/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c b/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c index 9c9c46e07..3ccf3fb6d 100644 --- a/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c +++ b/src/overlays/actors/ovl_En_Dinofos/z_en_dinofos.c @@ -1356,7 +1356,9 @@ void EnDinofos_Update(Actor* thisx, PlayState* play2) { this->actionFunc(this, play); Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 25.0f, 30.0f, 60.0f, 0x5D); + Actor_UpdateBgCheckInfo(play, &this->actor, 25.0f, 30.0f, 60.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10 | UPDBGCHECKINFO_FLAG_40); if (this->actionFunc != func_8089C7B8) { if ((this->actor.depthInWater > 0.0f) && (this->actor.depthInWater < 10.0f)) { if (!((play->gameplayFrames % 4) & 1)) { diff --git a/src/overlays/actors/ovl_En_Dno/z_en_dno.c b/src/overlays/actors/ovl_En_Dno/z_en_dno.c index aad29992a..d42e2e233 100644 --- a/src/overlays/actors/ovl_En_Dno/z_en_dno.c +++ b/src/overlays/actors/ovl_En_Dno/z_en_dno.c @@ -235,7 +235,7 @@ void EnDno_Init(Actor* thisx, PlayState* play) { this->morphTable, DEKU_BUTLER_LIMB_MAX); Collider_InitCylinder(play, &this->collider); Collider_SetCylinder(play, &this->collider, thisx, &sCylinderInit); - Actor_UpdateBgCheckInfo(play, thisx, 0.0f, 0.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, thisx, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); Animation_Change(&this->skelAnime, sAnimations[EN_DNO_ANIM_IDLE_WITH_CANDLE].animation, 1.0f, 0.0f, Animation_GetLastFrame(sAnimations[EN_DNO_ANIM_IDLE_WITH_CANDLE].animation), sAnimations[EN_DNO_ANIM_IDLE_WITH_CANDLE].mode, @@ -762,7 +762,7 @@ void func_80A72C04(EnDno* this, PlayState* play) { } void func_80A72CF8(EnDno* this, PlayState* play) { - Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); Actor_SpawnAsChild(&play->actorCtx, &this->actor, play, ACTOR_DOOR_WARP1, this->actor.world.pos.x + 80.0f, this->actor.floorHeight, this->actor.world.pos.z, 0, 0, 0, 0x201); } @@ -960,7 +960,7 @@ void EnDno_Update(Actor* thisx, PlayState* play) { func_80A73408(this, play); this->actionFunc(this, play); if (this->unk_3B0 & 4) { - Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); } Collider_UpdateCylinder(&this->actor, &this->collider); CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); diff --git a/src/overlays/actors/ovl_En_Dnp/z_en_dnp.c b/src/overlays/actors/ovl_En_Dnp/z_en_dnp.c index 11240f27b..745987344 100644 --- a/src/overlays/actors/ovl_En_Dnp/z_en_dnp.c +++ b/src/overlays/actors/ovl_En_Dnp/z_en_dnp.c @@ -457,7 +457,7 @@ void EnDnp_Update(Actor* thisx, PlayState* play) { func_80B3CD1C(this); func_80B3CEC0(this, play); Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); sp2C = this->collider.dim.radius + 50; sp28 = this->collider.dim.height + 30; if ((this->unk_322 & 0x400) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_23_20)) { diff --git a/src/overlays/actors/ovl_En_Dnq/z_en_dnq.c b/src/overlays/actors/ovl_En_Dnq/z_en_dnq.c index 131a27d74..0c5227bd4 100644 --- a/src/overlays/actors/ovl_En_Dnq/z_en_dnq.c +++ b/src/overlays/actors/ovl_En_Dnq/z_en_dnq.c @@ -455,7 +455,7 @@ void EnDnq_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); func_80A52B68(this, play); SkelAnime_Update(&this->skelAnime); - Actor_UpdateBgCheckInfo(play, &this->picto.actor, 30.0f, 12.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->picto.actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); this->unk_394 = this->picto.actor.xzDistToPlayer; func_80A52C6C(this, play); func_8013C964(&this->picto.actor, play, this->unk_390, fabsf(this->picto.actor.playerHeightRel) + 1.0f, diff --git a/src/overlays/actors/ovl_En_Dns/z_en_dns.c b/src/overlays/actors/ovl_En_Dns/z_en_dns.c index d21448217..7a540ad49 100644 --- a/src/overlays/actors/ovl_En_Dns/z_en_dns.c +++ b/src/overlays/actors/ovl_En_Dns/z_en_dns.c @@ -550,7 +550,7 @@ void EnDns_Update(Actor* thisx, PlayState* play) { SkelAnime_Update(&this->skelAnime); func_8092C934(this); func_8092C86C(this, play); - Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); func_8013C964(&this->actor, play, 80.0f, 40.0f, PLAYER_IA_NONE, this->unk_2C6 & 7); Actor_SetFocus(&this->actor, 34.0f); func_8092C6FC(this, play); diff --git a/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c b/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c index 52870a787..bc7841ddc 100644 --- a/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c +++ b/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c @@ -1024,7 +1024,9 @@ void EnDodongo_Update(Actor* thisx, PlayState* play2) { EnDodongo_UpdateDamage(this, play); this->actionFunc(this, play); Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 75.0f, 60.0f, 70.0f, 0x1D); + Actor_UpdateBgCheckInfo(play, &this->actor, 75.0f, 60.0f, 70.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10); if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) { Actor_PlaySfx(&this->actor, NA_SE_EN_GERUDOFT_DOWN); } diff --git a/src/overlays/actors/ovl_En_Egol/z_en_egol.c b/src/overlays/actors/ovl_En_Egol/z_en_egol.c index 21ce6d52e..e3f5eaea8 100644 --- a/src/overlays/actors/ovl_En_Egol/z_en_egol.c +++ b/src/overlays/actors/ovl_En_Egol/z_en_egol.c @@ -1294,7 +1294,9 @@ void EnEgol_Update(Actor* thisx, PlayState* play) { Math_SmoothStepToS(&this->eyelidRot, this->eyelidRotTarget, 1, 0x7D0, 0); EnEgol_CollisionCheck(this, play); Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 50.0f, 50.0f, 0x1D); + Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 50.0f, 50.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10); if (this->action != EYEGORE_ACTION_DEAD) { //! @bug This should be ||, not &&. As is, the check always succeeds. if (!((this->action == EYEGORE_ACTION_DAMAGED) && (this->action == EYEGORE_ACTION_DYING))) { diff --git a/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c b/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c index 65cc04d84..28b086fbb 100644 --- a/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c +++ b/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c @@ -499,7 +499,8 @@ void EnElforg_FreeFloating(EnElforg* this, PlayState* play) { } } - Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 20.0f, 7); + Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 20.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4); func_80ACCBB8(this, play); if (Player_GetMask(play) == PLAYER_MASK_GREAT_FAIRY) { if (!(this->strayFairyFlags & STRAY_FAIRY_FLAG_GREAT_FAIRYS_MASK_EQUIPPED)) { diff --git a/src/overlays/actors/ovl_En_Ending_Hero/z_en_ending_hero.c b/src/overlays/actors/ovl_En_Ending_Hero/z_en_ending_hero.c index 1786380ac..2996ccc23 100644 --- a/src/overlays/actors/ovl_En_Ending_Hero/z_en_ending_hero.c +++ b/src/overlays/actors/ovl_En_Ending_Hero/z_en_ending_hero.c @@ -68,7 +68,9 @@ void EnEndingHero_Update(Actor* thisx, PlayState* play) { } this->actionFunc(this, play); Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, 0x1D); + Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10); } static TexturePtr sEyeTextures[] = { diff --git a/src/overlays/actors/ovl_En_Ending_Hero2/z_en_ending_hero2.c b/src/overlays/actors/ovl_En_Ending_Hero2/z_en_ending_hero2.c index 2650ad156..0cc20358a 100644 --- a/src/overlays/actors/ovl_En_Ending_Hero2/z_en_ending_hero2.c +++ b/src/overlays/actors/ovl_En_Ending_Hero2/z_en_ending_hero2.c @@ -61,7 +61,9 @@ void EnEndingHero2_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, 0x1D); + Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10); } void EnEndingHero2_Draw(Actor* thisx, PlayState* play) { diff --git a/src/overlays/actors/ovl_En_Ending_Hero3/z_en_ending_hero3.c b/src/overlays/actors/ovl_En_Ending_Hero3/z_en_ending_hero3.c index 8dcc12199..aba7c4488 100644 --- a/src/overlays/actors/ovl_En_Ending_Hero3/z_en_ending_hero3.c +++ b/src/overlays/actors/ovl_En_Ending_Hero3/z_en_ending_hero3.c @@ -61,7 +61,9 @@ void EnEndingHero3_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, 0x1D); + Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10); } void EnEndingHero3_Draw(Actor* thisx, PlayState* play) { diff --git a/src/overlays/actors/ovl_En_Ending_Hero4/z_en_ending_hero4.c b/src/overlays/actors/ovl_En_Ending_Hero4/z_en_ending_hero4.c index 333bbc918..39e920b9e 100644 --- a/src/overlays/actors/ovl_En_Ending_Hero4/z_en_ending_hero4.c +++ b/src/overlays/actors/ovl_En_Ending_Hero4/z_en_ending_hero4.c @@ -61,7 +61,9 @@ void EnEndingHero4_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, 0x1D); + Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10); } void EnEndingHero4_Draw(Actor* thisx, PlayState* play) { diff --git a/src/overlays/actors/ovl_En_Ending_Hero5/z_en_ending_hero5.c b/src/overlays/actors/ovl_En_Ending_Hero5/z_en_ending_hero5.c index ee62798f1..ddf866f94 100644 --- a/src/overlays/actors/ovl_En_Ending_Hero5/z_en_ending_hero5.c +++ b/src/overlays/actors/ovl_En_Ending_Hero5/z_en_ending_hero5.c @@ -62,7 +62,9 @@ void EnEndingHero5_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, 0x1D); + Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10); } Gfx* D_80C23BF0[] = { object_daiku_DL_0070C0, object_daiku_DL_006FB0, object_daiku_DL_006E80, object_daiku_DL_006D70, diff --git a/src/overlays/actors/ovl_En_Ending_Hero6/z_en_ending_hero6.c b/src/overlays/actors/ovl_En_Ending_Hero6/z_en_ending_hero6.c index 06f973265..5324518de 100644 --- a/src/overlays/actors/ovl_En_Ending_Hero6/z_en_ending_hero6.c +++ b/src/overlays/actors/ovl_En_Ending_Hero6/z_en_ending_hero6.c @@ -101,7 +101,9 @@ void EnEndingHero6_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, 0x1D); + Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10); } void EnEndingHero6_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) { diff --git a/src/overlays/actors/ovl_En_Estone/z_en_estone.c b/src/overlays/actors/ovl_En_Estone/z_en_estone.c index 72ac311a7..8eff94e4b 100644 --- a/src/overlays/actors/ovl_En_Estone/z_en_estone.c +++ b/src/overlays/actors/ovl_En_Estone/z_en_estone.c @@ -174,7 +174,8 @@ void EnEstone_Update(Actor* thisx, PlayState* play2) { Actor_MoveWithGravity(&this->actor); if ((this->timer == 0) && !this->inactive) { - Actor_UpdateBgCheckInfo(play, &this->actor, 50.0f, 50.0f, 100.0f, 0x1C); + Actor_UpdateBgCheckInfo(play, &this->actor, 50.0f, 50.0f, 100.0f, + UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10); } if (!this->inactive) { Collider_UpdateCylinder(&this->actor, &this->collider); diff --git a/src/overlays/actors/ovl_En_Famos/z_en_famos.c b/src/overlays/actors/ovl_En_Famos/z_en_famos.c index 932d937ee..1fc83d8a1 100644 --- a/src/overlays/actors/ovl_En_Famos/z_en_famos.c +++ b/src/overlays/actors/ovl_En_Famos/z_en_famos.c @@ -766,7 +766,9 @@ void EnFamos_Update(Actor* thisx, PlayState* play) { } if (this->flippedTimer >= 0) { - Actor_UpdateBgCheckInfo(play, &this->actor, 35.0f, 30.0f, 80.0f, 0x1F); + Actor_UpdateBgCheckInfo(play, &this->actor, 35.0f, 30.0f, 80.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4 | + UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10); if ((this->actionFunc == EnFamos_Attack) && (this->animatedMaterialIndex != FAMOS_ANIMATED_MAT_NORMAL) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) { this->actor.world.pos.y -= 60.0f; diff --git a/src/overlays/actors/ovl_En_Fg/z_en_fg.c b/src/overlays/actors/ovl_En_Fg/z_en_fg.c index 90f90cf74..868c43533 100644 --- a/src/overlays/actors/ovl_En_Fg/z_en_fg.c +++ b/src/overlays/actors/ovl_En_Fg/z_en_fg.c @@ -338,14 +338,15 @@ void EnFg_Update(Actor* thisx, PlayState* play) { s32 flagSet; flag = this->actor.flags; - flagSet = ((flag & 0x2000) == 0x2000); + flagSet = CHECK_FLAG_ALL(flag, ACTOR_FLAG_2000); if (1) {} if (!flagSet) { - flagSet = ((flag & 0x8000) == 0x8000); + flagSet = CHECK_FLAG_ALL(flag, ACTOR_FLAG_8000); if (1) {} if (!flagSet) { this->actionFunc(this, play); - Actor_UpdateBgCheckInfo(play, &this->actor, BASE_REG(16, 0), BASE_REG(16, 1), 0.0f, 0x5); + Actor_UpdateBgCheckInfo(play, &this->actor, sREG(0), sREG(1), 0.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4); } } diff --git a/src/overlays/actors/ovl_En_Firefly/z_en_firefly.c b/src/overlays/actors/ovl_En_Firefly/z_en_firefly.c index 357887c97..bc4e3d743 100644 --- a/src/overlays/actors/ovl_En_Firefly/z_en_firefly.c +++ b/src/overlays/actors/ovl_En_Firefly/z_en_firefly.c @@ -703,7 +703,8 @@ void EnFirefly_Update(Actor* thisx, PlayState* play2) { } } - Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 15.0f, 7); + Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 15.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4); this->collider.dim.worldSphere.center.x = this->actor.world.pos.x; this->collider.dim.worldSphere.center.y = (s32)this->actor.world.pos.y + 10; this->collider.dim.worldSphere.center.z = this->actor.world.pos.z; diff --git a/src/overlays/actors/ovl_En_Fish/z_en_fish.c b/src/overlays/actors/ovl_En_Fish/z_en_fish.c index 2f54e4dcb..b70ce1ae7 100644 --- a/src/overlays/actors/ovl_En_Fish/z_en_fish.c +++ b/src/overlays/actors/ovl_En_Fish/z_en_fish.c @@ -264,7 +264,7 @@ void func_8091DEE4(EnFish* this) { this->actor.gravity = 0.0f; this->actor.terminalVelocity = 0.0f; this->unk_240 = Rand_S16Offset(5, D_8091FACC[this->unk_278]); - this->unk_248 = 0; + this->updBgCheckInfoFlags = 0; this->unk_26E = 400; this->unk_272 = 400; this->unk_268 = 0; @@ -314,7 +314,7 @@ void func_8091E070(EnFish* this) { phi_a1 = D_8091FAD4[this->unk_278]; } this->unk_240 = Rand_S16Offset(15, phi_a1); - this->unk_248 = 0; + this->updBgCheckInfoFlags = 0; this->unk_26E = 400; this->unk_272 = 400; this->unk_26C = 0; @@ -361,7 +361,7 @@ void func_8091E2E0(EnFish* this) { this->actor.gravity = 0.0f; this->actor.terminalVelocity = 0.0f; this->unk_240 = Rand_S16Offset(10, 40); - this->unk_248 = 0; + this->updBgCheckInfoFlags = 0; this->unk_26E = 400; this->unk_272 = 400; this->unk_268 = 0; @@ -440,7 +440,7 @@ void func_8091E5EC(EnFish* this) { this->unk_26C = 0; func_8091D660(this); this->unk_240 = Rand_S16Offset(10, 30); - this->unk_248 = 0; + this->updBgCheckInfoFlags = 0; this->unkFunc = func_8091E658; } @@ -493,7 +493,7 @@ void func_8091E810(EnFish* this) { this->actor.terminalVelocity = -10.0f; this->actor.shape.yOffset = 0.0f; func_8091D6C4(this); - this->unk_248 = 5; + this->updBgCheckInfoFlags = UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4; this->unkFunc = func_8091E880; this->unk_24C = 0.0f; this->unk_240 = 300; @@ -551,7 +551,7 @@ void func_8091E9A4(EnFish* this) { this->actor.shape.yOffset = 300.0f; func_8091D6C4(this); this->unkFunc = func_8091EAF0; - this->unk_248 = 5; + this->updBgCheckInfoFlags = UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4; this->unk_24C = 0.0f; if (sp24 && (this->actor.draw != NULL)) { Actor_PlaySfx(&this->actor, NA_SE_EV_FISH_LEAP); @@ -612,7 +612,7 @@ void func_8091ECF4(EnFish* this) { this->unk_240 = 200; func_8091D660(this); this->unkFunc = func_8091ED70; - this->unk_248 = 5; + this->updBgCheckInfoFlags = UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4; this->unk_24C = 0.0f; } @@ -677,7 +677,7 @@ void func_8091EF30(EnFish* this) { this->unk_240 = 15; this->unk_279 = 10; this->unkFunc = func_8091EFE8; - this->unk_248 = 5; + this->updBgCheckInfoFlags = UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4; this->unk_24C = 0.0f; } @@ -772,7 +772,7 @@ void func_8091F344(EnFish* this) { this->actor.gravity = 0.0f; this->actor.terminalVelocity = 0.0f; this->unk_240 = Rand_S16Offset(5, 35); - this->unk_248 = 1; + this->updBgCheckInfoFlags = UPDBGCHECKINFO_FLAG_1; this->unk_268 = 0; this->unk_26C = 0; this->unk_26E = 1500; @@ -856,7 +856,7 @@ void func_8091F5A4(Actor* thisx, PlayState* play) { SkelAnime_Update(&this->skelAnime); func_8091D7C4(this); Actor_MoveWithGravity(&this->actor); - if (this->unk_248 != 0) { + if (this->updBgCheckInfoFlags != 0) { u32 temp = (play->sceneId != SCENE_LABO); phi_f0 = BREG(1) + 10.0f; @@ -864,7 +864,7 @@ void func_8091F5A4(Actor* thisx, PlayState* play) { if (temp) { phi_f0 = 6.0f; } - Actor_UpdateBgCheckInfo(play, &this->actor, 17.5f, phi_f0, 0.0f, this->unk_248); + Actor_UpdateBgCheckInfo(play, &this->actor, 17.5f, phi_f0, 0.0f, this->updBgCheckInfoFlags); } if ((this->actor.xzDistToPlayer < 70.0f) && (this->unkFunc != func_8091EFE8)) { diff --git a/src/overlays/actors/ovl_En_Fish/z_en_fish.h b/src/overlays/actors/ovl_En_Fish/z_en_fish.h index 528eeb40c..d3941906c 100644 --- a/src/overlays/actors/ovl_En_Fish/z_en_fish.h +++ b/src/overlays/actors/ovl_En_Fish/z_en_fish.h @@ -26,7 +26,7 @@ typedef struct EnFish { /* 0x242 */ s16 unk_242; /* 0x244 */ s16 unk_244; /* 0x246 */ s16 unk_246; - /* 0x248 */ s32 unk_248; + /* 0x248 */ s32 updBgCheckInfoFlags; /* 0x24C */ f32 unk_24C; /* 0x250 */ f32 unk_250; /* 0x254 */ f32 unk_254; diff --git a/src/overlays/actors/ovl_En_Fish2/z_en_fish2.c b/src/overlays/actors/ovl_En_Fish2/z_en_fish2.c index a53393284..47244f9d3 100644 --- a/src/overlays/actors/ovl_En_Fish2/z_en_fish2.c +++ b/src/overlays/actors/ovl_En_Fish2/z_en_fish2.c @@ -987,7 +987,8 @@ void EnFish2_Update(Actor* thisx, PlayState* play2) { this->unk_33C = 25.0f - ((this->unk_330 - 0.01f) * 1000.0f); Actor_SetScale(&this->actor, this->unk_330); Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 0, 15.0f, 10.0f, 7); + Actor_UpdateBgCheckInfo(play, &this->actor, 0, 15.0f, 10.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4); if (this->actor.params != 2) { this->unk_2D4 = this->actor.floorHeight + (this->unk_330 * 1000.0f); diff --git a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c index 31d884c4d..36ac5c2f8 100644 --- a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c +++ b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c @@ -2230,7 +2230,8 @@ void EnFishing_UpdateLure(EnFishing* this, PlayState* play) { Vec3f sp80 = this->actor.world.pos; this->actor.prevPos = this->actor.world.pos = sLurePos; - Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 30.0f, 30.0f, 0x43); + Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 30.0f, 30.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_40); this->actor.world.pos = sp80; if (this->actor.bgCheckFlags & BGCHECKFLAG_CEILING) { @@ -2494,7 +2495,8 @@ void EnFishing_UpdateLure(EnFishing* this, PlayState* play) { sp58 = this->actor.world.pos; this->actor.prevPos = this->actor.world.pos = sLurePos; - Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 30.0f, 30.0f, 0x44); + Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 30.0f, 30.0f, + UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_40); this->actor.world.pos = sp58; D_80917278.y += -0.5f; @@ -4096,7 +4098,8 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) { this->actor.prevPos.y -= spD8; this->actor.velocity.y = -1.0f; if (KREG(90) == 0) { // Check added in MM - Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 30.0f, 100.0f, 0x45); + Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 30.0f, 100.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_40); } this->actor.world.pos.y += spD8; this->actor.prevPos.y += spD8; diff --git a/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c b/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c index c99a1680c..680f4f830 100644 --- a/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c +++ b/src/overlays/actors/ovl_En_Floormas/z_en_floormas.c @@ -1104,7 +1104,9 @@ void EnFloormas_Update(Actor* thisx, PlayState* play) { Actor_MoveWithGravity(&this->actor); } - Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, this->actor.scale.x * 3000.0f, 0.0f, 0x1D); + Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, this->actor.scale.x * 3000.0f, 0.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10); Collider_UpdateCylinder(&this->actor, &this->collider); if (this->actionFunc == func_808D1650) { this->actor.flags |= ACTOR_FLAG_1000000; diff --git a/src/overlays/actors/ovl_En_Fu/z_en_fu.c b/src/overlays/actors/ovl_En_Fu/z_en_fu.c index df3beb13b..1f122ae92 100644 --- a/src/overlays/actors/ovl_En_Fu/z_en_fu.c +++ b/src/overlays/actors/ovl_En_Fu/z_en_fu.c @@ -1337,7 +1337,7 @@ void EnFu_Update(Actor* thisx, PlayState* play) { func_809642E0(this, play); Actor_MoveWithGravity(&this->actor); func_8096209C(this, play); - Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); SkelAnime_Update(&this->skelAnime); func_80961D7C(play); func_809640D8(this, play); diff --git a/src/overlays/actors/ovl_En_Fu_Mato/z_en_fu_mato.c b/src/overlays/actors/ovl_En_Fu_Mato/z_en_fu_mato.c index 88a2c63b2..9e3c19473 100644 --- a/src/overlays/actors/ovl_En_Fu_Mato/z_en_fu_mato.c +++ b/src/overlays/actors/ovl_En_Fu_Mato/z_en_fu_mato.c @@ -185,7 +185,8 @@ void func_80ACE718(EnFuMato* this, PlayState* play) { this->dyna.actor.velocity.y += this->dyna.actor.gravity; Actor_UpdatePos(&this->dyna.actor); - Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 15.0f, 30.0f, 60.0f, 5); + Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 15.0f, 30.0f, 60.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4); if ((this->dyna.actor.bgCheckFlags & BGCHECKFLAG_GROUND) || (this->dyna.actor.world.pos.y < -500.0f)) { Vec3f sp3C = { 0.0f, 0.0f, 0.0f }; @@ -329,7 +330,8 @@ void func_80ACECFC(EnFuMato* this, PlayState* play) { } if (this->unk_302 == 1) { - Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 15.0f, 30.0f, 60.0f, 5); + Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 15.0f, 30.0f, 60.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4); if (this->dyna.actor.bgCheckFlags & BGCHECKFLAG_GROUND) { func_80ACEB2C(this); } diff --git a/src/overlays/actors/ovl_En_Fz/z_en_fz.c b/src/overlays/actors/ovl_En_Fz/z_en_fz.c index f9ee51391..fe4e6636b 100644 --- a/src/overlays/actors/ovl_En_Fz/z_en_fz.c +++ b/src/overlays/actors/ovl_En_Fz/z_en_fz.c @@ -824,7 +824,7 @@ void EnFz_Update(Actor* thisx, PlayState* play) { Math_StepToF(&this->actor.speed, this->unk_BBC, 0.2f); Actor_MoveWithGravity(&this->actor); if (this->unk_BCC != 0) { - Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 20.0f, 5); + Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 20.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4); } D_809347AC[this->unk_BD6](this); diff --git a/src/overlays/actors/ovl_En_Gamelupy/z_en_gamelupy.c b/src/overlays/actors/ovl_En_Gamelupy/z_en_gamelupy.c index 8882ab94e..9f45748df 100644 --- a/src/overlays/actors/ovl_En_Gamelupy/z_en_gamelupy.c +++ b/src/overlays/actors/ovl_En_Gamelupy/z_en_gamelupy.c @@ -171,7 +171,7 @@ void EnGamelupy_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 32.0f, 30.0f, 0.0f, 0xC); + Actor_UpdateBgCheckInfo(play, &this->actor, 32.0f, 30.0f, 0.0f, UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8); func_80AF6B40(this, play); } diff --git a/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c b/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c index d94267b38..dd53d9ea8 100644 --- a/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c +++ b/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c @@ -375,7 +375,8 @@ void EnGe1_Update(Actor* thisx, PlayState* play) { if (!(this->stateFlags & GERUDO_WHITE_STATE_DISABLE_MOVEMENT)) { Actor_MoveWithGravity(&this->picto.actor); } - Actor_UpdateBgCheckInfo(play, &this->picto.actor, 40.0f, 25.0f, 40.0f, 5); + Actor_UpdateBgCheckInfo(play, &this->picto.actor, 40.0f, 25.0f, 40.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4); this->actionFunc(this, play); this->torsoRot.x = this->torsoRot.y = this->torsoRot.z = 0; diff --git a/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c b/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c index 54836f071..3753ccf5c 100644 --- a/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c +++ b/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c @@ -699,7 +699,8 @@ void EnGe2_Update(Actor* thisx, PlayState* play) { if (!(this->stateFlags & GERUDO_PURPLE_STATE_DISABLE_MOVEMENT)) { Actor_MoveWithGravity(&this->picto.actor); } - Actor_UpdateBgCheckInfo(play, &this->picto.actor, 40.0f, 25.0f, 40.0f, 5); + Actor_UpdateBgCheckInfo(play, &this->picto.actor, 40.0f, 25.0f, 40.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4); Collider_UpdateCylinder(&this->picto.actor, &this->collider); CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); diff --git a/src/overlays/actors/ovl_En_Geg/z_en_geg.c b/src/overlays/actors/ovl_En_Geg/z_en_geg.c index 04353d954..44cf5215e 100644 --- a/src/overlays/actors/ovl_En_Geg/z_en_geg.c +++ b/src/overlays/actors/ovl_En_Geg/z_en_geg.c @@ -217,7 +217,7 @@ void func_80BB178C(EnGeg* this, PlayState* play) { if (collider != NULL) { CollisionCheck_SetOC(play, &play->colChkCtx, collider); - Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, 5); + Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4); } } diff --git a/src/overlays/actors/ovl_En_Gg/z_en_gg.c b/src/overlays/actors/ovl_En_Gg/z_en_gg.c index a2ece1010..b27d60302 100644 --- a/src/overlays/actors/ovl_En_Gg/z_en_gg.c +++ b/src/overlays/actors/ovl_En_Gg/z_en_gg.c @@ -144,7 +144,8 @@ void func_80B35108(EnGg* this, PlayState* play) { this->collider.dim.pos.z = this->actor.world.pos.z; CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base); - Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 30.0f, 30.0f, 7); + Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 30.0f, 30.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4); } void func_80B351A4(EnGg* this) { diff --git a/src/overlays/actors/ovl_En_Giant/z_en_giant.c b/src/overlays/actors/ovl_En_Giant/z_en_giant.c index 078c136b9..d62f9e6df 100644 --- a/src/overlays/actors/ovl_En_Giant/z_en_giant.c +++ b/src/overlays/actors/ovl_En_Giant/z_en_giant.c @@ -449,7 +449,7 @@ void EnGiant_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); if (this->blinkTimer == 0) { blinkTimerTemp = 0; diff --git a/src/overlays/actors/ovl_En_Gk/z_en_gk.c b/src/overlays/actors/ovl_En_Gk/z_en_gk.c index 3c4ea82f0..c1375d650 100644 --- a/src/overlays/actors/ovl_En_Gk/z_en_gk.c +++ b/src/overlays/actors/ovl_En_Gk/z_en_gk.c @@ -240,7 +240,8 @@ void func_80B507A0(EnGk* this, PlayState* play) { CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base); CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); - Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 30.0f, 30.0f, 7); + Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 30.0f, 30.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4); } s32 func_80B50854(EnGk* this, PlayState* play) { diff --git a/src/overlays/actors/ovl_En_Gm/z_en_gm.c b/src/overlays/actors/ovl_En_Gm/z_en_gm.c index 4c0dd92d9..86dcead70 100644 --- a/src/overlays/actors/ovl_En_Gm/z_en_gm.c +++ b/src/overlays/actors/ovl_En_Gm/z_en_gm.c @@ -1714,7 +1714,7 @@ void EnGm_Update(Actor* thisx, PlayState* play) { func_8013C964(&this->actor, play, this->unk_3B4, 30.0f, PLAYER_IA_NONE, this->unk_3A4 & 7); if ((this->unk_258 != 3) && (this->unk_258 != 5) && (this->unk_258 != 8)) { Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); } func_8094E1DC(this, play); } diff --git a/src/overlays/actors/ovl_En_Go/z_en_go.c b/src/overlays/actors/ovl_En_Go/z_en_go.c index 3f6fee765..02ee6d342 100644 --- a/src/overlays/actors/ovl_En_Go/z_en_go.c +++ b/src/overlays/actors/ovl_En_Go/z_en_go.c @@ -1937,7 +1937,7 @@ void EnGo_Update(Actor* thisx, PlayState* play) { if ((ENGO_GET_F(&this->actor) != ENGO_F_8) && (ENGO_GET_F(&this->actor) != ENGO_F_2) && (ENGO_GET_F(&this->actor) != ENGO_F_1)) { - Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); } func_80A122EC(this); diff --git a/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c b/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c index 312e1a9d9..b429c7e4b 100644 --- a/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c +++ b/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c @@ -1485,7 +1485,8 @@ void EnGoroiwa_Update(Actor* thisx, PlayState* play) { switch (ENGOROIWA_GET_400(&this->actor)) { case ENGOROIWA_400_1: - Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 0x1C); + Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, + UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10); break; case ENGOROIWA_400_0: diff --git a/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c b/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c index a67c6475d..2bd6fec69 100644 --- a/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c +++ b/src/overlays/actors/ovl_En_Grasshopper/z_en_grasshopper.c @@ -920,7 +920,9 @@ void EnGrasshopper_Update(Actor* thisx, PlayState* play) { Math_ApproachZeroF(&this->damagedVelocity.y, 1.0f, 2.0f); Math_ApproachZeroF(&this->damagedVelocity.z, 1.0f, 2.0f); if ((this->action != EN_GRASSHOPPER_ACTION_FALL) && (this->type != EN_GRASSHOPPER_TYPE_WOODFALL)) { - Actor_UpdateBgCheckInfo(play, &this->actor, 35.0f, 60.0f, 60.0f, 0x1D); + Actor_UpdateBgCheckInfo(play, &this->actor, 35.0f, 60.0f, 60.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10); } this->actor.shape.rot.z = this->actor.world.rot.z; diff --git a/src/overlays/actors/ovl_En_Gs/z_en_gs.c b/src/overlays/actors/ovl_En_Gs/z_en_gs.c index aea9d4ac3..e427dedc3 100644 --- a/src/overlays/actors/ovl_En_Gs/z_en_gs.c +++ b/src/overlays/actors/ovl_En_Gs/z_en_gs.c @@ -842,7 +842,7 @@ s32 func_809995A4(EnGs* this, PlayState* play) { } if (this->unk_19D == 4) { - Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 60.0f, 3); + Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 60.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2); if (this->actor.bgCheckFlags & (BGCHECKFLAG_WALL | BGCHECKFLAG_CEILING)) { Vec3f sp54; diff --git a/src/overlays/actors/ovl_En_Guard_Nuts/z_en_guard_nuts.c b/src/overlays/actors/ovl_En_Guard_Nuts/z_en_guard_nuts.c index 56ad07592..f5925f524 100644 --- a/src/overlays/actors/ovl_En_Guard_Nuts/z_en_guard_nuts.c +++ b/src/overlays/actors/ovl_En_Guard_Nuts/z_en_guard_nuts.c @@ -345,7 +345,9 @@ void EnGuardNuts_Update(Actor* thisx, PlayState* play) { } Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 60.0f, 0x1D); + Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 60.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10); if ((this->state != GUARD_NUTS_BURROWED_STATE) && (this->state != GUARD_NUTS_UNK_STATE)) { Collider_UpdateCylinder(&this->actor, &this->collider); CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); diff --git a/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c b/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c index d2aacf748..a6f5f98b3 100644 --- a/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c +++ b/src/overlays/actors/ovl_En_Guruguru/z_en_guruguru.c @@ -363,7 +363,9 @@ void EnGuruguru_Update(Actor* thisx, PlayState* play) { Actor_MoveWithGravity(&this->actor); Math_SmoothStepToS(&this->headXRot, this->headXRotTarget, 1, 3000, 0); Math_SmoothStepToS(&this->headZRot, this->headZRotTarget, 1, 1000, 0); - Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, 0x1D); + Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10); Collider_UpdateCylinder(&this->actor, &this->collider); CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); } diff --git a/src/overlays/actors/ovl_En_Hakurock/z_en_hakurock.c b/src/overlays/actors/ovl_En_Hakurock/z_en_hakurock.c index dc5610896..44e42d01a 100644 --- a/src/overlays/actors/ovl_En_Hakurock/z_en_hakurock.c +++ b/src/overlays/actors/ovl_En_Hakurock/z_en_hakurock.c @@ -323,7 +323,8 @@ void EnHakurock_Update(Actor* thisx, PlayState* play) { rockParams = this->actor.params; if ((rockParams == EN_HAKUROCK_TYPE_BOULDER) || (rockParams == EN_HAKUROCK_TYPE_UNK_2)) { Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, this->collider.dim.radius, 0.0f, 0x85); + Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, this->collider.dim.radius, 0.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_80); if (this->actor.floorHeight == BGCHECK_Y_MIN) { func_80B21FFC(this); } else { diff --git a/src/overlays/actors/ovl_En_Heishi/z_en_heishi.c b/src/overlays/actors/ovl_En_Heishi/z_en_heishi.c index f4e40b6c8..5fa9f5ea2 100644 --- a/src/overlays/actors/ovl_En_Heishi/z_en_heishi.c +++ b/src/overlays/actors/ovl_En_Heishi/z_en_heishi.c @@ -156,7 +156,9 @@ void EnHeishi_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, 29); + Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10); Actor_SetScale(&this->actor, 0.01f); if (this->shouldSetHeadRotation) { EnHeishi_SetHeadRotation(this); diff --git a/src/overlays/actors/ovl_En_Hg/z_en_hg.c b/src/overlays/actors/ovl_En_Hg/z_en_hg.c index eb41fc045..4b610de8f 100644 --- a/src/overlays/actors/ovl_En_Hg/z_en_hg.c +++ b/src/overlays/actors/ovl_En_Hg/z_en_hg.c @@ -428,7 +428,7 @@ void EnHg_Update(Actor* thisx, PlayState* play) { SkelAnime_Update(&this->skelAnime); EnHg_UpdateCollision(this, play); EnHg_WaitForPlayerAction(this, play); - Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 25.0f, 0.0f, 5); + Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 25.0f, 0.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4); EnHg_PlayRedeadSfx(this, play); } diff --git a/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.c b/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.c index fa14a3cdb..c3052e80f 100644 --- a/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.c +++ b/src/overlays/actors/ovl_En_Hidden_Nuts/z_en_hidden_nuts.c @@ -423,7 +423,9 @@ void EnHiddenNuts_Update(Actor* thisx, PlayState* play) { if (this->unk_21A >= 4) { Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 40.0f, 0x1D); + Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 40.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10); } Collider_UpdateCylinder(&this->actor, &this->collider); diff --git a/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.c b/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.c index 6e1f3b90c..09a110dbf 100644 --- a/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.c +++ b/src/overlays/actors/ovl_En_Hint_Skb/z_en_hint_skb.c @@ -838,7 +838,9 @@ void EnHintSkb_Update(Actor* thisx, PlayState* play) { } Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 30.0f, 60.0f, 0x1D); + Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 30.0f, 60.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10); func_80C21250(this, play); func_80C20D64(this, play); func_80C21320(this, play); diff --git a/src/overlays/actors/ovl_En_Horse/z_en_horse.c b/src/overlays/actors/ovl_En_Horse/z_en_horse.c index 6d3e01952..59fea362a 100644 --- a/src/overlays/actors/ovl_En_Horse/z_en_horse.c +++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.c @@ -3739,9 +3739,12 @@ void EnHorse_UpdateBgCheckInfo(EnHorse* this, PlayState* play) { if ((this->actor.params != ENHORSE_4) && (this->actor.params != ENHORSE_5) && (this->actor.params != ENHORSE_19) && (this->actor.params != ENHORSE_20) && (this->actor.params != ENHORSE_18)) { - Actor_UpdateBgCheckInfo(play, &this->actor, 40.0f, 35.0f, 100.0f, 0x1D); + Actor_UpdateBgCheckInfo(play, &this->actor, 40.0f, 35.0f, 100.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10); } else { - Actor_UpdateBgCheckInfo(play, &this->actor, 40.0f, 35.0f, 100.0f, 0x1C); + Actor_UpdateBgCheckInfo(play, &this->actor, 40.0f, 35.0f, 100.0f, + UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10); } if ((this->actor.bgCheckFlags & BGCHECKFLAG_WALL) && diff --git a/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.c b/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.c index 0335085bd..8c77bb2a0 100644 --- a/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.c +++ b/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.c @@ -529,7 +529,9 @@ void EnHorseLinkChild_Update(Actor* thisx, PlayState* play) { D_808DFF30[this->unk_144](this, play); Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 55.0f, 100.0f, 0x1D); + Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 55.0f, 100.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10); this->actor.focus.pos = this->actor.world.pos; this->actor.focus.pos.y += 70.0f; diff --git a/src/overlays/actors/ovl_En_Hs/z_en_hs.c b/src/overlays/actors/ovl_En_Hs/z_en_hs.c index 6f3a192c2..8ecc26857 100644 --- a/src/overlays/actors/ovl_En_Hs/z_en_hs.c +++ b/src/overlays/actors/ovl_En_Hs/z_en_hs.c @@ -282,7 +282,7 @@ void EnHs_Update(Actor* thisx, PlayState* play) { CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); if (SkelAnime_Update(&this->skelAnime)) { this->skelAnime.curFrame = 0.0f; diff --git a/src/overlays/actors/ovl_En_Ig/z_en_ig.c b/src/overlays/actors/ovl_En_Ig/z_en_ig.c index 43f39a4b9..fde467ddc 100644 --- a/src/overlays/actors/ovl_En_Ig/z_en_ig.c +++ b/src/overlays/actors/ovl_En_Ig/z_en_ig.c @@ -952,7 +952,7 @@ void EnIg_Update(Actor* thisx, PlayState* play) { func_80BF15EC(this); func_8013C964(&this->actor, play, 60.0f, 30.0f, PLAYER_IA_NONE, this->unk_3D0 & 7); Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); func_80BF1354(this, play); } } diff --git a/src/overlays/actors/ovl_En_Ik/z_en_ik.c b/src/overlays/actors/ovl_En_Ik/z_en_ik.c index fb9267e8e..5c1244faa 100644 --- a/src/overlays/actors/ovl_En_Ik/z_en_ik.c +++ b/src/overlays/actors/ovl_En_Ik/z_en_ik.c @@ -870,7 +870,9 @@ void EnIk_Update(Actor* thisx, PlayState* play2) { } this->actionFunc(this, play); Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 75.0f, 30.0f, 30.0f, 0x1D); + Actor_UpdateBgCheckInfo(play, &this->actor, 75.0f, 30.0f, 30.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10); this->actor.focus.rot.y = this->actor.shape.rot.y; CollisionCheck_SetOC(play, &play->colChkCtx, &this->colliderCylinder.base); if (this->invincibilityFrames == 0) { diff --git a/src/overlays/actors/ovl_En_In/z_en_in.c b/src/overlays/actors/ovl_En_In/z_en_in.c index bf7552947..e3d183fe4 100644 --- a/src/overlays/actors/ovl_En_In/z_en_in.c +++ b/src/overlays/actors/ovl_En_In/z_en_in.c @@ -1468,7 +1468,7 @@ void EnIn_Update(Actor* thisx, PlayState* play) { this->unk4AC &= ~0x40; } this->actionFunc(this, play); - Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 0x4); + Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); func_808F3414(this, play); func_808F32A0(this, play); } diff --git a/src/overlays/actors/ovl_En_Insect/z_en_insect.c b/src/overlays/actors/ovl_En_Insect/z_en_insect.c index 65696795b..866f1d1b8 100644 --- a/src/overlays/actors/ovl_En_Insect/z_en_insect.c +++ b/src/overlays/actors/ovl_En_Insect/z_en_insect.c @@ -442,7 +442,7 @@ void func_8091B984(EnInsect* this, PlayState* play) { void EnInsect_Update(Actor* thisx, PlayState* play) { EnInsect* this = THIS; - s32 phi_v0; + s32 updBgCheckInfoFlags; if ((this->actor.child != NULL) && (this->actor.child->update == NULL) && (&this->actor != this->actor.child)) { this->actor.child = NULL; @@ -470,14 +470,14 @@ void EnInsect_Update(Actor* thisx, PlayState* play) { } } - phi_v0 = 0; + updBgCheckInfoFlags = 0; if (this->unk_30C & 1) { - phi_v0 = 4; + updBgCheckInfoFlags = UPDBGCHECKINFO_FLAG_4; } - if (phi_v0 != 0) { - phi_v0 |= 0x40; - Actor_UpdateBgCheckInfo(play, &this->actor, 8.0f, 5.0f, 0.0f, phi_v0); + if (updBgCheckInfoFlags != 0) { + updBgCheckInfoFlags |= UPDBGCHECKINFO_FLAG_40; + Actor_UpdateBgCheckInfo(play, &this->actor, 8.0f, 5.0f, 0.0f, updBgCheckInfoFlags); } if (Actor_HasParent(&this->actor, play)) { diff --git a/src/overlays/actors/ovl_En_Invisible_Ruppe/z_en_invisible_ruppe.c b/src/overlays/actors/ovl_En_Invisible_Ruppe/z_en_invisible_ruppe.c index 489431bdf..d2aceba29 100644 --- a/src/overlays/actors/ovl_En_Invisible_Ruppe/z_en_invisible_ruppe.c +++ b/src/overlays/actors/ovl_En_Invisible_Ruppe/z_en_invisible_ruppe.c @@ -55,7 +55,7 @@ static ColliderCylinderInit sCylinderInit = { void func_80C258A0(EnInvisibleRuppe* this, PlayState* play) { Collider_UpdateCylinder(&this->actor, &this->collider); CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); - Actor_UpdateBgCheckInfo(play, &this->actor, 32.0f, 30.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 32.0f, 30.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); } void func_80C2590C(EnInvisibleRuppe* this, PlayState* play) { diff --git a/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c b/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c index 040081b5c..e90ddcafd 100644 --- a/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c +++ b/src/overlays/actors/ovl_En_Ishi/z_en_ishi.c @@ -541,7 +541,9 @@ void func_8095E95C(EnIshi* this, PlayState* play) { func_8095E14C(this); func_8095E180(&this->actor.velocity, D_8095F6C8[ENISHI_GET_1(&this->actor)]); Actor_UpdatePos(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 7.5f, 35.0f, 0.0f, 0xC5); + Actor_UpdateBgCheckInfo(play, &this->actor, 7.5f, 35.0f, 0.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_40 | + UPDBGCHECKINFO_FLAG_80); } else { sp30.x = this->actor.world.pos.x; sp30.y = this->actor.world.pos.y + 20.0f; @@ -648,7 +650,9 @@ void func_8095EBDC(EnIshi* this, PlayState* play) { Actor_UpdatePos(&this->actor); this->actor.shape.rot.x += D_8095F690; this->actor.shape.rot.y += D_8095F694; - Actor_UpdateBgCheckInfo(play, &this->actor, 7.5f, 35.0f, 0.0f, 0xC5); + Actor_UpdateBgCheckInfo(play, &this->actor, 7.5f, 35.0f, 0.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_40 | + UPDBGCHECKINFO_FLAG_80); Collider_UpdateCylinder(&this->actor, &this->collider); CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base); diff --git a/src/overlays/actors/ovl_En_Ja/z_en_ja.c b/src/overlays/actors/ovl_En_Ja/z_en_ja.c index 39a28c4bd..1c65efed8 100644 --- a/src/overlays/actors/ovl_En_Ja/z_en_ja.c +++ b/src/overlays/actors/ovl_En_Ja/z_en_ja.c @@ -389,7 +389,7 @@ void EnJa_Update(Actor* thisx, PlayState* play) { if (this->unk_1D8.unk_00 != 2) { Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); } func_80BC1984(this, play); } diff --git a/src/overlays/actors/ovl_En_Jg/z_en_jg.c b/src/overlays/actors/ovl_En_Jg/z_en_jg.c index f2f2569c4..c8202a9e2 100644 --- a/src/overlays/actors/ovl_En_Jg/z_en_jg.c +++ b/src/overlays/actors/ovl_En_Jg/z_en_jg.c @@ -194,7 +194,8 @@ void EnJg_UpdateCollision(EnJg* this, PlayState* play) { CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base); CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); - Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 30.0f, 30.0f, 7); + Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 30.0f, 30.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4); } s16 EnJg_GetWalkingYRotation(Path* path, s32 pointIndex, Vec3f* pos, f32* distSQ) { diff --git a/src/overlays/actors/ovl_En_Js/z_en_js.c b/src/overlays/actors/ovl_En_Js/z_en_js.c index 371757e44..f6056664f 100644 --- a/src/overlays/actors/ovl_En_Js/z_en_js.c +++ b/src/overlays/actors/ovl_En_Js/z_en_js.c @@ -1015,7 +1015,7 @@ void EnJs_Update(Actor* thisx, PlayState* play) { CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 40.0f, 25.0f, 40.0f, 5); + Actor_UpdateBgCheckInfo(play, &this->actor, 40.0f, 25.0f, 40.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4); this->actionFunc(this, play); diff --git a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c index fca1afc51..0cfe7ae75 100644 --- a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c +++ b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c @@ -2028,7 +2028,9 @@ void EnKaizoku_Update(Actor* thisx, PlayState* play2) { Math_ApproachZeroF(&this->unk_2F0, 1.0f, 5.0f); } - Actor_UpdateBgCheckInfo(play, &this->picto.actor, 35.0f, 40.0f, 35.0f, 0x1F); + Actor_UpdateBgCheckInfo(play, &this->picto.actor, 35.0f, 40.0f, 35.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4 | + UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10); Collider_UpdateCylinder(&this->picto.actor, &this->bodyCollider); CollisionCheck_SetOC(play, &play->colChkCtx, &this->bodyCollider.base); if ((this->unk_2D0 < 2) && (this->action != KAIZOKU_ACTION_0)) { diff --git a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c index d35e767c0..7af84b5e4 100644 --- a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c +++ b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c @@ -1136,7 +1136,8 @@ void EnKakasi_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); Actor_MoveWithGravity(&this->picto.actor); - Actor_UpdateBgCheckInfo(play, &this->picto.actor, 50.0f, 50.0f, 100.0f, 0x1C); + Actor_UpdateBgCheckInfo(play, &this->picto.actor, 50.0f, 50.0f, 100.0f, + UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10); if (this->picto.actor.draw != NULL) { Collider_UpdateCylinder(&this->picto.actor, &this->collider); CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base); diff --git a/src/overlays/actors/ovl_En_Kame/z_en_kame.c b/src/overlays/actors/ovl_En_Kame/z_en_kame.c index b508adecf..0a9689b17 100644 --- a/src/overlays/actors/ovl_En_Kame/z_en_kame.c +++ b/src/overlays/actors/ovl_En_Kame/z_en_kame.c @@ -716,7 +716,9 @@ void EnKame_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 40.0f, 60.0f, 40.0f, 0x1F); + Actor_UpdateBgCheckInfo(play, &this->actor, 40.0f, 60.0f, 40.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4 | + UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10); if (this->actor.shape.shadowDraw != NULL) { Actor_SetFocus(&this->actor, 25.0f); diff --git a/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c b/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c index ba1cf165c..0390e1459 100644 --- a/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c +++ b/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c @@ -163,7 +163,7 @@ void EnKanban_Init(Actor* thisx, PlayState* play) { this->bounceX = 1; this->partFlags = 0xFFFF; - Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 50.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 50.0f, UPDBGCHECKINFO_FLAG_4); func_80954960(this); } } @@ -433,7 +433,8 @@ void EnKanban_Update(Actor* thisx, PlayState* play) { Actor_MoveWithGravity(&this->actor); } - Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 10.0f, 50.0f, 5); + Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 10.0f, 50.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4); tempX = this->actor.world.pos.x; tempY = this->actor.world.pos.y; @@ -442,7 +443,7 @@ void EnKanban_Update(Actor* thisx, PlayState* play) { tempWaterDepth = this->actor.depthInWater; this->actor.world.pos.z += ((this->actor.world.pos.y - this->actor.floorHeight) * -50.0f) / 100.0f; - Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 50.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 50.0f, UPDBGCHECKINFO_FLAG_4); func_80954960(this); this->actor.world.pos.x = tempX; @@ -709,7 +710,8 @@ void EnKanban_Update(Actor* thisx, PlayState* play) { Actor_MoveWithGravity(&this->actor); if (this->actor.speed != 0.0f) { - Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 50.0f, 5); + Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 50.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4); if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) { this->actor.speed *= -0.5f; if (this->spinVel.y > 0) { diff --git a/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.c b/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.c index 80e5ca0fc..0c0078fd3 100644 --- a/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.c +++ b/src/overlays/actors/ovl_En_Karebaba/z_en_karebaba.c @@ -602,9 +602,10 @@ void EnKarebaba_Update(Actor* thisx, PlayState* play2) { if (this->actionFunc != EnKarebaba_Dead) { if (this->actionFunc == EnKarebaba_Dying) { Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 15.0f, 10.0f, 5); + Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 15.0f, 10.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4); } else { - Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); if (this->boundFloor == 0) { this->boundFloor = this->actor.floorPoly; } diff --git a/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.c b/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.c index efce38ad8..ee7e0fe84 100644 --- a/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.c +++ b/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.c @@ -125,7 +125,7 @@ void EnKendoJs_Init(Actor* thisx, PlayState* play) { Actor_Kill(&this->actor); } - Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); if (ENKENDOJS_GET_FF(&this->actor) != ENKENDOJS_FF_1) { Path* path = &play->setupPathList[ENKENDOJS_GET_FF00(&this->actor)]; diff --git a/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c b/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c index 1f411bd39..4432fcf6d 100644 --- a/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c +++ b/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c @@ -519,7 +519,9 @@ void EnKusa_LiftedUp(EnKusa* this, PlayState* play) { EnKusa_UpdateVelY(this); EnKusa_RandScaleVecToZero(&this->actor.velocity, 0.005f); Actor_UpdatePos(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 7.5f, 35.0f, 0.0f, 0xC5); + Actor_UpdateBgCheckInfo(play, &this->actor, 7.5f, 35.0f, 0.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_40 | + UPDBGCHECKINFO_FLAG_80); this->actor.gravity = -3.2f; } else { pos.x = this->actor.world.pos.x; @@ -604,7 +606,9 @@ void EnKusa_Fall(EnKusa* this, PlayState* play) { this->actor.shape.rot.y += rotSpeedY; EnKusa_RandScaleVecToZero(&this->actor.velocity, 0.05f); Actor_UpdatePos(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 7.5f, 35.0f, 0.0f, 0xC5); + Actor_UpdateBgCheckInfo(play, &this->actor, 7.5f, 35.0f, 0.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_40 | + UPDBGCHECKINFO_FLAG_80); Collider_UpdateCylinder(&this->actor, &this->collider); CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base); CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); diff --git a/src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c b/src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c index 49fa4a98a..e178e7a4e 100644 --- a/src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c +++ b/src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c @@ -271,7 +271,8 @@ s32 func_80A5BA58(EnKusa2* this, PlayState* play) { } void func_80A5BAFC(EnKusa2* this, PlayState* play) { - Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 35.0f, 0.0f, 0x45); + Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 35.0f, 0.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_40); } void func_80A5BB40(EnKusa2* this, PlayState* play, s32 arg2) { diff --git a/src/overlays/actors/ovl_En_Lift_Nuts/z_en_lift_nuts.c b/src/overlays/actors/ovl_En_Lift_Nuts/z_en_lift_nuts.c index 38fc47610..5b2028486 100644 --- a/src/overlays/actors/ovl_En_Lift_Nuts/z_en_lift_nuts.c +++ b/src/overlays/actors/ovl_En_Lift_Nuts/z_en_lift_nuts.c @@ -218,7 +218,7 @@ void EnLiftNuts_Init(Actor* thisx, PlayState* play) { Collider_InitCylinder(play, &this->collider); Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->actor.colChkInfo, DamageTable_Get(0x16), &sColChkInfoInit); - Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); if (this->actor.floorBgId != BGCHECK_SCENE) { DynaPolyActor* bgActor = DynaPoly_GetActor(&play->colCtx, this->actor.floorBgId); @@ -975,7 +975,7 @@ void EnLiftNuts_Update(Actor* thisx, PlayState* play) { SkelAnime_Update(&this->skelAnime); this->actionFunc(this, play); func_80AEBB30(this, play); - Actor_UpdateBgCheckInfo(play, thisx, 0.0f, 0.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, thisx, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); func_80AE9BCC(this, play); if (func_80AE9B4C(0, 2)) { diff --git a/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c b/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c index 69bcf41b3..0a1ec063a 100644 --- a/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c +++ b/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c @@ -190,7 +190,7 @@ void EnMa4_Init(Actor* thisx, PlayState* play) { Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->actor.colChkInfo, DamageTable_Get(0x16), &D_80AC00DC); - Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); Actor_SetScale(&this->actor, 0.01f); this->actor.targetMode = 0; @@ -298,7 +298,7 @@ void EnMa4_RunInCircles(EnMa4* this, PlayState* play) { } } - Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); Actor_MoveWithGravity(&this->actor); if (this->skelAnime.animation == &gRomaniRunAnim) { if (Animation_OnFrame(&this->skelAnime, 0.0f) || Animation_OnFrame(&this->skelAnime, 4.0f)) { diff --git a/src/overlays/actors/ovl_En_Ma_Yto/z_en_ma_yto.c b/src/overlays/actors/ovl_En_Ma_Yto/z_en_ma_yto.c index 9117e55a3..89f1582ba 100644 --- a/src/overlays/actors/ovl_En_Ma_Yto/z_en_ma_yto.c +++ b/src/overlays/actors/ovl_En_Ma_Yto/z_en_ma_yto.c @@ -174,7 +174,7 @@ void EnMaYto_Init(Actor* thisx, PlayState* play) { Collider_InitCylinder(play, &this->collider); Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->actor.colChkInfo, DamageTable_Get(0x16), &sColChkInfoInit2); - Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); if (EnMaYto_TryFindRomani(this, play) == 1) { EnMaYto_SetupKeepLookingForRomani(this); diff --git a/src/overlays/actors/ovl_En_Ma_Yts/z_en_ma_yts.c b/src/overlays/actors/ovl_En_Ma_Yts/z_en_ma_yts.c index b52378a5a..1987fa72a 100644 --- a/src/overlays/actors/ovl_En_Ma_Yts/z_en_ma_yts.c +++ b/src/overlays/actors/ovl_En_Ma_Yts/z_en_ma_yts.c @@ -235,7 +235,7 @@ void EnMaYts_Init(Actor* thisx, PlayState* play) { this->collider.dim.radius = 40; } - Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 0x4); + Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); Actor_SetScale(&this->actor, 0.01f); this->interactInfo.talkState = NPC_TALK_STATE_IDLE; diff --git a/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c b/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c index e5855004f..3808c9cfc 100644 --- a/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c +++ b/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c @@ -573,7 +573,9 @@ void EnMinifrog_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 25.0f, 12.0f, 0.0f, 0x1D); + Actor_UpdateBgCheckInfo(play, &this->actor, 25.0f, 12.0f, 0.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10); Collider_UpdateCylinder(&this->actor, &this->collider); CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); this->actor.focus.rot.y = this->actor.shape.rot.y; diff --git a/src/overlays/actors/ovl_En_Mk/z_en_mk.c b/src/overlays/actors/ovl_En_Mk/z_en_mk.c index ced5f991b..054f39c81 100644 --- a/src/overlays/actors/ovl_En_Mk/z_en_mk.c +++ b/src/overlays/actors/ovl_En_Mk/z_en_mk.c @@ -445,7 +445,7 @@ void EnMk_Update(Actor* thisx, PlayState* play) { Collider_UpdateCylinder(&this->actor, &this->collider); CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); this->actionFunc(this, play); diff --git a/src/overlays/actors/ovl_En_Mkk/z_en_mkk.c b/src/overlays/actors/ovl_En_Mkk/z_en_mkk.c index 7da0b46e3..4f1ddc660 100644 --- a/src/overlays/actors/ovl_En_Mkk/z_en_mkk.c +++ b/src/overlays/actors/ovl_En_Mkk/z_en_mkk.c @@ -415,7 +415,9 @@ void EnMkk_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); this->actor.world.rot.y = this->actor.shape.rot.y; Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 20.0f, 0x1D); + Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 20.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10); if (this->actor.params == 0) { func_80A4E84C(this); } diff --git a/src/overlays/actors/ovl_En_Mm/z_en_mm.c b/src/overlays/actors/ovl_En_Mm/z_en_mm.c index cc2e5803e..ad25aa70c 100644 --- a/src/overlays/actors/ovl_En_Mm/z_en_mm.c +++ b/src/overlays/actors/ovl_En_Mm/z_en_mm.c @@ -200,7 +200,9 @@ void EnMm_Update(Actor* thisx, PlayState* play) { Collider_ResetCylinderAC(play, &this->collider.base); this->actionFunc(this, play); - Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 10.0f, 20.0f, 31); + Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 10.0f, 20.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4 | + UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10); Actor_SetFocus(&this->actor, 20.0f); } diff --git a/src/overlays/actors/ovl_En_Mm3/z_en_mm3.c b/src/overlays/actors/ovl_En_Mm3/z_en_mm3.c index 1fc29eafc..291fa83ce 100644 --- a/src/overlays/actors/ovl_En_Mm3/z_en_mm3.c +++ b/src/overlays/actors/ovl_En_Mm3/z_en_mm3.c @@ -92,7 +92,7 @@ void EnMm3_Init(Actor* thisx, PlayState* play) { Collider_InitCylinder(play, &this->collider); Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); CollisionCheck_SetInfo2(&this->actor.colChkInfo, NULL, &sColChkInfoInit); - Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); this->actor.parent = NULL; this->actor.targetMode = 0; this->unk_1DC = 1; diff --git a/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c b/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c index b5bc6610e..88e69021f 100644 --- a/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c +++ b/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c @@ -439,7 +439,8 @@ void func_80A69388(EnMushi2* this) { } void func_80A69424(EnMushi2* this, PlayState* play) { - Actor_UpdateBgCheckInfo(play, &this->actor, 8.0f, 9.0f, 0.0f, 0x45); + Actor_UpdateBgCheckInfo(play, &this->actor, 8.0f, 9.0f, 0.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_40); } s32 func_80A69468(EnMushi2* this, PlayState* play) { diff --git a/src/overlays/actors/ovl_En_Muto/z_en_muto.c b/src/overlays/actors/ovl_En_Muto/z_en_muto.c index 49d37330b..7c9d1e9b2 100644 --- a/src/overlays/actors/ovl_En_Muto/z_en_muto.c +++ b/src/overlays/actors/ovl_En_Muto/z_en_muto.c @@ -272,7 +272,9 @@ void EnMuto_Update(Actor* thisx, PlayState* play2) { Math_SmoothStepToS(&this->headRot.x, this->headRotTarget.x, 1, 0x3E8, 0); Math_SmoothStepToS(&this->waistRot.y, this->waistRotTarget.y, 1, 0xBB8, 0); - Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, 0x1D); + Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10); this->actor.uncullZoneForward = 500.0f; diff --git a/src/overlays/actors/ovl_En_Neo_Reeba/z_en_neo_reeba.c b/src/overlays/actors/ovl_En_Neo_Reeba/z_en_neo_reeba.c index 562217efd..960767b11 100644 --- a/src/overlays/actors/ovl_En_Neo_Reeba/z_en_neo_reeba.c +++ b/src/overlays/actors/ovl_En_Neo_Reeba/z_en_neo_reeba.c @@ -604,7 +604,7 @@ void EnNeoReeba_UpdatePosition(EnNeoReeba* this, PlayState* play) { Math_ApproachZeroF(&this->velToTarget.x, 1.0f, 2.0f); Math_ApproachZeroF(&this->velToTarget.z, 1.0f, 2.0f); - Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 40.0f, 40.0f, 5); + Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 40.0f, 40.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4); } } diff --git a/src/overlays/actors/ovl_En_Nimotsu/z_en_nimotsu.c b/src/overlays/actors/ovl_En_Nimotsu/z_en_nimotsu.c index 9c91d7092..807bbd849 100644 --- a/src/overlays/actors/ovl_En_Nimotsu/z_en_nimotsu.c +++ b/src/overlays/actors/ovl_En_Nimotsu/z_en_nimotsu.c @@ -53,7 +53,7 @@ static ColliderCylinderInit sCylinderInit = { void EnNimotsu_UpdateCollision(EnNimotsu* this, PlayState* play) { Collider_UpdateCylinder(&this->actor, &this->collider); CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); - Actor_UpdateBgCheckInfo(play, &this->actor, 32.0f, 30.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 32.0f, 30.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); } void EnNimotsu_Init(Actor* thisx, PlayState* play) { diff --git a/src/overlays/actors/ovl_En_Niw/z_en_niw.c b/src/overlays/actors/ovl_En_Niw/z_en_niw.c index 274ddbc49..bded43eda 100644 --- a/src/overlays/actors/ovl_En_Niw/z_en_niw.c +++ b/src/overlays/actors/ovl_En_Niw/z_en_niw.c @@ -812,7 +812,9 @@ void EnNiw_Update(Actor* thisx, PlayState* play) { Actor_SetFocus(&this->actor, this->unk308); Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 60.0f, 0x1F); + Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 60.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4 | + UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10); // if cucco is off the map if (this->actor.floorHeight <= BGCHECK_Y_MIN || this->actor.floorHeight >= BGCHECK_Y_MAX) { diff --git a/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c b/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c index 193334ff1..15e65b6ce 100644 --- a/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c +++ b/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c @@ -136,7 +136,8 @@ void EnNutsball_Update(Actor* thisx, PlayState* play2) { Actor_MoveWithoutGravity(&this->actor); Math_Vec3f_Copy(&worldPos, &this->actor.world.pos); - Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 5.0f, 10.0f, 0x7); + Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 5.0f, 10.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4); if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) { if (func_800C9A4C(&play->colCtx, this->actor.wallPoly, this->actor.wallBgId) & 0x30) { diff --git a/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c b/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c index 8c1947267..b11e8c408 100644 --- a/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c +++ b/src/overlays/actors/ovl_En_Nwc/z_en_nwc.c @@ -457,7 +457,7 @@ void EnNwc_Update(Actor* thisx, PlayState* play) { EnNwc* this = THIS; Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 10.0f, 5); + Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 10.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4); this->actionFunc(this, play); if (this->hasGrownUp & 1) { this->actor.objBankIndex = this->niwObjectIndex; diff --git a/src/overlays/actors/ovl_En_Onpuman/z_en_onpuman.c b/src/overlays/actors/ovl_En_Onpuman/z_en_onpuman.c index 0518e9457..929a3c90d 100644 --- a/src/overlays/actors/ovl_En_Onpuman/z_en_onpuman.c +++ b/src/overlays/actors/ovl_En_Onpuman/z_en_onpuman.c @@ -172,6 +172,6 @@ void EnOnpuman_Update(Actor* thisx, PlayState* play) { Collider_UpdateCylinder(&this->actor, &this->collider); CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); this->actionFunc(this, play); } diff --git a/src/overlays/actors/ovl_En_Ot/z_en_ot.c b/src/overlays/actors/ovl_En_Ot/z_en_ot.c index ed5078864..b98fb8971 100644 --- a/src/overlays/actors/ovl_En_Ot/z_en_ot.c +++ b/src/overlays/actors/ovl_En_Ot/z_en_ot.c @@ -948,7 +948,7 @@ void EnOt_Update(Actor* thisx, PlayState* play) { } } - Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 10.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 10.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); if (this->actor.world.pos.y <= this->actor.floorHeight + 50.0f) { this->actor.world.pos.y = this->actor.floorHeight + 50.0f; diff --git a/src/overlays/actors/ovl_En_Owl/z_en_owl.c b/src/overlays/actors/ovl_En_Owl/z_en_owl.c index 52287f317..fb4c54c3d 100644 --- a/src/overlays/actors/ovl_En_Owl/z_en_owl.c +++ b/src/overlays/actors/ovl_En_Owl/z_en_owl.c @@ -894,7 +894,7 @@ void EnOwl_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); func_8095C568(this); - Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 10.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 10.0f, UPDBGCHECKINFO_FLAG_4); Collider_UpdateCylinder(&this->actor, &this->collider); CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); if (this->actor.update != NULL) { @@ -1077,7 +1077,7 @@ void func_8095CCF4(Actor* thisx, PlayState* play) { } this->actor.world.pos.y -= 1.0f; - Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 10.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 10.0f, UPDBGCHECKINFO_FLAG_4); if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { this->unk_3DA = (this->unk_3DA >> 3) * 7; if (this->unk_3DC > 0) { diff --git a/src/overlays/actors/ovl_En_Pamera/z_en_pamera.c b/src/overlays/actors/ovl_En_Pamera/z_en_pamera.c index 36605afcb..966f21354 100644 --- a/src/overlays/actors/ovl_En_Pamera/z_en_pamera.c +++ b/src/overlays/actors/ovl_En_Pamera/z_en_pamera.c @@ -338,7 +338,7 @@ void func_80BD8B70(EnPamera* this, PlayState* play) { func_80BD8CCC(this); } - Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); this->actor.world.pos.y += this->actor.gravity; } @@ -382,7 +382,7 @@ void func_80BD8DB0(EnPamera* this, PlayState* play) { func_80BD9338(this, play); func_80BD8A38(this); } - Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); this->actor.world.pos.y += this->actor.gravity; } diff --git a/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c b/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c index 50cae4844..4172457f1 100644 --- a/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c +++ b/src/overlays/actors/ovl_En_Pametfrog/z_en_pametfrog.c @@ -1343,7 +1343,9 @@ void EnPametfrog_Update(Actor* thisx, PlayState* play) { if (this->actor.gravity < -0.1f) { Actor_MoveWithGravity(&this->actor); arg3 = this->actionFunc == EnPametfrog_FallInAir ? 3.0f : 15.0f; - Actor_UpdateBgCheckInfo(play, &this->actor, 25.0f, arg3, 3.0f, 0x1F); + Actor_UpdateBgCheckInfo(play, &this->actor, 25.0f, arg3, 3.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4 | + UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10); } else if (this->freezeTimer == 0) { Actor_MoveWithoutGravity(&this->actor); this->actor.floorHeight = this->actor.world.pos.y; diff --git a/src/overlays/actors/ovl_En_Paper/z_en_paper.c b/src/overlays/actors/ovl_En_Paper/z_en_paper.c index a3f158cbd..7659b524b 100644 --- a/src/overlays/actors/ovl_En_Paper/z_en_paper.c +++ b/src/overlays/actors/ovl_En_Paper/z_en_paper.c @@ -47,7 +47,7 @@ void EnPaper_Init(Actor* thisx, PlayState* play) { Actor_SetScale(&this->actor, 0.01f); this->timer = 70; this->windForce = sUnitVecZ; - Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); EnPaper_SetupSpreadConfettiGroup(this); } diff --git a/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c b/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c index 6b4d3269b..2f4678b8d 100644 --- a/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c +++ b/src/overlays/actors/ovl_En_Peehat/z_en_peehat.c @@ -750,7 +750,7 @@ void EnPeehat_Update(Actor* thisx, PlayState* play2) { func_8089874C(this, play); } Actor_MoveWithGravity(thisx); - Actor_UpdateBgCheckInfo(play, thisx, 25.0f, 30.0f, 30.0f, 5); + Actor_UpdateBgCheckInfo(play, thisx, 25.0f, 30.0f, 30.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4); this->actionFunc(this, play); diff --git a/src/overlays/actors/ovl_En_Pm/z_en_pm.c b/src/overlays/actors/ovl_En_Pm/z_en_pm.c index f1f34b6be..81f6c8b09 100644 --- a/src/overlays/actors/ovl_En_Pm/z_en_pm.c +++ b/src/overlays/actors/ovl_En_Pm/z_en_pm.c @@ -2042,7 +2042,7 @@ void func_80AFA5FC(EnPm* this, PlayState* play) { void func_80AFA724(EnPm* this, PlayState* play) { Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); if (Animation_OnFrame(&this->skelAnime, 3.0f) || Animation_OnFrame(&this->skelAnime, 8.0f)) { Actor_PlaySfx(&this->actor, NA_SE_EV_POSTMAN_WALK); } @@ -2089,7 +2089,7 @@ void EnPm_Update(Actor* thisx, PlayState* play) { func_80AF8AC8(this); func_8013C964(&this->actor, play, this->unk_368, 30.0f, this->unk_394, this->unk_356 & 7); Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); func_80AF7F68(this, play); } } diff --git a/src/overlays/actors/ovl_En_Po_Fusen/z_en_po_fusen.c b/src/overlays/actors/ovl_En_Po_Fusen/z_en_po_fusen.c index ac717641b..beffe3bb8 100644 --- a/src/overlays/actors/ovl_En_Po_Fusen/z_en_po_fusen.c +++ b/src/overlays/actors/ovl_En_Po_Fusen/z_en_po_fusen.c @@ -111,7 +111,7 @@ void EnPoFusen_Init(Actor* thisx, PlayState* play) { SkelAnime_InitFlex(play, &this->anime, &gPoeBalloonSkel, &gPoeBalloonEmptyAnim, this->jointTable, this->morphTable, POE_BALLOON_LIMB_MAX); ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 25.0f); - Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 0x4); + Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); if (!EnPoFusen_CheckParent(this, play)) { Actor_Kill(&this->actor); diff --git a/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.c b/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.c index 3545d2f8c..35a972dfc 100644 --- a/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.c +++ b/src/overlays/actors/ovl_En_Po_Sisters/z_en_po_sisters.c @@ -978,7 +978,7 @@ void EnPoSisters_Update(Actor* thisx, PlayState* play) { Actor_MoveWithGravity(&this->actor); if (this->poSisterFlags & POE_SISTERS_FLAG_UPDATE_BGCHECK_INFO) { - Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 0.0f, 5); + Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 0.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4); } else { checkPos.x = this->actor.world.pos.x; checkPos.y = this->actor.world.pos.y + 10.0f; diff --git a/src/overlays/actors/ovl_En_Poh/z_en_poh.c b/src/overlays/actors/ovl_En_Poh/z_en_poh.c index 997e91e8a..1c29c90c6 100644 --- a/src/overlays/actors/ovl_En_Poh/z_en_poh.c +++ b/src/overlays/actors/ovl_En_Poh/z_en_poh.c @@ -588,7 +588,7 @@ void func_80B2DD2C(EnPoh* this, PlayState* play) { } Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 10.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 10.0f, UPDBGCHECKINFO_FLAG_4); } void func_80B2DDF8(EnPoh* this, s32 arg1) { diff --git a/src/overlays/actors/ovl_En_Pp/z_en_pp.c b/src/overlays/actors/ovl_En_Pp/z_en_pp.c index 20c0dc1d8..5d1d6935e 100644 --- a/src/overlays/actors/ovl_En_Pp/z_en_pp.c +++ b/src/overlays/actors/ovl_En_Pp/z_en_pp.c @@ -1424,7 +1424,9 @@ void EnPp_Update(Actor* thisx, PlayState* play) { } } - Actor_UpdateBgCheckInfo(play, &this->actor, 35.0f, 40.0f, 40.0f, 0x1F); + Actor_UpdateBgCheckInfo(play, &this->actor, 35.0f, 40.0f, 40.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4 | + UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10); if (this->action != EN_PP_ACTION_BODY_PART_MOVE) { this->actor.shape.rot.y = this->actor.world.rot.y; } diff --git a/src/overlays/actors/ovl_En_Pr/z_en_pr.c b/src/overlays/actors/ovl_En_Pr/z_en_pr.c index 388388c53..ab47e693f 100644 --- a/src/overlays/actors/ovl_En_Pr/z_en_pr.c +++ b/src/overlays/actors/ovl_En_Pr/z_en_pr.c @@ -536,7 +536,9 @@ void EnPr_Update(Actor* thisx, PlayState* play) { } } - Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 30.0f, 20.0f, 0x1D); + Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 30.0f, 20.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10); Math_Vec3s_Copy(&this->actor.shape.rot, &this->actor.world.rot); if (this->unk_206 != 7) { diff --git a/src/overlays/actors/ovl_En_Pr2/z_en_pr2.c b/src/overlays/actors/ovl_En_Pr2/z_en_pr2.c index 2328ba87c..a1c2f3f4d 100644 --- a/src/overlays/actors/ovl_En_Pr2/z_en_pr2.c +++ b/src/overlays/actors/ovl_En_Pr2/z_en_pr2.c @@ -171,7 +171,9 @@ void EnPr2_Init(Actor* thisx, PlayState* play) { func_80A751B4(this); } - Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 20.0f, 20.0f, 0x1D); + Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 20.0f, 20.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10); if (!(this->actor.bgCheckFlags & (BGCHECKFLAG_WATER | BGCHECKFLAG_WATER_TOUCH))) { Actor_Kill(&this->actor); @@ -661,7 +663,9 @@ void EnPr2_Update(Actor* thisx, PlayState* play) { Actor_SetFocus(&this->actor, 10.0f); func_80A755D8(this, play); Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 0, 10.0f, 20.0f, 0x1F); + Actor_UpdateBgCheckInfo(play, &this->actor, 0, 10.0f, 20.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4 | + UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10); if (this->unk_1D6) { s32 i; diff --git a/src/overlays/actors/ovl_En_Prz/z_en_prz.c b/src/overlays/actors/ovl_En_Prz/z_en_prz.c index d4a48cfd2..e34ffe1f6 100644 --- a/src/overlays/actors/ovl_En_Prz/z_en_prz.c +++ b/src/overlays/actors/ovl_En_Prz/z_en_prz.c @@ -441,7 +441,9 @@ void EnPrz_Update(Actor* thisx, PlayState* play) { } Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 10.0f, 10.0f, 0x1D); + Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 10.0f, 10.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10); if (this->unk_1EA != 7) { Math_Vec3s_Copy(&this->actor.shape.rot, &this->actor.world.rot); diff --git a/src/overlays/actors/ovl_En_Pst/z_en_pst.c b/src/overlays/actors/ovl_En_Pst/z_en_pst.c index c49852746..cef354c70 100644 --- a/src/overlays/actors/ovl_En_Pst/z_en_pst.c +++ b/src/overlays/actors/ovl_En_Pst/z_en_pst.c @@ -393,7 +393,7 @@ void EnPst_Init(Actor* thisx, PlayState* play) { this->actor.targetMode = 0; Actor_SetScale(&this->actor, 0.02f); this->actionFunc = EnPst_FollowSchedule; - Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); } void EnPst_Destroy(Actor* thisx, PlayState* play) { diff --git a/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c b/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c index c356a318b..c2e4b4afd 100644 --- a/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c +++ b/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c @@ -259,7 +259,7 @@ void EnRacedog_UpdateCollision(EnRacedog* this, PlayState* play) { this->collider.dim.pos.y = this->actor.world.pos.y; this->collider.dim.pos.z = this->actor.world.pos.z; CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); - Actor_UpdateBgCheckInfo(play, &this->actor, 26.0f, 10.0f, 0.0f, 5); + Actor_UpdateBgCheckInfo(play, &this->actor, 26.0f, 10.0f, 0.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4); } /** diff --git a/src/overlays/actors/ovl_En_Rail_Skb/z_en_rail_skb.c b/src/overlays/actors/ovl_En_Rail_Skb/z_en_rail_skb.c index dd0225f0c..405ed1838 100644 --- a/src/overlays/actors/ovl_En_Rail_Skb/z_en_rail_skb.c +++ b/src/overlays/actors/ovl_En_Rail_Skb/z_en_rail_skb.c @@ -1071,7 +1071,7 @@ void EnRailSkb_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); func_80B72190(this, play); - Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 30.0f, 60.0f, 5); + Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 30.0f, 60.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4); func_80B72970(this, play); if ((this->actionFunc != func_80B710E4) && (this->actionFunc != func_80B7114C) && diff --git a/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c b/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c index 27da7017c..2e85f081d 100644 --- a/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c +++ b/src/overlays/actors/ovl_En_Railgibud/z_en_railgibud.c @@ -901,9 +901,11 @@ void EnRailgibud_MoveGrabbedPlayerAwayFromWall(EnRailgibud* this, PlayState* pla Vec3f targetPos; if ((this->actionFunc == EnRailgibud_Grab) && (this->grabState != EN_RAILGIBUD_GRAB_RELEASE)) { - Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 20.0f, 35.0f, 1); + Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 20.0f, 35.0f, UPDBGCHECKINFO_FLAG_1); } else { - Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 20.0f, 35.0f, 0x1D); + Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 20.0f, 35.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10); } if ((this->actionFunc == EnRailgibud_Grab) && (this->grabState == EN_RAILGIBUD_GRAB_START) && diff --git a/src/overlays/actors/ovl_En_Rat/z_en_rat.c b/src/overlays/actors/ovl_En_Rat/z_en_rat.c index 63ef35aab..8c6871965 100644 --- a/src/overlays/actors/ovl_En_Rat/z_en_rat.c +++ b/src/overlays/actors/ovl_En_Rat/z_en_rat.c @@ -853,7 +853,8 @@ void EnRat_Update(Actor* thisx, PlayState* play) { this->actor.floorHeight = this->actor.world.pos.y; } else { Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 30.0f, 60.0f, 7); + Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 30.0f, 60.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4); } if (SurfaceType_IsWallDamage(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId)) { diff --git a/src/overlays/actors/ovl_En_Rd/z_en_rd.c b/src/overlays/actors/ovl_En_Rd/z_en_rd.c index dacfb6e2b..b8e8e4139 100644 --- a/src/overlays/actors/ovl_En_Rd/z_en_rd.c +++ b/src/overlays/actors/ovl_En_Rd/z_en_rd.c @@ -1280,7 +1280,9 @@ void EnRd_Update(Actor* thisx, PlayState* play) { } if ((this->actor.shape.rot.x == 0) && (this->action != EN_RD_ACTION_GRABBING) && (this->actor.speed != 0.0f)) { - Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 20.0f, 35.0f, 0x1D); + Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 20.0f, 35.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10); } if (this->action == EN_RD_ACTION_ATTEMPTING_PLAYER_STUN) { diff --git a/src/overlays/actors/ovl_En_Rg/z_en_rg.c b/src/overlays/actors/ovl_En_Rg/z_en_rg.c index 190af1a8a..79b861477 100644 --- a/src/overlays/actors/ovl_En_Rg/z_en_rg.c +++ b/src/overlays/actors/ovl_En_Rg/z_en_rg.c @@ -786,7 +786,9 @@ void EnRg_Update(Actor* thisx, PlayState* play) { func_80BF4024(this, play); } - Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 20.0f, 0.0f, 0x1D); + Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 20.0f, 0.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10); if (this->actor.floorHeight <= BGCHECK_Y_MIN) { Math_Vec3f_Copy(&this->actor.world.pos, &this->actor.prevPos); diff --git a/src/overlays/actors/ovl_En_Rr/z_en_rr.c b/src/overlays/actors/ovl_En_Rr/z_en_rr.c index 3e193ce79..85086d228 100644 --- a/src/overlays/actors/ovl_En_Rr/z_en_rr.c +++ b/src/overlays/actors/ovl_En_Rr/z_en_rr.c @@ -807,7 +807,9 @@ void EnRr_Update(Actor* thisx, PlayState* play) { } Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, this->collider1.dim.radius, 0.0f, 0x5D); + Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, this->collider1.dim.radius, 0.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10 | UPDBGCHECKINFO_FLAG_40); func_808FB794(this, play); if (this->unk_1FC > 0) { diff --git a/src/overlays/actors/ovl_En_Ru/z_en_ru.c b/src/overlays/actors/ovl_En_Ru/z_en_ru.c index 0f8c45872..47d05f8ab 100644 --- a/src/overlays/actors/ovl_En_Ru/z_en_ru.c +++ b/src/overlays/actors/ovl_En_Ru/z_en_ru.c @@ -250,7 +250,7 @@ void EnRu_Update(Actor* thisx, PlayState* play) { EnRu* this = THIS; this->actionFunc(this, play); - Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); EnRu_UpdateModel(this, play); EnRu_UpdateCollider(this, play); } diff --git a/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c b/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c index cf62faf71..19d6611d6 100644 --- a/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c +++ b/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c @@ -130,7 +130,8 @@ s32 EnRuppecrow_UpdateCollision(EnRuppecrow* this, PlayState* play) { this->collider.elements->dim.worldSphere.center.z = this->actor.world.pos.z; CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base); - Actor_UpdateBgCheckInfo(play, &this->actor, 12.0f, 25.0f, 50.0f, 0x07); + Actor_UpdateBgCheckInfo(play, &this->actor, 12.0f, 25.0f, 50.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4); return true; } diff --git a/src/overlays/actors/ovl_En_Rz/z_en_rz.c b/src/overlays/actors/ovl_En_Rz/z_en_rz.c index 23b6419ab..fe5562f14 100644 --- a/src/overlays/actors/ovl_En_Rz/z_en_rz.c +++ b/src/overlays/actors/ovl_En_Rz/z_en_rz.c @@ -653,7 +653,7 @@ void EnRz_Update(Actor* thisx, PlayState* play) { Collider_UpdateCylinder(&this->actor, &this->collider); CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 40.0f, 25.0f, 40.0f, 5); + Actor_UpdateBgCheckInfo(play, &this->actor, 40.0f, 25.0f, 40.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4); this->actionFunc(this, play); diff --git a/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c b/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c index f3af8a510..debcc77b9 100644 --- a/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c +++ b/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c @@ -1328,7 +1328,7 @@ void EnSGoro_Update(Actor* thisx, PlayState* play) { EnSGoro* this = (EnSGoro*)thisx; this->actionFunc(this, play); - Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, 5); + Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4); gSegments[6] = VIRTUAL_TO_PHYSICAL(play->objectCtx.status[this->loadedObjIndex].segment); SkelAnime_Update(&this->skelAnime); if (this->animInfoIndex != EN_S_GORO_ANIM_SLEEPY) { diff --git a/src/overlays/actors/ovl_En_Sb/z_en_sb.c b/src/overlays/actors/ovl_En_Sb/z_en_sb.c index 6b2304b19..b34ee8c64 100644 --- a/src/overlays/actors/ovl_En_Sb/z_en_sb.c +++ b/src/overlays/actors/ovl_En_Sb/z_en_sb.c @@ -375,7 +375,7 @@ void EnSb_Update(Actor* thisx, PlayState* play) { Actor_SetFocus(&this->actor, 20.0f); Actor_MoveWithGravity(&this->actor); this->actionFunc(this, play); - Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 25.0f, 20.0f, 5); + Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 25.0f, 20.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4); EnSb_UpdateDamage(this, play); if (player->stateFlags1 & PLAYER_STATE1_8000000) { Collider_UpdateCylinder(&this->actor, &this->collider); diff --git a/src/overlays/actors/ovl_En_Sc_Ruppe/z_en_sc_ruppe.c b/src/overlays/actors/ovl_En_Sc_Ruppe/z_en_sc_ruppe.c index da7c85f63..be449e0a3 100644 --- a/src/overlays/actors/ovl_En_Sc_Ruppe/z_en_sc_ruppe.c +++ b/src/overlays/actors/ovl_En_Sc_Ruppe/z_en_sc_ruppe.c @@ -67,7 +67,7 @@ static ColliderCylinderInit sCylinderInit = { void EnScRuppe_UpdateCollision(EnScRuppe* this, PlayState* play) { Collider_UpdateCylinder(&this->actor, &this->collider); CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); - Actor_UpdateBgCheckInfo(play, &this->actor, 32.0f, 30.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 32.0f, 30.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); } s32 func_80BD697C(s16 ruppeIndex) { diff --git a/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c b/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c index 63a713358..52ba17d22 100644 --- a/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c +++ b/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c @@ -163,7 +163,7 @@ void func_80BCAE78(EnScopenuts* this, PlayState* play) { } if (this->unk_328 & 2) { - Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 20.0f, 5); + Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 20.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4); } } diff --git a/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c b/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c index 03aa4ab19..174dace1d 100644 --- a/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c +++ b/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c @@ -118,7 +118,7 @@ void func_80ADADD0(EnSellnuts* this, PlayState* play) { } if (this->unk_338 & 1) { - Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 20.0f, 5); + Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 20.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4); } } diff --git a/src/overlays/actors/ovl_En_Skb/z_en_skb.c b/src/overlays/actors/ovl_En_Skb/z_en_skb.c index 09cee41f2..f6e311d61 100644 --- a/src/overlays/actors/ovl_En_Skb/z_en_skb.c +++ b/src/overlays/actors/ovl_En_Skb/z_en_skb.c @@ -1062,7 +1062,9 @@ void EnSkb_Update(Actor* thisx, PlayState* play) { Actor_MoveWithGravity(&this->actor); } - Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 30.0f, 60.0f, 0x1D); + Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 30.0f, 60.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10); func_809964DC(this, play); func_80996AD0(this, play); func_80996D68(this, play); diff --git a/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c b/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c index 640bd2a26..a083d6ded 100644 --- a/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c +++ b/src/overlays/actors/ovl_En_Snowman/z_en_snowman.c @@ -1037,7 +1037,9 @@ void EnSnowman_Update(Actor* thisx, PlayState* play) { wallCheckRadius = this->collider.dim.radius; } - Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, wallCheckRadius, 0.0f, 0x1D); + Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, wallCheckRadius, 0.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10); if ((this->actor.floorPoly != NULL) && ((this->actor.floorPoly->normal.y * SHT_MINV) < 0.7f)) { Math_Vec3f_Copy(&this->actor.world.pos, &this->actor.prevPos); if (!this->turningOnSteepSlope) { @@ -1111,7 +1113,9 @@ void EnSnowman_UpdateSnowball(Actor* thisx, PlayState* play) { this->actor.shape.rot.x += 0xF00; Actor_MoveWithGravity(&this->actor); Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, this->collider.dim.radius * 0.6f, - this->collider.dim.height - this->collider.dim.yShift, 0x1F); + this->collider.dim.height - this->collider.dim.yShift, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4 | + UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10); Collider_UpdateCylinder(&this->actor, &this->collider); CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base); CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base); diff --git a/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c b/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c index 18031242c..06831bbb1 100644 --- a/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c +++ b/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c @@ -849,7 +849,7 @@ void EnSsh_Update(Actor* thisx, PlayState* play) { } else { SkelAnime_Update(&this->skelAnime); Actor_UpdatePos(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); this->actionFunc(this, play); } diff --git a/src/overlays/actors/ovl_En_St/z_en_st.c b/src/overlays/actors/ovl_En_St/z_en_st.c index 987558e3f..994a455a6 100644 --- a/src/overlays/actors/ovl_En_St/z_en_st.c +++ b/src/overlays/actors/ovl_En_St/z_en_st.c @@ -878,7 +878,7 @@ void EnSt_Update(Actor* thisx, PlayState* play) { if (this->drawDmgEffType != ACTOR_DRAW_DMGEFF_FROZEN_NO_SFX) { SkelAnime_Update(&this->skelAnime); } - Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, 5); + Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4); } else if (this->unk_312 < 20) { s16 idx = (this->unk_312 % 2) ? -1 : 1; diff --git a/src/overlays/actors/ovl_En_Sth/z_en_sth.c b/src/overlays/actors/ovl_En_Sth/z_en_sth.c index 9048a1d0f..3ff396920 100644 --- a/src/overlays/actors/ovl_En_Sth/z_en_sth.c +++ b/src/overlays/actors/ovl_En_Sth/z_en_sth.c @@ -677,7 +677,7 @@ void EnSth_Update(Actor* thisx, PlayState* play) { Actor_MoveWithGravity(&this->actor); Collider_UpdateCylinder(&this->actor, &this->collider); CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); - Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); this->actionFunc(this, play); diff --git a/src/overlays/actors/ovl_En_Stone_heishi/z_en_stone_heishi.c b/src/overlays/actors/ovl_En_Stone_heishi/z_en_stone_heishi.c index 93e68a83f..f75c54d37 100644 --- a/src/overlays/actors/ovl_En_Stone_heishi/z_en_stone_heishi.c +++ b/src/overlays/actors/ovl_En_Stone_heishi/z_en_stone_heishi.c @@ -433,7 +433,9 @@ void EnStoneheishi_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, 0x1D); + Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10); Actor_SetScale(&this->actor, 0.01f); if ((CHECK_WEEKEVENTREG(WEEKEVENTREG_41_40) || (play->actorCtx.lensMaskSize == 100)) && diff --git a/src/overlays/actors/ovl_En_Stop_heishi/z_en_stop_heishi.c b/src/overlays/actors/ovl_En_Stop_heishi/z_en_stop_heishi.c index edbf581f9..3716f18d0 100644 --- a/src/overlays/actors/ovl_En_Stop_heishi/z_en_stop_heishi.c +++ b/src/overlays/actors/ovl_En_Stop_heishi/z_en_stop_heishi.c @@ -545,7 +545,9 @@ void EnStopheishi_Update(Actor* thisx, PlayState* play) { Math_SmoothStepToS(&this->headRotZ, this->pitchToPlayer, 1, 0x7D0, 0); this->actionFunc(this, play); Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, 0x1D); + Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 20.0f, 50.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10); Actor_SetScale(&this->actor, 0.01f); this->actor.uncullZoneForward = 500.0f; Math_Vec3f_Copy(&this->actor.focus.pos, &this->headWorldPos); diff --git a/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c b/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c index 5bffa0d83..dc68a07c7 100644 --- a/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c +++ b/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c @@ -205,9 +205,9 @@ void EnSuttari_UpdateCollider(EnSuttari* this, PlayState* play) { CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); if ((this->flags1 & 1) && (this->actionFunc != func_80BADE14)) { - Actor_UpdateBgCheckInfo(play, &this->actor, 35.0f, 30.0f, 30.0f, 5); + Actor_UpdateBgCheckInfo(play, &this->actor, 35.0f, 30.0f, 30.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4); } else { - Actor_UpdateBgCheckInfo(play, &this->actor, 35.0f, 30.0f, 30.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 35.0f, 30.0f, 30.0f, UPDBGCHECKINFO_FLAG_4); } } diff --git a/src/overlays/actors/ovl_En_Sw/z_en_sw.c b/src/overlays/actors/ovl_En_Sw/z_en_sw.c index e76bc85a5..bcf380cba 100644 --- a/src/overlays/actors/ovl_En_Sw/z_en_sw.c +++ b/src/overlays/actors/ovl_En_Sw/z_en_sw.c @@ -896,7 +896,7 @@ void func_808DA89C(EnSw* this, PlayState* play) { } Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); } } @@ -1130,7 +1130,7 @@ void func_808DB2E0(EnSw* this, PlayState* play) { Actor_SetScale(&this->actor, this->actor.scale.x); this->actor.velocity.y += this->actor.gravity; Actor_UpdatePos(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); } void EnSw_Init(Actor* thisx, PlayState* play) { diff --git a/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.c b/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.c index a4407dcc2..8a3a65ed2 100644 --- a/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.c +++ b/src/overlays/actors/ovl_En_Syateki_Wf/z_en_syateki_wf.c @@ -425,7 +425,7 @@ void EnSyatekiWf_Update(Actor* thisx, PlayState* play2) { } Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 32.0f, 30.0f, 60.0f, 5); + Actor_UpdateBgCheckInfo(play, &this->actor, 32.0f, 30.0f, 60.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4); this->actionFunc(this, play); if (this->actor.bgCheckFlags & (BGCHECKFLAG_GROUND | BGCHECKFLAG_GROUND_TOUCH)) { diff --git a/src/overlays/actors/ovl_En_Tab/z_en_tab.c b/src/overlays/actors/ovl_En_Tab/z_en_tab.c index abd7c100c..6c020e7e6 100644 --- a/src/overlays/actors/ovl_En_Tab/z_en_tab.c +++ b/src/overlays/actors/ovl_En_Tab/z_en_tab.c @@ -553,7 +553,7 @@ void EnTab_Update(Actor* thisx, PlayState* play) { func_8013C964(&this->actor, play, radius, height, PLAYER_IA_NONE, this->unk_2FC & 7); Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); func_80BE0620(this, play); } } diff --git a/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c b/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c index 386e80a1f..035b04983 100644 --- a/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c +++ b/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c @@ -1111,7 +1111,9 @@ void EnTalkGibud_MoveGrabbedPlayerAwayFromWall(EnTalkGibud* this, PlayState* pla Player* player = GET_PLAYER(play); Vec3f targetPos; - Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 20.0f, 35.0f, 29); + Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 20.0f, 35.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10); if (this->actionFunc == EnTalkGibud_Grab && this->grabState == EN_TALK_GIBUD_GRAB_START && (this->actor.bgCheckFlags & BGCHECKFLAG_WALL)) { targetPos = player->actor.world.pos; diff --git a/src/overlays/actors/ovl_En_Tanron2/z_en_tanron2.c b/src/overlays/actors/ovl_En_Tanron2/z_en_tanron2.c index 56384193e..2d1c29970 100644 --- a/src/overlays/actors/ovl_En_Tanron2/z_en_tanron2.c +++ b/src/overlays/actors/ovl_En_Tanron2/z_en_tanron2.c @@ -155,7 +155,7 @@ void EnTanron2_Init(Actor* thisx, PlayState* play) { this->unk_14C = -this->unk_14C; } - Actor_UpdateBgCheckInfo(play, &this->actor, 35.0f, 60.0f, 60.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 35.0f, 60.0f, 60.0f, UPDBGCHECKINFO_FLAG_4); this->actor.floorHeight += 20.0f; this->unk_148 = Rand_ZeroFloat(32.0f); } diff --git a/src/overlays/actors/ovl_En_Tanron3/z_en_tanron3.c b/src/overlays/actors/ovl_En_Tanron3/z_en_tanron3.c index bc8fee2fd..c3d62e166 100644 --- a/src/overlays/actors/ovl_En_Tanron3/z_en_tanron3.c +++ b/src/overlays/actors/ovl_En_Tanron3/z_en_tanron3.c @@ -404,7 +404,7 @@ void EnTanron3_Update(Actor* thisx, PlayState* play) { } this->actionFunc(this, play); - Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 20.0f, 5); + Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 20.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4); // The fish has either just entered or just exited the water, so create a splash effect if (((this->actor.prevPos.y < this->waterSurfaceYPos) && (this->waterSurfaceYPos <= this->actor.world.pos.y)) || diff --git a/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.c b/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.c index e285869a5..0e5b8a0f5 100644 --- a/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.c +++ b/src/overlays/actors/ovl_En_Tanron5/z_en_tanron5.c @@ -203,7 +203,7 @@ void EnTanron5_Init(Actor* thisx, PlayState* play) { Actor_Kill(&this->actor); } else { - Actor_UpdateBgCheckInfo(play, &this->actor, 50.0f, 150.0f, 100.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 50.0f, 150.0f, 100.0f, UPDBGCHECKINFO_FLAG_4); this->actor.world.pos.y = this->actor.floorHeight + -20.0f; } } @@ -417,7 +417,7 @@ void func_80BE5818(Actor* thisx, PlayState* play2) { if (this->actor.speed > 0.02f) { Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 50.0f, 150.0f, 100.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 50.0f, 150.0f, 100.0f, UPDBGCHECKINFO_FLAG_4); } if (ENTANRON5_GET(&this->actor) < ENTANRON5_110) { diff --git a/src/overlays/actors/ovl_En_Tanron6/z_en_tanron6.c b/src/overlays/actors/ovl_En_Tanron6/z_en_tanron6.c index 4faa072f9..875f36a61 100644 --- a/src/overlays/actors/ovl_En_Tanron6/z_en_tanron6.c +++ b/src/overlays/actors/ovl_En_Tanron6/z_en_tanron6.c @@ -91,7 +91,9 @@ void EnTanron6_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 40.0f, 40.0f, 0x1D); + Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 40.0f, 40.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10); } void EnTanron6_Draw(Actor* thisx, PlayState* play) { diff --git a/src/overlays/actors/ovl_En_Tg/z_en_tg.c b/src/overlays/actors/ovl_En_Tg/z_en_tg.c index 0b7a5c3f3..ed048288e 100644 --- a/src/overlays/actors/ovl_En_Tg/z_en_tg.c +++ b/src/overlays/actors/ovl_En_Tg/z_en_tg.c @@ -162,7 +162,7 @@ void EnTg_Update(Actor* thisx, PlayState* play) { EnTg* this = THIS; this->actionFunc(this, play); - Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); EnTg_UpdateSkelAnime(this, play); EnTg_UpdateHearts(play, this->effects, ARRAY_COUNT(this->effects)); EnTg_UpdateCollider(this, play); diff --git a/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c b/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c index 674059f1a..491d94227 100644 --- a/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c +++ b/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c @@ -1020,7 +1020,8 @@ void EnThiefbird_Update(Actor* thisx, PlayState* play2) { Actor_MoveWithGravity(&this->actor); } - Actor_UpdateBgCheckInfo(play, &this->actor, 25.0f, 25.0f, 50.0f, 7); + Actor_UpdateBgCheckInfo(play, &this->actor, 25.0f, 25.0f, 50.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4); if (this->actionFunc == func_80C1193C) { CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base); } diff --git a/src/overlays/actors/ovl_En_Tite/z_en_tite.c b/src/overlays/actors/ovl_En_Tite/z_en_tite.c index f6a5b1ae4..5b77c1399 100644 --- a/src/overlays/actors/ovl_En_Tite/z_en_tite.c +++ b/src/overlays/actors/ovl_En_Tite/z_en_tite.c @@ -147,7 +147,8 @@ void EnTite_Init(Actor* thisx, PlayState* play) { CollisionCheck_SetInfo(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit); Collider_InitAndSetSphere(play, &this->collider, &this->actor, &sSphereInit); this->collider.dim.worldSphere.radius = sSphereInit.dim.modelSphere.radius; - this->unk_2C0 = 0x1D; + this->updBgCheckInfoFlags = + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10; if (!D_80896B60) { for (i = 0; i < ARRAY_COUNT(D_80896B24); i++) { @@ -178,7 +179,7 @@ void EnTite_Init(Actor* thisx, PlayState* play) { } if (this->actor.params == ENTITE_MINUS_2) { - this->unk_2C0 |= 0x40; + this->updBgCheckInfoFlags |= UPDBGCHECKINFO_FLAG_40; this->actor.colChkInfo.health = 3; } } @@ -1062,7 +1063,7 @@ void EnTite_Update(Actor* thisx, PlayState* play) { if (this->actionFunc != func_808951B8) { Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 25.0f, 40.0f, 20.0f, this->unk_2C0); + Actor_UpdateBgCheckInfo(play, &this->actor, 25.0f, 40.0f, 20.0f, this->updBgCheckInfoFlags); func_808963B4(this, play); if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { func_800BE3D0(&this->actor, this->actor.shape.rot.y, &this->actor.shape.rot); diff --git a/src/overlays/actors/ovl_En_Tite/z_en_tite.h b/src/overlays/actors/ovl_En_Tite/z_en_tite.h index 4b87634a3..57d8ef3e3 100644 --- a/src/overlays/actors/ovl_En_Tite/z_en_tite.h +++ b/src/overlays/actors/ovl_En_Tite/z_en_tite.h @@ -27,7 +27,7 @@ typedef struct EnTite { /* 0x2BB */ u8 drawDmgEffType; /* 0x2BC */ s16 unk_2BC; /* 0x2BE */ s16 unk_2BE; - /* 0x2C0 */ s32 unk_2C0; + /* 0x2C0 */ s32 updBgCheckInfoFlags; /* 0x2C4 */ f32 drawDmgEffAlpha; /* 0x2C8 */ f32 drawDmgEffScale; /* 0x2CC */ f32 drawDmgEffFrozenSteamScale; diff --git a/src/overlays/actors/ovl_En_Tk/z_en_tk.c b/src/overlays/actors/ovl_En_Tk/z_en_tk.c index dd122ed8c..849214aba 100644 --- a/src/overlays/actors/ovl_En_Tk/z_en_tk.c +++ b/src/overlays/actors/ovl_En_Tk/z_en_tk.c @@ -1270,7 +1270,7 @@ void func_80AEF2D8(Actor* thisx, PlayState* play) { this->actionFunc(this, play); Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); func_80AEC460(this); } @@ -1310,7 +1310,7 @@ void EnTk_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 0.0f, 5); + Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 0.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4); if ((this->unk_2B0 == 0) && (func_800C9B40(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId) == 12)) { Math_Vec3f_Copy(&this->actor.world.pos, &this->actor.prevPos); diff --git a/src/overlays/actors/ovl_En_Torch2/z_en_torch2.c b/src/overlays/actors/ovl_En_Torch2/z_en_torch2.c index 75f966a3c..ccf7c5e13 100644 --- a/src/overlays/actors/ovl_En_Torch2/z_en_torch2.c +++ b/src/overlays/actors/ovl_En_Torch2/z_en_torch2.c @@ -101,7 +101,7 @@ void EnTorch2_Update(Actor* thisx, PlayState* play) { this->actor.gravity = -1.0f; Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 20.0f, 70.0f, 0x05); + Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 20.0f, 70.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4); if (this->framesUntilNextState == 0) { remainingFrames = 0; diff --git a/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c b/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c index 44f2e7d3e..7e76bbfcc 100644 --- a/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c +++ b/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c @@ -792,7 +792,7 @@ void func_80AD4FE4(EnTrt2* this, PlayState* play) { Actor_MoveWithGravity(&this->actor); if (play->sceneId != SCENE_20SICHITAI) { - Actor_UpdateBgCheckInfo(play, &this->actor, 26.0f, 10.0f, 0.0f, 5); + Actor_UpdateBgCheckInfo(play, &this->actor, 26.0f, 10.0f, 0.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4); } Actor_SetFocus(&this->actor, 90.0f); diff --git a/src/overlays/actors/ovl_En_Tru/z_en_tru.c b/src/overlays/actors/ovl_En_Tru/z_en_tru.c index eac370ebf..7ab20a77c 100644 --- a/src/overlays/actors/ovl_En_Tru/z_en_tru.c +++ b/src/overlays/actors/ovl_En_Tru/z_en_tru.c @@ -1155,7 +1155,7 @@ void EnTru_Init(Actor* thisx, PlayState* play) { } this->actionFunc = func_80A87FD0; - Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); } void EnTru_Destroy(Actor* thisx, PlayState* play) { diff --git a/src/overlays/actors/ovl_En_Tru_Mt/z_en_tru_mt.c b/src/overlays/actors/ovl_En_Tru_Mt/z_en_tru_mt.c index 64f936bbd..bd36be072 100644 --- a/src/overlays/actors/ovl_En_Tru_Mt/z_en_tru_mt.c +++ b/src/overlays/actors/ovl_En_Tru_Mt/z_en_tru_mt.c @@ -435,7 +435,7 @@ void EnTruMt_Init(Actor* thisx, PlayState* play) { this->actor.targetMode = 0; Actor_SetScale(&this->actor, 0.008f); - Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); this->unk_328 = 0; this->actor.room = -1; diff --git a/src/overlays/actors/ovl_En_Tsn/z_en_tsn.c b/src/overlays/actors/ovl_En_Tsn/z_en_tsn.c index 87ae0791a..aaa022f7a 100644 --- a/src/overlays/actors/ovl_En_Tsn/z_en_tsn.c +++ b/src/overlays/actors/ovl_En_Tsn/z_en_tsn.c @@ -567,7 +567,7 @@ void EnTsn_Update(Actor* thisx, PlayState* play) { Collider_UpdateCylinder(&this->actor, &this->collider); CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 25.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 25.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); SkelAnime_Update(&this->skelAnime); if (this->unk_220 & 1) { diff --git a/src/overlays/actors/ovl_En_Tubo_Trap/z_en_tubo_trap.c b/src/overlays/actors/ovl_En_Tubo_Trap/z_en_tubo_trap.c index 48d7b4330..340618db7 100644 --- a/src/overlays/actors/ovl_En_Tubo_Trap/z_en_tubo_trap.c +++ b/src/overlays/actors/ovl_En_Tubo_Trap/z_en_tubo_trap.c @@ -289,7 +289,9 @@ void EnTuboTrap_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 12.0f, 10.0f, 20.0f, 0x1F); + Actor_UpdateBgCheckInfo(play, &this->actor, 12.0f, 10.0f, 20.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4 | + UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10); Actor_SetFocus(&this->actor, 0.0f); if (this->actor.projectedPos.z < 811.0f) { diff --git a/src/overlays/actors/ovl_En_Vm/z_en_vm.c b/src/overlays/actors/ovl_En_Vm/z_en_vm.c index aae20d26d..505df7f11 100644 --- a/src/overlays/actors/ovl_En_Vm/z_en_vm.c +++ b/src/overlays/actors/ovl_En_Vm/z_en_vm.c @@ -386,7 +386,8 @@ void func_808CCCF0(EnVm* this, PlayState* play) { this->unk_216 += 0x5DC; this->unk_218 += 0x9C4; Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 20.0f, 40.0f, 7); + Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 20.0f, 40.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4); this->unk_214--; if (this->unk_214 == 1) { diff --git a/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c b/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c index 63a97dab9..11860c20d 100644 --- a/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c +++ b/src/overlays/actors/ovl_En_Wallmas/z_en_wallmas.c @@ -629,7 +629,9 @@ void EnWallmas_Update(Actor* thisx, PlayState* play) { } if (this->actionFunc != EnWallmas_Drop) { - Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 25.0f, 0.0f, 0x1D); + Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 25.0f, 0.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10); } if ((this->actionFunc != EnWallmas_Die) && (this->actionFunc != EnWallmas_Drop)) { diff --git a/src/overlays/actors/ovl_En_Water_Effect/z_en_water_effect.c b/src/overlays/actors/ovl_En_Water_Effect/z_en_water_effect.c index f1400d69b..159b7444e 100644 --- a/src/overlays/actors/ovl_En_Water_Effect/z_en_water_effect.c +++ b/src/overlays/actors/ovl_En_Water_Effect/z_en_water_effect.c @@ -158,7 +158,7 @@ void EnWaterEffect_Update(Actor* thisx, PlayState* play2) { this->unk_DC4++; if ((this->unk_DC4 % 32) == 0) { if (Rand_ZeroOne() < 0.5f) { - Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 10.0f, 40.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 10.0f, 40.0f, UPDBGCHECKINFO_FLAG_4); sp88.x = randPlusMinusPoint5Scaled(50.0f) + this->actor.world.pos.x; sp88.y = this->actor.world.pos.y; sp88.z = randPlusMinusPoint5Scaled(50.0f) + this->actor.world.pos.z; @@ -420,7 +420,7 @@ void func_80A59C04(Actor* thisx, PlayState* play2) { this->unk_DC4++; if (this->unk_DC6 == 0) { this->unk_DC6 = Rand_ZeroFloat(150.0f) + 100.0f; - Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 10.0f, 40.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 10.0f, 40.0f, UPDBGCHECKINFO_FLAG_4); sp74.x = randPlusMinusPoint5Scaled(50.0f) + this->actor.world.pos.x; sp74.y = this->actor.world.pos.y; sp74.z = randPlusMinusPoint5Scaled(50.0f) + this->actor.world.pos.z; diff --git a/src/overlays/actors/ovl_En_Wf/z_en_wf.c b/src/overlays/actors/ovl_En_Wf/z_en_wf.c index 4ed6b6a7d..7d38f370f 100644 --- a/src/overlays/actors/ovl_En_Wf/z_en_wf.c +++ b/src/overlays/actors/ovl_En_Wf/z_en_wf.c @@ -1485,7 +1485,9 @@ void EnWf_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 32.0f, 30.0f, 60.0f, 0x1D); + Actor_UpdateBgCheckInfo(play, &this->actor, 32.0f, 30.0f, 60.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10); func_80993738(this, play); if (this->actor.bgCheckFlags & (BGCHECKFLAG_GROUND | BGCHECKFLAG_GROUND_TOUCH)) { diff --git a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c index 26f126e72..ac8375c24 100644 --- a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c +++ b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c @@ -1151,7 +1151,9 @@ void EnWiz_Damaged(EnWiz* this, PlayState* play) { Math_SmoothStepToS(&this->platformLightAlpha, this->targetPlatformLightAlpha, 20, 50, 10); Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 35.0f, 40.0f, 40.0f, 0x1F); + Actor_UpdateBgCheckInfo(play, &this->actor, 35.0f, 40.0f, 40.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4 | + UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10); } void EnWiz_SetupDead(EnWiz* this) { diff --git a/src/overlays/actors/ovl_En_Wiz_Fire/z_en_wiz_fire.c b/src/overlays/actors/ovl_En_Wiz_Fire/z_en_wiz_fire.c index bf63fcc3c..bad93b685 100644 --- a/src/overlays/actors/ovl_En_Wiz_Fire/z_en_wiz_fire.c +++ b/src/overlays/actors/ovl_En_Wiz_Fire/z_en_wiz_fire.c @@ -573,7 +573,9 @@ void EnWizFire_Update(Actor* thisx, PlayState* play2) { DECR(this->steamSpawnTimer); DECR(this->poolTimer); - Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 5.0f, 10, 0x1D); + Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 5.0f, 10, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10); if ((this->hitByIceArrow || sPoolHitByIceArrow) && (this->steamSpawnTimer == 0)) { Vec3f accel; diff --git a/src/overlays/actors/ovl_En_Yb/z_en_yb.c b/src/overlays/actors/ovl_En_Yb/z_en_yb.c index 7a751c7ce..b6c05815e 100644 --- a/src/overlays/actors/ovl_En_Yb/z_en_yb.c +++ b/src/overlays/actors/ovl_En_Yb/z_en_yb.c @@ -406,7 +406,7 @@ void EnYb_Update(Actor* thisx, PlayState* play) { } if (CHECK_FLAG_ALL(this->actor.flags, ACTOR_FLAG_1)) { Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 40.0f, 25.0f, 40.0f, 5); + Actor_UpdateBgCheckInfo(play, &this->actor, 40.0f, 25.0f, 40.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4); } this->actionFunc(this, play); diff --git a/src/overlays/actors/ovl_En_Zo/z_en_zo.c b/src/overlays/actors/ovl_En_Zo/z_en_zo.c index 0e282656c..aed16b874 100644 --- a/src/overlays/actors/ovl_En_Zo/z_en_zo.c +++ b/src/overlays/actors/ovl_En_Zo/z_en_zo.c @@ -280,7 +280,7 @@ void EnZo_Update(Actor* thisx, PlayState* play) { EnZo* this = THIS; this->actionFunc(this, play); - Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); EnZo_LookAtPlayer(this, play); EnZo_PlayWalkingSound(this, play); EnZo_UpdateCollider(this, play); diff --git a/src/overlays/actors/ovl_En_Zob/z_en_zob.c b/src/overlays/actors/ovl_En_Zob/z_en_zob.c index 895c5c032..263272464 100644 --- a/src/overlays/actors/ovl_En_Zob/z_en_zob.c +++ b/src/overlays/actors/ovl_En_Zob/z_en_zob.c @@ -711,7 +711,7 @@ void EnZob_Update(Actor* thisx, PlayState* play) { Collider_UpdateCylinder(&this->actor, &this->collider); CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); - Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 10.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 10.0f, UPDBGCHECKINFO_FLAG_4); this->actionFunc(this, play); diff --git a/src/overlays/actors/ovl_En_Zod/z_en_zod.c b/src/overlays/actors/ovl_En_Zod/z_en_zod.c index 0da7a17bb..1ef62420b 100644 --- a/src/overlays/actors/ovl_En_Zod/z_en_zod.c +++ b/src/overlays/actors/ovl_En_Zod/z_en_zod.c @@ -527,7 +527,7 @@ void EnZod_Update(Actor* thisx, PlayState* play) { Actor_MoveWithGravity(&this->actor); Collider_UpdateCylinder(&this->actor, &this->collider); CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); - Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 10.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 10.0f, UPDBGCHECKINFO_FLAG_4); this->actionFunc(this, play); EnZod_UpdateInstruments(this); diff --git a/src/overlays/actors/ovl_En_Zog/z_en_zog.c b/src/overlays/actors/ovl_En_Zog/z_en_zog.c index 1935d627e..349724cb3 100644 --- a/src/overlays/actors/ovl_En_Zog/z_en_zog.c +++ b/src/overlays/actors/ovl_En_Zog/z_en_zog.c @@ -956,7 +956,7 @@ void EnZog_Update(Actor* thisx, PlayState* play) { EnZog* this = THIS; Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 10.0f, 5); + Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 10.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4); if (Cutscene_CheckActorAction(play, 0x1D7) && (ENZOG_GET_F(&this->actor) != ENZOG_F_2)) { this->actionFunc = func_80B9461C; this->actor.shape.yOffset = 0.0f; diff --git a/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.c b/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.c index cc391c0b1..44a705539 100644 --- a/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.c +++ b/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.c @@ -244,7 +244,7 @@ void func_80B31C40(EnZoraegg* this, PlayState* play) { Actor_MoveWithGravity(&this->actor); Math_Vec3f_Copy(&this->actor.focus.pos, &this->actor.world.pos); this->actor.focus.pos.y += 10.0f; - Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); } Actor* func_80B31CB4(PlayState* play) { diff --git a/src/overlays/actors/ovl_En_Zos/z_en_zos.c b/src/overlays/actors/ovl_En_Zos/z_en_zos.c index c538457e8..3898e754c 100644 --- a/src/overlays/actors/ovl_En_Zos/z_en_zos.c +++ b/src/overlays/actors/ovl_En_Zos/z_en_zos.c @@ -701,7 +701,7 @@ void EnZos_Update(Actor* thisx, PlayState* play) { Actor_MoveWithGravity(&this->actor); Collider_UpdateCylinder(&this->actor, &this->collider); CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); - Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 30.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 30.0f, UPDBGCHECKINFO_FLAG_4); this->actionFunc(this, play); diff --git a/src/overlays/actors/ovl_En_Zot/z_en_zot.c b/src/overlays/actors/ovl_En_Zot/z_en_zot.c index ce5625b83..1eb6b020b 100644 --- a/src/overlays/actors/ovl_En_Zot/z_en_zot.c +++ b/src/overlays/actors/ovl_En_Zot/z_en_zot.c @@ -1316,7 +1316,7 @@ void EnZot_Update(Actor* thisx, PlayState* play) { Actor_MoveWithGravity(&this->actor); Collider_UpdateCylinder(&this->actor, &this->collider); CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); - Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 15.0f, 30.0f, 5); + Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 15.0f, 30.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4); this->unk_2F2 &= ~0x40; if (SkelAnime_Update(&this->skelAnime) && (this->unk_2F0 != 0)) { diff --git a/src/overlays/actors/ovl_En_Zov/z_en_zov.c b/src/overlays/actors/ovl_En_Zov/z_en_zov.c index 17c4a9f70..5a93d91cc 100644 --- a/src/overlays/actors/ovl_En_Zov/z_en_zov.c +++ b/src/overlays/actors/ovl_En_Zov/z_en_zov.c @@ -476,7 +476,7 @@ void EnZov_Update(Actor* thisx, PlayState* play) { Actor_MoveWithGravity(&this->picto.actor); Collider_UpdateCylinder(&this->picto.actor, &this->collider); CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); - Actor_UpdateBgCheckInfo(play, &this->picto.actor, 10.0f, 10.0f, 10.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->picto.actor, 10.0f, 10.0f, 10.0f, UPDBGCHECKINFO_FLAG_4); this->actionFunc(this, play); diff --git a/src/overlays/actors/ovl_En_Zow/z_en_zow.c b/src/overlays/actors/ovl_En_Zow/z_en_zow.c index e68a11038..638fa0263 100644 --- a/src/overlays/actors/ovl_En_Zow/z_en_zow.c +++ b/src/overlays/actors/ovl_En_Zow/z_en_zow.c @@ -547,7 +547,7 @@ void EnZow_Update(Actor* thisx, PlayState* play) { Actor_MoveWithGravity(&this->actor); Collider_UpdateCylinder(&this->actor, &this->collider); CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); - Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 15.0f, 30.0f, 5); + Actor_UpdateBgCheckInfo(play, &this->actor, 30.0f, 15.0f, 30.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4); if (this->unk_2CE != 0) { this->unk_2CA &= ~2; diff --git a/src/overlays/actors/ovl_Mir_Ray2/z_mir_ray2.c b/src/overlays/actors/ovl_Mir_Ray2/z_mir_ray2.c index a552e35ab..c4e861ff6 100644 --- a/src/overlays/actors/ovl_Mir_Ray2/z_mir_ray2.c +++ b/src/overlays/actors/ovl_Mir_Ray2/z_mir_ray2.c @@ -115,7 +115,7 @@ void MirRay2_Update(Actor* thisx, PlayState* play) { } else { func_80AF3FE0(this, play); if (MIRRAY2_GET_F(thisx) != 1) { - Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 10.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 10.0f, UPDBGCHECKINFO_FLAG_4); this->actor.shape.shadowAlpha = 0x50; } else { func_80AF3F70(this); diff --git a/src/overlays/actors/ovl_Obj_Aqua/z_obj_aqua.c b/src/overlays/actors/ovl_Obj_Aqua/z_obj_aqua.c index 532daec90..c32fb582d 100644 --- a/src/overlays/actors/ovl_Obj_Aqua/z_obj_aqua.c +++ b/src/overlays/actors/ovl_Obj_Aqua/z_obj_aqua.c @@ -257,7 +257,7 @@ void ObjAqua_Update(Actor* thisx, PlayState* play) { } this->actor.velocity.y *= 0.9f; Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 12.0f, 4.0f, 0.0f, 5); + Actor_UpdateBgCheckInfo(play, &this->actor, 12.0f, 4.0f, 0.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4); if (this->actionFunc != func_80ACBDFC) { Collider_UpdateCylinder(&this->actor, &this->collider); this->collider.dim.radius = this->actor.scale.x * 3000.0f; diff --git a/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.c b/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.c index 05544da0e..79a877803 100644 --- a/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.c +++ b/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.c @@ -227,7 +227,7 @@ void ObjArmos_Destroy(Actor* thisx, PlayState* play) { void func_809A54B4(ObjArmos* this) { this->actionFunc = func_809A54E0; - this->unk_24C = 4; + this->updBgCheckInfoFlags = UPDBGCHECKINFO_FLAG_4; this->unk_266[1] = 0; this->unk_266[2] = 0; this->unk_266[3] = 0; @@ -260,7 +260,7 @@ void func_809A54E0(ObjArmos* this, PlayState* play) { void func_809A5610(ObjArmos* this) { this->actionFunc = func_809A562C; - this->unk_24C = 5; + this->updBgCheckInfoFlags = UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4; } void func_809A562C(ObjArmos* this, PlayState* play) { @@ -304,7 +304,7 @@ void func_809A562C(ObjArmos* this, PlayState* play) { void func_809A57D8(ObjArmos* this) { this->actionFunc = func_809A57F4; - this->unk_24C = 4; + this->updBgCheckInfoFlags = UPDBGCHECKINFO_FLAG_4; } void func_809A57F4(ObjArmos* this, PlayState* play) { @@ -322,12 +322,12 @@ void ObjArmos_Update(Actor* thisx, PlayState* play2) { this->actionFunc(this, play); this->dyna.actor.world.pos.y = this->dyna.actor.home.pos.y; - if (this->unk_24C != 0) { - Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 20.0f, 30.0f, 0.0f, this->unk_24C); + if (this->updBgCheckInfoFlags != 0) { + Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 20.0f, 30.0f, 0.0f, this->updBgCheckInfoFlags); if ((this->actionFunc == func_809A54E0) && (this->dyna.actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (DynaPoly_GetActor(&play->colCtx, this->dyna.actor.floorBgId) == NULL)) { - this->unk_24C = 0; + this->updBgCheckInfoFlags = 0; } this->unk_250.x = (Math_SinS(this->dyna.actor.shape.rot.y) * -9.0f) + this->dyna.actor.world.pos.x; diff --git a/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.h b/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.h index 2e9453005..177cc8e66 100644 --- a/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.h +++ b/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.h @@ -28,7 +28,7 @@ typedef struct ObjArmos { /* 0x1A0 */ Vec3s jointTable[OBJECT_AM_LIMB_MAX]; /* 0x1F4 */ Vec3s morphTable[OBJECT_AM_LIMB_MAX]; /* 0x248 */ ObjArmosActionFunc actionFunc; - /* 0x24C */ u32 unk_24C; + /* 0x24C */ u32 updBgCheckInfoFlags; /* 0x250 */ Vec3f unk_250; /* 0x25C */ f32* unk_25C; /* 0x260 */ f32 unk_260; diff --git a/src/overlays/actors/ovl_Obj_Bigicicle/z_obj_bigicicle.c b/src/overlays/actors/ovl_Obj_Bigicicle/z_obj_bigicicle.c index 04871bae5..1146175fd 100644 --- a/src/overlays/actors/ovl_Obj_Bigicicle/z_obj_bigicicle.c +++ b/src/overlays/actors/ovl_Obj_Bigicicle/z_obj_bigicicle.c @@ -238,7 +238,7 @@ void func_80AE9258(ObjBigicicle* this, PlayState* play) { ObjIcePoly* icePoly; Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); itemAction = play->actorCtx.actorLists[ACTORCAT_ITEMACTION].first; diff --git a/src/overlays/actors/ovl_Obj_Comb/z_obj_comb.c b/src/overlays/actors/ovl_Obj_Comb/z_obj_comb.c index f37a15a80..957ac1433 100644 --- a/src/overlays/actors/ovl_Obj_Comb/z_obj_comb.c +++ b/src/overlays/actors/ovl_Obj_Comb/z_obj_comb.c @@ -475,7 +475,7 @@ void func_8098DEA0(ObjComb* this, PlayState* play) { Actor_MoveWithGravity(&this->actor); this->actor.shape.rot.x += this->unk_1AE; this->actor.shape.rot.y += this->unk_1B0; - Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 12.0f, 0.0f, 5); + Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 12.0f, 0.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4); CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); } } diff --git a/src/overlays/actors/ovl_Obj_Flowerpot/z_obj_flowerpot.c b/src/overlays/actors/ovl_Obj_Flowerpot/z_obj_flowerpot.c index a5c66629a..cc818c883 100644 --- a/src/overlays/actors/ovl_Obj_Flowerpot/z_obj_flowerpot.c +++ b/src/overlays/actors/ovl_Obj_Flowerpot/z_obj_flowerpot.c @@ -384,7 +384,8 @@ void func_80A1C554(ObjFlowerpot* this) { } void func_80A1C5E8(ObjFlowerpot* this, PlayState* play) { - Actor_UpdateBgCheckInfo(play, &this->actor, 18.0f, 15.0f, 0.0f, 0x45); + Actor_UpdateBgCheckInfo(play, &this->actor, 18.0f, 15.0f, 0.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_40); } void func_80A1C62C(ObjFlowerpot* this, PlayState* play) { diff --git a/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.c b/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.c index e7ddf5038..021c253ce 100644 --- a/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.c +++ b/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.c @@ -157,7 +157,7 @@ void ObjGhaka_Init(Actor* thisx, PlayState* play) { DynaPolyActor_Init(&this->dyna, 1); CollisionHeader_GetVirtual(&object_ghaka_Colheader_003CD0, &colHeader); this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, colHeader); - Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 0.0f, 0.0f, 0.0f, 0x4); + Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); if (this->dyna.actor.floorPoly == 0) { Actor_Kill(&this->dyna.actor); } diff --git a/src/overlays/actors/ovl_Obj_Grass_Carry/z_obj_grass_carry.c b/src/overlays/actors/ovl_Obj_Grass_Carry/z_obj_grass_carry.c index e649664f3..e46c5da44 100644 --- a/src/overlays/actors/ovl_Obj_Grass_Carry/z_obj_grass_carry.c +++ b/src/overlays/actors/ovl_Obj_Grass_Carry/z_obj_grass_carry.c @@ -103,7 +103,9 @@ void func_809AAF18(ObjGrassCarry* this) { } void func_809AAF58(ObjGrassCarry* this, PlayState* play) { - Actor_UpdateBgCheckInfo(play, &this->actor, 7.5f, 35.0f, 0.0f, 0xC5); + Actor_UpdateBgCheckInfo(play, &this->actor, 7.5f, 35.0f, 0.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_40 | + UPDBGCHECKINFO_FLAG_80); } void func_809AAF9C(Vec3f* arg0, s16 arg1, PlayState* play) { diff --git a/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.c b/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.c index dcd1dad4e..582d0a235 100644 --- a/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.c +++ b/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.c @@ -123,7 +123,7 @@ void ObjHakaisi_Init(Actor* thisx, PlayState* play) { Actor_Kill(&this->dyna.actor); } - Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 0.0f, 0.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); if (this->dyna.actor.floorPoly == NULL) { Actor_Kill(&this->dyna.actor); @@ -423,7 +423,7 @@ void func_80B1544C(Actor* thisx, PlayState* play) { this->actionFunc(this, play); - Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 0.0f, 0.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); } void func_80B154A0(Actor* thisx, PlayState* play) { diff --git a/src/overlays/actors/ovl_Obj_Kendo_Kanban/z_obj_kendo_kanban.c b/src/overlays/actors/ovl_Obj_Kendo_Kanban/z_obj_kendo_kanban.c index 4d5845d45..26191e397 100644 --- a/src/overlays/actors/ovl_Obj_Kendo_Kanban/z_obj_kendo_kanban.c +++ b/src/overlays/actors/ovl_Obj_Kendo_Kanban/z_obj_kendo_kanban.c @@ -211,7 +211,7 @@ void ObjKendoKanban_Init(Actor* thisx, PlayState* play) { Collider_SetTrisVertices(&this->colliderTris, i, &vertices[0], &vertices[1], &vertices[2]); } - Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); this->boardFragments = OBJKENDOKANBAN_GET_BOARD_FRAGMENTS(&this->actor); this->actor.gravity = -2.0f; @@ -380,7 +380,7 @@ void ObjKendoKanban_HandlePhysics(ObjKendoKanban* this, PlayState* play) { Matrix_Pop(); } - Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) { // When on the ground, apply some friction. diff --git a/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.c b/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.c index 8dbff17b2..5b15d0ecc 100644 --- a/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.c +++ b/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.c @@ -252,7 +252,8 @@ void func_80926B40(ObjKibako* this) { void func_80926B54(ObjKibako* this, PlayState* play) { Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 18.0f, 15.0f, 0.0f, 0x45); + Actor_UpdateBgCheckInfo(play, &this->actor, 18.0f, 15.0f, 0.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_40); if (Object_IsLoaded(&play->objectCtx, this->bankIndex)) { this->actor.draw = ObjKibako_Draw; this->actor.objBankIndex = this->bankIndex; @@ -293,7 +294,8 @@ void ObjKibako_Idle(ObjKibako* this, PlayState* play) { } else { Actor_MoveWithGravity(&this->actor); func_809262BC(this); - Actor_UpdateBgCheckInfo(play, &this->actor, 18.0f, 15.0f, 0.0f, 0x45); + Actor_UpdateBgCheckInfo(play, &this->actor, 18.0f, 15.0f, 0.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_40); if (!(this->collider.base.ocFlags1 & OC1_TYPE_PLAYER) && (this->actor.xzDistToPlayer > 28.0f)) { this->collider.base.ocFlags1 |= OC1_TYPE_PLAYER; @@ -349,7 +351,8 @@ void ObjKibako_Held(ObjKibako* this, PlayState* play) { ObjKibako_SetupThrown(this); this->actor.flags &= ~ACTOR_FLAG_4000000; } - Actor_UpdateBgCheckInfo(play, &this->actor, 18.0f, 15.0f, 0.0f, 0x45); + Actor_UpdateBgCheckInfo(play, &this->actor, 18.0f, 15.0f, 0.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_40); } else { pos.x = this->actor.world.pos.x; pos.y = this->actor.world.pos.y + 20.0f; @@ -406,7 +409,8 @@ void ObjKibako_Thrown(ObjKibako* this, PlayState* play) { Math_StepToS(&D_8092738C, D_80927388, 0xA0); this->actor.shape.rot.x = (s16)(this->actor.shape.rot.x + D_80927384); this->actor.shape.rot.y = (s16)(this->actor.shape.rot.y + D_8092738C); - Actor_UpdateBgCheckInfo(play, &this->actor, 18.0f, 15.0f, 0.0f, 0x45); + Actor_UpdateBgCheckInfo(play, &this->actor, 18.0f, 15.0f, 0.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_40); Collider_UpdateCylinder(&this->actor, &this->collider); CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base); diff --git a/src/overlays/actors/ovl_Obj_Lupygamelift/z_obj_lupygamelift.c b/src/overlays/actors/ovl_Obj_Lupygamelift/z_obj_lupygamelift.c index 7be450b3b..8d6ae9f71 100644 --- a/src/overlays/actors/ovl_Obj_Lupygamelift/z_obj_lupygamelift.c +++ b/src/overlays/actors/ovl_Obj_Lupygamelift/z_obj_lupygamelift.c @@ -53,7 +53,7 @@ void ObjLupygamelift_Init(Actor* thisx, PlayState* play) { this->dyna.actor.shape.rot.z = 0; this->dyna.actor.world.rot.z = 0; this->timer = 0; - Actor_UpdateBgCheckInfo(play, thisx, 0.0f, 0.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, thisx, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); ActorShape_Init(&thisx->shape, 0.0f, ActorShadow_DrawSquare, 0.0f); DynaPolyActor_Init(&this->dyna, 1); DynaPolyActor_LoadMesh(play, &this->dyna, &object_raillift_Colheader_0048D0); diff --git a/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c b/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c index 51eadfadc..d5f0c902c 100644 --- a/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c +++ b/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c @@ -244,7 +244,7 @@ void func_809A3A48(ObjPzlblock* this) { this->unk_16E[2] = 0; this->unk_16E[3] = 0; this->unk_16E[0] = 0; - this->unk_160 = 4; + this->updBgCheckInfoFlags = UPDBGCHECKINFO_FLAG_4; } void func_809A3A74(ObjPzlblock* this, PlayState* play) { @@ -275,7 +275,7 @@ void func_809A3A74(ObjPzlblock* this, PlayState* play) { void func_809A3BA4(ObjPzlblock* this) { this->actionFunc = func_809A3BC0; - this->unk_160 = 5; + this->updBgCheckInfoFlags = UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4; } void func_809A3BC0(ObjPzlblock* this, PlayState* play) { @@ -313,7 +313,7 @@ void func_809A3BC0(ObjPzlblock* this, PlayState* play) { void func_809A3D1C(ObjPzlblock* this) { this->actionFunc = func_809A3D38; - this->unk_160 = 4; + this->updBgCheckInfoFlags = UPDBGCHECKINFO_FLAG_4; } void func_809A3D38(ObjPzlblock* this, PlayState* play) { @@ -328,7 +328,7 @@ void ObjPzlblock_Update(Actor* thisx, PlayState* play) { ObjPzlblock* this = THIS; this->dyna.actor.world.pos.y = this->dyna.actor.home.pos.y; - Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 15.0f, 30.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 15.0f, 30.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); if (Object_IsLoaded(&play->objectCtx, this->unk_17A)) { ObjPzlblockStruct* sp2C = &D_809A4060[OBJPZLBLOCK_GET_1000(&this->dyna.actor)]; @@ -348,12 +348,12 @@ void func_809A3E58(Actor* thisx, PlayState* play) { this->dyna.actor.world.pos.y = this->dyna.actor.home.pos.y; - if (this->unk_160 != 0) { - Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 15.0f, 30.0f, 0.0f, this->unk_160); + if (this->updBgCheckInfoFlags != 0) { + Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 15.0f, 30.0f, 0.0f, this->updBgCheckInfoFlags); if (((this->actionFunc == func_809A3A74) || (this->actionFunc == func_809A3D38)) && (this->dyna.actor.bgCheckFlags & BGCHECKFLAG_GROUND) && !DynaPoly_GetActor(&play->colCtx, this->dyna.actor.floorBgId)) { - this->unk_160 = 0; + this->updBgCheckInfoFlags = 0; } } } diff --git a/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.h b/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.h index 27a038860..5cf67efcc 100644 --- a/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.h +++ b/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.h @@ -15,7 +15,7 @@ typedef void (*ObjPzlblockActionFunc)(struct ObjPzlblock*, PlayState*); typedef struct ObjPzlblock { /* 0x000 */ DynaPolyActor dyna; /* 0x15C */ ObjPzlblockActionFunc actionFunc; - /* 0x160 */ s32 unk_160; + /* 0x160 */ s32 updBgCheckInfoFlags; /* 0x164 */ f32* unk_164; /* 0x168 */ f32 unk_168; /* 0x16C */ s16 unk_16C; diff --git a/src/overlays/actors/ovl_Obj_Snowball2/z_obj_snowball2.c b/src/overlays/actors/ovl_Obj_Snowball2/z_obj_snowball2.c index f5c39f0b8..ec05294d1 100644 --- a/src/overlays/actors/ovl_Obj_Snowball2/z_obj_snowball2.c +++ b/src/overlays/actors/ovl_Obj_Snowball2/z_obj_snowball2.c @@ -374,7 +374,8 @@ void func_80B39C9C(ObjSnowball2* this, PlayState* play) { if (this->unk_1AD == 0) { Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 15.0f, 0.0f, 0x44); + Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 15.0f, 0.0f, + UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_40); if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (DynaPoly_GetActor(&play->colCtx, this->actor.floorBgId) == NULL)) { this->unk_1AD = 1; @@ -422,7 +423,8 @@ void func_80B39FA8(ObjSnowball2* this, PlayState* play) { this->actor.velocity.y *= 0.4f; this->actor.gravity = -2.8f; Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 15.0f, 0.0f, 0x45); + Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 15.0f, 0.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_40); func_80B3A0D8(this); } else { sp30.x = this->actor.world.pos.x; @@ -510,7 +512,8 @@ void func_80B3A13C(ObjSnowball2* this, PlayState* play) { } Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 15.0f, 0.0f, 0x45); + Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 15.0f, 0.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_40); this->actor.shape.rot.x += this->unk_1A8; this->actor.shape.rot.y += this->unk_1AA; func_80B38E20(this); diff --git a/src/overlays/actors/ovl_Obj_Toge/z_obj_toge.c b/src/overlays/actors/ovl_Obj_Toge/z_obj_toge.c index 490ade729..c6ed2cc2c 100644 --- a/src/overlays/actors/ovl_Obj_Toge/z_obj_toge.c +++ b/src/overlays/actors/ovl_Obj_Toge/z_obj_toge.c @@ -244,7 +244,8 @@ void func_809A48AC(ObjToge* this, PlayState* play) { } Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, D_809A4D0C[OBJTOGE_GET_4000(&this->actor)] * 30.0f, 0.0f, 0x81); + Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, D_809A4D0C[OBJTOGE_GET_4000(&this->actor)] * 30.0f, 0.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_80); if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) { this->actor.world.rot.y = Math_Vec3f_Yaw(&this->actor.world.pos, &this->unk_198[this->unk_194]); diff --git a/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c b/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c index a61fb6f64..94e9c85c1 100644 --- a/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c +++ b/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c @@ -324,7 +324,7 @@ void ObjTokeidai_ExteriorGear_Collapse(ObjTokeidai* this, PlayState* play) { this->actor.shape.rot.x += 0x50; this->actor.shape.rot.z += 0x50; Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, 4); + Actor_UpdateBgCheckInfo(play, &this->actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); } } diff --git a/src/overlays/actors/ovl_Obj_Tsubo/z_obj_tsubo.c b/src/overlays/actors/ovl_Obj_Tsubo/z_obj_tsubo.c index 99b7e3532..7b4fcf574 100644 --- a/src/overlays/actors/ovl_Obj_Tsubo/z_obj_tsubo.c +++ b/src/overlays/actors/ovl_Obj_Tsubo/z_obj_tsubo.c @@ -431,7 +431,7 @@ void func_80928914(ObjTsubo* this) { void func_80928928(ObjTsubo* this, PlayState* play) { Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 15.0f, 0.0f, 0x44); + Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 15.0f, 0.0f, UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_40); if (Object_IsLoaded(&play->objectCtx, this->objBankIndex)) { this->actor.objBankIndex = this->objBankIndex; func_809289B4(this); @@ -493,7 +493,8 @@ void func_809289E4(ObjTsubo* this, PlayState* play) { } else { if (!this->unk_195) { Actor_MoveWithGravity(&this->actor); - Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 15.0f, 0.0f, 0x44); + Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 15.0f, 0.0f, + UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_40); if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (DynaPoly_GetActor(&play->colCtx, this->actor.floorBgId) == NULL)) { this->unk_195 = true; @@ -532,7 +533,9 @@ void func_80928D80(ObjTsubo* this, PlayState* play) { this->actor.room = play->roomCtx.curRoom.num; Actor_MoveWithGravity(&this->actor); this->actor.flags &= ~ACTOR_FLAG_4000000; - Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 15.0f, 0.0f, 0xC5); + Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 15.0f, 0.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_40 | + UPDBGCHECKINFO_FLAG_80); func_80928E74(this); } else { pos.x = this->actor.world.pos.x; @@ -605,7 +608,9 @@ void func_80928F18(ObjTsubo* this, PlayState* play) { Math_StepToS(&D_8092950C, D_80929508, 150); this->actor.shape.rot.x += D_80929504; this->actor.shape.rot.y += D_8092950C; - Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 15.0f, 0.0f, 0xC5); + Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 15.0f, 0.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_40 | + UPDBGCHECKINFO_FLAG_80); Collider_UpdateCylinder(&this->actor, &this->cylinderCollider); CollisionCheck_SetOC(play, &play->colChkCtx, &this->cylinderCollider.base); CollisionCheck_SetAT(play, &play->colChkCtx, &this->cylinderCollider.base); diff --git a/src/overlays/actors/ovl_Obj_Um/z_obj_um.c b/src/overlays/actors/ovl_Obj_Um/z_obj_um.c index f06d13caf..ac938752a 100644 --- a/src/overlays/actors/ovl_Obj_Um/z_obj_um.c +++ b/src/overlays/actors/ovl_Obj_Um/z_obj_um.c @@ -1713,7 +1713,8 @@ void ObjUm_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); this->unk_350++; - Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 0.0f, 0.0f, 0.0f, 0x1C); + Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 0.0f, 0.0f, 0.0f, + UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10); if (this->donkey != NULL) { this->donkey->actor.world.pos.x = this->dyna.actor.world.pos.x; From 823746d49530318331f29af92fa924a15f2482a1 Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Tue, 18 Apr 2023 13:34:58 -0700 Subject: [PATCH 06/12] Angle Conversions (#1216) * Angle Conversions * Format * namefixer * Renames in ObjHsStump_Appear * Format * once more * Explicit cast in EnSsh * Update src/overlays/actors/ovl_En_Fishing/z_en_fishing.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --------- Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --- include/z64math.h | 27 ++++++++++--- src/code/sys_math.c | 4 +- src/code/sys_math_atan.c | 2 +- src/code/sys_matrix.c | 4 +- src/code/z_olib.c | 12 +++--- src/code/z_quake.c | 6 +-- src/code/z_sub_s.c | 8 ++-- src/libultra/gu/position.c | 2 +- .../ovl_Bg_Dblue_Movebg/z_bg_dblue_movebg.c | 5 +-- src/overlays/actors/ovl_Boss_03/z_boss_03.c | 2 +- .../actors/ovl_Demo_Kankyo/z_demo_kankyo.c | 4 +- .../ovl_En_Akindonuts/z_en_akindonuts.c | 2 +- src/overlays/actors/ovl_En_Az/z_en_az.c | 4 +- .../actors/ovl_En_Bombal/z_en_bombal.c | 2 +- .../actors/ovl_En_Bubble/z_en_bubble.c | 4 +- src/overlays/actors/ovl_En_Dg/z_en_dg.c | 4 +- src/overlays/actors/ovl_En_Egol/z_en_egol.c | 4 +- .../actors/ovl_En_Encount2/z_en_encount2.c | 2 +- .../actors/ovl_En_Estone/z_en_estone.c | 6 +-- .../actors/ovl_En_Fishing/z_en_fishing.c | 38 +++++++++---------- src/overlays/actors/ovl_En_Gg2/z_en_gg2.c | 2 +- src/overlays/actors/ovl_En_Gk/z_en_gk.c | 2 +- src/overlays/actors/ovl_En_Gs/z_en_gs.c | 12 +++--- src/overlays/actors/ovl_En_Jg/z_en_jg.c | 4 +- src/overlays/actors/ovl_En_Poh/z_en_poh.c | 2 +- .../actors/ovl_En_Racedog/z_en_racedog.c | 2 +- src/overlays/actors/ovl_En_Rat/z_en_rat.c | 2 +- .../actors/ovl_En_Ruppecrow/z_en_ruppecrow.c | 4 +- .../actors/ovl_En_Scopecrow/z_en_scopecrow.c | 2 +- .../actors/ovl_En_Scopenuts/z_en_scopenuts.c | 2 +- .../actors/ovl_En_Sellnuts/z_en_sellnuts.c | 2 +- src/overlays/actors/ovl_En_Sob1/z_en_sob1.c | 2 +- src/overlays/actors/ovl_En_Ssh/z_en_ssh.c | 4 +- .../actors/ovl_En_Suttari/z_en_suttari.c | 6 +-- src/overlays/actors/ovl_En_Trt2/z_en_trt2.c | 4 +- .../actors/ovl_En_Tru_Mt/z_en_tru_mt.c | 2 +- .../actors/ovl_En_Warp_tag/z_en_warp_tag.c | 7 ++-- src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c | 6 +-- src/overlays/actors/ovl_Obj_Dora/z_obj_dora.c | 2 +- .../actors/ovl_Obj_HsStump/z_obj_hsstump.c | 17 ++++----- .../ovl_Obj_Warpstone/z_obj_warpstone.c | 4 +- .../z_eff_ss_fire_tail.c | 2 +- .../z_eff_ss_solder_srch_ball.c | 2 +- tools/namefixer.py | 4 ++ 44 files changed, 128 insertions(+), 112 deletions(-) diff --git a/include/z64math.h b/include/z64math.h index 62b6432e8..d47a01a64 100644 --- a/include/z64math.h +++ b/include/z64math.h @@ -114,13 +114,28 @@ typedef struct { #define IS_ZERO(f) (fabsf(f) < 0.008f) +// Casting a float to an integer, when the float value is larger than what the integer type can hold, +// leads to undefined behavior. For example (f32)0x8000 doesn't fit in a s16, so it cannot be cast to s16. +// This isn't an issue with IDO, but is one with for example GCC. +// A partial workaround is to cast to s32 then s16, hoping all binang values used will fit a s32. +#define TRUNCF_BINANG(f) (s16)(s32)(f) + // Angle conversion macros -#define DEG_TO_BINANG(degrees) (s16)((degrees) * (0x8000 / 180.0f)) -#define RADF_TO_BINANG(radf) (s16)((radf) * (0x8000 / M_PI)) -#define RADF_TO_DEGF(radf) ((radf) * (180.0f / M_PI)) -#define DEGF_TO_RADF(degf) ((degf) * (M_PI / 180.0f)) -#define BINANG_TO_RAD(binang) ((f32)binang * (M_PI / 0x8000)) -#define BINANG_TO_RAD_ALT(binang) (((f32)binang / 0x8000) * M_PI) +#define DEG_TO_RAD(degrees) ((degrees) * (M_PI / 180.0f)) +#define DEG_TO_BINANG(degrees) TRUNCF_BINANG((degrees) * (0x8000 / 180.0f)) +#define DEG_TO_BINANG_ALT(degrees) TRUNCF_BINANG(((degrees) / 180.0f) * 0x8000) +#define DEG_TO_BINANG_ALT2(degrees) TRUNCF_BINANG(((degrees) * 0x10000) / 360.0f) +#define DEG_TO_BINANG_ALT3(degrees) ((degrees) * (0x8000 / 180.0f)) + +#define RAD_TO_DEG(radians) ((radians) * (180.0f / M_PI)) +#define RAD_TO_BINANG(radians) TRUNCF_BINANG((radians) * (0x8000 / M_PI)) +#define RAD_TO_BINANG_ALT(radians) TRUNCF_BINANG(((radians) / M_PI) * 0x8000) +#define RAD_TO_BINANG_ALT2(radians) TRUNCF_BINANG(((radians) * 0x8000) / M_PI) + +#define BINANG_TO_DEG(binang) ((f32)(binang) * (180.0f / 0x8000)) +#define BINANG_TO_RAD(binang) ((f32)(binang) * (M_PI / 0x8000)) +#define BINANG_TO_RAD_ALT(binang) (((f32)(binang) / 0x8000) * M_PI) +#define BINANG_TO_RAD_ALT2(binang) (((f32)(binang) * M_PI) / 0x8000) // Angle arithmetic macros #define BINANG_ROT180(angle) ((s16)(angle + 0x8000)) diff --git a/src/code/sys_math.c b/src/code/sys_math.c index da4ccc9d2..7fd7e9dea 100644 --- a/src/code/sys_math.c +++ b/src/code/sys_math.c @@ -66,7 +66,7 @@ f32 pow_int(f32 base, s32 exp) { * Takes an angle in radians and returns the sine. */ f32 sin_rad(f32 rad) { - return sins(RADF_TO_BINANG(rad)) * SHT_MINV; + return sins(RAD_TO_BINANG(rad)) * SHT_MINV; } // Rename to Math_CosF @@ -74,7 +74,7 @@ f32 sin_rad(f32 rad) { * Takes an angle in radians and returns the cosine. */ f32 cos_rad(f32 rad) { - return coss(RADF_TO_BINANG(rad)) * SHT_MINV; + return coss(RAD_TO_BINANG(rad)) * SHT_MINV; } /** diff --git a/src/code/sys_math_atan.c b/src/code/sys_math_atan.c index 72383b6b9..ef05676f5 100644 --- a/src/code/sys_math_atan.c +++ b/src/code/sys_math_atan.c @@ -127,7 +127,7 @@ s16 Math_Atan2S(f32 y, f32 x) { } f32 Math_Atan2F(f32 y, f32 x) { - return Math_Atan2S(y, x) * (M_PI / 0x8000); + return BINANG_TO_RAD(Math_Atan2S(y, x)); } // Match the OoT implementation of Math_Atan2S diff --git a/src/code/sys_matrix.c b/src/code/sys_matrix.c index 63857676e..de8da3def 100644 --- a/src/code/sys_matrix.c +++ b/src/code/sys_matrix.c @@ -444,8 +444,8 @@ void Matrix_RotateXFApply(f32 x) { if (x != 0.0f) { cmf = sCurrentMatrix; - sin = sins(RADF_TO_BINANG(x)) * SHT_MINV; - cos = coss(RADF_TO_BINANG(x)) * SHT_MINV; + sin = sins(RAD_TO_BINANG(x)) * SHT_MINV; + cos = coss(RAD_TO_BINANG(x)) * SHT_MINV; tempY = cmf->xy; tempZ = cmf->xz; diff --git a/src/code/z_olib.c b/src/code/z_olib.c index 2b6b8d139..ad0c2b35c 100644 --- a/src/code/z_olib.c +++ b/src/code/z_olib.c @@ -123,14 +123,14 @@ VecSph* OLib_Vec3fToVecSph(VecSph* dest, Vec3f* vec) { if ((dist == 0.0f) && (vec->y == 0.0f)) { sph.pitch = 0; } else { - sph.pitch = CAM_DEG_TO_BINANG(RADF_TO_DEGF(func_80086B30(dist, vec->y))); + sph.pitch = CAM_DEG_TO_BINANG(RAD_TO_DEG(func_80086B30(dist, vec->y))); } sph.r = sqrtf(SQ(vec->y) + distSquared); if ((vec->x == 0.0f) && (vec->z == 0.0f)) { sph.yaw = 0; } else { - sph.yaw = CAM_DEG_TO_BINANG(RADF_TO_DEGF(func_80086B30(vec->x, vec->z))); + sph.yaw = CAM_DEG_TO_BINANG(RAD_TO_DEG(func_80086B30(vec->x, vec->z))); } *dest = sph; @@ -220,8 +220,8 @@ Vec3f* OLib_Vec3fDiffDegF(Vec3f* dest, Vec3f* a, Vec3f* b) { OLib_Vec3fDiffRad(&anglesRad, a, b); - anglesDegrees.x = RADF_TO_DEGF(anglesRad.x); - anglesDegrees.y = RADF_TO_DEGF(anglesRad.y); + anglesDegrees.x = RAD_TO_DEG(anglesRad.x); + anglesDegrees.y = RAD_TO_DEG(anglesRad.y); anglesDegrees.z = 0.0f; *dest = anglesDegrees; @@ -238,8 +238,8 @@ Vec3s* OLib_Vec3fDiffBinAng(Vec3s* dest, Vec3f* a, Vec3f* b) { OLib_Vec3fDiffRad(&anglesRad, a, b); - anglesBinAng.x = CAM_DEG_TO_BINANG(RADF_TO_DEGF(anglesRad.x)); - anglesBinAng.y = CAM_DEG_TO_BINANG(RADF_TO_DEGF(anglesRad.y)); + anglesBinAng.x = CAM_DEG_TO_BINANG(RAD_TO_DEG(anglesRad.x)); + anglesBinAng.y = CAM_DEG_TO_BINANG(RAD_TO_DEG(anglesRad.y)); anglesBinAng.z = 0.0f; *dest = anglesBinAng; diff --git a/src/code/z_quake.c b/src/code/z_quake.c index 8a6b9d73a..e1e12bbf1 100644 --- a/src/code/z_quake.c +++ b/src/code/z_quake.c @@ -825,9 +825,9 @@ void Distortion_Update(void) { screenPlanePhase += CAM_DEG_TO_BINANG(screenPlanePhaseStep); View_SetDistortionOrientation(&sDistortionRequest.play->view, - Math_CosS(depthPhase) * (DEGF_TO_RADF(rotX) * xyScaleFactor), - Math_SinS(depthPhase) * (DEGF_TO_RADF(rotY) * xyScaleFactor), - Math_SinS(screenPlanePhase) * (DEGF_TO_RADF(rotZ) * zScaleFactor)); + Math_CosS(depthPhase) * (DEG_TO_RAD(rotX) * xyScaleFactor), + Math_SinS(depthPhase) * (DEG_TO_RAD(rotY) * xyScaleFactor), + Math_SinS(screenPlanePhase) * (DEG_TO_RAD(rotZ) * zScaleFactor)); View_SetDistortionScale(&sDistortionRequest.play->view, (Math_SinS(screenPlanePhase) * (xScale * xyScaleFactor)) + 1.0f, (Math_CosS(screenPlanePhase) * (yScale * xyScaleFactor)) + 1.0f, diff --git a/src/code/z_sub_s.c b/src/code/z_sub_s.c index 6650f41a7..210d6c36f 100644 --- a/src/code/z_sub_s.c +++ b/src/code/z_sub_s.c @@ -577,7 +577,7 @@ s32 SubS_HasReachedPoint(Actor* actor, Path* path, s32 pointIndex) { diffZ = points[index + 1].z - points[index - 1].z; } - func_8017B7F8(&point, RADF_TO_BINANG(func_80086B30(diffX, diffZ)), &px, &pz, &d); + func_8017B7F8(&point, RAD_TO_BINANG(func_80086B30(diffX, diffZ)), &px, &pz, &d); if (((px * actor->world.pos.x) + (pz * actor->world.pos.z) + d) > 0.0f) { reached = true; } @@ -1023,13 +1023,13 @@ s16 SubS_ComputeTrackPointRot(s16* rot, s16 rotMax, s16 target, f32 slowness, f3 f32 step; f32 prevRotStep; - step = (f32)(target - *rot) * (360.0f / (f32)0x10000); + step = BINANG_TO_DEG(target - *rot); step *= gFramerateDivisorHalf; prevRotStep = step; if (step >= 0.0f) { step /= slowness; step = CLAMP(step, stepMin, stepMax); - *rot += (s16)((step * (f32)0x10000) / 360.0f); + *rot += DEG_TO_BINANG_ALT2(step); if (prevRotStep < stepMin) { *rot = target; } @@ -1039,7 +1039,7 @@ s16 SubS_ComputeTrackPointRot(s16* rot, s16 rotMax, s16 target, f32 slowness, f3 } else { step = (step / slowness) * -1.0f; step = CLAMP(step, stepMin, stepMax); - *rot -= (s16)((step * (f32)0x10000) / 360.0f); + *rot -= DEG_TO_BINANG_ALT2(step); if (-stepMin < prevRotStep) { *rot = target; } diff --git a/src/libultra/gu/position.c b/src/libultra/gu/position.c index 95bd65fe3..4af6dadc4 100644 --- a/src/libultra/gu/position.c +++ b/src/libultra/gu/position.c @@ -5,7 +5,7 @@ * Creates a rotation/parallel translation modelling matrix (floating point) */ void guPositionF(f32 mf[4][4], f32 rot, f32 pitch, f32 yaw, f32 scale, f32 x, f32 y, f32 z) { - static f32 D_80134D00 = M_PI / 180.0; + static f32 D_80134D00 = M_PI / 180.0f; f32 sinr, sinp, sinh; f32 cosr, cosp, cosh; diff --git a/src/overlays/actors/ovl_Bg_Dblue_Movebg/z_bg_dblue_movebg.c b/src/overlays/actors/ovl_Bg_Dblue_Movebg/z_bg_dblue_movebg.c index 63c61e82f..1ffba6755 100644 --- a/src/overlays/actors/ovl_Bg_Dblue_Movebg/z_bg_dblue_movebg.c +++ b/src/overlays/actors/ovl_Bg_Dblue_Movebg/z_bg_dblue_movebg.c @@ -408,7 +408,7 @@ void func_80A2A444(BgDblueMovebg* this, PlayState* play) { sp20 = Math_StepToS(&this->unk_18A, 900, this->unk_188); temp_v0 = this->unk_18A * this->unk_17E; this->dyna.actor.shape.rot.y = - (s32)((this->unk_18C + temp_v0) * 0.1f * (0x10000 / 360.0f)) + this->dyna.actor.home.rot.y; + (s32)DEG_TO_BINANG_ALT3((this->unk_18C + temp_v0) * 0.1f) + this->dyna.actor.home.rot.y; if ((player->stateFlags2 & PLAYER_STATE2_10) && (this->unk_184 > 0.0f)) { player->actor.world.pos.x = @@ -495,8 +495,7 @@ void func_80A2A7F8(BgDblueMovebg* this, PlayState* play) { sp28 = Math_StepToS(&this->unk_18A, 900, this->unk_188); sp26 = this->unk_18A * this->unk_17E; - this->dyna.actor.shape.rot.y = - (s32)((this->unk_18C + sp26) * 0.1f * (0x10000 / 360.0f)) + this->dyna.actor.home.rot.y; + this->dyna.actor.shape.rot.y = (s32)DEG_TO_BINANG_ALT3((this->unk_18C + sp26) * 0.1f) + this->dyna.actor.home.rot.y; if ((player->stateFlags2 & PLAYER_STATE2_10) && (this->unk_184 > 0.0f)) { player->actor.world.pos.x = diff --git a/src/overlays/actors/ovl_Boss_03/z_boss_03.c b/src/overlays/actors/ovl_Boss_03/z_boss_03.c index 4e15e8f7a..be76f63b2 100644 --- a/src/overlays/actors/ovl_Boss_03/z_boss_03.c +++ b/src/overlays/actors/ovl_Boss_03/z_boss_03.c @@ -2440,7 +2440,7 @@ void Boss03_DrawEffects(PlayState* play) { Matrix_Translate(eff->pos.x, eff->pos.y, eff->pos.z, MTXMODE_NEW); if (eff->type == GYORG_EFFECT_DROPLET) { - Matrix_RotateYF(Camera_GetInputDirYaw(GET_ACTIVE_CAM(play)) * (M_PI / 0x8000), MTXMODE_APPLY); + Matrix_RotateYF(BINANG_TO_RAD(Camera_GetInputDirYaw(GET_ACTIVE_CAM(play))), MTXMODE_APPLY); } else { // GYORG_EFFECT_SPLASH Matrix_ReplaceRotation(&play->billboardMtxF); } diff --git a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c index f499b7e20..629f49398 100644 --- a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c +++ b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c @@ -572,7 +572,7 @@ void DemoKakyo_DrawLostWoodsSparkle(Actor* thisx, PlayState* play2) { } Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY); - Matrix_RotateZF(DEGF_TO_RADF(play->state.frames * 20.0f), MTXMODE_APPLY); + Matrix_RotateZF(DEG_TO_RAD(play->state.frames * 20.0f), MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); @@ -644,7 +644,7 @@ void DemoKankyo_DrawMoonAndGiant(Actor* thisx, PlayState* play2) { Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY); - Matrix_RotateZF(DEGF_TO_RADF(play->state.frames * 20.0f), MTXMODE_APPLY); + Matrix_RotateZF(DEG_TO_RAD(play->state.frames * 20.0f), MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); diff --git a/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c b/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c index 442ed1831..87f39a510 100644 --- a/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c +++ b/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c @@ -179,7 +179,7 @@ s32 func_80BECD10(EnAkindonuts* this, Path* path, s32 arg2) { phi_f14 = sp5C[idx + 1].z - sp5C[idx - 1].z; } - func_8017B7F8(&sp30, RADF_TO_BINANG(func_80086B30(phi_f12, phi_f14)), &sp44, &sp40, &sp3C); + func_8017B7F8(&sp30, RAD_TO_BINANG(func_80086B30(phi_f12, phi_f14)), &sp44, &sp40, &sp3C); if (((this->actor.world.pos.x * sp44) + (sp40 * this->actor.world.pos.z) + sp3C) > 0.0f) { sp50 = true; } diff --git a/src/overlays/actors/ovl_En_Az/z_en_az.c b/src/overlays/actors/ovl_En_Az/z_en_az.c index 3b2895983..2878d1fc6 100644 --- a/src/overlays/actors/ovl_En_Az/z_en_az.c +++ b/src/overlays/actors/ovl_En_Az/z_en_az.c @@ -1835,7 +1835,7 @@ void EnAz_Draw(Actor* thisx, PlayState* play2) { } else { Matrix_Push(); Matrix_Translate(0.0f, 2000.0f, -2000.0f, MTXMODE_APPLY); - Matrix_RotateZS(D_80A993D0[this->unk_384].z * (0x10000 / 360.0f), MTXMODE_APPLY); + Matrix_RotateZS(DEG_TO_BINANG(D_80A993D0[this->unk_384].z), MTXMODE_APPLY); Matrix_Scale(D_80A993AC[this->unk_384].x, D_80A993AC[this->unk_384].y, 0.0f, MTXMODE_APPLY); if (this->unk_374 & 0x800) { gSPSegment(POLY_XLU_DISP++, 0x08, Gfx_PrimColor(play->state.gfxCtx, 0x80, 255, 255, 255, 255)); @@ -1846,7 +1846,7 @@ void EnAz_Draw(Actor* thisx, PlayState* play2) { gSPDisplayList(POLY_XLU_DISP++, gBeaverYoungerBrotherTailVortexDL); Matrix_Pop(); Matrix_Translate(0.0f, 2000.0f, -2100.0f, MTXMODE_APPLY); - Matrix_RotateZS(D_80A993D0[this->unk_384].z * (0x10000 / 360.0f), MTXMODE_APPLY); + Matrix_RotateZS(DEG_TO_BINANG(D_80A993D0[this->unk_384].z), MTXMODE_APPLY); Matrix_Scale(D_80A993D0[this->unk_384].x, D_80A993D0[this->unk_384].y, 0.0f, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, gBeaverYoungerBrotherTailSplashDL); diff --git a/src/overlays/actors/ovl_En_Bombal/z_en_bombal.c b/src/overlays/actors/ovl_En_Bombal/z_en_bombal.c index cccddedfd..c8c8b8ed3 100644 --- a/src/overlays/actors/ovl_En_Bombal/z_en_bombal.c +++ b/src/overlays/actors/ovl_En_Bombal/z_en_bombal.c @@ -269,7 +269,7 @@ void EnBombal_DrawEffects(EnBombal* this, PlayState* play) { gDPSetEnvColor(POLY_XLU_DISP++, 250, 180, 255, sPtr->alpha); Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY); - Matrix_RotateZF(DEGF_TO_RADF(play->state.frames * 20.0f), MTXMODE_APPLY); + Matrix_RotateZF(DEG_TO_RAD(play->state.frames * 20.0f), MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, &gSunSparkleModelDL); diff --git a/src/overlays/actors/ovl_En_Bubble/z_en_bubble.c b/src/overlays/actors/ovl_En_Bubble/z_en_bubble.c index f08c3d413..1c0c2cfc4 100644 --- a/src/overlays/actors/ovl_En_Bubble/z_en_bubble.c +++ b/src/overlays/actors/ovl_En_Bubble/z_en_bubble.c @@ -410,9 +410,9 @@ void EnBubble_Draw(Actor* thisx, PlayState* play) { Math_SmoothStepToF(&this->modelEllipticity, 0.08f, 0.2f, 1000.0f, 0.0f); Matrix_ReplaceRotation(&play->billboardMtxF); Matrix_Scale(this->modelWidth + 1.0f, this->modelHeight + 1.0f, 1.0f, MTXMODE_APPLY); - Matrix_RotateZF(DEGF_TO_RADF((f32)play->state.frames) * this->modelRotSpeed, MTXMODE_APPLY); + Matrix_RotateZF(DEG_TO_RAD((f32)play->state.frames) * this->modelRotSpeed, MTXMODE_APPLY); Matrix_Scale(this->modelEllipticity + 1.0f, 1.0f, 1.0f, MTXMODE_APPLY); - Matrix_RotateZF(DEGF_TO_RADF(-(f32)play->state.frames) * this->modelRotSpeed, MTXMODE_APPLY); + Matrix_RotateZF(DEG_TO_RAD(-(f32)play->state.frames) * this->modelRotSpeed, MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, gBubbleDL); diff --git a/src/overlays/actors/ovl_En_Dg/z_en_dg.c b/src/overlays/actors/ovl_En_Dg/z_en_dg.c index 3545ec951..a173834c7 100644 --- a/src/overlays/actors/ovl_En_Dg/z_en_dg.c +++ b/src/overlays/actors/ovl_En_Dg/z_en_dg.c @@ -281,7 +281,7 @@ s32 EnDg_HasReachedPoint(EnDg* this, Path* path, s32 pointIndex) { diffZ = points[currentPoint + 1].z - points[currentPoint - 1].z; } - func_8017B7F8(&point, RADF_TO_BINANG(func_80086B30(diffX, diffZ)), &px, &pz, &d); + func_8017B7F8(&point, RAD_TO_BINANG(func_80086B30(diffX, diffZ)), &px, &pz, &d); if (((this->actor.world.pos.x * px) + (pz * this->actor.world.pos.z) + d) > 0.0f) { reached = true; @@ -310,7 +310,7 @@ s16 EnDg_GetYRotation(Path* path, s32 index, Vec3f* pos, f32* distSq) { *distSq = SQ(diffX) + SQ(diffZ); - return RADF_TO_BINANG(Math_Atan2F_XY(diffZ, diffX)); + return RAD_TO_BINANG(Math_Atan2F_XY(diffZ, diffX)); } /** diff --git a/src/overlays/actors/ovl_En_Egol/z_en_egol.c b/src/overlays/actors/ovl_En_Egol/z_en_egol.c index e3f5eaea8..8172ded90 100644 --- a/src/overlays/actors/ovl_En_Egol/z_en_egol.c +++ b/src/overlays/actors/ovl_En_Egol/z_en_egol.c @@ -767,8 +767,8 @@ void EnEgol_Laser(EnEgol* this, PlayState* play) { * rotToNorm.x = func_80086B30(nz, ny) * 0x8000 / M_PI; * rotToNorm.z = func_80086B30(-nx, sqrtf(1.0f - SQ(nx))) * 0x8000 / M_PI; */ - rotToNorm.x = -func_80086B30(-nz * ny, 1.0f) * 0x8000 / M_PI; - rotToNorm.z = func_80086B30(-nx * ny, 1.0f) * 0x8000 / M_PI; + rotToNorm.x = RAD_TO_BINANG_ALT2(-func_80086B30(-nz * ny, 1.0f)); + rotToNorm.z = RAD_TO_BINANG_ALT2(func_80086B30(-nx * ny, 1.0f)); if ((this->actor.world.pos.y - 50.0f) <= player->actor.world.pos.y) { EnEgol_SpawnEffect(this, &hitPos, &rotToNorm, 100, 0.02f, EYEGORE_EFFECT_IMPACT); diff --git a/src/overlays/actors/ovl_En_Encount2/z_en_encount2.c b/src/overlays/actors/ovl_En_Encount2/z_en_encount2.c index 33a819b20..7450e3427 100644 --- a/src/overlays/actors/ovl_En_Encount2/z_en_encount2.c +++ b/src/overlays/actors/ovl_En_Encount2/z_en_encount2.c @@ -284,7 +284,7 @@ void EnEncount2_DrawEffects(EnEncount2* this, PlayState* play) { gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, 255); gDPSetEnvColor(POLY_XLU_DISP++, 250, 180, 255, sPtr->alpha); Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY); - Matrix_RotateZF(DEGF_TO_RADF(play->state.frames * 20.0f), MTXMODE_APPLY); + Matrix_RotateZF(DEG_TO_RAD(play->state.frames * 20.0f), MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, gSunSparkleModelDL); } diff --git a/src/overlays/actors/ovl_En_Estone/z_en_estone.c b/src/overlays/actors/ovl_En_Estone/z_en_estone.c index 8eff94e4b..4081bd8e7 100644 --- a/src/overlays/actors/ovl_En_Estone/z_en_estone.c +++ b/src/overlays/actors/ovl_En_Estone/z_en_estone.c @@ -195,9 +195,9 @@ void EnEstone_Draw(Actor* thisx, PlayState* play2) { OPEN_DISPS(play->state.gfxCtx); Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, MTXMODE_NEW); - Matrix_RotateXFApply(this->rot.x * (M_PI / 180.0f)); - Matrix_RotateYF(this->rot.y * (M_PI / 180.0f), MTXMODE_APPLY); - Matrix_RotateZF(this->rot.z * (M_PI / 180.0f), MTXMODE_APPLY); + Matrix_RotateXFApply(DEG_TO_RAD(this->rot.x)); + Matrix_RotateYF(DEG_TO_RAD(this->rot.y), MTXMODE_APPLY); + Matrix_RotateZF(DEG_TO_RAD(this->rot.z), MTXMODE_APPLY); Matrix_Scale(this->scale, this->scale, this->scale, MTXMODE_APPLY); Matrix_Translate(0.0f, 0.0f, 0.0f, MTXMODE_APPLY); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0x80, 255, 255, 255, 255); diff --git a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c index 36ac5c2f8..af0456d57 100644 --- a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c +++ b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c @@ -1325,9 +1325,9 @@ void EnFishing_DrawEffects(FishingEffect* effect, PlayState* play) { effect = firstEffect; if (effect->type == FS_EFF_OWNER_HAT) { Matrix_Translate(effect->pos.x, effect->pos.y, effect->pos.z, MTXMODE_NEW); - Matrix_RotateYF((sEffOwnerHatRot.y * M_PI) / 32768, MTXMODE_APPLY); - Matrix_RotateXFApply((sEffOwnerHatRot.x * M_PI) / 32768); - Matrix_RotateZF((sEffOwnerHatRot.z * M_PI) / 32768, MTXMODE_APPLY); + Matrix_RotateYF(BINANG_TO_RAD_ALT2(sEffOwnerHatRot.y), MTXMODE_APPLY); + Matrix_RotateXFApply(BINANG_TO_RAD_ALT2(sEffOwnerHatRot.x)); + Matrix_RotateZF(BINANG_TO_RAD_ALT2(sEffOwnerHatRot.z), MTXMODE_APPLY); Matrix_Scale(effect->unk_30, effect->unk_30, effect->unk_30, MTXMODE_APPLY); Matrix_Translate(-1250.0f, 0.0f, 0.0f, MTXMODE_APPLY); Matrix_RotateXFApply(M_PI / 2); @@ -1659,7 +1659,7 @@ void EnFishing_UpdateSinkingLure(PlayState* play) { } if (D_8090CD14 == 5) { - Matrix_RotateYF(player->actor.shape.rot.y * (M_PI / 32768), MTXMODE_NEW); + Matrix_RotateYF(BINANG_TO_RAD(player->actor.shape.rot.y), MTXMODE_NEW); sp94.x = 5.0f; sp94.y = 0.0f; sp94.z = 3.0f; @@ -1772,7 +1772,7 @@ void EnFishing_DrawLureAndLine(PlayState* play, Vec3f* linePos, Vec3f* lineRot) sLurePos = sFishingHookedFish->fishMouthPos; if ((D_8090CD14 == 5) && (D_80917206 == 2)) { - Matrix_RotateYF(player->actor.shape.rot.y * (M_PI / 32768), MTXMODE_NEW); + Matrix_RotateYF(BINANG_TO_RAD(player->actor.shape.rot.y), MTXMODE_NEW); posSrc.x = 2.0f; posSrc.y = 0.0f; posSrc.z = 0.0f; @@ -2457,9 +2457,9 @@ void EnFishing_UpdateLure(EnFishing* this, PlayState* play) { } Math_ApproachZeroF(&D_809101B4, 1.0f, 0.3f); - Math_ApproachS(&D_809101B8, (D_809101B0 * 32768.0f) / M_PI, 3, spDC); + Math_ApproachS(&D_809101B8, RAD_TO_BINANG_ALT2(D_809101B0), 3, spDC); - sLureRot.y = (D_809101B8 / 32768.0f) * M_PI; + sLureRot.y = BINANG_TO_RAD_ALT(D_809101B8); sp90.x = 0.0f; sp90.y = 0.0f; @@ -2715,7 +2715,7 @@ void func_809038A4(EnFishing* this, Input* input) { sp24 = SQ(sp34.x) + SQ(sp34.y) + SQ(sp34.z); if ((D_8090CD14 == 3) && (this->unk_19A == 0) && (D_8090CD0C == 0)) { - Matrix_RotateYF((-this->actor.shape.rot.y / 32768.0f) * M_PI, MTXMODE_NEW); + Matrix_RotateYF(BINANG_TO_RAD_ALT(-this->actor.shape.rot.y), MTXMODE_NEW); Matrix_MultVec3f(&sp34, &sp28); if ((sp28.z > 0.0f) || (this->unk_1A4 < 40.0f)) { @@ -3600,8 +3600,8 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) { for (spA2 = 0; spA2 < 100; spA2++) { - Matrix_RotateYF(randPlusMinusPoint5Scaled(2.3561945f) + - (((this->actor.yawTowardsPlayer + 0x8000) / 32768.0f) * M_PI), + Matrix_RotateYF(randPlusMinusPoint5Scaled(0.75f * M_PI) + + BINANG_TO_RAD_ALT(this->actor.yawTowardsPlayer + 0x8000), MTXMODE_NEW); Matrix_MultVec3f(&sp10C, &sp100); @@ -3805,7 +3805,7 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) { sp10C.y = 10.0f; sp10C.z = 50.0f; } - Matrix_RotateYF((player->actor.shape.rot.y / 32768.0f) * M_PI, MTXMODE_NEW); + Matrix_RotateYF(BINANG_TO_RAD_ALT(player->actor.shape.rot.y), MTXMODE_NEW); Matrix_MultVec3f(&sp10C, &sSubCamEye); sSubCamEye.x += player->actor.world.pos.x; @@ -4228,20 +4228,20 @@ void EnFishing_DrawFish(Actor* thisx, PlayState* play) { func_8012C28C(play->state.gfxCtx); Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y, this->actor.world.pos.z, MTXMODE_NEW); - Matrix_RotateYF(((this->unk_15A + this->actor.shape.rot.y) / 32768.0f) * M_PI, MTXMODE_APPLY); - Matrix_RotateXFApply(((this->unk_158 + this->actor.shape.rot.x) / 32768.0f) * M_PI); - Matrix_RotateZF(((this->unk_15C + this->actor.shape.rot.z) / 32768.0f) * M_PI, MTXMODE_APPLY); + Matrix_RotateYF(BINANG_TO_RAD_ALT(this->unk_15A + this->actor.shape.rot.y), MTXMODE_APPLY); + Matrix_RotateXFApply(BINANG_TO_RAD_ALT(this->unk_158 + this->actor.shape.rot.x)); + Matrix_RotateZF(BINANG_TO_RAD_ALT(this->unk_15C + this->actor.shape.rot.z), MTXMODE_APPLY); Matrix_Scale(this->actor.scale.x, this->actor.scale.y, this->actor.scale.z, MTXMODE_APPLY); if (this->unk_148 == 0) { - Matrix_RotateYF((this->unk_164 * (M_PI / 32768)) - (M_PI / 2), MTXMODE_APPLY); + Matrix_RotateYF(BINANG_TO_RAD(this->unk_164) - (M_PI / 2), MTXMODE_APPLY); Matrix_Translate(0.0f, 0.0f, this->unk_164 * 10.0f * 0.01f, MTXMODE_APPLY); SkelAnime_DrawFlexOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount, EnFishing_FishOverrideLimbDraw, EnFishing_FishPostLimbDraw, &this->actor); } else { Matrix_Translate(0.0f, 0.0f, 3000.0f, MTXMODE_APPLY); - Matrix_RotateYF(this->unk_164 * (M_PI / 32768), MTXMODE_APPLY); + Matrix_RotateYF(BINANG_TO_RAD(this->unk_164), MTXMODE_APPLY); Matrix_Translate(0.0f, 0.0f, -3000.0f, MTXMODE_APPLY); Matrix_RotateYF(-(M_PI / 2), MTXMODE_APPLY); @@ -4411,7 +4411,7 @@ void EnFishing_DrawPondProps(PlayState* play) { if (prop->shouldDraw) { Matrix_Translate(prop->pos.x, prop->pos.y, prop->pos.z, MTXMODE_NEW); Matrix_Scale(prop->scale, 1.0f, prop->scale, MTXMODE_APPLY); - Matrix_RotateYF(prop->lilyPadAngle * (M_PI / 32768), MTXMODE_APPLY); + Matrix_RotateYF(BINANG_TO_RAD(prop->lilyPadAngle), MTXMODE_APPLY); Matrix_Translate(0.0f, 0.0f, 20.0f, MTXMODE_APPLY); Matrix_RotateYF(prop->rotY, MTXMODE_APPLY); @@ -4663,8 +4663,8 @@ void EnFishing_DrawGroupFishes(PlayState* play) { if (fish->shouldDraw) { Matrix_Translate(fish->pos.x, fish->pos.y, fish->pos.z, MTXMODE_NEW); - Matrix_RotateYF(((f32)fish->unk_3E * M_PI) / 32768.0f, MTXMODE_APPLY); - Matrix_RotateXFApply((-(f32)fish->unk_3C * M_PI) / 32768.0f); + Matrix_RotateYF(BINANG_TO_RAD_ALT2(fish->unk_3E), MTXMODE_APPLY); + Matrix_RotateXFApply(BINANG_TO_RAD_ALT2(-(f32)fish->unk_3C)); Matrix_Scale(fish->unk_2C * scale, scale, scale, MTXMODE_APPLY); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), diff --git a/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c b/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c index d30dd6bd8..2ae04a6ec 100644 --- a/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c +++ b/src/overlays/actors/ovl_En_Gg2/z_en_gg2.c @@ -310,7 +310,7 @@ s32 func_80B3B648(EnGg2* this, Path* path, s32 arg2_) { phi_f14 = points[arg2 + 1].z - points[arg2 - 1].z; } - func_8017B7F8(&sp30, RADF_TO_BINANG(func_80086B30(phi_f12, phi_f14)), &sp44, &sp40, &sp3C); + func_8017B7F8(&sp30, RAD_TO_BINANG(func_80086B30(phi_f12, phi_f14)), &sp44, &sp40, &sp3C); if (((this->actor.world.pos.x * sp44) + (sp40 * this->actor.world.pos.z) + sp3C) > 0.0f) { ret = true; diff --git a/src/overlays/actors/ovl_En_Gk/z_en_gk.c b/src/overlays/actors/ovl_En_Gk/z_en_gk.c index c1375d650..45dd9f749 100644 --- a/src/overlays/actors/ovl_En_Gk/z_en_gk.c +++ b/src/overlays/actors/ovl_En_Gk/z_en_gk.c @@ -374,7 +374,7 @@ s32 func_80B50C78(EnGk* this, Path* path, s32 arg2_) { phi_f14 = sp5C[arg2 + 1].z - sp5C[arg2 - 1].z; } - func_8017B7F8(&sp30, RADF_TO_BINANG(func_80086B30(phi_f12, phi_f14)), &sp44, &sp40, &sp3C); + func_8017B7F8(&sp30, RAD_TO_BINANG(func_80086B30(phi_f12, phi_f14)), &sp44, &sp40, &sp3C); if (((this->actor.world.pos.x * sp44) + (sp40 * this->actor.world.pos.z) + sp3C) > 0.0f) { ret = true; diff --git a/src/overlays/actors/ovl_En_Gs/z_en_gs.c b/src/overlays/actors/ovl_En_Gs/z_en_gs.c index e427dedc3..b01427406 100644 --- a/src/overlays/actors/ovl_En_Gs/z_en_gs.c +++ b/src/overlays/actors/ovl_En_Gs/z_en_gs.c @@ -349,8 +349,8 @@ f32 func_80998334(EnGs* this, PlayState* play, f32* arg2, f32* arg3, s16* arg4, if (arg9 == 0) { sp2C = Math_SmoothStepToF(arg2, *arg3, arg5, arg6, arg7); - this->unk_1B0[0].x = (sinf(DEGF_TO_RADF((*arg4 % arg8) * (1.0f / arg8) * 360.0f)) * *arg2) + 1.0f; - this->unk_1B0[0].y = 1.0f - (sinf(DEGF_TO_RADF((*arg4 % arg8) * (1.0f / arg8) * 360.0f)) * *arg2); + this->unk_1B0[0].x = (sinf(DEG_TO_RAD((*arg4 % arg8) * (1.0f / arg8) * 360.0f)) * *arg2) + 1.0f; + this->unk_1B0[0].y = 1.0f - (sinf(DEG_TO_RAD((*arg4 % arg8) * (1.0f / arg8) * 360.0f)) * *arg2); (*arg4)++; } return sp2C; @@ -648,7 +648,7 @@ s32 func_80998F9C(EnGs* this, PlayState* play) { if (this->unk_19D == 1) { Math_SmoothStepToF(&this->unk_1E4, this->unk_1E8, 1.0f, 0.1f, 0.001f); sp48 = Math_SmoothStepToF(&this->unk_1DC, this->unk_1E0, 1.0f, this->unk_1E4, 0.001f); - this->unk_19E[0].y += (s32)(this->unk_1DC * (0x10000 / 360.0f)); + this->unk_19E[0].y += (s32)DEG_TO_BINANG_ALT3(this->unk_1DC); if (sp48 == 0.0f) { this->unk_1D4 = 0; this->unk_19D = 2; @@ -656,7 +656,7 @@ s32 func_80998F9C(EnGs* this, PlayState* play) { } if (this->unk_19D == 2) { - this->unk_19E[0].y += (s32)(this->unk_1DC * (0x10000 / 360.0f)); + this->unk_19E[0].y += (s32)DEG_TO_BINANG_ALT3(this->unk_1DC); if (this->unk_1D4++ > 40) { this->unk_1DC = this->unk_1B0[0].y - 1.0f; this->unk_1E0 = 1.5f; @@ -725,8 +725,8 @@ s32 func_80998F9C(EnGs* this, PlayState* play) { sp40 = Math_SmoothStepToF(&this->unk_1EC, this->unk_1F0, 0.8f, 0.02f, 0.001f); this->unk_1B0[0].x = this->unk_1E4 + 1.0f; this->unk_1B0[0].y = this->unk_1DC + 1.0f; - this->unk_1B0[0].x += sinf(DEGF_TO_RADF((this->unk_1D4 % 10) * 0.1f * 360.0f)) * this->unk_1EC; - this->unk_1B0[0].y += sinf(DEGF_TO_RADF((this->unk_1D4 % 10) * 0.1f * 360.0f)) * this->unk_1EC; + this->unk_1B0[0].x += sinf(DEG_TO_RAD((this->unk_1D4 % 10) * 0.1f * 360.0f)) * this->unk_1EC; + this->unk_1B0[0].y += sinf(DEG_TO_RAD((this->unk_1D4 % 10) * 0.1f * 360.0f)) * this->unk_1EC; this->unk_1D4++; if ((sp48 == 0.0f) && (sp44 == 0.0f) && (sp40 == 0.0f)) { this->unk_216 = 0; diff --git a/src/overlays/actors/ovl_En_Jg/z_en_jg.c b/src/overlays/actors/ovl_En_Jg/z_en_jg.c index c8202a9e2..4ef7ee42a 100644 --- a/src/overlays/actors/ovl_En_Jg/z_en_jg.c +++ b/src/overlays/actors/ovl_En_Jg/z_en_jg.c @@ -215,7 +215,7 @@ s16 EnJg_GetWalkingYRotation(Path* path, s32 pointIndex, Vec3f* pos, f32* distSQ *distSQ = SQ(diffX) + SQ(diffZ); - return RADF_TO_BINANG(Math_Atan2F_XY(diffZ, diffX)); + return RAD_TO_BINANG(Math_Atan2F_XY(diffZ, diffX)); } s32 EnJg_ReachedPoint(EnJg* this, Path* path, s32 pointIndex) { @@ -242,7 +242,7 @@ s32 EnJg_ReachedPoint(EnJg* this, Path* path, s32 pointIndex) { diffZ = points[currentPoint + 1].z - points[currentPoint - 1].z; } - func_8017B7F8(&point, RADF_TO_BINANG(func_80086B30(diffX, diffZ)), &px, &pz, &d); + func_8017B7F8(&point, RAD_TO_BINANG(func_80086B30(diffX, diffZ)), &px, &pz, &d); if (((this->actor.world.pos.x * px) + (pz * this->actor.world.pos.z) + d) > 0.0f) { reached = true; diff --git a/src/overlays/actors/ovl_En_Poh/z_en_poh.c b/src/overlays/actors/ovl_En_Poh/z_en_poh.c index 1c29c90c6..95bd2d474 100644 --- a/src/overlays/actors/ovl_En_Poh/z_en_poh.c +++ b/src/overlays/actors/ovl_En_Poh/z_en_poh.c @@ -1005,7 +1005,7 @@ void func_80B2F37C(Actor* thisx, PlayState* play) { gDPSetPrimColor(POLY_XLU_DISP++, 0x80, 0x80, 255, 170, 255, this->unk_197); gDPSetEnvColor(POLY_XLU_DISP++, this->unk_194, this->unk_195, this->unk_196, 255); - Matrix_RotateYF((Camera_GetCamDirYaw(GET_ACTIVE_CAM(play)) + 0x8000) * (M_PI / 32768), MTXMODE_APPLY); + Matrix_RotateYF(BINANG_TO_RAD(Camera_GetCamDirYaw(GET_ACTIVE_CAM(play)) + 0x8000), MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, object_po_DL_003850); diff --git a/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c b/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c index c2e4b4afd..c97a0362a 100644 --- a/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c +++ b/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c @@ -288,7 +288,7 @@ s16 EnRacedog_GetYRotation(Path* path, s32 pointIndex, Vec3f* pos, f32* distSQ) } *distSQ = SQ(diffX) + SQ(diffZ); - return RADF_TO_BINANG(Math_Atan2F_XY(diffZRand, diffXRand)); + return RAD_TO_BINANG(Math_Atan2F_XY(diffZRand, diffXRand)); } void EnRacedog_GetFloorRot(EnRacedog* this, Vec3f* floorRot) { diff --git a/src/overlays/actors/ovl_En_Rat/z_en_rat.c b/src/overlays/actors/ovl_En_Rat/z_en_rat.c index 8c6871965..39a240e01 100644 --- a/src/overlays/actors/ovl_En_Rat/z_en_rat.c +++ b/src/overlays/actors/ovl_En_Rat/z_en_rat.c @@ -331,7 +331,7 @@ void EnRat_ChooseDirection(EnRat* this) { } angle = CLAMP(angle, -0x800, 0x800); - Matrix_RotateAxisF(angle * (M_PI / 0x8000), &this->axisUp, MTXMODE_NEW); + Matrix_RotateAxisF(BINANG_TO_RAD(angle), &this->axisUp, MTXMODE_NEW); Matrix_MultVec3f(&this->axisForwards, &newAxisForwards); Math_Vec3f_Copy(&this->axisForwards, &newAxisForwards); Math3D_CrossProduct(&this->axisUp, &this->axisForwards, &this->axisLeft); diff --git a/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c b/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c index 19d6611d6..eaf54000f 100644 --- a/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c +++ b/src/overlays/actors/ovl_En_Ruppecrow/z_en_ruppecrow.c @@ -163,7 +163,7 @@ s32 EnRuppecrow_ReachedPointClockwise(EnRuppecrow* this, Path* path, s32 pointIn } } - func_8017B7F8(&point, RADF_TO_BINANG(func_80086B30(diffX, diffZ)), &px, &pz, &d); + func_8017B7F8(&point, RAD_TO_BINANG(func_80086B30(diffX, diffZ)), &px, &pz, &d); if (((this->actor.world.pos.x * px) + (pz * this->actor.world.pos.z) + d) > 0.0f) { reached = true; } @@ -198,7 +198,7 @@ s32 EnRuppecrow_ReachedPointCounterClockwise(EnRuppecrow* this, Path* path, s32 } } - func_8017B7F8(&point, RADF_TO_BINANG(func_80086B30(diffX, diffZ)), &px, &pz, &d); + func_8017B7F8(&point, RAD_TO_BINANG(func_80086B30(diffX, diffZ)), &px, &pz, &d); if (((this->actor.world.pos.x * px) + (pz * this->actor.world.pos.z) + d) > 0.0f) { reached = true; } diff --git a/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.c b/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.c index da4614d24..b6bd75d83 100644 --- a/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.c +++ b/src/overlays/actors/ovl_En_Scopecrow/z_en_scopecrow.c @@ -192,7 +192,7 @@ s32 func_80BCD334(EnScopecrow* this, Path* path, s32 pointIndex) { phi_fa1 = points[index + 1].z - points[index - 1].z; } - func_8017B7F8(&sp30, RADF_TO_BINANG(func_80086B30(phi_fa0, phi_fa1)), &sp3C.z, &sp3C.y, &sp3C.x); + func_8017B7F8(&sp30, RAD_TO_BINANG(func_80086B30(phi_fa0, phi_fa1)), &sp3C.z, &sp3C.y, &sp3C.x); if (((this->actor.world.pos.x * sp3C.z) + (sp3C.y * this->actor.world.pos.z) + sp3C.x) > 0.0f) { ret = true; diff --git a/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c b/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c index 52ba17d22..c7ccaec9a 100644 --- a/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c +++ b/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c @@ -654,7 +654,7 @@ s32 func_80BCC2AC(EnScopenuts* this, Path* path, s32 arg2_) { phi_f14 = sp5C[arg2 + 1].z - sp5C[arg2 - 1].z; } - func_8017B7F8(&sp30, RADF_TO_BINANG(func_80086B30(phi_f12, phi_f14)), &sp44, &sp40, &sp3C); + func_8017B7F8(&sp30, RAD_TO_BINANG(func_80086B30(phi_f12, phi_f14)), &sp44, &sp40, &sp3C); if (((this->actor.world.pos.x * sp44) + (sp40 * this->actor.world.pos.z) + sp3C) > 0.0f) { sp50 = true; diff --git a/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c b/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c index 174dace1d..c02120532 100644 --- a/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c +++ b/src/overlays/actors/ovl_En_Sellnuts/z_en_sellnuts.c @@ -916,7 +916,7 @@ s32 func_80ADCE4C(EnSellnuts* this, Path* path, s32 arg2) { pointY = points[var + 1].z - points[var - 1].z; } - func_8017B7F8(&sp30, RADF_TO_BINANG(func_80086B30(pointX, pointY)), &sp44, &sp40, &sp3C); + func_8017B7F8(&sp30, RAD_TO_BINANG(func_80086B30(pointX, pointY)), &sp44, &sp40, &sp3C); if (((this->actor.world.pos.x * sp44) + (sp40 * this->actor.world.pos.z) + sp3C) > 0.0f) { ret = true; } diff --git a/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c b/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c index e1ebc505c..a716545bd 100644 --- a/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c +++ b/src/overlays/actors/ovl_En_Sob1/z_en_sob1.c @@ -1286,7 +1286,7 @@ s16 EnSob1_GetDistSqAndOrient(Path* path, s32 pointIndex, Vec3f* pos, f32* distS diffZ = 0.0f; } *distSq = SQ(diffX) + SQ(diffZ); - return RADF_TO_BINANG(Math_Atan2F_XY(diffZ, diffX)); + return RAD_TO_BINANG(Math_Atan2F_XY(diffZ, diffX)); } void EnSob1_GetCutscenes(EnSob1* this) { diff --git a/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c b/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c index 06831bbb1..71eade542 100644 --- a/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c +++ b/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c @@ -419,7 +419,7 @@ void EnSsh_Sway(EnSsh* this) { } temp_f20 = (this->swayTimer * (1.0f / 6)); - swayAngle = Math_SinS(this->swayAngle) * (temp_f20 * (0x10000 / 360.0f)); + swayAngle = (f32)DEG_TO_BINANG_ALT3(temp_f20) * Math_SinS(this->swayAngle); temp_f20 = this->actor.world.pos.y - this->ceilingPos.y; swayVecBase.x = Math_SinS(swayAngle) * temp_f20; @@ -428,7 +428,7 @@ void EnSsh_Sway(EnSsh* this) { Matrix_Push(); Matrix_Translate(this->ceilingPos.x, this->ceilingPos.y, this->ceilingPos.z, MTXMODE_NEW); - Matrix_RotateYF(this->actor.world.rot.y * (M_PI / 0x8000), MTXMODE_APPLY); + Matrix_RotateYF(BINANG_TO_RAD(this->actor.world.rot.y), MTXMODE_APPLY); Matrix_MultVec3f(&swayVecBase, &swayVec); Matrix_Pop(); diff --git a/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c b/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c index dc68a07c7..ad40c241c 100644 --- a/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c +++ b/src/overlays/actors/ovl_En_Suttari/z_en_suttari.c @@ -563,7 +563,7 @@ s16 EnSuttari_GetDistSqAndOrient(Path* path, s32 index, Vec3f* pos, f32* distSq) } *distSq = SQ(diffX) + SQ(diffZ); - return RADF_TO_BINANG(Math_Atan2F_XY(diffZ, diffX)); + return RAD_TO_BINANG(Math_Atan2F_XY(diffZ, diffX)); } s32 func_80BAB758(EnSuttari* this, Path* path, s32 arg2) { @@ -589,7 +589,7 @@ s32 func_80BAB758(EnSuttari* this, Path* path, s32 arg2) { sp54 = sp5C[index + 1].x - sp5C[index - 1].x; sp48 = sp5C[index + 1].z - sp5C[index - 1].z; } - func_8017B7F8(&sp30, RADF_TO_BINANG(func_80086B30(sp54, sp48)), &sp44, &sp40, &sp3C); + func_8017B7F8(&sp30, RAD_TO_BINANG(func_80086B30(sp54, sp48)), &sp44, &sp40, &sp3C); if (((sp44 * this->actor.world.pos.x) + (sp40 * this->actor.world.pos.z) + sp3C) > 0.0f) { ret = true; } @@ -619,7 +619,7 @@ s32 func_80BAB8F4(EnSuttari* this, Path* path, s32 arg2) { sp54 = sp5C[index - 1].x - sp5C[index + 1].x; sp48 = sp5C[index - 1].z - sp5C[index + 1].z; } - func_8017B7F8(&sp30, RADF_TO_BINANG(func_80086B30(sp54, sp48)), &sp44, &sp40, &sp3C); + func_8017B7F8(&sp30, RAD_TO_BINANG(func_80086B30(sp54, sp48)), &sp44, &sp40, &sp3C); if (((sp44 * this->actor.world.pos.x) + (sp40 * this->actor.world.pos.z) + sp3C) > 0.0f) { ret = true; } diff --git a/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c b/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c index 7e76bbfcc..cdf1c6483 100644 --- a/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c +++ b/src/overlays/actors/ovl_En_Trt2/z_en_trt2.c @@ -592,7 +592,7 @@ s32 func_80AD475C(EnTrt2* this, Path* path, s32 arg2) { phi_f14 = points[arg + 1].z - points[arg - 1].z; } - func_8017B7F8(&sp30, RADF_TO_BINANG(func_80086B30(phi_f12, phi_f14)), &sp44, &sp40, &sp3C); + func_8017B7F8(&sp30, RAD_TO_BINANG(func_80086B30(phi_f12, phi_f14)), &sp44, &sp40, &sp3C); if (((this->actor.world.pos.x * sp44) + (sp40 * this->actor.world.pos.z) + sp3C) > 0.0f) { ret = true; @@ -615,7 +615,7 @@ s16 func_80AD48F8(Path* path, s32 arg1, Vec3f* arg2, f32* arg3) { phi_f12 = 0.0f; } *arg3 = SQ(phi_f14) + SQ(phi_f12); - return RADF_TO_BINANG(Math_Atan2F_XY(phi_f12, phi_f14)); + return RAD_TO_BINANG(Math_Atan2F_XY(phi_f12, phi_f14)); } f32 func_80AD49B8(Path* path, s32 arg1, Vec3f* arg2, Vec3s* arg3) { diff --git a/src/overlays/actors/ovl_En_Tru_Mt/z_en_tru_mt.c b/src/overlays/actors/ovl_En_Tru_Mt/z_en_tru_mt.c index bd36be072..9928146b1 100644 --- a/src/overlays/actors/ovl_En_Tru_Mt/z_en_tru_mt.c +++ b/src/overlays/actors/ovl_En_Tru_Mt/z_en_tru_mt.c @@ -301,7 +301,7 @@ s32 func_80B76600(EnTruMt* this, Path* path, s32 arg2) { phi_f14 = sp5C[idx + 1].z - sp5C[idx - 1].z; } - func_8017B7F8(&sp30, RADF_TO_BINANG(func_80086B30(phi_f12, phi_f14)), &sp44, &sp40, &sp3C); + func_8017B7F8(&sp30, RAD_TO_BINANG(func_80086B30(phi_f12, phi_f14)), &sp44, &sp40, &sp3C); if (((this->actor.world.pos.x * sp44) + (sp40 * this->actor.world.pos.z) + sp3C) > 0.0f) { sp50 = true; } diff --git a/src/overlays/actors/ovl_En_Warp_tag/z_en_warp_tag.c b/src/overlays/actors/ovl_En_Warp_tag/z_en_warp_tag.c index 99fa30977..3f15ff8c8 100644 --- a/src/overlays/actors/ovl_En_Warp_tag/z_en_warp_tag.c +++ b/src/overlays/actors/ovl_En_Warp_tag/z_en_warp_tag.c @@ -208,10 +208,9 @@ void EnWarpTag_RespawnPlayer(EnWarptag* this, PlayState* play) { // why are we getting player home rotation from the room data? doesnt player have home.rot.y? // especially because we are converting from deg to binang, but isnt home.rot.y already in binang?? - Play_SetRespawnData( - &play->state, 0, entrance, play->setupEntranceList[playerSpawnIndex].room, playerParams, - &newRespawnPos, - ((((playerActorEntry->rot.y >> 7) & 0x1FF) / 180.0f) * 32768.0f)); // DEG_TO_BINANG ? + Play_SetRespawnData(&play->state, 0, entrance, play->setupEntranceList[playerSpawnIndex].room, + playerParams, &newRespawnPos, + DEG_TO_BINANG_ALT((playerActorEntry->rot.y >> 7) & 0x1FF)); func_80169EFC(&play->state); gSaveContext.respawnFlag = -5; diff --git a/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c b/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c index dd9f84ae0..d05c68571 100644 --- a/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c +++ b/src/overlays/actors/ovl_Obj_Chan/z_obj_chan.c @@ -119,7 +119,7 @@ u32 func_80BB9A1C(ObjChan* this, f32 arg1) { sp20 = Math_SinS(this->unk1D4) * this->unk1D0; temp_f6 = (Math_CosS(this->unk1D4) * 0.03834952f * this->unk1D0) + arg1; if (temp_f6 != 0.0f) { - this->unk1D4 = RADF_TO_BINANG(func_80086B30(sp20 * 0.03834952f, temp_f6)); + this->unk1D4 = RAD_TO_BINANG(func_80086B30(sp20 * 0.03834952f, temp_f6)); } else if (sp20 >= 0.0f) { this->unk1D4 = 0x4000; } else { @@ -175,7 +175,7 @@ void ObjChan_InitChandelier(ObjChan* this2, PlayState* play) { for (i = 0; i < 5; i++) { ObjChan_CalculatePotPosition(&childPos, &childRot, &this->actor.world.pos, &this->actor.shape.rot, - (s32)(i * 360.0f / 5.0f * (65536.0f / 360.0f)) + this->rotation); + (s32)DEG_TO_BINANG_ALT3(i * 360.0f / 5.0f) + this->rotation); temp_v0 = (ObjChan*)Actor_SpawnAsChildAndCutscene(&play->actorCtx, play, ACTOR_OBJ_CHAN, childPos.x, childPos.y, childPos.z, childRot.x, childRot.y, childRot.z, (this->actor.params & 0xFFF) | 0x1000, this->actor.cutscene, @@ -251,7 +251,7 @@ void ObjChan_ChandelierAction(ObjChan* this2, PlayState* play) { temp = this->pots[i]; if (temp != NULL) { ObjChan_CalculatePotPosition(&sp60, &sp58, &this->actor.world.pos, &this->actor.shape.rot, - (s32)(i * 360.0f / 5.0f * (65536.0f / 360.0f)) + this->rotation); + (s32)DEG_TO_BINANG_ALT3(i * 360.0f / 5.0f) + this->rotation); Math_Vec3f_Copy(&temp->actor.world.pos, &sp60); Math_Vec3s_Copy(&temp->actor.shape.rot, &this->actor.shape.rot); temp->actor.shape.rot.y = this->rotation; diff --git a/src/overlays/actors/ovl_Obj_Dora/z_obj_dora.c b/src/overlays/actors/ovl_Obj_Dora/z_obj_dora.c index bdff9b3bc..836a70ba9 100644 --- a/src/overlays/actors/ovl_Obj_Dora/z_obj_dora.c +++ b/src/overlays/actors/ovl_Obj_Dora/z_obj_dora.c @@ -288,7 +288,7 @@ void ObjDora_UpdateCollision(ObjDora* this, PlayState* play) { Actor_PlaySfx(&this->actor, NA_SE_SY_TRE_BOX_APPEAR); itemDrop = Item_DropCollectible(play, &this->actor.world.pos, ITEM00_RUPEE_BLUE); itemDrop->world.rot.y = this->actor.world.rot.y; - itemDrop->world.rot.y += (s32)(Rand_Centered() * 90.0f * (0x10000 / 360.0f)); + itemDrop->world.rot.y += (s32)DEG_TO_BINANG_ALT3(Rand_Centered() * 90.0f); itemDrop->velocity.y = 5.0f; itemDrop->gravity = -1.0f; this->rupeeDropTimer = 40; diff --git a/src/overlays/actors/ovl_Obj_HsStump/z_obj_hsstump.c b/src/overlays/actors/ovl_Obj_HsStump/z_obj_hsstump.c index ae047f029..b7b1bf92e 100644 --- a/src/overlays/actors/ovl_Obj_HsStump/z_obj_hsstump.c +++ b/src/overlays/actors/ovl_Obj_HsStump/z_obj_hsstump.c @@ -89,14 +89,14 @@ void ObjHsStump_Appear(ObjHsStump* this, PlayState* play) { } if (this->framesAppeared <= 10) { if (this->framesAppeared == 0) { + s32 pad; s32 i; - f32 angleDeg; s16 numDirections = 4; Vec3f iceSmokePosOffset; Vec3f iceSmokeVelOffset; - s16 offsetAngle; + s16 iceSmokeAngle; Vec3f iceSmokeVel; - f32 angleBrad; + f32 baseAngle; Vec3f iceSmokePos; iceSmokePosOffset.x = 1.0f; @@ -107,14 +107,13 @@ void ObjHsStump_Appear(ObjHsStump* this, PlayState* play) { iceSmokeVelOffset.y = 0.5f; iceSmokeVelOffset.z = 0.0f; - angleDeg = (360.0f / numDirections); - angleBrad = (s32)(angleDeg * (0x10000 / 360.0f)); + baseAngle = (s32)DEG_TO_BINANG_ALT3(360.0f / numDirections); for (i = 0; i < numDirections; i++) { - offsetAngle = i * angleBrad; - Lib_Vec3f_TranslateAndRotateY(&this->dyna.actor.world.pos, offsetAngle, &iceSmokePosOffset, + iceSmokeAngle = i * baseAngle; + Lib_Vec3f_TranslateAndRotateY(&this->dyna.actor.world.pos, iceSmokeAngle, &iceSmokePosOffset, &iceSmokePos); - Lib_Vec3f_TranslateAndRotateY(&gZeroVec3f, offsetAngle, &iceSmokeVelOffset, &iceSmokeVel); + Lib_Vec3f_TranslateAndRotateY(&gZeroVec3f, iceSmokeAngle, &iceSmokeVelOffset, &iceSmokeVel); EffectSsIceSmoke_Spawn(play, &iceSmokePos, &iceSmokeVel, &sIceSmokeAccel, 100); } } @@ -123,7 +122,7 @@ void ObjHsStump_Appear(ObjHsStump* this, PlayState* play) { Math_SmoothStepToF(&this->dyna.actor.scale.x, 18.0f * 0.01f, 1.0f, 0.01f, 0.001f); Actor_SetScale(&this->dyna.actor, this->dyna.actor.scale.x); } - if (this->dyna.actor.scale.x == 18.0f * 0.01f) { + if (this->dyna.actor.scale.x == (18.0f * 0.01f)) { this->isHidden = false; func_800C6314(play, &play->colCtx.dyna, this->dyna.bgId); ObjHsStump_SetupIdle(this, play); diff --git a/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.c b/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.c index 905002784..b7eef869d 100644 --- a/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.c +++ b/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.c @@ -179,11 +179,11 @@ void ObjWarpstone_Draw(Actor* thisx, PlayState* play2) { gDPPipeSync(POLY_XLU_DISP++); gDPSetPrimColor(POLY_XLU_DISP++, 128, 128, 255, 255, 200, this->dyna.actor.home.rot.x); gDPSetEnvColor(POLY_XLU_DISP++, 100, 200, 0, 255); - Matrix_RotateZF((((play->gameplayFrames * 1500) & 0xFFFF) * M_PI) / 0x8000, MTXMODE_APPLY); + Matrix_RotateZF(BINANG_TO_RAD_ALT2((play->gameplayFrames * 1500) & 0xFFFF), MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, gEffFlash1DL); Matrix_Pop(); - Matrix_RotateZF((~((play->gameplayFrames * 1200) & 0xFFFF) * M_PI) / 0x8000, MTXMODE_APPLY); + Matrix_RotateZF(BINANG_TO_RAD_ALT2(~((play->gameplayFrames * 1200) & 0xFFFF)), MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, gEffFlash1DL); CLOSE_DISPS(play->state.gfxCtx); diff --git a/src/overlays/effects/ovl_Effect_Ss_Fire_Tail/z_eff_ss_fire_tail.c b/src/overlays/effects/ovl_Effect_Ss_Fire_Tail/z_eff_ss_fire_tail.c index de464ae8d..1742b03fd 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Fire_Tail/z_eff_ss_fire_tail.c +++ b/src/overlays/effects/ovl_Effect_Ss_Fire_Tail/z_eff_ss_fire_tail.c @@ -107,7 +107,7 @@ void EffectSsFireTail_Draw(PlayState* play, u32 index, EffectSs* this) { temp2 = Math_SinS(yawDiff); dist = Math_Vec3f_DistXZ(&scale, &this->vec) / (this->rReg10 * 0.1f); Matrix_RotateYS(Camera_GetCamDirYaw(GET_ACTIVE_CAM(play)) + 0x8000, MTXMODE_APPLY); - Matrix_RotateZF(DEGF_TO_RADF(temp2 * this->rReg2 * dist), MTXMODE_APPLY); + Matrix_RotateZF(DEG_TO_RAD(temp2 * this->rReg2 * dist), MTXMODE_APPLY); temp2 = 1.0f - ((f32)(this->life + 1) / this->rLifespan); temp2 = 1.0f - SQ(temp2); scale.x = scale.y = scale.z = temp2 * (this->rScale * (0.001f * 0.01f)); diff --git a/src/overlays/effects/ovl_Effect_Ss_Solder_Srch_Ball/z_eff_ss_solder_srch_ball.c b/src/overlays/effects/ovl_Effect_Ss_Solder_Srch_Ball/z_eff_ss_solder_srch_ball.c index d6d6d1cbc..cd0ea0fad 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Solder_Srch_Ball/z_eff_ss_solder_srch_ball.c +++ b/src/overlays/effects/ovl_Effect_Ss_Solder_Srch_Ball/z_eff_ss_solder_srch_ball.c @@ -60,7 +60,7 @@ void EffectSsSolderSrchBall_Draw(PlayState* play, u32 index, EffectSs* this) { gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, 255); gDPSetEnvColor(POLY_XLU_DISP++, 250, 180, 255, 255); Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY); - Matrix_RotateZF(DEGF_TO_RADF(20.0f * play->state.frames), MTXMODE_APPLY); + Matrix_RotateZF(DEG_TO_RAD(20.0f * play->state.frames), MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, gSunSparkleModelDL); diff --git a/tools/namefixer.py b/tools/namefixer.py index 853322f5c..1c38d8359 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -874,6 +874,10 @@ wordReplace = { "ICHAIN_F32_DIV1000(minVelocityY,": "ICHAIN_F32_DIV1000(terminalVelocity,", "ICHAIN_F32(minVelocityY,": "ICHAIN_F32(terminalVelocity,", + "RADF_TO_BINANG": "RAD_TO_BINANG", + "RADF_TO_DEGF": "RAD_TO_DEG", + "DEGF_TO_RADF": "DEG_TO_RAD", + "ACTORCTX_FLAG_2": "ACTORCTX_FLAG_PICTO_BOX_ON", "ACTOR_FLAG_100": "ACTOR_FLAG_TALK_REQUESTED", From 4647ebb91b9646d92d85929814815e48fa6e44ac Mon Sep 17 00:00:00 2001 From: Anghelo Carvajal Date: Tue, 18 Apr 2023 17:50:34 -0400 Subject: [PATCH 07/12] `stackcheck.h` (#1204) * stackcheck.h * warning * Update src/boot_O2/stackcheck.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Update src/boot_O2/stackcheck.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Update src/boot_O2/stackcheck.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * stack * format * bss * review * review --------- Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --- include/functions.h | 5 ---- include/stackcheck.h | 26 +++++++++++++++++ include/variables.h | 4 +-- include/z64.h | 16 ----------- src/boot_O2/stackcheck.c | 57 ++++++++++++++++++++------------------ src/boot_O2_g3/boot_main.c | 12 ++++---- src/boot_O2_g3/fault.c | 1 + src/boot_O2_g3/idle.c | 2 +- src/boot_O2_g3/irqmgr.c | 1 + src/boot_O2_g3/z_std_dma.c | 1 + src/code/PreRender.c | 1 + src/code/main.c | 1 + src/code/sched.c | 1 + src/code/sys_flashrom.c | 7 +++-- src/code/sys_slowly.c | 1 + tools/disasm/variables.txt | 6 ++-- 16 files changed, 79 insertions(+), 63 deletions(-) create mode 100644 include/stackcheck.h diff --git a/include/functions.h b/include/functions.h index b9b3b682b..5d7c5364f 100644 --- a/include/functions.h +++ b/include/functions.h @@ -122,11 +122,6 @@ s8 PadUtils_GetRelYImpl(Input* input); s8 PadUtils_GetRelX(Input* input); s8 PadUtils_GetRelY(Input* input); void PadUtils_UpdateRelXY(Input* input); -void StackCheck_Init(StackEntry* entry, void* stackTop, void* stackBottom, u32 initValue, s32 minSpace, const char* name); -void StackCheck_Cleanup(StackEntry* entry); -StackStatus StackCheck_GetState(StackEntry* entry); -u32 StackCheck_CheckAll(void); -u32 StackCheck_Check(StackEntry* entry); void MtxConv_F2L(Mtx* mtx, MtxF* mf); void MtxConv_L2F(MtxF* mtx, Mtx* mf); diff --git a/include/stackcheck.h b/include/stackcheck.h new file mode 100644 index 000000000..aeb55df28 --- /dev/null +++ b/include/stackcheck.h @@ -0,0 +1,26 @@ +#ifndef STACKCHECK_H +#define STACKCHECK_H + +#include "ultra64.h" + +typedef enum StackStatus { + /* 0 */ STACK_STATUS_OK, + /* 1 */ STACK_STATUS_WARNING, + /* 2 */ STACK_STATUS_OVERFLOW +} StackStatus; + +typedef struct StackEntry { + /* 0x00 */ struct StackEntry* next; + /* 0x04 */ struct StackEntry* prev; + /* 0x08 */ void* head; + /* 0x0C */ void* tail; + /* 0x10 */ u32 initValue; + /* 0x14 */ s32 minSpace; + /* 0x18 */ const char* name; +} StackEntry; // size = 0x1C + +void StackCheck_Init(StackEntry* entry, void* stackBottom, void* stackTop, u32 initValue, s32 minSpace, const char* name); +void StackCheck_Cleanup(StackEntry* entry); +u32 StackCheck_Check(StackEntry* entry); + +#endif diff --git a/include/variables.h b/include/variables.h index 4ef96eab2..b90fadcc6 100644 --- a/include/variables.h +++ b/include/variables.h @@ -37,8 +37,7 @@ extern FaultDrawer* sFaultDrawContext; extern FaultDrawer sFaultDrawerDefault; extern s32 gLoadLogSeverity; extern s32 gLoad2LogSeverity; -extern StackEntry* sStackInfoListStart; -extern StackEntry* sStackInfoListEnd; + // extern UNK_TYPE1 sGfxPrintFontTLUT; // extern UNK_TYPE1 sGfxPrintRainbowTLUT; // extern UNK_TYPE1 sGfxPrintRainbowData; @@ -2451,6 +2450,7 @@ extern OSTime sGraphTaskStartTime; extern u32 gSegments[NUM_SEGMENTS]; extern SchedContext gSchedContext; + extern OSThread gGraphThread; extern PadMgr gPadMgr; diff --git a/include/z64.h b/include/z64.h index 331077723..f7c4ad29b 100644 --- a/include/z64.h +++ b/include/z64.h @@ -576,22 +576,6 @@ typedef struct { /* 0x47F */ UNK_TYPE1 pad47F[0x1]; } PadMgr; // size = 0x480 -typedef struct StackEntry { - /* 0x00 */ struct StackEntry* next; - /* 0x04 */ struct StackEntry* prev; - /* 0x08 */ u32 head; - /* 0x0C */ u32 tail; - /* 0x10 */ u32 initValue; - /* 0x14 */ s32 minSpace; - /* 0x18 */ const char* name; -} StackEntry; // size = 0x1C - -typedef enum { - STACK_STATUS_OK = 0, - STACK_STATUS_WARNING = 1, - STACK_STATUS_OVERFLOW = 2 -} StackStatus; - #define OS_SC_RETRACE_MSG 1 #define OS_SC_DONE_MSG 2 #define OS_SC_NMI_MSG 3 // name is made up, 3 is OS_SC_RDP_DONE_MSG in the original sched.c diff --git a/src/boot_O2/stackcheck.c b/src/boot_O2/stackcheck.c index 20e56f480..edd1e3a30 100644 --- a/src/boot_O2/stackcheck.c +++ b/src/boot_O2/stackcheck.c @@ -1,18 +1,19 @@ -#include "global.h" +#include "stackcheck.h" +#include "libc/stdbool.h" +#include "libc/stdint.h" StackEntry* sStackInfoListStart = NULL; StackEntry* sStackInfoListEnd = NULL; -void StackCheck_Init(StackEntry* entry, void* stackTop, void* stackBottom, u32 initValue, s32 minSpace, +void StackCheck_Init(StackEntry* entry, void* stackBottom, void* stackTop, u32 initValue, s32 minSpace, const char* name) { - StackEntry* iter; - u32* addr; - - if (!entry) { + if (entry == NULL) { sStackInfoListStart = NULL; } else { - entry->head = (u32)stackTop; - entry->tail = (u32)stackBottom; + StackEntry* iter; + + entry->head = stackBottom; + entry->tail = stackTop; entry->initValue = initValue; entry->minSpace = minSpace; entry->name = name; @@ -32,13 +33,14 @@ void StackCheck_Init(StackEntry* entry, void* stackTop, void* stackBottom, u32 i } sStackInfoListEnd = entry; - if (!sStackInfoListStart) { + if (sStackInfoListStart == NULL) { sStackInfoListStart = entry; } if (entry->minSpace != -1) { - addr = (u32*)entry->head; - while ((u32)addr < entry->tail) { + u32* addr = entry->head; + + while (addr < (u32*)entry->tail) { *addr++ = entry->initValue; } } @@ -46,13 +48,13 @@ void StackCheck_Init(StackEntry* entry, void* stackTop, void* stackBottom, u32 i } void StackCheck_Cleanup(StackEntry* entry) { - u32 inconsistency = 0; // unused variable needed to match + u32 inconsistency = false; - if (!entry->prev) { + if (entry->prev == NULL) { if (entry == sStackInfoListStart) { sStackInfoListStart = entry->next; } else { - inconsistency = 1; + inconsistency = true; } } else { entry->prev->next = entry->next; @@ -62,7 +64,7 @@ void StackCheck_Cleanup(StackEntry* entry) { if (entry == sStackInfoListEnd) { sStackInfoListEnd = entry->prev; } else { - inconsistency = 1; + inconsistency = true; } } @@ -71,22 +73,22 @@ void StackCheck_Cleanup(StackEntry* entry) { StackStatus StackCheck_GetState(StackEntry* entry) { u32* last; - u32 used; - u32 free; - s32 status; + size_t used; + size_t free; + StackStatus status; - for (last = (u32*)entry->head; (u32)last < entry->tail; last++) { + for (last = entry->head; last < (u32*)entry->tail; last++) { if (entry->initValue != *last) { break; } } - used = entry->tail - (u32)last; - free = (u32)last - entry->head; + used = (uintptr_t)entry->tail - (uintptr_t)last; + free = (uintptr_t)last - (uintptr_t)entry->head; if (free == 0) { status = STACK_STATUS_OVERFLOW; - } else if (free < (u32)entry->minSpace && entry->minSpace != -1) { + } else if ((free < (size_t)entry->minSpace) && (entry->minSpace != -1)) { status = STACK_STATUS_WARNING; } else { status = STACK_STATUS_OK; @@ -95,13 +97,14 @@ StackStatus StackCheck_GetState(StackEntry* entry) { return status; } -u32 StackCheck_CheckAll() { +u32 StackCheck_CheckAll(void) { u32 ret = 0; StackEntry* iter = sStackInfoListStart; - while (iter) { - u32 state = StackCheck_GetState(iter); - if (state) { + while (iter != NULL) { + StackStatus state = StackCheck_GetState(iter); + + if (state != STACK_STATUS_OK) { ret = 1; } iter = iter->next; @@ -111,7 +114,7 @@ u32 StackCheck_CheckAll() { } u32 StackCheck_Check(StackEntry* entry) { - if (!entry) { + if (entry == NULL) { return StackCheck_CheckAll(); } else { return StackCheck_GetState(entry); diff --git a/src/boot_O2_g3/boot_main.c b/src/boot_O2_g3/boot_main.c index 061458a1d..6a561992b 100644 --- a/src/boot_O2_g3/boot_main.c +++ b/src/boot_O2_g3/boot_main.c @@ -1,22 +1,22 @@ #include "prevent_bss_reordering.h" #include "global.h" #include "stack.h" +#include "stackcheck.h" StackEntry sBootStackInfo; OSThread sIdleThread; -STACK(sIdleThreadStack, 0x400); +STACK(sIdleStack, 0x400); StackEntry sIdleStackInfo; -STACK(sBootThreadStack, 0x400); +STACK(sBootStack, 0x400); void bootproc(void) { - StackCheck_Init(&sBootStackInfo, sBootThreadStack, STACK_TOP(sBootThreadStack), 0, -1, "boot"); + StackCheck_Init(&sBootStackInfo, sBootStack, STACK_TOP(sBootStack), 0, -1, "boot"); osMemSize = osGetMemSize(); func_800818F4(); osInitialize(); osUnmapTLBAll(); gCartHandle = osCartRomInit(); - StackCheck_Init(&sIdleStackInfo, sIdleThreadStack, STACK_TOP(sIdleThreadStack), 0, 0x100, "idle"); - osCreateThread(&sIdleThread, Z_THREAD_ID_IDLE, Idle_ThreadEntry, NULL, STACK_TOP(sIdleThreadStack), - Z_PRIORITY_IDLE); + StackCheck_Init(&sIdleStackInfo, sIdleStack, STACK_TOP(sIdleStack), 0, 0x100, "idle"); + osCreateThread(&sIdleThread, Z_THREAD_ID_IDLE, Idle_ThreadEntry, NULL, STACK_TOP(sIdleStack), Z_PRIORITY_IDLE); osStartThread(&sIdleThread); } diff --git a/src/boot_O2_g3/fault.c b/src/boot_O2_g3/fault.c index 134b120dc..5e4f8e24a 100644 --- a/src/boot_O2_g3/fault.c +++ b/src/boot_O2_g3/fault.c @@ -2,6 +2,7 @@ #include "global.h" #include "stack.h" #include "vt.h" +#include "stackcheck.h" extern FaultThreadStruct* sFaultContext; extern f32 D_8009BE54; diff --git a/src/boot_O2_g3/idle.c b/src/boot_O2_g3/idle.c index 40bcf5d0e..2b8a88728 100644 --- a/src/boot_O2_g3/idle.c +++ b/src/boot_O2_g3/idle.c @@ -1,7 +1,7 @@ -#include "prevent_bss_reordering.h" #include "global.h" #include "stack.h" #include "buffers.h" +#include "stackcheck.h" u8 D_80096B20 = 1; vu8 gViConfigUseDefault = 1; diff --git a/src/boot_O2_g3/irqmgr.c b/src/boot_O2_g3/irqmgr.c index 152c69b89..424451a5b 100644 --- a/src/boot_O2_g3/irqmgr.c +++ b/src/boot_O2_g3/irqmgr.c @@ -1,4 +1,5 @@ #include "global.h" +#include "stackcheck.h" vs32 gIrqMgrResetStatus = 0; volatile OSTime sIrqMgrResetTime = 0; diff --git a/src/boot_O2_g3/z_std_dma.c b/src/boot_O2_g3/z_std_dma.c index dd34d9e87..00d894f74 100644 --- a/src/boot_O2_g3/z_std_dma.c +++ b/src/boot_O2_g3/z_std_dma.c @@ -1,6 +1,7 @@ #include "prevent_bss_reordering.h" #include "global.h" #include "stack.h" +#include "stackcheck.h" u32 sDmaMgrDmaBuffSize = 0x2000; diff --git a/src/code/PreRender.c b/src/code/PreRender.c index 075f941d4..172659cf7 100644 --- a/src/code/PreRender.c +++ b/src/code/PreRender.c @@ -1,6 +1,7 @@ #include "global.h" #include "slowly.h" #include "stack.h" +#include "stackcheck.h" /** * Assigns the "save" values in PreRender diff --git a/src/code/main.c b/src/code/main.c index c4a80f1ea..7fbb5ba39 100644 --- a/src/code/main.c +++ b/src/code/main.c @@ -7,6 +7,7 @@ #include "global.h" #include "buffers.h" #include "stack.h" +#include "stackcheck.h" extern OSMesgQueue sSiIntMsgQ; extern OSMesg sSiIntMsgBuf[1]; diff --git a/src/code/sched.c b/src/code/sched.c index 5f9cdf236..c2630677c 100644 --- a/src/code/sched.c +++ b/src/code/sched.c @@ -1,5 +1,6 @@ #include "prevent_bss_reordering.h" #include "global.h" +#include "stackcheck.h" #define RSP_DONE_MSG 667 #define RDP_DONE_MSG 668 diff --git a/src/code/sys_flashrom.c b/src/code/sys_flashrom.c index e9ea6e21e..0db0b8744 100644 --- a/src/code/sys_flashrom.c +++ b/src/code/sys_flashrom.c @@ -1,5 +1,6 @@ #include "global.h" #include "stack.h" +#include "stackcheck.h" #include "system_malloc.h" // extern UNK_TYPE1 D_801FBE10; @@ -7,10 +8,10 @@ // extern UNK_TYPE1 D_801FBE2C; // extern UNK_TYPE4 D_801FBE30; extern STACK(sSysFlashromStack, 0x1000); -extern StackEntry sys_flashromStackEntry; -extern OSThread sys_flashromOSThread; +extern StackEntry sSysFlashromStackInfo; +extern OSThread sSysFlashromThread; extern s80185D40 D_801FD008; -extern OSMesg D_801FD034; +extern OSMesg D_801FD034[1]; #pragma GLOBAL_ASM("asm/non_matchings/code/sys_flashrom/func_801857C0.s") diff --git a/src/code/sys_slowly.c b/src/code/sys_slowly.c index 29ac0db78..754c5d472 100644 --- a/src/code/sys_slowly.c +++ b/src/code/sys_slowly.c @@ -10,6 +10,7 @@ */ #include "slowly.h" #include "global.h" +#include "stackcheck.h" void Slowly_Main(SlowlyMgr* slowly) { slowly->status |= SLOWLY_STATUS_STARTED; diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index dc5f57f8c..4dab18e3b 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -289,7 +289,7 @@ 0x80099520:("sIdleThread","OSThread","",0x1b0), 0x800996D0:("sIdleThreadStack","u8","[1024]",0x400), 0x80099AD0:("sIdleStackInfo","StackEntry","",0x1c), - 0x80099AF0:("sBootThreadStack","u8","[1024]",0x400), + 0x80099AF0:("sBootStack","u8","[1024]",0x400), 0x80099EF0:("gIrqMgr","IrqMgr","",0x280), 0x8009A170:("sIrqMgrStack","u8","[1280]",0x500), 0x8009A670:("sIrqMgrStackInfo","StackEntry","",0x1c), @@ -4216,8 +4216,8 @@ 0x801FBE2C:("D_801FBE2C","UNK_TYPE1","",0x1), 0x801FBE30:("D_801FBE30","UNK_TYPE4","",0x4), 0x801FBE38:("sSysFlashromStack","u8","[4096]",0x1000), - 0x801FCE38:("sys_flashromStackEntry","StackEntry","",0x1c), - 0x801FCE58:("sys_flashromOSThread","OSThread","",0x1b0), + 0x801FCE38:("sSysFlashromStackInfo","StackEntry","",0x1c), + 0x801FCE58:("sSysFlashromThread","OSThread","",0x1b0), 0x801FD008:("D_801FD008","s80185D40","",0x2c), 0x801FD034:("D_801FD034","OSMesg","",0x4), 0x801FD040:("D_801FD040","s32","",0x10), From 38d21bbe9753568ff3c708ec602d037aca6a0f27 Mon Sep 17 00:00:00 2001 From: Anghelo Carvajal Date: Tue, 18 Apr 2023 18:14:36 -0400 Subject: [PATCH 08/12] Name some `SurfaceType_` functions (#1155) * enums * renaming functions * fixes * SurfaceType_IsSoft * type fixing * format * Update src/code/z_bgcheck.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Update src/code/z_bgcheck.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Update src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * review Co-authored-by: engineer124 * SurfaceType_GetFloorEffect Co-authored-by: Dragorn421 * format * bss * cleanups * extra material docs * cleanup * cleanups * Remove Bg prefix * minor fixes * Remove BG_ * SURFACE_MATERIAL_DIRT_SHALLOW * format * bss * bss * review Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * format * format again * bug * format * namefixer * bss * bss * bss * review --------- Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> Co-authored-by: engineer124 Co-authored-by: Dragorn421 --- include/functions.h | 158 ---------- include/sfx.h | 2 + include/ultra64/thread.h | 20 +- include/z64bgcheck.h | 293 +++++++++++++++++- src/boot_O2_g3/fault.c | 4 +- src/boot_O2_g3/irqmgr.c | 2 +- src/boot_O2_g3/z_std_dma.c | 1 - src/code/sched.c | 1 - src/code/z_actor.c | 17 +- src/code/z_bgcheck.c | 199 +++++------- src/code/z_en_hy_code.c | 11 +- src/code/z_message.c | 2 +- src/code/z_play.c | 1 + src/code/z_quake.c | 16 +- src/libultra/io/pimgr.c | 2 +- .../ovl_Bg_Ikana_Block/z_bg_ikana_block.c | 4 +- src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c | 2 +- .../actors/ovl_Door_Warp1/z_door_warp1.c | 4 +- .../actors/ovl_En_Bbfall/z_en_bbfall.c | 4 +- src/overlays/actors/ovl_En_Bom/z_en_bom.c | 20 +- .../actors/ovl_En_Bom_Chu/z_en_bom_chu.c | 2 +- .../actors/ovl_En_Dodongo/z_en_dodongo.c | 2 +- src/overlays/actors/ovl_En_Elf/z_en_elf.c | 2 +- src/overlays/actors/ovl_En_Famos/z_en_famos.c | 4 +- .../actors/ovl_En_Fishing/z_en_fishing.c | 2 +- .../actors/ovl_En_Goroiwa/z_en_goroiwa.c | 6 +- src/overlays/actors/ovl_En_Horse/z_en_horse.c | 11 +- src/overlays/actors/ovl_En_In/z_en_in.c | 8 +- src/overlays/actors/ovl_En_Kame/z_en_kame.c | 7 +- .../actors/ovl_En_Kanban/z_en_kanban.c | 10 +- src/overlays/actors/ovl_En_Mm/z_en_mm.c | 3 +- .../actors/ovl_En_Mushi2/z_en_mushi2.c | 5 +- .../actors/ovl_En_Nutsball/z_en_nutsball.c | 5 +- src/overlays/actors/ovl_En_Rat/z_en_rat.c | 3 +- src/overlays/actors/ovl_En_Ru/z_en_ru.c | 11 +- src/overlays/actors/ovl_En_Sw/z_en_sw.c | 2 +- src/overlays/actors/ovl_En_Test/z_en_test.c | 11 +- src/overlays/actors/ovl_En_Test/z_en_test.h | 2 +- src/overlays/actors/ovl_En_Tite/z_en_tite.c | 9 +- src/overlays/actors/ovl_En_Tk/z_en_tk.c | 11 +- src/overlays/actors/ovl_En_Wf/z_en_wf.c | 9 +- src/overlays/actors/ovl_En_Zo/z_en_zo.c | 11 +- src/overlays/actors/ovl_En_Zog/z_en_zog.c | 6 +- .../actors/ovl_Obj_Iceblock/z_obj_iceblock.c | 3 +- .../actors/ovl_Obj_Nozoki/z_obj_nozoki.c | 1 - .../actors/ovl_Obj_Oshihiki/z_obj_oshihiki.c | 6 +- .../ovl_Obj_Skateblock/z_obj_skateblock.c | 3 +- .../ovl_Effect_Ss_Bubble/z_eff_ss_bubble.c | 23 +- tools/disasm/functions.txt | 26 +- tools/disasm/variables.txt | 5 + tools/namefixer.py | 19 +- tools/sizes/code_functions.csv | 26 +- 52 files changed, 559 insertions(+), 458 deletions(-) diff --git a/include/functions.h b/include/functions.h index 5d7c5364f..ac6ad65dd 100644 --- a/include/functions.h +++ b/include/functions.h @@ -776,164 +776,6 @@ void* ActorOverlayTable_FaultAddrConv(void* address, void* param); void ActorOverlayTable_Init(void); void ActorOverlayTable_Cleanup(void); -void SSNode_SetValue(SSNode* node, s16* polyIndex, u16 next); -void SSList_SetNull(SSList* ssList); -void SSNodeList_SetSSListHead(SSNodeList* list, SSList* ssList, s16* polyIndex); -void DynaSSNodeList_SetSSListHead(DynaSSNodeList* list, SSList* ssList, s16* polyIndex); -void DynaSSNodeList_Init(PlayState* play, DynaSSNodeList* list); -void DynaSSNodeList_Alloc(PlayState* play, DynaSSNodeList* list, u32 numNodes); -void DynaSSNodeList_ResetCount(DynaSSNodeList* list); -u16 DynaSSNodeList_GetNextNodeIdx(DynaSSNodeList* list); -void BgCheck_Vec3sToVec3f(Vec3s* src, Vec3f* dest); -void BgCheck_Vec3fToVec3s(Vec3s* dest, Vec3f* src); -f32 func_800BFD84(CollisionPoly *poly, f32 arg1, f32 arg2); -s32 func_800BFDEC(CollisionPoly* polyA, CollisionPoly* polyB, u32* outVtxId0, u32* outVtxId1); -s16 CollisionPoly_GetMinY(CollisionPoly* poly, Vec3s* vertices); -void CollisionPoly_GetNormalF(CollisionPoly* poly, f32* nx, f32* ny, f32* nz); -void func_800C0094(CollisionPoly* poly, f32 tx, f32 ty, f32 tz, MtxF* dest); -f32 CollisionPoly_GetPointDistanceFromPlane(CollisionPoly* poly, Vec3f* point); -void CollisionPoly_GetVerticesByBgId(CollisionPoly* poly, s32 bgId, CollisionContext* colCtx, Vec3f* dest); -s32 CollisionPoly_SphVsPoly(CollisionPoly* poly, Vec3s* vtxList, Vec3f* center, f32 radius); -void StaticLookup_AddPolyToSSList(CollisionContext* colCtx, SSList* ssList, CollisionPoly* polyList, Vec3s* vtxList, s16 polyId); -void StaticLookup_AddPoly(StaticLookup* lookup, CollisionContext* colCtx, CollisionPoly* polyList, Vec3s* vtxList, s16 index); -void BgCheck_GetSubdivisionMinBounds(CollisionContext* colCtx, Vec3f* pos, s32* sx, s32* sy, s32* sz); -void BgCheck_GetSubdivisionMaxBounds(CollisionContext* colCtx, Vec3f* pos, s32* sx, s32* sy, s32* sz); -void BgCheck_GetPolySubdivisionBounds(CollisionContext* colCtx, Vec3s* vtxList, CollisionPoly* polyList, s32* subdivMinX, s32* subdivMinY, s32* subdivMinZ, s32* subdivMaxX, s32* subdivMaxY, s32* subdivMaxZ, s16 polyId); -s32 BgCheck_PolyIntersectsSubdivision(Vec3f* min, Vec3f* max, CollisionPoly* polyList, Vec3s* vtxList, s16 polyId); -u32 BgCheck_InitStaticLookup(CollisionContext* colCtx, PlayState* play, StaticLookup* lookupTbl); -s32 BgCheck_IsSmallMemScene(PlayState* play); -s32 BgCheck_TryGetCustomMemsize(s32 sceneId, u32* memSize); -void BgCheck_SetSubdivisionDimension(f32 min, s32 subdivAmount, f32* max, f32* subdivLength, f32* subdivLengthInv); -s32 BgCheck_GetSpecialSceneMaxObjects(PlayState* play, s32* maxNodes, s32* maxPolygons, s32* maxVertices); -void BgCheck_Allocate(CollisionContext* colCtx, PlayState* play, CollisionHeader* colHeader); -void BgCheck_SetContextFlags(CollisionContext* colCtx, u32 flags); -void BgCheck_UnsetContextFlags(CollisionContext* colCtx, u32 flags); -CollisionHeader* BgCheck_GetCollisionHeader(CollisionContext* colCtx, s32 bgId); -f32 BgCheck_RaycastFloorImpl(PlayState* play, CollisionContext* colCtx, u16 xpFlags, CollisionPoly** outPoly, s32* outBgId, Vec3f* pos, Actor* actor, u32 arg7, f32 checkDist, s32 arg9); -f32 BgCheck_CameraRaycastFloor1(CollisionContext* colCtx, CollisionPoly** outPoly, Vec3f* pos); -f32 BgCheck_EntityRaycastFloor1(CollisionContext* colCtx, CollisionPoly** outPoly, Vec3f* pos); -f32 BgCheck_EntityRaycastFloor2(PlayState* play, CollisionContext* colCtx, CollisionPoly** outPoly, Vec3f* pos); -f32 BgCheck_EntityRaycastFloor2_1(PlayState* play, CollisionContext* colCtx, CollisionPoly** outPoly, Vec3f* pos); -f32 BgCheck_EntityRaycastFloor3(CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Vec3f* pos); -f32 BgCheck_EntityRaycastFloor5(CollisionContext* colCtx, CollisionPoly** outPoly, s32* outBgId, Actor* actor, Vec3f* pos); -f32 BgCheck_EntityRaycastFloor5_2(PlayState* play, CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Actor* actor, Vec3f* pos); -f32 BgCheck_EntityRaycastFloor5_3(PlayState* play, CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Actor* actor, Vec3f* pos); -f32 BgCheck_EntityRaycastFloor6(CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Actor* actor, Vec3f* pos, f32 checkDist); -f32 BgCheck_EntityRaycastFloor7(CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Actor* actor, Vec3f* pos); -f32 BgCheck_AnyRaycastFloor1(CollisionContext* colCtx, CollisionPoly* outPoly, Vec3f* pos); -f32 BgCheck_AnyRaycastFloor2(CollisionContext* colCtx, CollisionPoly* outPoly, s32* bgId, Vec3f* pos); -f32 BgCheck_CameraRaycastFloor2(CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Vec3f* pos); -f32 BgCheck_EntityRaycastFloor8(CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Actor* actor, Vec3f* pos); -f32 BgCheck_EntityRaycastFloor9(CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Vec3f* pos); -s32 BgCheck_CheckWallImpl(CollisionContext* colCtx, u16 xpFlags, Vec3f* posResult, Vec3f* posNext, Vec3f* posPrev, f32 radius, CollisionPoly** outPoly, s32* outBgId, Actor* actor, f32 checkHeight, u8 argA); -s32 BgCheck_EntitySphVsWall1(CollisionContext* colCtx, Vec3f* posResult, Vec3f* posNext, Vec3f* posPrev, f32 radius, CollisionPoly** outPoly, f32 checkHeight); -s32 BgCheck_EntitySphVsWall2(CollisionContext* colCtx, Vec3f* posResult, Vec3f* posNext, Vec3f* posPrev, f32 radius, CollisionPoly** outPoly, s32* outBgId, f32 checkHeight); -s32 BgCheck_EntitySphVsWall3(CollisionContext* colCtx, Vec3f* posResult, Vec3f* posNext, Vec3f* posPrev, f32 radius, CollisionPoly** outPoly, s32* outBgId, Actor* actor, f32 checkHeight); -s32 BgCheck_EntitySphVsWall4(CollisionContext* colCtx, Vec3f* posResult, Vec3f* posNext, Vec3f* posPrev, f32 radius, CollisionPoly** outPoly, s32* outBgId, Actor* actor, f32 checkHeight); -s32 BgCheck_CheckCeilingImpl(CollisionContext* colCtx, u16 xpFlags, f32* outY, Vec3f* pos, f32 checkHeight, CollisionPoly** outPoly, s32* outBgId, Actor* actor); -s32 BgCheck_AnyCheckCeiling(CollisionContext* colCtx, f32* outY, Vec3f* pos, f32 checkHeight); -s32 BgCheck_EntityCheckCeiling(CollisionContext* colCtx, f32* outY, Vec3f* pos, f32 checkHeight, CollisionPoly** outPoly, s32* outBgId, Actor* actor); -s32 BgCheck_CameraLineTest1(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkWall, s32 checkFloor, s32 checkCeil, s32 checkOneFace, s32* bgId); -s32 BgCheck_CameraLineTest2(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkWall, s32 checkFloor, s32 checkCeil, s32 checkOneFace, s32* bgId); -s32 BgCheck_EntityLineTest1(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkWall, s32 checkFloor, s32 checkCeil, s32 checkOneFace, s32* bgId); -s32 BgCheck_EntityLineTest2(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkWall, s32 checkFloor, s32 checkCeil, s32 checkOneFace, s32* bgId, Actor* actor); -s32 BgCheck_EntityLineTest3(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkWall, s32 checkFloor, s32 checkCeil, s32 checkOneFace, s32* bgId, Actor* actor, f32 checkDist); -s32 BgCheck_ProjectileLineTest(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkWall, s32 checkFloor, s32 checkCeil, s32 checkOneFace, s32* bgId); -s32 BgCheck_AnyLineTest1(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkOneFace); -s32 BgCheck_AnyLineTest2(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkWall, s32 checkFloor, s32 checkCeil, s32 checkOneFace); -s32 BgCheck_AnyLineTest3(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkWall, s32 checkFloor, s32 checkCeil, s32 checkOneFace, s32* bgId); -s32 BgCheck_SphVsFirstPolyImpl(CollisionContext* colCtx, u16 xpFlags, CollisionPoly** outPoly, s32* outBgId, Vec3f* center, f32 radius, Actor* actor, u16 bciFlags); -s32 BgCheck_SphVsFirstPoly(CollisionContext* colCtx, Vec3f* center, f32 radius); -s32 BgCheck_SphVsFirstWall(CollisionContext* colCtx, Vec3f* center, f32 radius); -void SSNodeList_Init(SSNodeList* this); -void SSNodeList_Alloc(PlayState* play, SSNodeList* this, s32 tblMax, s32 numPolys); -SSNode* SSNodeList_GetNextNode(SSNodeList* this); -u16 SSNodeList_GetNextNodeIdx(SSNodeList* this); -void ScaleRotPos_Init(ScaleRotPos* srp); -void ScaleRotPos_SetValue(ScaleRotPos* srp, Vec3f* scale, Vec3s* rot, Vec3f* pos); -s32 ScaleRotPos_IsEqual(ScaleRotPos* a, ScaleRotPos* b); -void DynaLookup_ResetLists(DynaLookup* dynaLookup); -void DynaLookup_Reset(DynaLookup* dynaLookup); -void DynaLookup_ResetVtxStartIndex(u16* vtxStartIndex); -void DynaLookup_ResetWaterBoxStartIndex(u16* waterBoxStartIndex); -void BgActor_Init(PlayState* play, BgActor* bgActor); -void BgActor_SetActor(BgActor* bgActor, Actor* actor, CollisionHeader* colHeader); -s32 BgActor_IsTransformUnchanged(BgActor* bgActor); -void DynaPoly_NullPolyList(CollisionPoly** polyList); -void DynaPoly_AllocPolyList(PlayState* play, CollisionPoly** polyList, s32 numPolys); -void DynaPoly_NullVtxList(Vec3s** vtxList); -void DynaPoly_AllocVtxList(PlayState* play, Vec3s** vtxList, s32 numVtx); -void DynaPoly_InitWaterBoxList(DynaWaterBoxList* waterBoxList); -void DynaPoly_AllocWaterBoxList(PlayState* play, DynaWaterBoxList* waterBoxList, s32 numWaterBoxes); -void DynaPoly_SetBgActorPrevTransform(PlayState* play, BgActor* bgActor); -s32 DynaPoly_IsBgIdBgActor(s32 bgId); -void DynaPoly_Init(PlayState* play, DynaCollisionContext* dyna); -void DynaPoly_Alloc(PlayState* play, DynaCollisionContext* dyna); -s32 DynaPoly_SetBgActor(PlayState* play, DynaCollisionContext* dyna, Actor* actor, CollisionHeader* colHeader); -DynaPolyActor* DynaPoly_GetActor(CollisionContext* colCtx, s32 bgId); -void func_800C62BC(PlayState* play, DynaCollisionContext* dyna, s32 bgId); -void func_800C6314(PlayState* play, DynaCollisionContext* dyna, s32 bgId); -void func_800C636C(PlayState* play, DynaCollisionContext* dyna, s32 bgId); -void func_800C63C4(PlayState* play, DynaCollisionContext* dyna, s32 bgId); -void func_800C641C(PlayState* play, DynaCollisionContext* dyna, s32 bgId); -void func_800C6474(PlayState* play, DynaCollisionContext* dyna, s32 bgId); -void func_800C6554(PlayState* play, DynaCollisionContext* dyna); -void DynaPoly_DeleteBgActor(PlayState* play, DynaCollisionContext* dyna, s32 bgId); -void BgCheck_CalcWaterboxDimensions(Vec3f* minPos, Vec3f* maxXPos, Vec3f* maxZPos, Vec3s* minPosOut, s16* xLength, s16* zLength); -void DynaPoly_ExpandSRT(PlayState* play, DynaCollisionContext* dyna, s32 bgId, s32* vtxStartIndex, s32* polyStartIndex, s32* waterBoxStartIndex); -void BgCheck_ResetFlagsIfLoadedActor(PlayState* play, DynaCollisionContext* dyna, Actor* actor); -void DynaPoly_Setup(PlayState* play, DynaCollisionContext* dyna); -void func_800C756C(DynaCollisionContext* dyna, s32* numPolygons, s32* numVertices, s32* numWaterBoxes); -void DynaPoly_UpdateBgActorTransforms(PlayState* play, DynaCollisionContext* dyna); -void CollisionHeader_SegmentedToVirtual(CollisionHeader* colHeader); -void CollisionHeader_GetVirtual(CollisionHeader* colHeader, CollisionHeader** dest); -void BgCheck_InitCollisionHeaders(CollisionContext* colCtx, PlayState* play); - -u32 SurfaceType_GetBgCamIndex(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); -u16 BgCheck_GetBgCamSettingImpl(CollisionContext* colCtx, u32 bgCamIndex, s32 bgId); -u16 BgCheck_GetBgCamSetting(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); -u16 BgCheck_GetBgCamCountImpl(CollisionContext* colCtx, u32 bgCamIndex, s32 bgId); -u16 BgCheck_GetBgCamCount(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); -Vec3s* BgCheck_GetBgCamFuncDataImpl(CollisionContext* colCtx, s32 bgCamIndex, s32 bgId); -Vec3s* BgCheck_GetBgCamFuncData(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); - -u32 SurfaceType_GetSceneExitIndex(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); -u32 func_800C99D4(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); -u32 func_800C99FC(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); -u32 func_800C9A24(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); -s32 func_800C9A4C(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); -s32 func_800C9A7C(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); -s32 func_800C9AB0(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); -s32 func_800C9AE4(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); -u32 func_800C9B18(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); -u32 func_800C9B40(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); -u32 func_800C9B68(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); -u32 SurfaceType_IsHorseBlocked(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); -u32 func_800C9BB8(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); -u16 SurfaceType_GetSfx(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); -s32 func_800C9C24(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId, s32 arg3); -u32 SurfaceType_GetSlope(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); -u32 SurfaceType_GetLightSettingIndex(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); -u32 SurfaceType_GetEcho(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); -u32 SurfaceType_IsHookshotSurface(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); -s32 SurfaceType_IsIgnoredByEntities(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); -s32 SurfaceType_IsIgnoredByProjectiles(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); -s32 SurfaceType_IsFloorConveyor(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); -s32 func_800C9DDC(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); -u32 SurfaceType_GetConveyorSpeed(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); -u32 SurfaceType_GetConveyorDirection(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); -u32 SurfaceType_IsWallDamage(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); -s32 WaterBox_GetSurfaceImpl(PlayState* play, CollisionContext* colCtx, f32 x, f32 z, f32* ySurface, WaterBox** outWaterBox, s32* bgId); -s32 WaterBox_GetSurface1(PlayState* play, CollisionContext* colCtx, f32 x, f32 z, f32* ySurface, WaterBox** outWaterBox); -s32 WaterBox_GetSurface1_2(PlayState* play, CollisionContext* colCtx, f32 x, f32 z, f32* ySurface, WaterBox** outWaterBox); -s32 WaterBox_GetSurface2(PlayState* play, CollisionContext* colCtx, Vec3f* pos, f32 surfaceCheckDist, WaterBox** outWaterBox, s32* bgId); -f32 func_800CA568(CollisionContext* colCtx, s32 waterBoxId, s32 bgId); -u16 WaterBox_GetBgCamSetting(CollisionContext* colCtx, WaterBox* waterBox, s32 bgId); -void WaterBox_GetSceneBgCamSetting(CollisionContext* colCtx, WaterBox* waterBox); -u32 WaterBox_GetLightSettingIndex(CollisionContext* colCtx, WaterBox* waterBox); -s32 func_800CA6F0(PlayState* play, CollisionContext* colCtx, f32 x, f32 z, f32* ySurface, WaterBox** outWaterBox, s32* bgId); -s32 func_800CA9D0(PlayState* play, CollisionContext* colCtx, f32 x, f32 z, f32* ySurface, WaterBox** outWaterBox); -s32 func_800CAA14(CollisionPoly* polyA, CollisionPoly* polyB, Vec3f* pointA, Vec3f* pointB, Vec3f* closestPoint); void BgCheck2_UpdateActorPosition(CollisionContext* colCtx, s32 bgId, Actor* actor); void BgCheck2_UpdateActorYRotation(CollisionContext* colCtx, s32 bgId, Actor* actor); void BgCheck2_AttachToMesh(CollisionContext* colCtx, Actor* actor, s32 bgId); diff --git a/include/sfx.h b/include/sfx.h index 33c79abf4..b55fbb357 100644 --- a/include/sfx.h +++ b/include/sfx.h @@ -16,6 +16,8 @@ #define SFX_FLAG_MASK 0xC00 #define SFX_FLAG 0x800 +#define NA_SE_NONE 0 + // ------------ PLAYER ------------ #define NA_SE_PL_WALK_GROUND 0x800 diff --git a/include/ultra64/thread.h b/include/ultra64/thread.h index f3cd68890..62cbdcd1b 100644 --- a/include/ultra64/thread.h +++ b/include/ultra64/thread.h @@ -54,16 +54,16 @@ typedef struct { } __OSThreadprofile; // size = 0x10 typedef struct OSThread { - /*0x00*/ struct OSThread* next; - /*0x04*/ OSPri priority; - /*0x08*/ struct OSThread** queue; - /*0x0C*/ struct OSThread* tlnext; - /*0x10*/ u16 state; - /*0x12*/ u16 flags; - /*0x14*/ OSId id; - /*0x18*/ s32 fp; - /*0x1C*/ __OSThreadprofile* thprof; - /*0x20*/ __OSThreadContext context; + /* 0x00 */ struct OSThread* next; + /* 0x04 */ OSPri priority; + /* 0x08 */ struct OSThread** queue; + /* 0x0C */ struct OSThread* tlnext; + /* 0x10 */ u16 state; + /* 0x12 */ u16 flags; + /* 0x14 */ OSId id; + /* 0x18 */ s32 fp; + /* 0x1C */ __OSThreadprofile* thprof; + /* 0x20 */ __OSThreadContext context; } OSThread; // size = 0x1B0 #endif diff --git a/include/z64bgcheck.h b/include/z64bgcheck.h index ad56599b5..c6210b2c1 100644 --- a/include/z64bgcheck.h +++ b/include/z64bgcheck.h @@ -48,11 +48,6 @@ struct DynaPolyActor; #define COLPOLY_IGNORE_ENTITY (1 << 1) #define COLPOLY_IGNORE_PROJECTILES (1 << 2) -// Surface Types -#define COLPOLY_SURFACE_GROUND 0 -#define COLPOLY_SURFACE_SAND 1 -#define COLPOLY_SURFACE_SNOW 14 - // CollisionContext flags #define BGCHECK_FLAG_REVERSE_CONVEYOR_FLOW 1 @@ -114,6 +109,120 @@ typedef struct { // 0x0000_00FF = bgCam index } WaterBox; // size = 0x10 +typedef enum FloorType { + /* 0 */ FLOOR_TYPE_0, + /* 1 */ FLOOR_TYPE_1, + /* 2 */ FLOOR_TYPE_2, + /* 3 */ FLOOR_TYPE_3, + /* 4 */ FLOOR_TYPE_4, + /* 5 */ FLOOR_TYPE_5, + /* 6 */ FLOOR_TYPE_6, + /* 7 */ FLOOR_TYPE_7, + /* 8 */ FLOOR_TYPE_8, + /* 9 */ FLOOR_TYPE_9, + /* 10 */ FLOOR_TYPE_10, + /* 11 */ FLOOR_TYPE_11, + /* 12 */ FLOOR_TYPE_12, + /* 13 */ FLOOR_TYPE_13, + /* 14 */ FLOOR_TYPE_14, + /* 15 */ FLOOR_TYPE_15 +} FloorType; + +typedef enum WallType { + /* 0 */ WALL_TYPE_0, + /* 1 */ WALL_TYPE_1, + /* 2 */ WALL_TYPE_2, + /* 3 */ WALL_TYPE_3, + /* 4 */ WALL_TYPE_4, + /* 5 */ WALL_TYPE_5, + /* 6 */ WALL_TYPE_6, + /* 7 */ WALL_TYPE_7, + /* 8 */ WALL_TYPE_8, + /* 9 */ WALL_TYPE_9, + /* 10 */ WALL_TYPE_10, + /* 11 */ WALL_TYPE_11, + /* 12 */ WALL_TYPE_12, + /* 32 */ WALL_TYPE_MAX = 32 +} WallType; + +#define WALL_FLAG_0 (1 << 0) +#define WALL_FLAG_1 (1 << 1) +#define WALL_FLAG_2 (1 << 2) +#define WALL_FLAG_3 (1 << 3) +#define WALL_FLAG_4 (1 << 4) +#define WALL_FLAG_5 (1 << 5) +#define WALL_FLAG_6 (1 << 6) + +// SurfaceType can leave footsteps imprints in the material +#define MATERIAL_PROPERTY_SOFT_IMPRINT (1 << 0) + +typedef enum FloorProperty { + /* 0 */ FLOOR_PROPERTY_0, + /* 1 */ FLOOR_PROPERTY_1, + /* 2 */ FLOOR_PROPERTY_2, + /* 5 */ FLOOR_PROPERTY_5 = 5, + /* 6 */ FLOOR_PROPERTY_6, + /* 7 */ FLOOR_PROPERTY_7, + /* 8 */ FLOOR_PROPERTY_8, + /* 9 */ FLOOR_PROPERTY_9, + /* 11 */ FLOOR_PROPERTY_11 = 11, + /* 12 */ FLOOR_PROPERTY_12, + /* 13 */ FLOOR_PROPERTY_13 +} FloorProperty; + +typedef enum SurfaceSfxOffset { + /* 0 */ SURFACE_SFX_OFFSET_DIRT, + /* 1 */ SURFACE_SFX_OFFSET_SAND, + /* 2 */ SURFACE_SFX_OFFSET_STONE, + /* 3 */ SURFACE_SFX_OFFSET_DIRT_SHALLOW, + /* 4 */ SURFACE_SFX_OFFSET_WATER_SHALLOW, + /* 5 */ SURFACE_SFX_OFFSET_WATER_DEEP, + /* 6 */ SURFACE_SFX_OFFSET_TALL_GRASS, + /* 7 */ SURFACE_SFX_OFFSET_LAVA, // MAGMA? + /* 8 */ SURFACE_SFX_OFFSET_GRASS, + /* 9 */ SURFACE_SFX_OFFSET_CARPET, + /* 10 */ SURFACE_SFX_OFFSET_WOOD, + /* 11 */ SURFACE_SFX_OFFSET_BRIDGE, // WOOD_PLANK? + /* 12 */ SURFACE_SFX_OFFSET_VINE, // METAL? + /* 13 */ SURFACE_SFX_OFFSET_DIRT_DEEP, + /* 14 */ SURFACE_SFX_OFFSET_SNOW, + /* 15 */ SURFACE_SFX_OFFSET_ICE +} SurfaceSfxOffset; + +typedef enum SurfaceMaterial { + /* 0 */ SURFACE_MATERIAL_DIRT, + /* 1 */ SURFACE_MATERIAL_SAND, + /* 2 */ SURFACE_MATERIAL_STONE, + /* 3 */ SURFACE_MATERIAL_DIRT_SHALLOW, + /* 4 */ SURFACE_MATERIAL_WATER_SHALLOW, + /* 5 */ SURFACE_MATERIAL_WATER_DEEP, + /* 6 */ SURFACE_MATERIAL_TALL_GRASS, + /* 7 */ SURFACE_MATERIAL_LAVA, // MAGMA? + /* 8 */ SURFACE_MATERIAL_GRASS, + /* 9 */ SURFACE_MATERIAL_BRIDGE, // WOOD_PLANK? + /* 10 */ SURFACE_MATERIAL_WOOD, + /* 11 */ SURFACE_MATERIAL_DIRT_SOFT, + /* 12 */ SURFACE_MATERIAL_ICE, + /* 13 */ SURFACE_MATERIAL_CARPET, + /* 14 */ SURFACE_MATERIAL_SNOW, + /* 15 */ SURFACE_MATERIAL_MAX +} SurfaceMaterial; + +typedef enum FloorEffect { + /* 0 */ FLOOR_EFFECT_0, + /* 1 */ FLOOR_EFFECT_1, + /* 2 */ FLOOR_EFFECT_2, + /* 3 */ FLOOR_EFFECT_3 +} FloorEffect; + +typedef enum ConveyorSpeed { + /* 0 */ CONVEYOR_SPEED_DISABLED, + /* 1 */ CONVEYOR_SPEED_SLOW, + /* 2 */ CONVEYOR_SPEED_MEDIUM, + /* 3 */ CONVEYOR_SPEED_FAST, + /* 4 */ CONVEYOR_SPEED_MAX +} ConveyorSpeed; + typedef struct { /* 0x0 */ u32 data[2]; @@ -219,14 +328,14 @@ typedef struct { } DynaCollisionContext; // size = 0x1418 typedef struct { - /* 0x00 */ CollisionHeader* colHeader; // scene's static collision - /* 0x04 */ Vec3f minBounds; // minimum coordinates of collision bounding box - /* 0x10 */ Vec3f maxBounds; // maximum coordinates of collision bounding box - /* 0x1C */ Vec3i subdivAmount; // x, y, z subdivisions of the scene's static collision - /* 0x28 */ Vec3f subdivLength; // x, y, z subdivision worldspace lengths - /* 0x34 */ Vec3f subdivLengthInv; // inverse of subdivision length - /* 0x40 */ StaticLookup* lookupTbl; // 3d array of length subdivAmount - /* 0x44 */ SSNodeList polyNodes; + /* 0x0000 */ CollisionHeader* colHeader; // scene's static collision + /* 0x0004 */ Vec3f minBounds; // minimum coordinates of collision bounding box + /* 0x0010 */ Vec3f maxBounds; // maximum coordinates of collision bounding box + /* 0x001C */ Vec3i subdivAmount; // x, y, z subdivisions of the scene's static collision + /* 0x0028 */ Vec3f subdivLength; // x, y, z subdivision worldspace lengths + /* 0x0034 */ Vec3f subdivLengthInv; // inverse of subdivision length + /* 0x0040 */ StaticLookup* lookupTbl; // 3d array of length subdivAmount + /* 0x0044 */ SSNodeList polyNodes; /* 0x0050 */ DynaCollisionContext dyna; /* 0x1468 */ u32 memSize; // Size of all allocated memory plus CollisionContext /* 0x146C */ u32 flags; // bit 0 reverses conveyor direction (i.e. water flow in Great Bay Temple) @@ -317,4 +426,162 @@ typedef struct { /* 0x8 */ s32 nodeListMax; // if -1, dynamically compute max nodes } BgCheckSceneSubdivisionEntry; // size = 0xC +void SSNode_SetValue(SSNode* node, s16* polyIndex, u16 next); +void SSList_SetNull(SSList* ssList); +void SSNodeList_SetSSListHead(SSNodeList* list, SSList* ssList, s16* polyIndex); +void DynaSSNodeList_SetSSListHead(DynaSSNodeList* list, SSList* ssList, s16* polyIndex); +void DynaSSNodeList_Init(struct PlayState* play, DynaSSNodeList* list); +void DynaSSNodeList_Alloc(struct PlayState* play, DynaSSNodeList* list, u32 numNodes); +void DynaSSNodeList_ResetCount(DynaSSNodeList* list); +u16 DynaSSNodeList_GetNextNodeIdx(DynaSSNodeList* list); +void BgCheck_Vec3sToVec3f(Vec3s* src, Vec3f* dest); +void BgCheck_Vec3fToVec3s(Vec3s* dest, Vec3f* src); +f32 func_800BFD84(CollisionPoly *poly, f32 arg1, f32 arg2); +s32 func_800BFDEC(CollisionPoly* polyA, CollisionPoly* polyB, u32* outVtxId0, u32* outVtxId1); +s16 CollisionPoly_GetMinY(CollisionPoly* poly, Vec3s* vertices); +void CollisionPoly_GetNormalF(CollisionPoly* poly, f32* nx, f32* ny, f32* nz); +void func_800C0094(CollisionPoly* poly, f32 tx, f32 ty, f32 tz, MtxF* dest); +f32 CollisionPoly_GetPointDistanceFromPlane(CollisionPoly* poly, Vec3f* point); +void CollisionPoly_GetVerticesByBgId(CollisionPoly* poly, s32 bgId, CollisionContext* colCtx, Vec3f* dest); +s32 CollisionPoly_SphVsPoly(CollisionPoly* poly, Vec3s* vtxList, Vec3f* center, f32 radius); +void StaticLookup_AddPolyToSSList(CollisionContext* colCtx, SSList* ssList, CollisionPoly* polyList, Vec3s* vtxList, s16 polyId); +void StaticLookup_AddPoly(StaticLookup* lookup, CollisionContext* colCtx, CollisionPoly* polyList, Vec3s* vtxList, s16 index); +void BgCheck_GetSubdivisionMinBounds(CollisionContext* colCtx, Vec3f* pos, s32* sx, s32* sy, s32* sz); +void BgCheck_GetSubdivisionMaxBounds(CollisionContext* colCtx, Vec3f* pos, s32* sx, s32* sy, s32* sz); +void BgCheck_GetPolySubdivisionBounds(CollisionContext* colCtx, Vec3s* vtxList, CollisionPoly* polyList, s32* subdivMinX, s32* subdivMinY, s32* subdivMinZ, s32* subdivMaxX, s32* subdivMaxY, s32* subdivMaxZ, s16 polyId); +s32 BgCheck_PolyIntersectsSubdivision(Vec3f* min, Vec3f* max, CollisionPoly* polyList, Vec3s* vtxList, s16 polyId); +u32 BgCheck_InitStaticLookup(CollisionContext* colCtx, struct PlayState* play, StaticLookup* lookupTbl); +s32 BgCheck_IsSmallMemScene(struct PlayState* play); +s32 BgCheck_TryGetCustomMemsize(s32 sceneId, u32* memSize); +void BgCheck_SetSubdivisionDimension(f32 min, s32 subdivAmount, f32* max, f32* subdivLength, f32* subdivLengthInv); +s32 BgCheck_GetSpecialSceneMaxObjects(struct PlayState* play, s32* maxNodes, s32* maxPolygons, s32* maxVertices); +void BgCheck_Allocate(CollisionContext* colCtx, struct PlayState* play, CollisionHeader* colHeader); +void BgCheck_SetContextFlags(CollisionContext* colCtx, u32 flags); +void BgCheck_UnsetContextFlags(CollisionContext* colCtx, u32 flags); +CollisionHeader* BgCheck_GetCollisionHeader(CollisionContext* colCtx, s32 bgId); +f32 BgCheck_RaycastFloorImpl(struct PlayState* play, CollisionContext* colCtx, u16 xpFlags, CollisionPoly** outPoly, s32* outBgId, Vec3f* pos, Actor* actor, u32 arg7, f32 checkDist, s32 arg9); +f32 BgCheck_CameraRaycastFloor1(CollisionContext* colCtx, CollisionPoly** outPoly, Vec3f* pos); +f32 BgCheck_EntityRaycastFloor1(CollisionContext* colCtx, CollisionPoly** outPoly, Vec3f* pos); +f32 BgCheck_EntityRaycastFloor2(struct PlayState* play, CollisionContext* colCtx, CollisionPoly** outPoly, Vec3f* pos); +f32 BgCheck_EntityRaycastFloor2_1(struct PlayState* play, CollisionContext* colCtx, CollisionPoly** outPoly, Vec3f* pos); +f32 BgCheck_EntityRaycastFloor3(CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Vec3f* pos); +f32 BgCheck_EntityRaycastFloor5(CollisionContext* colCtx, CollisionPoly** outPoly, s32* outBgId, Actor* actor, Vec3f* pos); +f32 BgCheck_EntityRaycastFloor5_2(struct PlayState* play, CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Actor* actor, Vec3f* pos); +f32 BgCheck_EntityRaycastFloor5_3(struct PlayState* play, CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Actor* actor, Vec3f* pos); +f32 BgCheck_EntityRaycastFloor6(CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Actor* actor, Vec3f* pos, f32 checkDist); +f32 BgCheck_EntityRaycastFloor7(CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Actor* actor, Vec3f* pos); +f32 BgCheck_AnyRaycastFloor1(CollisionContext* colCtx, CollisionPoly* outPoly, Vec3f* pos); +f32 BgCheck_AnyRaycastFloor2(CollisionContext* colCtx, CollisionPoly* outPoly, s32* bgId, Vec3f* pos); +f32 BgCheck_CameraRaycastFloor2(CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Vec3f* pos); +f32 BgCheck_EntityRaycastFloor8(CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Actor* actor, Vec3f* pos); +f32 BgCheck_EntityRaycastFloor9(CollisionContext* colCtx, CollisionPoly** outPoly, s32* bgId, Vec3f* pos); +s32 BgCheck_CheckWallImpl(CollisionContext* colCtx, u16 xpFlags, Vec3f* posResult, Vec3f* posNext, Vec3f* posPrev, f32 radius, CollisionPoly** outPoly, s32* outBgId, Actor* actor, f32 checkHeight, u8 argA); +s32 BgCheck_EntitySphVsWall1(CollisionContext* colCtx, Vec3f* posResult, Vec3f* posNext, Vec3f* posPrev, f32 radius, CollisionPoly** outPoly, f32 checkHeight); +s32 BgCheck_EntitySphVsWall2(CollisionContext* colCtx, Vec3f* posResult, Vec3f* posNext, Vec3f* posPrev, f32 radius, CollisionPoly** outPoly, s32* outBgId, f32 checkHeight); +s32 BgCheck_EntitySphVsWall3(CollisionContext* colCtx, Vec3f* posResult, Vec3f* posNext, Vec3f* posPrev, f32 radius, CollisionPoly** outPoly, s32* outBgId, Actor* actor, f32 checkHeight); +s32 BgCheck_EntitySphVsWall4(CollisionContext* colCtx, Vec3f* posResult, Vec3f* posNext, Vec3f* posPrev, f32 radius, CollisionPoly** outPoly, s32* outBgId, Actor* actor, f32 checkHeight); +s32 BgCheck_CheckCeilingImpl(CollisionContext* colCtx, u16 xpFlags, f32* outY, Vec3f* pos, f32 checkHeight, CollisionPoly** outPoly, s32* outBgId, Actor* actor); +s32 BgCheck_AnyCheckCeiling(CollisionContext* colCtx, f32* outY, Vec3f* pos, f32 checkHeight); +s32 BgCheck_EntityCheckCeiling(CollisionContext* colCtx, f32* outY, Vec3f* pos, f32 checkHeight, CollisionPoly** outPoly, s32* outBgId, Actor* actor); +s32 BgCheck_CameraLineTest1(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkWall, s32 checkFloor, s32 checkCeil, s32 checkOneFace, s32* bgId); +s32 BgCheck_CameraLineTest2(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkWall, s32 checkFloor, s32 checkCeil, s32 checkOneFace, s32* bgId); +s32 BgCheck_EntityLineTest1(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkWall, s32 checkFloor, s32 checkCeil, s32 checkOneFace, s32* bgId); +s32 BgCheck_EntityLineTest2(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkWall, s32 checkFloor, s32 checkCeil, s32 checkOneFace, s32* bgId, Actor* actor); +s32 BgCheck_EntityLineTest3(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkWall, s32 checkFloor, s32 checkCeil, s32 checkOneFace, s32* bgId, Actor* actor, f32 checkDist); +s32 BgCheck_ProjectileLineTest(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkWall, s32 checkFloor, s32 checkCeil, s32 checkOneFace, s32* bgId); +s32 BgCheck_AnyLineTest1(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkOneFace); +s32 BgCheck_AnyLineTest2(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkWall, s32 checkFloor, s32 checkCeil, s32 checkOneFace); +s32 BgCheck_AnyLineTest3(CollisionContext* colCtx, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** outPoly, s32 checkWall, s32 checkFloor, s32 checkCeil, s32 checkOneFace, s32* bgId); +s32 BgCheck_SphVsFirstPolyImpl(CollisionContext* colCtx, u16 xpFlags, CollisionPoly** outPoly, s32* outBgId, Vec3f* center, f32 radius, Actor* actor, u16 bciFlags); +s32 BgCheck_SphVsFirstPoly(CollisionContext* colCtx, Vec3f* center, f32 radius); +s32 BgCheck_SphVsFirstWall(CollisionContext* colCtx, Vec3f* center, f32 radius); +void SSNodeList_Init(SSNodeList* this); +void SSNodeList_Alloc(struct PlayState* play, SSNodeList* this, s32 tblMax, s32 numPolys); +SSNode* SSNodeList_GetNextNode(SSNodeList* this); +u16 SSNodeList_GetNextNodeIdx(SSNodeList* this); +void ScaleRotPos_Init(ScaleRotPos* srp); +void ScaleRotPos_SetValue(ScaleRotPos* srp, Vec3f* scale, Vec3s* rot, Vec3f* pos); +s32 ScaleRotPos_IsEqual(ScaleRotPos* a, ScaleRotPos* b); +void DynaLookup_ResetLists(DynaLookup* dynaLookup); +void DynaLookup_Reset(DynaLookup* dynaLookup); +void DynaLookup_ResetVtxStartIndex(u16* vtxStartIndex); +void DynaLookup_ResetWaterBoxStartIndex(u16* waterBoxStartIndex); +void BgActor_Init(struct PlayState* play, BgActor* bgActor); +void BgActor_SetActor(BgActor* bgActor, Actor* actor, CollisionHeader* colHeader); +s32 BgActor_IsTransformUnchanged(BgActor* bgActor); +void DynaPoly_NullPolyList(CollisionPoly** polyList); +void DynaPoly_AllocPolyList(struct PlayState* play, CollisionPoly** polyList, s32 numPolys); +void DynaPoly_NullVtxList(Vec3s** vtxList); +void DynaPoly_AllocVtxList(struct PlayState* play, Vec3s** vtxList, s32 numVtx); +void DynaPoly_InitWaterBoxList(DynaWaterBoxList* waterBoxList); +void DynaPoly_AllocWaterBoxList(struct PlayState* play, DynaWaterBoxList* waterBoxList, s32 numWaterBoxes); +void DynaPoly_SetBgActorPrevTransform(struct PlayState* play, BgActor* bgActor); +s32 DynaPoly_IsBgIdBgActor(s32 bgId); +void DynaPoly_Init(struct PlayState* play, DynaCollisionContext* dyna); +void DynaPoly_Alloc(struct PlayState* play, DynaCollisionContext* dyna); +s32 DynaPoly_SetBgActor(struct PlayState* play, DynaCollisionContext* dyna, Actor* actor, CollisionHeader* colHeader); +DynaPolyActor* DynaPoly_GetActor(CollisionContext* colCtx, s32 bgId); +void func_800C62BC(struct PlayState* play, DynaCollisionContext* dyna, s32 bgId); +void func_800C6314(struct PlayState* play, DynaCollisionContext* dyna, s32 bgId); +void func_800C636C(struct PlayState* play, DynaCollisionContext* dyna, s32 bgId); +void func_800C63C4(struct PlayState* play, DynaCollisionContext* dyna, s32 bgId); +void func_800C641C(struct PlayState* play, DynaCollisionContext* dyna, s32 bgId); +void func_800C6474(struct PlayState* play, DynaCollisionContext* dyna, s32 bgId); +void func_800C6554(struct PlayState* play, DynaCollisionContext* dyna); +void DynaPoly_DeleteBgActor(struct PlayState* play, DynaCollisionContext* dyna, s32 bgId); +void BgCheck_CalcWaterboxDimensions(Vec3f* minPos, Vec3f* maxXPos, Vec3f* maxZPos, Vec3s* minPosOut, s16* xLength, s16* zLength); +void DynaPoly_ExpandSRT(struct PlayState* play, DynaCollisionContext* dyna, s32 bgId, s32* vtxStartIndex, s32* polyStartIndex, s32* waterBoxStartIndex); +void BgCheck_ResetFlagsIfLoadedActor(struct PlayState* play, DynaCollisionContext* dyna, Actor* actor); +void DynaPoly_Setup(struct PlayState* play, DynaCollisionContext* dyna); +void func_800C756C(DynaCollisionContext* dyna, s32* numPolygons, s32* numVertices, s32* numWaterBoxes); +void DynaPoly_UpdateBgActorTransforms(struct PlayState* play, DynaCollisionContext* dyna); +void CollisionHeader_SegmentedToVirtual(CollisionHeader* colHeader); +void CollisionHeader_GetVirtual(CollisionHeader* colHeader, CollisionHeader** dest); +void BgCheck_InitCollisionHeaders(CollisionContext* colCtx, struct PlayState* play); + +u32 SurfaceType_GetBgCamIndex(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); +u16 BgCheck_GetBgCamSettingImpl(CollisionContext* colCtx, u32 bgCamIndex, s32 bgId); +u16 BgCheck_GetBgCamSetting(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); +u16 BgCheck_GetBgCamCountImpl(CollisionContext* colCtx, u32 bgCamIndex, s32 bgId); +u16 BgCheck_GetBgCamCount(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); +Vec3s* BgCheck_GetBgCamFuncDataImpl(CollisionContext* colCtx, s32 bgCamIndex, s32 bgId); +Vec3s* BgCheck_GetBgCamFuncData(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); + +u32 SurfaceType_GetSceneExitIndex(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); +FloorType SurfaceType_GetFloorType(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); +u32 func_800C99FC(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); +s32 SurfaceType_GetWallFlags(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); +s32 SurfaceType_CheckWallFlag0(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); +s32 SurfaceType_CheckWallFlag1(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); +s32 SurfaceType_CheckWallFlag2(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); +FloorProperty SurfaceType_GetFloorProperty2(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); +FloorProperty SurfaceType_GetFloorProperty(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); +u32 SurfaceType_IsSoft(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); +u32 SurfaceType_IsHorseBlocked(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); +SurfaceMaterial SurfaceType_GetMaterial(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); +u16 SurfaceType_GetSfxOffset(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); +s32 SurfaceType_HasMaterialProperty(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId, s32 propertyType); +FloorEffect SurfaceType_GetFloorEffect(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); +u32 SurfaceType_GetLightSettingIndex(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); +u32 SurfaceType_GetEcho(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); +u32 SurfaceType_IsHookshotSurface(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); +s32 SurfaceType_IsIgnoredByEntities(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); +s32 SurfaceType_IsIgnoredByProjectiles(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); +s32 SurfaceType_IsFloorConveyor(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); +s32 func_800C9DDC(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); +ConveyorSpeed SurfaceType_GetConveyorSpeed(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); +u32 SurfaceType_GetConveyorDirection(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); +u32 SurfaceType_IsWallDamage(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId); +s32 WaterBox_GetSurfaceImpl(struct PlayState* play, CollisionContext* colCtx, f32 x, f32 z, f32* ySurface, WaterBox** outWaterBox, s32* bgId); +s32 WaterBox_GetSurface1(struct PlayState* play, CollisionContext* colCtx, f32 x, f32 z, f32* ySurface, WaterBox** outWaterBox); +s32 WaterBox_GetSurface1_2(struct PlayState* play, CollisionContext* colCtx, f32 x, f32 z, f32* ySurface, WaterBox** outWaterBox); +s32 WaterBox_GetSurface2(struct PlayState* play, CollisionContext* colCtx, Vec3f* pos, f32 surfaceCheckDist, WaterBox** outWaterBox, s32* bgId); +f32 func_800CA568(CollisionContext* colCtx, s32 waterBoxId, s32 bgId); +u16 WaterBox_GetBgCamSetting(CollisionContext* colCtx, WaterBox* waterBox, s32 bgId); +void WaterBox_GetSceneBgCamSetting(CollisionContext* colCtx, WaterBox* waterBox); +u32 WaterBox_GetLightSettingIndex(CollisionContext* colCtx, WaterBox* waterBox); +s32 func_800CA6F0(struct PlayState* play, CollisionContext* colCtx, f32 x, f32 z, f32* ySurface, WaterBox** outWaterBox, s32* bgId); +s32 func_800CA9D0(struct PlayState* play, CollisionContext* colCtx, f32 x, f32 z, f32* ySurface, WaterBox** outWaterBox); +s32 func_800CAA14(CollisionPoly* polyA, CollisionPoly* polyB, Vec3f* pointA, Vec3f* pointB, Vec3f* closestPoint); + #endif diff --git a/src/boot_O2_g3/fault.c b/src/boot_O2_g3/fault.c index 5e4f8e24a..2c8f4a667 100644 --- a/src/boot_O2_g3/fault.c +++ b/src/boot_O2_g3/fault.c @@ -802,8 +802,8 @@ void Fault_ThreadEntry(void* arg) { u32 pad; OSThread* faultedThread; - osSetEventMesg(10, &sFaultContext->queue, (OSMesg)1); - osSetEventMesg(12, &sFaultContext->queue, (OSMesg)2); + osSetEventMesg(OS_EVENT_CPU_BREAK, &sFaultContext->queue, (OSMesg)1); + osSetEventMesg(OS_EVENT_FAULT, &sFaultContext->queue, (OSMesg)2); while (1) { do { osRecvMesg(&sFaultContext->queue, &msg, OS_MESG_BLOCK); diff --git a/src/boot_O2_g3/irqmgr.c b/src/boot_O2_g3/irqmgr.c index 424451a5b..1f1e94ab4 100644 --- a/src/boot_O2_g3/irqmgr.c +++ b/src/boot_O2_g3/irqmgr.c @@ -161,7 +161,7 @@ void IrqMgr_Init(IrqMgr* irqmgr, void* stack, OSPri pri, u8 retraceCount) { irqmgr->lastPrenmiTime = 0; osCreateMesgQueue(&irqmgr->irqQueue, (OSMesg*)irqmgr->irqBuffer, ARRAY_COUNT(irqmgr->irqBuffer)); - osSetEventMesg(0xE, &irqmgr->irqQueue, (OSMesg)0x29D); + osSetEventMesg(OS_EVENT_PRENMI, &irqmgr->irqQueue, (OSMesg)0x29D); osViSetEvent(&irqmgr->irqQueue, (OSMesg)0x29A, retraceCount); osCreateThread(&irqmgr->thread, Z_THREAD_ID_IRQMGR, IrqMgr_ThreadEntry, irqmgr, stack, pri); diff --git a/src/boot_O2_g3/z_std_dma.c b/src/boot_O2_g3/z_std_dma.c index 00d894f74..bbf8e4bed 100644 --- a/src/boot_O2_g3/z_std_dma.c +++ b/src/boot_O2_g3/z_std_dma.c @@ -1,4 +1,3 @@ -#include "prevent_bss_reordering.h" #include "global.h" #include "stack.h" #include "stackcheck.h" diff --git a/src/code/sched.c b/src/code/sched.c index c2630677c..98b005ba1 100644 --- a/src/code/sched.c +++ b/src/code/sched.c @@ -1,4 +1,3 @@ -#include "prevent_bss_reordering.h" #include "global.h" #include "stackcheck.h" diff --git a/src/code/z_actor.c b/src/code/z_actor.c index db01bb345..b58f6700a 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -234,8 +234,9 @@ void ActorShadow_DrawFeet(Actor* actor, Lights* mapper, PlayState* play) { if (distToFloor <= 10.0f) { actor->shape.feetFloorFlags |= spB8; - if ((actor->depthInWater < 0.0f) && (bgId == 0x32) && ((actor->shape.unk_17 & spB8) != 0)) { - if (func_800C9C24(&play->colCtx, poly, bgId, 1)) { + if ((actor->depthInWater < 0.0f) && (bgId == BGCHECK_SCENE) && (actor->shape.unk_17 & spB8)) { + if (SurfaceType_HasMaterialProperty(&play->colCtx, poly, bgId, + MATERIAL_PROPERTY_SOFT_IMPRINT)) { SkinMatrix_MtxFCopy(&sp13C, &spFC); SkinMatrix_MulYRotation(&spFC, actor->shape.rot.y); EffFootmark_Add(play, &spFC, actor, i, feetPosPtr, (actor->shape.shadowScale * 0.3f), @@ -2183,20 +2184,20 @@ void Actor_PlaySfx(Actor* actor, u16 sfxId) { } void func_800B8EF4(PlayState* play, Actor* actor) { - u32 sfxId; + SurfaceSfxOffset surfaceSfxOffset; if (actor->bgCheckFlags & BGCHECKFLAG_WATER) { if (actor->depthInWater < 20.0f) { - sfxId = NA_SE_PL_WALK_WATER0 - SFX_FLAG; + surfaceSfxOffset = SURFACE_SFX_OFFSET_WATER_SHALLOW; } else { - sfxId = NA_SE_PL_WALK_WATER1 - SFX_FLAG; + surfaceSfxOffset = SURFACE_SFX_OFFSET_WATER_DEEP; } } else { - sfxId = SurfaceType_GetSfx(&play->colCtx, actor->floorPoly, actor->floorBgId); + surfaceSfxOffset = SurfaceType_GetSfxOffset(&play->colCtx, actor->floorPoly, actor->floorBgId); } Audio_PlaySfxAtPos(&actor->projectedPos, NA_SE_EV_BOMB_BOUND); - Audio_PlaySfxAtPos(&actor->projectedPos, sfxId + SFX_FLAG); + Audio_PlaySfxAtPos(&actor->projectedPos, NA_SE_PL_WALK_GROUND + surfaceSfxOffset); } void func_800B8F98(Actor* actor, u16 sfxId) { @@ -2248,7 +2249,7 @@ void func_800B9098(Actor* actor) { } s32 func_800B90AC(PlayState* play, Actor* actor, CollisionPoly* polygon, s32 bgId, Vec3f* arg4) { - if (func_800C99D4(&play->colCtx, polygon, bgId) == 8) { + if (SurfaceType_GetFloorType(&play->colCtx, polygon, bgId) == FLOOR_TYPE_8) { return true; } diff --git a/src/code/z_bgcheck.c b/src/code/z_bgcheck.c index c0bfe8047..de0d5d12a 100644 --- a/src/code/z_bgcheck.c +++ b/src/code/z_bgcheck.c @@ -6,44 +6,51 @@ #define DYNA_RAYCAST_WALLS 2 #define DYNA_RAYCAST_CEILINGS 4 -u32 sWallFlags[32] = { - 0, 1, 3, 5, 8, 16, 32, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +u32 sWallFlags[WALL_TYPE_MAX] = { + 0, // WALL_TYPE_0 + WALL_FLAG_0, // WALL_TYPE_1 + WALL_FLAG_0 | WALL_FLAG_1, // WALL_TYPE_2 + WALL_FLAG_0 | WALL_FLAG_2, // WALL_TYPE_3 + WALL_FLAG_3, // WALL_TYPE_4 + WALL_FLAG_4, // WALL_TYPE_5 + WALL_FLAG_5, // WALL_TYPE_6 + WALL_FLAG_6, // WALL_TYPE_7 }; -u16 sSurfaceTypeSfx[] = { - /* 0x00 */ NA_SE_PL_WALK_GROUND - SFX_FLAG, - /* 0x01 */ NA_SE_PL_WALK_SAND - SFX_FLAG, - /* 0x02 */ NA_SE_PL_WALK_CONCRETE - SFX_FLAG, - /* 0x03 */ NA_SE_PL_WALK_DIRT - SFX_FLAG, - /* 0x04 */ NA_SE_PL_WALK_WATER0 - SFX_FLAG, - /* 0x05 */ NA_SE_PL_WALK_WATER1 - SFX_FLAG, - /* 0x06 */ NA_SE_PL_WALK_WATER2 - SFX_FLAG, - /* 0x07 */ NA_SE_PL_WALK_MAGMA - SFX_FLAG, - /* 0x08 */ NA_SE_PL_WALK_GRASS - SFX_FLAG, - /* 0x09 */ NA_SE_PL_WALK_GLASS - SFX_FLAG, - /* 0x0A */ NA_SE_PL_WALK_LADDER - SFX_FLAG, - /* 0x0B */ NA_SE_PL_WALK_GROUND - SFX_FLAG, - /* 0x0C */ NA_SE_PL_WALK_ICE - SFX_FLAG, - /* 0x0D */ NA_SE_PL_WALK_IRON - SFX_FLAG, - /* 0x0E */ NA_SE_PL_WALK_SNOW - SFX_FLAG +u16 sSurfaceSfxOffsets[SURFACE_MATERIAL_MAX] = { + SURFACE_SFX_OFFSET_DIRT, // SURFACE_MATERIAL_DIRT + SURFACE_SFX_OFFSET_SAND, // SURFACE_MATERIAL_SAND + SURFACE_SFX_OFFSET_STONE, // SURFACE_MATERIAL_STONE + SURFACE_SFX_OFFSET_DIRT_SHALLOW, // SURFACE_MATERIAL_DIRT_SHALLOW + SURFACE_SFX_OFFSET_WATER_SHALLOW, // SURFACE_MATERIAL_WATER_SHALLOW + SURFACE_SFX_OFFSET_WATER_DEEP, // SURFACE_MATERIAL_WATER_DEEP + SURFACE_SFX_OFFSET_TALL_GRASS, // SURFACE_MATERIAL_TALL_GRASS + SURFACE_SFX_OFFSET_LAVA, // SURFACE_MATERIAL_LAVA + SURFACE_SFX_OFFSET_GRASS, // SURFACE_MATERIAL_GRASS + SURFACE_SFX_OFFSET_BRIDGE, // SURFACE_MATERIAL_BRIDGE + SURFACE_SFX_OFFSET_WOOD, // SURFACE_MATERIAL_WOOD + SURFACE_SFX_OFFSET_DIRT, // SURFACE_MATERIAL_DIRT_SOFT + SURFACE_SFX_OFFSET_ICE, // SURFACE_MATERIAL_ICE + SURFACE_SFX_OFFSET_CARPET, // SURFACE_MATERIAL_CARPET + SURFACE_SFX_OFFSET_SNOW, // SURFACE_MATERIAL_SNOW }; -u8 D_801B46C0[] = { - /* 0x00 */ 1, - /* 0x01 */ 1, - /* 0x02 */ 0, - /* 0x03 */ 1, - /* 0x04 */ 0, - /* 0x05 */ 0, - /* 0x06 */ 0, - /* 0x07 */ 0, - /* 0x08 */ 0, - /* 0x09 */ 0, - /* 0x0A */ 0, - /* 0x0B */ 0, - /* 0x0C */ 0, - /* 0x0D */ 0, - /* 0x0E */ 1 +u8 sSurfaceMaterialProperties[SURFACE_MATERIAL_MAX] = { + MATERIAL_PROPERTY_SOFT_IMPRINT, // SURFACE_MATERIAL_DIRT + MATERIAL_PROPERTY_SOFT_IMPRINT, // SURFACE_MATERIAL_SAND + 0, // SURFACE_MATERIAL_STONE + MATERIAL_PROPERTY_SOFT_IMPRINT, // SURFACE_MATERIAL_DIRT_SHALLOW + 0, // SURFACE_MATERIAL_WATER_SHALLOW + 0, // SURFACE_MATERIAL_WATER_DEEP + 0, // SURFACE_MATERIAL_TALL_GRASS + 0, // SURFACE_MATERIAL_LAVA + 0, // SURFACE_MATERIAL_GRASS + 0, // SURFACE_MATERIAL_BRIDGE + 0, // SURFACE_MATERIAL_WOOD + 0, // SURFACE_MATERIAL_DIRT_SOFT + 0, // SURFACE_MATERIAL_ICE + 0, // SURFACE_MATERIAL_CARPET + MATERIAL_PROPERTY_SOFT_IMPRINT, // SURFACE_MATERIAL_SNOW }; s16 sSmallMemSceneIds[] = { @@ -51,9 +58,9 @@ s16 sSmallMemSceneIds[] = { }; typedef struct { - s16 sceneId; - u32 memSize; -} BgCheckSceneMemEntry; + /* 0x0 */ s16 sceneId; + /* 0x4 */ u32 memSize; +} BgCheckSceneMemEntry; // size = 0x8 BgCheckSceneMemEntry sSceneMemList[] = { { SCENE_00KEIKOKU, 0xC800 }, @@ -1734,7 +1741,7 @@ f32 BgCheck_RaycastFloorImpl(PlayState* play, CollisionContext* colCtx, u16 xpFl } } - if ((yIntersect != BGCHECK_Y_MIN) && func_800C9B68(colCtx, *outPoly, *outBgId)) { + if ((yIntersect != BGCHECK_Y_MIN) && SurfaceType_IsSoft(colCtx, *outPoly, *outBgId)) { yIntersect -= 1.0f; } return yIntersect; @@ -3204,7 +3211,8 @@ f32 BgCheck_RaycastFloorDynaList(DynaRaycast* dynaRaycast, u32 listType) { (COLPOLY_VIA_FLAG_TEST(polyList[id].flags_vIB, 4) && (((dynaRaycast->actor != NULL) && (dynaRaycast->actor->category != ACTORCAT_PLAYER)) || ((dynaRaycast->actor == NULL) && (dynaRaycast->xpFlags != COLPOLY_IGNORE_CAMERA)))) || - ((dynaRaycast->unk_24 & 0x20) && func_800C9B68(dynaRaycast->colCtx, &polyList[id], dynaRaycast->unk1C))) { + ((dynaRaycast->unk_24 & 0x20) && + SurfaceType_IsSoft(dynaRaycast->colCtx, &polyList[id], dynaRaycast->unk1C))) { if (curNode->next == SS_NULL) { break; } else { @@ -4187,17 +4195,11 @@ Vec3s* BgCheck_GetBgCamFuncData(CollisionContext* colCtx, CollisionPoly* poly, s return BgCheck_GetBgCamFuncDataImpl(colCtx, SurfaceType_GetBgCamIndex(colCtx, poly, bgId), bgId); } -/** - * SurfaceType Get Scene Exit Index - */ u32 SurfaceType_GetSceneExitIndex(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) { return SurfaceType_GetData(colCtx, poly, bgId, 0) >> 8 & 0x1F; } -/** - * SurfaceType Get ? Property (& 0x0003_E000) - */ -u32 func_800C99D4(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) { +FloorType SurfaceType_GetFloorType(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) { return SurfaceType_GetData(colCtx, poly, bgId, 0) >> 13 & 0x1F; } @@ -4208,126 +4210,85 @@ u32 func_800C99FC(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) { return SurfaceType_GetData(colCtx, poly, bgId, 0) >> 18 & 7; } -/** - * SurfaceType Get Wall Property (Internal) - */ -u32 func_800C9A24(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) { +WallType SurfaceType_GetWallType(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) { return SurfaceType_GetData(colCtx, poly, bgId, 0) >> 21 & 0x1F; } -/** - * SurfaceType Get Wall Flags - */ -s32 func_800C9A4C(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) { - return sWallFlags[func_800C9A24(colCtx, poly, bgId)]; +s32 SurfaceType_GetWallFlags(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) { + return sWallFlags[SurfaceType_GetWallType(colCtx, poly, bgId)]; } -/** - * SurfaceType Is Wall Flag (1 << 0) Set - */ -s32 func_800C9A7C(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) { - return (func_800C9A4C(colCtx, poly, bgId) & 1) ? true : false; +s32 SurfaceType_CheckWallFlag0(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) { + return (SurfaceType_GetWallFlags(colCtx, poly, bgId) & WALL_FLAG_0) ? true : false; } -/** - * SurfaceType Is Wall Flag (1 << 1) Set - */ -s32 func_800C9AB0(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) { - return (func_800C9A4C(colCtx, poly, bgId) & 2) ? true : false; +s32 SurfaceType_CheckWallFlag1(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) { + return (SurfaceType_GetWallFlags(colCtx, poly, bgId) & WALL_FLAG_1) ? true : false; } -/** - * SurfaceType Is Wall Flag (1 << 2) Set - */ -s32 func_800C9AE4(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) { - return (func_800C9A4C(colCtx, poly, bgId) & 4) ? true : false; +s32 SurfaceType_CheckWallFlag2(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) { + return (SurfaceType_GetWallFlags(colCtx, poly, bgId) & WALL_FLAG_2) ? true : false; } -u32 func_800C9B18(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) { +FloorProperty SurfaceType_GetFloorProperty2(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) { return SurfaceType_GetData(colCtx, poly, bgId, 0) >> 26 & 0xF; } -/** - * SurfaceType Get Floor Property - */ -u32 func_800C9B40(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) { +FloorProperty SurfaceType_GetFloorProperty(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) { return SurfaceType_GetData(colCtx, poly, bgId, 0) >> 26 & 0xF; } -/** - * SurfaceType Is Floor Minus 1 - */ -u32 func_800C9B68(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) { +u32 SurfaceType_IsSoft(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) { return SurfaceType_GetData(colCtx, poly, bgId, 0) >> 30 & 1; } -/** - * SurfaceType Is Horse Blocked - */ u32 SurfaceType_IsHorseBlocked(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) { return SurfaceType_GetData(colCtx, poly, bgId, 0) >> 31 & 1; } -u32 func_800C9BB8(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) { +SurfaceMaterial SurfaceType_GetMaterial(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) { return SurfaceType_GetData(colCtx, poly, bgId, 1) & 0xF; } -/** - * SurfaceType Get Poly Sfx - */ -u16 SurfaceType_GetSfx(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) { - s32 id = func_800C9BB8(colCtx, poly, bgId); +u16 SurfaceType_GetSfxOffset(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) { + SurfaceMaterial surfaceMaterial = SurfaceType_GetMaterial(colCtx, poly, bgId); - if ((id < 0) || (id > 14)) { - return NA_SE_PL_WALK_GROUND - SFX_FLAG; + if ((surfaceMaterial < 0) || (surfaceMaterial >= ARRAY_COUNT(sSurfaceSfxOffsets))) { + return SURFACE_SFX_OFFSET_DIRT; } - return sSurfaceTypeSfx[id]; + + return sSurfaceSfxOffsets[surfaceMaterial]; } /** - * SurfaceType Get ? (same indexer as Get Poly Sfx) + * Checks if the material has the bitwise propertyType */ -s32 func_800C9C24(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId, s32 arg3) { - s32 id = func_800C9BB8(colCtx, poly, bgId); +s32 SurfaceType_HasMaterialProperty(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId, s32 propertyType) { + SurfaceMaterial surfaceMaterial = SurfaceType_GetMaterial(colCtx, poly, bgId); - if ((id < 0) || (id > 14)) { + if ((surfaceMaterial < 0) || (surfaceMaterial >= ARRAY_COUNT(sSurfaceMaterialProperties))) { return 0; } - return D_801B46C0[id] & arg3; + + return sSurfaceMaterialProperties[surfaceMaterial] & propertyType; } -/** - * SurfaceType get terrain slope surface - */ -u32 SurfaceType_GetSlope(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) { +FloorEffect SurfaceType_GetFloorEffect(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) { return SurfaceType_GetData(colCtx, poly, bgId, 1) >> 4 & 3; } -/** - * SurfaceType get surface lighting setting - */ u32 SurfaceType_GetLightSettingIndex(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) { return SurfaceType_GetData(colCtx, poly, bgId, 1) >> 6 & 0x1F; } -/** - * SurfaceType get echo - */ u32 SurfaceType_GetEcho(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) { return SurfaceType_GetData(colCtx, poly, bgId, 1) >> 11 & 0x3F; } -/** - * SurfaceType Is Hookshot Surface - */ u32 SurfaceType_IsHookshotSurface(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) { return SurfaceType_GetData(colCtx, poly, bgId, 1) >> 17 & 1; } -/** - * CollisionPoly is ignored by entities - * Returns true if poly is ignored by entities, else false - */ s32 SurfaceType_IsIgnoredByEntities(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) { u32 flags; @@ -4338,10 +4299,6 @@ s32 SurfaceType_IsIgnoredByEntities(CollisionContext* colCtx, CollisionPoly* pol return !!flags; } -/** - * CollisionPoly is ignored by projectiles - * Returns true if poly is ignored by projectiles, else false - */ s32 SurfaceType_IsIgnoredByProjectiles(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) { u32 flags; @@ -4384,10 +4341,7 @@ s32 func_800C9DDC(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) { return !!flags; } -/** - * SurfaceType Get Conveyor Surface Speed - */ -u32 SurfaceType_GetConveyorSpeed(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) { +ConveyorSpeed SurfaceType_GetConveyorSpeed(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) { return SurfaceType_GetData(colCtx, poly, bgId, 1) >> 18 & 7; } @@ -4405,9 +4359,6 @@ u32 SurfaceType_GetConveyorDirection(CollisionContext* colCtx, CollisionPoly* po return data & 0x3F; } -/** - * SurfaceType is Wall Damage - */ u32 SurfaceType_IsWallDamage(CollisionContext* colCtx, CollisionPoly* poly, s32 bgId) { return (SurfaceType_GetData(colCtx, poly, bgId, 1) & 0x8000000) ? true : false; } diff --git a/src/code/z_en_hy_code.c b/src/code/z_en_hy_code.c index 2f508bb94..674f4bfa4 100644 --- a/src/code/z_en_hy_code.c +++ b/src/code/z_en_hy_code.c @@ -250,19 +250,20 @@ void EnHy_UpdateCollider(EnHy* enHy, PlayState* play) { s32 EnHy_PlayWalkingSound(EnHy* enHy, PlayState* play, f32 distAboveThreshold) { u8 wasLeftFootOnGround = enHy->isLeftFootOnGround; u8 wasRightFootOnGround = enHy->isRightFootOnGround; - s32 waterSfxId; + SurfaceSfxOffset surfaceSfxOffset; u16 sfxId; u8 isFootOnGround; if (enHy->actor.bgCheckFlags & BGCHECKFLAG_WATER) { if (enHy->actor.depthInWater < 20.0f) { - waterSfxId = NA_SE_PL_WALK_WATER0 - SFX_FLAG; + surfaceSfxOffset = SURFACE_SFX_OFFSET_WATER_SHALLOW; } else { - waterSfxId = NA_SE_PL_WALK_WATER1 - SFX_FLAG; + surfaceSfxOffset = SURFACE_SFX_OFFSET_WATER_DEEP; } - sfxId = waterSfxId + SFX_FLAG; + sfxId = NA_SE_PL_WALK_GROUND + surfaceSfxOffset; } else { - sfxId = SurfaceType_GetSfx(&play->colCtx, enHy->actor.floorPoly, enHy->actor.floorBgId) + SFX_FLAG; + sfxId = NA_SE_PL_WALK_GROUND + + SurfaceType_GetSfxOffset(&play->colCtx, enHy->actor.floorPoly, enHy->actor.floorBgId); } enHy->isLeftFootOnGround = isFootOnGround = SubS_IsFloorAbove(play, &enHy->leftFootPos, distAboveThreshold); diff --git a/src/code/z_message.c b/src/code/z_message.c index 01e4a366d..8681967e6 100644 --- a/src/code/z_message.c +++ b/src/code/z_message.c @@ -106,7 +106,7 @@ void Message_CloseTextbox(PlayState* play) { msgCtx->stateTimer = 2; msgCtx->msgMode = 0x43; msgCtx->unk12020 = 0; - play_sound(NA_SE_PL_WALK_GROUND - SFX_FLAG); + play_sound(NA_SE_NONE); } } diff --git a/src/code/z_play.c b/src/code/z_play.c index 08309b32f..178802486 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -1,3 +1,4 @@ +#include "prevent_bss_reordering.h" #include "global.h" #include "buffers.h" #include "z64debug_display.h" diff --git a/src/code/z_quake.c b/src/code/z_quake.c index e1e12bbf1..d8d526ca3 100644 --- a/src/code/z_quake.c +++ b/src/code/z_quake.c @@ -477,13 +477,13 @@ void Distortion_ClearType(s32 type) { /** * Checks that the bg surface is an underwater conveyor type and if so, returns the conveyor speed */ -s32 Distortion_GetUnderwaterCurrentSpeed(Player* player) { +ConveyorSpeed Distortion_GetUnderwaterCurrentSpeed(Player* player) { if (!SurfaceType_IsFloorConveyor(&sDistortionRequest.play->colCtx, player->actor.floorPoly, player->actor.floorBgId)) { return SurfaceType_GetConveyorSpeed(&sDistortionRequest.play->colCtx, player->actor.floorPoly, player->actor.floorBgId); } - return 0; + return CONVEYOR_SPEED_DISABLED; } void Distortion_Update(void) { @@ -709,21 +709,21 @@ void Distortion_Update(void) { rotZ = 0.3f; switch (Distortion_GetUnderwaterCurrentSpeed(player)) { - case 3: + case CONVEYOR_SPEED_FAST: xScale = -0.06f; yScale = 0.1f; zScale = 0.03f; speed = 0.33f; break; - case 2: + case CONVEYOR_SPEED_MEDIUM: xScale = -0.06f; yScale = 0.1f; zScale = 0.03f; speed = 0.33f; break; - case 1: + case CONVEYOR_SPEED_SLOW: xScale = -0.06f; yScale = 0.1f; zScale = 0.03f; @@ -759,21 +759,21 @@ void Distortion_Update(void) { rotY = 0.0f; rotZ = 0.0f; switch (Distortion_GetUnderwaterCurrentSpeed(player)) { - case 3: + case CONVEYOR_SPEED_FAST: xScale = 0.12f; yScale = 0.12f; zScale = 0.08f; speed = 0.18f; break; - case 2: + case CONVEYOR_SPEED_MEDIUM: xScale = 0.12f; yScale = 0.12f; zScale = 0.08f; speed = 0.12f; break; - case 1: + case CONVEYOR_SPEED_SLOW: xScale = 0.12f; yScale = 0.12f; zScale = 0.08f; diff --git a/src/libultra/io/pimgr.c b/src/libultra/io/pimgr.c index fefffd653..63cc7ba66 100644 --- a/src/libultra/io/pimgr.c +++ b/src/libultra/io/pimgr.c @@ -19,7 +19,7 @@ void osCreatePiManager(OSPri pri, OSMesgQueue* cmdQ, OSMesg* cmdBuf, s32 cmdMsgC if (!__osPiAccessQueueEnabled) { __osPiCreateAccessQueue(); } - osSetEventMesg(8, &D_8009E3D0, (OSMesg)0x22222222); + osSetEventMesg(OS_EVENT_PI, &D_8009E3D0, (OSMesg)0x22222222); oldPri = -1; myPri = osGetThreadPri(NULL); if (myPri < pri) { diff --git a/src/overlays/actors/ovl_Bg_Ikana_Block/z_bg_ikana_block.c b/src/overlays/actors/ovl_Bg_Ikana_Block/z_bg_ikana_block.c index b6206ecb7..5f35aaa4d 100644 --- a/src/overlays/actors/ovl_Bg_Ikana_Block/z_bg_ikana_block.c +++ b/src/overlays/actors/ovl_Bg_Ikana_Block/z_bg_ikana_block.c @@ -336,8 +336,8 @@ void func_80B7F398(BgIkanaBlock* this, PlayState* play) { if (func_80B7EE70(this, play)) { Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_BLOCK_BOUND); Actor_PlaySfx(&this->dyna.actor, - SurfaceType_GetSfx(&play->colCtx, this->dyna.actor.floorPoly, this->dyna.actor.floorBgId) + - SFX_FLAG); + NA_SE_PL_WALK_GROUND + SurfaceType_GetSfxOffset(&play->colCtx, this->dyna.actor.floorPoly, + this->dyna.actor.floorBgId)); func_80B7F0A4(this); } } diff --git a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c index 423c70fc5..83bdfe71a 100644 --- a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c +++ b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c @@ -648,7 +648,7 @@ void DmStk_PlaySfxForPlayingWithFairiesCutscene(DmStk* this, PlayState* play) { case 72: case 77: case 79: - Actor_PlaySfx(&this->actor, NA_SE_PL_WALK_WATER2); + Actor_PlaySfx(&this->actor, NA_SE_PL_WALK_GROUND + SURFACE_SFX_OFFSET_TALL_GRASS); Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_WALK); break; diff --git a/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c b/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c index 57fa310e1..01df27715 100644 --- a/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c +++ b/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c @@ -47,8 +47,8 @@ void func_808BAAF4(DoorWarp1* this, PlayState* play); void func_808BABF4(DoorWarp1* this, PlayState* play); void func_808BB8D4(DoorWarp1* this, PlayState* play, s32 arg2); -static s16 D_808BC000; -static f32 D_808BC004; +s16 D_808BC000; +f32 D_808BC004; ActorInit Door_Warp1_InitVars = { ACTOR_DOOR_WARP1, diff --git a/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.c b/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.c index 9e99d4fba..a1e2798df 100644 --- a/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.c +++ b/src/overlays/actors/ovl_En_Bbfall/z_en_bbfall.c @@ -211,9 +211,9 @@ void EnBbfall_Thaw(EnBbfall* this, PlayState* play) { */ s32 EnBbfall_IsTouchingLava(EnBbfall* this, PlayState* play) { if (!SurfaceType_IsWallDamage(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId)) { - u32 floorType = func_800C99D4(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId); + FloorType floorType = SurfaceType_GetFloorType(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId); - if ((floorType == 2) || (floorType == 3) || (floorType == 9)) { + if ((floorType == FLOOR_TYPE_2) || (floorType == FLOOR_TYPE_3) || (floorType == FLOOR_TYPE_9)) { return true; } } diff --git a/src/overlays/actors/ovl_En_Bom/z_en_bom.c b/src/overlays/actors/ovl_En_Bom/z_en_bom.c index a99e9063c..4ebdbe916 100644 --- a/src/overlays/actors/ovl_En_Bom/z_en_bom.c +++ b/src/overlays/actors/ovl_En_Bom/z_en_bom.c @@ -230,7 +230,7 @@ void EnBom_Move(EnBom* this, PlayState* play) { Math_StepToF(&this->actor.speed, 0.0f, 0.08f); } else { Vec3f* sp58; - u32 sp54 = func_800C99D4(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId); + FloorType floorType = SurfaceType_GetFloorType(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId); Vec3f slopeNormal; s16 downwardSlopeYaw; f32 sp40; @@ -239,11 +239,11 @@ void EnBom_Move(EnBom* this, PlayState* play) { sp58 = &D_80872E68[this->isPowderKeg]; - if (sp54 == 5) { + if (floorType == FLOOR_TYPE_5) { sp58 = &D_80872E68[2]; } - if ((sp54 == 4) || (sp54 == 14) || (sp54 == 15)) { + if ((floorType == FLOOR_TYPE_4) || (floorType == FLOOR_TYPE_14) || (floorType == FLOOR_TYPE_15)) { s16 sp36; Math_ApproachF(&this->actor.shape.yOffset, 0.0f, 0.1f, 50.0f); @@ -262,8 +262,8 @@ void EnBom_Move(EnBom* this, PlayState* play) { sp3C += 3.0f * slopeNormal.z; sp38 = sqrtf(SQ(sp40) + SQ(sp3C)); - if ((sp38 < this->actor.speed) || - (SurfaceType_GetSlope(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId) == 1)) { + if ((sp38 < this->actor.speed) || (SurfaceType_GetFloorEffect(&play->colCtx, this->actor.floorPoly, + this->actor.floorBgId) == FLOOR_EFFECT_1)) { if (sp38 > 16.0f) { this->actor.speed = 16.0f; } else { @@ -286,7 +286,7 @@ void EnBom_Move(EnBom* this, PlayState* play) { if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) { Actor_PlaySfx(&this->actor, this->isPowderKeg ? NA_SE_EV_TRE_BOX_BOUND : NA_SE_EV_BOMB_BOUND); if (this->actor.velocity.y < sp58->y) { - if ((sp54 == 4) || (sp54 == 14) || (sp54 == 15)) { + if ((floorType == FLOOR_TYPE_4) || (floorType == FLOOR_TYPE_14) || (floorType == FLOOR_TYPE_15)) { this->actor.velocity.y = 0.0f; } else { this->actor.velocity.y = this->actor.velocity.y * sp58->z; @@ -327,7 +327,7 @@ void EnBom_Explode(EnBom* this, PlayState* play) { static Color_RGBA8 D_80872E90 = { 185, 140, 70, 255 }; static Color_RGBA8 D_80872E94 = { 255, 255, 255, 255 }; s32 i; - s32 temp_s0; + FloorType floorType; f32 temp_f20; s32 pad; f32 spCC; @@ -394,11 +394,11 @@ void EnBom_Explode(EnBom* this, PlayState* play) { spB4.y = this->actor.world.pos.y + 500.0f; spB4.z = this->actor.world.pos.z + spC0.z; if (BgCheck_EntityRaycastFloor3(&play->colCtx, &spB0, &spAC, &spB4) != BGCHECK_Y_MIN) { - temp_s0 = func_800C99D4(&play->colCtx, spB0, spAC); + floorType = SurfaceType_GetFloorType(&play->colCtx, spB0, spAC); temp_f20 = BgCheck_EntityRaycastFloor1(&play->colCtx, &spB0, &spB4); - if ((temp_s0 == 4) || (temp_s0 == 15) || (temp_s0 == 14)) { - if (temp_s0 == 4) { + if ((floorType == FLOOR_TYPE_4) || (floorType == FLOOR_TYPE_15) || (floorType == FLOOR_TYPE_14)) { + if (floorType == FLOOR_TYPE_4) { sp84 = D_80872E90; sp80 = D_80872E90; } else { diff --git a/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c b/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c index a652e574f..175ac69a8 100644 --- a/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c +++ b/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c @@ -193,7 +193,7 @@ void EnBomChu_WaitForRelease(EnBomChu* this, PlayState* play) { s32 EnBomChu_IsOnCollisionPoly(PlayState* play, Vec3f* posA, Vec3f* posB, Vec3f* posResult, CollisionPoly** poly, s32* bgId) { if ((BgCheck_EntityLineTest1(&play->colCtx, posA, posB, posResult, poly, true, true, true, true, bgId)) && - (!(func_800C9A4C(&play->colCtx, *poly, *bgId) & 0x30))) { + !(SurfaceType_GetWallFlags(&play->colCtx, *poly, *bgId) & (WALL_FLAG_4 | WALL_FLAG_5))) { return true; } diff --git a/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c b/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c index bc7841ddc..a57814337 100644 --- a/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c +++ b/src/overlays/actors/ovl_En_Dodongo/z_en_dodongo.c @@ -358,7 +358,7 @@ void func_80876930(EnDodongo* this, PlayState* play, Vec3f* arg2) { s16 temp2; f32 temp3; - if (func_800C9BB8(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId) == COLPOLY_SURFACE_SNOW) { + if (SurfaceType_GetMaterial(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId) == SURFACE_MATERIAL_SNOW) { sp80 = &D_8087932C; sp7C = &D_80879330; } else { diff --git a/src/overlays/actors/ovl_En_Elf/z_en_elf.c b/src/overlays/actors/ovl_En_Elf/z_en_elf.c index 13075fd55..fd800c27f 100644 --- a/src/overlays/actors/ovl_En_Elf/z_en_elf.c +++ b/src/overlays/actors/ovl_En_Elf/z_en_elf.c @@ -1090,7 +1090,7 @@ void func_8088EFA4(EnElf* this, PlayState* play) { } } else if ((arrayPointerActor != NULL) && (player->targetedActor != NULL)) { u8 temp = this->unk_269; - u16 targetSfxId = this->unk_269 == 0 ? NA_SE_PL_WALK_GROUND - SFX_FLAG : NA_SE_PL_WALK_GROUND - SFX_FLAG; + u16 targetSfxId = (this->unk_269 == 0) ? NA_SE_NONE : NA_SE_NONE; if (!temp) { Actor_PlaySfx(&this->actor, targetSfxId); diff --git a/src/overlays/actors/ovl_En_Famos/z_en_famos.c b/src/overlays/actors/ovl_En_Famos/z_en_famos.c index 1fc83d8a1..3d68d34d7 100644 --- a/src/overlays/actors/ovl_En_Famos/z_en_famos.c +++ b/src/overlays/actors/ovl_En_Famos/z_en_famos.c @@ -500,7 +500,7 @@ void EnFamos_Chase(EnFamos* this, PlayState* play) { this->actor.world.rot.x = -Actor_WorldPitchTowardPoint(&this->actor, &abovePlayerPos); Math_StepToF(&this->actor.speed, 6.0f, 0.5f); - surfaceType = func_800C9B18(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId); + surfaceType = SurfaceType_GetFloorProperty2(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId); if ((this->actor.xzDistToPlayer < 30.0f) && (this->actor.floorHeight > BGCHECK_Y_MIN) && // close enough (surfaceType != 0xC && surfaceType != 0xD)) { EnFamos_SetupAttackAim(this); @@ -543,7 +543,7 @@ void EnFamos_Attack(EnFamos* this, PlayState* play) { this->emblemCollider.base.acFlags &= ~AC_ON; } - surfaceType = func_800C9B18(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId); + surfaceType = SurfaceType_GetFloorProperty2(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId); hitFloor = this->actor.bgCheckFlags & BGCHECKFLAG_GROUND; if (hitFloor || (this->actor.floorHeight == BGCHECK_Y_MIN) || (surfaceType == 0xC) || (surfaceType == 0xD)) { this->collider1.base.atFlags &= ~AT_ON; diff --git a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c index af0456d57..e91632700 100644 --- a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c +++ b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c @@ -2445,7 +2445,7 @@ void EnFishing_UpdateLure(EnFishing* this, PlayState* play) { sLureRot.x = 0.0f; if (CHECK_BTN_ALL(input->press.button, BTN_B)) { D_809101C0 += 6.0f; - Audio_PlaySfxAtPos(&D_8090D614, NA_SE_PL_WALK_SAND); + Audio_PlaySfxAtPos(&D_8090D614, NA_SE_PL_WALK_GROUND + SURFACE_SFX_OFFSET_SAND); } } else { if (D_809101C0 > 150.0f) { diff --git a/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c b/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c index b429c7e4b..b07d1f2c7 100644 --- a/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c +++ b/src/overlays/actors/ovl_En_Goroiwa/z_en_goroiwa.c @@ -1431,7 +1431,7 @@ void EnGoroiwa_Update(Actor* thisx, PlayState* play) { Vec3f sp50; f32 sp4C; s32 sp48 = true; - u32 temp_v0_2; + FloorType floorType; CollisionPoly* tmp; if (!(player->stateFlags1 & @@ -1453,9 +1453,9 @@ void EnGoroiwa_Update(Actor* thisx, PlayState* play) { if (this->actor.flags & ACTOR_FLAG_40) { tmp = this->actor.floorPoly; if (tmp != NULL) { - temp_v0_2 = func_800C99D4(&play->colCtx, tmp, this->actor.floorBgId); + floorType = SurfaceType_GetFloorType(&play->colCtx, tmp, this->actor.floorBgId); - if ((temp_v0_2 == 14) || (temp_v0_2 == 15)) { + if ((floorType == FLOOR_TYPE_14) || (floorType == FLOOR_TYPE_15)) { if (!(this->unk_1E5 & 0x40)) { sp50.x = this->actor.world.pos.x; sp50.y = this->actor.floorHeight; diff --git a/src/overlays/actors/ovl_En_Horse/z_en_horse.c b/src/overlays/actors/ovl_En_Horse/z_en_horse.c index 59fea362a..4b5878110 100644 --- a/src/overlays/actors/ovl_En_Horse/z_en_horse.c +++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.c @@ -3472,7 +3472,7 @@ s32 EnHorse_CalcFloorHeight(EnHorse* this, PlayState* play, Vec3f* pos, Collisio if ((COLPOLY_GET_NORMAL((*polyFloor)->normal.y) < 0.81915206f) || SurfaceType_IsHorseBlocked(&play->colCtx, *polyFloor, *bgId) || - (func_800C99D4(&play->colCtx, *polyFloor, *bgId) == 7)) { + (SurfaceType_GetFloorType(&play->colCtx, *polyFloor, *bgId) == FLOOR_TYPE_7)) { return 3; // Horse blocked surface } @@ -3619,7 +3619,7 @@ void EnHorse_CheckFloors(EnHorse* this, PlayState* play) { if ((ny < 0.81915206f) || SurfaceType_IsHorseBlocked(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId) || - (func_800C99D4(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId) == 7)) { + (SurfaceType_GetFloorType(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId) == FLOOR_TYPE_7)) { if (this->actor.speed >= 0.0f) { EnHorse_ObstructMovement(this, play, 4, galloping); } else { @@ -3891,7 +3891,7 @@ void EnHorse_UpdateBgCheckInfo(EnHorse* this, PlayState* play) { temp_f0 = COLPOLY_GET_NORMAL(obstacleFloor->normal.y); if ((temp_f0 < 0.81915206f) || SurfaceType_IsHorseBlocked(&play->colCtx, obstacleFloor, bgId) || - (func_800C99D4(&play->colCtx, obstacleFloor, bgId) == 7)) { + (SurfaceType_GetFloorType(&play->colCtx, obstacleFloor, bgId) == FLOOR_TYPE_7)) { if ((Math_CosS(sp7E) < 0.9f) && (movingFast == true) && (this->playerControlled == true) && (this->action != ENHORSE_ACTION_STOPPING) && (play->sceneId != SCENE_KOEPONARACE)) { this->stateFlags |= ENHORSE_FORCE_REVERSING; @@ -3954,7 +3954,7 @@ void EnHorse_UpdateBgCheckInfo(EnHorse* this, PlayState* play) { temp_f0 = COLPOLY_GET_NORMAL(obstacleFloor->normal.y); if ((temp_f0 < 0.81915206f) || SurfaceType_IsHorseBlocked(&play->colCtx, obstacleFloor, bgId) || - (func_800C99D4(&play->colCtx, obstacleFloor, bgId) == 7)) { + (SurfaceType_GetFloorType(&play->colCtx, obstacleFloor, bgId) == FLOOR_TYPE_7)) { if ((movingFast == true) && (this->playerControlled == true) && (this->action != ENHORSE_ACTION_STOPPING) && (play->sceneId != SCENE_KOEPONARACE)) { this->stateFlags |= ENHORSE_FORCE_REVERSING; @@ -4122,7 +4122,8 @@ s32 EnHorse_UpdateConveyors(EnHorse* this, PlayState* play) { s16 conveyorDir; if ((this->actor.floorPoly == NULL) || (&this->actor != player->rideActor) || - !SurfaceType_GetConveyorSpeed(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId)) { + (SurfaceType_GetConveyorSpeed(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId) == + CONVEYOR_SPEED_DISABLED)) { return false; } diff --git a/src/overlays/actors/ovl_En_In/z_en_in.c b/src/overlays/actors/ovl_En_In/z_en_in.c index e3d183fe4..27c8de507 100644 --- a/src/overlays/actors/ovl_En_In/z_en_in.c +++ b/src/overlays/actors/ovl_En_In/z_en_in.c @@ -169,12 +169,12 @@ s32 func_808F3178(EnIn* this, PlayState* play) { u8 tmp; this->unk260 = tmp = SubS_IsFloorAbove(play, &this->unk248, -6.0f); - if (this->unk260 != 0 && prevUnk260 == 0 && tmp) { - Actor_PlaySfx(&this->actor, NA_SE_PL_WALK_CONCRETE); + if ((this->unk260 != 0) && (prevUnk260 == 0) && tmp) { + Actor_PlaySfx(&this->actor, NA_SE_PL_WALK_GROUND + SURFACE_SFX_OFFSET_STONE); } this->unk261 = tmp = SubS_IsFloorAbove(play, &this->unk254, -6.0f); - if (this->unk261 != 0 && prevUnk261 == 0 && tmp) { - Actor_PlaySfx(&this->actor, NA_SE_PL_WALK_CONCRETE); + if ((this->unk261 != 0) && (prevUnk261 == 0) && tmp) { + Actor_PlaySfx(&this->actor, NA_SE_PL_WALK_GROUND + SURFACE_SFX_OFFSET_STONE); } return 0; diff --git a/src/overlays/actors/ovl_En_Kame/z_en_kame.c b/src/overlays/actors/ovl_En_Kame/z_en_kame.c index 0a9689b17..9777c7433 100644 --- a/src/overlays/actors/ovl_En_Kame/z_en_kame.c +++ b/src/overlays/actors/ovl_En_Kame/z_en_kame.c @@ -289,11 +289,12 @@ void func_80AD75A8(EnKame* this, PlayState* play) { if ((this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && (this->actor.speed >= 3.0f)) { if ((play->gameplayFrames % 2) == 0) { - u32 temp_v0 = func_800C9BB8(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId); + SurfaceMaterial surfaceMaterial = + SurfaceType_GetMaterial(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId); - if ((temp_v0 == 0) || (temp_v0 == 1)) { + if ((surfaceMaterial == SURFACE_MATERIAL_DIRT) || (surfaceMaterial == SURFACE_MATERIAL_SAND)) { func_800B1210(play, &this->actor.world.pos, &D_80AD8E5C, &gZeroVec3f, 550, 100); - } else if (temp_v0 == 14) { + } else if (surfaceMaterial == SURFACE_MATERIAL_SNOW) { func_800B0DE0(play, &this->actor.world.pos, &D_80AD8E5C, &gZeroVec3f, &D_80AD8E54, &D_80AD8E58, 550, 100); } diff --git a/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c b/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c index 0390e1459..c4ef32e31 100644 --- a/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c +++ b/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c @@ -209,7 +209,7 @@ void EnKanban_Update(Actor* thisx, PlayState* play) { Vec3f offset; EnKanban* piece; EnKanban* signpost; - s32 temp_v0_18; + FloorType floorType; f32 phi_f0; s32 pad2; @@ -517,11 +517,11 @@ void EnKanban_Update(Actor* thisx, PlayState* play) { } if (onGround) { - temp_v0_18 = func_800C99D4(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId); + floorType = SurfaceType_GetFloorType(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId); - if ((temp_v0_18 == 15) || (temp_v0_18 == 14)) { + if ((floorType == FLOOR_TYPE_15) || (floorType == FLOOR_TYPE_14)) { this->unk_197 = 1; - } else if (temp_v0_18 == 5) { + } else if (floorType == FLOOR_TYPE_5) { this->unk_197 = -1; } @@ -623,7 +623,7 @@ void EnKanban_Update(Actor* thisx, PlayState* play) { if (bounced) { if (this->unk_197 > 0) { - Actor_PlaySfx(&this->actor, NA_SE_PL_WALK_SNOW); + Actor_PlaySfx(&this->actor, NA_SE_PL_WALK_GROUND + SURFACE_SFX_OFFSET_SNOW); } else { Actor_PlaySfx(&this->actor, NA_SE_EV_WOODPLATE_BOUND); } diff --git a/src/overlays/actors/ovl_En_Mm/z_en_mm.c b/src/overlays/actors/ovl_En_Mm/z_en_mm.c index ad25aa70c..3aef8341a 100644 --- a/src/overlays/actors/ovl_En_Mm/z_en_mm.c +++ b/src/overlays/actors/ovl_En_Mm/z_en_mm.c @@ -149,7 +149,8 @@ void func_80965DB4(EnMm* this, PlayState* play) { temp_f2 = sqrtf(SQ(temp_f14) + SQ(temp_f12)); if ((temp_f2 < this->actor.speed) || - (SurfaceType_GetSlope(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId) == 1)) { + (SurfaceType_GetFloorEffect(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId) == + FLOOR_EFFECT_1)) { this->actor.speed = CLAMP_MAX(temp_f2, 16.0f); this->actor.world.rot.y = Math_Atan2S_XY(temp_f12, temp_f14); } diff --git a/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c b/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c index 88e69021f..99783d77d 100644 --- a/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c +++ b/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c @@ -1089,8 +1089,9 @@ void func_80A6B0D8(EnMushi2* this, PlayState* play) { s32 sp44 = 0; if (this->poly != NULL) { - u32 temp_v0 = func_800C99D4(&play->colCtx, this->poly, this->polyBgId); - if ((temp_v0 == 5) || (temp_v0 == 14) || (temp_v0 == 15)) { + FloorType floorType = SurfaceType_GetFloorType(&play->colCtx, this->poly, this->polyBgId); + + if ((floorType == FLOOR_TYPE_5) || (floorType == FLOOR_TYPE_14) || (floorType == FLOOR_TYPE_15)) { sp44 = 1; } } diff --git a/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c b/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c index 15e65b6ce..9c6fe4a9d 100644 --- a/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c +++ b/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c @@ -140,11 +140,12 @@ void EnNutsball_Update(Actor* thisx, PlayState* play2) { UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_2 | UPDBGCHECKINFO_FLAG_4); if (this->actor.bgCheckFlags & BGCHECKFLAG_WALL) { - if (func_800C9A4C(&play->colCtx, this->actor.wallPoly, this->actor.wallBgId) & 0x30) { + if (SurfaceType_GetWallFlags(&play->colCtx, this->actor.wallPoly, this->actor.wallBgId) & + (WALL_FLAG_4 | WALL_FLAG_5)) { this->actor.bgCheckFlags &= ~BGCHECKFLAG_WALL; if (BgCheck_EntityLineTest1(&play->colCtx, &this->actor.prevPos, &worldPos, &this->actor.world.pos, &poly, true, false, false, true, &bgId)) { - if (func_800C9A4C(&play->colCtx, poly, bgId) & 0x30) { + if (SurfaceType_GetWallFlags(&play->colCtx, poly, bgId) & (WALL_FLAG_4 | WALL_FLAG_5)) { this->actor.world.pos.x += this->actor.velocity.x * 0.01f; this->actor.world.pos.z += this->actor.velocity.z * 0.01f; } else { diff --git a/src/overlays/actors/ovl_En_Rat/z_en_rat.c b/src/overlays/actors/ovl_En_Rat/z_en_rat.c index 39a240e01..d9c2d61f2 100644 --- a/src/overlays/actors/ovl_En_Rat/z_en_rat.c +++ b/src/overlays/actors/ovl_En_Rat/z_en_rat.c @@ -355,7 +355,8 @@ s32 EnRat_IsOnCollisionPoly(PlayState* play, Vec3f* posA, Vec3f* posB, Vec3f* po } if (BgCheck_EntityLineTest1(&play->colCtx, posA, posB, posResult, poly, 1, 1, 1, 1, bgId)) { - if (!(func_800C9A4C(&play->colCtx, *poly, *bgId) & 0x30) && (!isOnWater || (waterSurface <= posResult->y))) { + if (!(SurfaceType_GetWallFlags(&play->colCtx, *poly, *bgId) & (WALL_FLAG_4 | WALL_FLAG_5)) && + (!isOnWater || (waterSurface <= posResult->y))) { return true; } } diff --git a/src/overlays/actors/ovl_En_Ru/z_en_ru.c b/src/overlays/actors/ovl_En_Ru/z_en_ru.c index 47d05f8ab..527d41b99 100644 --- a/src/overlays/actors/ovl_En_Ru/z_en_ru.c +++ b/src/overlays/actors/ovl_En_Ru/z_en_ru.c @@ -138,7 +138,7 @@ s32 EnRu_ChangeAnim(SkelAnime* skelAnime, s16 animIndex) { s32 EnRu_PlayWalkingSound(EnRu* this, PlayState* play) { u8 leftWasGrounded; u8 rightWasGrounded; - s32 waterSfxId; + SurfaceSfxOffset surfaceSfxOffset; s16 sfxId; u8 isFootGrounded; @@ -147,15 +147,16 @@ s32 EnRu_PlayWalkingSound(EnRu* this, PlayState* play) { if (this->actor.bgCheckFlags & BGCHECKFLAG_WATER) { if (this->actor.depthInWater < 20.0f) { - waterSfxId = NA_SE_PL_WALK_WATER0 - SFX_FLAG; + surfaceSfxOffset = SURFACE_SFX_OFFSET_WATER_SHALLOW; } else { - waterSfxId = NA_SE_PL_WALK_WATER1 - SFX_FLAG; + surfaceSfxOffset = SURFACE_SFX_OFFSET_WATER_DEEP; } - sfxId = waterSfxId + SFX_FLAG; + sfxId = NA_SE_PL_WALK_GROUND + surfaceSfxOffset; } else { - sfxId = SurfaceType_GetSfx(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId) + SFX_FLAG; + sfxId = NA_SE_PL_WALK_GROUND + + SurfaceType_GetSfxOffset(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId); } this->isLeftFootGrounded = isFootGrounded = SubS_IsFloorAbove(play, &this->leftFootPos, -6.0f); diff --git a/src/overlays/actors/ovl_En_Sw/z_en_sw.c b/src/overlays/actors/ovl_En_Sw/z_en_sw.c index bcf380cba..f37605707 100644 --- a/src/overlays/actors/ovl_En_Sw/z_en_sw.c +++ b/src/overlays/actors/ovl_En_Sw/z_en_sw.c @@ -352,7 +352,7 @@ s32 func_808D9440(PlayState* play, Vec3f* posA, Vec3f* posB, Vec3f* posResult, C s32 ret = false; if (BgCheck_EntityLineTest1(&play->colCtx, posA, posB, posResult, outPoly, true, true, true, true, bgId) && - !(func_800C9A4C(&play->colCtx, *outPoly, *bgId) & 0x30)) { + !(SurfaceType_GetWallFlags(&play->colCtx, *outPoly, *bgId) & (WALL_FLAG_4 | WALL_FLAG_5))) { ret = true; } return ret; diff --git a/src/overlays/actors/ovl_En_Test/z_en_test.c b/src/overlays/actors/ovl_En_Test/z_en_test.c index 7f0a3e971..d98790c6f 100644 --- a/src/overlays/actors/ovl_En_Test/z_en_test.c +++ b/src/overlays/actors/ovl_En_Test/z_en_test.c @@ -161,18 +161,18 @@ void EnTest_Init(Actor* thisx, PlayState* play2) { PlayState* play = play2; EnTest* this = THIS; MtxF sp38; - s32 sp34; + s32 bgId; this->unk_209 = 0; this->unk_174 = 0; if (thisx->params > 0) { Actor_SetScale(thisx, thisx->params / 100000.0f); - this->unk_20A = 0; + this->surfaceMaterial = SURFACE_MATERIAL_DIRT; } else { thisx->floorPoly = NULL; thisx->world.pos.y += 10.0f; - thisx->floorHeight = BgCheck_EntityRaycastFloor3(&play->colCtx, &thisx->floorPoly, &sp34, &thisx->world.pos); + thisx->floorHeight = BgCheck_EntityRaycastFloor3(&play->colCtx, &thisx->floorPoly, &bgId, &thisx->world.pos); if ((thisx->floorPoly == NULL) || (thisx->floorHeight == BGCHECK_Y_MIN)) { Actor_Kill(thisx); @@ -183,7 +183,7 @@ void EnTest_Init(Actor* thisx, PlayState* play2) { func_800C0094(thisx->floorPoly, thisx->world.pos.x, thisx->floorHeight, thisx->world.pos.z, &sp38); Matrix_MtxFToYXZRot(&sp38, &thisx->shape.rot, true); thisx->world.rot = thisx->shape.rot; - this->unk_20A = func_800C9BB8(&play->colCtx, thisx->floorPoly, sp34); + this->surfaceMaterial = SurfaceType_GetMaterial(&play->colCtx, thisx->floorPoly, bgId); } func_80183430(&this->skeletonInfo, &gameplay_keep_Blob_06EB70, &gameplay_keep_Blob_06BB0C, this->unk_178, @@ -257,7 +257,8 @@ void EnTest_Draw(Actor* thisx, PlayState* play) { sp2C = 29; } - if ((this->unk_20A == 15) || (this->unk_20A == 14)) { + //! @bug Checks for non-existent SURFACE_MATERIAL_MAX material + if ((this->surfaceMaterial == SURFACE_MATERIAL_MAX) || (this->surfaceMaterial == SURFACE_MATERIAL_SNOW)) { AnimatedMat_DrawStep(play, Lib_SegmentedToVirtual(gameplay_keep_Matanimheader_06B730), sp2C); } else { AnimatedMat_DrawStep(play, Lib_SegmentedToVirtual(gameplay_keep_Matanimheader_06B6A0), sp2C); diff --git a/src/overlays/actors/ovl_En_Test/z_en_test.h b/src/overlays/actors/ovl_En_Test/z_en_test.h index 2b8d62993..68395a96a 100644 --- a/src/overlays/actors/ovl_En_Test/z_en_test.h +++ b/src/overlays/actors/ovl_En_Test/z_en_test.h @@ -24,7 +24,7 @@ typedef struct EnTest { /* 0x1C0 */ Vec3s unk_1C0[12]; /* 0x208 */ u8 unk_208; /* 0x209 */ u8 unk_209; - /* 0x20A */ u8 unk_20A; + /* 0x20A */ u8 surfaceMaterial; /* 0x20C */ EnTestStruct unk_20C[20]; } EnTest; // size = 0x6BC diff --git a/src/overlays/actors/ovl_En_Tite/z_en_tite.c b/src/overlays/actors/ovl_En_Tite/z_en_tite.c index 5b77c1399..3d5c7a741 100644 --- a/src/overlays/actors/ovl_En_Tite/z_en_tite.c +++ b/src/overlays/actors/ovl_En_Tite/z_en_tite.c @@ -197,7 +197,7 @@ void func_80893A18(EnTite* this) { s32 func_80893A34(EnTite* this, PlayState* play) { if ((this->actor.params == ENTITE_MINUS_2) && (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND) && - (func_800C99D4(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId) == 5)) { + (SurfaceType_GetFloorType(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId) == FLOOR_TYPE_5)) { return true; } return false; @@ -240,13 +240,14 @@ void func_80893BCC(EnTite* this, PlayState* play) { s32 j; if (this->actor.bgCheckFlags & BGCHECKFLAG_GROUND_TOUCH) { - u32 surface = func_800C9BB8(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId); + SurfaceMaterial surfaceMaterial = + SurfaceType_GetMaterial(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId); - if ((surface == COLPOLY_SURFACE_GROUND) || (surface == COLPOLY_SURFACE_SAND)) { + if ((surfaceMaterial == SURFACE_MATERIAL_DIRT) || (surfaceMaterial == SURFACE_MATERIAL_SAND)) { for (i = 5; i < ARRAY_COUNT(this->limbPos); i++) { func_800BBFB0(play, &this->limbPos[i], 1.0f, 2, 80, 15, 1); } - } else if (surface == COLPOLY_SURFACE_SNOW) { + } else if (surfaceMaterial == SURFACE_MATERIAL_SNOW) { Vec3f* ptr; for (i = 5; i < ARRAY_COUNT(this->limbPos); i++) { diff --git a/src/overlays/actors/ovl_En_Tk/z_en_tk.c b/src/overlays/actors/ovl_En_Tk/z_en_tk.c index 849214aba..91fd66635 100644 --- a/src/overlays/actors/ovl_En_Tk/z_en_tk.c +++ b/src/overlays/actors/ovl_En_Tk/z_en_tk.c @@ -1035,13 +1035,13 @@ s32 func_80AEE86C(EnTk* this, PlayState* play) { s32 pad; s32 ret = false; s32 pad2; - CollisionPoly* sp38; - s32 sp34; + CollisionPoly* groundPoly; + s32 bgId; Vec3f sp28; Lib_Vec3f_TranslateAndRotateY(&this->actor.world.pos, this->actor.shape.rot.y, &D_80AEFA78, &sp28); - if ((BgCheck_EntityRaycastFloor3(&play->colCtx, &sp38, &sp34, &sp28) != BGCHECK_Y_MIN) && - (func_800C9BB8(&play->colCtx, sp38, sp34) == 1) && (this->unk_2D0 == (u32)1) && + if ((BgCheck_EntityRaycastFloor3(&play->colCtx, &groundPoly, &bgId, &sp28) != BGCHECK_Y_MIN) && + (SurfaceType_GetMaterial(&play->colCtx, groundPoly, bgId) == SURFACE_MATERIAL_SAND) && (this->unk_2D0 == 1) && (this->actor.xyzDistToPlayerSq <= SQ(115.0f)) && func_80AEE7E0(&this->actor.world.pos, 100.0f, this->unk_324, this->unk_36C) && (((this->unk_2CA & 2) && (Math_Vec3f_DistXZ(&this->unk_300, &sp28) >= 100.0f)) || !(this->unk_2CA & 2)) && @@ -1312,7 +1312,8 @@ void EnTk_Update(Actor* thisx, PlayState* play) { Actor_MoveWithGravity(&this->actor); Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 0.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4); - if ((this->unk_2B0 == 0) && (func_800C9B40(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId) == 12)) { + if ((this->unk_2B0 == 0) && (SurfaceType_GetFloorProperty(&play->colCtx, this->actor.floorPoly, + this->actor.floorBgId) == FLOOR_PROPERTY_12)) { Math_Vec3f_Copy(&this->actor.world.pos, &this->actor.prevPos); this->unk_2CA |= 0x200; this->actor.velocity.y = 0.0f; diff --git a/src/overlays/actors/ovl_En_Wf/z_en_wf.c b/src/overlays/actors/ovl_En_Wf/z_en_wf.c index 7d38f370f..44a50e99d 100644 --- a/src/overlays/actors/ovl_En_Wf/z_en_wf.c +++ b/src/overlays/actors/ovl_En_Wf/z_en_wf.c @@ -471,14 +471,15 @@ void func_80990C6C(EnWf* this, PlayState* play, s32 arg2) { static Color_RGBA8 D_809942EC = { 255, 255, 255, 255 }; s32 i; Vec3f sp88; - u32 temp_v0; + FloorType floorType; Color_RGBA8* phi_s1; s16 phi_s6; if (this->actor.floorPoly != NULL) { - temp_v0 = func_800C99D4(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId); - if (temp_v0 != 5) { - if ((temp_v0 == 15) || (temp_v0 == 14)) { + floorType = SurfaceType_GetFloorType(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId); + + if (floorType != FLOOR_TYPE_5) { + if ((floorType == FLOOR_TYPE_15) || (floorType == FLOOR_TYPE_14)) { phi_s1 = &D_809942EC; phi_s6 = Rand_ZeroFloat(150.0f) + 350.0f; arg2 += 2; diff --git a/src/overlays/actors/ovl_En_Zo/z_en_zo.c b/src/overlays/actors/ovl_En_Zo/z_en_zo.c index aed16b874..7a160e368 100644 --- a/src/overlays/actors/ovl_En_Zo/z_en_zo.c +++ b/src/overlays/actors/ovl_En_Zo/z_en_zo.c @@ -122,7 +122,7 @@ s32 EnZo_ChangeAnim(SkelAnime* skelAnime, s16 animIndex) { s32 EnZo_PlayWalkingSound(EnZo* this, PlayState* play) { u8 leftWasGrounded; u8 rightWasGrounded; - s32 waterSfxId; + SurfaceSfxOffset surfaceSfxOffset; u16 sfxId; u8 isFootGrounded; @@ -131,13 +131,14 @@ s32 EnZo_PlayWalkingSound(EnZo* this, PlayState* play) { if (this->actor.bgCheckFlags & BGCHECKFLAG_WATER) { if (this->actor.depthInWater < 20.0f) { - waterSfxId = NA_SE_PL_WALK_WATER0 - SFX_FLAG; + surfaceSfxOffset = SURFACE_SFX_OFFSET_WATER_SHALLOW; } else { - waterSfxId = NA_SE_PL_WALK_WATER1 - SFX_FLAG; + surfaceSfxOffset = SURFACE_SFX_OFFSET_WATER_DEEP; } - sfxId = waterSfxId + SFX_FLAG; + sfxId = NA_SE_PL_WALK_GROUND + surfaceSfxOffset; } else { - sfxId = SurfaceType_GetSfx(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId) + SFX_FLAG; + sfxId = NA_SE_PL_WALK_GROUND + + SurfaceType_GetSfxOffset(&play->colCtx, this->actor.floorPoly, this->actor.floorBgId); } this->isLeftFootGrounded = isFootGrounded = SubS_IsFloorAbove(play, &this->leftFootPos, -6.0f); diff --git a/src/overlays/actors/ovl_En_Zog/z_en_zog.c b/src/overlays/actors/ovl_En_Zog/z_en_zog.c index 349724cb3..fe5c1cd62 100644 --- a/src/overlays/actors/ovl_En_Zog/z_en_zog.c +++ b/src/overlays/actors/ovl_En_Zog/z_en_zog.c @@ -781,15 +781,15 @@ void func_80B94A00(EnZog* this, PlayState* play) { if ((this->unk_304 == 4) && (Animation_OnFrame(&this->skelAnime, 136.0f) || Animation_OnFrame(&this->skelAnime, 155.0f))) { - Actor_PlaySfx(&this->actor, NA_SE_PL_WALK_WATER0); + Actor_PlaySfx(&this->actor, NA_SE_PL_WALK_GROUND + SURFACE_SFX_OFFSET_WATER_SHALLOW); } if ((this->unk_304 == 5) && (Animation_OnFrame(&this->skelAnime, 12.0f) || Animation_OnFrame(&this->skelAnime, 37.0f))) { if (this->actor.depthInWater > 0.0f) { - Actor_PlaySfx(&this->actor, NA_SE_PL_WALK_WATER0); + Actor_PlaySfx(&this->actor, NA_SE_PL_WALK_GROUND + SURFACE_SFX_OFFSET_WATER_SHALLOW); } else { - Actor_PlaySfx(&this->actor, NA_SE_PL_WALK_SAND); + Actor_PlaySfx(&this->actor, NA_SE_PL_WALK_GROUND + SURFACE_SFX_OFFSET_SAND); } } } diff --git a/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.c b/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.c index 85b23d232..8aa23816d 100644 --- a/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.c +++ b/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.c @@ -629,7 +629,8 @@ s32 func_80A24954(ObjIceblock* this, PlayState* play) { func_80A262BC(this); this->unk_2B0 = 3; } else if (this->unk_1B0 & 4) { - if (func_800C99D4(&play->colCtx, this->dyna.actor.floorPoly, this->dyna.actor.floorBgId) == 5) { + if (SurfaceType_GetFloorType(&play->colCtx, this->dyna.actor.floorPoly, this->dyna.actor.floorBgId) == + FLOOR_TYPE_5) { func_80A25FA0(this); this->unk_2B0 = 2; } else { diff --git a/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c b/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c index 1f42807c2..bf20758ca 100644 --- a/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c +++ b/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c @@ -4,7 +4,6 @@ * Description: Sakon's Hideout Objects (Sun's Mask, doors, etc) */ -#include "prevent_bss_reordering.h" #include "z_obj_nozoki.h" #include "objects/object_secom_obj/object_secom_obj.h" diff --git a/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.c b/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.c index 582d43f02..3038a6d09 100644 --- a/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.c +++ b/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.c @@ -554,9 +554,9 @@ void ObjOshihiki_Fall(ObjOshihiki* this, PlayState* play) { ObjOshihiki_SetupOnActor(this, play); } Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_BLOCK_BOUND); - Actor_PlaySfx(&this->dyna.actor, SurfaceType_GetSfx(&play->colCtx, this->floorPolys[this->highestFloor], - this->floorBgIds[this->highestFloor]) + - SFX_FLAG); + Actor_PlaySfx(&this->dyna.actor, NA_SE_PL_WALK_GROUND + SurfaceType_GetSfxOffset( + &play->colCtx, this->floorPolys[this->highestFloor], + this->floorBgIds[this->highestFloor])); } } diff --git a/src/overlays/actors/ovl_Obj_Skateblock/z_obj_skateblock.c b/src/overlays/actors/ovl_Obj_Skateblock/z_obj_skateblock.c index 374a2f520..80e9b1201 100644 --- a/src/overlays/actors/ovl_Obj_Skateblock/z_obj_skateblock.c +++ b/src/overlays/actors/ovl_Obj_Skateblock/z_obj_skateblock.c @@ -614,7 +614,8 @@ void func_80A2264C(ObjSkateblock* this, PlayState* play) { sp20 = func_80A21548(this, play); if (sp20 || ((this->unk_160 - this->dyna.actor.world.pos.y) > 300.0f)) { - if (func_800C9B40(&play->colCtx, this->dyna.actor.floorPoly, this->dyna.actor.floorBgId) == 12) { + if (SurfaceType_GetFloorProperty(&play->colCtx, this->dyna.actor.floorPoly, this->dyna.actor.floorBgId) == + FLOOR_PROPERTY_12) { func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId); this->dyna.actor.draw = NULL; func_80A22728(this); diff --git a/src/overlays/effects/ovl_Effect_Ss_Bubble/z_eff_ss_bubble.c b/src/overlays/effects/ovl_Effect_Ss_Bubble/z_eff_ss_bubble.c index a3d203992..681aac01d 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Bubble/z_eff_ss_bubble.c +++ b/src/overlays/effects/ovl_Effect_Ss_Bubble/z_eff_ss_bubble.c @@ -22,7 +22,11 @@ EffectSsInit Effect_Ss_Bubble_InitVars = { EffectSsBubble_Init, }; -static f32 sVecAdjMaximums[] = { 291.0f, 582.0f, 1600.0f }; +static f32 sVecAdjMaximums[] = { + 291.0f, // CONVEYOR_SPEED_SLOW + 582.0f, // CONVEYOR_SPEED_MEDIUM + 1600.0f, // CONVEYOR_SPEED_FAST +}; u32 EffectSsBubble_Init(PlayState* play, u32 index, EffectSs* this, void* initParamsx) { EffectSsBubbleInitParams* initParams = (EffectSsBubbleInitParams*)initParamsx; @@ -85,17 +89,18 @@ void EffectSsBubble_Update(PlayState* play2, u32 index, EffectSs* this) { } if (((play->gameplayFrames + index) % 8) == 0) { CollisionPoly* colPoly; - u32 speed; - s16 direction; + ConveyorSpeed conveyorSpeed; + s16 conveyorDir; f32 rVecAdjMax; BgCheck_EntityRaycastFloor2_1(play, &play->colCtx, &colPoly, &this->pos); - speed = SurfaceType_GetConveyorSpeed(&play->colCtx, colPoly, BGCHECK_SCENE); - if ((speed != 0) && !SurfaceType_IsFloorConveyor(&play->colCtx, colPoly, BGCHECK_SCENE)) { - direction = SurfaceType_GetConveyorDirection(&play->colCtx, colPoly, BGCHECK_SCENE) << 0xA; - rVecAdjMax = sVecAdjMaximums[speed - 1]; - this->rVecAdjX = Math_SinS(direction) * rVecAdjMax; - this->rVecAdjZ = Math_CosS(direction) * rVecAdjMax; + conveyorSpeed = SurfaceType_GetConveyorSpeed(&play->colCtx, colPoly, BGCHECK_SCENE); + if ((conveyorSpeed != CONVEYOR_SPEED_DISABLED) && + !SurfaceType_IsFloorConveyor(&play->colCtx, colPoly, BGCHECK_SCENE)) { + conveyorDir = SurfaceType_GetConveyorDirection(&play->colCtx, colPoly, BGCHECK_SCENE) << 10; + rVecAdjMax = sVecAdjMaximums[conveyorSpeed - 1]; + this->rVecAdjX = Math_SinS(conveyorDir) * rVecAdjMax; + this->rVecAdjZ = Math_CosS(conveyorDir) * rVecAdjMax; } } this->vec.x += this->rVecAdjX / 100.0f; diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index aa6770307..ae80bd5e1 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -1055,21 +1055,21 @@ 0x800C98CC:("BgCheck_GetBgCamFuncDataImpl",), 0x800C9924:("BgCheck_GetBgCamFuncData",), 0x800C99AC:("SurfaceType_GetSceneExitIndex",), - 0x800C99D4:("func_800C99D4",), + 0x800C99D4:("SurfaceType_GetFloorType",), 0x800C99FC:("func_800C99FC",), - 0x800C9A24:("func_800C9A24",), - 0x800C9A4C:("func_800C9A4C",), - 0x800C9A7C:("func_800C9A7C",), - 0x800C9AB0:("func_800C9AB0",), - 0x800C9AE4:("func_800C9AE4",), - 0x800C9B18:("func_800C9B18",), - 0x800C9B40:("func_800C9B40",), - 0x800C9B68:("func_800C9B68",), + 0x800C9A24:("SurfaceType_GetWallType",), + 0x800C9A4C:("SurfaceType_GetWallFlags",), + 0x800C9A7C:("SurfaceType_CheckWallFlag0",), + 0x800C9AB0:("SurfaceType_CheckWallFlag1",), + 0x800C9AE4:("SurfaceType_CheckWallFlag2",), + 0x800C9B18:("SurfaceType_GetFloorProperty2",), + 0x800C9B40:("SurfaceType_GetFloorProperty",), + 0x800C9B68:("SurfaceType_IsSoft",), 0x800C9B90:("SurfaceType_IsHorseBlocked",), - 0x800C9BB8:("func_800C9BB8",), - 0x800C9BDC:("SurfaceType_GetSfx",), - 0x800C9C24:("func_800C9C24",), - 0x800C9C74:("SurfaceType_GetSlope",), + 0x800C9BB8:("SurfaceType_GetMaterial",), + 0x800C9BDC:("SurfaceType_GetSfxOffset",), + 0x800C9C24:("SurfaceType_HasMaterialProperty",), + 0x800C9C74:("SurfaceType_GetFloorEffect",), 0x800C9C9C:("SurfaceType_GetLightSettingIndex",), 0x800C9CC4:("SurfaceType_GetEcho",), 0x800C9CEC:("SurfaceType_IsHookshotSurface",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 4dab18e3b..6e83a53e8 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -451,6 +451,11 @@ 0x801AEFC0:("D_801AEFC0","UNK_TYPE1","",0x1), 0x801AEFD0:("gActorOverlayTable","ActorOverlay","[ACTOR_ID_MAX]",0x5640), 0x801B4610:("gMaxActorId","s32","",0x4), + 0x801B4620:("sWallFlags","u32","",0x80), + 0x801B46A0:("sSurfaceSfxOffsets","u16","",0x1E), + 0x801B46C0:("sSurfaceMaterialProperties","u8","",0xF), + 0x801B46D0:("sSmallMemSceneIds","s16","",0x2), + 0x801B46D4:("sSceneMemList","BgCheckSceneMemEntry","",0x8), 0x801B46DC:("sSceneSubdivisionList","BgCheckSceneSubdivisionEntry","[3]",0x24), 0x801B4700:("sCustomDynapolyMem","BgSpecialSceneMaxObjects","[1]",0x8), 0x801B4708:("D_801B4708","UNK_TYPE1","",0x1), diff --git a/tools/namefixer.py b/tools/namefixer.py index 1c38d8359..bb22b1fca 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -461,9 +461,19 @@ wordReplace = { "func_800C9704": "SurfaceType_GetBgCamIndex", "func_800C9924": "BgCheck_GetBgCamFuncData", "func_800C99AC": "SurfaceType_GetSceneExitIndex", + "func_800C99D4": "SurfaceType_GetFloorType", + "func_800C9A24": "SurfaceType_GetWallType", + "func_800C9A4C": "SurfaceType_GetWallFlags", + "func_800C9A7C": "SurfaceType_CheckWallFlag0", + "func_800C9AB0": "SurfaceType_CheckWallFlag1", + "func_800C9AE4": "SurfaceType_CheckWallFlag2", + "func_800C9B18": "SurfaceType_GetFloorProperty2", + "func_800C9B40": "SurfaceType_GetFloorProperty", + "func_800C9BB8": "SurfaceType_GetMaterial", "func_800C9B90": "SurfaceType_IsHorseBlocked", - "func_800C9BDC": "SurfaceType_GetSfx", - "func_800C9C74": "SurfaceType_GetSlope", + "func_800C9BDC": "SurfaceType_GetSfxOffset", + "SurfaceType_GetSfx": "SurfaceType_GetSfxOffset", + "func_800C9C74": "SurfaceType_GetFloorEffect", "func_800C9C9C": "SurfaceType_GetLightSettingIndex", "func_800C9CC4": "SurfaceType_GetEcho", "func_800C9CEC": "SurfaceType_IsHookshotSurface", @@ -923,6 +933,11 @@ wordReplace = { "TRANS_TYPE_20": "TRANS_TYPE_FADE_DYNAMIC", "TRANS_TYPE_21": "TRANS_TYPE_CIRCLE", "TRANS_TYPE_22": "TRANS_TYPE_WIPE5", + + "COLPOLY_SURFACE_GROUND": "SURFACE_MATERIAL_DIRT", + "COLPOLY_SURFACE_SAND": "SURFACE_MATERIAL_SAND", + "COLPOLY_SURFACE_SNOW": "SURFACE_MATERIAL_SNOW", + # Example of custom behaviour: # "PLAYER": ("GET_PLAYER(play)", {"ignore": (-1, '"PLAYER"')}), # ignore "PLAYER" in sSoundBankNames } diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index a18086d38..353a7f394 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -569,21 +569,21 @@ asm/non_matchings/code/z_bgcheck/BgCheck_GetBgCamCount.s,BgCheck_GetBgCamCount,0 asm/non_matchings/code/z_bgcheck/BgCheck_GetBgCamFuncDataImpl.s,BgCheck_GetBgCamFuncDataImpl,0x800C98CC,0x16 asm/non_matchings/code/z_bgcheck/BgCheck_GetBgCamFuncData.s,BgCheck_GetBgCamFuncData,0x800C9924,0x22 asm/non_matchings/code/z_bgcheck/SurfaceType_GetSceneExitIndex.s,SurfaceType_GetSceneExitIndex,0x800C99AC,0xA -asm/non_matchings/code/z_bgcheck/func_800C99D4.s,func_800C99D4,0x800C99D4,0xA +asm/non_matchings/code/z_bgcheck/SurfaceType_GetFloorType.s,SurfaceType_GetFloorType,0x800C99D4,0xA asm/non_matchings/code/z_bgcheck/func_800C99FC.s,func_800C99FC,0x800C99FC,0xA -asm/non_matchings/code/z_bgcheck/func_800C9A24.s,func_800C9A24,0x800C9A24,0xA -asm/non_matchings/code/z_bgcheck/func_800C9A4C.s,func_800C9A4C,0x800C9A4C,0xC -asm/non_matchings/code/z_bgcheck/func_800C9A7C.s,func_800C9A7C,0x800C9A7C,0xD -asm/non_matchings/code/z_bgcheck/func_800C9AB0.s,func_800C9AB0,0x800C9AB0,0xD -asm/non_matchings/code/z_bgcheck/func_800C9AE4.s,func_800C9AE4,0x800C9AE4,0xD -asm/non_matchings/code/z_bgcheck/func_800C9B18.s,func_800C9B18,0x800C9B18,0xA -asm/non_matchings/code/z_bgcheck/func_800C9B40.s,func_800C9B40,0x800C9B40,0xA -asm/non_matchings/code/z_bgcheck/func_800C9B68.s,func_800C9B68,0x800C9B68,0xA +asm/non_matchings/code/z_bgcheck/SurfaceType_GetWallType.s,SurfaceType_GetWallType,0x800C9A24,0xA +asm/non_matchings/code/z_bgcheck/SurfaceType_GetWallFlags.s,SurfaceType_GetWallFlags,0x800C9A4C,0xC +asm/non_matchings/code/z_bgcheck/SurfaceType_CheckWallFlag0.s,SurfaceType_CheckWallFlag0,0x800C9A7C,0xD +asm/non_matchings/code/z_bgcheck/SurfaceType_CheckWallFlag1.s,SurfaceType_CheckWallFlag1,0x800C9AB0,0xD +asm/non_matchings/code/z_bgcheck/SurfaceType_CheckWallFlag2.s,SurfaceType_CheckWallFlag2,0x800C9AE4,0xD +asm/non_matchings/code/z_bgcheck/SurfaceType_GetFloorProperty2.s,SurfaceType_GetFloorProperty2,0x800C9B18,0xA +asm/non_matchings/code/z_bgcheck/SurfaceType_GetFloorProperty.s,SurfaceType_GetFloorProperty,0x800C9B40,0xA +asm/non_matchings/code/z_bgcheck/SurfaceType_IsSoft.s,SurfaceType_IsSoft,0x800C9B68,0xA asm/non_matchings/code/z_bgcheck/SurfaceType_IsHorseBlocked.s,SurfaceType_IsHorseBlocked,0x800C9B90,0xA -asm/non_matchings/code/z_bgcheck/func_800C9BB8.s,func_800C9BB8,0x800C9BB8,0x9 -asm/non_matchings/code/z_bgcheck/SurfaceType_GetSfx.s,SurfaceType_GetSfx,0x800C9BDC,0x12 -asm/non_matchings/code/z_bgcheck/func_800C9C24.s,func_800C9C24,0x800C9C24,0x14 -asm/non_matchings/code/z_bgcheck/SurfaceType_GetSlope.s,SurfaceType_GetSlope,0x800C9C74,0xA +asm/non_matchings/code/z_bgcheck/SurfaceType_GetMaterial.s,SurfaceType_GetMaterial,0x800C9BB8,0x9 +asm/non_matchings/code/z_bgcheck/SurfaceType_GetSfxOffset.s,SurfaceType_GetSfxOffset,0x800C9BDC,0x12 +asm/non_matchings/code/z_bgcheck/SurfaceType_HasMaterialProperty.s,SurfaceType_HasMaterialProperty,0x800C9C24,0x14 +asm/non_matchings/code/z_bgcheck/SurfaceType_GetFloorEffect.s,SurfaceType_GetFloorEffect,0x800C9C74,0xA asm/non_matchings/code/z_bgcheck/SurfaceType_GetLightSettingIndex.s,SurfaceType_GetLightSettingIndex,0x800C9C9C,0xA asm/non_matchings/code/z_bgcheck/SurfaceType_GetEcho.s,SurfaceType_GetEcho,0x800C9CC4,0xA asm/non_matchings/code/z_bgcheck/SurfaceType_IsHookshotSurface.s,SurfaceType_IsHookshotSurface,0x800C9CEC,0xA From b8af819165ea4f31f34940d59a13ef19a5aabd2f Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Wed, 19 Apr 2023 08:36:53 +1000 Subject: [PATCH 09/12] DynaPoly Docs Pass (#1194) * dyna docs * init flags * more docs * cleanup * partial PR review * another bracket * hold to press * PR cleanup --- include/functions.h | 36 +++--- include/z64actor.h | 22 ++-- include/z64bgcheck.h | 28 +++-- src/code/z_actor.c | 10 +- src/code/z_bg_collect.c | 107 ++++++++++-------- src/code/z_bg_item.c | 72 ++++++------ src/code/z_bgcheck.c | 95 ++++++++-------- src/code/z_player_call.c | 2 +- .../ovl_Bg_Astr_Bombwall/z_bg_astr_bombwall.c | 4 +- .../ovl_Bg_Crace_Movebg/z_bg_crace_movebg.c | 2 +- .../ovl_Bg_Ctower_Gear/z_bg_ctower_gear.c | 13 ++- .../ovl_Bg_Ctower_Rot/z_bg_ctower_rot.c | 2 +- .../ovl_Bg_Dblue_Balance/z_bg_dblue_balance.c | 14 +-- .../ovl_Bg_Dblue_Balance/z_bg_dblue_balance.h | 4 +- .../ovl_Bg_Dblue_Movebg/z_bg_dblue_movebg.c | 2 +- .../ovl_Bg_Dkjail_Ivy/z_bg_dkjail_ivy.c | 2 +- .../actors/ovl_Bg_F40_Block/z_bg_f40_block.c | 2 +- .../actors/ovl_Bg_F40_Flift/z_bg_f40_flift.c | 6 +- .../ovl_Bg_F40_Switch/z_bg_f40_switch.c | 4 +- .../actors/ovl_Bg_Fu_Kaiten/z_bg_fu_kaiten.c | 2 +- .../actors/ovl_Bg_Fu_Mizu/z_bg_fu_mizu.c | 2 +- .../actors/ovl_Bg_Goron_Oyu/z_bg_goron_oyu.c | 2 +- .../ovl_Bg_Haka_Bombwall/z_bg_haka_bombwall.c | 2 +- .../ovl_Bg_Haka_Curtain/z_bg_haka_curtain.c | 2 +- .../actors/ovl_Bg_Haka_Tomb/z_bg_haka_tomb.c | 2 +- .../z_bg_hakugin_bombwall.c | 4 +- .../ovl_Bg_Hakugin_Post/z_bg_hakugin_post.c | 2 +- .../z_bg_hakugin_switch.c | 14 +-- .../actors/ovl_Bg_Icicle/z_bg_icicle.c | 6 +- .../ovl_Bg_Ikana_Block/z_bg_ikana_block.c | 6 +- .../z_bg_ikana_bombwall.c | 2 +- .../z_bg_ikana_rotaryroom.c | 2 +- .../ovl_Bg_Iknin_Susceil/z_bg_iknin_susceil.c | 6 +- .../actors/ovl_Bg_Ikninside/z_bg_ikninside.c | 2 +- .../actors/ovl_Bg_Ingate/z_bg_ingate.c | 4 +- .../ovl_Bg_Inibs_Movebg/z_bg_inibs_movebg.c | 2 +- .../ovl_Bg_Kin2_Bombwall/z_bg_kin2_bombwall.c | 2 +- .../ovl_Bg_Kin2_Picture/z_bg_kin2_picture.c | 4 +- .../ovl_Bg_Kin2_Shelf/z_bg_kin2_shelf.c | 2 +- .../actors/ovl_Bg_Ladder/z_bg_ladder.c | 4 +- .../ovl_Bg_Last_Bwall/z_bg_last_bwall.c | 4 +- .../actors/ovl_Bg_Lbfshot/z_bg_lbfshot.c | 2 +- .../actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.c | 10 +- .../ovl_Bg_Open_Shutter/z_bg_open_shutter.c | 2 +- .../actors/ovl_Bg_Spdweb/z_bg_spdweb.c | 9 +- .../actors/ovl_Bg_Umajump/z_bg_umajump.c | 4 +- .../actors/ovl_Dm_Char01/z_dm_char01.c | 8 +- .../actors/ovl_Dm_Char08/z_dm_char08.c | 14 +-- .../actors/ovl_Dm_Statue/z_dm_statue.c | 2 +- src/overlays/actors/ovl_En_Arrow/z_en_arrow.c | 2 +- .../actors/ovl_En_Bom_Chu/z_en_bom_chu.c | 2 +- src/overlays/actors/ovl_En_Box/z_en_box.c | 12 +- src/overlays/actors/ovl_En_Dnb/z_en_dnb.c | 2 +- src/overlays/actors/ovl_En_Fu/z_en_fu.c | 2 +- .../actors/ovl_En_Fu_Kago/z_en_fu_kago.c | 4 +- .../actors/ovl_En_Fu_Mato/z_en_fu_mato.c | 2 +- .../actors/ovl_En_Mushi2/z_en_mushi2.c | 2 +- src/overlays/actors/ovl_En_Raf/z_en_raf.c | 4 +- src/overlays/actors/ovl_En_Rat/z_en_rat.c | 2 +- src/overlays/actors/ovl_En_Test3/z_en_test3.c | 2 +- .../actors/ovl_En_Torch2/z_en_torch2.c | 11 +- src/overlays/actors/ovl_En_Twig/z_en_twig.c | 15 ++- .../actors/ovl_Obj_Armos/z_obj_armos.c | 2 +- src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c | 18 +-- src/overlays/actors/ovl_Obj_Boat/z_obj_boat.c | 8 +- .../actors/ovl_Obj_Chikuwa/z_obj_chikuwa.c | 2 +- .../ovl_Obj_Danpeilift/z_obj_danpeilift.c | 22 ++-- .../ovl_Obj_Danpeilift/z_obj_danpeilift.h | 6 +- .../actors/ovl_Obj_Dhouse/z_obj_dhouse.c | 2 +- .../actors/ovl_Obj_Driftice/z_obj_driftice.c | 6 +- .../actors/ovl_Obj_Etcetera/z_obj_etcetera.c | 10 +- .../actors/ovl_Obj_Ghaka/z_obj_ghaka.c | 2 +- .../actors/ovl_Obj_Hakaisi/z_obj_hakaisi.c | 4 +- .../actors/ovl_Obj_Hgdoor/z_obj_hgdoor.c | 2 +- .../actors/ovl_Obj_HsStump/z_obj_hsstump.c | 11 +- .../actors/ovl_Obj_Hunsui/z_obj_hunsui.c | 6 +- .../actors/ovl_Obj_Iceblock/z_obj_iceblock.c | 8 +- .../actors/ovl_Obj_Kibako/z_obj_kibako.c | 4 +- .../actors/ovl_Obj_Kibako2/z_obj_kibako2.c | 2 +- .../actors/ovl_Obj_Kzsaku/z_obj_kzsaku.c | 2 +- src/overlays/actors/ovl_Obj_Lift/z_obj_lift.c | 8 +- .../ovl_Obj_Lightblock/z_obj_lightblock.c | 2 +- .../ovl_Obj_Lupygamelift/z_obj_lupygamelift.c | 2 +- .../ovl_Obj_Ocarinalift/z_obj_ocarinalift.c | 10 +- .../actors/ovl_Obj_Oshihiki/z_obj_oshihiki.c | 12 +- .../actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c | 2 +- .../actors/ovl_Obj_Raillift/z_obj_raillift.c | 26 ++--- .../actors/ovl_Obj_Raillift/z_obj_raillift.h | 6 +- .../actors/ovl_Obj_Rotlift/z_obj_rotlift.c | 2 +- .../ovl_Obj_Skateblock/z_obj_skateblock.c | 10 +- .../ovl_Obj_Spidertent/z_obj_spidertent.c | 2 +- .../actors/ovl_Obj_Switch/z_obj_switch.c | 28 ++--- src/overlays/actors/ovl_Obj_Taru/z_obj_taru.c | 2 +- .../ovl_Obj_Tokei_Step/z_obj_tokei_step.c | 2 +- src/overlays/actors/ovl_Obj_Tree/z_obj_tree.c | 2 +- .../actors/ovl_Obj_Tsubo/z_obj_tsubo.c | 6 +- src/overlays/actors/ovl_Obj_Um/z_obj_um.c | 4 +- .../actors/ovl_Obj_Y2lift/z_obj_y2lift.c | 10 +- tools/disasm/functions.txt | 54 ++++----- tools/namefixer.py | 23 +++- tools/sizes/code_functions.csv | 26 ++--- 101 files changed, 515 insertions(+), 459 deletions(-) diff --git a/include/functions.h b/include/functions.h index ac6ad65dd..3850ab42e 100644 --- a/include/functions.h +++ b/include/functions.h @@ -776,25 +776,25 @@ void* ActorOverlayTable_FaultAddrConv(void* address, void* param); void ActorOverlayTable_Init(void); void ActorOverlayTable_Cleanup(void); -void BgCheck2_UpdateActorPosition(CollisionContext* colCtx, s32 bgId, Actor* actor); -void BgCheck2_UpdateActorYRotation(CollisionContext* colCtx, s32 bgId, Actor* actor); -void BgCheck2_AttachToMesh(CollisionContext* colCtx, Actor* actor, s32 bgId); -u32 BgCheck2_UpdateActorAttachedToMesh(CollisionContext* colCtx, s32 bgId, Actor* actor); -void DynaPolyActor_Init(DynaPolyActor* dynaActor, s32 flags); +void DynaPolyActor_UpdateCarriedActorPos(CollisionContext* colCtx, s32 bgId, Actor* carriedActor); +void DynaPolyActor_UpdateCarriedActorRotY(CollisionContext* colCtx, s32 bgId, Actor* carriedActor); +void DynaPolyActor_AttachCarriedActor(CollisionContext* colCtx, Actor* carriedActor, s32 bgId); +u32 DynaPolyActor_TransformCarriedActor(CollisionContext* colCtx, s32 bgId, Actor* carriedActor); +void DynaPolyActor_Init(DynaPolyActor* dynaActor, s32 transformFlags); void DynaPolyActor_LoadMesh(PlayState* play, DynaPolyActor* dynaActor, CollisionHeader* meshHeader); -void DynaPolyActor_ResetState(DynaPolyActor* dynaActor); -void DynaPolyActor_SetRidingFallingState(DynaPolyActor* dynaActor); -void DynaPolyActor_SetRidingMovingState(DynaPolyActor* dynaActor); -void DynaPolyActor_SetRidingMovingStateByIndex(CollisionContext* colCtx, s32 bgId); -void DynaPolyActor_SetRidingRotatingState(DynaPolyActor* dynaActor); -void DynaPolyActor_SetRidingRotatingStateByIndex(CollisionContext* colCtx, s32 bgId); -void DynaPolyActor_SetSwitchPressedState(DynaPolyActor* dynaActor); -void DynaPolyActor_SetHeavySwitchPressedState(DynaPolyActor* dynaActor); -s32 DynaPolyActor_IsInRidingFallingState(DynaPolyActor* dynaActor); -s32 DynaPolyActor_IsInRidingMovingState(DynaPolyActor* dynaActor); -s32 DynaPolyActor_IsInRidingRotatingState(DynaPolyActor* dynaActor); -s32 DynaPolyActor_IsInSwitchPressedState(DynaPolyActor* dynaActor); -s32 DynaPolyActor_IsInHeavySwitchPressedState(DynaPolyActor* dynaActor); +void DynaPolyActor_UnsetAllInteractFlags(DynaPolyActor* dynaActor); +void DynaPolyActor_SetActorOnTop(DynaPolyActor* dynaActor); +void DynaPolyActor_SetPlayerOnTop(DynaPolyActor* dynaActor); +void DynaPoly_SetPlayerOnTop(CollisionContext* colCtx, s32 bgId); +void DynaPolyActor_SetPlayerAbove(DynaPolyActor* dynaActor); +void DynaPoly_SetPlayerAbove(CollisionContext* colCtx, s32 bgId); +void DynaPolyActor_SetActorOnSwitch(DynaPolyActor* dynaActor); +void DynaPolyActor_SetActorOnHeavySwitch(DynaPolyActor* dynaActor); +s32 DynaPolyActor_IsActorOnTop(DynaPolyActor* dynaActor); +s32 DynaPolyActor_IsPlayerOnTop(DynaPolyActor* dynaActor); +s32 DynaPolyActor_IsPlayerAbove(DynaPolyActor* dynaActor); +s32 DynaPolyActor_IsSwitchPressed(DynaPolyActor* dynaActor); +s32 DynaPolyActor_IsHeavySwitchPressed(DynaPolyActor* dynaActor); s32 DynaPolyActor_ValidateMove(PlayState* play, DynaPolyActor* dynaActor, s16 startRadius, s16 endRadius, s16 startHeight); Camera* Camera_Alloc(View* view, CollisionContext* bg, PlayState* play); diff --git a/include/z64actor.h b/include/z64actor.h index 5e9c35cf4..bfce67188 100644 --- a/include/z64actor.h +++ b/include/z64actor.h @@ -229,15 +229,23 @@ typedef enum { /* 1 */ FOOT_RIGHT } ActorFootIndex; +#define DYNA_TRANSFORM_POS (1 << 0) // Position of the actors on top follows the dynapoly actor's movement. +#define DYNA_TRANSFORM_ROT_Y (1 << 1) // The Y rotation of the actors on top follows the dynapoly actor's Y rotation. + +#define DYNA_INTERACT_ACTOR_ON_TOP (1 << 0) // There is an actor standing on the collision of the dynapoly actor +#define DYNA_INTERACT_PLAYER_ON_TOP (1 << 1) // The player actor is standing on the collision of the dynapoly actor +#define DYNA_INTERACT_PLAYER_ABOVE (1 << 2) // The player is directly above the collision of the dynapoly actor (any distance above) +#define DYNA_INTERACT_ACTOR_ON_SWITCH (1 << 3) // Like the ACTOR_ON_TOP flag but only actors with ACTOR_FLAG_CAN_PRESS_SWITCH +#define DYNA_INTERACT_ACTOR_ON_HEAVY_SWITCH (1 << 4) // Like the ACTOR_ON_TOP flag but only actors with ACTOR_FLAG_CAN_PRESS_HEAVY_SWITCH + typedef struct { /* 0x000 */ Actor actor; /* 0x144 */ s32 bgId; /* 0x148 */ f32 pushForce; /* 0x14C */ f32 unk14C; /* 0x150 */ s16 yRotation; - /* 0x154 */ u32 flags; - /* 0x158 */ u8 stateFlags; - /* 0x15A */ s16 pad15A; + /* 0x154 */ u32 transformFlags; + /* 0x158 */ u8 interactFlags; } DynaPolyActor; // size = 0x15C @@ -528,8 +536,8 @@ typedef enum { #define ACTOR_FLAG_8000 (1 << 15) // #define ACTOR_FLAG_10000 (1 << 16) -// -#define ACTOR_FLAG_20000 (1 << 17) +// actor can press and hold down heavy switches +#define ACTOR_FLAG_CAN_PRESS_HEAVY_SWITCH (1 << 17) // #define ACTOR_FLAG_40000 (1 << 18) // @@ -546,8 +554,8 @@ typedef enum { #define ACTOR_FLAG_1000000 (1 << 24) // #define ACTOR_FLAG_2000000 (1 << 25) -// -#define ACTOR_FLAG_4000000 (1 << 26) +// actor can press and hold down switches +#define ACTOR_FLAG_CAN_PRESS_SWITCH (1 << 26) // Prevents locking on with Z targeting an actor even if Tatl is floating over it #define ACTOR_FLAG_CANT_LOCK_ON (1 << 27) // diff --git a/include/z64bgcheck.h b/include/z64bgcheck.h index c6210b2c1..a5effefca 100644 --- a/include/z64bgcheck.h +++ b/include/z64bgcheck.h @@ -314,10 +314,16 @@ typedef struct { /* 0x60 */ f32 maxY; } BgActor; // size = 0x64 +#define BGACTOR_IN_USE (1 << 0) // The bgActor entry is in use +#define BGACTOR_1 (1 << 1) +#define BGACTOR_COLLISION_DISABLED (1 << 2) // The collision of the bgActor is disabled +#define BGACTOR_CEILING_COLLISION_DISABLED (1 << 3) // The ceiling collision of the bgActor is ignored +#define BGACTOR_FLOOR_COLLISION_DISABLED (1 << 5) // The floor collision of the bgActor is ignored + typedef struct { /* 0x0000 */ u8 bitFlag; /* 0x0004 */ BgActor bgActors[BG_ACTOR_MAX]; - /* 0x138C */ u16 bgActorFlags[BG_ACTOR_MAX]; // bit 0 - Is mesh active + /* 0x138C */ u16 bgActorFlags[BG_ACTOR_MAX]; /* 0x13F0 */ CollisionPoly* polyList; /* 0x13F4 */ Vec3s* vtxList; /* 0x13F8 */ DynaWaterBoxList waterBoxList; @@ -521,18 +527,18 @@ void DynaPoly_Init(struct PlayState* play, DynaCollisionContext* dyna); void DynaPoly_Alloc(struct PlayState* play, DynaCollisionContext* dyna); s32 DynaPoly_SetBgActor(struct PlayState* play, DynaCollisionContext* dyna, Actor* actor, CollisionHeader* colHeader); DynaPolyActor* DynaPoly_GetActor(CollisionContext* colCtx, s32 bgId); -void func_800C62BC(struct PlayState* play, DynaCollisionContext* dyna, s32 bgId); -void func_800C6314(struct PlayState* play, DynaCollisionContext* dyna, s32 bgId); -void func_800C636C(struct PlayState* play, DynaCollisionContext* dyna, s32 bgId); -void func_800C63C4(struct PlayState* play, DynaCollisionContext* dyna, s32 bgId); -void func_800C641C(struct PlayState* play, DynaCollisionContext* dyna, s32 bgId); -void func_800C6474(struct PlayState* play, DynaCollisionContext* dyna, s32 bgId); -void func_800C6554(struct PlayState* play, DynaCollisionContext* dyna); +void DynaPoly_DisableCollision(struct PlayState* play, DynaCollisionContext* dyna, s32 bgId); +void DynaPoly_EnableCollision(struct PlayState* play, DynaCollisionContext* dyna, s32 bgId); +void DynaPoly_DisableCeilingCollision(struct PlayState* play, DynaCollisionContext* dyna, s32 bgId); +void DynaPoly_EnableCeilingCollision(struct PlayState* play, DynaCollisionContext* dyna, s32 bgId); +void DynaPoly_DisableFloorCollision(struct PlayState* play, DynaCollisionContext* dyna, s32 bgId); +void DynaPoly_EnableFloorCollision(struct PlayState* play, DynaCollisionContext* dyna, s32 bgId); +void DynaPoly_InvalidateLookup(struct PlayState* play, DynaCollisionContext* dyna); void DynaPoly_DeleteBgActor(struct PlayState* play, DynaCollisionContext* dyna, s32 bgId); void BgCheck_CalcWaterboxDimensions(Vec3f* minPos, Vec3f* maxXPos, Vec3f* maxZPos, Vec3s* minPosOut, s16* xLength, s16* zLength); -void DynaPoly_ExpandSRT(struct PlayState* play, DynaCollisionContext* dyna, s32 bgId, s32* vtxStartIndex, s32* polyStartIndex, s32* waterBoxStartIndex); -void BgCheck_ResetFlagsIfLoadedActor(struct PlayState* play, DynaCollisionContext* dyna, Actor* actor); -void DynaPoly_Setup(struct PlayState* play, DynaCollisionContext* dyna); +void DynaPoly_AddBgActorToLookup(struct PlayState* play, DynaCollisionContext* dyna, s32 bgId, s32* vtxStartIndex, s32* polyStartIndex, s32* waterBoxStartIndex); +void DynaPoly_UnsetAllInteractFlags(struct PlayState* play, DynaCollisionContext* dyna, Actor* actor); +void DynaPoly_UpdateContext(struct PlayState* play, DynaCollisionContext* dyna); void func_800C756C(DynaCollisionContext* dyna, s32* numPolygons, s32* numVertices, s32* numWaterBoxes); void DynaPoly_UpdateBgActorTransforms(struct PlayState* play, DynaCollisionContext* dyna); void CollisionHeader_SegmentedToVirtual(CollisionHeader* colHeader); diff --git a/src/code/z_actor.c b/src/code/z_actor.c index b58f6700a..44d9053ec 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -1559,7 +1559,7 @@ s32 func_800B7678(PlayState* play, Actor* actor, Vec3f* pos, s32 updBgCheckInfoF } actor->bgCheckFlags |= BGCHECKFLAG_GROUND; - BgCheck2_AttachToMesh(&play->colCtx, actor, (s32)actor->floorBgId); + DynaPolyActor_AttachCarriedActor(&play->colCtx, actor, actor->floorBgId); } } else { return func_800B761C(actor, distToFloor, updBgCheckInfoFlags); @@ -1575,7 +1575,7 @@ void Actor_UpdateBgCheckInfo(PlayState* play, Actor* actor, f32 wallCheckHeight, Vec3f pos; if ((actor->floorBgId != BGCHECK_SCENE) && (actor->bgCheckFlags & BGCHECKFLAG_GROUND)) { - BgCheck2_UpdateActorAttachedToMesh(&play->colCtx, actor->floorBgId, actor); + DynaPolyActor_TransformCarriedActor(&play->colCtx, actor->floorBgId, actor); } if (updBgCheckInfoFlags & UPDBGCHECKINFO_FLAG_1) { @@ -2426,7 +2426,7 @@ Actor* Actor_UpdateActor(UpdateActor_Params* params) { } actor->update(actor, play); - BgCheck_ResetFlagsIfLoadedActor(play, &play->colCtx.dyna, actor); + DynaPoly_UnsetAllInteractFlags(play, &play->colCtx.dyna, actor); } CollisionCheck_ResetDamage(&actor->colChkInfo); @@ -2516,7 +2516,7 @@ void Actor_UpdateAll(PlayState* play, ActorContext* actorCtx) { } if (i == ACTORCAT_BG) { - DynaPoly_Setup(play, &play->colCtx.dyna); + DynaPoly_UpdateContext(play, &play->colCtx.dyna); } } @@ -3395,7 +3395,7 @@ void func_800BB604(GameState* gameState, ActorContext* actorCtx, Player* player, if ((actor != targetedActor) || (actor->flags & ACTOR_FLAG_80000)) { temp_f0_2 = func_800B82EC(actor, player, D_801ED8DC); - phi_s2_2 = (actor->flags & 1) != 0; + phi_s2_2 = (actor->flags & ACTOR_FLAG_1) != 0; if (phi_s2_2) { phi_s2_2 = temp_f0_2 < D_801ED8C8; } diff --git a/src/code/z_bg_collect.c b/src/code/z_bg_collect.c index 0d4f4a21f..b0c0971ea 100644 --- a/src/code/z_bg_collect.c +++ b/src/code/z_bg_collect.c @@ -1,103 +1,116 @@ #include "global.h" -void BgCheck2_UpdateActorPosition(CollisionContext* colCtx, s32 bgId, Actor* actor) { - MtxF prevMatrix; - MtxF prevMatrixInv; - MtxF currMatrix; - Vec3f newPos; - Vec3f posWithInv; +/** + * Update the `carriedActor`'s position based on the dynapoly actor identified by `bgId`. + */ +void DynaPolyActor_UpdateCarriedActorPos(CollisionContext* colCtx, s32 bgId, Actor* carriedActor) { + MtxF prevTransform; + MtxF prevTransformInv; + MtxF curTransform; + Vec3f pos; + Vec3f tempPos; if (!DynaPoly_IsBgIdBgActor(bgId)) { return; } SkinMatrix_SetScaleRotateYRPTranslate( - &prevMatrix, colCtx->dyna.bgActors[bgId].prevTransform.scale.x, + &prevTransform, colCtx->dyna.bgActors[bgId].prevTransform.scale.x, colCtx->dyna.bgActors[bgId].prevTransform.scale.y, colCtx->dyna.bgActors[bgId].prevTransform.scale.z, colCtx->dyna.bgActors[bgId].prevTransform.rot.x, colCtx->dyna.bgActors[bgId].prevTransform.rot.y, colCtx->dyna.bgActors[bgId].prevTransform.rot.z, colCtx->dyna.bgActors[bgId].prevTransform.pos.x, colCtx->dyna.bgActors[bgId].prevTransform.pos.y, colCtx->dyna.bgActors[bgId].prevTransform.pos.z); - if (SkinMatrix_Invert(&prevMatrix, &prevMatrixInv) == 2) { + if (SkinMatrix_Invert(&prevTransform, &prevTransformInv) == 2) { return; } SkinMatrix_SetScaleRotateYRPTranslate( - &currMatrix, colCtx->dyna.bgActors[bgId].curTransform.scale.x, colCtx->dyna.bgActors[bgId].curTransform.scale.y, - colCtx->dyna.bgActors[bgId].curTransform.scale.z, colCtx->dyna.bgActors[bgId].curTransform.rot.x, - colCtx->dyna.bgActors[bgId].curTransform.rot.y, colCtx->dyna.bgActors[bgId].curTransform.rot.z, - colCtx->dyna.bgActors[bgId].curTransform.pos.x, colCtx->dyna.bgActors[bgId].curTransform.pos.y, - colCtx->dyna.bgActors[bgId].curTransform.pos.z); + &curTransform, colCtx->dyna.bgActors[bgId].curTransform.scale.x, + colCtx->dyna.bgActors[bgId].curTransform.scale.y, colCtx->dyna.bgActors[bgId].curTransform.scale.z, + colCtx->dyna.bgActors[bgId].curTransform.rot.x, colCtx->dyna.bgActors[bgId].curTransform.rot.y, + colCtx->dyna.bgActors[bgId].curTransform.rot.z, colCtx->dyna.bgActors[bgId].curTransform.pos.x, + colCtx->dyna.bgActors[bgId].curTransform.pos.y, colCtx->dyna.bgActors[bgId].curTransform.pos.z); - SkinMatrix_Vec3fMtxFMultXYZ(&prevMatrixInv, &actor->world.pos, &posWithInv); - SkinMatrix_Vec3fMtxFMultXYZ(&currMatrix, &posWithInv, &newPos); + // Apply the movement of the dynapoly actor `bgId` over the last frame to the `carriedActor` position + // pos = curTransform * prevTransformInv * pos + // Note (curTransform * prevTransformInv) represents the transform relative to the previous frame + SkinMatrix_Vec3fMtxFMultXYZ(&prevTransformInv, &carriedActor->world.pos, &tempPos); + SkinMatrix_Vec3fMtxFMultXYZ(&curTransform, &tempPos, &pos); - actor->world.pos = newPos; + carriedActor->world.pos = pos; } -void BgCheck2_UpdateActorYRotation(CollisionContext* colCtx, s32 bgId, Actor* actor) { - s16 angleChange; +/** + * Update the `carriedActor`'s Y rotation based on the dynapoly actor identified by `bgId`. + */ +void DynaPolyActor_UpdateCarriedActorRotY(CollisionContext* colCtx, s32 bgId, Actor* carriedActor) { + s16 rotY; if (!DynaPoly_IsBgIdBgActor(bgId)) { return; } - angleChange = colCtx->dyna.bgActors[bgId].curTransform.rot.y - colCtx->dyna.bgActors[bgId].prevTransform.rot.y; + rotY = colCtx->dyna.bgActors[bgId].curTransform.rot.y - colCtx->dyna.bgActors[bgId].prevTransform.rot.y; - if (actor->id == 0) { - ((Player*)actor)->currentYaw += angleChange; + if (carriedActor->id == ACTOR_PLAYER) { + ((Player*)carriedActor)->currentYaw += rotY; } - actor->shape.rot.y += angleChange; - actor->world.rot.y += angleChange; + carriedActor->shape.rot.y += rotY; + carriedActor->world.rot.y += rotY; } -void BgCheck2_AttachToMesh(CollisionContext* colCtx, Actor* actor, s32 bgId) { - DynaPolyActor* meshActor; +void DynaPolyActor_AttachCarriedActor(CollisionContext* colCtx, Actor* carriedActor, s32 bgId) { + DynaPolyActor* dynaActor; if (!DynaPoly_IsBgIdBgActor(bgId)) { return; } - meshActor = DynaPoly_GetActor(colCtx, bgId); - if (meshActor != NULL) { - DynaPolyActor_SetRidingFallingState(meshActor); + dynaActor = DynaPoly_GetActor(colCtx, bgId); + if (dynaActor != NULL) { + DynaPolyActor_SetActorOnTop(dynaActor); - if ((actor->flags & 0x4000000) == 0x4000000) { - DynaPolyActor_SetSwitchPressedState(meshActor); + if (CHECK_FLAG_ALL(carriedActor->flags, ACTOR_FLAG_CAN_PRESS_SWITCH)) { + DynaPolyActor_SetActorOnSwitch(dynaActor); } - if ((actor->flags & 0x20000) == 0x20000) { - DynaPolyActor_SetHeavySwitchPressedState(meshActor); + if (CHECK_FLAG_ALL(carriedActor->flags, ACTOR_FLAG_CAN_PRESS_HEAVY_SWITCH)) { + DynaPolyActor_SetActorOnHeavySwitch(dynaActor); } } } -u32 BgCheck2_UpdateActorAttachedToMesh(CollisionContext* colCtx, s32 bgId, Actor* actor) { - u32 wasUpdated = 0; - DynaPolyActor* meshActor; +/** + * Update the `carriedActor`'s position and Y rotation based on the dynapoly actor identified by `bgId`, according to + * the dynapoly actor's move flags (see `DYNA_TRANSFORM_POS` and `DYNA_TRANSFORM_ROT_Y`). + */ +u32 DynaPolyActor_TransformCarriedActor(CollisionContext* colCtx, s32 bgId, Actor* carriedActor) { + u32 wasUpdated = false; + DynaPolyActor* dynaActor; if (!DynaPoly_IsBgIdBgActor(bgId)) { - return 0; + return false; } - if (colCtx->dyna.bgActorFlags[bgId] & 2 || !(colCtx->dyna.bgActorFlags[bgId] & 1)) { - return 0; + if ((colCtx->dyna.bgActorFlags[bgId] & BGACTOR_1) || !(colCtx->dyna.bgActorFlags[bgId] & BGACTOR_IN_USE)) { + return false; } - meshActor = DynaPoly_GetActor(colCtx, bgId); + dynaActor = DynaPoly_GetActor(colCtx, bgId); - if (meshActor == NULL) { - return 0; + if (dynaActor == NULL) { + return false; } - if (meshActor->flags & 1) { - BgCheck2_UpdateActorPosition(colCtx, bgId, actor); - wasUpdated = 1; + if (dynaActor->transformFlags & DYNA_TRANSFORM_POS) { + DynaPolyActor_UpdateCarriedActorPos(colCtx, bgId, carriedActor); + wasUpdated = true; } - if (meshActor->flags & 2) { - BgCheck2_UpdateActorYRotation(colCtx, bgId, actor); - wasUpdated = 1; + if (dynaActor->transformFlags & DYNA_TRANSFORM_ROT_Y) { + DynaPolyActor_UpdateCarriedActorRotY(colCtx, bgId, carriedActor); + wasUpdated = true; } return wasUpdated; diff --git a/src/code/z_bg_item.c b/src/code/z_bg_item.c index 79bdf2b82..cedd77194 100644 --- a/src/code/z_bg_item.c +++ b/src/code/z_bg_item.c @@ -1,18 +1,15 @@ #include "global.h" -#define DYNAPOLY_STATE_NONE 0 -#define DYNAPOLY_STATE_RIDING_FALLING (1 << 0) -#define DYNAPOLY_STATE_RIDING_MOVING (1 << 1) -#define DYNAPOLY_STATE_RIDING_ROTATING (1 << 2) -#define DYNAPOLY_STATE_SWITCH_PRESSED (1 << 3) -#define DYNAPOLY_STATE_HEAVY_SWITCH_PRESSED (1 << 4) - -void DynaPolyActor_Init(DynaPolyActor* dynaActor, s32 flags) { +/** + * @param transformFlags How other actors standing on the dynapoly actor's collision move when the dynapoly actor moves. + * See `DYNA_TRANSFORM_POS`, `DYNA_TRANSFORM_ROT_Y`. + */ +void DynaPolyActor_Init(DynaPolyActor* dynaActor, s32 transformFlags) { dynaActor->bgId = -1; dynaActor->pushForce = 0.0f; dynaActor->unk14C = 0.0f; - dynaActor->flags = flags; - dynaActor->stateFlags = DYNAPOLY_STATE_NONE; + dynaActor->transformFlags = transformFlags; + dynaActor->interactFlags = 0; } void DynaPolyActor_LoadMesh(PlayState* play, DynaPolyActor* dynaActor, CollisionHeader* meshHeader) { @@ -22,80 +19,80 @@ void DynaPolyActor_LoadMesh(PlayState* play, DynaPolyActor* dynaActor, Collision dynaActor->bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &dynaActor->actor, header); } -void DynaPolyActor_ResetState(DynaPolyActor* dynaActor) { - dynaActor->stateFlags = DYNAPOLY_STATE_NONE; +void DynaPolyActor_UnsetAllInteractFlags(DynaPolyActor* dynaActor) { + dynaActor->interactFlags = 0; } -void DynaPolyActor_SetRidingFallingState(DynaPolyActor* dynaActor) { - dynaActor->stateFlags |= DYNAPOLY_STATE_RIDING_FALLING; +void DynaPolyActor_SetActorOnTop(DynaPolyActor* dynaActor) { + dynaActor->interactFlags |= DYNA_INTERACT_ACTOR_ON_TOP; } -void DynaPolyActor_SetRidingMovingState(DynaPolyActor* dynaActor) { - dynaActor->stateFlags |= DYNAPOLY_STATE_RIDING_MOVING; +void DynaPolyActor_SetPlayerOnTop(DynaPolyActor* dynaActor) { + dynaActor->interactFlags |= DYNA_INTERACT_PLAYER_ON_TOP; } -void DynaPolyActor_SetRidingMovingStateByIndex(CollisionContext* colCtx, s32 bgId) { +void DynaPoly_SetPlayerOnTop(CollisionContext* colCtx, s32 bgId) { DynaPolyActor* dynaActor = DynaPoly_GetActor(colCtx, bgId); if (dynaActor != NULL) { - DynaPolyActor_SetRidingMovingState(dynaActor); + DynaPolyActor_SetPlayerOnTop(dynaActor); } } -void DynaPolyActor_SetRidingRotatingState(DynaPolyActor* dynaActor) { - dynaActor->stateFlags |= DYNAPOLY_STATE_RIDING_ROTATING; +void DynaPolyActor_SetPlayerAbove(DynaPolyActor* dynaActor) { + dynaActor->interactFlags |= DYNA_INTERACT_PLAYER_ABOVE; } -void DynaPolyActor_SetRidingRotatingStateByIndex(CollisionContext* colCtx, s32 bgId) { +void DynaPoly_SetPlayerAbove(CollisionContext* colCtx, s32 bgId) { DynaPolyActor* dynaActor = DynaPoly_GetActor(colCtx, bgId); if (dynaActor != NULL) { - DynaPolyActor_SetRidingRotatingState(dynaActor); + DynaPolyActor_SetPlayerAbove(dynaActor); } } -void DynaPolyActor_SetSwitchPressedState(DynaPolyActor* dynaActor) { - dynaActor->stateFlags |= DYNAPOLY_STATE_SWITCH_PRESSED; +void DynaPolyActor_SetActorOnSwitch(DynaPolyActor* dynaActor) { + dynaActor->interactFlags |= DYNA_INTERACT_ACTOR_ON_SWITCH; } -void DynaPolyActor_SetHeavySwitchPressedState(DynaPolyActor* dynaActor) { - dynaActor->stateFlags |= DYNAPOLY_STATE_HEAVY_SWITCH_PRESSED; +void DynaPolyActor_SetActorOnHeavySwitch(DynaPolyActor* dynaActor) { + dynaActor->interactFlags |= DYNA_INTERACT_ACTOR_ON_HEAVY_SWITCH; } -s32 DynaPolyActor_IsInRidingFallingState(DynaPolyActor* dynaActor) { - if (dynaActor->stateFlags & DYNAPOLY_STATE_RIDING_FALLING) { +s32 DynaPolyActor_IsActorOnTop(DynaPolyActor* dynaActor) { + if (dynaActor->interactFlags & DYNA_INTERACT_ACTOR_ON_TOP) { return true; } else { return false; } } -s32 DynaPolyActor_IsInRidingMovingState(DynaPolyActor* dynaActor) { - if (dynaActor->stateFlags & DYNAPOLY_STATE_RIDING_MOVING) { +s32 DynaPolyActor_IsPlayerOnTop(DynaPolyActor* dynaActor) { + if (dynaActor->interactFlags & DYNA_INTERACT_PLAYER_ON_TOP) { return true; } else { return false; } } -s32 DynaPolyActor_IsInRidingRotatingState(DynaPolyActor* dynaActor) { - if (dynaActor->stateFlags & DYNAPOLY_STATE_RIDING_ROTATING) { +s32 DynaPolyActor_IsPlayerAbove(DynaPolyActor* dynaActor) { + if (dynaActor->interactFlags & DYNA_INTERACT_PLAYER_ABOVE) { return true; } else { return false; } } -s32 DynaPolyActor_IsInSwitchPressedState(DynaPolyActor* dynaActor) { - if (dynaActor->stateFlags & DYNAPOLY_STATE_SWITCH_PRESSED) { +s32 DynaPolyActor_IsSwitchPressed(DynaPolyActor* dynaActor) { + if (dynaActor->interactFlags & DYNA_INTERACT_ACTOR_ON_SWITCH) { return true; } else { return false; } } -s32 DynaPolyActor_IsInHeavySwitchPressedState(DynaPolyActor* dynaActor) { - if (dynaActor->stateFlags & DYNAPOLY_STATE_HEAVY_SWITCH_PRESSED) { +s32 DynaPolyActor_IsHeavySwitchPressed(DynaPolyActor* dynaActor) { + if (dynaActor->interactFlags & DYNA_INTERACT_ACTOR_ON_HEAVY_SWITCH) { return true; } else { return false; @@ -129,13 +126,16 @@ s32 DynaPolyActor_ValidateMove(PlayState* play, DynaPolyActor* dynaActor, s16 st &bgId, &dynaActor->actor, 0.0f)) { return false; } + startPos.x = (dynaActor->actor.world.pos.x * 2.0f) - startPos.x; startPos.z = (dynaActor->actor.world.pos.z * 2.0f) - startPos.z; endPos.x = sign * adjustedEndRadius * sin + startPos.x; endPos.z = sign * adjustedEndRadius * cos + startPos.z; + if (BgCheck_EntityLineTest3(&play->colCtx, &startPos, &endPos, &intersectionPos, &poly, true, false, false, true, &bgId, &dynaActor->actor, 0.0f)) { return false; } + return true; } diff --git a/src/code/z_bgcheck.c b/src/code/z_bgcheck.c index de0d5d12a..2fc1852ab 100644 --- a/src/code/z_bgcheck.c +++ b/src/code/z_bgcheck.c @@ -1665,7 +1665,7 @@ CollisionHeader* BgCheck_GetCollisionHeader(CollisionContext* colCtx, s32 bgId) if ((bgId < 0) || (bgId > BG_ACTOR_MAX)) { return NULL; } - if (!(colCtx->dyna.bgActorFlags[bgId] & 1)) { + if (!(colCtx->dyna.bgActorFlags[bgId] & BGACTOR_IN_USE)) { return NULL; } return colCtx->dyna.bgActors[bgId].colHeader; @@ -2719,8 +2719,8 @@ s32 DynaPoly_SetBgActor(PlayState* play, DynaCollisionContext* dyna, Actor* acto s32 foundSlot = false; for (bgId = 0; bgId < BG_ACTOR_MAX; bgId++) { - if (!(dyna->bgActorFlags[bgId] & 1)) { - dyna->bgActorFlags[bgId] |= 1; + if (!(dyna->bgActorFlags[bgId] & BGACTOR_IN_USE)) { + dyna->bgActorFlags[bgId] |= BGACTOR_IN_USE; foundSlot = true; break; } @@ -2733,7 +2733,7 @@ s32 DynaPoly_SetBgActor(PlayState* play, DynaCollisionContext* dyna, Actor* acto BgActor_SetActor(&dyna->bgActors[bgId], actor, colHeader); dyna->bitFlag |= DYNAPOLY_INVALIDATE_LOOKUP; - dyna->bgActorFlags[bgId] &= ~2; + dyna->bgActorFlags[bgId] &= ~BGACTOR_1; return bgId; } @@ -2741,51 +2741,51 @@ s32 DynaPoly_SetBgActor(PlayState* play, DynaCollisionContext* dyna, Actor* acto * Gets the actor assigned to `bgId` */ DynaPolyActor* DynaPoly_GetActor(CollisionContext* colCtx, s32 bgId) { - if (!DynaPoly_IsBgIdBgActor(bgId) || !(colCtx->dyna.bgActorFlags[bgId] & 1) || - (colCtx->dyna.bgActorFlags[bgId] & 2)) { + if (!DynaPoly_IsBgIdBgActor(bgId) || !(colCtx->dyna.bgActorFlags[bgId] & BGACTOR_IN_USE) || + (colCtx->dyna.bgActorFlags[bgId] & BGACTOR_1)) { return NULL; } return (DynaPolyActor*)colCtx->dyna.bgActors[bgId].actor; } -void func_800C62BC(PlayState* play, DynaCollisionContext* dyna, s32 bgId) { +void DynaPoly_DisableCollision(PlayState* play, DynaCollisionContext* dyna, s32 bgId) { if (DynaPoly_IsBgIdBgActor(bgId)) { - dyna->bgActorFlags[bgId] |= 4; + dyna->bgActorFlags[bgId] |= BGACTOR_COLLISION_DISABLED; dyna->bitFlag |= DYNAPOLY_INVALIDATE_LOOKUP; } } -void func_800C6314(PlayState* play, DynaCollisionContext* dyna, s32 bgId) { +void DynaPoly_EnableCollision(PlayState* play, DynaCollisionContext* dyna, s32 bgId) { if (DynaPoly_IsBgIdBgActor(bgId)) { - dyna->bgActorFlags[bgId] &= ~4; + dyna->bgActorFlags[bgId] &= ~BGACTOR_COLLISION_DISABLED; dyna->bitFlag |= DYNAPOLY_INVALIDATE_LOOKUP; } } -void func_800C636C(PlayState* play, DynaCollisionContext* dyna, s32 bgId) { +void DynaPoly_DisableCeilingCollision(PlayState* play, DynaCollisionContext* dyna, s32 bgId) { if (DynaPoly_IsBgIdBgActor(bgId)) { - dyna->bgActorFlags[bgId] |= 8; + dyna->bgActorFlags[bgId] |= BGACTOR_CEILING_COLLISION_DISABLED; dyna->bitFlag |= DYNAPOLY_INVALIDATE_LOOKUP; } } -void func_800C63C4(PlayState* play, DynaCollisionContext* dyna, s32 bgId) { +void DynaPoly_EnableCeilingCollision(PlayState* play, DynaCollisionContext* dyna, s32 bgId) { if (DynaPoly_IsBgIdBgActor(bgId)) { - dyna->bgActorFlags[bgId] &= ~8; + dyna->bgActorFlags[bgId] &= ~BGACTOR_CEILING_COLLISION_DISABLED; dyna->bitFlag |= DYNAPOLY_INVALIDATE_LOOKUP; } } -void func_800C641C(PlayState* play, DynaCollisionContext* dyna, s32 bgId) { +void DynaPoly_DisableFloorCollision(PlayState* play, DynaCollisionContext* dyna, s32 bgId) { if (DynaPoly_IsBgIdBgActor(bgId)) { - dyna->bgActorFlags[bgId] |= 0x20; + dyna->bgActorFlags[bgId] |= BGACTOR_FLOOR_COLLISION_DISABLED; dyna->bitFlag |= DYNAPOLY_INVALIDATE_LOOKUP; } } -void func_800C6474(PlayState* play, DynaCollisionContext* dyna, s32 bgId) { +void DynaPoly_EnableFloorCollision(PlayState* play, DynaCollisionContext* dyna, s32 bgId) { if (DynaPoly_IsBgIdBgActor(bgId)) { - dyna->bgActorFlags[bgId] &= ~0x20; + dyna->bgActorFlags[bgId] &= ~BGACTOR_FLOOR_COLLISION_DISABLED; dyna->bitFlag |= DYNAPOLY_INVALIDATE_LOOKUP; } } @@ -2804,11 +2804,11 @@ void DynaPoly_DeleteBgActor(PlayState* play, DynaCollisionContext* dyna, s32 bgI actor->bgId = BGACTOR_NEG_ONE; dyna->bgActors[bgId].actor = NULL; - dyna->bgActorFlags[bgId] |= 2; + dyna->bgActorFlags[bgId] |= BGACTOR_1; } } -void func_800C6554(PlayState* play, DynaCollisionContext* dyna) { +void DynaPoly_InvalidateLookup(PlayState* play, DynaCollisionContext* dyna) { dyna->bitFlag |= DYNAPOLY_INVALIDATE_LOOKUP; } @@ -2865,8 +2865,8 @@ void BgCheck_CalcWaterboxDimensions(Vec3f* minPos, Vec3f* maxXPos, Vec3f* maxZPo /** * original name: DynaPolyInfo_expandSRT */ -void DynaPoly_ExpandSRT(PlayState* play, DynaCollisionContext* dyna, s32 bgId, s32* vtxStartIndex, s32* polyStartIndex, - s32* waterBoxStartIndex) { +void DynaPoly_AddBgActorToLookup(PlayState* play, DynaCollisionContext* dyna, s32 bgId, s32* vtxStartIndex, + s32* polyStartIndex, s32* waterBoxStartIndex) { Actor* actor; s32 i; s32 j; @@ -2899,7 +2899,7 @@ void DynaPoly_ExpandSRT(PlayState* play, DynaCollisionContext* dyna, s32 bgId, s ScaleRotPos_SetValue(&dyna->bgActors[bgId].curTransform, &actor->scale, &actor->shape.rot, &pos); - if (dyna->bgActorFlags[bgId] & 4) { + if (dyna->bgActorFlags[bgId] & BGACTOR_COLLISION_DISABLED) { return; } @@ -2929,13 +2929,13 @@ void DynaPoly_ExpandSRT(PlayState* play, DynaCollisionContext* dyna, s32 bgId, s s16 normalY = poly->normal.y; if (normalY > COLPOLY_SNORMAL(0.5f)) { - if (!(dyna->bgActorFlags[bgId] & 0x20)) { + if (!(dyna->bgActorFlags[bgId] & BGACTOR_FLOOR_COLLISION_DISABLED)) { s16 polyIndex = pi; DynaSSNodeList_SetSSListHead(&dyna->polyNodes, &dyna->bgActors[bgId].dynaLookup.floor, &polyIndex); } } else if (normalY < COLPOLY_SNORMAL(-0.8f)) { - if (!(dyna->bgActorFlags[bgId] & 8)) { + if (!(dyna->bgActorFlags[bgId] & BGACTOR_CEILING_COLLISION_DISABLED)) { s16 polyIndex = pi; DynaSSNodeList_SetSSListHead(&dyna->polyNodes, &dyna->bgActors[bgId].dynaLookup.ceiling, @@ -3091,16 +3091,16 @@ void DynaPoly_ExpandSRT(PlayState* play, DynaCollisionContext* dyna, s32 bgId, s *waterBoxStartIndex += pbgdata->numWaterBoxes; } -void BgCheck_ResetFlagsIfLoadedActor(PlayState* play, DynaCollisionContext* dyna, Actor* actor) { +void DynaPoly_UnsetAllInteractFlags(PlayState* play, DynaCollisionContext* dyna, Actor* actor) { DynaPolyActor* dynaActor; s32 i; for (i = 0; i < BG_ACTOR_MAX; i++) { - if ((dyna->bgActorFlags[i] & 1)) { + if ((dyna->bgActorFlags[i] & BGACTOR_IN_USE)) { dynaActor = DynaPoly_GetActor(&play->colCtx, i); if ((dynaActor != NULL) && (&dynaActor->actor == actor)) { - DynaPolyActor_ResetState((DynaPolyActor*)actor); - return; + DynaPolyActor_UnsetAllInteractFlags((DynaPolyActor*)actor); + break; } } } @@ -3109,7 +3109,7 @@ void BgCheck_ResetFlagsIfLoadedActor(PlayState* play, DynaCollisionContext* dyna /** * original name: DynaPolyInfo_setup */ -void DynaPoly_Setup(PlayState* play, DynaCollisionContext* dyna) { +void DynaPoly_UpdateContext(PlayState* play, DynaCollisionContext* dyna) { DynaPolyActor* actor; s32 vtxStartIndex; s32 polyStartIndex; @@ -3123,7 +3123,7 @@ void DynaPoly_Setup(PlayState* play, DynaCollisionContext* dyna) { } for (i = 0; i < BG_ACTOR_MAX; i++) { - if (dyna->bgActorFlags[i] & 2) { + if (dyna->bgActorFlags[i] & BGACTOR_1) { // Initialize BgActor dyna->bgActorFlags[i] = 0; BgActor_Init(play, &dyna->bgActors[i]); @@ -3146,8 +3146,8 @@ void DynaPoly_Setup(PlayState* play, DynaCollisionContext* dyna) { polyStartIndex = 0; waterBoxStartIndex = 0; for (i = 0; i < BG_ACTOR_MAX; i++) { - if ((dyna->bgActorFlags[i] & 1) && !(dyna->bgActorFlags[i] & 2)) { - DynaPoly_ExpandSRT(play, dyna, i, &vtxStartIndex, &polyStartIndex, &waterBoxStartIndex); + if ((dyna->bgActorFlags[i] & BGACTOR_IN_USE) && !(dyna->bgActorFlags[i] & BGACTOR_1)) { + DynaPoly_AddBgActorToLookup(play, dyna, i, &vtxStartIndex, &polyStartIndex, &waterBoxStartIndex); } } dyna->bitFlag &= ~DYNAPOLY_INVALIDATE_LOOKUP; @@ -3165,7 +3165,8 @@ void func_800C756C(DynaCollisionContext* dyna, s32* numPolygons, s32* numVertice *numWaterBoxes = 0; for (i = 0; i < BG_ACTOR_MAX; i++) { - if ((dyna->bgActorFlags[i] & 1) && !(dyna->bgActorFlags[i] & 2) && !(dyna->bgActorFlags[i] & 4)) { + if ((dyna->bgActorFlags[i] & BGACTOR_IN_USE) && !(dyna->bgActorFlags[i] & BGACTOR_1) && + !(dyna->bgActorFlags[i] & BGACTOR_COLLISION_DISABLED)) { colHeader = dyna->bgActors[i].colHeader; *numPolygons += colHeader->numPolygons; *numVertices += colHeader->numVertices; @@ -3181,7 +3182,7 @@ void DynaPoly_UpdateBgActorTransforms(PlayState* play, DynaCollisionContext* dyn s32 i; for (i = 0; i < BG_ACTOR_MAX; i++) { - if (dyna->bgActorFlags[i] & 1) { + if (dyna->bgActorFlags[i] & BGACTOR_IN_USE) { DynaPoly_SetBgActorPrevTransform(play, &dyna->bgActors[i]); } } @@ -3275,7 +3276,8 @@ f32 BgCheck_RaycastFloorDyna(DynaRaycast* dynaRaycast) { *dynaRaycast->bgId = BGCHECK_SCENE; for (i = 0; i < BG_ACTOR_MAX; i++) { - if (!(dynaRaycast->colCtx->dyna.bgActorFlags[i] & 1) || (dynaRaycast->colCtx->dyna.bgActorFlags[i] & 2)) { + if (!(dynaRaycast->colCtx->dyna.bgActorFlags[i] & BGACTOR_IN_USE) || + (dynaRaycast->colCtx->dyna.bgActorFlags[i] & BGACTOR_1)) { continue; } @@ -3328,7 +3330,7 @@ f32 BgCheck_RaycastFloorDyna(DynaRaycast* dynaRaycast) { if (!pauseState) { pauseState = dynaRaycast->play->pauseCtx.debugEditor != DEBUG_EDITOR_NONE; } - if (!pauseState && (dynaRaycast->colCtx->dyna.bgActorFlags[*dynaRaycast->bgId] & 2)) { + if (!pauseState && (dynaRaycast->colCtx->dyna.bgActorFlags[*dynaRaycast->bgId] & BGACTOR_1)) { curTransform = &dynaRaycast->dyna->bgActors[*dynaRaycast->bgId].curTransform; polyMin = &dynaRaycast->dyna ->polyList[(u16)dynaRaycast->dyna->bgActors[*dynaRaycast->bgId].dynaLookup.polyStartIndex]; @@ -3587,7 +3589,7 @@ s32 BgCheck_SphVsDynaWall(CollisionContext* colCtx, u16 xpFlags, f32* outX, f32* resultPos = *pos; for (i = 0; i < BG_ACTOR_MAX; i++) { - if (!(colCtx->dyna.bgActorFlags[i] & 1) || (colCtx->dyna.bgActorFlags[i] & 2)) { + if (!(colCtx->dyna.bgActorFlags[i] & BGACTOR_IN_USE) || (colCtx->dyna.bgActorFlags[i] & BGACTOR_1)) { continue; } if ((colCtx->dyna.bgActors + i)->actor == actor) { @@ -3709,7 +3711,7 @@ s32 BgCheck_CheckDynaCeiling(CollisionContext* colCtx, u16 xpFlags, f32* outY, V resultY = tempY; for (i = 0; i < BG_ACTOR_MAX; i++) { - if (!(colCtx->dyna.bgActorFlags[i] & 1) || (colCtx->dyna.bgActorFlags[i] & 2)) { + if (!(colCtx->dyna.bgActorFlags[i] & BGACTOR_IN_USE) || (colCtx->dyna.bgActorFlags[i] & BGACTOR_1)) { continue; } if (actor == colCtx->dyna.bgActors[i].actor) { @@ -3855,7 +3857,7 @@ s32 BgCheck_CheckLineAgainstDyna(CollisionContext* colCtx, u16 xpFlags, Vec3f* p f32 by; for (i = 0; i < BG_ACTOR_MAX; i++) { - if ((colCtx->dyna.bgActorFlags[i] & 1) && !(colCtx->dyna.bgActorFlags[i] & 2)) { + if ((colCtx->dyna.bgActorFlags[i] & BGACTOR_IN_USE) && !(colCtx->dyna.bgActorFlags[i] & BGACTOR_1)) { if (actor != colCtx->dyna.bgActors[i].actor) { ay = posA->y; by = posB->y; @@ -3964,7 +3966,7 @@ s32 BgCheck_SphVsFirstDynaPoly(CollisionContext* colCtx, u16 xpFlags, CollisionP Sphere16 testSphere; for (i = 0; i < BG_ACTOR_MAX; i++) { - if (!(colCtx->dyna.bgActorFlags[i] & 1) || (colCtx->dyna.bgActorFlags[i] & 2)) { + if (!(colCtx->dyna.bgActorFlags[i] & BGACTOR_IN_USE) || (colCtx->dyna.bgActorFlags[i] & BGACTOR_1)) { continue; } if (colCtx->dyna.bgActors[i].actor == actor) { @@ -4019,7 +4021,7 @@ void BgCheck_InitCollisionHeaders(CollisionContext* colCtx, PlayState* play) { for (i = 0; i < BG_ACTOR_MAX; i++) { flag = dyna->bgActorFlags[i]; - if ((flag & 1) && !(flag & 2)) { + if ((flag & BGACTOR_IN_USE) && !(flag & BGACTOR_1)) { Actor_SetObjectDependency(play, dyna->bgActors[i].actor); CollisionHeader_SegmentedToVirtual(dyna->bgActors[i].colHeader); } @@ -4399,7 +4401,8 @@ s32 WaterBox_GetSurfaceImpl(PlayState* play, CollisionContext* colCtx, f32 x, f3 } for (i = 0; i < BG_ACTOR_MAX; i++) { - if (!(colCtx->dyna.bgActorFlags[i] & 1) || (colCtx->dyna.bgActorFlags[i] & 4)) { + if (!(colCtx->dyna.bgActorFlags[i] & BGACTOR_IN_USE) || + (colCtx->dyna.bgActorFlags[i] & BGACTOR_COLLISION_DISABLED)) { continue; } bgActor = &colCtx->dyna.bgActors[i]; @@ -4484,8 +4487,8 @@ s32 WaterBox_GetSurface2(PlayState* play, CollisionContext* colCtx, Vec3f* pos, for (i = 0; i < BG_ACTOR_MAX; i++) { - if (!(colCtx->dyna.bgActorFlags[i] & 1) || (colCtx->dyna.bgActorFlags[i] & 4) || - (colCtx->dyna.bgActorFlags[i] & 2)) { + if (!(colCtx->dyna.bgActorFlags[i] & BGACTOR_IN_USE) || + (colCtx->dyna.bgActorFlags[i] & BGACTOR_COLLISION_DISABLED) || (colCtx->dyna.bgActorFlags[i] & BGACTOR_1)) { continue; } bgActor = &colCtx->dyna.bgActors[i]; @@ -4618,7 +4621,7 @@ s32 func_800CA6F0(PlayState* play, CollisionContext* colCtx, f32 x, f32 z, f32* } } for (i = 0; i < BG_ACTOR_MAX; i++) { - if (!(colCtx->dyna.bgActorFlags[i] & 1) || (colCtx->dyna.bgActorFlags[i] & 2)) { + if (!(colCtx->dyna.bgActorFlags[i] & BGACTOR_IN_USE) || (colCtx->dyna.bgActorFlags[i] & BGACTOR_1)) { continue; } bgActor = &colCtx->dyna.bgActors[i]; diff --git a/src/code/z_player_call.c b/src/code/z_player_call.c index bdc124708..a109dab17 100644 --- a/src/code/z_player_call.c +++ b/src/code/z_player_call.c @@ -3,7 +3,7 @@ #define FLAGS \ (ACTOR_FLAG_1 | ACTOR_FLAG_8 | ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_200000 | ACTOR_FLAG_2000000 | \ - ACTOR_FLAG_4000000 | ACTOR_FLAG_80000000) + ACTOR_FLAG_CAN_PRESS_SWITCH | ACTOR_FLAG_80000000) ActorFunc sPlayerCallInitFunc; ActorFunc sPlayerCallDestroyFunc; diff --git a/src/overlays/actors/ovl_Bg_Astr_Bombwall/z_bg_astr_bombwall.c b/src/overlays/actors/ovl_Bg_Astr_Bombwall/z_bg_astr_bombwall.c index 647fabf73..a2af1839d 100644 --- a/src/overlays/actors/ovl_Bg_Astr_Bombwall/z_bg_astr_bombwall.c +++ b/src/overlays/actors/ovl_Bg_Astr_Bombwall/z_bg_astr_bombwall.c @@ -100,7 +100,7 @@ void BgAstrBombwall_Init(Actor* thisx, PlayState* play) { BgAstrBombwall* this = THIS; Actor_ProcessInitChain(&this->dyna.actor, sInitChain); - DynaPolyActor_Init(&this->dyna, 1); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); DynaPolyActor_LoadMesh(play, &this->dyna, &object_astr_obj_Colheader_002498); Collider_InitTris(play, &this->collider); if (Flags_GetSwitch(play, BGASTRBOMBWALL_GET_SWITCHFLAG(thisx))) { @@ -181,7 +181,7 @@ void func_80C0A418(BgAstrBombwall* this, PlayState* play) { } void func_80C0A458(BgAstrBombwall* this, PlayState* play) { - func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); this->dyna.actor.draw = NULL; func_80C0A120(this, play); Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_WALL_BROKEN); diff --git a/src/overlays/actors/ovl_Bg_Crace_Movebg/z_bg_crace_movebg.c b/src/overlays/actors/ovl_Bg_Crace_Movebg/z_bg_crace_movebg.c index ef2ca5273..2a1a7dce8 100644 --- a/src/overlays/actors/ovl_Bg_Crace_Movebg/z_bg_crace_movebg.c +++ b/src/overlays/actors/ovl_Bg_Crace_Movebg/z_bg_crace_movebg.c @@ -75,7 +75,7 @@ void BgCraceMovebg_Init(Actor* thisx, PlayState* play) { sHasInitializedIsLoaded = true; } - DynaPolyActor_Init(&this->dyna, 1); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); DynaPolyActor_LoadMesh(play, &this->dyna, &gDekuShrineSlidingDoorCol); this->index = BG_CRACE_MOVEBG_GET_INDEX(&this->dyna.actor); diff --git a/src/overlays/actors/ovl_Bg_Ctower_Gear/z_bg_ctower_gear.c b/src/overlays/actors/ovl_Bg_Ctower_Gear/z_bg_ctower_gear.c index 533ce6292..5ee73366a 100644 --- a/src/overlays/actors/ovl_Bg_Ctower_Gear/z_bg_ctower_gear.c +++ b/src/overlays/actors/ovl_Bg_Ctower_Gear/z_bg_ctower_gear.c @@ -127,12 +127,12 @@ void BgCtowerGear_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->dyna.actor, sInitChain); } if (type == BGCTOWERGEAR_WATER_WHEEL) { - DynaPolyActor_Init(&this->dyna, 3); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS | DYNA_TRANSFORM_ROT_Y); DynaPolyActor_LoadMesh(play, &this->dyna, &gClockTowerWaterWheelCol); } else if (type == BGCTOWERGEAR_ORGAN) { DynaPolyActor_Init(&this->dyna, 0); DynaPolyActor_LoadMesh(play, &this->dyna, &gClockTowerOrganCol); - func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); } } @@ -167,15 +167,20 @@ void BgCtowerGear_UpdateOrgan(Actor* thisx, PlayState* play) { switch (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 104)]->action) { case 1: this->dyna.actor.draw = NULL; - func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); break; + case 2: this->dyna.actor.draw = BgCtowerGear_DrawOrgan; - func_800C6314(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId); break; + case 3: Actor_Kill(&this->dyna.actor); break; + + default: + break; } } } diff --git a/src/overlays/actors/ovl_Bg_Ctower_Rot/z_bg_ctower_rot.c b/src/overlays/actors/ovl_Bg_Ctower_Rot/z_bg_ctower_rot.c index 5cc9d4b8d..e94b28d88 100644 --- a/src/overlays/actors/ovl_Bg_Ctower_Rot/z_bg_ctower_rot.c +++ b/src/overlays/actors/ovl_Bg_Ctower_Rot/z_bg_ctower_rot.c @@ -46,7 +46,7 @@ void BgCtowerRot_Init(Actor* thisx, PlayState* play) { Vec3f offset; Actor_ProcessInitChain(&this->dyna.actor, sInitChain); - DynaPolyActor_Init(&this->dyna, 1); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); if (this->dyna.actor.params == BGCTOWERROT_CORRIDOR) { DynaPolyActor_LoadMesh(play, &this->dyna, &gClockTowerCorridorCol); this->actionFunc = BgCtowerRot_CorridorRotate; diff --git a/src/overlays/actors/ovl_Bg_Dblue_Balance/z_bg_dblue_balance.c b/src/overlays/actors/ovl_Bg_Dblue_Balance/z_bg_dblue_balance.c index 064b14f7b..51797185a 100644 --- a/src/overlays/actors/ovl_Bg_Dblue_Balance/z_bg_dblue_balance.c +++ b/src/overlays/actors/ovl_Bg_Dblue_Balance/z_bg_dblue_balance.c @@ -317,7 +317,7 @@ void BgDblueBalance_Init(Actor* thisx, PlayState* play) { this->dyna.actor.update = sTypeInfo[sp2C].update; this->dyna.actor.draw = sTypeInfo[sp2C].draw; - DynaPolyActor_Init(&this->dyna, 1); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); DynaPolyActor_LoadMesh(play, &this->dyna, sTypeInfo[sp2C].colHeader); if (sp2C == 3) { @@ -412,17 +412,17 @@ void func_80B82DE0(BgDblueBalance* this, PlayState* play) { phi_a1 = 1; this->unk_17D = 20; if (balance1 != NULL) { - if (balance1->unk_181 != 0) { + if (balance1->isHeavySwitchPressed) { phi_a0 = 4; - } else if (balance1->unk_180 != 0) { + } else if (balance1->isSwitchPressed) { phi_a0 = 2; } } if (balance2 != NULL) { - if (balance2->unk_181 != 0) { + if (balance2->isHeavySwitchPressed) { phi_a1 = 5; - } else if (balance2->unk_180 != 0) { + } else if (balance2->isSwitchPressed) { phi_a1 = 3; } } @@ -546,8 +546,8 @@ void BgDblueBalance_Update(Actor* thisx, PlayState* play) { void func_80B8330C(Actor* thisx, PlayState* play) { BgDblueBalance* this = THIS; - this->unk_180 = DynaPolyActor_IsInSwitchPressedState(&this->dyna); - this->unk_181 = DynaPolyActor_IsInHeavySwitchPressedState(&this->dyna); + this->isSwitchPressed = DynaPolyActor_IsSwitchPressed(&this->dyna); + this->isHeavySwitchPressed = DynaPolyActor_IsHeavySwitchPressed(&this->dyna); } void func_80B83344(BgDblueBalance* this) { diff --git a/src/overlays/actors/ovl_Bg_Dblue_Balance/z_bg_dblue_balance.h b/src/overlays/actors/ovl_Bg_Dblue_Balance/z_bg_dblue_balance.h index f2200e96f..5d72ea3db 100644 --- a/src/overlays/actors/ovl_Bg_Dblue_Balance/z_bg_dblue_balance.h +++ b/src/overlays/actors/ovl_Bg_Dblue_Balance/z_bg_dblue_balance.h @@ -33,8 +33,8 @@ typedef struct BgDblueBalance { /* 0x17D */ s8 unk_17D; /* 0x17E */ s8 unk_17E; /* 0x17F */ s8 unk_17F; - /* 0x180 */ s8 unk_180; - /* 0x181 */ s8 unk_181; + /* 0x180 */ s8 isSwitchPressed; + /* 0x181 */ s8 isHeavySwitchPressed; /* 0x182 */ s8 unk_182; /* 0x183 */ u8 unk_183; /* 0x184 */ s16 unk_184; diff --git a/src/overlays/actors/ovl_Bg_Dblue_Movebg/z_bg_dblue_movebg.c b/src/overlays/actors/ovl_Bg_Dblue_Movebg/z_bg_dblue_movebg.c index 1ffba6755..960006b93 100644 --- a/src/overlays/actors/ovl_Bg_Dblue_Movebg/z_bg_dblue_movebg.c +++ b/src/overlays/actors/ovl_Bg_Dblue_Movebg/z_bg_dblue_movebg.c @@ -163,7 +163,7 @@ void BgDblueMovebg_Init(Actor* thisx, PlayState* play) { this->unk_160 = BGDBLUEMOVEBG_GET_F(thisx); this->unk_1BC = BGDBLUEMOVEBG_GET_F000(thisx); this->unk_1C0 = BGDBLUEMOVEBG_GET_FF0(thisx); - DynaPolyActor_Init(&this->dyna, 1); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); if ((this->unk_160 == 9) || (this->unk_160 == 8)) { if (D_80A2BBF4.unk_00 != 0) { diff --git a/src/overlays/actors/ovl_Bg_Dkjail_Ivy/z_bg_dkjail_ivy.c b/src/overlays/actors/ovl_Bg_Dkjail_Ivy/z_bg_dkjail_ivy.c index 124469557..eb1848c56 100644 --- a/src/overlays/actors/ovl_Bg_Dkjail_Ivy/z_bg_dkjail_ivy.c +++ b/src/overlays/actors/ovl_Bg_Dkjail_Ivy/z_bg_dkjail_ivy.c @@ -161,7 +161,7 @@ void BgDkjailIvy_BeginCutscene(BgDkjailIvy* this, PlayState* play) { if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) { ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor); this->fadeOutTimer = 50; - func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); Flags_SetSwitch(play, BG_DKJAIL_GET_SWITCH(&this->dyna.actor)); BgDkjailIvy_IvyCutEffects(this, play); Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_GRASS_WALL_BROKEN); diff --git a/src/overlays/actors/ovl_Bg_F40_Block/z_bg_f40_block.c b/src/overlays/actors/ovl_Bg_F40_Block/z_bg_f40_block.c index e6b18c220..a39e10559 100644 --- a/src/overlays/actors/ovl_Bg_F40_Block/z_bg_f40_block.c +++ b/src/overlays/actors/ovl_Bg_F40_Block/z_bg_f40_block.c @@ -228,7 +228,7 @@ void BgF40Block_Init(Actor* thisx, PlayState* play) { BgF40Block* this = THIS; Actor_ProcessInitChain(&this->dyna.actor, sInitChain); - DynaPolyActor_Init(&this->dyna, 1); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); DynaPolyActor_LoadMesh(play, &this->dyna, &object_f40_obj_Colheader_004640); if (BGF40BLOCK_GET_PATH(&this->dyna.actor) != 0x3F) { diff --git a/src/overlays/actors/ovl_Bg_F40_Flift/z_bg_f40_flift.c b/src/overlays/actors/ovl_Bg_F40_Flift/z_bg_f40_flift.c index 4ae6a8ed7..075f38607 100644 --- a/src/overlays/actors/ovl_Bg_F40_Flift/z_bg_f40_flift.c +++ b/src/overlays/actors/ovl_Bg_F40_Flift/z_bg_f40_flift.c @@ -41,7 +41,7 @@ void BgF40Flift_Init(Actor* thisx, PlayState* play) { BgF40Flift* this = THIS; Actor_ProcessInitChain(&this->dyna.actor, sInitChain); - DynaPolyActor_Init(&this->dyna, 1); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); DynaPolyActor_LoadMesh(play, &this->dyna, &object_f40_obj_Colheader_004240); this->dyna.actor.params = 1; this->actionFunc = func_808D75F0; @@ -54,8 +54,8 @@ void BgF40Flift_Destroy(Actor* thisx, PlayState* play) { } void func_808D75F0(BgF40Flift* this, PlayState* play) { - if (((this->dyna.actor.params == 1) && (DynaPolyActor_IsInRidingMovingState(&this->dyna))) || - ((this->dyna.actor.params == -1) && (!DynaPolyActor_IsInRidingMovingState(&this->dyna)))) { + if (((this->dyna.actor.params == 1) && DynaPolyActor_IsPlayerOnTop(&this->dyna)) || + ((this->dyna.actor.params == -1) && !DynaPolyActor_IsPlayerOnTop(&this->dyna))) { this->timer = 96; this->actionFunc = func_808D7714; } else { diff --git a/src/overlays/actors/ovl_Bg_F40_Switch/z_bg_f40_switch.c b/src/overlays/actors/ovl_Bg_F40_Switch/z_bg_f40_switch.c index 558c77064..ffa9491d6 100644 --- a/src/overlays/actors/ovl_Bg_F40_Switch/z_bg_f40_switch.c +++ b/src/overlays/actors/ovl_Bg_F40_Switch/z_bg_f40_switch.c @@ -56,7 +56,7 @@ void BgF40Switch_CheckAll(BgF40Switch* this, PlayState* play) { if (actor->id == ACTOR_BG_F40_SWITCH && actor->room == this->dyna.actor.room && actor->update != NULL) { actorAsSwitch = (BgF40Switch*)actor; actorAsSwitch->wasPressed = actorAsSwitch->isPressed; - isPressed = DynaPolyActor_IsInSwitchPressedState(&actorAsSwitch->dyna); + isPressed = DynaPolyActor_IsSwitchPressed(&actorAsSwitch->dyna); if (actorAsSwitch->isPressed && actorAsSwitch->actionFunc == BgF40Switch_IdlePressed) { // Switch is fully pressed - if there's nothing keeping it pressed, wait a short time before // reverting to unpressed state. @@ -112,7 +112,7 @@ void BgF40Switch_Init(Actor* thisx, PlayState* play) { this->dyna.actor.scale.y = 0.165f; this->actionFunc = BgF40Switch_IdleUnpressed; this->dyna.actor.world.pos.y = this->dyna.actor.home.pos.y + 1.0f; - DynaPolyActor_Init(&this->dyna, 1); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); DynaPolyActor_LoadMesh(play, &this->dyna, &object_f40_switch_Colheader_000118); if (!sBgF40SwitchGlobalsInitialized) { sBgF40SwitchLastUpdateFrame = play->gameplayFrames; diff --git a/src/overlays/actors/ovl_Bg_Fu_Kaiten/z_bg_fu_kaiten.c b/src/overlays/actors/ovl_Bg_Fu_Kaiten/z_bg_fu_kaiten.c index 40a981a6e..bec649b57 100644 --- a/src/overlays/actors/ovl_Bg_Fu_Kaiten/z_bg_fu_kaiten.c +++ b/src/overlays/actors/ovl_Bg_Fu_Kaiten/z_bg_fu_kaiten.c @@ -34,7 +34,7 @@ void BgFuKaiten_Init(Actor* thisx, PlayState* play) { CollisionHeader* header = NULL; Actor_SetScale(thisx, 1.0); - DynaPolyActor_Init(&this->dyna, 3); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS | DYNA_TRANSFORM_ROT_Y); CollisionHeader_GetVirtual(&object_fu_kaiten_Colheader_002D30, &header); this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, header); diff --git a/src/overlays/actors/ovl_Bg_Fu_Mizu/z_bg_fu_mizu.c b/src/overlays/actors/ovl_Bg_Fu_Mizu/z_bg_fu_mizu.c index 5cb337238..7f485be1d 100644 --- a/src/overlays/actors/ovl_Bg_Fu_Mizu/z_bg_fu_mizu.c +++ b/src/overlays/actors/ovl_Bg_Fu_Mizu/z_bg_fu_mizu.c @@ -34,7 +34,7 @@ void BgFuMizu_Init(Actor* thisx, PlayState* play) { CollisionHeader* colHeader = NULL; Actor_SetScale(&this->dyna.actor, 1.0f); - DynaPolyActor_Init(&this->dyna, 1); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); CollisionHeader_GetVirtual(&object_fu_kaiten_Colheader_0037F8, &colHeader); this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, colHeader); this->unk_160 = 0; diff --git a/src/overlays/actors/ovl_Bg_Goron_Oyu/z_bg_goron_oyu.c b/src/overlays/actors/ovl_Bg_Goron_Oyu/z_bg_goron_oyu.c index c9020349c..8b02330f3 100644 --- a/src/overlays/actors/ovl_Bg_Goron_Oyu/z_bg_goron_oyu.c +++ b/src/overlays/actors/ovl_Bg_Goron_Oyu/z_bg_goron_oyu.c @@ -152,7 +152,7 @@ void BgGoronOyu_Init(Actor* thisx, PlayState* play) { CollisionHeader* colHeader = NULL; Actor_SetScale(&this->dyna.actor, 0.1f); - DynaPolyActor_Init(&this->dyna, 1); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); CollisionHeader_GetVirtual(&object_oyu_Colheader_000988, &colHeader); this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, colHeader); diff --git a/src/overlays/actors/ovl_Bg_Haka_Bombwall/z_bg_haka_bombwall.c b/src/overlays/actors/ovl_Bg_Haka_Bombwall/z_bg_haka_bombwall.c index 331a6dfe5..387f5ec83 100644 --- a/src/overlays/actors/ovl_Bg_Haka_Bombwall/z_bg_haka_bombwall.c +++ b/src/overlays/actors/ovl_Bg_Haka_Bombwall/z_bg_haka_bombwall.c @@ -202,7 +202,7 @@ void BgHakaBombwall_PlayCutscene(BgHakaBombwall* this, PlayState* play) { this->dyna.actor.draw = NULL; Flags_SetSwitch(play, BGHAKABOMBWALL_GET_7F(&this->dyna.actor)); SoundSource_PlaySfxAtFixedWorldPos(play, &this->dyna.actor.world.pos, 0x3C, NA_SE_EV_WALL_BROKEN); - func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); BgHakaBombwall_SetupEndCutscene(this); } else { ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); diff --git a/src/overlays/actors/ovl_Bg_Haka_Curtain/z_bg_haka_curtain.c b/src/overlays/actors/ovl_Bg_Haka_Curtain/z_bg_haka_curtain.c index 412ea3a39..b90774172 100644 --- a/src/overlays/actors/ovl_Bg_Haka_Curtain/z_bg_haka_curtain.c +++ b/src/overlays/actors/ovl_Bg_Haka_Curtain/z_bg_haka_curtain.c @@ -49,7 +49,7 @@ void BgHakaCurtain_Init(Actor* thisx, PlayState* play) { BgHakaCurtain* this = THIS; Actor_ProcessInitChain(&this->dyna.actor, sInitChain); - DynaPolyActor_Init(&this->dyna, 1); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); DynaPolyActor_LoadMesh(play, &this->dyna, &object_haka_obj_Colheader_001588); if (Flags_GetClear(play, this->dyna.actor.room)) { func_80B6DE80(this); diff --git a/src/overlays/actors/ovl_Bg_Haka_Tomb/z_bg_haka_tomb.c b/src/overlays/actors/ovl_Bg_Haka_Tomb/z_bg_haka_tomb.c index a8d63c309..94e7c57dc 100644 --- a/src/overlays/actors/ovl_Bg_Haka_Tomb/z_bg_haka_tomb.c +++ b/src/overlays/actors/ovl_Bg_Haka_Tomb/z_bg_haka_tomb.c @@ -45,7 +45,7 @@ void BgHakaTomb_Init(Actor* thisx, PlayState* play) { BgHakaTomb* this = THIS; Actor_ProcessInitChain(&this->dyna.actor, sInitChain); - DynaPolyActor_Init(&this->dyna, 1); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); DynaPolyActor_LoadMesh(play, &this->dyna, &object_haka_obj_Colheader_000EE8); SubS_FillCutscenesList(&this->dyna.actor, this->cutscenes, ARRAY_COUNT(this->cutscenes)); func_80BD6624(this); diff --git a/src/overlays/actors/ovl_Bg_Hakugin_Bombwall/z_bg_hakugin_bombwall.c b/src/overlays/actors/ovl_Bg_Hakugin_Bombwall/z_bg_hakugin_bombwall.c index bde3c8540..41112ccdc 100644 --- a/src/overlays/actors/ovl_Bg_Hakugin_Bombwall/z_bg_hakugin_bombwall.c +++ b/src/overlays/actors/ovl_Bg_Hakugin_Bombwall/z_bg_hakugin_bombwall.c @@ -369,7 +369,7 @@ s32 func_80ABCC00(BgHakuginBombwall* this, PlayState* play) { return true; } } - } else if (DynaPolyActor_IsInRidingMovingState(&this->dyna)) { + } else if (DynaPolyActor_IsPlayerOnTop(&this->dyna)) { SoundSource_PlaySfxAtFixedWorldPos(play, &this->dyna.actor.world.pos, 50, NA_SE_EV_WALL_BROKEN); return true; } @@ -401,7 +401,7 @@ void func_80ABCD98(BgHakuginBombwall* this, PlayState* play) { this->dyna.actor.draw = NULL; this->unk_1AC = 20; Flags_SetSwitch(play, BGHAKUGIN_BOMBWALL_SWITCHFLAG(&this->dyna.actor)); - func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); this->actionFunc = func_80ABCE60; } else { ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene); diff --git a/src/overlays/actors/ovl_Bg_Hakugin_Post/z_bg_hakugin_post.c b/src/overlays/actors/ovl_Bg_Hakugin_Post/z_bg_hakugin_post.c index d4d7e1724..5a06fe415 100644 --- a/src/overlays/actors/ovl_Bg_Hakugin_Post/z_bg_hakugin_post.c +++ b/src/overlays/actors/ovl_Bg_Hakugin_Post/z_bg_hakugin_post.c @@ -703,7 +703,7 @@ void BgHakuginPost_Init(Actor* thisx, PlayState* play) { this->dyna.actor.world.rot.z = 0; this->dyna.actor.shape.rot.x = 0; this->dyna.actor.shape.rot.z = 0; - DynaPolyActor_Init(&this->dyna, 1); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); DynaPolyActor_LoadMesh(play, &this->dyna, &object_hakugin_obj_Colheader_00D3B0); func_80A9B3BC(this, play); func_80A9CA94(this); diff --git a/src/overlays/actors/ovl_Bg_Hakugin_Switch/z_bg_hakugin_switch.c b/src/overlays/actors/ovl_Bg_Hakugin_Switch/z_bg_hakugin_switch.c index 3f7379d34..512a5b822 100644 --- a/src/overlays/actors/ovl_Bg_Hakugin_Switch/z_bg_hakugin_switch.c +++ b/src/overlays/actors/ovl_Bg_Hakugin_Switch/z_bg_hakugin_switch.c @@ -126,7 +126,7 @@ void BgHakuginSwitch_Init(Actor* thisx, PlayState* play) { sp30 = false; } - DynaPolyActor_Init(&this->dyna, 1); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); DynaPolyActor_LoadMesh(play, &this->dyna, &object_goronswitch_Colheader_0005C8); Collider_InitCylinder(play, &this->collider); @@ -244,7 +244,7 @@ void func_80B15B74(BgHakuginSwitch* this, PlayState* play) { if (sp34) { this->collider.base.acFlags &= ~AC_HIT; - if (DynaPolyActor_IsInRidingMovingState(&this->dyna)) { + if (DynaPolyActor_IsPlayerOnTop(&this->dyna)) { sp24 = true; sp20 = sp28; } @@ -306,7 +306,7 @@ void func_80B15E78(BgHakuginSwitch* this, PlayState* play) { BgHakuginSwitchStruct* sp20 = &D_80B1688C[BGHAKUGINSWITCH_GET_7(&this->dyna.actor)]; if (Math_StepToF(&this->dyna.actor.world.pos.y, sp20->unk_4 + this->dyna.actor.home.pos.y, sp20->unk_C)) { - if (DynaPolyActor_IsInRidingMovingState(&this->dyna)) { + if (DynaPolyActor_IsPlayerOnTop(&this->dyna)) { Rumble_Request(this->dyna.actor.xyzDistToPlayerSq, 120, 20, 10); } func_80B15F3C(this, play); @@ -413,7 +413,7 @@ void func_80B162AC(BgHakuginSwitch* this, PlayState* play) { if (sp34) { this->collider.base.acFlags &= ~AC_HIT; - if (DynaPolyActor_IsInRidingMovingState(&this->dyna)) { + if (DynaPolyActor_IsPlayerOnTop(&this->dyna)) { sp24 = true; sp28 = true; } @@ -446,7 +446,7 @@ void func_80B163C4(BgHakuginSwitch* this, PlayState* play) { void func_80B16400(BgHakuginSwitch* this, PlayState* play) { if (Math_StepToF(&this->dyna.actor.world.pos.y, (this->dyna.actor.home.pos.y + 2.0f) - (1800.0f * this->dyna.actor.scale.y), 10.0f)) { - if (DynaPolyActor_IsInRidingMovingState(&this->dyna)) { + if (DynaPolyActor_IsPlayerOnTop(&this->dyna)) { Rumble_Request(this->dyna.actor.xyzDistToPlayerSq, 120, 20, 10); } func_80B16494(this, play); @@ -510,8 +510,8 @@ void BgHakuginSwitch_Update(Actor* thisx, PlayState* play) { if (this->unk_1C0 != 0) { f32 phi_f0; - if (DynaPolyActor_IsInSwitchPressedState(&this->dyna)) { - if (DynaPolyActor_IsInHeavySwitchPressedState(&this->dyna)) { + if (DynaPolyActor_IsSwitchPressed(&this->dyna)) { + if (DynaPolyActor_IsHeavySwitchPressed(&this->dyna)) { phi_f0 = (sp24 - -10.0f) * -0.21f; } else { phi_f0 = (sp24 - -3.0f) * -0.08f; diff --git a/src/overlays/actors/ovl_Bg_Icicle/z_bg_icicle.c b/src/overlays/actors/ovl_Bg_Icicle/z_bg_icicle.c index eabd3f3fe..740d807d8 100644 --- a/src/overlays/actors/ovl_Bg_Icicle/z_bg_icicle.c +++ b/src/overlays/actors/ovl_Bg_Icicle/z_bg_icicle.c @@ -150,7 +150,7 @@ void BgIcicle_Shiver(BgIcicle* this, PlayState* play) { this->dyna.actor.world.pos.z = this->dyna.actor.home.pos.z; CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base); - func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); this->actionFunc = BgIcicle_Fall; } else { rand = Rand_ZeroOne(); @@ -175,7 +175,7 @@ void BgIcicle_Fall(BgIcicle* this, PlayState* play) { if (this->dyna.actor.params == ICICLE_STALACTITE_REGROW) { this->dyna.actor.world.pos.y = this->dyna.actor.home.pos.y + 120.0f; - func_800C6314(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId); this->actionFunc = BgIcicle_Regrow; } else { Actor_Kill(&this->dyna.actor); @@ -216,7 +216,7 @@ void BgIcicle_UpdateAttacked(BgIcicle* this, PlayState* play) { if (this->dyna.actor.params == ICICLE_STALACTITE_REGROW) { BgIcicle_Break(this, play, 40.0f); this->dyna.actor.world.pos.y = this->dyna.actor.home.pos.y + 120.0f; - func_800C6314(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId); this->actionFunc = BgIcicle_Regrow; return; } diff --git a/src/overlays/actors/ovl_Bg_Ikana_Block/z_bg_ikana_block.c b/src/overlays/actors/ovl_Bg_Ikana_Block/z_bg_ikana_block.c index 5f35aaa4d..622c84100 100644 --- a/src/overlays/actors/ovl_Bg_Ikana_Block/z_bg_ikana_block.c +++ b/src/overlays/actors/ovl_Bg_Ikana_Block/z_bg_ikana_block.c @@ -184,9 +184,9 @@ void BgIkanaBlock_Init(Actor* thisx, PlayState* play) { BgIkanaBlock* this = THIS; Actor_ProcessInitChain(&this->dyna.actor, sInitChain); - DynaPolyActor_Init(&this->dyna, 1); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); DynaPolyActor_LoadMesh(play, &this->dyna, &gameplay_dangeon_keep_Colheader_007498); - func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); this->unk_15C = Lib_SegmentedToVirtual(gameplay_dangeon_keep_Matanimheader_01B370); this->unk_174 = this->dyna.actor.shape.rot; func_80B7ED54(this); @@ -211,7 +211,7 @@ void func_80B7F034(BgIkanaBlock* this, PlayState* play) { } if (func_80B7EEB4(this, play)) { - func_800C6314(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId); this->dyna.actor.draw = func_80B7F564; func_80B7F0A4(this); } diff --git a/src/overlays/actors/ovl_Bg_Ikana_Bombwall/z_bg_ikana_bombwall.c b/src/overlays/actors/ovl_Bg_Ikana_Bombwall/z_bg_ikana_bombwall.c index 04f7f514b..88f606ac0 100644 --- a/src/overlays/actors/ovl_Bg_Ikana_Bombwall/z_bg_ikana_bombwall.c +++ b/src/overlays/actors/ovl_Bg_Ikana_Bombwall/z_bg_ikana_bombwall.c @@ -335,7 +335,7 @@ void func_80BD503C(BgIkanaBombwall* this, PlayState* play) { SoundSource_PlaySfxAtFixedWorldPos(play, &this->dyna.actor.world.pos, 60, NA_SE_EV_WALL_BROKEN); Flags_SetSwitch(play, BGIKANABOMBWALL_GET_SWITCHFLAG(&this->dyna.actor)); if (!BGIKANABOMBWALL_GET_100(&this->dyna.actor)) { - func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); } func_80BD5118(this); } else { diff --git a/src/overlays/actors/ovl_Bg_Ikana_Rotaryroom/z_bg_ikana_rotaryroom.c b/src/overlays/actors/ovl_Bg_Ikana_Rotaryroom/z_bg_ikana_rotaryroom.c index 27ca91c95..432a5b5ff 100644 --- a/src/overlays/actors/ovl_Bg_Ikana_Rotaryroom/z_bg_ikana_rotaryroom.c +++ b/src/overlays/actors/ovl_Bg_Ikana_Rotaryroom/z_bg_ikana_rotaryroom.c @@ -714,7 +714,7 @@ void BgIkanaRotaryroom_Init(Actor* thisx, PlayState* play) { this->dyna.actor.shape.rot.x = 0; } - DynaPolyActor_Init(&this->dyna, 1); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); DynaPolyActor_LoadMesh(play, &this->dyna, D_80B82218[sp34]); Collider_InitJntSph(play, &this->collider); diff --git a/src/overlays/actors/ovl_Bg_Iknin_Susceil/z_bg_iknin_susceil.c b/src/overlays/actors/ovl_Bg_Iknin_Susceil/z_bg_iknin_susceil.c index a9070cb8b..824c58ee6 100644 --- a/src/overlays/actors/ovl_Bg_Iknin_Susceil/z_bg_iknin_susceil.c +++ b/src/overlays/actors/ovl_Bg_Iknin_Susceil/z_bg_iknin_susceil.c @@ -62,11 +62,11 @@ s32 func_80C0A740(BgIkninSusceil* this, PlayState* play) { } void func_80C0A804(BgIkninSusceil* this, PlayState* play) { - func_800C6314(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId); } void func_80C0A838(BgIkninSusceil* this, PlayState* play) { - func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); } void func_80C0A86C(BgIkninSusceil* this, PlayState* play, s16 verticalMag, s16 countdown, s32 arg4) { @@ -115,7 +115,7 @@ void BgIkninSusceil_Init(Actor* thisx, PlayState* play) { BgIkninSusceil* this = THIS; Actor_ProcessInitChain(&this->dyna.actor, sInitChain); - DynaPolyActor_Init(&this->dyna, 1); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); DynaPolyActor_LoadMesh(play, &this->dyna, &object_ikninside_obj_Colheader_00CBAC); this->animatedTexture = Lib_SegmentedToVirtual(object_ikninside_obj_Matanimheader_00C670); func_80C0AC74(this); diff --git a/src/overlays/actors/ovl_Bg_Ikninside/z_bg_ikninside.c b/src/overlays/actors/ovl_Bg_Ikninside/z_bg_ikninside.c index 6016b2e44..db343e84b 100644 --- a/src/overlays/actors/ovl_Bg_Ikninside/z_bg_ikninside.c +++ b/src/overlays/actors/ovl_Bg_Ikninside/z_bg_ikninside.c @@ -121,7 +121,7 @@ void func_80C072D0(BgIkninside* this, PlayState* play) { Flags_SetSwitch(play, DMIKNINSIDE_GET_SWITCH(&this->dyna.actor)); this->actionFunc = func_80C07230; this->dyna.actor.draw = NULL; - func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); } else { this->timer = 20; } diff --git a/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c b/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c index c1cc4daa6..7ada76df8 100644 --- a/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c +++ b/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c @@ -237,7 +237,7 @@ void func_809541B8(BgIngate* this, PlayState* play) { this->actionFunc = func_809543D4; } } - } else if (!DynaPolyActor_IsInRidingMovingState(&this->dyna)) { + } else if (!DynaPolyActor_IsPlayerOnTop(&this->dyna)) { this->unk160 |= 4; } } @@ -322,7 +322,7 @@ void BgIngate_Init(Actor* thisx, PlayState* play2) { Vec3f sp20; if (BgIngate_FindActor(this, play, ACTORCAT_BG, ACTOR_BG_INGATE) == NULL) { - DynaPolyActor_Init(&this->dyna, 3); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS | DYNA_TRANSFORM_ROT_Y); DynaPolyActor_LoadMesh(play, &this->dyna, &gSichitaiBoatCol); this->unk160 = 0; this->unk160 |= 0x8; diff --git a/src/overlays/actors/ovl_Bg_Inibs_Movebg/z_bg_inibs_movebg.c b/src/overlays/actors/ovl_Bg_Inibs_Movebg/z_bg_inibs_movebg.c index 1b1deb6c2..2eac2ed07 100644 --- a/src/overlays/actors/ovl_Bg_Inibs_Movebg/z_bg_inibs_movebg.c +++ b/src/overlays/actors/ovl_Bg_Inibs_Movebg/z_bg_inibs_movebg.c @@ -39,7 +39,7 @@ void BgInibsMovebg_Init(Actor* thisx, PlayState* play) { BgInibsMovebg* this = THIS; Actor_ProcessInitChain(&this->dyna.actor, sInitChain); - DynaPolyActor_Init(&this->dyna, 1); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); this->opaDList = sOpaDLists[BG_INIBS_MOVEBG_GET_MODE(thisx)]; this->xluDList = sXluDLists[BG_INIBS_MOVEBG_GET_MODE(thisx)]; diff --git a/src/overlays/actors/ovl_Bg_Kin2_Bombwall/z_bg_kin2_bombwall.c b/src/overlays/actors/ovl_Bg_Kin2_Bombwall/z_bg_kin2_bombwall.c index 2da4ddcee..77139783e 100644 --- a/src/overlays/actors/ovl_Bg_Kin2_Bombwall/z_bg_kin2_bombwall.c +++ b/src/overlays/actors/ovl_Bg_Kin2_Bombwall/z_bg_kin2_bombwall.c @@ -187,7 +187,7 @@ void BgKin2Bombwall_PlayCutscene(BgKin2Bombwall* this, PlayState* play) { ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor); Flags_SetSwitch(play, BG_KIN2_BOMBWALL_SWITCH_FLAG(&this->dyna.actor)); SoundSource_PlaySfxAtFixedWorldPos(play, &this->dyna.actor.world.pos, 60, NA_SE_EV_WALL_BROKEN); - func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); this->dyna.actor.draw = NULL; BgKin2Bombwall_SpawnEffects(this, play); BgKin2Bombwall_SetupEndCutscene(this); diff --git a/src/overlays/actors/ovl_Bg_Kin2_Picture/z_bg_kin2_picture.c b/src/overlays/actors/ovl_Bg_Kin2_Picture/z_bg_kin2_picture.c index c55cd4e01..2d7b61d0c 100644 --- a/src/overlays/actors/ovl_Bg_Kin2_Picture/z_bg_kin2_picture.c +++ b/src/overlays/actors/ovl_Bg_Kin2_Picture/z_bg_kin2_picture.c @@ -162,7 +162,7 @@ void BgKin2Picture_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->dyna.actor, sInitChain); DynaPolyActor_Init(&this->dyna, 0); DynaPolyActor_LoadMesh(play, &this->dyna, &gOceanSpiderHouseSkullkidPaintingCol); - func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); Collider_InitTris(play, &this->colliderTris); Collider_SetTris(play, &this->colliderTris, &this->dyna.actor, &sTrisInit, this->colliderElement); Matrix_SetTranslateRotateYXZ(this->dyna.actor.world.pos.x, this->dyna.actor.world.pos.y, @@ -317,7 +317,7 @@ void BgKin2Picture_Fall(BgKin2Picture* this, PlayState* play) { ActorCutscene_Stop(this->dyna.actor.cutscene); } - func_800C6314(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId); Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_WOODPLATE_BROKEN); BgKin2Picture_SetupDoNothing(this); } else { diff --git a/src/overlays/actors/ovl_Bg_Kin2_Shelf/z_bg_kin2_shelf.c b/src/overlays/actors/ovl_Bg_Kin2_Shelf/z_bg_kin2_shelf.c index 6c30347ef..f36944db6 100644 --- a/src/overlays/actors/ovl_Bg_Kin2_Shelf/z_bg_kin2_shelf.c +++ b/src/overlays/actors/ovl_Bg_Kin2_Shelf/z_bg_kin2_shelf.c @@ -207,7 +207,7 @@ void BgKin2Shelf_Init(Actor* thisx, PlayState* play) { this->dyna.actor.flags |= ACTOR_FLAG_10000000; } - DynaPolyActor_Init(&this->dyna, 1); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); DynaPolyActor_LoadMesh(play, &this->dyna, D_80B70780[sp24]); func_80B700A8(this); } diff --git a/src/overlays/actors/ovl_Bg_Ladder/z_bg_ladder.c b/src/overlays/actors/ovl_Bg_Ladder/z_bg_ladder.c index 144351614..aacd9b0a7 100644 --- a/src/overlays/actors/ovl_Bg_Ladder/z_bg_ladder.c +++ b/src/overlays/actors/ovl_Bg_Ladder/z_bg_ladder.c @@ -75,7 +75,7 @@ void BgLadder_Init(Actor* thisx, PlayState* play) { } else { // Otherwise, the ladder doesn't draw; wait for the flag to be set this->alpha = 5; - func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); this->dyna.actor.draw = NULL; this->action = BgLadder_Wait; } @@ -113,7 +113,7 @@ void BgLadder_FadeIn(BgLadder* this, PlayState* play) { if (this->alpha >= 255) { this->alpha = 255; ActorCutscene_Stop(this->dyna.actor.cutscene); - func_800C6314(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId); this->dyna.actor.flags &= ~ACTOR_FLAG_10; // always update = off this->action = BgLadder_DoNothing; } diff --git a/src/overlays/actors/ovl_Bg_Last_Bwall/z_bg_last_bwall.c b/src/overlays/actors/ovl_Bg_Last_Bwall/z_bg_last_bwall.c index 521e14d63..63a973d8b 100644 --- a/src/overlays/actors/ovl_Bg_Last_Bwall/z_bg_last_bwall.c +++ b/src/overlays/actors/ovl_Bg_Last_Bwall/z_bg_last_bwall.c @@ -149,7 +149,7 @@ void BgLastBwall_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->dyna.actor, D_80C18AC8); this->type = BGLASTBWALL_GET_TYPE(&this->dyna.actor); - DynaPolyActor_Init(&this->dyna, 1); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); DynaPolyActor_LoadMesh(play, &this->dyna, D_80C18A48[this->type].colHeader); Collider_InitTris(play, &this->colliderTris); if (Flags_GetSwitch(play, BGLASTBWALL_GET_SWITCHFLAGS(&this->dyna.actor))) { @@ -245,7 +245,7 @@ void func_80C18884(BgLastBwall* this, PlayState* play) { } void func_80C188C4(BgLastBwall* this, PlayState* play) { - func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); this->dyna.actor.draw = NULL; func_80C184EC(this, play); Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_WALL_BROKEN); diff --git a/src/overlays/actors/ovl_Bg_Lbfshot/z_bg_lbfshot.c b/src/overlays/actors/ovl_Bg_Lbfshot/z_bg_lbfshot.c index 75e7b9e32..24c7ec1b3 100644 --- a/src/overlays/actors/ovl_Bg_Lbfshot/z_bg_lbfshot.c +++ b/src/overlays/actors/ovl_Bg_Lbfshot/z_bg_lbfshot.c @@ -36,7 +36,7 @@ void BgLbfshot_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->dyna.actor, sInitChain); this->dyna.actor.uncullZoneForward = 4000.0f; - DynaPolyActor_Init(&this->dyna, 1); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); DynaPolyActor_LoadMesh(play, &this->dyna, &object_lbfshot_Colheader_0014D8); } void BgLbfshot_Destroy(Actor* thisx, PlayState* play) { diff --git a/src/overlays/actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.c b/src/overlays/actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.c index f4f6a6c00..4e9862001 100644 --- a/src/overlays/actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.c +++ b/src/overlays/actors/ovl_Bg_Numa_Hana/z_bg_numa_hana.c @@ -144,7 +144,7 @@ void BgNumaHana_Init(Actor* thisx, PlayState* play) { type = BG_NUMA_HANA_GET_TYPE(&this->dyna.actor); Actor_ProcessInitChain(&this->dyna.actor, sInitChain); - DynaPolyActor_Init(&this->dyna, 3); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS | DYNA_TRANSFORM_ROT_Y); if (type == BG_NUMA_HANA_TYPE_OPEN_FLOWER_COLLISION) { DynaPolyActor_LoadMesh(play, &this->dyna, &gWoodenFlowerOpenedFlowerCol); @@ -162,7 +162,7 @@ void BgNumaHana_Init(Actor* thisx, PlayState* play) { } if (CHECK_WEEKEVENTREG(WEEKEVENTREG_12_01)) { - func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); this->petalZRotation = 0x2000; this->innerPetalZRotation = 0x2000; @@ -180,7 +180,7 @@ void BgNumaHana_Init(Actor* thisx, PlayState* play) { BgNumaHana_SetupOpenedIdle(this); } else { child = (DynaPolyActor*)this->dyna.actor.child; - func_800C62BC(play, &play->colCtx.dyna, child->bgId); + DynaPoly_DisableCollision(play, &play->colCtx.dyna, child->bgId); Flags_UnsetSwitch(play, BG_NUMA_HANA_SWITCH_FLAG(&this->dyna.actor)); BgNumaHana_SetupClosedIdle(this); } @@ -314,8 +314,8 @@ void BgNumaHana_RaiseFlower(BgNumaHana* this, PlayState* play) { child = (DynaPolyActor*)this->dyna.actor.child; // Swaps out the "closed" flower collision for the "opened" collision. - func_800C6314(play, &play->colCtx.dyna, child->bgId); - func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_EnableCollision(play, &play->colCtx.dyna, child->bgId); + DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); this->petalZRotation = 0x2000; this->innerPetalZRotation = 0x2000; diff --git a/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.c b/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.c index 3f7e45f67..99950a407 100644 --- a/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.c +++ b/src/overlays/actors/ovl_Bg_Open_Shutter/z_bg_open_shutter.c @@ -92,7 +92,7 @@ void BgOpenShutter_Init(Actor* thisx, PlayState* play) { BgOpenShutter* this = THIS; Actor_ProcessInitChain(&this->dyna.actor, sInitChain); - DynaPolyActor_Init(&this->dyna, 1); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); DynaPolyActor_LoadMesh(play, &this->dyna, &object_open_obj_Colheader_001640); this->actionFunc = func_80ACAD88; } diff --git a/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.c b/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.c index a1bd0d65d..4bc3c87af 100644 --- a/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.c +++ b/src/overlays/actors/ovl_Bg_Spdweb/z_bg_spdweb.c @@ -150,7 +150,7 @@ void BgSpdweb_Init(Actor* thisx, PlayState* play) { this->unk_161 = 0; this->switchFlag = BGSPDWEB_GET_SWITCHFLAG(&this->dyna.actor); thisx->params &= 0xFF; - DynaPolyActor_Init(&this->dyna, 1); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); if (this->dyna.actor.params == BGSPDWEB_FF_0) { Collider_InitAndSetTris(play, &this->collider, &this->dyna.actor, &sTrisInit1, this->colliderElements); @@ -297,7 +297,7 @@ void func_809CE4C8(BgSpdweb* this, PlayState* play) { return; } - if (DynaPolyActor_IsInRidingMovingState(&this->dyna)) { + if (DynaPolyActor_IsPlayerOnTop(&this->dyna)) { sp3A = 300; break; } @@ -305,7 +305,7 @@ void func_809CE4C8(BgSpdweb* this, PlayState* play) { } } - if (DynaPolyActor_IsInRidingMovingState(&this->dyna)) { + if (DynaPolyActor_IsPlayerOnTop(&this->dyna)) { temp_f12 = 2.0f * sqrtf(CLAMP_MIN(sp3A, 0)); if ((this->unk_164 < temp_f12) && (temp_f12 > 2.0f)) { this->unk_164 = temp_f12; @@ -327,8 +327,7 @@ void func_809CE4C8(BgSpdweb* this, PlayState* play) { Math_ApproachZeroF(&this->unk_164, 1.0f, 0.8f); if (this->unk_162 == 4) { - if ((this->unk_161 != 0) || - ((DynaPolyActor_IsInRidingMovingState(&this->dyna) != 0) && (this->unk_164 > 2.0f))) { + if ((this->unk_161 != 0) || (DynaPolyActor_IsPlayerOnTop(&this->dyna) && (this->unk_164 > 2.0f))) { player->actor.velocity.y = this->unk_164 * 0.7f; player->fallStartHeight = (SQ(this->unk_164) * 0.15f) + this->dyna.actor.world.pos.y; this->unk_161 = 0; diff --git a/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.c b/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.c index bef32aedd..683bf322e 100644 --- a/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.c +++ b/src/overlays/actors/ovl_Bg_Umajump/z_bg_umajump.c @@ -165,10 +165,10 @@ void BgUmajump_Update(Actor* thisx, PlayState* play) { (gSaveContext.save.time <= CLOCK_TIME(6, 0)))))) { DynaPolyActor_LoadMesh(play, &this->dyna, &object_umajump_Colheader_001558); } - func_800C641C(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_DisableFloorCollision(play, &play->colCtx.dyna, this->dyna.bgId); this->dyna.actor.update = func_8091A5A0; } else if (this->dyna.actor.params == BG_UMAJUMP_TYPE_4) { - func_800C641C(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_DisableFloorCollision(play, &play->colCtx.dyna, this->dyna.bgId); this->dyna.actor.update = Actor_Noop; } else { this->dyna.actor.update = Actor_Noop; diff --git a/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.c b/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.c index dab5b3c08..e49a1ec56 100644 --- a/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.c +++ b/src/overlays/actors/ovl_Dm_Char01/z_dm_char01.c @@ -373,17 +373,17 @@ void DmChar01_Update(Actor* thisx, PlayState* play2) { Player* player = GET_PLAYER(play); if (player->actor.world.pos.y > 5.0f) { - func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); } else { - func_800C6314(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId); } } if (DMCHAR01_GET(&this->dyna.actor) == DMCHAR01_2) { if (this->dyna.actor.xzDistToPlayer > 600.0f) { - func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); } else { - func_800C6314(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId); } } } diff --git a/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c b/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c index 66d4a7f86..a1853d04d 100644 --- a/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c +++ b/src/overlays/actors/ovl_Dm_Char08/z_dm_char08.c @@ -165,15 +165,15 @@ void DmChar08_Init(Actor* thisx, PlayState* play2) { this->unk_1F0 = 0.0f; if (play->sceneId == SCENE_31MISAKI) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_53_20)) { - DynaPolyActor_Init(&this->dyna, 3); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS | DYNA_TRANSFORM_ROT_Y); DynaPolyActor_LoadMesh(play, &this->dyna, &gTurtleZoraCapeAwakeCol); } else { - DynaPolyActor_Init(&this->dyna, 3); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS | DYNA_TRANSFORM_ROT_Y); DynaPolyActor_LoadMesh(play, &this->dyna, &gTurtleZoraCapeAsleepCol); } this->dynapolyInitialized = true; } else if (play->sceneId == SCENE_SEA) { - DynaPolyActor_Init(&this->dyna, 3); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS | DYNA_TRANSFORM_ROT_Y); DynaPolyActor_LoadMesh(play, &this->dyna, &sTurtleGreatBayTempleCol); this->dynapolyInitialized = true; } @@ -296,7 +296,7 @@ void DmChar08_SetupAppearCs(DmChar08* this, PlayState* play) { void func_80AAF884(DmChar08* this, PlayState* play) { if (play->csCtx.state == CS_STATE_0) { - DynaPolyActor_Init(&this->dyna, 3); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS | DYNA_TRANSFORM_ROT_Y); DynaPolyActor_LoadMesh(play, &this->dyna, &gTurtleZoraCapeAwakeCol); this->dyna.actor.flags |= ACTOR_FLAG_1; this->actionFunc = func_80AAF8F4; @@ -960,7 +960,7 @@ void DmChar08_UpdateCollision(DmChar08* this, PlayState* play) { sTurtleGreatBayTempleColVertices[5].y = 0x4B0; sTurtleGreatBayTempleColVertices[9].y = 0x6A4; } - func_800C6554(play, &play->colCtx.dyna); + DynaPoly_InvalidateLookup(play, &play->colCtx.dyna); } void DmChar08_Update(Actor* thisx, PlayState* play) { @@ -988,9 +988,9 @@ void DmChar08_Update(Actor* thisx, PlayState* play) { this->dyna.actor.world.pos.y = this->targetYPos; if (play->sceneId == SCENE_31MISAKI) { if (this->dyna.actor.xzDistToPlayer > 1300.0f) { - func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); } else { - func_800C6314(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId); } } if (this->unk_1FF != 0) { diff --git a/src/overlays/actors/ovl_Dm_Statue/z_dm_statue.c b/src/overlays/actors/ovl_Dm_Statue/z_dm_statue.c index 11f2724de..77ce3c738 100644 --- a/src/overlays/actors/ovl_Dm_Statue/z_dm_statue.c +++ b/src/overlays/actors/ovl_Dm_Statue/z_dm_statue.c @@ -7,7 +7,7 @@ #include "z_dm_statue.h" #include "objects/object_smtower/object_smtower.h" -#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_4000000) +#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_CAN_PRESS_SWITCH) #define THIS ((DmStatue*)thisx) diff --git a/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c b/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c index c7077e56e..b94e3ecb5 100644 --- a/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c +++ b/src/overlays/actors/ovl_En_Arrow/z_en_arrow.c @@ -512,7 +512,7 @@ void func_8088B630(EnArrow* this, PlayState* play) { SkelAnime_Update(&this->arrow.skelAnime); if (this->actor.wallBgId != BG_ACTOR_MAX) { - BgCheck2_UpdateActorAttachedToMesh(&play->colCtx, this->actor.wallBgId, &this->actor); + DynaPolyActor_TransformCarriedActor(&play->colCtx, this->actor.wallBgId, &this->actor); } if (DECR(this->unk_260) == 0) { diff --git a/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c b/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c index 175ac69a8..a2246b442 100644 --- a/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c +++ b/src/overlays/actors/ovl_En_Bom_Chu/z_en_bom_chu.c @@ -408,7 +408,7 @@ void EnBomChu_HandleNonSceneCollision(EnBomChu* this, PlayState* play) { Math_Vec3f_Copy(&originalWorldPos, &this->actor.world.pos); Math_Vec3f_Copy(&originalAxisUp, &this->axisUp); yaw = this->actor.shape.rot.y; - BgCheck2_UpdateActorAttachedToMesh(&play->colCtx, this->actor.floorBgId, &this->actor); + DynaPolyActor_TransformCarriedActor(&play->colCtx, this->actor.floorBgId, &this->actor); if (yaw != this->actor.shape.rot.y) { yaw = this->actor.shape.rot.y - yaw; diff --git a/src/overlays/actors/ovl_En_Box/z_en_box.c b/src/overlays/actors/ovl_En_Box/z_en_box.c index 6beedbdf8..dbe25cdf4 100644 --- a/src/overlays/actors/ovl_En_Box/z_en_box.c +++ b/src/overlays/actors/ovl_En_Box/z_en_box.c @@ -213,7 +213,7 @@ void EnBox_Init(Actor* thisx, PlayState* play) { this->dyna.actor.world.rot.x = 0x7FFF; this->collectableFlag = 0; } else { - func_800C636C(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_DisableCeilingCollision(play, &play->colCtx.dyna, this->dyna.bgId); this->collectableFlag = (this->dyna.actor.world.rot.x & 0x7F); this->dyna.actor.world.rot.x = 0; } @@ -228,7 +228,7 @@ void EnBox_Init(Actor* thisx, PlayState* play) { animFrame = animFrameEnd; } else if (((this->type == ENBOX_TYPE_BIG_SWITCH_FLAG_FALL) || (this->type == ENBOX_TYPE_SMALL_SWITCH_FLAG_FALL)) && !Flags_GetSwitch(play, this->switchFlag)) { - func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); if (Rand_ZeroOne() < 0.5f) { this->movementFlags |= ENBOX_MOVE_FALL_ANGLE_SIDE; } @@ -240,7 +240,7 @@ void EnBox_Init(Actor* thisx, PlayState* play) { } else if (((this->type == ENBOX_TYPE_BIG_ROOM_CLEAR) || (this->type == ENBOX_TYPE_SMALL_ROOM_CLEAR)) && !Flags_GetClear(play, this->dyna.actor.room)) { EnBox_SetupAction(this, EnBox_AppearOnRoomClear); - func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); if (this->movementFlags & ENBOX_MOVE_0x80) { this->dyna.actor.world.pos.y = this->dyna.actor.home.pos.y + 50.0f; } else { @@ -254,7 +254,7 @@ void EnBox_Init(Actor* thisx, PlayState* play) { } else if (((this->type == ENBOX_TYPE_BIG_SWITCH_FLAG) || (this->type == ENBOX_TYPE_SMALL_SWITCH_FLAG)) && !Flags_GetSwitch(play, this->switchFlag)) { EnBox_SetupAction(this, EnBox_AppearSwitchFlag); - func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); if (this->movementFlags & ENBOX_MOVE_0x80) { this->dyna.actor.world.pos.y = this->dyna.actor.home.pos.y + 50.0f; } else { @@ -377,7 +377,7 @@ void EnBox_FallOnSwitchFlag(EnBox* this, PlayState* play) { Actor_SetClosestSecretDistance(&this->dyna.actor, play); if (this->unk_1A0 >= 0) { EnBox_SetupAction(this, EnBox_Fall); - func_800C6314(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId); } else if (this->unk_1A0 >= -11) { this->unk_1A0++; } else if (Flags_GetSwitch(play, this->switchFlag)) { @@ -422,7 +422,7 @@ void func_80868AFC(EnBox* this, PlayState* play) { } void func_80868B74(EnBox* this, PlayState* play) { - func_800C6314(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId); if (this->unk_1A0 < 0) { this->unk_1A0++; } else if (this->unk_1A0 < 40) { diff --git a/src/overlays/actors/ovl_En_Dnb/z_en_dnb.c b/src/overlays/actors/ovl_En_Dnb/z_en_dnb.c index 7a8bc5ddb..8edd1b580 100644 --- a/src/overlays/actors/ovl_En_Dnb/z_en_dnb.c +++ b/src/overlays/actors/ovl_En_Dnb/z_en_dnb.c @@ -104,7 +104,7 @@ void EnDnb_Init(Actor* thisx, PlayState* play) { s32 i; s16* alloc; - DynaPolyActor_Init(&this->dyna, 1); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); DynaPolyActor_LoadMesh(play, &this->dyna, &object_hanareyama_obj_Colheader_004D8C); alloc = Lib_SegmentedToVirtual(object_hanareyama_obj_Vec_004710); diff --git a/src/overlays/actors/ovl_En_Fu/z_en_fu.c b/src/overlays/actors/ovl_En_Fu/z_en_fu.c index 1f122ae92..6febd3dca 100644 --- a/src/overlays/actors/ovl_En_Fu/z_en_fu.c +++ b/src/overlays/actors/ovl_En_Fu/z_en_fu.c @@ -775,7 +775,7 @@ void func_80962F4C(EnFu* this, PlayState* play) { Message_StartTextbox(play, 0x288B, &this->actor); } - if ((!DynaPolyActor_IsInRidingRotatingState((DynaPolyActor*)this->actor.child) && + if ((!DynaPolyActor_IsPlayerAbove((DynaPolyActor*)this->actor.child) && (player->actor.bgCheckFlags & BGCHECKFLAG_GROUND)) || (gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2] <= SECONDS_TO_TIMER(0)) || (this->unk_548 == this->unk_54C)) { player->stateFlags3 &= ~PLAYER_STATE3_400000; diff --git a/src/overlays/actors/ovl_En_Fu_Kago/z_en_fu_kago.c b/src/overlays/actors/ovl_En_Fu_Kago/z_en_fu_kago.c index e79348366..e976e01dc 100644 --- a/src/overlays/actors/ovl_En_Fu_Kago/z_en_fu_kago.c +++ b/src/overlays/actors/ovl_En_Fu_Kago/z_en_fu_kago.c @@ -86,7 +86,7 @@ void EnFuKago_Init(Actor* thisx, PlayState* play) { CollisionHeader* sp34 = NULL; Actor* npc = play->actorCtx.actorLists[ACTORCAT_NPC].first; - DynaPolyActor_Init(&this->dyna, 1); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); CollisionHeader_GetVirtual(&object_fu_mato_Colheader_0015C0, &sp34); this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, sp34); Actor_SetScale(&this->dyna.actor, 0.1f); @@ -228,7 +228,7 @@ void func_80ACFA78(EnFuKago* this, PlayState* play) { this->unk_33A = 1; Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_WOODBOX_BREAK); - func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); this->actionFunc = func_80AD0028; } diff --git a/src/overlays/actors/ovl_En_Fu_Mato/z_en_fu_mato.c b/src/overlays/actors/ovl_En_Fu_Mato/z_en_fu_mato.c index 9e3c19473..c42278805 100644 --- a/src/overlays/actors/ovl_En_Fu_Mato/z_en_fu_mato.c +++ b/src/overlays/actors/ovl_En_Fu_Mato/z_en_fu_mato.c @@ -75,7 +75,7 @@ void EnFuMato_Init(Actor* thisx, PlayState* play) { Actor* actor = play->actorCtx.actorLists[ACTORCAT_NPC].first; EnFu* fu; - DynaPolyActor_Init(&this->dyna, 3); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS | DYNA_TRANSFORM_ROT_Y); CollisionHeader_GetVirtual(&object_fu_mato_Colheader_0023D4, &sp2C); this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, sp2C); Actor_SetScale(&this->dyna.actor, 0.1f); diff --git a/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c b/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c index 99783d77d..2d77519bd 100644 --- a/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c +++ b/src/overlays/actors/ovl_En_Mushi2/z_en_mushi2.c @@ -1161,7 +1161,7 @@ void EnMushi2_Update(Actor* thisx, PlayState* play) { if ((temp != BGCHECK_SCENE) && ((this->actionFunc == func_80A6A5C0) || (this->actionFunc == func_80A6A824) || (this->actionFunc == func_80A6A9E4) || (this->actionFunc == func_80A6B0D8)) && - BgCheck2_UpdateActorAttachedToMesh(&play->colCtx, temp, &this->actor)) { + DynaPolyActor_TransformCarriedActor(&play->colCtx, temp, &this->actor)) { func_80A68F24(this); } diff --git a/src/overlays/actors/ovl_En_Raf/z_en_raf.c b/src/overlays/actors/ovl_En_Raf/z_en_raf.c index b89aa26f3..6a3f1af5a 100644 --- a/src/overlays/actors/ovl_En_Raf/z_en_raf.c +++ b/src/overlays/actors/ovl_En_Raf/z_en_raf.c @@ -310,7 +310,7 @@ void EnRaf_Idle(EnRaf* this, PlayState* play) { if (this->timer == 0) { if ((player->transformation != PLAYER_FORM_DEKU) && (this->dyna.actor.xzDistToPlayer < (BREG(48) + 80.0f) && (player->invincibilityTimer == 0) && - DynaPolyActor_IsInRidingMovingState(&this->dyna) && !(player->stateFlags1 & PLAYER_STATE1_8000000) && + DynaPolyActor_IsPlayerOnTop(&this->dyna) && !(player->stateFlags1 & PLAYER_STATE1_8000000) && play->grabPlayer(play, player))) { player->actor.parent = &this->dyna.actor; this->grabTarget = EN_RAF_GRAB_TARGET_PLAYER; @@ -710,7 +710,7 @@ void EnRaf_Update(Actor* thisx, PlayState* play) { return; } - if (DynaPolyActor_IsInRidingMovingState(&this->dyna)) { + if (DynaPolyActor_IsPlayerOnTop(&this->dyna)) { if ((this->heightDiffFromPlayer > -0.1f) && !this->isCurrentlyInRidingMovingState) { this->heightDiffFromPlayer = -20.0f; this->isCurrentlyInRidingMovingState = true; diff --git a/src/overlays/actors/ovl_En_Rat/z_en_rat.c b/src/overlays/actors/ovl_En_Rat/z_en_rat.c index d9c2d61f2..81898dfa6 100644 --- a/src/overlays/actors/ovl_En_Rat/z_en_rat.c +++ b/src/overlays/actors/ovl_En_Rat/z_en_rat.c @@ -495,7 +495,7 @@ void EnRat_HandleNonSceneCollision(EnRat* this, PlayState* play) { f32 cos; f32 tempX; - BgCheck2_UpdateActorAttachedToMesh(&play->colCtx, this->actor.floorBgId, &this->actor); + DynaPolyActor_TransformCarriedActor(&play->colCtx, this->actor.floorBgId, &this->actor); if (yaw != this->actor.shape.rot.y) { yaw = this->actor.shape.rot.y - yaw; diff --git a/src/overlays/actors/ovl_En_Test3/z_en_test3.c b/src/overlays/actors/ovl_En_Test3/z_en_test3.c index 8d1c726b7..cca0c9dfa 100644 --- a/src/overlays/actors/ovl_En_Test3/z_en_test3.c +++ b/src/overlays/actors/ovl_En_Test3/z_en_test3.c @@ -10,7 +10,7 @@ #include "objects/gameplay_keep/gameplay_keep.h" #include "objects/object_mask_ki_tan/object_mask_ki_tan.h" -#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_4000000) +#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_20 | ACTOR_FLAG_CAN_PRESS_SWITCH) #define THIS ((EnTest3*)thisx) diff --git a/src/overlays/actors/ovl_En_Torch2/z_en_torch2.c b/src/overlays/actors/ovl_En_Torch2/z_en_torch2.c index ccf7c5e13..c6681b4be 100644 --- a/src/overlays/actors/ovl_En_Torch2/z_en_torch2.c +++ b/src/overlays/actors/ovl_En_Torch2/z_en_torch2.c @@ -63,17 +63,14 @@ static Gfx* sShellDLists[] = { void EnTorch2_Init(Actor* thisx, PlayState* play) { EnTorch2* this = THIS; - s16 params; Actor_ProcessInitChain(&this->actor, sInitChain); Collider_InitAndSetCylinder(play, &this->collider, &this->actor, &sCylinderInit); - // params: which form Link is in (e.g. human, deku, etc.) - params = this->actor.params; - if (params != TORCH2_PARAM_DEKU) { - this->actor.flags |= ACTOR_FLAG_4000000; // Can press switch - if (params == TORCH2_PARAM_GORON) { - this->actor.flags |= ACTOR_FLAG_20000; // Can press heavy switches + if (this->actor.params != TORCH2_PARAM_DEKU) { + this->actor.flags |= ACTOR_FLAG_CAN_PRESS_SWITCH; + if (this->actor.params == TORCH2_PARAM_GORON) { + this->actor.flags |= ACTOR_FLAG_CAN_PRESS_HEAVY_SWITCH; } } this->framesUntilNextState = 20; diff --git a/src/overlays/actors/ovl_En_Twig/z_en_twig.c b/src/overlays/actors/ovl_En_Twig/z_en_twig.c index 205b9d9cc..a86359610 100644 --- a/src/overlays/actors/ovl_En_Twig/z_en_twig.c +++ b/src/overlays/actors/ovl_En_Twig/z_en_twig.c @@ -63,7 +63,7 @@ void EnTwig_Init(Actor* thisx, PlayState* play2) { Actor_ProcessInitChain(&this->dyna.actor, sInitChain); this->unk_160 = RACERING_GET_PARAM_F(&this->dyna.actor); - DynaPolyActor_Init(&this->dyna, 1); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); if (sColHeaders[this->unk_160] != NULL) { DynaPolyActor_LoadMesh(play, &this->dyna, sColHeaders[this->unk_160]); } @@ -72,6 +72,7 @@ void EnTwig_Init(Actor* thisx, PlayState* play2) { case 0: Actor_Kill(&this->dyna.actor); break; + case 1: if (!sRingsHaveSpawned) { sRingCount = CHECK_WEEKEVENTREG(WEEKEVENTREG_24_04) ? 25 : 20; @@ -91,14 +92,18 @@ void EnTwig_Init(Actor* thisx, PlayState* play2) { } Actor_SetScale(&this->dyna.actor, 4.2f); this->dyna.actor.uncullZoneScale = this->dyna.actor.uncullZoneDownward = this->dyna.actor.scale.x * 60.0f; - func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); func_80AC0A7C(this, play); break; + case 2: Actor_SetScale(&this->dyna.actor, 1.0f); this->dyna.actor.uncullZoneScale = this->dyna.actor.uncullZoneDownward = this->dyna.actor.scale.x * 880.0f; func_80AC0A54(this, play); break; + + default: + break; } } @@ -149,9 +154,9 @@ void func_80AC0AC8(EnTwig* this, PlayState* play) { } } else { if (this->dyna.actor.xyzDistToPlayerSq <= SQ((this->dyna.actor.scale.x * 40.0f) + 40)) { - func_800C6314(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId); } else { - func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); } if (this->dyna.actor.xyzDistToPlayerSq >= (this->dyna.actor.scale.x * 10.0f * 40.0f * 40.0f)) { this->dyna.actor.shape.rot.y = this->dyna.actor.yawTowardsPlayer; @@ -165,7 +170,7 @@ void func_80AC0CC4(EnTwig* this, PlayState* play) { this->unk_170 = 3458.0f; this->unk_174 = 0.2f; this->unk_16C |= 1; - func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); this->actionFunc = func_80AC0D2C; } diff --git a/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.c b/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.c index 79a877803..93adab401 100644 --- a/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.c +++ b/src/overlays/actors/ovl_Obj_Armos/z_obj_armos.c @@ -7,7 +7,7 @@ #include "z_obj_armos.h" #include "objects/gameplay_keep/gameplay_keep.h" -#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_4000000) +#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_CAN_PRESS_SWITCH) #define THIS ((ObjArmos*)thisx) diff --git a/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c b/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c index 13b565598..b6c5be123 100644 --- a/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c +++ b/src/overlays/actors/ovl_Obj_Bean/z_obj_bean.c @@ -365,7 +365,7 @@ void ObjBean_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->dyna.actor, sInitChain); this->unk_1FE = 0; this->unk_1B8 = 0.1f; - DynaPolyActor_Init(&this->dyna, 3); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS | DYNA_TRANSFORM_ROT_Y); Collider_InitCylinder(play, &this->collider); if ((sp2C == ENOBJBEAN_GET_C000_1) || (sp2C == ENOBJBEAN_GET_C000_2)) { @@ -414,7 +414,7 @@ void ObjBean_Init(Actor* thisx, PlayState* play) { if (OBJBEAN_GET_80(&this->dyna.actor) || Flags_GetSwitch(play, OBJBEAN_GET_7F(&this->dyna.actor, 1))) { func_80938804(this); } else { - func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); func_80938704(this); } } @@ -765,7 +765,7 @@ void func_80938804(ObjBean* this) { } void func_80938834(ObjBean* this, PlayState* play) { - if (DynaPolyActor_IsInRidingMovingState(&this->dyna)) { + if (DynaPolyActor_IsPlayerOnTop(&this->dyna)) { func_80938874(this); } func_80936F24(this); @@ -784,7 +784,7 @@ void func_809388A8(ObjBean* this, PlayState* play) { func_80937268(this, play); func_809372A8(this); func_8093892C(this); - } else if (DynaPolyActor_IsInRidingMovingState(&this->dyna)) { + } else if (DynaPolyActor_IsPlayerOnTop(&this->dyna)) { func_800B9010(&this->dyna.actor, NA_SE_PL_PLANT_MOVE - SFX_FLAG); } func_80936F24(this); @@ -797,7 +797,7 @@ void func_8093892C(ObjBean* this) { } void func_80938958(ObjBean* this, PlayState* play) { - if (!DynaPolyActor_IsInRidingRotatingState(&this->dyna)) { + if (!DynaPolyActor_IsPlayerAbove(&this->dyna)) { func_80938804(this); } func_80936F24(this); @@ -810,7 +810,7 @@ void func_80938998(ObjBean* this) { } void func_809389BC(ObjBean* this, PlayState* play) { - if (!DynaPolyActor_IsInRidingMovingState(&this->dyna)) { + if (!DynaPolyActor_IsPlayerOnTop(&this->dyna)) { func_80937268(this, play); func_809372A8(this); func_80937238(this); @@ -851,9 +851,9 @@ void func_80938AD8(ObjBean* this, PlayState* play) { } if (sp30 != 0) { - func_800C6314(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId); } else { - func_800C6314(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId); } if (this->dyna.actor.xzDistToPlayer < 74.0f) { @@ -925,7 +925,7 @@ void ObjBean_Update(Actor* thisx, PlayState* play) { this->dyna.actor.shape.shadowScale = this->dyna.actor.scale.x * 88.0f; if (func_80937468(this, play)) { func_809375F4(this, play); - func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); func_80938998(this); } } else { diff --git a/src/overlays/actors/ovl_Obj_Boat/z_obj_boat.c b/src/overlays/actors/ovl_Obj_Boat/z_obj_boat.c index cc94527a0..6f426bfdd 100644 --- a/src/overlays/actors/ovl_Obj_Boat/z_obj_boat.c +++ b/src/overlays/actors/ovl_Obj_Boat/z_obj_boat.c @@ -61,7 +61,7 @@ void ObjBoat_Init(Actor* thisx, PlayState* play) { Vec3f sp24; Actor_ProcessInitChain(&this->dyna.actor, sInitChain); - DynaPolyActor_Init(&this->dyna, 3); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS | DYNA_TRANSFORM_ROT_Y); DynaPolyActor_LoadMesh(play, &this->dyna, &object_kaizoku_obj_Colheader_009A88); if (thisx->params < 0) { this->dyna.actor.update = ObjBoat_UpdateCutscene; @@ -95,14 +95,14 @@ void ObjBoat_Update(Actor* thisx, PlayState* play) { s32 pad; ObjBoat* this = THIS; Player* player = GET_PLAYER(play); - s32 temp = DynaPolyActor_IsInRidingMovingState(&this->dyna); + s32 isPlayerOnTop = DynaPolyActor_IsPlayerOnTop(&this->dyna); f32 speedTarget = 0.0f; s16 yawTarget = this->dyna.actor.shape.rot.y; Vec3f nextPoint; - if (temp || ((DynaPolyActor_IsInRidingFallingState(&this->dyna)))) { + if (isPlayerOnTop || DynaPolyActor_IsActorOnTop(&this->dyna)) { if ((this->timer == 0) && - (OBJBOAT_GET_4000(thisx) || (temp && (this->curPointIndex == this->lastPointIndex)))) { + (OBJBOAT_GET_4000(thisx) || (isPlayerOnTop && (this->curPointIndex == this->lastPointIndex)))) { this->direction = -this->direction; if (this->direction > 0) { this->lastPointIndex = this->maxPointIndex; diff --git a/src/overlays/actors/ovl_Obj_Chikuwa/z_obj_chikuwa.c b/src/overlays/actors/ovl_Obj_Chikuwa/z_obj_chikuwa.c index 0c888a4ac..b4b27784e 100644 --- a/src/overlays/actors/ovl_Obj_Chikuwa/z_obj_chikuwa.c +++ b/src/overlays/actors/ovl_Obj_Chikuwa/z_obj_chikuwa.c @@ -49,7 +49,7 @@ void func_809B1550(Actor* thisx, PlayState* play) { thisx->world.pos.x = (Math_SinS(thisx->shape.rot.y) * sp18) + thisx->home.pos.x; thisx->world.pos.z = (Math_CosS(thisx->shape.rot.y) * sp18) + thisx->home.pos.z; } else { - func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); } } diff --git a/src/overlays/actors/ovl_Obj_Danpeilift/z_obj_danpeilift.c b/src/overlays/actors/ovl_Obj_Danpeilift/z_obj_danpeilift.c index 1a9f62ede..43edd11e0 100644 --- a/src/overlays/actors/ovl_Obj_Danpeilift/z_obj_danpeilift.c +++ b/src/overlays/actors/ovl_Obj_Danpeilift/z_obj_danpeilift.c @@ -54,7 +54,7 @@ void ObjDanpeilift_Init(Actor* thisx, PlayState* play) { this->dyna.actor.world.rot.x = 0; this->dyna.actor.shape.rot.z = 0; this->dyna.actor.world.rot.z = 0; - DynaPolyActor_Init(&this->dyna, 1); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); DynaPolyActor_LoadMesh(play, &this->dyna, &object_obj_danpeilift_Colheader_000BA0); if (this->dyna.bgId == BG_ACTOR_MAX) { Actor_Kill(&this->dyna.actor); @@ -130,7 +130,7 @@ void ObjDanpeilift_Move(ObjDanpeilift* this, PlayState* play) { if ((this->points[0].x != endPoint->x) || (this->points[0].y != endPoint->y) || (this->points[0].z != endPoint->z)) { this->actionFunc = ObjDanpeilift_Teleport; - func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); isPosUpdated = false; } } @@ -143,9 +143,9 @@ void ObjDanpeilift_Move(ObjDanpeilift* this, PlayState* play) { } void ObjDanpeilift_Teleport(ObjDanpeilift* this, PlayState* play) { - if (!DynaPolyActor_IsInRidingMovingState(&this->dyna)) { + if (!DynaPolyActor_IsPlayerOnTop(&this->dyna)) { ObjDanpeilift_UpdatePosition(this, this->curPoint); - func_800C6314(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId); this->actionFunc = ObjDanpeilift_Move; } } @@ -170,20 +170,20 @@ void ObjDanpeilift_Update(Actor* thisx, PlayState* play) { ActorCutscene_Stop(this->dyna.actor.cutscene); } } - if (OBJDANPEILIFT_SHOULD_REACT_TO_WEIGHT(thisx)) { + if (OBJDANPEILIFT_REACT_TO_PLAYER_ON_TOP(thisx)) { f32 target; - this->isWeightOnPrev = this->isWeightOn; - this->isWeightOn = DynaPolyActor_IsInRidingMovingState(&this->dyna) ? 1 : 0; - if ((this->isWeightOn != this->isWeightOnPrev) && (this->maxHeight < 1.0f)) { + this->isPlayerOnTopPrev = this->isPlayerOnTop; + this->isPlayerOnTop = DynaPolyActor_IsPlayerOnTop(&this->dyna) ? true : false; + if ((this->isPlayerOnTop != this->isPlayerOnTopPrev) && (this->maxHeight < 1.0f)) { this->cycle = -0x8000; this->maxHeight = 6.0f; } this->cycle += 0xCE4; Math_StepToF(&this->maxHeight, 0.0f, 0.12f); - step = this->isWeightOn ? Math_CosS(fabsf(this->cycleSpeed) * 2048.0f) + 0.02f - : Math_SinS(fabsf(this->cycleSpeed) * 2048.0f) + 0.02f; - target = this->isWeightOn ? -8.0f : 0.0f; + step = this->isPlayerOnTop ? Math_CosS(fabsf(this->cycleSpeed) * 2048.0f) + 0.02f + : Math_SinS(fabsf(this->cycleSpeed) * 2048.0f) + 0.02f; + target = this->isPlayerOnTop ? -8.0f : 0.0f; Math_StepToF(&this->cycleSpeed, target, step); this->dyna.actor.shape.yOffset = ((Math_SinS(this->cycle) * this->maxHeight) + this->cycleSpeed) * 10.0f; } diff --git a/src/overlays/actors/ovl_Obj_Danpeilift/z_obj_danpeilift.h b/src/overlays/actors/ovl_Obj_Danpeilift/z_obj_danpeilift.h index 392d5d4ca..9c0d023c7 100644 --- a/src/overlays/actors/ovl_Obj_Danpeilift/z_obj_danpeilift.h +++ b/src/overlays/actors/ovl_Obj_Danpeilift/z_obj_danpeilift.h @@ -13,7 +13,7 @@ typedef void (*ObjDanpeiliftActionFunc)(struct ObjDanpeilift*, PlayState*); #define OBJDANPEILIFT_GET_PATH(thisx) ((thisx)->params & 0x7F) #define OBJDANPEILIFT_SHOULD_TELEPORT(thisx) (((thisx)->params >> 0xC) & 1) #define OBJDANPEILIFT_GET_SPEED(thisx) ((thisx)->home.rot.z * 0.1f) -#define OBJDANPEILIFT_SHOULD_REACT_TO_WEIGHT(thisx) (((thisx)->params >> 0xE) & 1) +#define OBJDANPEILIFT_REACT_TO_PLAYER_ON_TOP(thisx) (((thisx)->params >> 0xE) & 1) typedef struct ObjDanpeilift { /* 0x000 */ DynaPolyActor dyna; @@ -23,8 +23,8 @@ typedef struct ObjDanpeilift { /* 0x168 */ s32 curPoint; /* 0x16C */ s32 direction; /* 0x170 */ Vec3s* points; - /* 0x174 */ s32 isWeightOn; - /* 0x178 */ s32 isWeightOnPrev; + /* 0x174 */ s32 isPlayerOnTop; + /* 0x178 */ s32 isPlayerOnTopPrev; /* 0x17C */ f32 cycleSpeed; /* 0x180 */ f32 maxHeight; /* 0x184 */ s16 cycle; diff --git a/src/overlays/actors/ovl_Obj_Dhouse/z_obj_dhouse.c b/src/overlays/actors/ovl_Obj_Dhouse/z_obj_dhouse.c index 4a0c5194f..c942f622b 100644 --- a/src/overlays/actors/ovl_Obj_Dhouse/z_obj_dhouse.c +++ b/src/overlays/actors/ovl_Obj_Dhouse/z_obj_dhouse.c @@ -441,7 +441,7 @@ void func_80B13940(ObjDhouse* this, PlayState* play2) { if (sp20) { func_80B12A88(&this->dyna.actor); - func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); this->dyna.actor.draw = func_80B13C08; this->dyna.actor.flags |= ACTOR_FLAG_20; func_80B139D8(this); diff --git a/src/overlays/actors/ovl_Obj_Driftice/z_obj_driftice.c b/src/overlays/actors/ovl_Obj_Driftice/z_obj_driftice.c index a93ab99bf..7d729495a 100644 --- a/src/overlays/actors/ovl_Obj_Driftice/z_obj_driftice.c +++ b/src/overlays/actors/ovl_Obj_Driftice/z_obj_driftice.c @@ -389,7 +389,7 @@ void func_80A671E0(ObjDriftice* this, PlayState* play) { if ((this->unk_16C[0].x != points->x) || (this->unk_16C[0].y != points->y) || (this->unk_16C[0].z != points->z)) { func_80A6743C(this); - func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); sp30 = false; } } @@ -408,7 +408,7 @@ void func_80A6743C(ObjDriftice* this) { void func_80A67450(ObjDriftice* this, PlayState* play) { if (this->unk_248 < 0) { func_80A66570(this, this->unk_164); - func_800C6314(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId); func_80A671CC(this); } } @@ -429,7 +429,7 @@ void func_80A674C4(ObjDriftice* this, PlayState* play) { void ObjDriftice_Update(Actor* thisx, PlayState* play) { ObjDriftice* this = THIS; - if (DynaPolyActor_IsInRidingMovingState(&this->dyna)) { + if (DynaPolyActor_IsPlayerOnTop(&this->dyna)) { if (this->unk_248 < 0) { this->unk_248 = 1; } else { diff --git a/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.c b/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.c index 69829d09e..ac9184923 100644 --- a/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.c +++ b/src/overlays/actors/ovl_Obj_Etcetera/z_obj_etcetera.c @@ -154,7 +154,7 @@ void ObjEtcetera_Idle(ObjEtcetera* this, PlayState* play) { this->oscillationTimer = minOscillationTimer; } } else { - if (DynaPolyActor_IsInRidingMovingState(&this->dyna)) { + if (DynaPolyActor_IsPlayerOnTop(&this->dyna)) { if (!(this->burrowFlag & 1)) { // Player is walking onto the Deku Flower, or falling on it from a height this->oscillationTimer = 10; @@ -187,7 +187,7 @@ void ObjEtcetera_Idle(ObjEtcetera* this, PlayState* play) { } void ObjEtcetera_PlayRustleAnimation(ObjEtcetera* this, PlayState* play) { - if (DynaPolyActor_IsInRidingMovingState(&this->dyna)) { + if (DynaPolyActor_IsPlayerOnTop(&this->dyna)) { this->burrowFlag |= 1; } else { this->burrowFlag &= ~1; @@ -209,11 +209,11 @@ void ObjEtcetera_PlayRustleAnimation(ObjEtcetera* this, PlayState* play) { void ObjEtcetera_DoBounceOscillation(ObjEtcetera* this, PlayState* play) { // In order to match, we are seemingly required to access scale.x at one point // without using this. We can create a thisx or dyna pointer to achieve that, but - // it's more likely they used dyna given that DynaPolyActor_IsInRidingMovingState takes a DynaPolyActor. + // it's more likely they used dyna given that DynaPolyActor_IsPlayerOnTop takes a DynaPolyActor. DynaPolyActor* dyna = &this->dyna; f32 scaleTemp; - if (DynaPolyActor_IsInRidingMovingState(dyna)) { + if (DynaPolyActor_IsPlayerOnTop(dyna)) { this->burrowFlag |= 1; } else { this->burrowFlag &= ~1; @@ -260,7 +260,7 @@ void ObjEtcetera_Setup(ObjEtcetera* this, PlayState* play) { if (Object_IsLoaded(&play->objectCtx, this->objIndex)) { this->dyna.actor.objBankIndex = this->objIndex; Actor_SetObjectDependency(play, &this->dyna.actor); - DynaPolyActor_Init(&this->dyna, 1); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); thisCollisionHeader = collisionHeaders[type]; if (thisCollisionHeader != NULL) { CollisionHeader_GetVirtual(thisCollisionHeader, &colHeader); diff --git a/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.c b/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.c index 021c253ce..2a2e23c13 100644 --- a/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.c +++ b/src/overlays/actors/ovl_Obj_Ghaka/z_obj_ghaka.c @@ -154,7 +154,7 @@ void ObjGhaka_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->dyna.actor, D_80B3C96C); Actor_SetScale(&this->dyna.actor, 0.1f); - DynaPolyActor_Init(&this->dyna, 1); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); CollisionHeader_GetVirtual(&object_ghaka_Colheader_003CD0, &colHeader); this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, colHeader); Actor_UpdateBgCheckInfo(play, &this->dyna.actor, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); diff --git a/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.c b/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.c index 582d0a235..d35c9f11e 100644 --- a/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.c +++ b/src/overlays/actors/ovl_Obj_Hakaisi/z_obj_hakaisi.c @@ -106,7 +106,7 @@ void ObjHakaisi_Init(Actor* thisx, PlayState* play) { return; } - DynaPolyActor_Init(&this->dyna, 1); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); CollisionHeader_GetVirtual(&object_hakaisi_Colheader_002FC4, &sp7C); this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, sp7C); @@ -201,7 +201,7 @@ void func_80B1456C(ObjHakaisi* this, PlayState* play) { } if (this->dyna.actor.colChkInfo.health < 30) { func_80B145F4(this); - func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); } } diff --git a/src/overlays/actors/ovl_Obj_Hgdoor/z_obj_hgdoor.c b/src/overlays/actors/ovl_Obj_Hgdoor/z_obj_hgdoor.c index fa39be7df..5be919068 100644 --- a/src/overlays/actors/ovl_Obj_Hgdoor/z_obj_hgdoor.c +++ b/src/overlays/actors/ovl_Obj_Hgdoor/z_obj_hgdoor.c @@ -70,7 +70,7 @@ void ObjHgdoor_Init(Actor* thisx, PlayState* play) { CollisionHeader* header = NULL; Actor_SetScale(&this->dyna.actor, 0.1f); - DynaPolyActor_Init(&this->dyna, 1); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); if (OBJHGDOOR_IS_RIGHT_DOOR(&this->dyna.actor)) { CollisionHeader_GetVirtual(&object_hgdoor_Colheader_001D10, &header); } else { diff --git a/src/overlays/actors/ovl_Obj_HsStump/z_obj_hsstump.c b/src/overlays/actors/ovl_Obj_HsStump/z_obj_hsstump.c index b7b1bf92e..ffc3558e6 100644 --- a/src/overlays/actors/ovl_Obj_HsStump/z_obj_hsstump.c +++ b/src/overlays/actors/ovl_Obj_HsStump/z_obj_hsstump.c @@ -45,7 +45,7 @@ void ObjHsStump_Init(Actor* thisx, PlayState* play) { Actor_ProcessInitChain(&this->dyna.actor, sInitChain); this->isHidden = OBJHSSTUMP_GET_ISHIDDEN(thisx); this->switchFlag = OBJHSSTUMP_GET_SWITCHFLAG(thisx); - DynaPolyActor_Init(&this->dyna, 1); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); DynaPolyActor_LoadMesh(play, &this->dyna, &object_hsstump_Colheader_0011B0); switch (this->isHidden) { case true: @@ -54,10 +54,15 @@ void ObjHsStump_Init(Actor* thisx, PlayState* play) { } else { this->dyna.actor.draw = NULL; Actor_SetScale(&this->dyna.actor, 0.0f); - func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); } + // fallthrough case false: ObjHsStump_SetupIdle(this, play); + break; + + default: + break; } } @@ -124,7 +129,7 @@ void ObjHsStump_Appear(ObjHsStump* this, PlayState* play) { } if (this->dyna.actor.scale.x == (18.0f * 0.01f)) { this->isHidden = false; - func_800C6314(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId); ObjHsStump_SetupIdle(this, play); } this->framesAppeared++; diff --git a/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.c b/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.c index a861e9e63..089cddf02 100644 --- a/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.c +++ b/src/overlays/actors/ovl_Obj_Hunsui/z_obj_hunsui.c @@ -120,7 +120,7 @@ void func_80B9C5E8(ObjHunsui* this, PlayState* play) { if ((this->dyna.actor.xzDistToPlayer < (45.0f * this->dyna.actor.scale.x * 10.0f)) && (this->dyna.actor.playerHeightRel < -21.0f)) { - if (DynaPolyActor_IsInRidingMovingState(&this->dyna)) { + if (DynaPolyActor_IsPlayerOnTop(&this->dyna)) { this->unk_172 &= ~8; this->unk_19C = 0.0f; this->unk_1A0 = 0.0f; @@ -205,7 +205,7 @@ void ObjHunsui_Init(Actor* thisx, PlayState* play) { this->unk_160 = OBJHUNSUI_GET_F000(thisx); this->unk_164 = OBJHUNSUI_GET_F80(thisx); this->unk_168 = OBJHUNSUI_GET_7F(thisx); - DynaPolyActor_Init(&this->dyna, 1); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); if ((this->unk_160 != OBJHUNSUI_F000_5) && (this->unk_160 != OBJHUNSUI_F000_6)) { DynaPolyActor_LoadMesh(play, &this->dyna, &object_hunsui_Colheader_000C74); @@ -616,7 +616,7 @@ void func_80B9D714(ObjHunsui* this, PlayState* play) { } } - if (!DynaPolyActor_IsInRidingMovingState(&this->dyna)) { + if (!DynaPolyActor_IsPlayerOnTop(&this->dyna)) { if (this->dyna.actor.xzDistToPlayer < 45.0f) { if ((this->dyna.actor.playerHeightRel < -this->dyna.actor.velocity.y) && (this->dyna.actor.playerHeightRel >= -800.0f)) { diff --git a/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.c b/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.c index 8aa23816d..886762306 100644 --- a/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.c +++ b/src/overlays/actors/ovl_Obj_Iceblock/z_obj_iceblock.c @@ -643,7 +643,7 @@ s32 func_80A24954(ObjIceblock* this, PlayState* play) { void func_80A24A48(ObjIceblock* this, PlayState* play) { if (!(this->unk_1B0 & 0x10) && !(this->collider.base.ocFlags1 & OC1_HIT)) { - func_800C6314(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId); this->unk_1B0 |= 0x10; } } @@ -921,9 +921,9 @@ void ObjIceblock_Init(Actor* thisx, PlayState* play) { this->dyna.actor.world.rot.y = this->dyna.actor.shape.rot.y; } - DynaPolyActor_Init(&this->dyna, 1); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); DynaPolyActor_LoadMesh(play, &this->dyna, &gIceBlockCol); - func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); Collider_InitCylinder(play, &this->collider); Collider_SetCylinder(play, &this->collider, &this->dyna.actor, &sCylinderInit); @@ -1427,7 +1427,7 @@ void ObjIceblock_Update(Actor* thisx, PlayState* play) { } } - if (DynaPolyActor_IsInRidingMovingState(&this->dyna)) { + if (DynaPolyActor_IsPlayerOnTop(&this->dyna)) { if (this->unk_1B0 & 0x20) { this->unk_1B0 &= ~0x40; } else { diff --git a/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.c b/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.c index 5b15d0ecc..e33f62f8b 100644 --- a/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.c +++ b/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.c @@ -8,7 +8,7 @@ #include "objects/gameplay_dangeon_keep/gameplay_dangeon_keep.h" #include "objects/object_kibako/object_kibako.h" -#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_4000000) +#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_CAN_PRESS_SWITCH) #define THIS ((ObjKibako*)thisx) @@ -349,7 +349,7 @@ void ObjKibako_Held(ObjKibako* this, PlayState* play) { } else { Actor_MoveWithGravity(&this->actor); ObjKibako_SetupThrown(this); - this->actor.flags &= ~ACTOR_FLAG_4000000; + this->actor.flags &= ~ACTOR_FLAG_CAN_PRESS_SWITCH; } Actor_UpdateBgCheckInfo(play, &this->actor, 18.0f, 15.0f, 0.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_40); diff --git a/src/overlays/actors/ovl_Obj_Kibako2/z_obj_kibako2.c b/src/overlays/actors/ovl_Obj_Kibako2/z_obj_kibako2.c index e9ca6aba8..eb14dff6a 100644 --- a/src/overlays/actors/ovl_Obj_Kibako2/z_obj_kibako2.c +++ b/src/overlays/actors/ovl_Obj_Kibako2/z_obj_kibako2.c @@ -211,7 +211,7 @@ void ObjKibako2_Idle(ObjKibako2* this, PlayState* play) { ObjKibako2_Break(this, play); SoundSource_PlaySfxAtFixedWorldPos(play, &this->dyna.actor.world.pos, 20, NA_SE_EV_WOODBOX_BREAK); this->dyna.actor.flags |= ACTOR_FLAG_10; - func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); this->dyna.actor.draw = NULL; this->actionFunc = ObjKibako2_Kill; } else if (this->dyna.actor.xzDistToPlayer < 600.0f) { diff --git a/src/overlays/actors/ovl_Obj_Kzsaku/z_obj_kzsaku.c b/src/overlays/actors/ovl_Obj_Kzsaku/z_obj_kzsaku.c index 9ceff660e..65ebe75b6 100644 --- a/src/overlays/actors/ovl_Obj_Kzsaku/z_obj_kzsaku.c +++ b/src/overlays/actors/ovl_Obj_Kzsaku/z_obj_kzsaku.c @@ -41,7 +41,7 @@ void ObjKzsaku_Init(Actor* thisx, PlayState* play) { CollisionHeader* col = NULL; Actor_SetScale(&this->dyna.actor, 1.0f); - DynaPolyActor_Init(&this->dyna, 1); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); CollisionHeader_GetVirtual(&object_kzsaku_Colheader_001118, &col); this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, thisx, col); diff --git a/src/overlays/actors/ovl_Obj_Lift/z_obj_lift.c b/src/overlays/actors/ovl_Obj_Lift/z_obj_lift.c index aff88964b..a82c9ceea 100644 --- a/src/overlays/actors/ovl_Obj_Lift/z_obj_lift.c +++ b/src/overlays/actors/ovl_Obj_Lift/z_obj_lift.c @@ -100,7 +100,7 @@ void ObjLift_Init(Actor* thisx, PlayState* play) { this->dyna.actor.shape.rot.z = 0; this->unk_178 = this->dyna.actor.home.rot.z; this->dyna.actor.home.rot.z = this->dyna.actor.world.rot.z = this->dyna.actor.shape.rot.z; - DynaPolyActor_Init(&this->dyna, 1); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); if ((this->unk_178 <= 0) && (Flags_GetSwitch(play, OBJLIFT_GET_7F(&this->dyna.actor)))) { Actor_Kill(&this->dyna.actor); return; @@ -129,7 +129,7 @@ void func_8093D7A0(ObjLift* this, PlayState* play) { s32 pad; s16 quakeIndex; - if (DynaPolyActor_IsInRidingMovingState(&this->dyna)) { + if (DynaPolyActor_IsPlayerOnTop(&this->dyna)) { if (this->timer <= 0) { if (OBJLIFT_GET_7(&this->dyna.actor) == 7) { func_8093D9C0(this); @@ -194,7 +194,7 @@ void func_8093DA48(ObjLift* this, PlayState* play) { SoundSource_PlaySfxAtFixedWorldPos(play, &this->dyna.actor.world.pos, 20, NA_SE_EV_BOX_BREAK); if (this->unk_178 > 0) { func_8093DB70(this); - func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); } else { Flags_SetSwitch(play, OBJLIFT_GET_7F(&this->dyna.actor)); Actor_Kill(&this->dyna.actor); @@ -212,7 +212,7 @@ void func_8093DB90(ObjLift* this, PlayState* play) { if (this->timer <= 0) { Math_Vec3f_Copy(&this->dyna.actor.world.pos, &this->dyna.actor.home.pos); this->dyna.actor.world.rot = this->dyna.actor.shape.rot = this->dyna.actor.home.rot; - func_800C6314(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId); func_8093D760(this); } } diff --git a/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.c b/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.c index 16a628fa2..8225c6c49 100644 --- a/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.c +++ b/src/overlays/actors/ovl_Obj_Lightblock/z_obj_lightblock.c @@ -178,7 +178,7 @@ void func_80AF3C34(ObjLightblock* this, PlayState* play) { } else { this->alpha = 0; this->dyna.actor.draw = NULL; - func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); } } } diff --git a/src/overlays/actors/ovl_Obj_Lupygamelift/z_obj_lupygamelift.c b/src/overlays/actors/ovl_Obj_Lupygamelift/z_obj_lupygamelift.c index 8d6ae9f71..cb957b839 100644 --- a/src/overlays/actors/ovl_Obj_Lupygamelift/z_obj_lupygamelift.c +++ b/src/overlays/actors/ovl_Obj_Lupygamelift/z_obj_lupygamelift.c @@ -55,7 +55,7 @@ void ObjLupygamelift_Init(Actor* thisx, PlayState* play) { this->timer = 0; Actor_UpdateBgCheckInfo(play, thisx, 0.0f, 0.0f, 0.0f, UPDBGCHECKINFO_FLAG_4); ActorShape_Init(&thisx->shape, 0.0f, ActorShadow_DrawSquare, 0.0f); - DynaPolyActor_Init(&this->dyna, 1); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); DynaPolyActor_LoadMesh(play, &this->dyna, &object_raillift_Colheader_0048D0); this->targetSpeedXZ = thisx->home.rot.z * 0.1f; if (this->targetSpeedXZ < 0.0f) { diff --git a/src/overlays/actors/ovl_Obj_Ocarinalift/z_obj_ocarinalift.c b/src/overlays/actors/ovl_Obj_Ocarinalift/z_obj_ocarinalift.c index ab60ec034..0b4e4e14b 100644 --- a/src/overlays/actors/ovl_Obj_Ocarinalift/z_obj_ocarinalift.c +++ b/src/overlays/actors/ovl_Obj_Ocarinalift/z_obj_ocarinalift.c @@ -62,7 +62,7 @@ void ObjOcarinalift_Init(Actor* thisx, PlayState* play) { this->dyna.actor.world.rot.x = 0; this->dyna.actor.shape.rot.z = 0; this->dyna.actor.world.rot.z = 0; - DynaPolyActor_Init(&this->dyna, 1); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); DynaPolyActor_LoadMesh(play, &this->dyna, &object_raillift_Colheader_0048D0); this->unk160 = thisx->home.rot.z * 0.1f; if (this->unk160 < 0.01f) { @@ -153,7 +153,7 @@ void func_80AC96D0(ObjOcarinalift* this, PlayState* play) { if (((this->unk170->x != temp_v1_2->x) || (this->unk170->y != temp_v1_2->y)) || (this->unk170->z != temp_v1_2->z)) { func_80AC99C0(this); - func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); sp34 = false; } else if ((paramsC == OBJOCARINALIFT_PARAMSC_1) && (this->unk168 == OBJOCARINALIFT_GET_1F(thisx))) { func_80AC9AB8(this); @@ -173,9 +173,9 @@ void func_80AC99C0(ObjOcarinalift* this) { } void func_80AC99D4(ObjOcarinalift* this, PlayState* play) { - if (!DynaPolyActor_IsInRidingMovingState(&this->dyna)) { + if (!DynaPolyActor_IsPlayerOnTop(&this->dyna)) { func_80AC94C0(this, this->unk168); - func_800C6314(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId); if ((OBJOCARINALIFT_GET_C(&this->dyna.actor) == OBJOCARINALIFT_PARAMSC_1) && (this->unk168 == OBJOCARINALIFT_GET_1F(&this->dyna.actor))) { func_80AC9AB8(this); @@ -205,7 +205,7 @@ void func_80AC9AE0(ObjOcarinalift* this, PlayState* play) { if (func_800B8718(&this->dyna.actor, &play->state)) { func_80152434(play, 1); func_80AC9B48(this); - } else if (DynaPolyActor_IsInRidingMovingState(&this->dyna)) { + } else if (DynaPolyActor_IsPlayerOnTop(&this->dyna)) { func_800B8804(&this->dyna.actor, play, 40.0f); } } diff --git a/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.c b/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.c index 3038a6d09..c3e180f50 100644 --- a/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.c +++ b/src/overlays/actors/ovl_Obj_Oshihiki/z_obj_oshihiki.c @@ -196,7 +196,7 @@ void ObjOshihiki_SetColor(ObjOshihiki* this, PlayState* play) { void ObjOshihiki_Init(Actor* thisx, PlayState* play) { ObjOshihiki* this = THIS; - DynaPolyActor_Init(&this->dyna, 1); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); if ((OBJOSHIHIKI_GET_FF00(&this->dyna.actor) >= OBJOSHIHIKI_FF00_0) && (OBJOSHIHIKI_GET_FF00(&this->dyna.actor) < OBJOSHIHIKI_FF00_80)) { @@ -439,8 +439,8 @@ void ObjOshihiki_OnActor(ObjOshihiki* this, PlayState* play) { } else { dyna = DynaPoly_GetActor(&play->colCtx, this->floorBgIds[this->highestFloor]); if (dyna != NULL) { - DynaPolyActor_SetRidingFallingState(dyna); - DynaPolyActor_SetSwitchPressedState(dyna); + DynaPolyActor_SetActorOnTop(dyna); + DynaPolyActor_SetActorOnSwitch(dyna); if ((this->timer <= 0) && (fabsf(this->dyna.pushForce) > 0.001f) && ObjOshihiki_StrongEnough(this, play) && ObjOshihiki_NoSwitchPress(this, dyna, play) && !ObjOshihiki_CheckWall(play, this->dyna.yRotation, this->dyna.pushForce, this)) { @@ -456,9 +456,9 @@ void ObjOshihiki_OnActor(ObjOshihiki* this, PlayState* play) { ObjOshihiki_SetupFall(this, play); } else { dyna = DynaPoly_GetActor(&play->colCtx, this->floorBgIds[this->highestFloor]); - if ((dyna != NULL) && (dyna->flags & 1)) { - DynaPolyActor_SetRidingFallingState(dyna); - DynaPolyActor_SetSwitchPressedState(dyna); + if ((dyna != NULL) && (dyna->transformFlags & DYNA_TRANSFORM_POS)) { + DynaPolyActor_SetActorOnTop(dyna); + DynaPolyActor_SetActorOnSwitch(dyna); this->dyna.actor.world.pos.y = this->dyna.actor.floorHeight; } else { ObjOshihiki_SetupFall(this, play); diff --git a/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c b/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c index d5f0c902c..0b5021ccb 100644 --- a/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c +++ b/src/overlays/actors/ovl_Obj_Pzlblock/z_obj_pzlblock.c @@ -8,7 +8,7 @@ #include "objects/gameplay_dangeon_keep/gameplay_dangeon_keep.h" #include "objects/object_secom_obj/object_secom_obj.h" -#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_4000000) +#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_CAN_PRESS_SWITCH) #define THIS ((ObjPzlblock*)thisx) diff --git a/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.c b/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.c index 0fdf0a86b..5788f1585 100644 --- a/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.c +++ b/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.c @@ -66,7 +66,7 @@ void ObjRaillift_Init(Actor* thisx, PlayState* play) { thisx->world.rot.x = 0; thisx->shape.rot.z = 0; thisx->world.rot.z = 0; - DynaPolyActor_Init(&this->dyna, 1); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); DynaPolyActor_LoadMesh(play, &this->dyna, sColHeaders[type]); this->speed = OBJRAILLIFT_GET_SPEED(thisx); if (this->speed < 0.0f) { @@ -164,7 +164,7 @@ void ObjRaillift_Move(ObjRaillift* this, PlayState* play) { if ((this->points[0].x != endPoint->x) || (this->points[0].y != endPoint->y) || (this->points[0].z != endPoint->z)) { this->actionFunc = ObjRaillift_Teleport; - func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); isPosUpdated = false; } } @@ -180,9 +180,9 @@ void ObjRaillift_Move(ObjRaillift* this, PlayState* play) { Will teleport to what ever curpoint is set to */ void ObjRaillift_Teleport(ObjRaillift* this, PlayState* play) { - if (!DynaPolyActor_IsInRidingMovingState(&this->dyna)) { + if (!DynaPolyActor_IsPlayerOnTop(&this->dyna)) { ObjRaillift_UpdatePosition(this, this->curPoint); - func_800C6314(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId); this->actionFunc = ObjRaillift_Move; } } @@ -226,24 +226,20 @@ void ObjRaillift_Update(Actor* thisx, PlayState* play) { ActorCutscene_Stop(this->dyna.actor.cutscene); } } - if (OBJRAILLIFT_SHOULD_REACT_TO_WEIGHT(thisx)) { + if (OBJRAILLIFT_REACT_TO_PLAYER_ON_TOP(thisx)) { s32 requiredScopeTemp; - this->isWeightOnPrev = this->isWeightOn; - if (DynaPolyActor_IsInRidingMovingState(&this->dyna)) { - this->isWeightOn = true; - } else { - this->isWeightOn = false; - } - if ((this->isWeightOn != this->isWeightOnPrev) && (this->maxHeight < 1.0f)) { + this->isPlayerOnTopPrev = this->isPlayerOnTop; + this->isPlayerOnTop = DynaPolyActor_IsPlayerOnTop(&this->dyna) ? true : false; + if ((this->isPlayerOnTop != this->isPlayerOnTopPrev) && (this->maxHeight < 1.0f)) { this->cycle = -0x8000; this->maxHeight = 6.0f; } this->cycle += 0xCE4; Math_StepToF(&this->maxHeight, 0.0f, 0.12f); - step = this->isWeightOn ? Math_CosS(fabsf(this->cycleSpeed) * 2048.0f) + 0.02f - : Math_SinS(fabsf(this->cycleSpeed) * 2048.0f) + 0.02f; - target = this->isWeightOn ? -8.0f : 0.0f; + step = this->isPlayerOnTop ? Math_CosS(fabsf(this->cycleSpeed) * 2048.0f) + 0.02f + : Math_SinS(fabsf(this->cycleSpeed) * 2048.0f) + 0.02f; + target = this->isPlayerOnTop ? -8.0f : 0.0f; Math_StepToF(&this->cycleSpeed, target, step); this->dyna.actor.shape.yOffset = ((Math_SinS(this->cycle) * this->maxHeight) + this->cycleSpeed) * 10.0f; } diff --git a/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.h b/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.h index 41b7a821e..b921b0e5a 100644 --- a/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.h +++ b/src/overlays/actors/ovl_Obj_Raillift/z_obj_raillift.h @@ -14,7 +14,7 @@ typedef void (*ObjRailliftActionFunc)(struct ObjRaillift*, PlayState*); #define OBJRAILLIFT_GET_STARTING_POINT(thisx) (((thisx)->params >> 7) & 0x1F) #define OBJRAILLIFT_GET_SPEED(thisx) ((thisx)->home.rot.z * 0.1f) #define OBJRAILLIFT_SHOULD_TELEPORT(thisx) (((thisx)->params >> 0xC) & 1) -#define OBJRAILLIFT_SHOULD_REACT_TO_WEIGHT(thisx) (((thisx)->params >> 0xE) & 1) +#define OBJRAILLIFT_REACT_TO_PLAYER_ON_TOP(thisx) (((thisx)->params >> 0xE) & 1) typedef enum { /* 0 */ OOT_WATER_TEMPLE_WATERFALL_PLATFORM, @@ -29,8 +29,8 @@ typedef struct ObjRaillift { /* 0x168 */ s32 curPoint; /* 0x16C */ s32 direction; // +1 for forward, -1 for backward /* 0x170 */ Vec3s* points; - /* 0x174 */ s32 isWeightOn; - /* 0x178 */ s32 isWeightOnPrev; + /* 0x174 */ s32 isPlayerOnTop; + /* 0x178 */ s32 isPlayerOnTopPrev; /* 0x17C */ f32 cycleSpeed; /* 0x180 */ f32 maxHeight; /* 0x184 */ s16 cycle; diff --git a/src/overlays/actors/ovl_Obj_Rotlift/z_obj_rotlift.c b/src/overlays/actors/ovl_Obj_Rotlift/z_obj_rotlift.c index ce18a68b0..4c63908c6 100644 --- a/src/overlays/actors/ovl_Obj_Rotlift/z_obj_rotlift.c +++ b/src/overlays/actors/ovl_Obj_Rotlift/z_obj_rotlift.c @@ -111,7 +111,7 @@ void ObjRotlift_Init(Actor* thisx, PlayState* play2) { ObjRotlift_MoveDekuFlowers(this); } - DynaPolyActor_Init(&this->dyna, 3); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS | DYNA_TRANSFORM_ROT_Y); modelInfo = &sModelInfo[type]; DynaPolyActor_LoadMesh(play, &this->dyna, modelInfo->colHeader); diff --git a/src/overlays/actors/ovl_Obj_Skateblock/z_obj_skateblock.c b/src/overlays/actors/ovl_Obj_Skateblock/z_obj_skateblock.c index 80e9b1201..385bb65fb 100644 --- a/src/overlays/actors/ovl_Obj_Skateblock/z_obj_skateblock.c +++ b/src/overlays/actors/ovl_Obj_Skateblock/z_obj_skateblock.c @@ -489,7 +489,7 @@ void ObjSkateblock_Init(Actor* thisx, PlayState* play) { ObjSkateblock* this = THIS; Actor_ProcessInitChain(&this->dyna.actor, sInitChain); - DynaPolyActor_Init(&this->dyna, 1); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); DynaPolyActor_LoadMesh(play, &this->dyna, &gameplay_dangeon_keep_Colheader_007498); if (D_80A22A18 == NULL) { D_80A22A18 = Lib_SegmentedToVirtual(gameplay_dangeon_keep_Matanimheader_01B370); @@ -616,7 +616,7 @@ void func_80A2264C(ObjSkateblock* this, PlayState* play) { if (sp20 || ((this->unk_160 - this->dyna.actor.world.pos.y) > 300.0f)) { if (SurfaceType_GetFloorProperty(&play->colCtx, this->dyna.actor.floorPoly, this->dyna.actor.floorBgId) == FLOOR_PROPERTY_12) { - func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); this->dyna.actor.draw = NULL; func_80A22728(this); return; @@ -633,7 +633,7 @@ void func_80A22728(ObjSkateblock* this) { } void func_80A2273C(ObjSkateblock* this, PlayState* play) { - if (!DynaPolyActor_IsInRidingMovingState(&this->dyna)) { + if (!DynaPolyActor_IsPlayerOnTop(&this->dyna)) { this->dyna.actor.world.pos.x = this->dyna.actor.home.pos.x; this->dyna.actor.world.pos.y = (this->dyna.actor.home.pos.y - (600.0f * this->dyna.actor.scale.y)) - 10.0f; this->dyna.actor.world.pos.z = this->dyna.actor.home.pos.z; @@ -657,14 +657,14 @@ void func_80A227C0(ObjSkateblock* this, PlayState* play) { return; } - func_800C6314(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_EnableCollision(play, &play->colCtx.dyna, this->dyna.bgId); this->dyna.actor.draw = ObjSkateblock_Draw; if (Math_StepToF(&this->dyna.actor.world.pos.y, this->dyna.actor.home.pos.y, 1.0f)) { func_80A22308(this); } - if (DynaPolyActor_IsInRidingMovingState(&this->dyna)) { + if (DynaPolyActor_IsPlayerOnTop(&this->dyna)) { D_80A22A10 |= 1 << this->unk_1C0; } } diff --git a/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.c b/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.c index 13e127c73..6e959a8dc 100644 --- a/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.c +++ b/src/overlays/actors/ovl_Obj_Spidertent/z_obj_spidertent.c @@ -755,7 +755,7 @@ void func_80B30AF8(ObjSpidertent* this, PlayState* play) { this->unk_3C1--; if (this->unk_3C1 == 40) { - func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); } if (this->unk_3C1 >= 32) { diff --git a/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c b/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c index 76f5bc872..9a1ab7095 100644 --- a/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c +++ b/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c @@ -284,7 +284,7 @@ void ObjSwitch_PlayDiamondSwitchSfx(ObjSwitch* this) { } void ObjSwitch_SetFloorSwitchSnapPlayerState(ObjSwitch* this, s32 state) { - if (DynaPolyActor_IsInRidingMovingState(&this->dyna)) { + if (DynaPolyActor_IsPlayerOnTop(&this->dyna)) { this->floorSwitchPlayerSnapState = state; } } @@ -344,7 +344,7 @@ void ObjSwitch_Init(Actor* thisx, PlayState* play) { } else { this->dyna.actor.world.pos.y = this->dyna.actor.home.pos.y + 1.0f; } - DynaPolyActor_Init(&this->dyna, 1); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); DynaPolyActor_LoadMesh(play, &this->dyna, &gFloorSwitchCol); } if (type == OBJSWITCH_TYPE_FLOOR) { @@ -517,13 +517,13 @@ void ObjSwitch_FloorSwitchUp(ObjSwitch* this, PlayState* play) { } else { switch (OBJ_SWITCH_GET_SUBTYPE(&this->dyna.actor)) { case OBJSWITCH_SUBTYPE_ONCE: - if (DynaPolyActor_IsInSwitchPressedState(&this->dyna)) { + if (DynaPolyActor_IsSwitchPressed(&this->dyna)) { ObjSwitch_SetFloorSwitchSnapPlayerState(this, 1); ObjSwitch_TryPlayCutsceneInit(this, play, ObjSwitch_FloorSwitchPushDownInit, true); } break; case OBJSWITCH_SUBTYPE_SYNC: - if (DynaPolyActor_IsInSwitchPressedState(&this->dyna)) { + if (DynaPolyActor_IsSwitchPressed(&this->dyna)) { ObjSwitch_SetFloorSwitchSnapPlayerState(this, 1); ObjSwitch_TryPlayCutsceneInit(this, play, ObjSwitch_FloorSwitchPushDownInit, true); } else if (Flags_GetSwitch(play, OBJ_SWITCH_GET_SWITCH_FLAG(&this->dyna.actor))) { @@ -531,7 +531,7 @@ void ObjSwitch_FloorSwitchUp(ObjSwitch* this, PlayState* play) { } break; case OBJSWITCH_SUBTYPE_TOGGLE: - if (DynaPolyActor_IsInSwitchPressedState(&this->dyna)) { + if (DynaPolyActor_IsSwitchPressed(&this->dyna)) { s32 isSwitchFlagNotSet = Flags_GetSwitch(play, OBJ_SWITCH_GET_SWITCH_FLAG(&this->dyna.actor)) ? false : true; @@ -540,13 +540,13 @@ void ObjSwitch_FloorSwitchUp(ObjSwitch* this, PlayState* play) { } break; case OBJSWITCH_SUBTYPE_RESET: - if (DynaPolyActor_IsInSwitchPressedState(&this->dyna)) { + if (DynaPolyActor_IsSwitchPressed(&this->dyna)) { ObjSwitch_SetFloorSwitchSnapPlayerState(this, 1); ObjSwitch_TryPlayCutsceneInit(this, play, ObjSwitch_FloorSwitchPushDownInit, true); } break; case OBJSWITCH_SUBTYPE_RESET_INVERTED: - if (DynaPolyActor_IsInSwitchPressedState(&this->dyna)) { + if (DynaPolyActor_IsSwitchPressed(&this->dyna)) { ObjSwitch_SetFloorSwitchSnapPlayerState(this, 2); ObjSwitch_SetSwitchFlagState(this, play, false); ObjSwitch_FloorSwitchPushDownInit(this); @@ -584,7 +584,7 @@ void ObjSwitch_FloorSwitchDown(ObjSwitch* this, PlayState* play) { case OBJSWITCH_SUBTYPE_ONCE: case OBJSWITCH_SUBTYPE_SYNC: if (!Flags_GetSwitch(play, OBJ_SWITCH_GET_SWITCH_FLAG(&this->dyna.actor))) { - if ((play->sceneId == SCENE_SECOM) && DynaPolyActor_IsInSwitchPressedState(&this->dyna)) { + if ((play->sceneId == SCENE_SECOM) && DynaPolyActor_IsSwitchPressed(&this->dyna)) { ObjSwitch_SetSwitchFlagState(this, play, true); } else { ObjSwitch_FloorSwitchRiseUpInit(this); @@ -594,7 +594,7 @@ void ObjSwitch_FloorSwitchDown(ObjSwitch* this, PlayState* play) { case OBJSWITCH_SUBTYPE_TOGGLE: case OBJSWITCH_SUBTYPE_RESET: case OBJSWITCH_SUBTYPE_RESET_INVERTED: - if (!DynaPolyActor_IsInSwitchPressedState(&this->dyna) && + if (!DynaPolyActor_IsSwitchPressed(&this->dyna) && (!Player_InCsMode(play) || (play->sceneId == SCENE_SECOM))) { if (this->floorSwitchReleaseTimer <= 0) { if (subType == OBJSWITCH_SUBTYPE_RESET) { @@ -841,16 +841,16 @@ void ObjSwitch_LargeFloorSwitchUp(ObjSwitch* this, PlayState* play) { s32 subType = OBJ_SWITCH_GET_SUBTYPE(&this->dyna.actor); if (subType == OBJSWITCH_SUBTYPE_ONCE) { - if (DynaPolyActor_IsInHeavySwitchPressedState(&this->dyna)) { + if (DynaPolyActor_IsHeavySwitchPressed(&this->dyna)) { ObjSwitch_SetFloorSwitchSnapPlayerState(this, 1); ObjSwitch_TryPlayCutsceneInit(this, play, ObjSwitch_LargeFloorSwitchPushDownInit, true); } } else if (subType == OBJSWITCH_SUBTYPE_RESET) { - if (DynaPolyActor_IsInHeavySwitchPressedState(&this->dyna)) { + if (DynaPolyActor_IsHeavySwitchPressed(&this->dyna)) { ObjSwitch_SetFloorSwitchSnapPlayerState(this, 1); ObjSwitch_TryPlayCutsceneInit(this, play, ObjSwitch_LargeFloorSwitchPushDownInit, true); } - } else if (subType == OBJSWITCH_SUBTYPE_RESET_INVERTED && DynaPolyActor_IsInHeavySwitchPressedState(&this->dyna)) { + } else if (subType == OBJSWITCH_SUBTYPE_RESET_INVERTED && DynaPolyActor_IsHeavySwitchPressed(&this->dyna)) { ObjSwitch_SetFloorSwitchSnapPlayerState(this, 2); ObjSwitch_SetSwitchFlagState(this, play, false); ObjSwitch_LargeFloorSwitchPushDownInit(this); @@ -885,7 +885,7 @@ void ObjSwitch_LargeFloorSwitchDown(ObjSwitch* this, PlayState* play) { ObjSwitch_LargeFloorSwitchRiseUpInit(this); } } else if (subType == OBJSWITCH_SUBTYPE_RESET || subType == OBJSWITCH_SUBTYPE_RESET_INVERTED) { - if (!DynaPolyActor_IsInHeavySwitchPressedState(&this->dyna) && !Player_InCsMode(play)) { + if (!DynaPolyActor_IsHeavySwitchPressed(&this->dyna) && !Player_InCsMode(play)) { if (this->floorSwitchReleaseTimer <= 0) { if (OBJ_SWITCH_GET_SUBTYPE(&this->dyna.actor) == OBJSWITCH_SUBTYPE_RESET) { ObjSwitch_SetSwitchFlagState(this, play, false); @@ -936,7 +936,7 @@ void ObjSwitch_Update(Actor* thisx, PlayState* play) { case OBJSWITCH_TYPE_FLOOR: case OBJSWITCH_TYPE_FLOOR_RUSTY: case OBJSWITCH_TYPE_FLOOR_LARGE: - this->collisionFlags = this->dyna.stateFlags; + this->collisionFlags = this->dyna.interactFlags; break; case OBJSWITCH_TYPE_EYE: this->collisionFlags = this->colliderTris.base.acFlags; diff --git a/src/overlays/actors/ovl_Obj_Taru/z_obj_taru.c b/src/overlays/actors/ovl_Obj_Taru/z_obj_taru.c index 5608143b3..9a01a8da3 100644 --- a/src/overlays/actors/ovl_Obj_Taru/z_obj_taru.c +++ b/src/overlays/actors/ovl_Obj_Taru/z_obj_taru.c @@ -279,7 +279,7 @@ void func_80B9C07C(ObjTaru* this, PlayState* play) { this->actionFunc = func_80B9C1A0; } else { this->dyna.actor.flags |= ACTOR_FLAG_10; - func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); this->dyna.actor.draw = NULL; this->actionFunc = func_80B9C174; } diff --git a/src/overlays/actors/ovl_Obj_Tokei_Step/z_obj_tokei_step.c b/src/overlays/actors/ovl_Obj_Tokei_Step/z_obj_tokei_step.c index 4f02a46b2..ec47acd86 100644 --- a/src/overlays/actors/ovl_Obj_Tokei_Step/z_obj_tokei_step.c +++ b/src/overlays/actors/ovl_Obj_Tokei_Step/z_obj_tokei_step.c @@ -247,7 +247,7 @@ void ObjTokeiStep_SetupOpen(ObjTokeiStep* this) { void ObjTokeiStep_Open(ObjTokeiStep* this, PlayState* play) { if (ObjTokeiStep_OpenProcess(this, play)) { - func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_DisableCollision(play, &play->colCtx.dyna, this->dyna.bgId); ObjTokeiStep_SetupDoNothingOpen(this); } } diff --git a/src/overlays/actors/ovl_Obj_Tree/z_obj_tree.c b/src/overlays/actors/ovl_Obj_Tree/z_obj_tree.c index 6009affe4..996bc3810 100644 --- a/src/overlays/actors/ovl_Obj_Tree/z_obj_tree.c +++ b/src/overlays/actors/ovl_Obj_Tree/z_obj_tree.c @@ -99,7 +99,7 @@ void ObjTree_Init(Actor* thisx, PlayState* play) { this->dyna.actor.uncullZoneForward = 4000.0f; } else { Actor_SetScale(&this->dyna.actor, 0.1f); - DynaPolyActor_Init(&this->dyna, 1); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); CollisionHeader_GetVirtual(&object_tree_Colheader_001B2C, &colHeader); this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, colHeader); } diff --git a/src/overlays/actors/ovl_Obj_Tsubo/z_obj_tsubo.c b/src/overlays/actors/ovl_Obj_Tsubo/z_obj_tsubo.c index 7b4fcf574..5f0e6c411 100644 --- a/src/overlays/actors/ovl_Obj_Tsubo/z_obj_tsubo.c +++ b/src/overlays/actors/ovl_Obj_Tsubo/z_obj_tsubo.c @@ -10,7 +10,7 @@ #include "objects/object_tsubo/object_tsubo.h" #include "objects/object_racetsubo/object_racetsubo.h" -#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_800000 | ACTOR_FLAG_4000000) +#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_800000 | ACTOR_FLAG_CAN_PRESS_SWITCH) #define THIS ((ObjTsubo*)thisx) @@ -532,7 +532,7 @@ void func_80928D80(ObjTsubo* this, PlayState* play) { if (Actor_HasNoParent(&this->actor, play)) { this->actor.room = play->roomCtx.curRoom.num; Actor_MoveWithGravity(&this->actor); - this->actor.flags &= ~ACTOR_FLAG_4000000; + this->actor.flags &= ~ACTOR_FLAG_CAN_PRESS_SWITCH; Actor_UpdateBgCheckInfo(play, &this->actor, 15.0f, 15.0f, 0.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_40 | UPDBGCHECKINFO_FLAG_80); @@ -647,7 +647,7 @@ void func_8092926C(ObjTsubo* this, PlayState* play) { } else { scale = sPotTypeData[OBJ_TSUBO_GET_TYPE(&this->actor)].scale; if (Math_StepToF(&this->actor.scale.x, scale, scale * 0.1f)) { - this->actor.flags |= ACTOR_FLAG_4000000; + this->actor.flags |= ACTOR_FLAG_CAN_PRESS_SWITCH; func_809289B4(this); } this->actor.scale.z = this->actor.scale.y = this->actor.scale.x; diff --git a/src/overlays/actors/ovl_Obj_Um/z_obj_um.c b/src/overlays/actors/ovl_Obj_Um/z_obj_um.c index ac938752a..677cbfe2a 100644 --- a/src/overlays/actors/ovl_Obj_Um/z_obj_um.c +++ b/src/overlays/actors/ovl_Obj_Um/z_obj_um.c @@ -763,7 +763,7 @@ void ObjUm_Init(Actor* thisx, PlayState* play) { DynaPolyActor_Init(&this->dyna, 0); DynaPolyActor_LoadMesh(play, &this->dyna, &object_um_Colheader_007E20); } else { - DynaPolyActor_Init(&this->dyna, 3); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS | DYNA_TRANSFORM_ROT_Y); DynaPolyActor_LoadMesh(play, &this->dyna, &object_um_Colheader_007F50); } @@ -772,7 +772,7 @@ void ObjUm_Init(Actor* thisx, PlayState* play) { return; } - func_800C636C(play, &play->colCtx.dyna, this->dyna.bgId); + DynaPoly_DisableCeilingCollision(play, &play->colCtx.dyna, this->dyna.bgId); this->donkey = (EnHorse*)Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, this->dyna.actor.world.pos.x, diff --git a/src/overlays/actors/ovl_Obj_Y2lift/z_obj_y2lift.c b/src/overlays/actors/ovl_Obj_Y2lift/z_obj_y2lift.c index 9399940d8..96de17fb0 100644 --- a/src/overlays/actors/ovl_Obj_Y2lift/z_obj_y2lift.c +++ b/src/overlays/actors/ovl_Obj_Y2lift/z_obj_y2lift.c @@ -39,7 +39,7 @@ void ObjY2lift_Init(Actor* thisx, PlayState* play) { ObjY2lift* this = THIS; Actor_ProcessInitChain(&this->dyna.actor, sInitChain); - DynaPolyActor_Init(&this->dyna, 1); + DynaPolyActor_Init(&this->dyna, DYNA_TRANSFORM_POS); DynaPolyActor_LoadMesh(play, &this->dyna, &gPirateLiftPlatformCol); } @@ -53,13 +53,13 @@ void ObjY2lift_Update(Actor* thisx, PlayState* play) { ObjY2lift* this = THIS; f32 temp_fv0 = this->dyna.actor.world.pos.y; f32 targetVelocityY = 0.0f; - s32 temp_v0 = DynaPolyActor_IsInRidingMovingState(&this->dyna); + s32 isPlayerOnTop = DynaPolyActor_IsPlayerOnTop(&this->dyna); - if (temp_v0 || DynaPolyActor_IsInRidingFallingState(&this->dyna)) { + if (isPlayerOnTop || DynaPolyActor_IsActorOnTop(&this->dyna)) { if (!this->unk15D) { this->unk15D = true; this->unk15F = 12; - } else if (this->unk15F == 0 && temp_v0) { + } else if ((this->unk15F == 0) && isPlayerOnTop) { this->unk15C = 16; } } else { @@ -68,7 +68,7 @@ void ObjY2lift_Update(Actor* thisx, PlayState* play) { if (DECR(this->unk15C) != 0) { temp_fv0 = this->dyna.actor.home.pos.y + 180.0f; targetVelocityY = 2.0f; - } else if (!temp_v0 && this->dyna.actor.velocity.y <= 0.0f) { + } else if (!isPlayerOnTop && (this->dyna.actor.velocity.y <= 0.0f)) { temp_fv0 = this->dyna.actor.home.pos.y; targetVelocityY = -2.0f; } diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index ae80bd5e1..7464ad05e 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -1016,18 +1016,18 @@ 0x800C6098:("DynaPoly_Alloc",), 0x800C6188:("DynaPoly_SetBgActor",), 0x800C6248:("DynaPoly_GetActor",), - 0x800C62BC:("func_800C62BC",), - 0x800C6314:("func_800C6314",), - 0x800C636C:("func_800C636C",), - 0x800C63C4:("func_800C63C4",), - 0x800C641C:("func_800C641C",), - 0x800C6474:("func_800C6474",), + 0x800C62BC:("DynaPoly_DisableCollision",), + 0x800C6314:("DynaPoly_EnableCollision",), + 0x800C636C:("DynaPoly_DisableCeilingCollision",), + 0x800C63C4:("DynaPoly_EnableCeilingCollision",), + 0x800C641C:("DynaPoly_DisableFloorCollision",), + 0x800C6474:("DynaPoly_EnableFloorCollision",), 0x800C64CC:("DynaPoly_DeleteBgActor",), - 0x800C6554:("func_800C6554",), + 0x800C6554:("DynaPoly_InvalidateLookup",), 0x800C656C:("BgCheck_CalcWaterboxDimensions",), - 0x800C6838:("DynaPoly_ExpandSRT",), - 0x800C734C:("BgCheck_ResetFlagsIfLoadedActor",), - 0x800C73E4:("DynaPoly_Setup",), + 0x800C6838:("DynaPoly_AddBgActorToLookup",), + 0x800C734C:("DynaPoly_UnsetAllInteractFlags",), + 0x800C73E4:("DynaPoly_UpdateContext",), 0x800C756C:("func_800C756C",), 0x800C765C:("DynaPoly_UpdateBgActorTransforms",), 0x800C76EC:("BgCheck_RaycastFloorDynaList",), @@ -1092,25 +1092,25 @@ 0x800CA6F0:("func_800CA6F0",), 0x800CA9D0:("func_800CA9D0",), 0x800CAA14:("func_800CAA14",), - 0x800CAAD0:("BgCheck2_UpdateActorPosition",), - 0x800CAC0C:("BgCheck2_UpdateActorYRotation",), - 0x800CACA0:("BgCheck2_AttachToMesh",), - 0x800CAD2C:("BgCheck2_UpdateActorAttachedToMesh",), + 0x800CAAD0:("DynaPolyActor_UpdateCarriedActorPos",), + 0x800CAC0C:("DynaPolyActor_UpdateCarriedActorRotY",), + 0x800CACA0:("DynaPolyActor_AttachCarriedActor",), + 0x800CAD2C:("DynaPolyActor_TransformCarriedActor",), 0x800CAE10:("DynaPolyActor_Init",), 0x800CAE34:("DynaPolyActor_LoadMesh",), - 0x800CAE7C:("DynaPolyActor_ResetState",), - 0x800CAE88:("DynaPolyActor_SetRidingFallingState",), - 0x800CAE9C:("DynaPolyActor_SetRidingMovingState",), - 0x800CAEB0:("DynaPolyActor_SetRidingMovingStateByIndex",), - 0x800CAEE0:("DynaPolyActor_SetRidingRotatingState",), - 0x800CAEF4:("DynaPolyActor_SetRidingRotatingStateByIndex",), - 0x800CAF24:("DynaPolyActor_SetSwitchPressedState",), - 0x800CAF38:("DynaPolyActor_SetHeavySwitchPressedState",), - 0x800CAF4C:("DynaPolyActor_IsInRidingFallingState",), - 0x800CAF70:("DynaPolyActor_IsInRidingMovingState",), - 0x800CAF94:("DynaPolyActor_IsInRidingRotatingState",), - 0x800CAFB8:("DynaPolyActor_IsInSwitchPressedState",), - 0x800CAFDC:("DynaPolyActor_IsInHeavySwitchPressedState",), + 0x800CAE7C:("DynaPolyActor_UnsetAllInteractFlags",), + 0x800CAE88:("DynaPolyActor_SetActorOnTop",), + 0x800CAE9C:("DynaPolyActor_SetPlayerOnTop",), + 0x800CAEB0:("DynaPoly_SetPlayerOnTop",), + 0x800CAEE0:("DynaPolyActor_SetPlayerAbove",), + 0x800CAEF4:("DynaPoly_SetPlayerAbove",), + 0x800CAF24:("DynaPolyActor_SetActorOnSwitch",), + 0x800CAF38:("DynaPolyActor_SetActorOnHeavySwitch",), + 0x800CAF4C:("DynaPolyActor_IsActorOnTop",), + 0x800CAF70:("DynaPolyActor_IsPlayerOnTop",), + 0x800CAF94:("DynaPolyActor_IsPlayerAbove",), + 0x800CAFB8:("DynaPolyActor_IsSwitchPressed",), + 0x800CAFDC:("DynaPolyActor_IsHeavySwitchPressed",), 0x800CB000:("DynaPolyActor_ValidateMove",), 0x800CB210:("Camera_fabsf",), 0x800CB240:("Camera_Vec3fMagnitude",), diff --git a/tools/namefixer.py b/tools/namefixer.py index bb22b1fca..7a88f79d9 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -450,13 +450,32 @@ wordReplace = { "BgCheck_AddActorMesh": "DynaPoly_SetBgActor", "BgCheck_GetActorOfMesh": "DynaPoly_GetActor", "BgCheck_RemoveActorMesh": "DynaPoly_DeleteBgActor", - "BgCheck_AddActorMeshToLists": "DynaPoly_ExpandSRT", - "BgCheck_Update": "DynaPoly_Setup", + "BgCheck_AddActorMeshToLists": "DynaPoly_AddBgActorToLookup", + "BgCheck_Update": "DynaPoly_UpdateContext", "BgCheck_UpdateAllActorMeshes": "DynaPoly_UpdateBgActorTransforms", "BgCheck_RelocateMeshHeaderPointers": "CollisionHeader_SegmentedToVirtual", "BgCheck_RelocateMeshHeader": "CollisionHeader_GetVirtual", "BgCheck_RelocateAllMeshHeaders": "BgCheck_InitCollisionHeaders", "BgCheck_GetPolygonAttributes": "SurfaceType_GetData", + "DynaPolyActor_ResetState": "DynaPolyActor_UnsetAllInteractFlags", + "DynaPolyActor_SetRidingFallingState": "DynaPolyActor_SetActorOnTop", + "DynaPolyActor_SetRidingMovingState": "DynaPolyActor_SetPlayerOnTop", + "DynaPolyActor_SetRidingMovingStateByIndex": "DynaPoly_SetPlayerOnTop", + "DynaPolyActor_SetRidingRotatingState": "DynaPolyActor_SetPlayerAbove", + "DynaPolyActor_SetRidingRotatingStateByIndex": "DynaPoly_SetPlayerAbove", + "DynaPolyActor_SetSwitchPressedState": "DynaPolyActor_SetActorOnSwitch", + "DynaPolyActor_SetHeavySwitchPressedState": "DynaPolyActor_SetActorOnHeavySwitch", + "DynaPolyActor_IsInRidingFallingState": "DynaPolyActor_IsActorOnTop", + "DynaPolyActor_IsInRidingMovingState": "DynaPolyActor_IsPlayerOnTop", + "DynaPolyActor_IsInRidingRotatingState": "DynaPolyActor_IsPlayerAbove", + "DynaPolyActor_IsInSwitchPressedState": "DynaPolyActor_IsSwitchPressed", + "DynaPolyActor_IsInHeavySwitchPressedState": "DynaPolyActor_IsHeavySwitchPressed", + "func_800C62BC": "DynaPoly_DisableCollision", + "func_800C6314": "DynaPoly_EnableCollision", + "func_800C636C": "DynaPoly_DisableCeilingCollision", + "func_800C63C4": "DynaPoly_EnableCeilingCollision", + "func_800C641C": "DynaPoly_DisableFloorCollision", + "func_800C6474": "DynaPoly_EnableFloorCollision", "SurfaceType_GetConveyorType": "SurfaceType_IsFloorConveyor", "func_800C9704": "SurfaceType_GetBgCamIndex", "func_800C9924": "BgCheck_GetBgCamFuncData", diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index 353a7f394..8bfb180ff 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -530,18 +530,18 @@ asm/non_matchings/code/z_bgcheck/DynaPoly_Init.s,DynaPoly_Init,0x800C6044,0x15 asm/non_matchings/code/z_bgcheck/DynaPoly_Alloc.s,DynaPoly_Alloc,0x800C6098,0x3C asm/non_matchings/code/z_bgcheck/DynaPoly_SetBgActor.s,DynaPoly_SetBgActor,0x800C6188,0x30 asm/non_matchings/code/z_bgcheck/DynaPoly_GetActor.s,DynaPoly_GetActor,0x800C6248,0x1D -asm/non_matchings/code/z_bgcheck/func_800C62BC.s,func_800C62BC,0x800C62BC,0x16 -asm/non_matchings/code/z_bgcheck/func_800C6314.s,func_800C6314,0x800C6314,0x16 -asm/non_matchings/code/z_bgcheck/func_800C636C.s,func_800C636C,0x800C636C,0x16 -asm/non_matchings/code/z_bgcheck/func_800C63C4.s,func_800C63C4,0x800C63C4,0x16 -asm/non_matchings/code/z_bgcheck/func_800C641C.s,func_800C641C,0x800C641C,0x16 -asm/non_matchings/code/z_bgcheck/func_800C6474.s,func_800C6474,0x800C6474,0x16 +asm/non_matchings/code/z_bgcheck/DynaPoly_DisableCollision.s,DynaPoly_DisableCollision,0x800C62BC,0x16 +asm/non_matchings/code/z_bgcheck/DynaPoly_EnableCollision.s,DynaPoly_EnableCollision,0x800C6314,0x16 +asm/non_matchings/code/z_bgcheck/DynaPoly_DisableCeilingCollision.s,DynaPoly_DisableCeilingCollision,0x800C636C,0x16 +asm/non_matchings/code/z_bgcheck/DynaPoly_EnableCeilingCollision.s,DynaPoly_EnableCeilingCollision,0x800C63C4,0x16 +asm/non_matchings/code/z_bgcheck/DynaPoly_DisableFloorCollision.s,DynaPoly_DisableFloorCollision,0x800C641C,0x16 +asm/non_matchings/code/z_bgcheck/DynaPoly_EnableFloorCollision.s,DynaPoly_EnableFloorCollision,0x800C6474,0x16 asm/non_matchings/code/z_bgcheck/DynaPoly_DeleteBgActor.s,DynaPoly_DeleteBgActor,0x800C64CC,0x22 -asm/non_matchings/code/z_bgcheck/func_800C6554.s,func_800C6554,0x800C6554,0x6 +asm/non_matchings/code/z_bgcheck/DynaPoly_InvalidateLookup.s,DynaPoly_InvalidateLookup,0x800C6554,0x6 asm/non_matchings/code/z_bgcheck/BgCheck_CalcWaterboxDimensions.s,BgCheck_CalcWaterboxDimensions,0x800C656C,0xB3 asm/non_matchings/code/z_bgcheck/DynaPoly_SetBgActorToLists.s,DynaPoly_SetBgActorToLists,0x800C6838,0x2C5 -asm/non_matchings/code/z_bgcheck/BgCheck_ResetFlagsIfLoadedActor.s,BgCheck_ResetFlagsIfLoadedActor,0x800C734C,0x26 -asm/non_matchings/code/z_bgcheck/DynaPoly_Setup.s,DynaPoly_Setup,0x800C73E4,0x62 +asm/non_matchings/code/z_bgcheck/DynaPoly_UnsetAllInteractFlags.s,DynaPoly_UnsetAllInteractFlags,0x800C734C,0x26 +asm/non_matchings/code/z_bgcheck/DynaPoly_UpdateContext.s,DynaPoly_UpdateContext,0x800C73E4,0x62 asm/non_matchings/code/z_bgcheck/func_800C756C.s,func_800C756C,0x800C756C,0x3C asm/non_matchings/code/z_bgcheck/DynaPoly_SetupAllActorMeshes.s,DynaPoly_SetupAllActorMeshes,0x800C765C,0x24 asm/non_matchings/code/z_bgcheck/func_800C76EC.s,func_800C76EC,0x800C76EC,0xA2 @@ -606,10 +606,10 @@ asm/non_matchings/code/z_bgcheck/WaterBox_GetLightSettingIndex.s,WaterBox_GetLig asm/non_matchings/code/z_bgcheck/func_800CA6F0.s,func_800CA6F0,0x800CA6F0,0xB8 asm/non_matchings/code/z_bgcheck/func_800CA9D0.s,func_800CA9D0,0x800CA9D0,0x11 asm/non_matchings/code/z_bgcheck/func_800CAA14.s,func_800CAA14,0x800CAA14,0x2F -asm/non_matchings/code/z_bg_collect/BgCheck2_UpdateActorPosition.s,BgCheck2_UpdateActorPosition,0x800CAAD0,0x4F -asm/non_matchings/code/z_bg_collect/BgCheck2_UpdateActorYRotation.s,BgCheck2_UpdateActorYRotation,0x800CAC0C,0x25 -asm/non_matchings/code/z_bg_collect/BgCheck2_AttachToMesh.s,BgCheck2_AttachToMesh,0x800CACA0,0x23 -asm/non_matchings/code/z_bg_collect/BgCheck2_UpdateActorAttachedToMesh.s,BgCheck2_UpdateActorAttachedToMesh,0x800CAD2C,0x39 +asm/non_matchings/code/z_bg_collect/DynaPolyActor_UpdateCarriedActorPos.s,DynaPolyActor_UpdateCarriedActorPos,0x800CAAD0,0x4F +asm/non_matchings/code/z_bg_collect/DynaPolyActor_UpdateCarriedActorRotY.s,DynaPolyActor_UpdateCarriedActorRotY,0x800CAC0C,0x25 +asm/non_matchings/code/z_bg_collect/DynaPolyActor_AttachCarriedActor.s,DynaPolyActor_AttachCarriedActor,0x800CACA0,0x23 +asm/non_matchings/code/z_bg_collect/DynaPolyActor_TransformCarriedActor.s,DynaPolyActor_TransformCarriedActor,0x800CAD2C,0x39 asm/non_matchings/code/z_bg_item/DynaPoly_Init.s,DynaPoly_Init,0x800CAE10,0x9 asm/non_matchings/code/z_bg_item/DynaPoly_LoadMesh.s,DynaPoly_LoadMesh,0x800CAE34,0x12 asm/non_matchings/code/z_bg_item/DynaPoly_ResetState.s,DynaPoly_ResetState,0x800CAE7C,0x3 From 3c107cb148d784e2af4a347dc78f25b1697410be Mon Sep 17 00:00:00 2001 From: Anghelo Carvajal Date: Tue, 18 Apr 2023 18:54:32 -0400 Subject: [PATCH 10/12] Add `SaveInfo` substruct to `SaveContext` (#1191) * SaveInfo * fix accesses in sram_NES.c * some more fixing * more fixes * format * fix unk * namefixer * format * bss * review * weekeventregconvert * namefixer * bss --- docs/tutorial/advanced_control_flow.md | 42 +- docs/tutorial/documenting.md | 4 +- docs/tutorial/other_functions.md | 2 +- include/macros.h | 2 +- include/z64save.h | 168 +++--- src/code/code_8012EC80.c | 46 +- src/code/flg_set.c | 204 ++++---- src/code/z_demo.c | 9 +- src/code/z_elf_message.c | 2 +- src/code/z_en_item00.c | 21 +- src/code/z_game_over.c | 4 +- src/code/z_kaleido_setup.c | 6 +- src/code/z_lifemeter.c | 29 +- src/code/z_map_exp.c | 5 +- src/code/z_parameter.c | 259 +++++----- src/code/z_scene.c | 6 +- src/code/z_shrink_window.c | 1 + src/code/z_snap.c | 16 +- src/code/z_sram_NES.c | 489 +++++++++--------- .../ovl_Bg_Kin2_Fence/z_bg_kin2_fence.c | 2 +- .../actors/ovl_Dm_Char02/z_dm_char02.c | 2 +- src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c | 10 +- .../actors/ovl_Door_Shutter/z_door_shutter.c | 4 +- .../actors/ovl_Door_Warp1/z_door_warp1.c | 28 +- src/overlays/actors/ovl_Elf_Msg6/z_elf_msg6.c | 2 +- .../ovl_En_Akindonuts/z_en_akindonuts.c | 8 +- .../actors/ovl_En_Aob_01/z_en_aob_01.c | 12 +- .../actors/ovl_En_Bigslime/z_en_bigslime.c | 2 +- .../ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c | 4 +- .../actors/ovl_En_Bombers2/z_en_bombers2.c | 3 +- .../actors/ovl_En_Bomjima/z_en_bomjima.c | 12 +- .../actors/ovl_En_Bomjimb/z_en_bomjimb.c | 11 +- src/overlays/actors/ovl_En_Dg/z_en_dg.c | 4 +- src/overlays/actors/ovl_En_Door/z_en_door.c | 4 +- src/overlays/actors/ovl_En_Elf/z_en_elf.c | 18 +- .../actors/ovl_En_Elfgrp/z_en_elfgrp.c | 30 +- .../actors/ovl_En_Elforg/z_en_elforg.c | 4 +- .../actors/ovl_En_Fishing/z_en_fishing.c | 68 +-- src/overlays/actors/ovl_En_Fu/z_en_fu.c | 6 +- src/overlays/actors/ovl_En_Gb2/z_en_gb2.c | 10 +- .../actors/ovl_En_Ginko_Man/z_en_ginko_man.c | 56 +- src/overlays/actors/ovl_En_GirlA/z_en_girla.c | 34 +- src/overlays/actors/ovl_En_Gs/z_en_gs.c | 8 +- src/overlays/actors/ovl_En_In/z_en_in.c | 8 +- .../actors/ovl_En_Jgame_Tsn/z_en_jgame_tsn.c | 2 +- .../actors/ovl_En_Kaizoku/z_en_kaizoku.c | 6 +- src/overlays/actors/ovl_En_Kbt/z_en_kbt.c | 4 +- .../actors/ovl_En_Kendo_Js/z_en_kendo_js.c | 4 +- src/overlays/actors/ovl_En_Kgy/z_en_kgy.c | 18 +- .../actors/ovl_En_Kujiya/z_en_kujiya.c | 16 +- .../actors/ovl_En_Lift_Nuts/z_en_lift_nuts.c | 8 +- .../actors/ovl_En_M_Thunder/z_en_m_thunder.c | 2 +- src/overlays/actors/ovl_En_Ma4/z_en_ma4.c | 12 +- src/overlays/actors/ovl_En_Mk/z_en_mk.c | 2 +- src/overlays/actors/ovl_En_Mm3/z_en_mm3.c | 4 +- src/overlays/actors/ovl_En_Ms/z_en_ms.c | 4 +- .../ovl_En_Okarina_Tag/z_en_okarina_tag.c | 2 +- src/overlays/actors/ovl_En_Osn/z_en_osn.c | 12 +- src/overlays/actors/ovl_En_Owl/z_en_owl.c | 2 +- .../actors/ovl_En_Racedog/z_en_racedog.c | 5 +- .../actors/ovl_En_S_Goro/z_en_s_goro.c | 2 +- .../actors/ovl_En_Scopenuts/z_en_scopenuts.c | 5 +- .../actors/ovl_En_Sekihi/z_en_sekihi.c | 3 +- src/overlays/actors/ovl_En_Sth/z_en_sth.c | 2 +- .../ovl_En_Syateki_Man/z_en_syateki_man.c | 4 +- src/overlays/actors/ovl_En_Test4/z_en_test4.c | 2 +- .../actors/ovl_En_Thiefbird/z_en_thiefbird.c | 8 +- .../actors/ovl_En_Tru_Mt/z_en_tru_mt.c | 6 +- src/overlays/actors/ovl_En_Zod/z_en_zod.c | 24 +- .../actors/ovl_En_Zoraegg/z_en_zoraegg.c | 6 +- src/overlays/actors/ovl_En_Zot/z_en_zot.c | 2 +- .../actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c | 2 +- .../actors/ovl_Obj_Usiyane/z_obj_usiyane.c | 4 +- .../ovl_Obj_Warpstone/z_obj_warpstone.h | 2 +- .../ovl_kaleido_scope/z_kaleido_debug.c | 182 +++---- .../ovl_kaleido_scope/z_kaleido_item.c | 20 +- .../ovl_kaleido_scope/z_kaleido_map.c | 12 +- .../ovl_kaleido_scope/z_kaleido_mask.c | 19 +- .../ovl_kaleido_scope/z_kaleido_scope_NES.c | 14 +- tools/namefixer.py | 78 ++- tools/weekeventregconvert.py | 12 +- 81 files changed, 1126 insertions(+), 1051 deletions(-) diff --git a/docs/tutorial/advanced_control_flow.md b/docs/tutorial/advanced_control_flow.md index 528b052f9..43e9e6d46 100644 --- a/docs/tutorial/advanced_control_flow.md +++ b/docs/tutorial/advanced_control_flow.md @@ -81,7 +81,7 @@ void EnMs_Destroy(Actor* thisx, PlayState* play) { void func_80952734(EnMs* this, PlayState* play) { s16 temp_v1 = this->actor.yawTowardsPlayer - this->actor.shape.rot.y; - if (gSaveContext.save.inventory.items[10] == ITEM_NONE) { + if (gSaveContext.save.saveInfo.inventory.items[10] == ITEM_NONE) { this->actor.textId = 0x92E; } else { this->actor.textId = 0x932; @@ -187,12 +187,12 @@ void func_809527F8(EnMs* this, PlayState* play) { return; } Message_CloseTextbox(play); - if ((s32) gSaveContext.save.playerData.rupees < 0xA) { + if ((s32) gSaveContext.save.saveInfo.playerData.rupees < 0xA) { play_sound(0x4806U); Message_ContinueTextbox(play, 0x935U); return; } - if ((s32) gSaveContext.save.inventory.ammo[gItemSlots[0xA]] >= 0x14) { + if ((s32) gSaveContext.save.saveInfo.inventory.ammo[gItemSlots[0xA]] >= 0x14) { play_sound(0x4806U); Message_ContinueTextbox(play, 0x937U); return; @@ -274,14 +274,14 @@ block_7: goto block_16; block_11: Message_CloseTextbox(play); - if ((s32) gSaveContext.save.playerData.rupees >= 0xA) { + if ((s32) gSaveContext.save.saveInfo.playerData.rupees >= 0xA) { goto block_13; } play_sound(0x4806U); Message_ContinueTextbox(play, 0x935U); return; block_13: - if ((s32) gSaveContext.save.inventory.ammo[gItemSlots[0xA]] < 0x14) { + if ((s32) gSaveContext.save.saveInfo.inventory.ammo[gItemSlots[0xA]] < 0x14) { goto block_15; } play_sound(0x4806U); @@ -312,7 +312,7 @@ which in many ways looks worse: you can see why the use of gotos in code is stro The simplest sort of block label to eliminate is one that is only used once, and where the corresponding goto jumps over a simple block of code with no extra internal control flow structure. There are two obvious examples of this here, the first being ```C - if ((s32) gSaveContext.save.playerData.rupees >= 0xA) { + if ((s32) gSaveContext.save.saveInfo.playerData.rupees >= 0xA) { goto block_13; } play_sound(0x4806U); @@ -324,7 +324,7 @@ block_13: Currently, this says to jump over the code block `play_sound...` if the condition in the if is satisfied. In non-goto terms, this means that the block should be run if the condition is *not* satisfied. This also illustrates a general property of goto-only mode: you have to reverse the senses of all of the ifs. Therefore the appropriate approach is to swap the if round, put the code block inside, and remove the goto and the label: ```C - if (gSaveContext.save.playerData.rupees < 0xA) { + if (gSaveContext.save.saveInfo.playerData.rupees < 0xA) { play_sound(0x4806U); Message_ContinueTextbox(play, 0x935U); return; @@ -378,12 +378,12 @@ block_7: block_11: Message_CloseTextbox(play); - if (gSaveContext.save.playerData.rupees < 0xA) { + if (gSaveContext.save.saveInfo.playerData.rupees < 0xA) { play_sound(0x4806U); Message_ContinueTextbox(play, 0x935U); return; } - if (gSaveContext.save.inventory.ammo[gItemSlots[0xA]] >= 0x14) { + if (gSaveContext.save.saveInfo.inventory.ammo[gItemSlots[0xA]] >= 0x14) { play_sound(0x4806U); Message_ContinueTextbox(play, 0x937U); return; @@ -447,12 +447,12 @@ block_7: block_11: Message_CloseTextbox(play); - if (gSaveContext.save.playerData.rupees < 0xA) { + if (gSaveContext.save.saveInfo.playerData.rupees < 0xA) { play_sound(0x4806U); Message_ContinueTextbox(play, 0x935U); return; } - if (gSaveContext.save.inventory.ammo[gItemSlots[0xA]] >= 0x14) { + if (gSaveContext.save.saveInfo.inventory.ammo[gItemSlots[0xA]] >= 0x14) { play_sound(0x4806U); Message_ContinueTextbox(play, 0x937U); return; @@ -497,12 +497,12 @@ So let us rewrite the entire second half as a switch: case 0: Message_CloseTextbox(play); - if (gSaveContext.save.playerData.rupees < 0xA) { + if (gSaveContext.save.saveInfo.playerData.rupees < 0xA) { play_sound(0x4806U); Message_ContinueTextbox(play, 0x935U); return; } - if (gSaveContext.save.inventory.ammo[gItemSlots[0xA]] >= 0x14) { + if (gSaveContext.save.saveInfo.inventory.ammo[gItemSlots[0xA]] >= 0x14) { play_sound(0x4806U); Message_ContinueTextbox(play, 0x937U); return; @@ -533,10 +533,10 @@ There's a couple of other obvious things here: case 0: Message_CloseTextbox(play); - if (gSaveContext.save.playerData.rupees < 0xA) { + if (gSaveContext.save.saveInfo.playerData.rupees < 0xA) { play_sound(0x4806U); Message_ContinueTextbox(play, 0x935U); - } else if (gSaveContext.save.inventory.ammo[gItemSlots[0xA]] >= 0x14) { + } else if (gSaveContext.save.saveInfo.inventory.ammo[gItemSlots[0xA]] >= 0x14) { play_sound(0x4806U); Message_ContinueTextbox(play, 0x937U); } else { @@ -598,10 +598,10 @@ block_7: case 0: Message_CloseTextbox(play); - if (gSaveContext.save.playerData.rupees < 0xA) { + if (gSaveContext.save.saveInfo.playerData.rupees < 0xA) { play_sound(0x4806U); Message_ContinueTextbox(play, 0x935U); - } else if (gSaveContext.save.inventory.ammo[gItemSlots[0xA]] >= 0x14) { + } else if (gSaveContext.save.saveInfo.inventory.ammo[gItemSlots[0xA]] >= 0x14) { play_sound(0x4806U); Message_ContinueTextbox(play, 0x937U); } else { @@ -663,10 +663,10 @@ void func_809527F8(EnMs* this, PlayState* play) { case 0: Message_CloseTextbox(play); - if (gSaveContext.save.playerData.rupees < 0xA) { + if (gSaveContext.save.saveInfo.playerData.rupees < 0xA) { play_sound(0x4806U); Message_ContinueTextbox(play, 0x935U); - } else if (gSaveContext.save.inventory.ammo[gItemSlots[0xA]] >= 0x14) { + } else if (gSaveContext.save.saveInfo.inventory.ammo[gItemSlots[0xA]] >= 0x14) { play_sound(0x4806U); Message_ContinueTextbox(play, 0x937U); } else { @@ -715,10 +715,10 @@ void func_809527F8(EnMs* this, PlayState* play) { case 0: Message_CloseTextbox(play); - if (gSaveContext.save.playerData.rupees < 0xA) { + if (gSaveContext.save.saveInfo.playerData.rupees < 0xA) { play_sound(0x4806U); Message_ContinueTextbox(play, 0x935U); - } else if (gSaveContext.save.inventory.ammo[gItemSlots[0xA]] >= 0x14) { + } else if (gSaveContext.save.saveInfo.inventory.ammo[gItemSlots[0xA]] >= 0x14) { play_sound(0x4806U); Message_ContinueTextbox(play, 0x937U); } else { diff --git a/docs/tutorial/documenting.md b/docs/tutorial/documenting.md index 7ecd37ccb..71f3347e3 100644 --- a/docs/tutorial/documenting.md +++ b/docs/tutorial/documenting.md @@ -185,7 +185,7 @@ void func_80C102D4(EnRecepgirl* this, PlayState* play) { if (this->actor.textId == 0x2AD9) { Flags_SetSwitch(play, this->actor.params); Animation_MorphToPlayOnce(&this->skelAnime, &object_bg_Anim_00AD98, 10.0f); - if ((gSaveContext.save.weekEventReg[63] & 0x80)) { + if ((gSaveContext.save.saveInfo.weekEventReg[63] & 0x80)) { this->actor.textId = 0x2ADF; } else { this->actor.textId = 0x2ADA; @@ -516,7 +516,7 @@ void func_80C102D4(EnRecepgirl* this, PlayState* play) { if (this->actor.textId == 0x2AD9) { // "Welcome..." Flags_SetSwitch(play, this->actor.params); Animation_MorphToPlayOnce(&this->skelAnime, &object_bg_Anim_00AD98, 10.0f); - if (gSaveContext.save.weekEventReg[63] & 0x80) { // showed Couple's Mask to meeting + if (gSaveContext.save.saveInfo.weekEventReg[63] & 0x80) { // showed Couple's Mask to meeting this->actor.textId = 0x2ADF; // Mayor's office is on the left (meeting ended) } else { this->actor.textId = 0x2ADA; // Mayor's office is on the left (meeting ongoing) diff --git a/docs/tutorial/other_functions.md b/docs/tutorial/other_functions.md index c6ac63a64..f73902ca5 100644 --- a/docs/tutorial/other_functions.md +++ b/docs/tutorial/other_functions.md @@ -404,7 +404,7 @@ There remains one thing we need to fix before trying to compile it, namely `*(&g /* 0x0F5C */ u32 regionsVisited; // "area_arrival" ``` -so it's somewhere in `weekEventReg`. `0xF37 - 0xEF8 = 0x3F = 63`, and it's a byte array, so the access is actually `gSaveContext.save.weekEventReg[63] & 0x80`. Now it will compile. We also don't use `!= 0` for flag comparisons: just `if (gSaveContext.save.weekEventReg[63] & 0x80)` will do. +so it's somewhere in `weekEventReg`. `0xF37 - 0xEF8 = 0x3F = 63`, and it's a byte array, so the access is actually `gSaveContext.save.saveInfo.weekEventReg[63] & 0x80`. Now it will compile. We also don't use `!= 0` for flag comparisons: just `if (gSaveContext.save.saveInfo.weekEventReg[63] & 0x80)` will do. Running `./diff.py -mwo3 func_80C102D4` and scrolling down, we discover that this doesn't match! diff --git a/include/macros.h b/include/macros.h index d572e9ccf..70e07259f 100644 --- a/include/macros.h +++ b/include/macros.h @@ -60,7 +60,7 @@ #define CUR_CAPACITY(upg) CAPACITY(upg, CUR_UPG_VALUE(upg)) // To be used with `Magic_Add`, but ensures enough magic is added to fill the magic bar to capacity -#define MAGIC_FILL_TO_CAPACITY (((void)0, gSaveContext.magicFillTarget) + (gSaveContext.save.playerData.isDoubleMagicAcquired + 1) * MAGIC_NORMAL_METER) +#define MAGIC_FILL_TO_CAPACITY (((void)0, gSaveContext.magicFillTarget) + (gSaveContext.save.saveInfo.playerData.isDoubleMagicAcquired + 1) * MAGIC_NORMAL_METER) #define CONTROLLER1(gameState) (&(gameState)->input[0]) #define CONTROLLER2(gameState) (&(gameState)->input[1]) diff --git a/include/z64save.h b/include/z64save.h index afabcce34..362a16e92 100644 --- a/include/z64save.h +++ b/include/z64save.h @@ -252,61 +252,65 @@ typedef struct SavePlayerData { /* 0x26 */ s16 savedSceneId; // "scene_data_ID" } SavePlayerData; // size = 0x28 +typedef struct SaveInfo { + /* 0x000 */ SavePlayerData playerData; + /* 0x028 */ ItemEquips equips; + /* 0x04C */ Inventory inventory; + /* 0x0D4 */ PermanentSceneFlags permanentSceneFlags[120]; + /* 0xDF4 */ UNK_TYPE1 unk_DF4[0x54]; + /* 0xE48 */ u32 dekuPlaygroundHighScores[3]; + /* 0xE54 */ u32 pictoFlags0; // Flags set by `PictoActor`s if pictograph is valid + /* 0xE58 */ u32 pictoFlags1; // Flags set by Snap_ValidatePictograph() to record errors; volatile since that function is run many times in succession + /* 0xE5C */ u32 unk_E5C; + /* 0xE60 */ u32 unk_E60; + /* 0xE64 */ u32 unk_E64[7]; // Invadepoh flags + /* 0xE80 */ u32 scenesVisible[7]; // tingle maps and clouded regions on pause map. Stores scenes bitwise for up to 224 scenes even though there are not that many scenes + /* 0xE9C */ u32 skullTokenCount; // upper 16 bits store Swamp skulls, lower 16 bits store Ocean skulls + /* 0xEA0 */ u32 unk_EA0; // Gossic stone heart piece flags + /* 0xEA4 */ u32 unk_EA4; + /* 0xEA8 */ u32 unk_EA8[2]; // Related to blue warps + /* 0xEB0 */ u32 stolenItems; // Items stolen by Takkuri and given to Curiosity Shop Man + /* 0xEB4 */ u32 unk_EB4; + /* 0xEB8 */ u32 bankRupees; + /* 0xEBC */ u32 unk_EBC; + /* 0xEC0 */ u32 unk_EC0; // Fishing flags + /* 0xEC4 */ u32 unk_EC4; + /* 0xEC8 */ u32 horseBackBalloonHighScore; + /* 0xECC */ u32 lotteryCodeGuess; // Lottery code chosen by player (only uses lower three hex digits) + /* 0xED0 */ u32 shootingGalleryHighScores; // High scores for both shooting galleries. Town uses lower 16 bits, Swamp uses higher 16 bits. + /* 0xED4 */ u8 weekEventReg[100]; // "week_event_reg" + /* 0xF38 */ u32 regionsVisited; // "area_arrival" + /* 0xF3C */ u32 worldMapCloudVisibility; // "cloud_clear" + /* 0xF40 */ u8 unk_F40; // "oca_rec_flag" has scarecrows song + /* 0xF41 */ u8 unk_F41; // "oca_rec_flag8" scarecrows song set? + /* 0xF42 */ u8 scarecrowSpawnSong[128]; + /* 0xFC2 */ s8 bombersCaughtNum; // "aikotoba_index" + /* 0xFC3 */ s8 bombersCaughtOrder[5]; // "aikotoba_table" + /* 0xFC8 */ s8 lotteryCodes[3][3]; // "numbers_table", Preset lottery codes + /* 0xFD1 */ s8 spiderHouseMaskOrder[6]; // "kinsta_color_table" + /* 0xFD7 */ s8 bomberCode[5]; // "bombers_aikotoba_table" + /* 0xFDC */ HorseData horseData; + /* 0xFE6 */ u16 checksum; // "check_sum" +} SaveInfo; // size = 0xFE8 + typedef struct Save { - /* 0x0000 */ s32 entrance; // "scene_no" - /* 0x0004 */ u8 equippedMask; // "player_mask" - /* 0x0005 */ u8 isFirstCycle; // "opening_flag" - /* 0x0006 */ u8 unk_06; - /* 0x0007 */ u8 linkAge; // "link_age" - /* 0x0008 */ s32 cutscene; // "day_time" - /* 0x000C */ u16 time; // "zelda_time" - /* 0x000E */ u16 owlSaveLocation; - /* 0x0010 */ s32 isNight; // "asahiru_fg" - /* 0x0014 */ s32 timeSpeedOffset; // "change_zelda_time" - /* 0x0018 */ s32 day; // "totalday" - /* 0x001C */ s32 daysElapsed; // "eventday" - /* 0x0020 */ u8 playerForm; // "player_character" - /* 0x0021 */ u8 snowheadCleared; // "spring_flag" - /* 0x0022 */ u8 hasTatl; // "bell_flag" - /* 0x0023 */ u8 isOwlSave; - /* 0x0024 */ SavePlayerData playerData; - /* 0x004C */ ItemEquips equips; - /* 0x0070 */ Inventory inventory; - /* 0x00F8 */ PermanentSceneFlags permanentSceneFlags[120]; - /* 0x0E18 */ u8 unk_E18[0x54]; - /* 0x0E6C */ u32 dekuPlaygroundHighScores[3]; - /* 0x0E78 */ u32 pictoFlags0; // Flags set by `PictoActor`s if pictograph is valid - /* 0x0E7C */ u32 pictoFlags1; // Flags set by Snap_ValidatePictograph() to record errors; volatile since that function is run many times in succession - /* 0x0E80 */ u32 unk_E80; - /* 0x0E84 */ u32 unk_E84; - /* 0x0E88 */ u32 unk_E88[7]; // Invadepoh flags - /* 0x0EA4 */ u32 scenesVisible[7]; // tingle maps and clouded regions on pause map. Stores scenes bitwise for up to 224 scenes even though there are not that many scenes - /* 0x0EC0 */ u32 skullTokenCount; // upper 16 bits store Swamp skulls, lower 16 bits store Ocean skulls - /* 0x0EC4 */ u32 unk_EC4; // Gossic stone heart piece flags - /* 0x0EC8 */ u32 unk_EC8; - /* 0x0ECC */ u32 unk_ECC[2]; // Related to blue warps - /* 0x0ED4 */ u32 stolenItems; // Items stolen by Takkuri and given to Curiosity Shop Man - /* 0x0ED8 */ u32 unk_DD8; - /* 0x0EDC */ u32 bankRupees; - /* 0x0EE0 */ u32 unk_EE0; - /* 0x0EE4 */ u32 unk_EE4; // Fishing flags - /* 0x0EE8 */ u32 unk_EE8; - /* 0x0EEC */ u32 horseBackBalloonHighScore; - /* 0x0EF0 */ u32 lotteryCodeGuess; // Lottery code chosen by player (only uses lower three hex digits) - /* 0x0EF4 */ u32 shootingGalleryHighScores; // High scores for both shooting galleries. Town uses lower 16 bits, Swamp uses higher 16 bits. - /* 0x0EF8 */ u8 weekEventReg[100]; // "week_event_reg" - /* 0x0F5C */ u32 regionsVisited; // "area_arrival" - /* 0x0F60 */ u32 worldMapCloudVisibility; // "cloud_clear" - /* 0x0F64 */ u8 unk_F64; // "oca_rec_flag" has scarecrows song - /* 0x0F65 */ u8 unk_F65; // "oca_rec_flag8" scarecrows song set? - /* 0x0F66 */ u8 scarecrowSpawnSong[128]; - /* 0x0FE6 */ s8 bombersCaughtNum; // "aikotoba_index" - /* 0x0FE7 */ s8 bombersCaughtOrder[5]; // "aikotoba_table" - /* 0x0FEC */ s8 lotteryCodes[3][3]; // "numbers_table", Preset lottery codes - /* 0x0FF5 */ s8 spiderHouseMaskOrder[6]; // "kinsta_color_table" - /* 0x0FFB */ s8 bomberCode[5]; // "bombers_aikotoba_table" - /* 0x1000 */ HorseData horseData; - /* 0x100A */ u16 checksum; // "check_sum" + /* 0x00 */ s32 entrance; // "scene_no" + /* 0x04 */ u8 equippedMask; // "player_mask" + /* 0x05 */ u8 isFirstCycle; // "opening_flag" + /* 0x06 */ u8 unk_06; + /* 0x07 */ u8 linkAge; // "link_age" + /* 0x08 */ s32 cutscene; // "day_time" + /* 0x0C */ u16 time; // "zelda_time" + /* 0x0E */ u16 owlSaveLocation; + /* 0x10 */ s32 isNight; // "asahiru_fg" + /* 0x14 */ s32 timeSpeedOffset; // "change_zelda_time" + /* 0x18 */ s32 day; // "totalday" + /* 0x1C */ s32 daysElapsed; // "eventday" + /* 0x20 */ u8 playerForm; // "player_character" + /* 0x21 */ u8 snowheadCleared; // "spring_flag" + /* 0x22 */ u8 hasTatl; // "bell_flag" + /* 0x23 */ u8 isOwlSave; + /* 0x24 */ SaveInfo saveInfo; } Save; // size = 0x100C typedef struct SaveContext { @@ -429,41 +433,41 @@ typedef enum { #define GET_PLAYER_FORM ((void)0, gSaveContext.save.playerForm) #define SLOT(item) gItemSlots[item] -#define AMMO(item) gSaveContext.save.inventory.ammo[SLOT(item)] -#define INV_CONTENT(item) gSaveContext.save.inventory.items[SLOT(item)] -#define GET_INV_CONTENT(item) ((void)0, gSaveContext.save.inventory.items)[SLOT(item)] +#define AMMO(item) gSaveContext.save.saveInfo.inventory.ammo[SLOT(item)] +#define INV_CONTENT(item) gSaveContext.save.saveInfo.inventory.items[SLOT(item)] +#define GET_INV_CONTENT(item) ((void)0, gSaveContext.save.saveInfo.inventory.items)[SLOT(item)] #define CUR_FORM ((gSaveContext.save.playerForm == PLAYER_FORM_HUMAN) ? 0 : gSaveContext.save.playerForm) -#define GET_SAVE_EQUIPS_EQUIPMENT ((void)0, gSaveContext.save.equips.equipment) -#define GET_SAVE_INVENTORY_UPGRADES ((void)0, gSaveContext.save.inventory.upgrades) -#define GET_SAVE_INVENTORY_QUEST_ITEMS ((void)0, gSaveContext.save.inventory.questItems) +#define GET_SAVE_EQUIPS_EQUIPMENT ((void)0, gSaveContext.save.saveInfo.equips.equipment) +#define GET_SAVE_INVENTORY_UPGRADES ((void)0, gSaveContext.save.saveInfo.inventory.upgrades) +#define GET_SAVE_INVENTORY_QUEST_ITEMS ((void)0, gSaveContext.save.saveInfo.inventory.questItems) #define GET_CUR_EQUIP_VALUE(equip) ((GET_SAVE_EQUIPS_EQUIPMENT & gEquipMasks[equip]) >> gEquipShifts[equip]) -#define CUR_UPG_VALUE(upg) ((gSaveContext.save.inventory.upgrades & gUpgradeMasks[upg]) >> gUpgradeShifts[upg]) +#define CUR_UPG_VALUE(upg) ((gSaveContext.save.saveInfo.inventory.upgrades & gUpgradeMasks[upg]) >> gUpgradeShifts[upg]) #define GET_CUR_UPG_VALUE(upg) ((GET_SAVE_INVENTORY_UPGRADES & gUpgradeMasks[upg]) >> gUpgradeShifts[upg]) -#define SET_EQUIP_VALUE(equip, value) (gSaveContext.save.equips.equipment = ((GET_SAVE_EQUIPS_EQUIPMENT & gEquipNegMasks[equip]) | (u16)((u16)(value) << gEquipShifts[equip]))) +#define SET_EQUIP_VALUE(equip, value) (gSaveContext.save.saveInfo.equips.equipment = ((GET_SAVE_EQUIPS_EQUIPMENT & gEquipNegMasks[equip]) | (u16)((u16)(value) << gEquipShifts[equip]))) -#define BUTTON_ITEM_EQUIP(form, button) (gSaveContext.save.equips.buttonItems[form][button]) +#define BUTTON_ITEM_EQUIP(form, button) (gSaveContext.save.saveInfo.equips.buttonItems[form][button]) #define CUR_FORM_EQUIP(button) BUTTON_ITEM_EQUIP(CUR_FORM, button) -#define C_SLOT_EQUIP(form, button) (gSaveContext.save.equips.cButtonSlots[form][button]) +#define C_SLOT_EQUIP(form, button) (gSaveContext.save.saveInfo.equips.cButtonSlots[form][button]) #define CHECK_QUEST_ITEM(item) (GET_SAVE_INVENTORY_QUEST_ITEMS & gBitFlags[item]) -#define SET_QUEST_ITEM(item) (gSaveContext.save.inventory.questItems = (GET_SAVE_INVENTORY_QUEST_ITEMS | gBitFlags[item])) -#define REMOVE_QUEST_ITEM(item) (gSaveContext.save.inventory.questItems = (GET_SAVE_INVENTORY_QUEST_ITEMS & (-1 - gBitFlags[item]))) +#define SET_QUEST_ITEM(item) (gSaveContext.save.saveInfo.inventory.questItems = (GET_SAVE_INVENTORY_QUEST_ITEMS | gBitFlags[item])) +#define REMOVE_QUEST_ITEM(item) (gSaveContext.save.saveInfo.inventory.questItems = (GET_SAVE_INVENTORY_QUEST_ITEMS & (-1 - gBitFlags[item]))) #define GET_QUEST_HEART_PIECE_COUNT ((GET_SAVE_INVENTORY_QUEST_ITEMS & 0xF0000000) >> QUEST_HEART_PIECE_COUNT) #define EQ_MAX_QUEST_HEART_PIECE_COUNT ((GET_SAVE_INVENTORY_QUEST_ITEMS & 0xF0000000) == (4 << QUEST_HEART_PIECE_COUNT)) #define LEQ_MAX_QUEST_HEART_PIECE_COUNT ((GET_SAVE_INVENTORY_QUEST_ITEMS & 0xF0000000) <= (4 << QUEST_HEART_PIECE_COUNT)) -#define INCREMENT_QUEST_HEART_PIECE_COUNT (gSaveContext.save.inventory.questItems += (1 << QUEST_HEART_PIECE_COUNT)) -#define DECREMENT_QUEST_HEART_PIECE_COUNT (gSaveContext.save.inventory.questItems -= (1 << QUEST_HEART_PIECE_COUNT)) -#define RESET_HEART_PIECE_COUNT (gSaveContext.save.inventory.questItems ^= (4 << QUEST_HEART_PIECE_COUNT)) +#define INCREMENT_QUEST_HEART_PIECE_COUNT (gSaveContext.save.saveInfo.inventory.questItems += (1 << QUEST_HEART_PIECE_COUNT)) +#define DECREMENT_QUEST_HEART_PIECE_COUNT (gSaveContext.save.saveInfo.inventory.questItems -= (1 << QUEST_HEART_PIECE_COUNT)) +#define RESET_HEART_PIECE_COUNT (gSaveContext.save.saveInfo.inventory.questItems ^= (4 << QUEST_HEART_PIECE_COUNT)) -#define CHECK_DUNGEON_ITEM(item, dungeonIndex) (gSaveContext.save.inventory.dungeonItems[(void)0, dungeonIndex] & gBitFlags[item]) -#define SET_DUNGEON_ITEM(item, dungeonIndex) (gSaveContext.save.inventory.dungeonItems[(void)0, dungeonIndex] |= (u8)gBitFlags[item]) -#define DUNGEON_KEY_COUNT(dungeonIndex) (gSaveContext.save.inventory.dungeonKeys[(void)0, dungeonIndex]) +#define CHECK_DUNGEON_ITEM(item, dungeonIndex) (gSaveContext.save.saveInfo.inventory.dungeonItems[(void)0, dungeonIndex] & gBitFlags[item]) +#define SET_DUNGEON_ITEM(item, dungeonIndex) (gSaveContext.save.saveInfo.inventory.dungeonItems[(void)0, dungeonIndex] |= (u8)gBitFlags[item]) +#define DUNGEON_KEY_COUNT(dungeonIndex) (gSaveContext.save.saveInfo.inventory.dungeonKeys[(void)0, dungeonIndex]) #define GET_CUR_FORM_BTN_ITEM(btn) ((u8)((btn) == EQUIP_SLOT_B ? BUTTON_ITEM_EQUIP(CUR_FORM, btn) : BUTTON_ITEM_EQUIP(0, btn))) #define GET_CUR_FORM_BTN_SLOT(btn) ((u8)((btn) == EQUIP_SLOT_B ? C_SLOT_EQUIP(CUR_FORM, btn) : C_SLOT_EQUIP(0, btn))) @@ -491,21 +495,21 @@ typedef enum { #define STOLEN_ITEM_NONE (0) -#define STOLEN_ITEM_1 ((gSaveContext.save.stolenItems & 0xFF000000) >> 0x18) -#define STOLEN_ITEM_2 ((gSaveContext.save.stolenItems & 0x00FF0000) >> 0x10) +#define STOLEN_ITEM_1 ((gSaveContext.save.saveInfo.stolenItems & 0xFF000000) >> 0x18) +#define STOLEN_ITEM_2 ((gSaveContext.save.saveInfo.stolenItems & 0x00FF0000) >> 0x10) #define SET_STOLEN_ITEM_1(itemId) \ - (gSaveContext.save.stolenItems = (gSaveContext.save.stolenItems & ~0xFF000000) | ((itemId & 0xFF) << 0x18)) + (gSaveContext.save.saveInfo.stolenItems = (gSaveContext.save.saveInfo.stolenItems & ~0xFF000000) | ((itemId & 0xFF) << 0x18)) #define SET_STOLEN_ITEM_2(itemId) \ - (gSaveContext.save.stolenItems = (gSaveContext.save.stolenItems & ~0x00FF0000) | ((itemId & 0xFF) << 0x10)) + (gSaveContext.save.saveInfo.stolenItems = (gSaveContext.save.saveInfo.stolenItems & ~0x00FF0000) | ((itemId & 0xFF) << 0x10)) -#define GET_TOWN_SHOOTING_GALLERY_HIGH_SCORE() ((s32)(gSaveContext.save.shootingGalleryHighScores & 0xFFFF)) -#define GET_SWAMP_SHOOTING_GALLERY_HIGH_SCORE() ((s32)((gSaveContext.save.shootingGalleryHighScores & 0xFFFF0000) >> 0x10)) -#define SET_TOWN_SHOOTING_GALLERY_HIGH_SCORE(score) (gSaveContext.save.shootingGalleryHighScores = (gSaveContext.save.shootingGalleryHighScores & 0xFFFF0000) | ((u16)(score))) -#define SET_SWAMP_SHOOTING_GALLERY_HIGH_SCORE(score) (gSaveContext.save.shootingGalleryHighScores = ((gSaveContext.save.shootingGalleryHighScores) & 0xFFFF) | ((u16)(score) << 0x10)) +#define GET_TOWN_SHOOTING_GALLERY_HIGH_SCORE() ((s32)(gSaveContext.save.saveInfo.shootingGalleryHighScores & 0xFFFF)) +#define GET_SWAMP_SHOOTING_GALLERY_HIGH_SCORE() ((s32)((gSaveContext.save.saveInfo.shootingGalleryHighScores & 0xFFFF0000) >> 0x10)) +#define SET_TOWN_SHOOTING_GALLERY_HIGH_SCORE(score) (gSaveContext.save.saveInfo.shootingGalleryHighScores = (gSaveContext.save.saveInfo.shootingGalleryHighScores & 0xFFFF0000) | ((u16)(score))) +#define SET_SWAMP_SHOOTING_GALLERY_HIGH_SCORE(score) (gSaveContext.save.saveInfo.shootingGalleryHighScores = ((gSaveContext.save.saveInfo.shootingGalleryHighScores) & 0xFFFF) | ((u16)(score) << 0x10)) /** - * gSaveContext.save.weekEventReg + * gSaveContext.save.saveInfo.weekEventReg */ #define PACK_WEEKEVENTREG_FLAG(index, mask) (((index) << 8) | (mask)) @@ -1448,7 +1452,7 @@ typedef enum { #define WEEKEVENTREG_99_40 PACK_WEEKEVENTREG_FLAG(99, 0x40) #define WEEKEVENTREG_99_80 PACK_WEEKEVENTREG_FLAG(99, 0x80) -#define WEEKEVENTREG(index) (gSaveContext.save.weekEventReg[(index)]) +#define WEEKEVENTREG(index) (gSaveContext.save.saveInfo.weekEventReg[(index)]) #define GET_WEEKEVENTREG(index) ((void)0, WEEKEVENTREG(index)) #define CHECK_WEEKEVENTREG(flag) (WEEKEVENTREG((flag) >> 8) & ((flag) & 0xFF)) diff --git a/src/code/code_8012EC80.c b/src/code/code_8012EC80.c index d120da618..ca8a3eb1a 100644 --- a/src/code/code_8012EC80.c +++ b/src/code/code_8012EC80.c @@ -511,12 +511,12 @@ u8 Inventory_DeleteEquipment(PlayState* play, s16 equipment) { } void Inventory_ChangeUpgrade(s16 upgrade, u32 value) { - u32 upgrades = gSaveContext.save.inventory.upgrades; + u32 upgrades = gSaveContext.save.saveInfo.inventory.upgrades; upgrades &= gUpgradeNegMasks[upgrade]; upgrades |= value << gUpgradeShifts[upgrade]; - gSaveContext.save.inventory.upgrades = upgrades; + gSaveContext.save.saveInfo.inventory.upgrades = upgrades; } s32 Inventory_IsMapVisible(s16 sceneId) { @@ -543,7 +543,7 @@ s32 Inventory_IsMapVisible(s16 sceneId) { } } - if (gSaveContext.save.scenesVisible[index] & gBitFlags[sceneId - (index << 5)]) { + if (gSaveContext.save.saveInfo.scenesVisible[index] & gBitFlags[sceneId - (index << 5)]) { return true; } @@ -656,23 +656,23 @@ void Inventory_SetWorldMapCloudVisibility(s16 tingleIndex) { index = 6; } - gSaveContext.save.scenesVisible[index] = - gSaveContext.save.scenesVisible[index] | gBitFlags[(s16)(*tingleMapSceneIds)[i] - (index << 5)]; + gSaveContext.save.saveInfo.scenesVisible[index] = gSaveContext.save.saveInfo.scenesVisible[index] | + gBitFlags[(s16)(*tingleMapSceneIds)[i] - (index << 5)]; i++; } if (*tingleMapSceneIds == sSceneIdsPerTingleMap[TINGLE_MAP_CLOCK_TOWN]) { - gSaveContext.save.worldMapCloudVisibility |= 3; + gSaveContext.save.saveInfo.worldMapCloudVisibility |= 3; } else if (*tingleMapSceneIds == sSceneIdsPerTingleMap[TINGLE_MAP_WOODFALL]) { - gSaveContext.save.worldMapCloudVisibility |= 0x1C; + gSaveContext.save.saveInfo.worldMapCloudVisibility |= 0x1C; } else if (*tingleMapSceneIds == sSceneIdsPerTingleMap[TINGLE_MAP_SNOWHEAD]) { - gSaveContext.save.worldMapCloudVisibility |= 0xE0; + gSaveContext.save.saveInfo.worldMapCloudVisibility |= 0xE0; } else if (*tingleMapSceneIds == sSceneIdsPerTingleMap[TINGLE_MAP_ROMANI_RANCH]) { - gSaveContext.save.worldMapCloudVisibility |= 0x100; + gSaveContext.save.saveInfo.worldMapCloudVisibility |= 0x100; } else if (*tingleMapSceneIds == sSceneIdsPerTingleMap[TINGLE_MAP_GREAT_BAY]) { - gSaveContext.save.worldMapCloudVisibility |= 0x1E00; + gSaveContext.save.saveInfo.worldMapCloudVisibility |= 0x1E00; } else if (*tingleMapSceneIds == sSceneIdsPerTingleMap[TINGLE_MAP_STONE_TOWER]) { - gSaveContext.save.worldMapCloudVisibility |= 0x6000; + gSaveContext.save.saveInfo.worldMapCloudVisibility |= 0x6000; } } @@ -685,34 +685,34 @@ void Inventory_SetWorldMapCloudVisibility(s16 tingleIndex) { void Inventory_SaveDekuPlaygroundHighScore(s16 timerId) { s16 i; - gSaveContext.save.dekuPlaygroundHighScores[CURRENT_DAY - 1] = gSaveContext.timerCurTimes[timerId]; + gSaveContext.save.saveInfo.dekuPlaygroundHighScores[CURRENT_DAY - 1] = gSaveContext.timerCurTimes[timerId]; for (i = 0; i < 8; i++) { - gSaveContext.save.inventory.dekuPlaygroundPlayerName[CURRENT_DAY - 1][i] = - gSaveContext.save.playerData.playerName[i]; + gSaveContext.save.saveInfo.inventory.dekuPlaygroundPlayerName[CURRENT_DAY - 1][i] = + gSaveContext.save.saveInfo.playerData.playerName[i]; } } void Inventory_IncrementSkullTokenCount(s16 sceneIndex) { if (sceneIndex == SCENE_KINSTA1) { // Swamp Spider House (increment high bits of skullTokenCount) - gSaveContext.save.skullTokenCount = - ((u16)(((gSaveContext.save.skullTokenCount & 0xFFFF0000) >> 0x10) + 1) << 0x10) | - (gSaveContext.save.skullTokenCount & 0xFFFF); + gSaveContext.save.saveInfo.skullTokenCount = + ((u16)(((gSaveContext.save.saveInfo.skullTokenCount & 0xFFFF0000) >> 0x10) + 1) << 0x10) | + (gSaveContext.save.saveInfo.skullTokenCount & 0xFFFF); } else { // Ocean Spider House (increment low bits of skullTokenCount) - gSaveContext.save.skullTokenCount = - (((u16)gSaveContext.save.skullTokenCount + 1) & 0xFFFF) | (gSaveContext.save.skullTokenCount & 0xFFFF0000); + gSaveContext.save.saveInfo.skullTokenCount = (((u16)gSaveContext.save.saveInfo.skullTokenCount + 1) & 0xFFFF) | + (gSaveContext.save.saveInfo.skullTokenCount & 0xFFFF0000); } } s16 Inventory_GetSkullTokenCount(s16 sceneIndex) { if (sceneIndex == SCENE_KINSTA1) { // Swamp Spider House - return (gSaveContext.save.skullTokenCount & 0xFFFF0000) >> 0x10; + return (gSaveContext.save.saveInfo.skullTokenCount & 0xFFFF0000) >> 0x10; } else { // Ocean Spider House - return gSaveContext.save.skullTokenCount & 0xFFFF; + return gSaveContext.save.saveInfo.skullTokenCount & 0xFFFF; } } @@ -722,6 +722,6 @@ void Inventory_SaveLotteryCodeGuess(PlayState* play) { lotteryCodeGuess = ((play->msgCtx.unk12054[0] & 0xF) << 8); // First Digit lotteryCodeGuess |= ((play->msgCtx.unk12054[1] & 0xF) << 4); // Second Digit lotteryCodeGuess |= (play->msgCtx.unk12054[2] & 0xF); // Third Digit - gSaveContext.save.lotteryCodeGuess = - (gSaveContext.save.lotteryCodeGuess & 0xFFFF0000) | (lotteryCodeGuess & 0xFFFF); + gSaveContext.save.saveInfo.lotteryCodeGuess = + (gSaveContext.save.saveInfo.lotteryCodeGuess & 0xFFFF0000) | (lotteryCodeGuess & 0xFFFF); } diff --git a/src/code/flg_set.c b/src/code/flg_set.c index a22b62a0e..bb25818a6 100644 --- a/src/code/flg_set.c +++ b/src/code/flg_set.c @@ -13,106 +13,106 @@ #include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h" static FlagSetEntry sFlagEntries[] = { - { &gSaveContext.save.weekEventReg[0], "week_event_reg[0]" }, - { &gSaveContext.save.weekEventReg[1], "week_event_reg[1]" }, - { &gSaveContext.save.weekEventReg[2], "week_event_reg[2]" }, - { &gSaveContext.save.weekEventReg[3], "week_event_reg[3]" }, - { &gSaveContext.save.weekEventReg[4], "week_event_reg[4]" }, - { &gSaveContext.save.weekEventReg[5], "week_event_reg[5]" }, - { &gSaveContext.save.weekEventReg[6], "week_event_reg[6]" }, - { &gSaveContext.save.weekEventReg[7], "week_event_reg[7]" }, - { &gSaveContext.save.weekEventReg[8], "week_event_reg[8]" }, - { &gSaveContext.save.weekEventReg[9], "week_event_reg[9]" }, - { &gSaveContext.save.weekEventReg[10], "week_event_reg[10]" }, - { &gSaveContext.save.weekEventReg[11], "week_event_reg[11]" }, - { &gSaveContext.save.weekEventReg[12], "week_event_reg[12]" }, - { &gSaveContext.save.weekEventReg[13], "week_event_reg[13]" }, - { &gSaveContext.save.weekEventReg[14], "week_event_reg[14]" }, - { &gSaveContext.save.weekEventReg[15], "week_event_reg[15]" }, - { &gSaveContext.save.weekEventReg[16], "week_event_reg[16]" }, - { &gSaveContext.save.weekEventReg[17], "week_event_reg[17]" }, - { &gSaveContext.save.weekEventReg[18], "week_event_reg[18]" }, - { &gSaveContext.save.weekEventReg[19], "week_event_reg[19]" }, - { &gSaveContext.save.weekEventReg[20], "week_event_reg[20]" }, - { &gSaveContext.save.weekEventReg[21], "week_event_reg[21]" }, - { &gSaveContext.save.weekEventReg[22], "week_event_reg[22]" }, - { &gSaveContext.save.weekEventReg[23], "week_event_reg[23]" }, - { &gSaveContext.save.weekEventReg[24], "week_event_reg[24]" }, - { &gSaveContext.save.weekEventReg[25], "week_event_reg[25]" }, - { &gSaveContext.save.weekEventReg[26], "week_event_reg[26]" }, - { &gSaveContext.save.weekEventReg[27], "week_event_reg[27]" }, - { &gSaveContext.save.weekEventReg[28], "week_event_reg[28]" }, - { &gSaveContext.save.weekEventReg[29], "week_event_reg[29]" }, - { &gSaveContext.save.weekEventReg[30], "week_event_reg[30]" }, - { &gSaveContext.save.weekEventReg[31], "week_event_reg[31]" }, - { &gSaveContext.save.weekEventReg[32], "week_event_reg[32]" }, - { &gSaveContext.save.weekEventReg[33], "week_event_reg[33]" }, - { &gSaveContext.save.weekEventReg[34], "week_event_reg[34]" }, - { &gSaveContext.save.weekEventReg[35], "week_event_reg[35]" }, - { &gSaveContext.save.weekEventReg[36], "week_event_reg[36]" }, - { &gSaveContext.save.weekEventReg[37], "week_event_reg[37]" }, - { &gSaveContext.save.weekEventReg[38], "week_event_reg[38]" }, - { &gSaveContext.save.weekEventReg[39], "week_event_reg[39]" }, - { &gSaveContext.save.weekEventReg[40], "week_event_reg[40]" }, - { &gSaveContext.save.weekEventReg[41], "week_event_reg[41]" }, - { &gSaveContext.save.weekEventReg[42], "week_event_reg[42]" }, - { &gSaveContext.save.weekEventReg[43], "week_event_reg[43]" }, - { &gSaveContext.save.weekEventReg[44], "week_event_reg[44]" }, - { &gSaveContext.save.weekEventReg[45], "week_event_reg[45]" }, - { &gSaveContext.save.weekEventReg[46], "week_event_reg[46]" }, - { &gSaveContext.save.weekEventReg[47], "week_event_reg[47]" }, - { &gSaveContext.save.weekEventReg[48], "week_event_reg[48]" }, - { &gSaveContext.save.weekEventReg[49], "week_event_reg[49]" }, - { &gSaveContext.save.weekEventReg[50], "week_event_reg[50]" }, - { &gSaveContext.save.weekEventReg[51], "week_event_reg[51]" }, - { &gSaveContext.save.weekEventReg[52], "week_event_reg[52]" }, - { &gSaveContext.save.weekEventReg[53], "week_event_reg[53]" }, - { &gSaveContext.save.weekEventReg[54], "week_event_reg[54]" }, - { &gSaveContext.save.weekEventReg[55], "week_event_reg[55]" }, - { &gSaveContext.save.weekEventReg[56], "week_event_reg[56]" }, - { &gSaveContext.save.weekEventReg[57], "week_event_reg[57]" }, - { &gSaveContext.save.weekEventReg[58], "week_event_reg[58]" }, - { &gSaveContext.save.weekEventReg[59], "week_event_reg[59]" }, - { &gSaveContext.save.weekEventReg[60], "week_event_reg[60]" }, - { &gSaveContext.save.weekEventReg[61], "week_event_reg[61]" }, - { &gSaveContext.save.weekEventReg[62], "week_event_reg[62]" }, - { &gSaveContext.save.weekEventReg[63], "week_event_reg[63]" }, - { &gSaveContext.save.weekEventReg[64], "week_event_reg[64]" }, - { &gSaveContext.save.weekEventReg[65], "week_event_reg[65]" }, - { &gSaveContext.save.weekEventReg[66], "week_event_reg[66]" }, - { &gSaveContext.save.weekEventReg[67], "week_event_reg[67]" }, - { &gSaveContext.save.weekEventReg[68], "week_event_reg[68]" }, - { &gSaveContext.save.weekEventReg[69], "week_event_reg[69]" }, - { &gSaveContext.save.weekEventReg[70], "week_event_reg[70]" }, - { &gSaveContext.save.weekEventReg[71], "week_event_reg[71]" }, - { &gSaveContext.save.weekEventReg[72], "week_event_reg[72]" }, - { &gSaveContext.save.weekEventReg[73], "week_event_reg[73]" }, - { &gSaveContext.save.weekEventReg[74], "week_event_reg[74]" }, - { &gSaveContext.save.weekEventReg[75], "week_event_reg[75]" }, - { &gSaveContext.save.weekEventReg[76], "week_event_reg[76]" }, - { &gSaveContext.save.weekEventReg[77], "week_event_reg[77]" }, - { &gSaveContext.save.weekEventReg[78], "week_event_reg[78]" }, - { &gSaveContext.save.weekEventReg[79], "week_event_reg[79]" }, - { &gSaveContext.save.weekEventReg[80], "week_event_reg[80]" }, - { &gSaveContext.save.weekEventReg[81], "week_event_reg[81]" }, - { &gSaveContext.save.weekEventReg[82], "week_event_reg[82]" }, - { &gSaveContext.save.weekEventReg[83], "week_event_reg[83]" }, - { &gSaveContext.save.weekEventReg[84], "week_event_reg[84]" }, - { &gSaveContext.save.weekEventReg[85], "week_event_reg[85]" }, - { &gSaveContext.save.weekEventReg[86], "week_event_reg[86]" }, - { &gSaveContext.save.weekEventReg[87], "week_event_reg[87]" }, - { &gSaveContext.save.weekEventReg[88], "week_event_reg[88]" }, - { &gSaveContext.save.weekEventReg[89], "week_event_reg[89]" }, - { &gSaveContext.save.weekEventReg[90], "week_event_reg[90]" }, - { &gSaveContext.save.weekEventReg[91], "week_event_reg[91]" }, - { &gSaveContext.save.weekEventReg[92], "week_event_reg[92]" }, - { &gSaveContext.save.weekEventReg[93], "week_event_reg[93]" }, - { &gSaveContext.save.weekEventReg[94], "week_event_reg[94]" }, - { &gSaveContext.save.weekEventReg[95], "week_event_reg[95]" }, - { &gSaveContext.save.weekEventReg[96], "week_event_reg[96]" }, - { &gSaveContext.save.weekEventReg[97], "week_event_reg[97]" }, - { &gSaveContext.save.weekEventReg[98], "week_event_reg[98]" }, - { &gSaveContext.save.weekEventReg[99], "week_event_reg[99]" }, + { &gSaveContext.save.saveInfo.weekEventReg[0], "week_event_reg[0]" }, + { &gSaveContext.save.saveInfo.weekEventReg[1], "week_event_reg[1]" }, + { &gSaveContext.save.saveInfo.weekEventReg[2], "week_event_reg[2]" }, + { &gSaveContext.save.saveInfo.weekEventReg[3], "week_event_reg[3]" }, + { &gSaveContext.save.saveInfo.weekEventReg[4], "week_event_reg[4]" }, + { &gSaveContext.save.saveInfo.weekEventReg[5], "week_event_reg[5]" }, + { &gSaveContext.save.saveInfo.weekEventReg[6], "week_event_reg[6]" }, + { &gSaveContext.save.saveInfo.weekEventReg[7], "week_event_reg[7]" }, + { &gSaveContext.save.saveInfo.weekEventReg[8], "week_event_reg[8]" }, + { &gSaveContext.save.saveInfo.weekEventReg[9], "week_event_reg[9]" }, + { &gSaveContext.save.saveInfo.weekEventReg[10], "week_event_reg[10]" }, + { &gSaveContext.save.saveInfo.weekEventReg[11], "week_event_reg[11]" }, + { &gSaveContext.save.saveInfo.weekEventReg[12], "week_event_reg[12]" }, + { &gSaveContext.save.saveInfo.weekEventReg[13], "week_event_reg[13]" }, + { &gSaveContext.save.saveInfo.weekEventReg[14], "week_event_reg[14]" }, + { &gSaveContext.save.saveInfo.weekEventReg[15], "week_event_reg[15]" }, + { &gSaveContext.save.saveInfo.weekEventReg[16], "week_event_reg[16]" }, + { &gSaveContext.save.saveInfo.weekEventReg[17], "week_event_reg[17]" }, + { &gSaveContext.save.saveInfo.weekEventReg[18], "week_event_reg[18]" }, + { &gSaveContext.save.saveInfo.weekEventReg[19], "week_event_reg[19]" }, + { &gSaveContext.save.saveInfo.weekEventReg[20], "week_event_reg[20]" }, + { &gSaveContext.save.saveInfo.weekEventReg[21], "week_event_reg[21]" }, + { &gSaveContext.save.saveInfo.weekEventReg[22], "week_event_reg[22]" }, + { &gSaveContext.save.saveInfo.weekEventReg[23], "week_event_reg[23]" }, + { &gSaveContext.save.saveInfo.weekEventReg[24], "week_event_reg[24]" }, + { &gSaveContext.save.saveInfo.weekEventReg[25], "week_event_reg[25]" }, + { &gSaveContext.save.saveInfo.weekEventReg[26], "week_event_reg[26]" }, + { &gSaveContext.save.saveInfo.weekEventReg[27], "week_event_reg[27]" }, + { &gSaveContext.save.saveInfo.weekEventReg[28], "week_event_reg[28]" }, + { &gSaveContext.save.saveInfo.weekEventReg[29], "week_event_reg[29]" }, + { &gSaveContext.save.saveInfo.weekEventReg[30], "week_event_reg[30]" }, + { &gSaveContext.save.saveInfo.weekEventReg[31], "week_event_reg[31]" }, + { &gSaveContext.save.saveInfo.weekEventReg[32], "week_event_reg[32]" }, + { &gSaveContext.save.saveInfo.weekEventReg[33], "week_event_reg[33]" }, + { &gSaveContext.save.saveInfo.weekEventReg[34], "week_event_reg[34]" }, + { &gSaveContext.save.saveInfo.weekEventReg[35], "week_event_reg[35]" }, + { &gSaveContext.save.saveInfo.weekEventReg[36], "week_event_reg[36]" }, + { &gSaveContext.save.saveInfo.weekEventReg[37], "week_event_reg[37]" }, + { &gSaveContext.save.saveInfo.weekEventReg[38], "week_event_reg[38]" }, + { &gSaveContext.save.saveInfo.weekEventReg[39], "week_event_reg[39]" }, + { &gSaveContext.save.saveInfo.weekEventReg[40], "week_event_reg[40]" }, + { &gSaveContext.save.saveInfo.weekEventReg[41], "week_event_reg[41]" }, + { &gSaveContext.save.saveInfo.weekEventReg[42], "week_event_reg[42]" }, + { &gSaveContext.save.saveInfo.weekEventReg[43], "week_event_reg[43]" }, + { &gSaveContext.save.saveInfo.weekEventReg[44], "week_event_reg[44]" }, + { &gSaveContext.save.saveInfo.weekEventReg[45], "week_event_reg[45]" }, + { &gSaveContext.save.saveInfo.weekEventReg[46], "week_event_reg[46]" }, + { &gSaveContext.save.saveInfo.weekEventReg[47], "week_event_reg[47]" }, + { &gSaveContext.save.saveInfo.weekEventReg[48], "week_event_reg[48]" }, + { &gSaveContext.save.saveInfo.weekEventReg[49], "week_event_reg[49]" }, + { &gSaveContext.save.saveInfo.weekEventReg[50], "week_event_reg[50]" }, + { &gSaveContext.save.saveInfo.weekEventReg[51], "week_event_reg[51]" }, + { &gSaveContext.save.saveInfo.weekEventReg[52], "week_event_reg[52]" }, + { &gSaveContext.save.saveInfo.weekEventReg[53], "week_event_reg[53]" }, + { &gSaveContext.save.saveInfo.weekEventReg[54], "week_event_reg[54]" }, + { &gSaveContext.save.saveInfo.weekEventReg[55], "week_event_reg[55]" }, + { &gSaveContext.save.saveInfo.weekEventReg[56], "week_event_reg[56]" }, + { &gSaveContext.save.saveInfo.weekEventReg[57], "week_event_reg[57]" }, + { &gSaveContext.save.saveInfo.weekEventReg[58], "week_event_reg[58]" }, + { &gSaveContext.save.saveInfo.weekEventReg[59], "week_event_reg[59]" }, + { &gSaveContext.save.saveInfo.weekEventReg[60], "week_event_reg[60]" }, + { &gSaveContext.save.saveInfo.weekEventReg[61], "week_event_reg[61]" }, + { &gSaveContext.save.saveInfo.weekEventReg[62], "week_event_reg[62]" }, + { &gSaveContext.save.saveInfo.weekEventReg[63], "week_event_reg[63]" }, + { &gSaveContext.save.saveInfo.weekEventReg[64], "week_event_reg[64]" }, + { &gSaveContext.save.saveInfo.weekEventReg[65], "week_event_reg[65]" }, + { &gSaveContext.save.saveInfo.weekEventReg[66], "week_event_reg[66]" }, + { &gSaveContext.save.saveInfo.weekEventReg[67], "week_event_reg[67]" }, + { &gSaveContext.save.saveInfo.weekEventReg[68], "week_event_reg[68]" }, + { &gSaveContext.save.saveInfo.weekEventReg[69], "week_event_reg[69]" }, + { &gSaveContext.save.saveInfo.weekEventReg[70], "week_event_reg[70]" }, + { &gSaveContext.save.saveInfo.weekEventReg[71], "week_event_reg[71]" }, + { &gSaveContext.save.saveInfo.weekEventReg[72], "week_event_reg[72]" }, + { &gSaveContext.save.saveInfo.weekEventReg[73], "week_event_reg[73]" }, + { &gSaveContext.save.saveInfo.weekEventReg[74], "week_event_reg[74]" }, + { &gSaveContext.save.saveInfo.weekEventReg[75], "week_event_reg[75]" }, + { &gSaveContext.save.saveInfo.weekEventReg[76], "week_event_reg[76]" }, + { &gSaveContext.save.saveInfo.weekEventReg[77], "week_event_reg[77]" }, + { &gSaveContext.save.saveInfo.weekEventReg[78], "week_event_reg[78]" }, + { &gSaveContext.save.saveInfo.weekEventReg[79], "week_event_reg[79]" }, + { &gSaveContext.save.saveInfo.weekEventReg[80], "week_event_reg[80]" }, + { &gSaveContext.save.saveInfo.weekEventReg[81], "week_event_reg[81]" }, + { &gSaveContext.save.saveInfo.weekEventReg[82], "week_event_reg[82]" }, + { &gSaveContext.save.saveInfo.weekEventReg[83], "week_event_reg[83]" }, + { &gSaveContext.save.saveInfo.weekEventReg[84], "week_event_reg[84]" }, + { &gSaveContext.save.saveInfo.weekEventReg[85], "week_event_reg[85]" }, + { &gSaveContext.save.saveInfo.weekEventReg[86], "week_event_reg[86]" }, + { &gSaveContext.save.saveInfo.weekEventReg[87], "week_event_reg[87]" }, + { &gSaveContext.save.saveInfo.weekEventReg[88], "week_event_reg[88]" }, + { &gSaveContext.save.saveInfo.weekEventReg[89], "week_event_reg[89]" }, + { &gSaveContext.save.saveInfo.weekEventReg[90], "week_event_reg[90]" }, + { &gSaveContext.save.saveInfo.weekEventReg[91], "week_event_reg[91]" }, + { &gSaveContext.save.saveInfo.weekEventReg[92], "week_event_reg[92]" }, + { &gSaveContext.save.saveInfo.weekEventReg[93], "week_event_reg[93]" }, + { &gSaveContext.save.saveInfo.weekEventReg[94], "week_event_reg[94]" }, + { &gSaveContext.save.saveInfo.weekEventReg[95], "week_event_reg[95]" }, + { &gSaveContext.save.saveInfo.weekEventReg[96], "week_event_reg[96]" }, + { &gSaveContext.save.saveInfo.weekEventReg[97], "week_event_reg[97]" }, + { &gSaveContext.save.saveInfo.weekEventReg[98], "week_event_reg[98]" }, + { &gSaveContext.save.saveInfo.weekEventReg[99], "week_event_reg[99]" }, { &gSaveContext.eventInf[0], "event_inf[0]" }, { &gSaveContext.eventInf[1], "event_inf[1]" }, @@ -246,8 +246,8 @@ void FlagSet_Update(GameState* gameState) { if (CHECK_BTN_ALL(input->cur.button, BTN_START)) { if (CHECK_BTN_ALL(input->press.button, BTN_B)) { s16 i; - for (i = 0; i < ARRAY_COUNT(gSaveContext.save.weekEventReg); i++) { - gSaveContext.save.weekEventReg[i] = 0; + for (i = 0; i < ARRAY_COUNT(gSaveContext.save.saveInfo.weekEventReg); i++) { + gSaveContext.save.saveInfo.weekEventReg[i] = 0; } for (i = 0; i < ARRAY_COUNT(gSaveContext.eventInf); i++) { gSaveContext.eventInf[i] = 0; diff --git a/src/code/z_demo.c b/src/code/z_demo.c index 08d56de69..dc32223a8 100644 --- a/src/code/z_demo.c +++ b/src/code/z_demo.c @@ -1479,12 +1479,13 @@ void func_800EDBE0(PlayState* play) { if (play->csCtx.sceneCsList[temp_v0_3].unk7 == 0xFE) { ActorCutscene_Start(sp2A, NULL); gSaveContext.showTitleCard = false; - } else if (!(((void)0, - gSaveContext.save.weekEventReg[(play->csCtx.sceneCsList[temp_v0_3].unk7 / 8)]) & + } else if (!(((void)0, gSaveContext.save.saveInfo + .weekEventReg[(play->csCtx.sceneCsList[temp_v0_3].unk7 / 8)]) & (1 << (play->csCtx.sceneCsList[temp_v0_3].unk7 % 8)))) { // TODO: macros for this kind of weekEventReg access - gSaveContext.save.weekEventReg[(play->csCtx.sceneCsList[temp_v0_3].unk7 / 8)] = - ((void)0, gSaveContext.save.weekEventReg[(play->csCtx.sceneCsList[temp_v0_3].unk7 / 8)]) | + gSaveContext.save.saveInfo.weekEventReg[(play->csCtx.sceneCsList[temp_v0_3].unk7 / 8)] = + ((void)0, + gSaveContext.save.saveInfo.weekEventReg[(play->csCtx.sceneCsList[temp_v0_3].unk7 / 8)]) | (1 << (play->csCtx.sceneCsList[temp_v0_3].unk7 % 8)); ActorCutscene_Start(sp2A, NULL); gSaveContext.showTitleCard = false; diff --git a/src/code/z_elf_message.c b/src/code/z_elf_message.c index 830824024..1b005443d 100644 --- a/src/code/z_elf_message.c +++ b/src/code/z_elf_message.c @@ -45,7 +45,7 @@ u16 QuestHint_GetTatlTextId(PlayState* play) { return 0x21D; } - if (gSaveContext.save.playerData.isMagicAcquired != true) { + if (gSaveContext.save.saveInfo.playerData.isMagicAcquired != true) { return 0x21F; } diff --git a/src/code/z_en_item00.c b/src/code/z_en_item00.c index 0c19236dc..44e8703a2 100644 --- a/src/code/z_en_item00.c +++ b/src/code/z_en_item00.c @@ -885,12 +885,13 @@ s16 func_800A7650(s16 dropId) { (dropId == ITEM00_ARROWS_50)) && (INV_CONTENT(ITEM_BOW) == ITEM_NONE)) || (((dropId == ITEM00_MAGIC_LARGE) || (dropId == ITEM00_MAGIC_SMALL)) && - (gSaveContext.save.playerData.magicLevel == 0))) { + (gSaveContext.save.saveInfo.playerData.magicLevel == 0))) { return ITEM00_NO_DROP; } if (dropId == ITEM00_RECOVERY_HEART) { - if (((void)0, gSaveContext.save.playerData.healthCapacity) == ((void)0, gSaveContext.save.playerData.health)) { + if (((void)0, gSaveContext.save.saveInfo.playerData.healthCapacity) == + ((void)0, gSaveContext.save.saveInfo.playerData.health)) { return ITEM00_RUPEE_GREEN; } } @@ -1148,27 +1149,29 @@ void Item_DropCollectibleRandom(PlayState* play, Actor* fromActor, Vec3f* spawnP } if (dropId == ITEM00_FLEXIBLE) { - if (gSaveContext.save.playerData.health <= 0x10) { + if (gSaveContext.save.saveInfo.playerData.health <= 0x10) { Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELF, spawnPos->x, spawnPos->y + 40.0f, spawnPos->z, 0, 0, 0, 2); SoundSource_PlaySfxAtFixedWorldPos(play, spawnPos, 40, NA_SE_EV_BUTTERFRY_TO_FAIRY); return; } - if (gSaveContext.save.playerData.health <= 0x30) { + if (gSaveContext.save.saveInfo.playerData.health <= 0x30) { params = 0x10; dropId = ITEM00_RECOVERY_HEART; dropQuantity = 3; - } else if (gSaveContext.save.playerData.health <= 0x50) { + } else if (gSaveContext.save.saveInfo.playerData.health <= 0x50) { params = 0x10; dropId = ITEM00_RECOVERY_HEART; dropQuantity = 1; - } else if ((gSaveContext.save.playerData.magicLevel != 0) && (gSaveContext.save.playerData.magic == 0)) { + } else if ((gSaveContext.save.saveInfo.playerData.magicLevel != 0) && + (gSaveContext.save.saveInfo.playerData.magic == 0)) { params = 0xD0; dropId = ITEM00_MAGIC_LARGE; dropQuantity = 1; - } else if ((gSaveContext.save.playerData.magicLevel != 0) && - ((gSaveContext.save.playerData.magicLevel >> 1) >= gSaveContext.save.playerData.magic)) { + } else if ((gSaveContext.save.saveInfo.playerData.magicLevel != 0) && + ((gSaveContext.save.saveInfo.playerData.magicLevel >> 1) >= + gSaveContext.save.saveInfo.playerData.magic)) { params = 0xD0; dropId = ITEM00_MAGIC_LARGE; dropQuantity = 1; @@ -1180,7 +1183,7 @@ void Item_DropCollectibleRandom(PlayState* play, Actor* fromActor, Vec3f* spawnP params = 0xB0; dropId = ITEM00_BOMBS_A; dropQuantity = 1; - } else if (gSaveContext.save.playerData.rupees < 11) { + } else if (gSaveContext.save.saveInfo.playerData.rupees < 11) { params = 0xA0; dropId = ITEM00_RUPEE_RED; dropQuantity = 1; diff --git a/src/code/z_game_over.c b/src/code/z_game_over.c index 4e24eb72e..d0e5e45f2 100644 --- a/src/code/z_game_over.c +++ b/src/code/z_game_over.c @@ -50,7 +50,7 @@ void GameOver_Update(PlayState* play) { } gSaveContext.unk_3DC0 = 2000; - gSaveContext.save.playerData.tatlTimer = 0; + gSaveContext.save.saveInfo.playerData.tatlTimer = 0; gSaveContext.seqId = (u8)NA_BGM_DISABLED; gSaveContext.ambienceId = AMBIENCE_ID_DISABLED; gSaveContext.eventInf[0] = 0; @@ -79,7 +79,7 @@ void GameOver_Update(PlayState* play) { gSaveContext.respawnFlag = -6; } gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK; - gSaveContext.save.playerData.health = 0x30; + gSaveContext.save.saveInfo.playerData.health = 0x30; gameOverCtx->state++; if (INV_CONTENT(ITEM_MASK_DEKU) == ITEM_MASK_DEKU) { gSaveContext.save.playerForm = PLAYER_FORM_HUMAN; diff --git a/src/code/z_kaleido_setup.c b/src/code/z_kaleido_setup.c index dac0d8300..f873ea8ff 100644 --- a/src/code/z_kaleido_setup.c +++ b/src/code/z_kaleido_setup.c @@ -44,19 +44,19 @@ void func_800F4A10(PlayState* play) { if (pauseCtx->state == PAUSE_STATE_OPENING_0) { for (i = 0; i < REGION_MAX; i++) { - if ((gSaveContext.save.regionsVisited >> i) & 1) { + if ((gSaveContext.save.saveInfo.regionsVisited >> i) & 1) { pauseCtx->worldMapPoints[i] = true; } } } else { for (i = OWL_WARP_STONE_TOWER; i >= OWL_WARP_GREAT_BAY_COAST; i--) { - if ((gSaveContext.save.playerData.owlActivationFlags >> i) & 1) { + if ((gSaveContext.save.saveInfo.playerData.owlActivationFlags >> i) & 1) { pauseCtx->worldMapPoints[i] = true; pauseCtx->cursorPoint[PAUSE_WORLD_MAP] = i; } } - if ((gSaveContext.save.playerData.owlActivationFlags >> 4) & 1) { + if ((gSaveContext.save.saveInfo.playerData.owlActivationFlags >> 4) & 1) { pauseCtx->cursorPoint[PAUSE_WORLD_MAP] = 4; } } diff --git a/src/code/z_lifemeter.c b/src/code/z_lifemeter.c index 06dd1a0c7..d6f2edf2a 100644 --- a/src/code/z_lifemeter.c +++ b/src/code/z_lifemeter.c @@ -37,7 +37,7 @@ void LifeMeter_Init(PlayState* play) { interfaceCtx->healthTimer = 320; - interfaceCtx->health = gSaveContext.save.playerData.health; + interfaceCtx->health = gSaveContext.save.saveInfo.playerData.health; interfaceCtx->lifeColorChange = 0; interfaceCtx->lifeColorChangeDirection = 0; @@ -170,7 +170,7 @@ void LifeMeter_UpdateColors(PlayState* play) { s32 LifeMeter_SaveInterfaceHealth(PlayState* play) { InterfaceContext* interfaceCtx = &play->interfaceCtx; - gSaveContext.save.playerData.health = interfaceCtx->health; + gSaveContext.save.saveInfo.playerData.health = interfaceCtx->health; return 1; } @@ -181,8 +181,8 @@ s32 LifeMeter_IncreaseInterfaceHealth(PlayState* play) { interfaceCtx->healthTimer = 320; interfaceCtx->health += 0x10; - if (play->interfaceCtx.health >= gSaveContext.save.playerData.health) { - play->interfaceCtx.health = gSaveContext.save.playerData.health; + if (play->interfaceCtx.health >= gSaveContext.save.saveInfo.playerData.health) { + play->interfaceCtx.health = gSaveContext.save.saveInfo.playerData.health; return true; } return false; @@ -199,7 +199,7 @@ s32 LifeMeter_DecreaseInterfaceHealth(PlayState* play) { interfaceCtx->health -= 0x10; if (interfaceCtx->health <= 0) { interfaceCtx->health = 0; - play->damagePlayer(play, -(((void)0, gSaveContext.save.playerData.health) + 1)); + play->damagePlayer(play, -(((void)0, gSaveContext.save.saveInfo.playerData.health) + 1)); return true; } } @@ -220,18 +220,18 @@ void LifeMeter_Draw(PlayState* play) { GraphicsContext* gfxCtx = play->state.gfxCtx; InterfaceContext* interfaceCtx = &play->interfaceCtx; Vtx* beatingHeartVtx = interfaceCtx->beatingHeartVtx; - s32 fractionHeartCount = gSaveContext.save.playerData.health % 0x10; - s16 healthCapacity = gSaveContext.save.playerData.healthCapacity / 0x10; - s16 fullHeartCount = gSaveContext.save.playerData.health / 0x10; + s32 fractionHeartCount = gSaveContext.save.saveInfo.playerData.health % 0x10; + s16 healthCapacity = gSaveContext.save.saveInfo.playerData.healthCapacity / 0x10; + s16 fullHeartCount = gSaveContext.save.saveInfo.playerData.health / 0x10; s32 pad2; f32 lifesize = interfaceCtx->lifeSizeChange * 0.1f; u32 curCombineModeSet = 0; TexturePtr temp = NULL; - s32 ddCount = gSaveContext.save.inventory.defenseHearts - 1; + s32 ddCount = gSaveContext.save.saveInfo.inventory.defenseHearts - 1; OPEN_DISPS(gfxCtx); - if ((gSaveContext.save.playerData.health % 0x10) == 0) { + if ((gSaveContext.save.saveInfo.playerData.health % 0x10) == 0) { fullHeartCount--; } @@ -422,17 +422,18 @@ void LifeMeter_UpdateSizeAndBeep(PlayState* play) { u32 LifeMeter_IsCritical(void) { s16 criticalThreshold; - if (gSaveContext.save.playerData.healthCapacity <= 0x50) { + if (gSaveContext.save.saveInfo.playerData.healthCapacity <= 0x50) { criticalThreshold = 0x10; - } else if (gSaveContext.save.playerData.healthCapacity <= 0xA0) { + } else if (gSaveContext.save.saveInfo.playerData.healthCapacity <= 0xA0) { criticalThreshold = 0x18; - } else if (gSaveContext.save.playerData.healthCapacity <= 0xF0) { + } else if (gSaveContext.save.saveInfo.playerData.healthCapacity <= 0xF0) { criticalThreshold = 0x20; } else { criticalThreshold = 0x2C; } - if ((criticalThreshold >= gSaveContext.save.playerData.health) && (gSaveContext.save.playerData.health > 0)) { + if ((criticalThreshold >= gSaveContext.save.saveInfo.playerData.health) && + (gSaveContext.save.saveInfo.playerData.health > 0)) { return true; } return false; diff --git a/src/code/z_map_exp.c b/src/code/z_map_exp.c index 381387c5e..912926cbb 100644 --- a/src/code/z_map_exp.c +++ b/src/code/z_map_exp.c @@ -156,7 +156,8 @@ void Map_InitRoomData(PlayState* play, s16 room) { if (room >= 0) { if (Map_IsInDungeonOrBossArea(play)) { - gSaveContext.save.permanentSceneFlags[Play_GetOriginalSceneId(play->sceneId)].rooms |= gBitFlags[room]; + gSaveContext.save.saveInfo.permanentSceneFlags[Play_GetOriginalSceneId(play->sceneId)].rooms |= + gBitFlags[room]; interfaceCtx->mapRoomNum = room; interfaceCtx->dungeonOrBossAreaMapIndex = mapIndex; } @@ -243,7 +244,7 @@ void Map_Update(PlayState* play) { if (Map_IsInDungeonArea(play)) { floor = func_80109124(player->actor.world.pos.y); if (floor != -1) { - gSaveContext.save.permanentSceneFlags[Play_GetOriginalSceneId(play->sceneId)].unk_14 |= + gSaveContext.save.saveInfo.permanentSceneFlags[Play_GetOriginalSceneId(play->sceneId)].unk_14 |= gBitFlags[FLOOR_INDEX_MAX - floor]; R_REVERSE_FLOOR_INDEX = FLOOR_INDEX_MAX - floor; if (interfaceCtx->mapRoomNum != sLastRoomNum) { diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c index be5cc01bc..1072587af 100644 --- a/src/code/z_parameter.c +++ b/src/code/z_parameter.c @@ -1006,12 +1006,12 @@ void Interface_NewDay(PlayState* play, s32 day) { (u32)SEGMENT_ROM_START(week_static) + i * 0x510, 0x510); // i is used to store sceneId - for (i = 0; i < ARRAY_COUNT(gSaveContext.save.permanentSceneFlags); i++) { - gSaveContext.save.permanentSceneFlags[i].chest = gSaveContext.cycleSceneFlags[i].chest; - gSaveContext.save.permanentSceneFlags[i].switch0 = gSaveContext.cycleSceneFlags[i].switch0; - gSaveContext.save.permanentSceneFlags[i].switch1 = gSaveContext.cycleSceneFlags[i].switch1; - gSaveContext.save.permanentSceneFlags[i].clearedRoom = gSaveContext.cycleSceneFlags[i].clearedRoom; - gSaveContext.save.permanentSceneFlags[i].collectible = gSaveContext.cycleSceneFlags[i].collectible; + for (i = 0; i < ARRAY_COUNT(gSaveContext.save.saveInfo.permanentSceneFlags); i++) { + gSaveContext.save.saveInfo.permanentSceneFlags[i].chest = gSaveContext.cycleSceneFlags[i].chest; + gSaveContext.save.saveInfo.permanentSceneFlags[i].switch0 = gSaveContext.cycleSceneFlags[i].switch0; + gSaveContext.save.saveInfo.permanentSceneFlags[i].switch1 = gSaveContext.cycleSceneFlags[i].switch1; + gSaveContext.save.saveInfo.permanentSceneFlags[i].clearedRoom = gSaveContext.cycleSceneFlags[i].clearedRoom; + gSaveContext.save.saveInfo.permanentSceneFlags[i].collectible = gSaveContext.cycleSceneFlags[i].collectible; } } @@ -1880,7 +1880,7 @@ void Interface_UpdateButtonsPart2(PlayState* play) { } else if (CHECK_EVENTINF(EVENTINF_34)) { // Deku playground minigame if (player->stateFlags3 & PLAYER_STATE3_1000000) { - if (gSaveContext.save.inventory.items[SLOT_NUT] == ITEM_NUT) { + if (gSaveContext.save.saveInfo.inventory.items[SLOT_NUT] == ITEM_NUT) { BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_NUT; Interface_LoadItemIconImpl(play, EQUIP_SLOT_B); } else { @@ -1908,7 +1908,7 @@ void Interface_UpdateButtonsPart2(PlayState* play) { } } else if (player->stateFlags3 & PLAYER_STATE3_1000000) { // Nuts on B (from flying as Deku Link) - if (gSaveContext.save.inventory.items[SLOT_NUT] == ITEM_NUT) { + if (gSaveContext.save.saveInfo.inventory.items[SLOT_NUT] == ITEM_NUT) { if (BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) != ITEM_NUT) { BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_NUT; Interface_LoadItemIconImpl(play, EQUIP_SLOT_B); @@ -1925,7 +1925,7 @@ void Interface_UpdateButtonsPart2(PlayState* play) { gSaveContext.buttonStatus[EQUIP_SLOT_C_DOWN] = BTN_DISABLED; gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_DISABLED; } - } else if (!gSaveContext.save.playerData.isMagicAcquired && (CUR_FORM == PLAYER_FORM_DEKU) && + } else if (!gSaveContext.save.saveInfo.playerData.isMagicAcquired && (CUR_FORM == PLAYER_FORM_DEKU) && (BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) == ITEM_NUT)) { // Nuts on B (as Deku Link) BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_FD; @@ -2324,7 +2324,7 @@ void Interface_UpdateButtonsPart1(PlayState* play) { if (play->unk_1887C >= 2) { Interface_LoadItemIconImpl(play, EQUIP_SLOT_B); - } else if (gSaveContext.save.inventory.items[SLOT_BOW] == ITEM_NONE) { + } else if (gSaveContext.save.saveInfo.inventory.items[SLOT_BOW] == ITEM_NONE) { BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_NONE; } else { Interface_LoadItemIconImpl(play, EQUIP_SLOT_B); @@ -2382,7 +2382,7 @@ void Interface_UpdateButtonsPart1(PlayState* play) { if (play->unk_1887C >= 2) { Interface_LoadItemIconImpl(play, EQUIP_SLOT_B); - } else if (gSaveContext.save.inventory.items[SLOT_BOW] == ITEM_NONE) { + } else if (gSaveContext.save.saveInfo.inventory.items[SLOT_BOW] == ITEM_NONE) { BUTTON_ITEM_EQUIP(CUR_FORM, EQUIP_SLOT_B) = ITEM_NONE; } else { Interface_LoadItemIconImpl(play, EQUIP_SLOT_B); @@ -2627,14 +2627,14 @@ u8 Item_Give(PlayState* play, u8 item) { INCREMENT_QUEST_HEART_PIECE_COUNT; if (EQ_MAX_QUEST_HEART_PIECE_COUNT) { RESET_HEART_PIECE_COUNT; - gSaveContext.save.playerData.healthCapacity += 0x10; - gSaveContext.save.playerData.health += 0x10; + gSaveContext.save.saveInfo.playerData.healthCapacity += 0x10; + gSaveContext.save.saveInfo.playerData.health += 0x10; } return ITEM_NONE; } else if (item == ITEM_HEART_CONTAINER) { - gSaveContext.save.playerData.healthCapacity += 0x10; - gSaveContext.save.playerData.health += 0x10; + gSaveContext.save.saveInfo.playerData.healthCapacity += 0x10; + gSaveContext.save.saveInfo.playerData.health += 0x10; return ITEM_NONE; } else if ((item >= ITEM_SONG_SONATA) && (item <= ITEM_SONG_LULLABY_INTRO)) { @@ -2646,7 +2646,7 @@ u8 Item_Give(PlayState* play, u8 item) { CUR_FORM_EQUIP(EQUIP_SLOT_B) = item; Interface_LoadItemIconImpl(play, EQUIP_SLOT_B); if (item == ITEM_SWORD_RAZOR) { - gSaveContext.save.playerData.swordHealth = 100; + gSaveContext.save.saveInfo.playerData.swordHealth = 100; } return ITEM_NONE; @@ -2824,7 +2824,7 @@ u8 Item_Give(PlayState* play, u8 item) { return ITEM_NONE; } else if ((item >= ITEM_BOMBS_5) && (item <= ITEM_BOMBS_30)) { - if (gSaveContext.save.inventory.items[SLOT_BOMB] != ITEM_BOMB) { + if (gSaveContext.save.saveInfo.inventory.items[SLOT_BOMB] != ITEM_BOMB) { INV_CONTENT(ITEM_BOMB) = ITEM_BOMB; AMMO(ITEM_BOMB) += sAmmoRefillCounts[item - ITEM_BOMBS_5]; return ITEM_NONE; @@ -2847,7 +2847,7 @@ u8 Item_Give(PlayState* play, u8 item) { return ITEM_NONE; } else if ((item >= ITEM_BOMBCHUS_20) && (item <= ITEM_BOMBCHUS_5)) { - if (gSaveContext.save.inventory.items[SLOT_BOMBCHU] != ITEM_BOMBCHU) { + if (gSaveContext.save.saveInfo.inventory.items[SLOT_BOMBCHU] != ITEM_BOMBCHU) { INV_CONTENT(ITEM_BOMBCHU) = ITEM_BOMBCHU; AMMO(ITEM_BOMBCHU) += sBombchuRefillCounts[item - ITEM_BOMBCHUS_20]; @@ -2917,8 +2917,8 @@ u8 Item_Give(PlayState* play, u8 item) { slot = SLOT(item); for (i = BOTTLE_FIRST; i < BOTTLE_MAX; i++) { - if (gSaveContext.save.inventory.items[slot + i] == ITEM_NONE) { - gSaveContext.save.inventory.items[slot + i] = ITEM_POTION_RED; + if (gSaveContext.save.saveInfo.inventory.items[slot + i] == ITEM_NONE) { + gSaveContext.save.saveInfo.inventory.items[slot + i] = ITEM_POTION_RED; return ITEM_NONE; } } @@ -2929,8 +2929,8 @@ u8 Item_Give(PlayState* play, u8 item) { slot = SLOT(item); for (i = BOTTLE_FIRST; i < BOTTLE_MAX; i++) { - if (gSaveContext.save.inventory.items[slot + i] == ITEM_NONE) { - gSaveContext.save.inventory.items[slot + i] = item; + if (gSaveContext.save.saveInfo.inventory.items[slot + i] == ITEM_NONE) { + gSaveContext.save.saveInfo.inventory.items[slot + i] = item; return ITEM_NONE; } } @@ -2940,8 +2940,8 @@ u8 Item_Give(PlayState* play, u8 item) { slot = SLOT(item); for (i = BOTTLE_FIRST; i < BOTTLE_MAX; i++) { - if (gSaveContext.save.inventory.items[slot + i] == ITEM_NONE) { - gSaveContext.save.inventory.items[slot + i] = item; + if (gSaveContext.save.saveInfo.inventory.items[slot + i] == ITEM_NONE) { + gSaveContext.save.saveInfo.inventory.items[slot + i] = item; return ITEM_NONE; } } @@ -2971,7 +2971,7 @@ u8 Item_Give(PlayState* play, u8 item) { slot = SLOT(item); for (i = BOTTLE_FIRST; i < BOTTLE_MAX; i++) { - if (gSaveContext.save.inventory.items[slot + i] == ITEM_BOTTLE) { + if (gSaveContext.save.saveInfo.inventory.items[slot + i] == ITEM_BOTTLE) { if (item == ITEM_HOT_SPRING_WATER) { Interface_StartBottleTimer(60, i); } @@ -2990,14 +2990,14 @@ u8 Item_Give(PlayState* play, u8 item) { gSaveContext.buttonStatus[EQUIP_SLOT_C_RIGHT] = BTN_ENABLED; } - gSaveContext.save.inventory.items[slot + i] = item; + gSaveContext.save.saveInfo.inventory.items[slot + i] = item; return ITEM_NONE; } } } else { for (i = BOTTLE_FIRST; i < BOTTLE_MAX; i++) { - if (gSaveContext.save.inventory.items[slot + i] == ITEM_NONE) { - gSaveContext.save.inventory.items[slot + i] = item; + if (gSaveContext.save.saveInfo.inventory.items[slot + i] == ITEM_NONE) { + gSaveContext.save.saveInfo.inventory.items[slot + i] = item; return ITEM_NONE; } } @@ -3018,7 +3018,7 @@ u8 Item_Give(PlayState* play, u8 item) { return ITEM_NONE; } - temp = gSaveContext.save.inventory.items[slot]; + temp = gSaveContext.save.saveInfo.inventory.items[slot]; INV_CONTENT(item) = item; return temp; } @@ -3159,13 +3159,13 @@ u8 Item_CheckObtainabilityImpl(u8 item) { bottleSlot = SLOT(item); for (i = BOTTLE_FIRST; i < BOTTLE_MAX; i++) { - if (gSaveContext.save.inventory.items[bottleSlot + i] == ITEM_BOTTLE) { + if (gSaveContext.save.saveInfo.inventory.items[bottleSlot + i] == ITEM_BOTTLE) { return ITEM_NONE; } } } else { for (i = BOTTLE_FIRST; i < BOTTLE_MAX; i++) { - if (gSaveContext.save.inventory.items[bottleSlot + i] == ITEM_NONE) { + if (gSaveContext.save.saveInfo.inventory.items[bottleSlot + i] == ITEM_NONE) { return ITEM_NONE; } } @@ -3174,7 +3174,7 @@ u8 Item_CheckObtainabilityImpl(u8 item) { return ITEM_NONE; } - return gSaveContext.save.inventory.items[slot]; + return gSaveContext.save.saveInfo.inventory.items[slot]; } u8 Item_CheckObtainability(u8 item) { @@ -3184,7 +3184,7 @@ u8 Item_CheckObtainability(u8 item) { void Inventory_DeleteItem(s16 item, s16 slot) { s16 btn; - gSaveContext.save.inventory.items[slot] = ITEM_NONE; + gSaveContext.save.saveInfo.inventory.items[slot] = ITEM_NONE; for (btn = EQUIP_SLOT_C_LEFT; btn <= EQUIP_SLOT_C_RIGHT; btn++) { if (GET_CUR_FORM_BTN_ITEM(btn) == item) { @@ -3209,8 +3209,8 @@ s32 Inventory_ReplaceItem(PlayState* play, u8 oldItem, u8 newItem) { u8 i; for (i = 0; i < 24; i++) { - if (gSaveContext.save.inventory.items[i] == oldItem) { - gSaveContext.save.inventory.items[i] = newItem; + if (gSaveContext.save.saveInfo.inventory.items[i] == oldItem) { + gSaveContext.save.saveInfo.inventory.items[i] = newItem; for (i = EQUIP_SLOT_C_LEFT; i <= EQUIP_SLOT_C_RIGHT; i++) { if (GET_CUR_FORM_BTN_ITEM(i) == oldItem) { @@ -3259,7 +3259,7 @@ s32 Inventory_HasEmptyBottle(void) { s32 slot; for (slot = SLOT_BOTTLE_1; slot <= SLOT_BOTTLE_6; slot++) { - if (gSaveContext.save.inventory.items[slot] == ITEM_BOTTLE) { + if (gSaveContext.save.saveInfo.inventory.items[slot] == ITEM_BOTTLE) { return true; } } @@ -3270,7 +3270,7 @@ s32 Inventory_HasItemInBottle(u8 item) { s32 slot; for (slot = SLOT_BOTTLE_1; slot <= SLOT_BOTTLE_6; slot++) { - if (gSaveContext.save.inventory.items[slot] == item) { + if (gSaveContext.save.saveInfo.inventory.items[slot] == item) { return true; } } @@ -3278,7 +3278,7 @@ s32 Inventory_HasItemInBottle(u8 item) { } void Inventory_UpdateBottleItem(PlayState* play, u8 item, u8 btn) { - gSaveContext.save.inventory.items[GET_CUR_FORM_BTN_SLOT(btn)] = item; + gSaveContext.save.saveInfo.inventory.items[GET_CUR_FORM_BTN_SLOT(btn)] = item; SET_CUR_FORM_BTN_ITEM(btn, item); Interface_LoadItemIconImpl(play, btn); @@ -3297,7 +3297,7 @@ s32 Inventory_ConsumeFairy(PlayState* play) { u8 i; for (i = BOTTLE_FIRST; i < BOTTLE_MAX; i++) { - if (gSaveContext.save.inventory.items[bottleSlot + i] == ITEM_FAIRY) { + if (gSaveContext.save.saveInfo.inventory.items[bottleSlot + i] == ITEM_FAIRY) { for (btn = EQUIP_SLOT_C_LEFT; btn <= EQUIP_SLOT_C_RIGHT; btn++) { if (GET_CUR_FORM_BTN_ITEM(btn) == ITEM_FAIRY) { SET_CUR_FORM_BTN_ITEM(btn, ITEM_BOTTLE); @@ -3307,7 +3307,7 @@ s32 Inventory_ConsumeFairy(PlayState* play) { break; } } - gSaveContext.save.inventory.items[bottleSlot + i] = ITEM_BOTTLE; + gSaveContext.save.saveInfo.inventory.items[bottleSlot + i] = ITEM_BOTTLE; return true; } } @@ -3321,7 +3321,7 @@ s32 Inventory_ConsumeFairy(PlayState* play) { void Inventory_UpdateItem(PlayState* play, s16 slot, s16 item) { s16 btn; - gSaveContext.save.inventory.items[slot] = item; + gSaveContext.save.saveInfo.inventory.items[slot] = item; for (btn = EQUIP_SLOT_C_LEFT; btn <= EQUIP_SLOT_C_RIGHT; btn++) { if (GET_CUR_FORM_BTN_SLOT(btn) == slot) { @@ -3355,18 +3355,19 @@ void func_80115428(InterfaceContext* interfaceCtx, u16 doAction, s16 loadOffset) s32 Health_ChangeBy(PlayState* play, s16 healthChange) { if (healthChange > 0) { play_sound(NA_SE_SY_HP_RECOVER); - } else if (gSaveContext.save.playerData.doubleDefense && (healthChange < 0)) { + } else if (gSaveContext.save.saveInfo.playerData.doubleDefense && (healthChange < 0)) { healthChange >>= 1; } - gSaveContext.save.playerData.health += healthChange; + gSaveContext.save.saveInfo.playerData.health += healthChange; - if (((void)0, gSaveContext.save.playerData.health) > ((void)0, gSaveContext.save.playerData.healthCapacity)) { - gSaveContext.save.playerData.health = gSaveContext.save.playerData.healthCapacity; + if (((void)0, gSaveContext.save.saveInfo.playerData.health) > + ((void)0, gSaveContext.save.saveInfo.playerData.healthCapacity)) { + gSaveContext.save.saveInfo.playerData.health = gSaveContext.save.saveInfo.playerData.healthCapacity; } - if (gSaveContext.save.playerData.health <= 0) { - gSaveContext.save.playerData.health = 0; + if (gSaveContext.save.saveInfo.playerData.health <= 0) { + gSaveContext.save.saveInfo.playerData.health = 0; return false; } else { return true; @@ -3374,7 +3375,7 @@ s32 Health_ChangeBy(PlayState* play, s16 healthChange) { } void Health_GiveHearts(s16 hearts) { - gSaveContext.save.playerData.healthCapacity += hearts * 0x10; + gSaveContext.save.saveInfo.playerData.healthCapacity += hearts * 0x10; } void Rupees_ChangeBy(s16 rupeeChange) { @@ -3441,7 +3442,7 @@ void Inventory_ChangeAmmo(s16 item, s16 ammoChange) { } void Magic_Add(PlayState* play, s16 magicToAdd) { - if (((void)0, gSaveContext.save.playerData.magic) < ((void)0, gSaveContext.magicCapacity)) { + if (((void)0, gSaveContext.save.saveInfo.playerData.magic) < ((void)0, gSaveContext.magicCapacity)) { gSaveContext.magicToAdd += magicToAdd; gSaveContext.isMagicRequested = true; } @@ -3465,12 +3466,12 @@ s32 Magic_Consume(PlayState* play, s16 magicToConsume, s16 type) { InterfaceContext* interfaceCtx = &play->interfaceCtx; // Magic is not acquired yet - if (!gSaveContext.save.playerData.isMagicAcquired) { + if (!gSaveContext.save.saveInfo.playerData.isMagicAcquired) { return false; } // Not enough magic available to consume - if ((gSaveContext.save.playerData.magic - magicToConsume) < 0) { + if ((gSaveContext.save.saveInfo.playerData.magic - magicToConsume) < 0) { if (gSaveContext.magicCapacity != 0) { play_sound(NA_SE_SY_ERROR); } @@ -3518,7 +3519,7 @@ s32 Magic_Consume(PlayState* play, s16 magicToConsume, s16 type) { case MAGIC_CONSUME_LENS: if (gSaveContext.magicState == MAGIC_STATE_IDLE) { - if (gSaveContext.save.playerData.magic != 0) { + if (gSaveContext.save.saveInfo.playerData.magic != 0) { interfaceCtx->magicConsumptionTimer = 80; gSaveContext.magicState = MAGIC_STATE_CONSUME_LENS; return true; @@ -3549,7 +3550,7 @@ s32 Magic_Consume(PlayState* play, s16 magicToConsume, s16 type) { case MAGIC_CONSUME_GORON_ZORA: // Goron spiked rolling or Zora electric barrier - if (gSaveContext.save.playerData.magic != 0) { + if (gSaveContext.save.saveInfo.playerData.magic != 0) { interfaceCtx->magicConsumptionTimer = 10; gSaveContext.magicState = MAGIC_STATE_CONSUME_GORON_ZORA_SETUP; return true; @@ -3560,7 +3561,7 @@ s32 Magic_Consume(PlayState* play, s16 magicToConsume, s16 type) { case MAGIC_CONSUME_GIANTS_MASK: // Wearing Giant's Mask if (gSaveContext.magicState == MAGIC_STATE_IDLE) { - if (gSaveContext.save.playerData.magic != 0) { + if (gSaveContext.save.saveInfo.playerData.magic != 0) { interfaceCtx->magicConsumptionTimer = R_MAGIC_CONSUME_TIMER_GIANTS_MASK; gSaveContext.magicState = MAGIC_STATE_CONSUME_GIANTS_MASK; return true; @@ -3584,7 +3585,7 @@ s32 Magic_Consume(PlayState* play, s16 magicToConsume, s16 type) { if (CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) { magicToConsume = 0; } - gSaveContext.save.playerData.magic -= magicToConsume; + gSaveContext.save.saveInfo.playerData.magic -= magicToConsume; return true; } else { play_sound(NA_SE_SY_ERROR); @@ -3597,11 +3598,11 @@ s32 Magic_Consume(PlayState* play, s16 magicToConsume, s16 type) { void Magic_UpdateAddRequest(void) { if (gSaveContext.isMagicRequested) { - gSaveContext.save.playerData.magic += 4; + gSaveContext.save.saveInfo.playerData.magic += 4; play_sound(NA_SE_SY_GAUGE_UP - SFX_FLAG); - if (((void)0, gSaveContext.save.playerData.magic) >= ((void)0, gSaveContext.magicCapacity)) { - gSaveContext.save.playerData.magic = gSaveContext.magicCapacity; + if (((void)0, gSaveContext.save.saveInfo.playerData.magic) >= ((void)0, gSaveContext.magicCapacity)) { + gSaveContext.save.saveInfo.playerData.magic = gSaveContext.magicCapacity; gSaveContext.magicToAdd = 0; gSaveContext.isMagicRequested = false; } else { @@ -3677,7 +3678,7 @@ void Magic_Update(PlayState* play) { case MAGIC_STATE_STEP_CAPACITY: // Step magicCapacity to the capacity determined by magicLevel // This changes the width of the magic meter drawn - magicCapacityTarget = gSaveContext.save.playerData.magicLevel * MAGIC_NORMAL_METER; + magicCapacityTarget = gSaveContext.save.saveInfo.playerData.magicLevel * MAGIC_NORMAL_METER; if (gSaveContext.magicCapacity != magicCapacityTarget) { if (gSaveContext.magicCapacity < magicCapacityTarget) { gSaveContext.magicCapacity += 0x10; @@ -3699,14 +3700,14 @@ void Magic_Update(PlayState* play) { case MAGIC_STATE_FILL: // Add magic until magicFillTarget is reached - gSaveContext.save.playerData.magic += 0x10; + gSaveContext.save.saveInfo.playerData.magic += 0x10; if ((gSaveContext.gameMode == GAMEMODE_NORMAL) && (gSaveContext.sceneLayer < 4)) { play_sound(NA_SE_SY_GAUGE_UP - SFX_FLAG); } - if (((void)0, gSaveContext.save.playerData.magic) >= ((void)0, gSaveContext.magicFillTarget)) { - gSaveContext.save.playerData.magic = gSaveContext.magicFillTarget; + if (((void)0, gSaveContext.save.saveInfo.playerData.magic) >= ((void)0, gSaveContext.magicFillTarget)) { + gSaveContext.save.saveInfo.playerData.magic = gSaveContext.magicFillTarget; gSaveContext.magicState = MAGIC_STATE_IDLE; } break; @@ -3720,10 +3721,10 @@ void Magic_Update(PlayState* play) { case MAGIC_STATE_CONSUME: // Consume magic until target is reached or no more magic is available if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) { - gSaveContext.save.playerData.magic = - ((void)0, gSaveContext.save.playerData.magic) - ((void)0, gSaveContext.magicToConsume); - if (gSaveContext.save.playerData.magic <= 0) { - gSaveContext.save.playerData.magic = 0; + gSaveContext.save.saveInfo.playerData.magic = + ((void)0, gSaveContext.save.saveInfo.playerData.magic) - ((void)0, gSaveContext.magicToConsume); + if (gSaveContext.save.saveInfo.playerData.magic <= 0) { + gSaveContext.save.saveInfo.playerData.magic = 0; } gSaveContext.magicState = MAGIC_STATE_METER_FLASH_1; sMagicMeterOutlinePrimRed = sMagicMeterOutlinePrimGreen = sMagicMeterOutlinePrimBlue = 255; @@ -3749,7 +3750,7 @@ void Magic_Update(PlayState* play) { (play->transitionTrigger == TRANS_TRIGGER_OFF) && (play->transitionMode == TRANS_MODE_OFF) && !Play_InCsMode(play)) { - if ((gSaveContext.save.playerData.magic == 0) || + if ((gSaveContext.save.saveInfo.playerData.magic == 0) || ((Player_GetEnvironmentalHazard(play) >= PLAYER_ENV_HAZARD_UNDERWATER_FLOOR) && (Player_GetEnvironmentalHazard(play) <= PLAYER_ENV_HAZARD_UNDERWATER_FREE)) || ((BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_LEFT) != ITEM_LENS) && @@ -3767,7 +3768,7 @@ void Magic_Update(PlayState* play) { interfaceCtx->magicConsumptionTimer--; if (interfaceCtx->magicConsumptionTimer == 0) { if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) { - gSaveContext.save.playerData.magic--; + gSaveContext.save.saveInfo.playerData.magic--; } interfaceCtx->magicConsumptionTimer = 80; } @@ -3779,10 +3780,10 @@ void Magic_Update(PlayState* play) { case MAGIC_STATE_CONSUME_GORON_ZORA_SETUP: if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) { - gSaveContext.save.playerData.magic -= 2; + gSaveContext.save.saveInfo.playerData.magic -= 2; } - if (gSaveContext.save.playerData.magic <= 0) { - gSaveContext.save.playerData.magic = 0; + if (gSaveContext.save.saveInfo.playerData.magic <= 0) { + gSaveContext.save.saveInfo.playerData.magic = 0; } gSaveContext.magicState = MAGIC_STATE_CONSUME_GORON_ZORA; // fallthrough @@ -3794,10 +3795,10 @@ void Magic_Update(PlayState* play) { interfaceCtx->magicConsumptionTimer--; if (interfaceCtx->magicConsumptionTimer == 0) { if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) { - gSaveContext.save.playerData.magic--; + gSaveContext.save.saveInfo.playerData.magic--; } - if (gSaveContext.save.playerData.magic <= 0) { - gSaveContext.save.playerData.magic = 0; + if (gSaveContext.save.saveInfo.playerData.magic <= 0) { + gSaveContext.save.saveInfo.playerData.magic = 0; } interfaceCtx->magicConsumptionTimer = 10; } @@ -3816,10 +3817,10 @@ void Magic_Update(PlayState* play) { interfaceCtx->magicConsumptionTimer--; if (interfaceCtx->magicConsumptionTimer == 0) { if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_DRANK_CHATEAU_ROMANI)) { - gSaveContext.save.playerData.magic--; + gSaveContext.save.saveInfo.playerData.magic--; } - if (gSaveContext.save.playerData.magic <= 0) { - gSaveContext.save.playerData.magic = 0; + if (gSaveContext.save.saveInfo.playerData.magic <= 0) { + gSaveContext.save.saveInfo.playerData.magic = 0; } interfaceCtx->magicConsumptionTimer = R_MAGIC_CONSUME_TIMER_GIANTS_MASK; } @@ -3842,8 +3843,8 @@ void Magic_DrawMeter(PlayState* play) { OPEN_DISPS(play->state.gfxCtx); - if (gSaveContext.save.playerData.magicLevel != 0) { - if (gSaveContext.save.playerData.healthCapacity > 0xA0) { + if (gSaveContext.save.saveInfo.playerData.magicLevel != 0) { + if (gSaveContext.save.saveInfo.playerData.healthCapacity > 0xA0) { magicBarY = 42; // two rows of hearts } else { magicBarY = 34; // one row of hearts @@ -3876,8 +3877,8 @@ void Magic_DrawMeter(PlayState* play) { gDPLoadTextureBlock_4b(OVERLAY_DISP++, gMagicMeterFillTex, G_IM_FMT_I, 16, 16, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); gSPTextureRectangle(OVERLAY_DISP++, 104, (magicBarY + 3) << 2, - (((void)0, gSaveContext.save.playerData.magic) + 26) << 2, (magicBarY + 10) << 2, - G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); + (((void)0, gSaveContext.save.saveInfo.playerData.magic) + 26) << 2, + (magicBarY + 10) << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); // Fill the rest of the meter with the normal magic color gDPPipeSync(OVERLAY_DISP++); @@ -3891,7 +3892,8 @@ void Magic_DrawMeter(PlayState* play) { gSPTextureRectangle( OVERLAY_DISP++, 104, (magicBarY + 3) << 2, - ((((void)0, gSaveContext.save.playerData.magic) - ((void)0, gSaveContext.magicToConsume)) + 26) << 2, + ((((void)0, gSaveContext.save.saveInfo.playerData.magic) - ((void)0, gSaveContext.magicToConsume)) + 26) + << 2, (magicBarY + 10) << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); } else { // Fill the whole meter with the normal magic color @@ -3906,8 +3908,8 @@ void Magic_DrawMeter(PlayState* play) { gDPLoadTextureBlock_4b(OVERLAY_DISP++, gMagicMeterFillTex, G_IM_FMT_I, 16, 16, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); gSPTextureRectangle(OVERLAY_DISP++, 104, (magicBarY + 3) << 2, - (((void)0, gSaveContext.save.playerData.magic) + 26) << 2, (magicBarY + 10) << 2, - G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); + (((void)0, gSaveContext.save.saveInfo.playerData.magic) + 26) << 2, + (magicBarY + 10) << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10); } } @@ -5683,7 +5685,7 @@ void Interface_DrawTimers(PlayState* play) { if (interfaceCtx->magicAlpha != 255) { gSaveContext.timerY[sTimerId] = 22; - } else if (gSaveContext.save.playerData.healthCapacity > 0xA0) { + } else if (gSaveContext.save.saveInfo.playerData.healthCapacity > 0xA0) { gSaveContext.timerY[sTimerId] = 54; } else { gSaveContext.timerY[sTimerId] = 46; @@ -5727,7 +5729,7 @@ void Interface_DrawTimers(PlayState* play) { j = ((((void)0, gSaveContext.timerX[sTimerId]) - 26) / sTimerStateTimer); gSaveContext.timerX[sTimerId] = ((void)0, gSaveContext.timerX[sTimerId]) - j; - j = (gSaveContext.save.playerData.healthCapacity > 0xA0) + j = (gSaveContext.save.saveInfo.playerData.healthCapacity > 0xA0) ? ((((void)0, gSaveContext.timerY[sTimerId]) - 54) / sTimerStateTimer) : ((((void)0, gSaveContext.timerY[sTimerId]) - 46) / sTimerStateTimer); gSaveContext.timerY[sTimerId] = ((void)0, gSaveContext.timerY[sTimerId]) - j; @@ -5741,7 +5743,7 @@ void Interface_DrawTimers(PlayState* play) { gSaveContext.timerY[sTimerId] = R_MOON_CRASH_TIMER_Y; } else { gSaveContext.timerX[sTimerId] = 26; - if (gSaveContext.save.playerData.healthCapacity > 0xA0) { + if (gSaveContext.save.saveInfo.playerData.healthCapacity > 0xA0) { gSaveContext.timerY[sTimerId] = 54; } else { gSaveContext.timerY[sTimerId] = 46; @@ -5781,7 +5783,8 @@ void Interface_DrawTimers(PlayState* play) { break; case TIMER_STATE_ENV_HAZARD_START: - gSaveContext.timerCurTimes[sTimerId] = SECONDS_TO_TIMER(gSaveContext.save.playerData.health >> 1); + gSaveContext.timerCurTimes[sTimerId] = + SECONDS_TO_TIMER(gSaveContext.save.saveInfo.playerData.health >> 1); gSaveContext.timerDirections[sTimerId] = TIMER_COUNT_DOWN; gSaveContext.timerTimeLimits[sTimerId] = gSaveContext.timerCurTimes[sTimerId]; sTimerStateTimer = 20; @@ -5889,8 +5892,8 @@ void Interface_DrawTimers(PlayState* play) { gSaveContext.timerCurTimes[sTimerId] = SECONDS_TO_TIMER(0); gSaveContext.timerStates[sTimerId] = TIMER_STATE_STOP; if (sEnvTimerActive) { - gSaveContext.save.playerData.health = 0; - play->damagePlayer(play, -(((void)0, gSaveContext.save.playerData.health) + 2)); + gSaveContext.save.saveInfo.playerData.health = 0; + play->damagePlayer(play, -(((void)0, gSaveContext.save.saveInfo.playerData.health) + 2)); } sEnvTimerActive = false; } @@ -5958,7 +5961,8 @@ void Interface_DrawTimers(PlayState* play) { } } else if (CHECK_EVENTINF(EVENTINF_34) && (play->sceneId == SCENE_DEKUTES)) { if ((((void)0, gSaveContext.timerCurTimes[sTimerId]) > - (gSaveContext.save.dekuPlaygroundHighScores[CURRENT_DAY - 1] - SECONDS_TO_TIMER(9))) && + (gSaveContext.save.saveInfo.dekuPlaygroundHighScores[CURRENT_DAY - 1] - + SECONDS_TO_TIMER(9))) && (sTimerBeepSfxSeconds != sTimerDigits[4])) { play_sound(NA_SE_SY_WARNING_COUNT_E); sTimerBeepSfxSeconds = sTimerDigits[4]; @@ -5996,10 +6000,10 @@ void Interface_DrawTimers(PlayState* play) { } } else if (CHECK_EVENTINF(EVENTINF_34) && (play->sceneId == SCENE_DEKUTES)) { if (((void)0, gSaveContext.timerCurTimes[sTimerId]) >= - gSaveContext.save.dekuPlaygroundHighScores[CURRENT_DAY - 1]) { + gSaveContext.save.saveInfo.dekuPlaygroundHighScores[CURRENT_DAY - 1]) { gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 50, 0, 255); } else if (((void)0, gSaveContext.timerCurTimes[sTimerId]) >= - (gSaveContext.save.dekuPlaygroundHighScores[CURRENT_DAY - 1] - + (gSaveContext.save.saveInfo.dekuPlaygroundHighScores[CURRENT_DAY - 1] - SECONDS_TO_TIMER(9))) { gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 0, 255); } else { @@ -6107,7 +6111,7 @@ void Interface_UpdateBottleTimers(PlayState* play) { // Time has passed, and the time limit has been exceeded. gSaveContext.bottleTimerCurTimes[i] = SECONDS_TO_TIMER(0); - if (gSaveContext.save.inventory.items[i + SLOT_BOTTLE_1] == ITEM_HOT_SPRING_WATER) { + if (gSaveContext.save.saveInfo.inventory.items[i + SLOT_BOTTLE_1] == ITEM_HOT_SPRING_WATER) { Inventory_UpdateItem(play, i + SLOT_BOTTLE_1, ITEM_SPRING_WATER); Message_StartTextbox(play, 0xFA, NULL); } @@ -6166,7 +6170,7 @@ void Interface_DrawMinigameIcons(PlayState* play) { width = 24; height = 16; rectX = 20; - if (gSaveContext.save.playerData.healthCapacity > 0xA0) { + if (gSaveContext.save.saveInfo.playerData.healthCapacity > 0xA0) { rectY = 75; // two rows of hearts } else { rectY = 67; // one row of hearts @@ -6210,7 +6214,7 @@ void Interface_DrawMinigameIcons(PlayState* play) { if (play->sceneId == SCENE_30GYOSON) { rectX += 20; - if (gSaveContext.save.playerData.healthCapacity > 0xA0) { + if (gSaveContext.save.saveInfo.playerData.healthCapacity > 0xA0) { rectY = 87; // two rows of hearts } else { rectY = 79; // one row of hearts @@ -6465,7 +6469,7 @@ void Interface_Draw(PlayState* play) { PRIMITIVE, 0); counterDigits[0] = counterDigits[1] = 0; - counterDigits[2] = gSaveContext.save.playerData.rupees; + counterDigits[2] = gSaveContext.save.saveInfo.playerData.rupees; if ((counterDigits[2] > 9999) || (counterDigits[2] < 0)) { counterDigits[2] &= 0xDDD; @@ -6498,9 +6502,9 @@ void Interface_Draw(PlayState* play) { gDPPipeSync(OVERLAY_DISP++); - if (gSaveContext.save.playerData.rupees == CUR_CAPACITY(UPG_WALLET)) { + if (gSaveContext.save.saveInfo.playerData.rupees == CUR_CAPACITY(UPG_WALLET)) { gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 120, 255, 0, interfaceCtx->magicAlpha); - } else if (gSaveContext.save.playerData.rupees != 0) { + } else if (gSaveContext.save.saveInfo.playerData.rupees != 0) { gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->magicAlpha); } else { gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 100, 100, 100, interfaceCtx->magicAlpha); @@ -6851,14 +6855,15 @@ void Interface_Update(PlayState* play) { // Update health if (gSaveContext.healthAccumulator != 0) { gSaveContext.healthAccumulator -= 4; - gSaveContext.save.playerData.health += 4; + gSaveContext.save.saveInfo.playerData.health += 4; - if ((gSaveContext.save.playerData.health & 0xF) < 4) { + if ((gSaveContext.save.saveInfo.playerData.health & 0xF) < 4) { play_sound(NA_SE_SY_HP_RECOVER); } - if (((void)0, gSaveContext.save.playerData.health) >= ((void)0, gSaveContext.save.playerData.healthCapacity)) { - gSaveContext.save.playerData.health = gSaveContext.save.playerData.healthCapacity; + if (((void)0, gSaveContext.save.saveInfo.playerData.health) >= + ((void)0, gSaveContext.save.saveInfo.playerData.healthCapacity)) { + gSaveContext.save.saveInfo.playerData.health = gSaveContext.save.saveInfo.playerData.healthCapacity; gSaveContext.healthAccumulator = 0; } } @@ -6883,26 +6888,26 @@ void Interface_Update(PlayState* play) { // Update rupees if (gSaveContext.rupeeAccumulator != 0) { if (gSaveContext.rupeeAccumulator > 0) { - if (gSaveContext.save.playerData.rupees < CUR_CAPACITY(UPG_WALLET)) { + if (gSaveContext.save.saveInfo.playerData.rupees < CUR_CAPACITY(UPG_WALLET)) { gSaveContext.rupeeAccumulator--; - gSaveContext.save.playerData.rupees++; + gSaveContext.save.saveInfo.playerData.rupees++; play_sound(NA_SE_SY_RUPY_COUNT); } else { // Max rupees - gSaveContext.save.playerData.rupees = CUR_CAPACITY(UPG_WALLET); + gSaveContext.save.saveInfo.playerData.rupees = CUR_CAPACITY(UPG_WALLET); gSaveContext.rupeeAccumulator = 0; } - } else if (gSaveContext.save.playerData.rupees != 0) { + } else if (gSaveContext.save.saveInfo.playerData.rupees != 0) { if (gSaveContext.rupeeAccumulator <= -50) { gSaveContext.rupeeAccumulator += 10; - gSaveContext.save.playerData.rupees -= 10; - if (gSaveContext.save.playerData.rupees < 0) { - gSaveContext.save.playerData.rupees = 0; + gSaveContext.save.saveInfo.playerData.rupees -= 10; + if (gSaveContext.save.saveInfo.playerData.rupees < 0) { + gSaveContext.save.saveInfo.playerData.rupees = 0; } play_sound(NA_SE_SY_RUPY_COUNT); } else { gSaveContext.rupeeAccumulator++; - gSaveContext.save.playerData.rupees--; + gSaveContext.save.saveInfo.playerData.rupees--; play_sound(NA_SE_SY_RUPY_COUNT); } } else { @@ -7035,29 +7040,31 @@ void Interface_Update(PlayState* play) { if (!(player->stateFlags1 & PLAYER_STATE1_200)) { if (R_MAGIC_DBG_SET_UPGRADE == MAGIC_DBG_SET_UPGRADE_DOUBLE_METER) { // Upgrade to double magic - if (!gSaveContext.save.playerData.isMagicAcquired) { - gSaveContext.save.playerData.isMagicAcquired = true; + if (!gSaveContext.save.saveInfo.playerData.isMagicAcquired) { + gSaveContext.save.saveInfo.playerData.isMagicAcquired = true; } - gSaveContext.save.playerData.isDoubleMagicAcquired = true; - gSaveContext.save.playerData.magic = MAGIC_DOUBLE_METER; - gSaveContext.save.playerData.magicLevel = 0; + gSaveContext.save.saveInfo.playerData.isDoubleMagicAcquired = true; + gSaveContext.save.saveInfo.playerData.magic = MAGIC_DOUBLE_METER; + gSaveContext.save.saveInfo.playerData.magicLevel = 0; R_MAGIC_DBG_SET_UPGRADE = MAGIC_DBG_SET_UPGRADE_NO_ACTION; } else if (R_MAGIC_DBG_SET_UPGRADE == MAGIC_DBG_SET_UPGRADE_NORMAL_METER) { // Upgrade to normal magic - if (!gSaveContext.save.playerData.isMagicAcquired) { - gSaveContext.save.playerData.isMagicAcquired = true; + if (!gSaveContext.save.saveInfo.playerData.isMagicAcquired) { + gSaveContext.save.saveInfo.playerData.isMagicAcquired = true; } - gSaveContext.save.playerData.isDoubleMagicAcquired = false; - gSaveContext.save.playerData.magic = MAGIC_NORMAL_METER; - gSaveContext.save.playerData.magicLevel = 0; + gSaveContext.save.saveInfo.playerData.isDoubleMagicAcquired = false; + gSaveContext.save.saveInfo.playerData.magic = MAGIC_NORMAL_METER; + gSaveContext.save.saveInfo.playerData.magicLevel = 0; R_MAGIC_DBG_SET_UPGRADE = MAGIC_DBG_SET_UPGRADE_NO_ACTION; } - if ((gSaveContext.save.playerData.isMagicAcquired) && (gSaveContext.save.playerData.magicLevel == 0)) { + if ((gSaveContext.save.saveInfo.playerData.isMagicAcquired) && + (gSaveContext.save.saveInfo.playerData.magicLevel == 0)) { // Prepare to step `magicCapacity` to full capacity - gSaveContext.save.playerData.magicLevel = gSaveContext.save.playerData.isDoubleMagicAcquired + 1; - gSaveContext.magicFillTarget = gSaveContext.save.playerData.magic; - gSaveContext.save.playerData.magic = 0; + gSaveContext.save.saveInfo.playerData.magicLevel = + gSaveContext.save.saveInfo.playerData.isDoubleMagicAcquired + 1; + gSaveContext.magicFillTarget = gSaveContext.save.saveInfo.playerData.magic; + gSaveContext.save.saveInfo.playerData.magic = 0; gSaveContext.magicState = MAGIC_STATE_STEP_CAPACITY; BUTTON_ITEM_EQUIP(PLAYER_FORM_DEKU, EQUIP_SLOT_B) = ITEM_NUT; } @@ -7071,7 +7078,7 @@ void Interface_Update(PlayState* play) { if ((sEnvHazard == PLAYER_ENV_HAZARD_HOTROOM) || (sEnvHazard == PLAYER_ENV_HAZARD_UNDERWATER_FREE)) { if (CUR_FORM != PLAYER_FORM_ZORA) { if (play->gameOverCtx.state == GAMEOVER_INACTIVE) { - if ((gSaveContext.save.playerData.health >> 1) != 0) { + if ((gSaveContext.save.saveInfo.playerData.health >> 1) != 0) { gSaveContext.timerStates[TIMER_ID_ENV_HAZARD] = TIMER_STATE_ENV_HAZARD_START; gSaveContext.timerX[TIMER_ID_ENV_HAZARD] = 115; gSaveContext.timerY[TIMER_ID_ENV_HAZARD] = 80; diff --git a/src/code/z_scene.c b/src/code/z_scene.c index 1fa3ed54a..fc47c9bf7 100644 --- a/src/code/z_scene.c +++ b/src/code/z_scene.c @@ -390,7 +390,7 @@ void Scene_CommandTimeSettings(PlayState* play, SceneCmd* cmd) { } // Increase time speed during first cycle - if ((gSaveContext.save.inventory.items[SLOT_OCARINA] == ITEM_NONE) && (play->envCtx.sceneTimeSpeed != 0)) { + if ((gSaveContext.save.saveInfo.inventory.items[SLOT_OCARINA] == ITEM_NONE) && (play->envCtx.sceneTimeSpeed != 0)) { play->envCtx.sceneTimeSpeed = 5; } @@ -519,8 +519,8 @@ void Scene_CommandSetRegionVisitedFlag(PlayState* play, SceneCmd* cmd) { } if (i < REGION_MAX) { - gSaveContext.save.regionsVisited = - (gBitFlags[i] | gSaveContext.save.regionsVisited) | gSaveContext.save.regionsVisited; + gSaveContext.save.saveInfo.regionsVisited = + (gBitFlags[i] | gSaveContext.save.saveInfo.regionsVisited) | gSaveContext.save.saveInfo.regionsVisited; } } diff --git a/src/code/z_shrink_window.c b/src/code/z_shrink_window.c index 21d8bde40..c4084a18c 100644 --- a/src/code/z_shrink_window.c +++ b/src/code/z_shrink_window.c @@ -3,6 +3,7 @@ * Description: Draws black top/bottom/side borders on the viewing window (e.g. Z-targeting, talking to NPC) */ +#include "prevent_bss_reordering.h" #include "global.h" #include "z64shrink_window.h" diff --git a/src/code/z_snap.c b/src/code/z_snap.c index e9663b02f..9361cc1e0 100644 --- a/src/code/z_snap.c +++ b/src/code/z_snap.c @@ -18,8 +18,8 @@ s32 Snap_RecordPictographedActors(PlayState* play) { s32 seen; s32 validCount = 0; - gSaveContext.save.pictoFlags0 = 0; - gSaveContext.save.pictoFlags1 = 0; + gSaveContext.save.saveInfo.pictoFlags0 = 0; + gSaveContext.save.saveInfo.pictoFlags1 = 0; if (play->sceneId == SCENE_20SICHITAI) { Snap_SetFlag(PICTO_VALID_IN_SWAMP); @@ -91,20 +91,20 @@ s32 Snap_RecordPictographedActors(PlayState* play) { // Only used in this file void Snap_SetFlag(s32 flag) { if (flag < 0x20) { - gSaveContext.save.pictoFlags0 |= (1 << flag); + gSaveContext.save.saveInfo.pictoFlags0 |= (1 << flag); } else { flag &= 0x1F; - gSaveContext.save.pictoFlags1 |= (1 << flag); + gSaveContext.save.saveInfo.pictoFlags1 |= (1 << flag); } } // Unused void Snap_UnsetFlag(s32 flag) { if (flag < 0x20) { - gSaveContext.save.pictoFlags0 &= ~(1 << flag); + gSaveContext.save.saveInfo.pictoFlags0 &= ~(1 << flag); } else { flag &= 0x1F; - gSaveContext.save.pictoFlags1 &= ~(1 << flag); + gSaveContext.save.saveInfo.pictoFlags1 &= ~(1 << flag); } } @@ -112,10 +112,10 @@ u32 Snap_CheckFlag(s32 flag) { SaveContext* saveCtx = &gSaveContext; if (flag < 0x20) { - return saveCtx->save.pictoFlags0 & (1 << flag); + return saveCtx->save.saveInfo.pictoFlags0 & (1 << flag); } else { flag &= 0x1F; - return saveCtx->save.pictoFlags1 & (1 << flag); + return saveCtx->save.saveInfo.pictoFlags1 & (1 << flag); } } diff --git a/src/code/z_sram_NES.c b/src/code/z_sram_NES.c index c32a76d76..c269e30f4 100644 --- a/src/code/z_sram_NES.c +++ b/src/code/z_sram_NES.c @@ -134,7 +134,7 @@ u32 D_801C5FC0[SCENE_MAX][4] = { // TODO: figure out a way to use the WEEKEVENTREG defines here // weekEventReg flags which will be not be cleared on a cycle reset -u16 D_801C66D0[ARRAY_COUNT(gSaveContext.save.weekEventReg)] = { +u16 D_801C66D0[ARRAY_COUNT(gSaveContext.save.saveInfo.weekEventReg)] = { /* 0 */ 0xFFFC, /* 1 */ 0xFFFF, /* 2 */ 0xFFFF, @@ -296,24 +296,24 @@ u16 D_801F6AF0; u8 D_801F6AF2; void Sram_ActivateOwl(u8 owlId) { - gSaveContext.save.playerData.owlActivationFlags = - ((void)0, gSaveContext.save.playerData.owlActivationFlags) | (u16)gBitFlags[owlId]; + gSaveContext.save.saveInfo.playerData.owlActivationFlags = + ((void)0, gSaveContext.save.saveInfo.playerData.owlActivationFlags) | (u16)gBitFlags[owlId]; - if (gSaveContext.save.playerData.unk_20 == 0xFF) { - gSaveContext.save.playerData.unk_20 = owlId; + if (gSaveContext.save.saveInfo.playerData.unk_20 == 0xFF) { + gSaveContext.save.saveInfo.playerData.unk_20 = owlId; } } void Sram_ClearHighscores(void) { - gSaveContext.save.unk_EE8 = (gSaveContext.save.unk_EE8 & 0xFFFF) | 0x130000; - gSaveContext.save.unk_EE8 = (gSaveContext.save.unk_EE8 & 0xFFFF0000) | 0xA; - gSaveContext.save.horseBackBalloonHighScore = SECONDS_TO_TIMER(60); + gSaveContext.save.saveInfo.unk_EC4 = (gSaveContext.save.saveInfo.unk_EC4 & 0xFFFF) | 0x130000; + gSaveContext.save.saveInfo.unk_EC4 = (gSaveContext.save.saveInfo.unk_EC4 & 0xFFFF0000) | 0xA; + gSaveContext.save.saveInfo.horseBackBalloonHighScore = SECONDS_TO_TIMER(60); SET_TOWN_SHOOTING_GALLERY_HIGH_SCORE(39); SET_SWAMP_SHOOTING_GALLERY_HIGH_SCORE(10); - gSaveContext.save.dekuPlaygroundHighScores[0] = SECONDS_TO_TIMER(75); - gSaveContext.save.dekuPlaygroundHighScores[1] = SECONDS_TO_TIMER(75); - gSaveContext.save.dekuPlaygroundHighScores[2] = SECONDS_TO_TIMER(76); + gSaveContext.save.saveInfo.dekuPlaygroundHighScores[0] = SECONDS_TO_TIMER(75); + gSaveContext.save.saveInfo.dekuPlaygroundHighScores[1] = SECONDS_TO_TIMER(75); + gSaveContext.save.saveInfo.dekuPlaygroundHighScores[2] = SECONDS_TO_TIMER(76); } /** @@ -342,9 +342,9 @@ void Sram_SaveEndOfCycle(PlayState* play) { gSaveContext.save.day = 0; gSaveContext.save.time = CLOCK_TIME(6, 0) - 1; - gSaveContext.save.playerData.deaths++; - if (gSaveContext.save.playerData.deaths > 999) { - gSaveContext.save.playerData.deaths = 999; + gSaveContext.save.saveInfo.playerData.deaths++; + if (gSaveContext.save.saveInfo.playerData.deaths > 999) { + gSaveContext.save.saveInfo.playerData.deaths = 999; } sceneId = Play_GetOriginalSceneId(play->sceneId); @@ -363,8 +363,8 @@ void Sram_SaveEndOfCycle(PlayState* play) { gSaveContext.cycleSceneFlags[i].collectible = ((void)0, gSaveContext.cycleSceneFlags[i].collectible) & D_801C5FC0[i][3]; gSaveContext.cycleSceneFlags[i].clearedRoom = 0; - gSaveContext.save.permanentSceneFlags[i].unk_14 = 0; - gSaveContext.save.permanentSceneFlags[i].rooms = 0; + gSaveContext.save.saveInfo.permanentSceneFlags[i].unk_14 = 0; + gSaveContext.save.saveInfo.permanentSceneFlags[i].rooms = 0; } for (; i < ARRAY_COUNT(gSaveContext.cycleSceneFlags); i++) { @@ -388,8 +388,8 @@ void Sram_SaveEndOfCycle(PlayState* play) { for (j = 0; j < ARRAY_COUNT(D_801C6890); j++) { if ((phi_v1_3 & 3) == 0) { - gSaveContext.save.weekEventReg[i] = - ((void)0, gSaveContext.save.weekEventReg[i]) & (0xFF ^ D_801C6890[j]); + gSaveContext.save.saveInfo.weekEventReg[i] = + ((void)0, gSaveContext.save.saveInfo.weekEventReg[i]) & (0xFF ^ D_801C6890[j]); } phi_v1_3 >>= 2; } @@ -405,7 +405,7 @@ void Sram_SaveEndOfCycle(PlayState* play) { CLEAR_EVENTINF(EVENTINF_73); CLEAR_EVENTINF(EVENTINF_74); - if (gSaveContext.save.playerData.rupees != 0) { + if (gSaveContext.save.saveInfo.playerData.rupees != 0) { SET_EVENTINF(EVENTINF_70); } @@ -436,8 +436,8 @@ void Sram_SaveEndOfCycle(PlayState* play) { for (i = 0; i < ARRAY_COUNT(gAmmoItems); i++) { if (gAmmoItems[i] != ITEM_NONE) { - if ((gSaveContext.save.inventory.items[i] != ITEM_NONE) && (i != SLOT_PICTO_BOX)) { - item = gSaveContext.save.inventory.items[i]; + if ((gSaveContext.save.saveInfo.inventory.items[i] != ITEM_NONE) && (i != SLOT_PICTO_BOX)) { + item = gSaveContext.save.saveInfo.inventory.items[i]; AMMO(item) = 0; } } @@ -445,23 +445,23 @@ void Sram_SaveEndOfCycle(PlayState* play) { for (i = SLOT_BOTTLE_1; i <= SLOT_BOTTLE_6; i++) { // Check for all bottled items - if (gSaveContext.save.inventory.items[i] >= ITEM_POTION_RED) { - if (gSaveContext.save.inventory.items[i] <= ITEM_OBABA_DRINK) { + if (gSaveContext.save.saveInfo.inventory.items[i] >= ITEM_POTION_RED) { + if (gSaveContext.save.saveInfo.inventory.items[i] <= ITEM_OBABA_DRINK) { for (j = EQUIP_SLOT_C_LEFT; j <= EQUIP_SLOT_C_RIGHT; j++) { - if (GET_CUR_FORM_BTN_ITEM(j) == gSaveContext.save.inventory.items[i]) { + if (GET_CUR_FORM_BTN_ITEM(j) == gSaveContext.save.saveInfo.inventory.items[i]) { SET_CUR_FORM_BTN_ITEM(j, ITEM_BOTTLE); Interface_LoadItemIconImpl(play, j); } } - gSaveContext.save.inventory.items[i] = ITEM_BOTTLE; + gSaveContext.save.saveInfo.inventory.items[i] = ITEM_BOTTLE; } } } REMOVE_QUEST_ITEM(QUEST_PICTOGRAPH); - if (gSaveContext.save.playerData.health < 0x30) { - gSaveContext.save.playerData.health = 0x30; + if (gSaveContext.save.saveInfo.playerData.health < 0x30) { + gSaveContext.save.saveInfo.playerData.health = 0x30; } if (GET_CUR_EQUIP_VALUE(EQUIP_TYPE_SWORD) <= EQUIP_VALUE_SWORD_RAZOR) { @@ -491,8 +491,8 @@ void Sram_SaveEndOfCycle(PlayState* play) { if (STOLEN_ITEM_1 == ITEM_BOTTLE) { slot = SLOT(ITEM_BOTTLE); for (i = BOTTLE_FIRST; i < BOTTLE_MAX; i++) { - if (gSaveContext.save.inventory.items[slot + i] == ITEM_NONE) { - gSaveContext.save.inventory.items[slot + i] = ITEM_BOTTLE; + if (gSaveContext.save.saveInfo.inventory.items[slot + i] == ITEM_NONE) { + gSaveContext.save.saveInfo.inventory.items[slot + i] = ITEM_BOTTLE; break; } } @@ -501,8 +501,8 @@ void Sram_SaveEndOfCycle(PlayState* play) { if (STOLEN_ITEM_2 == ITEM_BOTTLE) { slot = SLOT(ITEM_BOTTLE); for (i = BOTTLE_FIRST; i < BOTTLE_MAX; i++) { - if (gSaveContext.save.inventory.items[slot + i] == ITEM_NONE) { - gSaveContext.save.inventory.items[slot + i] = ITEM_BOTTLE; + if (gSaveContext.save.saveInfo.inventory.items[slot + i] == ITEM_NONE) { + gSaveContext.save.saveInfo.inventory.items[slot + i] = ITEM_BOTTLE; break; } } @@ -522,28 +522,28 @@ void Sram_SaveEndOfCycle(PlayState* play) { } } - gSaveContext.save.skullTokenCount &= ~0xFFFF0000; - gSaveContext.save.skullTokenCount &= ~0x0000FFFF; - gSaveContext.save.unk_EC4 = 0; + gSaveContext.save.saveInfo.skullTokenCount &= ~0xFFFF0000; + gSaveContext.save.saveInfo.skullTokenCount &= ~0x0000FFFF; + gSaveContext.save.saveInfo.unk_EA0 = 0; - gSaveContext.save.unk_E88[0] = 0; - gSaveContext.save.unk_E88[1] = 0; - gSaveContext.save.unk_E88[2] = 0; - gSaveContext.save.unk_E88[3] = 0; - gSaveContext.save.unk_E88[4] = 0; - gSaveContext.save.unk_E88[5] = 0; - gSaveContext.save.unk_E88[6] = 0; + gSaveContext.save.saveInfo.unk_E64[0] = 0; + gSaveContext.save.saveInfo.unk_E64[1] = 0; + gSaveContext.save.saveInfo.unk_E64[2] = 0; + gSaveContext.save.saveInfo.unk_E64[3] = 0; + gSaveContext.save.saveInfo.unk_E64[4] = 0; + gSaveContext.save.saveInfo.unk_E64[5] = 0; + gSaveContext.save.saveInfo.unk_E64[6] = 0; Sram_ClearHighscores(); for (i = 0; i < 8; i++) { - gSaveContext.save.inventory.dungeonItems[i] &= (u8)~1; // remove boss key + gSaveContext.save.saveInfo.inventory.dungeonItems[i] &= (u8)~1; // remove boss key DUNGEON_KEY_COUNT(i) = 0; - gSaveContext.save.inventory.strayFairies[i] = 0; + gSaveContext.save.saveInfo.inventory.strayFairies[i] = 0; } - gSaveContext.save.playerData.rupees = 0; - gSaveContext.save.unk_F65 = 0; + gSaveContext.save.saveInfo.playerData.rupees = 0; + gSaveContext.save.saveInfo.unk_F41 = 0; gSaveContext.powderKegTimer = 0; gSaveContext.unk_1014 = 0; gSaveContext.jinxTimer = 0; @@ -558,12 +558,12 @@ void Sram_IncrementDay(void) { gSaveContext.save.daysElapsed++; } - gSaveContext.save.bombersCaughtNum = 0; - gSaveContext.save.bombersCaughtOrder[0] = 0; - gSaveContext.save.bombersCaughtOrder[1] = 0; - gSaveContext.save.bombersCaughtOrder[2] = 0; - gSaveContext.save.bombersCaughtOrder[3] = 0; - gSaveContext.save.bombersCaughtOrder[4] = 0; + gSaveContext.save.saveInfo.bombersCaughtNum = 0; + gSaveContext.save.saveInfo.bombersCaughtOrder[0] = 0; + gSaveContext.save.saveInfo.bombersCaughtOrder[1] = 0; + gSaveContext.save.saveInfo.bombersCaughtOrder[2] = 0; + gSaveContext.save.saveInfo.bombersCaughtOrder[3] = 0; + gSaveContext.save.saveInfo.bombersCaughtOrder[4] = 0; CLEAR_WEEKEVENTREG(WEEKEVENTREG_73_10); CLEAR_WEEKEVENTREG(WEEKEVENTREG_85_02); @@ -593,9 +593,7 @@ void Sram_ResetSave(void) { gSaveContext.save.hasTatl = false; gSaveContext.save.isOwlSave = false; - // Instead of bloating all save context accesses with an extra sub-struct, the size of the would-be sub-struct - // is calculated manually - bzero(&gSaveContext.save.playerData, sizeof(Save) - offsetof(Save, playerData)); + bzero(&gSaveContext.save.saveInfo, sizeof(SaveInfo)); } /** @@ -615,15 +613,15 @@ void Sram_GenerateRandomSaveFields(void) { Sram_ClearHighscores(); - gSaveContext.save.lotteryCodes[0][0] = Rand_S16Offset(0, 10); - gSaveContext.save.lotteryCodes[0][1] = Rand_S16Offset(0, 10); - gSaveContext.save.lotteryCodes[0][2] = Rand_S16Offset(0, 10); - gSaveContext.save.lotteryCodes[1][0] = Rand_S16Offset(0, 10); - gSaveContext.save.lotteryCodes[1][1] = Rand_S16Offset(0, 10); - gSaveContext.save.lotteryCodes[1][2] = Rand_S16Offset(0, 10); - gSaveContext.save.lotteryCodes[2][0] = Rand_S16Offset(0, 10); - gSaveContext.save.lotteryCodes[2][1] = Rand_S16Offset(0, 10); - gSaveContext.save.lotteryCodes[2][2] = Rand_S16Offset(0, 10); + gSaveContext.save.saveInfo.lotteryCodes[0][0] = Rand_S16Offset(0, 10); + gSaveContext.save.saveInfo.lotteryCodes[0][1] = Rand_S16Offset(0, 10); + gSaveContext.save.saveInfo.lotteryCodes[0][2] = Rand_S16Offset(0, 10); + gSaveContext.save.saveInfo.lotteryCodes[1][0] = Rand_S16Offset(0, 10); + gSaveContext.save.saveInfo.lotteryCodes[1][1] = Rand_S16Offset(0, 10); + gSaveContext.save.saveInfo.lotteryCodes[1][2] = Rand_S16Offset(0, 10); + gSaveContext.save.saveInfo.lotteryCodes[2][0] = Rand_S16Offset(0, 10); + gSaveContext.save.saveInfo.lotteryCodes[2][1] = Rand_S16Offset(0, 10); + gSaveContext.save.saveInfo.lotteryCodes[2][2] = Rand_S16Offset(0, 10); // Needed to match... for (i = 0; i < 3; i++) { @@ -636,7 +634,7 @@ void Sram_GenerateRandomSaveFields(void) { while (i != k) { randSpiderHouse = Rand_S16Offset(0, 16) & 3; if (sp2A != randSpiderHouse) { - gSaveContext.save.spiderHouseMaskOrder[i] = randSpiderHouse; + gSaveContext.save.saveInfo.spiderHouseMaskOrder[i] = randSpiderHouse; i++; sp2A = randSpiderHouse; } @@ -646,7 +644,7 @@ void Sram_GenerateRandomSaveFields(void) { randBombers = Rand_S16Offset(0, 6); } while (randBombers <= 0 || randBombers >= 6); - gSaveContext.save.bomberCode[0] = randBombers; + gSaveContext.save.saveInfo.bomberCode[0] = randBombers; i = 1; while (i != 5) { @@ -658,14 +656,14 @@ void Sram_GenerateRandomSaveFields(void) { sp2A = 0; do { - if (randBombers == gSaveContext.save.bomberCode[sp2A]) { + if (randBombers == gSaveContext.save.saveInfo.bomberCode[sp2A]) { k = true; } sp2A++; } while (sp2A < i); if (k == false) { - gSaveContext.save.bomberCode[i] = randBombers; + gSaveContext.save.saveInfo.bomberCode[i] = randBombers; i++; } } @@ -755,19 +753,20 @@ void Sram_InitNewSave(void) { gSaveContext.save.time = CLOCK_TIME(6, 0) - 1; Sram_ResetSave(); - Lib_MemCpy(&gSaveContext.save.playerData, &sSaveDefaultPlayerData, sizeof(SavePlayerData)); - Lib_MemCpy(&gSaveContext.save.equips, &sSaveDefaultItemEquips, sizeof(ItemEquips)); - Lib_MemCpy(&gSaveContext.save.inventory, &sSaveDefaultInventory, sizeof(Inventory)); - Lib_MemCpy(&gSaveContext.save.checksum, &sSaveDefaultChecksum, sizeof(gSaveContext.save.checksum)); + Lib_MemCpy(&gSaveContext.save.saveInfo.playerData, &sSaveDefaultPlayerData, sizeof(SavePlayerData)); + Lib_MemCpy(&gSaveContext.save.saveInfo.equips, &sSaveDefaultItemEquips, sizeof(ItemEquips)); + Lib_MemCpy(&gSaveContext.save.saveInfo.inventory, &sSaveDefaultInventory, sizeof(Inventory)); + Lib_MemCpy(&gSaveContext.save.saveInfo.checksum, &sSaveDefaultChecksum, + sizeof(gSaveContext.save.saveInfo.checksum)); - gSaveContext.save.horseData.sceneId = SCENE_F01; - gSaveContext.save.horseData.pos.x = -1420; - gSaveContext.save.horseData.pos.y = 257; - gSaveContext.save.horseData.pos.z = -1285; - gSaveContext.save.horseData.yaw = -0x7554; + gSaveContext.save.saveInfo.horseData.sceneId = SCENE_F01; + gSaveContext.save.saveInfo.horseData.pos.x = -1420; + gSaveContext.save.saveInfo.horseData.pos.y = 257; + gSaveContext.save.saveInfo.horseData.pos.z = -1285; + gSaveContext.save.saveInfo.horseData.yaw = -0x7554; gSaveContext.nextCutsceneIndex = 0; - gSaveContext.save.playerData.magicLevel = 0; + gSaveContext.save.saveInfo.playerData.magicLevel = 0; Sram_GenerateRandomSaveFields(); } @@ -908,10 +907,10 @@ u8 D_801C6A50[] = { void Sram_InitDebugSave(void) { Sram_ResetSave(); - Lib_MemCpy(&gSaveContext.save.playerData, &sSaveDebugPlayerData, sizeof(SavePlayerData)); - Lib_MemCpy(&gSaveContext.save.equips, &sSaveDebugItemEquips, sizeof(ItemEquips)); - Lib_MemCpy(&gSaveContext.save.inventory, &sSaveDebugInventory, sizeof(Inventory)); - Lib_MemCpy(&gSaveContext.save.checksum, &sSaveDebugChecksum, sizeof(gSaveContext.save.checksum)); + Lib_MemCpy(&gSaveContext.save.saveInfo.playerData, &sSaveDebugPlayerData, sizeof(SavePlayerData)); + Lib_MemCpy(&gSaveContext.save.saveInfo.equips, &sSaveDebugItemEquips, sizeof(ItemEquips)); + Lib_MemCpy(&gSaveContext.save.saveInfo.inventory, &sSaveDebugInventory, sizeof(Inventory)); + Lib_MemCpy(&gSaveContext.save.saveInfo.checksum, &sSaveDebugChecksum, sizeof(gSaveContext.save.saveInfo.checksum)); if (GET_PLAYER_FORM != PLAYER_FORM_HUMAN) { BUTTON_ITEM_EQUIP(0, EQUIP_SLOT_C_DOWN) = D_801C6A48[GET_PLAYER_FORM]; @@ -920,11 +919,11 @@ void Sram_InitDebugSave(void) { gSaveContext.save.hasTatl = true; - gSaveContext.save.horseData.sceneId = SCENE_F01; - gSaveContext.save.horseData.pos.x = -1420; - gSaveContext.save.horseData.pos.y = 257; - gSaveContext.save.horseData.pos.z = -1285; - gSaveContext.save.horseData.yaw = -0x7554; + gSaveContext.save.saveInfo.horseData.sceneId = SCENE_F01; + gSaveContext.save.saveInfo.horseData.pos.x = -1420; + gSaveContext.save.saveInfo.horseData.pos.y = 257; + gSaveContext.save.saveInfo.horseData.pos.z = -1285; + gSaveContext.save.saveInfo.horseData.yaw = -0x7554; gSaveContext.save.entrance = ENTRANCE(CUTSCENE, 0); gSaveContext.save.isFirstCycle = true; @@ -934,8 +933,8 @@ void Sram_InitDebugSave(void) { SET_WEEKEVENTREG(WEEKEVENTREG_31_04); gSaveContext.cycleSceneFlags[SCENE_INSIDETOWER].switch0 = 1; - gSaveContext.save.permanentSceneFlags[SCENE_INSIDETOWER].switch0 = 1; - gSaveContext.save.playerData.magicLevel = 0; + gSaveContext.save.saveInfo.permanentSceneFlags[SCENE_INSIDETOWER].switch0 = 1; + gSaveContext.save.saveInfo.playerData.magicLevel = 0; Sram_GenerateRandomSaveFields(); } @@ -953,7 +952,7 @@ void func_80144A94(SramContext* sramCtx) { D_801C67F0[gSaveContext.fileNum * 2 + 1]); } Lib_MemCpy(&gSaveContext.save, sramCtx->saveBuf, sizeof(Save)); - if (CHECK_NEWF(gSaveContext.save.playerData.newf)) { + if (CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf)) { func_80185968(sramCtx->saveBuf, D_801C67C8[gSaveContext.fileNum * 2 + 1], D_801C67F0[gSaveContext.fileNum * 2 + 1]); Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, sizeof(Save)); @@ -965,11 +964,11 @@ void func_80144A94(SramContext* sramCtx) { } for (i = 0; i < ARRAY_COUNT(gSaveContext.cycleSceneFlags); i++) { - gSaveContext.cycleSceneFlags[i].chest = gSaveContext.save.permanentSceneFlags[i].chest; - gSaveContext.cycleSceneFlags[i].switch0 = gSaveContext.save.permanentSceneFlags[i].switch0; - gSaveContext.cycleSceneFlags[i].switch1 = gSaveContext.save.permanentSceneFlags[i].switch1; - gSaveContext.cycleSceneFlags[i].clearedRoom = gSaveContext.save.permanentSceneFlags[i].clearedRoom; - gSaveContext.cycleSceneFlags[i].collectible = gSaveContext.save.permanentSceneFlags[i].collectible; + gSaveContext.cycleSceneFlags[i].chest = gSaveContext.save.saveInfo.permanentSceneFlags[i].chest; + gSaveContext.cycleSceneFlags[i].switch0 = gSaveContext.save.saveInfo.permanentSceneFlags[i].switch0; + gSaveContext.cycleSceneFlags[i].switch1 = gSaveContext.save.saveInfo.permanentSceneFlags[i].switch1; + gSaveContext.cycleSceneFlags[i].clearedRoom = gSaveContext.save.saveInfo.permanentSceneFlags[i].clearedRoom; + gSaveContext.cycleSceneFlags[i].collectible = gSaveContext.save.saveInfo.permanentSceneFlags[i].collectible; } for (i = 0; i < TIMER_ID_MAX; i++) { @@ -1026,13 +1025,13 @@ void Sram_OpenSave(FileSelectState* fileSelect, SramContext* sramCtx) { Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[phi_t1]); - if (CHECK_NEWF(gSaveContext.save.playerData.newf)) { + if (CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf)) { func_80185968(sramCtx->saveBuf, D_801C67C8[phi_t1 + 1], D_801C67F0[phi_t1 + 1]); Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[phi_t1]); } } - gSaveContext.save.playerData.magicLevel = 0; + gSaveContext.save.saveInfo.playerData.magicLevel = 0; if (!gSaveContext.save.isOwlSave) { for (i = 0; i < ARRAY_COUNT(gSaveContext.eventInf); i++) { @@ -1040,11 +1039,11 @@ void Sram_OpenSave(FileSelectState* fileSelect, SramContext* sramCtx) { } for (i = 0; i < ARRAY_COUNT(gSaveContext.cycleSceneFlags); i++) { - gSaveContext.cycleSceneFlags[i].chest = gSaveContext.save.permanentSceneFlags[i].chest; - gSaveContext.cycleSceneFlags[i].switch0 = gSaveContext.save.permanentSceneFlags[i].switch0; - gSaveContext.cycleSceneFlags[i].switch1 = gSaveContext.save.permanentSceneFlags[i].switch1; - gSaveContext.cycleSceneFlags[i].clearedRoom = gSaveContext.save.permanentSceneFlags[i].clearedRoom; - gSaveContext.cycleSceneFlags[i].collectible = gSaveContext.save.permanentSceneFlags[i].collectible; + gSaveContext.cycleSceneFlags[i].chest = gSaveContext.save.saveInfo.permanentSceneFlags[i].chest; + gSaveContext.cycleSceneFlags[i].switch0 = gSaveContext.save.saveInfo.permanentSceneFlags[i].switch0; + gSaveContext.cycleSceneFlags[i].switch1 = gSaveContext.save.saveInfo.permanentSceneFlags[i].switch1; + gSaveContext.cycleSceneFlags[i].clearedRoom = gSaveContext.save.saveInfo.permanentSceneFlags[i].clearedRoom; + gSaveContext.cycleSceneFlags[i].collectible = gSaveContext.save.saveInfo.permanentSceneFlags[i].collectible; } for (i = 0; i < TIMER_ID_MAX; i++) { @@ -1076,18 +1075,18 @@ void Sram_OpenSave(FileSelectState* fileSelect, SramContext* sramCtx) { } for (i = 0; i < ARRAY_COUNT(gSaveContext.cycleSceneFlags); i++) { - gSaveContext.cycleSceneFlags[i].chest = gSaveContext.save.permanentSceneFlags[i].chest; - gSaveContext.cycleSceneFlags[i].switch0 = gSaveContext.save.permanentSceneFlags[i].switch0; - gSaveContext.cycleSceneFlags[i].switch1 = gSaveContext.save.permanentSceneFlags[i].switch1; - gSaveContext.cycleSceneFlags[i].clearedRoom = gSaveContext.save.permanentSceneFlags[i].clearedRoom; - gSaveContext.cycleSceneFlags[i].collectible = gSaveContext.save.permanentSceneFlags[i].collectible; + gSaveContext.cycleSceneFlags[i].chest = gSaveContext.save.saveInfo.permanentSceneFlags[i].chest; + gSaveContext.cycleSceneFlags[i].switch0 = gSaveContext.save.saveInfo.permanentSceneFlags[i].switch0; + gSaveContext.cycleSceneFlags[i].switch1 = gSaveContext.save.saveInfo.permanentSceneFlags[i].switch1; + gSaveContext.cycleSceneFlags[i].clearedRoom = gSaveContext.save.saveInfo.permanentSceneFlags[i].clearedRoom; + gSaveContext.cycleSceneFlags[i].collectible = gSaveContext.save.saveInfo.permanentSceneFlags[i].collectible; } - if (gSaveContext.save.unk_F65) { - Lib_MemCpy(gScarecrowSpawnSongPtr, gSaveContext.save.scarecrowSpawnSong, - sizeof(gSaveContext.save.scarecrowSpawnSong)); + if (gSaveContext.save.saveInfo.unk_F41) { + Lib_MemCpy(gScarecrowSpawnSongPtr, gSaveContext.save.saveInfo.scarecrowSpawnSong, + sizeof(gSaveContext.save.saveInfo.scarecrowSpawnSong)); - for (i = 0; i != ARRAY_COUNT(gSaveContext.save.scarecrowSpawnSong); i++) {} + for (i = 0; i != ARRAY_COUNT(gSaveContext.save.saveInfo.scarecrowSpawnSong); i++) {} } fileNum = gSaveContext.fileNum; @@ -1101,28 +1100,28 @@ void func_8014546C(SramContext* sramCtx) { if (gSaveContext.save.isOwlSave) { for (i = 0; i < ARRAY_COUNT(gSaveContext.cycleSceneFlags); i++) { - gSaveContext.save.permanentSceneFlags[i].chest = gSaveContext.cycleSceneFlags[i].chest; - gSaveContext.save.permanentSceneFlags[i].switch0 = gSaveContext.cycleSceneFlags[i].switch0; - gSaveContext.save.permanentSceneFlags[i].switch1 = gSaveContext.cycleSceneFlags[i].switch1; - gSaveContext.save.permanentSceneFlags[i].clearedRoom = gSaveContext.cycleSceneFlags[i].clearedRoom; - gSaveContext.save.permanentSceneFlags[i].collectible = gSaveContext.cycleSceneFlags[i].collectible; + gSaveContext.save.saveInfo.permanentSceneFlags[i].chest = gSaveContext.cycleSceneFlags[i].chest; + gSaveContext.save.saveInfo.permanentSceneFlags[i].switch0 = gSaveContext.cycleSceneFlags[i].switch0; + gSaveContext.save.saveInfo.permanentSceneFlags[i].switch1 = gSaveContext.cycleSceneFlags[i].switch1; + gSaveContext.save.saveInfo.permanentSceneFlags[i].clearedRoom = gSaveContext.cycleSceneFlags[i].clearedRoom; + gSaveContext.save.saveInfo.permanentSceneFlags[i].collectible = gSaveContext.cycleSceneFlags[i].collectible; } - gSaveContext.save.checksum = 0; - gSaveContext.save.checksum = Sram_CalcChecksum(&gSaveContext, offsetof(SaveContext, fileNum)); + gSaveContext.save.saveInfo.checksum = 0; + gSaveContext.save.saveInfo.checksum = Sram_CalcChecksum(&gSaveContext, offsetof(SaveContext, fileNum)); Lib_MemCpy(sramCtx->saveBuf, &gSaveContext, offsetof(SaveContext, fileNum)); } else { for (i = 0; i < ARRAY_COUNT(gSaveContext.cycleSceneFlags); i++) { - gSaveContext.save.permanentSceneFlags[i].chest = gSaveContext.cycleSceneFlags[i].chest; - gSaveContext.save.permanentSceneFlags[i].switch0 = gSaveContext.cycleSceneFlags[i].switch0; - gSaveContext.save.permanentSceneFlags[i].switch1 = gSaveContext.cycleSceneFlags[i].switch1; - gSaveContext.save.permanentSceneFlags[i].clearedRoom = gSaveContext.cycleSceneFlags[i].clearedRoom; - gSaveContext.save.permanentSceneFlags[i].collectible = gSaveContext.cycleSceneFlags[i].collectible; + gSaveContext.save.saveInfo.permanentSceneFlags[i].chest = gSaveContext.cycleSceneFlags[i].chest; + gSaveContext.save.saveInfo.permanentSceneFlags[i].switch0 = gSaveContext.cycleSceneFlags[i].switch0; + gSaveContext.save.saveInfo.permanentSceneFlags[i].switch1 = gSaveContext.cycleSceneFlags[i].switch1; + gSaveContext.save.saveInfo.permanentSceneFlags[i].clearedRoom = gSaveContext.cycleSceneFlags[i].clearedRoom; + gSaveContext.save.saveInfo.permanentSceneFlags[i].collectible = gSaveContext.cycleSceneFlags[i].collectible; } - gSaveContext.save.checksum = 0; - gSaveContext.save.checksum = Sram_CalcChecksum(&gSaveContext.save, sizeof(Save)); + gSaveContext.save.saveInfo.checksum = 0; + gSaveContext.save.saveInfo.checksum = Sram_CalcChecksum(&gSaveContext.save, sizeof(Save)); if (gSaveContext.unk_3F3F) { Lib_MemCpy(sramCtx->saveBuf, &gSaveContext, sizeof(Save)); @@ -1138,15 +1137,15 @@ void func_80145698(SramContext* sramCtx) { s32 i; for (i = 0; i < ARRAY_COUNT(gSaveContext.cycleSceneFlags); i++) { - gSaveContext.save.permanentSceneFlags[i].chest = gSaveContext.cycleSceneFlags[i].chest; - gSaveContext.save.permanentSceneFlags[i].switch0 = gSaveContext.cycleSceneFlags[i].switch0; - gSaveContext.save.permanentSceneFlags[i].switch1 = gSaveContext.cycleSceneFlags[i].switch1; - gSaveContext.save.permanentSceneFlags[i].clearedRoom = gSaveContext.cycleSceneFlags[i].clearedRoom; - gSaveContext.save.permanentSceneFlags[i].collectible = gSaveContext.cycleSceneFlags[i].collectible; + gSaveContext.save.saveInfo.permanentSceneFlags[i].chest = gSaveContext.cycleSceneFlags[i].chest; + gSaveContext.save.saveInfo.permanentSceneFlags[i].switch0 = gSaveContext.cycleSceneFlags[i].switch0; + gSaveContext.save.saveInfo.permanentSceneFlags[i].switch1 = gSaveContext.cycleSceneFlags[i].switch1; + gSaveContext.save.saveInfo.permanentSceneFlags[i].clearedRoom = gSaveContext.cycleSceneFlags[i].clearedRoom; + gSaveContext.save.saveInfo.permanentSceneFlags[i].collectible = gSaveContext.cycleSceneFlags[i].collectible; } - gSaveContext.save.checksum = 0; - gSaveContext.save.checksum = Sram_CalcChecksum(&gSaveContext.save, sizeof(Save)); + gSaveContext.save.saveInfo.checksum = 0; + gSaveContext.save.saveInfo.checksum = Sram_CalcChecksum(&gSaveContext.save, sizeof(Save)); if (gSaveContext.unk_3F3F) { Lib_MemCpy(sramCtx->saveBuf, &gSaveContext, sizeof(Save)); Lib_MemCpy(&sramCtx->saveBuf[0x2000], &gSaveContext.save, sizeof(Save)); @@ -1202,14 +1201,14 @@ void func_801457CC(FileSelectState* fileSelect2, SramContext* sramCtx) { } else { // Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[sp64]); Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[sp64]); - temp_s2 = gSaveContext.save.checksum; - gSaveContext.save.checksum = 0; + temp_s2 = gSaveContext.save.saveInfo.checksum; + gSaveContext.save.saveInfo.checksum = 0; temp_v0_2 = Sram_CalcChecksum(&gSaveContext, D_801C6870[sp64]); - gSaveContext.save.checksum = temp_s2; + gSaveContext.save.saveInfo.checksum = temp_s2; - if (CHECK_NEWF(gSaveContext.save.playerData.newf) || (temp_s2 != temp_v0_2)) { + if (CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf) || (temp_s2 != temp_v0_2)) { sp6E = 1; - if (CHECK_NEWF2(gSaveContext.save.playerData.newf)) {} + if (CHECK_NEWF2(gSaveContext.save.saveInfo.playerData.newf)) {} phi_s2 = false; if (func_80185968(sramCtx->saveBuf, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1])) { @@ -1217,9 +1216,9 @@ void func_801457CC(FileSelectState* fileSelect2, SramContext* sramCtx) { } Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[sp64]); - temp_s2 = gSaveContext.save.checksum; - gSaveContext.save.checksum = 0; - if (phi_s2 || CHECK_NEWF(gSaveContext.save.playerData.newf) || + temp_s2 = gSaveContext.save.saveInfo.checksum; + gSaveContext.save.saveInfo.checksum = 0; + if (phi_s2 || CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf) || (temp_s2 != Sram_CalcChecksum(&gSaveContext, D_801C6870[sp64]))) { bzero(sramCtx->saveBuf, SAVE_BUFFER_SIZE); Lib_MemCpy(&gSaveContext.save, sramCtx->saveBuf, sizeof(Save)); @@ -1228,55 +1227,57 @@ void func_801457CC(FileSelectState* fileSelect2, SramContext* sramCtx) { } } - gSaveContext.save.checksum = 0; - gSaveContext.save.checksum = + gSaveContext.save.saveInfo.checksum = 0; + gSaveContext.save.saveInfo.checksum = Sram_CalcChecksum(&gSaveContext, D_801C6870[sp64 & 0xFFFFFFFF]); // TODO: Needed? - for (sp7A = 0; sp7A < ARRAY_COUNT(gSaveContext.save.playerData.newf); sp7A++) { - fileSelect->newf[sp76][sp7A] = gSaveContext.save.playerData.newf[sp7A]; + for (sp7A = 0; sp7A < ARRAY_COUNT(gSaveContext.save.saveInfo.playerData.newf); sp7A++) { + fileSelect->newf[sp76][sp7A] = gSaveContext.save.saveInfo.playerData.newf[sp7A]; } if (!CHECK_NEWF(fileSelect->newf[sp76])) { - fileSelect->unk_2440C[sp76] = gSaveContext.save.playerData.deaths; + fileSelect->unk_2440C[sp76] = gSaveContext.save.saveInfo.playerData.deaths; - for (sp7A = 0; sp7A < ARRAY_COUNT(gSaveContext.save.playerData.playerName); sp7A++) { - fileSelect->unk_24414[sp76][sp7A] = gSaveContext.save.playerData.playerName[sp7A]; + for (sp7A = 0; sp7A < ARRAY_COUNT(gSaveContext.save.saveInfo.playerData.playerName); sp7A++) { + fileSelect->unk_24414[sp76][sp7A] = gSaveContext.save.saveInfo.playerData.playerName[sp7A]; } - fileSelect->healthCapacity[sp76] = gSaveContext.save.playerData.healthCapacity; - fileSelect->health[sp76] = gSaveContext.save.playerData.health; - fileSelect->unk_24454[sp76] = gSaveContext.save.inventory.defenseHearts; - fileSelect->unk_24444[sp76] = gSaveContext.save.inventory.questItems; + fileSelect->healthCapacity[sp76] = gSaveContext.save.saveInfo.playerData.healthCapacity; + fileSelect->health[sp76] = gSaveContext.save.saveInfo.playerData.health; + fileSelect->unk_24454[sp76] = gSaveContext.save.saveInfo.inventory.defenseHearts; + fileSelect->unk_24444[sp76] = gSaveContext.save.saveInfo.inventory.questItems; fileSelect->unk_24458[sp76] = gSaveContext.save.time; fileSelect->unk_24460[sp76] = gSaveContext.save.day; fileSelect->unk_24468[sp76] = gSaveContext.save.isOwlSave; - fileSelect->rupees[sp76] = gSaveContext.save.playerData.rupees; + fileSelect->rupees[sp76] = gSaveContext.save.saveInfo.playerData.rupees; fileSelect->unk_24474[sp76] = CUR_UPG_VALUE(4); for (sp7A = 0, phi_a0 = 0; sp7A < 24; sp7A++) { - if (gSaveContext.save.inventory.items[sp7A + 24] != 0xFF) { + if (gSaveContext.save.saveInfo.inventory.items[sp7A + 24] != 0xFF) { phi_a0++; } } fileSelect->maskCount[sp76] = phi_a0; - fileSelect->heartPieceCount[sp76] = ((gSaveContext.save.inventory.questItems & 0xF0000000) >> 0x1C); + fileSelect->heartPieceCount[sp76] = + ((gSaveContext.save.saveInfo.inventory.questItems & 0xF0000000) >> 0x1C); } if (sp6E == 1) { Lib_MemCpy(&sramCtx->saveBuf[0x2000], &gSaveContext.save, sizeof(Save)); func_80146EBC(sramCtx, D_801C67C8[sp64], D_801C6818[sp64]); } else if (sp6E == 0) { // TODO: == 0? - temp_s2 = gSaveContext.save.checksum; + temp_s2 = gSaveContext.save.saveInfo.checksum; if (func_80185968(sramCtx->saveBuf, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1])) { phi_s2_3 = 1; } else { Lib_MemCpy(&gSaveContext.save, sramCtx->saveBuf, sizeof(Save)); - phi_s2_3 = gSaveContext.save.checksum; - gSaveContext.save.checksum = 0; + phi_s2_3 = gSaveContext.save.saveInfo.checksum; + gSaveContext.save.saveInfo.checksum = 0; sp7A = Sram_CalcChecksum(&gSaveContext.save, sizeof(Save)); } - if (CHECK_NEWF(gSaveContext.save.playerData.newf) || (phi_s2_3 != sp7A) || (phi_s2_3 != temp_s2)) { + if (CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf) || (phi_s2_3 != sp7A) || + (phi_s2_3 != temp_s2)) { func_80185968(sramCtx->saveBuf, D_801C67C8[sp64], D_801C67F0[sp64]); Lib_MemCpy(&gSaveContext.save, sramCtx->saveBuf, sizeof(Save)); Lib_MemCpy(&sramCtx->saveBuf[0x2000], &gSaveContext.save, sizeof(Save)); @@ -1293,15 +1294,15 @@ void func_801457CC(FileSelectState* fileSelect2, SramContext* sramCtx) { D_801C6870[sp64]); // TODO: Needed? } else { Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[sp64]); - temp_s2 = gSaveContext.save.checksum; + temp_s2 = gSaveContext.save.saveInfo.checksum; - gSaveContext.save.checksum = 0; + gSaveContext.save.saveInfo.checksum = 0; temp_v0_2 = Sram_CalcChecksum(&gSaveContext, D_801C6870[sp64]); - gSaveContext.save.checksum = temp_s2; - if (CHECK_NEWF(gSaveContext.save.playerData.newf) || (temp_s2 != temp_v0_2)) { + gSaveContext.save.saveInfo.checksum = temp_s2; + if (CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf) || (temp_s2 != temp_v0_2)) { sp6E = 1; - if ((gSaveContext.save.playerData.newf[0] == 'Z') && - (gSaveContext.save.playerData.newf[1] == 'E')) { + if ((gSaveContext.save.saveInfo.playerData.newf[0] == 'Z') && + (gSaveContext.save.saveInfo.playerData.newf[1] == 'E')) { phi_s2 = false; } @@ -1310,9 +1311,9 @@ void func_801457CC(FileSelectState* fileSelect2, SramContext* sramCtx) { } Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[sp64]); - temp_s2 = gSaveContext.save.checksum; - gSaveContext.save.checksum = 0; - if (phi_s2 || CHECK_NEWF(gSaveContext.save.playerData.newf) || + temp_s2 = gSaveContext.save.saveInfo.checksum; + gSaveContext.save.saveInfo.checksum = 0; + if (phi_s2 || CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf) || (temp_s2 != Sram_CalcChecksum(&gSaveContext, D_801C6870[sp64]))) { bzero(sramCtx->saveBuf, SAVE_BUFFER_SIZE); Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[sp64]); @@ -1321,58 +1322,58 @@ void func_801457CC(FileSelectState* fileSelect2, SramContext* sramCtx) { } } - gSaveContext.save.checksum = 0; - gSaveContext.save.checksum = + gSaveContext.save.saveInfo.checksum = 0; + gSaveContext.save.saveInfo.checksum = Sram_CalcChecksum(&gSaveContext, D_801C6870[sp64 & 0xFFFFFFFF]); // TODO: Needed? - for (sp7A = 0; sp7A < ARRAY_COUNT(gSaveContext.save.playerData.newf); sp7A++) { - fileSelect->newf[sp76][sp7A] = gSaveContext.save.playerData.newf[sp7A]; + for (sp7A = 0; sp7A < ARRAY_COUNT(gSaveContext.save.saveInfo.playerData.newf); sp7A++) { + fileSelect->newf[sp76][sp7A] = gSaveContext.save.saveInfo.playerData.newf[sp7A]; } if (!CHECK_NEWF(fileSelect->newf[sp76])) { - fileSelect->unk_2440C[sp76] = gSaveContext.save.playerData.deaths; + fileSelect->unk_2440C[sp76] = gSaveContext.save.saveInfo.playerData.deaths; - for (sp7A = 0; sp7A < ARRAY_COUNT(gSaveContext.save.playerData.playerName); sp7A++) { + for (sp7A = 0; sp7A < ARRAY_COUNT(gSaveContext.save.saveInfo.playerData.playerName); sp7A++) { phi_s2 += 0; // TODO: Needed? - fileSelect->unk_24414[sp76][sp7A] = gSaveContext.save.playerData.playerName[sp7A]; + fileSelect->unk_24414[sp76][sp7A] = gSaveContext.save.saveInfo.playerData.playerName[sp7A]; } - fileSelect->healthCapacity[sp76] = gSaveContext.save.playerData.healthCapacity; - fileSelect->health[sp76] = gSaveContext.save.playerData.health; - fileSelect->unk_24454[sp76] = gSaveContext.save.inventory.defenseHearts; - fileSelect->unk_24444[sp76] = gSaveContext.save.inventory.questItems; + fileSelect->healthCapacity[sp76] = gSaveContext.save.saveInfo.playerData.healthCapacity; + fileSelect->health[sp76] = gSaveContext.save.saveInfo.playerData.health; + fileSelect->unk_24454[sp76] = gSaveContext.save.saveInfo.inventory.defenseHearts; + fileSelect->unk_24444[sp76] = gSaveContext.save.saveInfo.inventory.questItems; fileSelect->unk_24458[sp76] = gSaveContext.save.time; fileSelect->unk_24460[sp76] = gSaveContext.save.day; fileSelect->unk_24468[sp76] = gSaveContext.save.isOwlSave; - fileSelect->rupees[sp76] = gSaveContext.save.playerData.rupees; + fileSelect->rupees[sp76] = gSaveContext.save.saveInfo.playerData.rupees; fileSelect->unk_24474[sp76] = CUR_UPG_VALUE(4); for (sp7A = 0, phi_a0 = 0; sp7A < 24; sp7A++) { - if (gSaveContext.save.inventory.items[sp7A + 24] != 0xFF) { + if (gSaveContext.save.saveInfo.inventory.items[sp7A + 24] != 0xFF) { phi_a0++; } } fileSelect->maskCount[sp76] = phi_a0; fileSelect->heartPieceCount[sp76] = - ((gSaveContext.save.inventory.questItems & 0xF0000000) >> 0x1C); + ((gSaveContext.save.saveInfo.inventory.questItems & 0xF0000000) >> 0x1C); } if (sp6E == 1) { func_80146EBC(sramCtx, D_801C67C8[sp64], D_801C67F0[sp64]); func_80146EBC(sramCtx, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1]); } else if (!sp6E) { // TODO: == 0? - temp_s2 = gSaveContext.save.checksum; + temp_s2 = gSaveContext.save.saveInfo.checksum; if (func_80185968(sramCtx->saveBuf, D_801C67C8[sp64 + 1], D_801C67F0[sp64 + 1])) { phi_s2_3 = 1; } else { Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[sp64]); - phi_s2_3 = gSaveContext.save.checksum; - gSaveContext.save.checksum = 0; - // phi_s2_3 = gSaveContext.save.checksum; + phi_s2_3 = gSaveContext.save.saveInfo.checksum; + gSaveContext.save.saveInfo.checksum = 0; + // phi_s2_3 = gSaveContext.save.saveInfo.checksum; sp7A = Sram_CalcChecksum(&gSaveContext, D_801C6870[sp64]); } - if (CHECK_NEWF(gSaveContext.save.playerData.newf) || (phi_s2_3 != sp7A) || + if (CHECK_NEWF(gSaveContext.save.saveInfo.playerData.newf) || (phi_s2_3 != sp7A) || (phi_s2_3 != temp_s2)) { func_80185968(sramCtx->saveBuf, D_801C67C8[sp64], D_801C67F0[sp64]); Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, D_801C6870[sp64]); @@ -1444,32 +1445,33 @@ void func_80146628(FileSelectState* fileSelect2, SramContext* sramCtx) { if (gSaveContext.unk_3F3F) { if (fileSelect->unk_2446A[fileSelect->unk_2448E]) { func_80147414(sramCtx, fileSelect->unk_2448E, fileSelect->fileNum); - fileSelect->unk_24410[fileSelect->fileNum] = gSaveContext.save.playerData.deaths; + fileSelect->unk_24410[fileSelect->fileNum] = gSaveContext.save.saveInfo.playerData.deaths; - for (i = 0; i < ARRAY_COUNT(gSaveContext.save.playerData.playerName); i++) { - fileSelect->unk_24424[fileSelect->fileNum][i] = gSaveContext.save.playerData.playerName[i]; + for (i = 0; i < ARRAY_COUNT(gSaveContext.save.saveInfo.playerData.playerName); i++) { + fileSelect->unk_24424[fileSelect->fileNum][i] = gSaveContext.save.saveInfo.playerData.playerName[i]; } - fileSelect->unk_24438[fileSelect->fileNum] = gSaveContext.save.playerData.healthCapacity; - fileSelect->unk_24440[fileSelect->fileNum] = gSaveContext.save.playerData.health; - fileSelect->unk_24456[fileSelect->fileNum] = gSaveContext.save.inventory.defenseHearts; - fileSelect->unk_2444C[fileSelect->fileNum] = gSaveContext.save.inventory.questItems; + fileSelect->unk_24438[fileSelect->fileNum] = gSaveContext.save.saveInfo.playerData.healthCapacity; + fileSelect->unk_24440[fileSelect->fileNum] = gSaveContext.save.saveInfo.playerData.health; + fileSelect->unk_24456[fileSelect->fileNum] = gSaveContext.save.saveInfo.inventory.defenseHearts; + fileSelect->unk_2444C[fileSelect->fileNum] = gSaveContext.save.saveInfo.inventory.questItems; fileSelect->unk_2445C[fileSelect->fileNum] = gSaveContext.save.time; fileSelect->unk_24464[fileSelect->fileNum] = gSaveContext.save.day; fileSelect->unk_2446A[fileSelect->fileNum] = gSaveContext.save.isOwlSave; - fileSelect->unk_24470[fileSelect->fileNum] = gSaveContext.save.playerData.rupees; + fileSelect->unk_24470[fileSelect->fileNum] = gSaveContext.save.saveInfo.playerData.rupees; // = CUR_UPG_VALUE(UPG_WALLET); fileSelect->unk_24476[fileSelect->fileNum] = - (gSaveContext.save.inventory.upgrades & gUpgradeMasks[4]) >> gUpgradeShifts[4]; + (gSaveContext.save.saveInfo.inventory.upgrades & gUpgradeMasks[4]) >> gUpgradeShifts[4]; for (i = 0, maskCount = 0; i < 24; i++) { - if (gSaveContext.save.inventory.items[i + 24] != ITEM_NONE) { + if (gSaveContext.save.saveInfo.inventory.items[i + 24] != ITEM_NONE) { maskCount++; } } fileSelect->unk_2447A[fileSelect->fileNum] = maskCount; - fileSelect->unk_2447E[fileSelect->fileNum] = (gSaveContext.save.inventory.questItems & 0xF0000000) >> 0x1C; + fileSelect->unk_2447E[fileSelect->fileNum] = + (gSaveContext.save.saveInfo.inventory.questItems & 0xF0000000) >> 0x1C; } // clear buffer @@ -1485,33 +1487,33 @@ void func_80146628(FileSelectState* fileSelect2, SramContext* sramCtx) { // copy buffer to save context Lib_MemCpy(&gSaveContext.save, sramCtx->saveBuf, sizeof(Save)); - fileSelect->unk_2440C[fileSelect->fileNum] = gSaveContext.save.playerData.deaths; + fileSelect->unk_2440C[fileSelect->fileNum] = gSaveContext.save.saveInfo.playerData.deaths; - for (i = 0; i < ARRAY_COUNT(gSaveContext.save.playerData.playerName); i++) { - fileSelect->unk_24414[fileSelect->fileNum][i] = gSaveContext.save.playerData.playerName[i]; + for (i = 0; i < ARRAY_COUNT(gSaveContext.save.saveInfo.playerData.playerName); i++) { + fileSelect->unk_24414[fileSelect->fileNum][i] = gSaveContext.save.saveInfo.playerData.playerName[i]; } - fileSelect->healthCapacity[fileSelect->fileNum] = gSaveContext.save.playerData.healthCapacity; - fileSelect->health[fileSelect->fileNum] = gSaveContext.save.playerData.health; - fileSelect->unk_24454[fileSelect->fileNum] = gSaveContext.save.inventory.defenseHearts; - fileSelect->unk_24444[fileSelect->fileNum] = gSaveContext.save.inventory.questItems; + fileSelect->healthCapacity[fileSelect->fileNum] = gSaveContext.save.saveInfo.playerData.healthCapacity; + fileSelect->health[fileSelect->fileNum] = gSaveContext.save.saveInfo.playerData.health; + fileSelect->unk_24454[fileSelect->fileNum] = gSaveContext.save.saveInfo.inventory.defenseHearts; + fileSelect->unk_24444[fileSelect->fileNum] = gSaveContext.save.saveInfo.inventory.questItems; fileSelect->unk_24458[fileSelect->fileNum] = gSaveContext.save.time; fileSelect->unk_24460[fileSelect->fileNum] = gSaveContext.save.day; fileSelect->unk_24468[fileSelect->fileNum] = gSaveContext.save.isOwlSave; - fileSelect->rupees[fileSelect->fileNum] = gSaveContext.save.playerData.rupees; + fileSelect->rupees[fileSelect->fileNum] = gSaveContext.save.saveInfo.playerData.rupees; // = CUR_UPG_VALUE(UPG_WALLET); fileSelect->unk_24474[fileSelect->fileNum] = - (gSaveContext.save.inventory.upgrades & gUpgradeMasks[4]) >> gUpgradeShifts[4]; + (gSaveContext.save.saveInfo.inventory.upgrades & gUpgradeMasks[4]) >> gUpgradeShifts[4]; for (i = 0, maskCount = 0; i < 24; i++) { - if (gSaveContext.save.inventory.items[i + 24] != ITEM_NONE) { + if (gSaveContext.save.saveInfo.inventory.items[i + 24] != ITEM_NONE) { maskCount++; } } fileSelect->maskCount[fileSelect->fileNum] = maskCount; fileSelect->heartPieceCount[fileSelect->fileNum] = - (gSaveContext.save.inventory.questItems & 0xF0000000) >> 0x1C; + (gSaveContext.save.saveInfo.inventory.questItems & 0xF0000000) >> 0x1C; } gSaveContext.save.time = D_801F6AF0; @@ -1533,51 +1535,52 @@ void Sram_InitSave(FileSelectState* fileSelect2, SramContext* sramCtx) { gSaveContext.save.cutscene = 0xFFF0; } - for (phi_v0 = 0; phi_v0 < ARRAY_COUNT(gSaveContext.save.playerData.playerName); phi_v0++) { - gSaveContext.save.playerData.playerName[phi_v0] = fileSelect->unk_24414[fileSelect->unk_24480][phi_v0]; + for (phi_v0 = 0; phi_v0 < ARRAY_COUNT(gSaveContext.save.saveInfo.playerData.playerName); phi_v0++) { + gSaveContext.save.saveInfo.playerData.playerName[phi_v0] = + fileSelect->unk_24414[fileSelect->unk_24480][phi_v0]; } - gSaveContext.save.playerData.newf[0] = 'Z'; - gSaveContext.save.playerData.newf[1] = 'E'; - gSaveContext.save.playerData.newf[2] = 'L'; - gSaveContext.save.playerData.newf[3] = 'D'; - gSaveContext.save.playerData.newf[4] = 'A'; - gSaveContext.save.playerData.newf[5] = '3'; + gSaveContext.save.saveInfo.playerData.newf[0] = 'Z'; + gSaveContext.save.saveInfo.playerData.newf[1] = 'E'; + gSaveContext.save.saveInfo.playerData.newf[2] = 'L'; + gSaveContext.save.saveInfo.playerData.newf[3] = 'D'; + gSaveContext.save.saveInfo.playerData.newf[4] = 'A'; + gSaveContext.save.saveInfo.playerData.newf[5] = '3'; - gSaveContext.save.checksum = Sram_CalcChecksum(&gSaveContext.save, sizeof(Save)); + gSaveContext.save.saveInfo.checksum = Sram_CalcChecksum(&gSaveContext.save, sizeof(Save)); Lib_MemCpy(sramCtx->saveBuf, &gSaveContext.save, sizeof(Save)); Lib_MemCpy(&sramCtx->saveBuf[0x2000], &gSaveContext.save, sizeof(Save)); - for (i = 0; i < ARRAY_COUNT(gSaveContext.save.playerData.newf); i++) { - fileSelect->newf[fileSelect->unk_24480][i] = gSaveContext.save.playerData.newf[i]; + for (i = 0; i < ARRAY_COUNT(gSaveContext.save.saveInfo.playerData.newf); i++) { + fileSelect->newf[fileSelect->unk_24480][i] = gSaveContext.save.saveInfo.playerData.newf[i]; } - fileSelect->unk_2440C[fileSelect->unk_24480] = gSaveContext.save.playerData.deaths; + fileSelect->unk_2440C[fileSelect->unk_24480] = gSaveContext.save.saveInfo.playerData.deaths; - for (i = 0; i < ARRAY_COUNT(gSaveContext.save.playerData.playerName); i++) { - fileSelect->unk_24414[fileSelect->unk_24480][i] = gSaveContext.save.playerData.playerName[i]; + for (i = 0; i < ARRAY_COUNT(gSaveContext.save.saveInfo.playerData.playerName); i++) { + fileSelect->unk_24414[fileSelect->unk_24480][i] = gSaveContext.save.saveInfo.playerData.playerName[i]; } - fileSelect->healthCapacity[fileSelect->unk_24480] = gSaveContext.save.playerData.healthCapacity; - fileSelect->health[fileSelect->unk_24480] = gSaveContext.save.playerData.health; - fileSelect->unk_24454[fileSelect->unk_24480] = gSaveContext.save.inventory.defenseHearts; - fileSelect->unk_24444[fileSelect->unk_24480] = gSaveContext.save.inventory.questItems; + fileSelect->healthCapacity[fileSelect->unk_24480] = gSaveContext.save.saveInfo.playerData.healthCapacity; + fileSelect->health[fileSelect->unk_24480] = gSaveContext.save.saveInfo.playerData.health; + fileSelect->unk_24454[fileSelect->unk_24480] = gSaveContext.save.saveInfo.inventory.defenseHearts; + fileSelect->unk_24444[fileSelect->unk_24480] = gSaveContext.save.saveInfo.inventory.questItems; fileSelect->unk_24458[fileSelect->unk_24480] = gSaveContext.save.time; fileSelect->unk_24460[fileSelect->unk_24480] = gSaveContext.save.day; fileSelect->unk_24468[fileSelect->unk_24480] = gSaveContext.save.isOwlSave; - fileSelect->rupees[fileSelect->unk_24480] = gSaveContext.save.playerData.rupees; + fileSelect->rupees[fileSelect->unk_24480] = gSaveContext.save.saveInfo.playerData.rupees; fileSelect->unk_24474[fileSelect->unk_24480] = CUR_UPG_VALUE(UPG_WALLET); for (i = 0, maskCount = 0; i < 24; i++) { - if (gSaveContext.save.inventory.items[i + 24] != ITEM_NONE) { + if (gSaveContext.save.saveInfo.inventory.items[i + 24] != ITEM_NONE) { maskCount++; } } fileSelect->maskCount[fileSelect->unk_24480] = maskCount; fileSelect->heartPieceCount[fileSelect->unk_24480] = - (gSaveContext.save.inventory.questItems & 0xF0000000) >> 0x1C; + (gSaveContext.save.saveInfo.inventory.questItems & 0xF0000000) >> 0x1C; } gSaveContext.save.time = D_801F6AF0; @@ -1714,7 +1717,7 @@ void func_80147198(SramContext* sramCtx) { sramCtx->status = 0; bzero(sramCtx->saveBuf, SAVE_BUFFER_SIZE); gSaveContext.save.isOwlSave = false; - gSaveContext.save.checksum = 0; + gSaveContext.save.saveInfo.checksum = 0; // flash read to buffer then copy to save context func_80185968(sramCtx->saveBuf, sramCtx->curPage, sramCtx->numPages); Lib_MemCpy(&gSaveContext, sramCtx->saveBuf, offsetof(SaveContext, fileNum)); @@ -1726,15 +1729,15 @@ void func_80147314(SramContext* sramCtx, s32 fileNum) { gSaveContext.save.isOwlSave = false; - gSaveContext.save.playerData.newf[0] = '\0'; - gSaveContext.save.playerData.newf[1] = '\0'; - gSaveContext.save.playerData.newf[2] = '\0'; - gSaveContext.save.playerData.newf[3] = '\0'; - gSaveContext.save.playerData.newf[4] = '\0'; - gSaveContext.save.playerData.newf[5] = '\0'; + gSaveContext.save.saveInfo.playerData.newf[0] = '\0'; + gSaveContext.save.saveInfo.playerData.newf[1] = '\0'; + gSaveContext.save.saveInfo.playerData.newf[2] = '\0'; + gSaveContext.save.saveInfo.playerData.newf[3] = '\0'; + gSaveContext.save.saveInfo.playerData.newf[4] = '\0'; + gSaveContext.save.saveInfo.playerData.newf[5] = '\0'; - gSaveContext.save.checksum = 0; - gSaveContext.save.checksum = Sram_CalcChecksum(&gSaveContext, offsetof(SaveContext, fileNum)); + gSaveContext.save.saveInfo.checksum = 0; + gSaveContext.save.saveInfo.checksum = Sram_CalcChecksum(&gSaveContext, offsetof(SaveContext, fileNum)); Lib_MemCpy(sramCtx->saveBuf, &gSaveContext, offsetof(SaveContext, fileNum)); func_80146EBC(sramCtx, D_801C6840[fileNum * 2], D_801C6850[fileNum * 2]); @@ -1742,12 +1745,12 @@ void func_80147314(SramContext* sramCtx, s32 fileNum) { gSaveContext.save.isOwlSave = true; - gSaveContext.save.playerData.newf[0] = 'Z'; - gSaveContext.save.playerData.newf[1] = 'E'; - gSaveContext.save.playerData.newf[2] = 'L'; - gSaveContext.save.playerData.newf[3] = 'D'; - gSaveContext.save.playerData.newf[4] = 'A'; - gSaveContext.save.playerData.newf[5] = '3'; + gSaveContext.save.saveInfo.playerData.newf[0] = 'Z'; + gSaveContext.save.saveInfo.playerData.newf[1] = 'E'; + gSaveContext.save.saveInfo.playerData.newf[2] = 'L'; + gSaveContext.save.saveInfo.playerData.newf[3] = 'D'; + gSaveContext.save.saveInfo.playerData.newf[4] = 'A'; + gSaveContext.save.saveInfo.playerData.newf[5] = '3'; } void func_80147414(SramContext* sramCtx, s32 fileNum, s32 arg2) { diff --git a/src/overlays/actors/ovl_Bg_Kin2_Fence/z_bg_kin2_fence.c b/src/overlays/actors/ovl_Bg_Kin2_Fence/z_bg_kin2_fence.c index dfb22deee..1550711e1 100644 --- a/src/overlays/actors/ovl_Bg_Kin2_Fence/z_bg_kin2_fence.c +++ b/src/overlays/actors/ovl_Bg_Kin2_Fence/z_bg_kin2_fence.c @@ -187,7 +187,7 @@ void BgKin2Fence_HandleMaskCode(BgKin2Fence* this, PlayState* play) { if (this->collider.base.acFlags & AC_HIT) { hitMask = BgKin2Fence_CheckHitMask(this); if (hitMask >= 0) { - nextMask = (s8)gSaveContext.save.spiderHouseMaskOrder[this->masksHit]; + nextMask = (s8)gSaveContext.save.saveInfo.spiderHouseMaskOrder[this->masksHit]; if (hitMask == nextMask) { play_sound(NA_SE_SY_TRE_BOX_APPEAR); this->masksHit += 1; diff --git a/src/overlays/actors/ovl_Dm_Char02/z_dm_char02.c b/src/overlays/actors/ovl_Dm_Char02/z_dm_char02.c index 56c02526b..f1759b7fb 100644 --- a/src/overlays/actors/ovl_Dm_Char02/z_dm_char02.c +++ b/src/overlays/actors/ovl_Dm_Char02/z_dm_char02.c @@ -83,7 +83,7 @@ void DmChar02_PlaySfxForCutscenes(DmChar02* this, PlayState* play) { void DmChar02_Init(Actor* thisx, PlayState* play) { DmChar02* this = THIS; - if (gSaveContext.save.inventory.items[SLOT_OCARINA] == ITEM_NONE) { + if (gSaveContext.save.saveInfo.inventory.items[SLOT_OCARINA] == ITEM_NONE) { this->animIndex = DMCHAR02_ANIM_HIT_GROUND; this->actor.targetArrowOffset = 3000.0f; ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 24.0f); diff --git a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c index 83bdfe71a..f8210a9de 100644 --- a/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c +++ b/src/overlays/actors/ovl_Dm_Stk/z_dm_stk.c @@ -1052,7 +1052,7 @@ void DmStk_Init(Actor* thisx, PlayState* play) { R_MOON_CRASH_TIMER_X = 115; } - if (gSaveContext.save.inventory.items[SLOT_OCARINA] == ITEM_NONE) { + if (gSaveContext.save.saveInfo.inventory.items[SLOT_OCARINA] == ITEM_NONE) { sCylinderInit.base.colType = COLTYPE_WOOD; this->actionFunc = DmStk_ClockTower_StartIntroCutsceneVersion1; } else { @@ -1402,7 +1402,7 @@ void DmStk_UpdateCutscenes(DmStk* this, PlayState* play) { case 22: this->animIndex = SK_ANIM_PLAY_OCARINA_WHILE_FLOATING; - if (gSaveContext.save.inventory.items[SLOT_OCARINA] == ITEM_NONE) { + if (gSaveContext.save.saveInfo.inventory.items[SLOT_OCARINA] == ITEM_NONE) { this->handType = SK_HAND_TYPE_HOLDING_OCARINA; } break; @@ -1414,7 +1414,7 @@ void DmStk_UpdateCutscenes(DmStk* this, PlayState* play) { case 24: this->animIndex = SK_ANIM_CALL_DOWN_MOON_START; - if (gSaveContext.save.inventory.items[SLOT_OCARINA] == ITEM_NONE) { + if (gSaveContext.save.saveInfo.inventory.items[SLOT_OCARINA] == ITEM_NONE) { this->handType = SK_HAND_TYPE_HOLDING_OCARINA; } break; @@ -1425,14 +1425,14 @@ void DmStk_UpdateCutscenes(DmStk* this, PlayState* play) { case 26: this->animIndex = SK_ANIM_SMACK_FAIRY_START; - if (gSaveContext.save.inventory.items[SLOT_OCARINA] == ITEM_NONE) { + if (gSaveContext.save.saveInfo.inventory.items[SLOT_OCARINA] == ITEM_NONE) { this->handType = SK_HAND_TYPE_HOLDING_OCARINA; } break; case 27: this->animIndex = SK_ANIM_HIT_BY_BUBBLE; - if (gSaveContext.save.inventory.items[SLOT_OCARINA] == ITEM_NONE) { + if (gSaveContext.save.saveInfo.inventory.items[SLOT_OCARINA] == ITEM_NONE) { this->handType = SK_HAND_TYPE_HOLDING_OCARINA; } break; diff --git a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c index 8a9d26a4d..a0eefb83a 100644 --- a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c +++ b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c @@ -345,7 +345,7 @@ void func_808A1090(DoorShutter* this, PlayState* play) { if (this->unk_166 != 0) { Flags_SetSwitch(play, DOORSHUTTER_GET_7F(&this->actor)); if (this->doorType != 5) { - gSaveContext.save.inventory.dungeonKeys[gSaveContext.mapIndex]--; + gSaveContext.save.saveInfo.inventory.dungeonKeys[gSaveContext.mapIndex]--; Actor_PlaySfx(&this->actor, NA_SE_EV_CHAIN_KEY_UNLOCK); } else { Actor_PlaySfx(&this->actor, NA_SE_EV_CHAIN_KEY_UNLOCK_B); @@ -368,7 +368,7 @@ void func_808A1090(DoorShutter* this, PlayState* play) { } if (this->doorType == 6) { - if (gSaveContext.save.playerData.healthCapacity < (DOORSHUTTER_GET_1F(&this->actor) * 0x10)) { + if (gSaveContext.save.saveInfo.playerData.healthCapacity < (DOORSHUTTER_GET_1F(&this->actor) * 0x10)) { player->doorType = PLAYER_DOORTYPE_TALKING; this->actor.textId = 0x14FC; } diff --git a/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c b/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c index 01df27715..d942903a1 100644 --- a/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c +++ b/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c @@ -554,28 +554,28 @@ void func_808B9CE8(DoorWarp1* this, PlayState* play) { switch (play->sceneId) { case SCENE_MITURIN_BS: - gSaveContext.save.unk_ECC[0] = - (((void)0, gSaveContext.save.unk_ECC[0]) & 0xFFFFFF00) | (((u8)gSaveContext.save.unk_ECC[1]) & 0xFF); + gSaveContext.save.saveInfo.unk_EA8[0] = (((void)0, gSaveContext.save.saveInfo.unk_EA8[0]) & 0xFFFFFF00) | + (((u8)gSaveContext.save.saveInfo.unk_EA8[1]) & 0xFF); break; case SCENE_HAKUGIN_BS: - gSaveContext.save.unk_ECC[0] = (((void)0, gSaveContext.save.unk_ECC[0]) & 0xFFFF00FF) | - ((((u8)gSaveContext.save.unk_ECC[1]) & 0xFF) << 8); + gSaveContext.save.saveInfo.unk_EA8[0] = (((void)0, gSaveContext.save.saveInfo.unk_EA8[0]) & 0xFFFF00FF) | + ((((u8)gSaveContext.save.saveInfo.unk_EA8[1]) & 0xFF) << 8); break; case SCENE_INISIE_BS: - gSaveContext.save.unk_ECC[0] = (((void)0, gSaveContext.save.unk_ECC[0]) & 0xFF00FFFF) | - ((((u8)gSaveContext.save.unk_ECC[1]) & 0xFF) << 0x10); + gSaveContext.save.saveInfo.unk_EA8[0] = (((void)0, gSaveContext.save.saveInfo.unk_EA8[0]) & 0xFF00FFFF) | + ((((u8)gSaveContext.save.saveInfo.unk_EA8[1]) & 0xFF) << 0x10); break; case SCENE_SEA_BS: - gSaveContext.save.unk_ECC[0] = (((void)0, gSaveContext.save.unk_ECC[0]) & 0x00FFFFFF) | - ((((u8)gSaveContext.save.unk_ECC[1]) & 0xFF) << 0x18); + gSaveContext.save.saveInfo.unk_EA8[0] = (((void)0, gSaveContext.save.saveInfo.unk_EA8[0]) & 0x00FFFFFF) | + ((((u8)gSaveContext.save.saveInfo.unk_EA8[1]) & 0xFF) << 0x18); break; } - gSaveContext.save.unk_ECC[1] = - (gSaveContext.save.unk_ECC[1] & 0xFFFFFF00) | ((((u8)gSaveContext.save.unk_ECC[1]) + 1) & 0xFF); + gSaveContext.save.saveInfo.unk_EA8[1] = (gSaveContext.save.saveInfo.unk_EA8[1] & 0xFFFFFF00) | + ((((u8)gSaveContext.save.saveInfo.unk_EA8[1]) + 1) & 0xFF); Item_Give(play, func_808B849C(this, play) + (ITEM_REMAINS_ODOLWA - 1)); DoorWarp1_SetupAction(this, func_808B9E94); } @@ -658,19 +658,19 @@ void func_808BA10C(DoorWarp1* this, PlayState* play) { switch (phi_v0_2) { case 0: - phi_a0 = gSaveContext.save.unk_ECC[0] & 0xFF; + phi_a0 = gSaveContext.save.saveInfo.unk_EA8[0] & 0xFF; break; case 1: - phi_a0 = (gSaveContext.save.unk_ECC[0] & 0xFF00) >> 8; + phi_a0 = (gSaveContext.save.saveInfo.unk_EA8[0] & 0xFF00) >> 8; break; case 2: - phi_a0 = (gSaveContext.save.unk_ECC[0] & 0xFF0000) >> 0x10; + phi_a0 = (gSaveContext.save.saveInfo.unk_EA8[0] & 0xFF0000) >> 0x10; break; case 3: - phi_a0 = (gSaveContext.save.unk_ECC[0] & 0xFF000000) >> 0x18; + phi_a0 = (gSaveContext.save.saveInfo.unk_EA8[0] & 0xFF000000) >> 0x18; break; default: diff --git a/src/overlays/actors/ovl_Elf_Msg6/z_elf_msg6.c b/src/overlays/actors/ovl_Elf_Msg6/z_elf_msg6.c index 1507da5e2..d05c099e9 100644 --- a/src/overlays/actors/ovl_Elf_Msg6/z_elf_msg6.c +++ b/src/overlays/actors/ovl_Elf_Msg6/z_elf_msg6.c @@ -162,7 +162,7 @@ void ElfMsg6_Init(Actor* thisx, PlayState* play) { switch (ELFMSG6_GET_F0(&this->actor)) { case 0: - if (gSaveContext.save.inventory.items[ITEM_HOOKSHOT] != ITEM_HOOKSHOT) { + if (gSaveContext.save.saveInfo.inventory.items[ITEM_HOOKSHOT] != ITEM_HOOKSHOT) { Actor_Kill(&this->actor); return; } diff --git a/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c b/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c index 87f39a510..99779f20b 100644 --- a/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c +++ b/src/overlays/actors/ovl_En_Akindonuts/z_en_akindonuts.c @@ -300,7 +300,7 @@ s32 func_80BED208(EnAkindonuts* this) { return 0; } - if (gSaveContext.save.playerData.rupees < 10) { + if (gSaveContext.save.saveInfo.playerData.rupees < 10) { return 1; } @@ -322,7 +322,7 @@ s32 func_80BED27C(EnAkindonuts* this) { return 0; } - if (gSaveContext.save.playerData.rupees < 200) { + if (gSaveContext.save.saveInfo.playerData.rupees < 200) { return 1; } @@ -336,7 +336,7 @@ s32 func_80BED2FC(EnAkindonuts* this) { return 2; } - if (gSaveContext.save.playerData.rupees < 40) { + if (gSaveContext.save.saveInfo.playerData.rupees < 40) { return 1; } @@ -350,7 +350,7 @@ s32 func_80BED35C(EnAkindonuts* this) { return 2; } - if (gSaveContext.save.playerData.rupees < 100) { + if (gSaveContext.save.saveInfo.playerData.rupees < 100) { return 1; } diff --git a/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.c b/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.c index 97bc517c9..0f66d5cf4 100644 --- a/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.c +++ b/src/overlays/actors/ovl_En_Aob_01/z_en_aob_01.c @@ -305,7 +305,7 @@ void func_809C16DC(EnAob01* this, PlayState* play) { break; case PLAYER_FORM_HUMAN: - if (gSaveContext.save.playerData.rupees < 10) { + if (gSaveContext.save.saveInfo.playerData.rupees < 10) { this->unk_210 = 0x3524; this->unk_2D2 |= 0x10; } else { @@ -369,7 +369,7 @@ void func_809C16DC(EnAob01* this, PlayState* play) { break; case 0x3528: - if (gSaveContext.save.playerData.rupees < this->unk_434) { + if (gSaveContext.save.saveInfo.playerData.rupees < this->unk_434) { this->unk_210 = 0x3536; this->unk_2D2 |= 0x40; this->unk_43C = 1; @@ -434,7 +434,7 @@ void func_809C1D64(EnAob01* this, PlayState* play) { if (Message_ShouldAdvance(play)) { switch (play->msgCtx.choiceIndex) { case 0: - if (gSaveContext.save.playerData.rupees < 10) { + if (gSaveContext.save.saveInfo.playerData.rupees < 10) { play_sound(NA_SE_SY_ERROR); this->unk_210 = 0x3524; Message_StartTextbox(play, this->unk_210, &this->actor); @@ -904,7 +904,7 @@ void func_809C2FA0(void) { } for (i = 0; i < ARRAY_COUNT(sp44); i++) { - gSaveContext.save.weekEventReg[42 + i] = 0; + gSaveContext.save.saveInfo.weekEventReg[42 + i] = 0; sp44[i] = 0; } @@ -914,8 +914,8 @@ void func_809C2FA0(void) { if (i % 2) { sp44[index] |= orig2 << 0x4; - gSaveContext.save.weekEventReg[42 + index] = - ((void)0, gSaveContext.save.weekEventReg[42 + index]) | sp44[index]; + gSaveContext.save.saveInfo.weekEventReg[42 + index] = + ((void)0, gSaveContext.save.saveInfo.weekEventReg[42 + index]) | sp44[index]; } else { sp44[index] |= orig2; } diff --git a/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c b/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c index 5eed1b1d5..47df4b75b 100644 --- a/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c +++ b/src/overlays/actors/ovl_En_Bigslime/z_en_bigslime.c @@ -1614,7 +1614,7 @@ void EnBigslime_AttackPlayerInBigslime(EnBigslime* this, PlayState* play) { if (this->numGekkoMeleeAttacks == 0) { this->numGekkoPosGrabPlayer--; - if ((gSaveContext.save.playerData.health < 5) || (this->numGekkoPosGrabPlayer == 0)) { + if ((gSaveContext.save.saveInfo.playerData.health < 5) || (this->numGekkoPosGrabPlayer == 0)) { this->numGekkoPosGrabPlayer = 0; this->gekkoRot.y = this->actor.world.rot.y; this->gekkoPosOffset.x = Math_SinS(this->gekkoRot.y) * -50.0f; diff --git a/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c b/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c index 7217dbc65..6b54c387c 100644 --- a/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c +++ b/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c @@ -173,9 +173,9 @@ void func_809C4BC4(EnBomBowlMan* this, PlayState* play) { func_809C4B50(this); func_809C493C(this, 0, 1.0f); - for (i = 0; i < ARRAY_COUNT(gSaveContext.save.bomberCode); i++) { + for (i = 0; i < ARRAY_COUNT(gSaveContext.save.saveInfo.bomberCode); i++) { Math_Vec3f_Copy(&sp7C, &this->actor.home.pos); - code = gSaveContext.save.bomberCode[i]; + code = gSaveContext.save.saveInfo.bomberCode[i]; if (code == 1) { Math_Vec3f_Copy(&this->actor.world.pos, &D_809C61A0[i]); this->unk_2D8[code] = this; diff --git a/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.c b/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.c index 0c3bdf745..9591fbbb9 100644 --- a/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.c +++ b/src/overlays/actors/ovl_En_Bombers2/z_en_bombers2.c @@ -220,7 +220,8 @@ void func_80C04D8C(EnBombers2* this, PlayState* play) { s32 correctDigits; for (i = 0; i < ARRAY_COUNT(this->correctDigitSlots); i++) { - if (!(this->correctDigitSlots[i]) && (play->msgCtx.unk12054[i] == gSaveContext.save.bomberCode[i])) { + if (!(this->correctDigitSlots[i]) && + (play->msgCtx.unk12054[i] == gSaveContext.save.saveInfo.bomberCode[i])) { this->correctDigitSlots[i] = true; } } diff --git a/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c b/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c index 611c6144b..a1a1b0a32 100644 --- a/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c +++ b/src/overlays/actors/ovl_En_Bomjima/z_en_bomjima.c @@ -720,12 +720,12 @@ void func_80BFF9B0(EnBomjima* this, PlayState* play) { CLEAR_WEEKEVENTREG(WEEKEVENTREG_76_08); CLEAR_WEEKEVENTREG(WEEKEVENTREG_76_10); - gSaveContext.save.bombersCaughtNum = 0; - gSaveContext.save.bombersCaughtOrder[0] = 0; - gSaveContext.save.bombersCaughtOrder[1] = 0; - gSaveContext.save.bombersCaughtOrder[2] = 0; - gSaveContext.save.bombersCaughtOrder[3] = 0; - gSaveContext.save.bombersCaughtOrder[4] = 0; + gSaveContext.save.saveInfo.bombersCaughtNum = 0; + gSaveContext.save.saveInfo.bombersCaughtOrder[0] = 0; + gSaveContext.save.saveInfo.bombersCaughtOrder[1] = 0; + gSaveContext.save.saveInfo.bombersCaughtOrder[2] = 0; + gSaveContext.save.saveInfo.bombersCaughtOrder[3] = 0; + gSaveContext.save.saveInfo.bombersCaughtOrder[4] = 0; func_80BFE494(this, 3, 1.0f); this->unk_2C8 = 9; diff --git a/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.c b/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.c index fc11e86c1..7cc78d9cf 100644 --- a/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.c +++ b/src/overlays/actors/ovl_En_Bomjimb/z_en_bomjimb.c @@ -686,11 +686,12 @@ void func_80C02740(EnBomjimb* this, PlayState* play) { return; } - Message_StartTextbox(play, D_80C03230[((void)0, gSaveContext.save.bombersCaughtNum)], &this->actor); - gSaveContext.save.bombersCaughtOrder[((void)0, gSaveContext.save.bombersCaughtNum)] = this->unk_2C8 + 1; - gSaveContext.save.bombersCaughtNum++; + Message_StartTextbox(play, D_80C03230[((void)0, gSaveContext.save.saveInfo.bombersCaughtNum)], &this->actor); + gSaveContext.save.saveInfo.bombersCaughtOrder[((void)0, gSaveContext.save.saveInfo.bombersCaughtNum)] = + this->unk_2C8 + 1; + gSaveContext.save.saveInfo.bombersCaughtNum++; - if (gSaveContext.save.bombersCaughtNum > 4) { + if (gSaveContext.save.saveInfo.bombersCaughtNum > 4) { Audio_PlayFanfare(NA_BGM_GET_ITEM | 0x900); } else { Actor_PlaySfx(&this->actor, NA_SE_SY_PIECE_OF_HEART); @@ -761,7 +762,7 @@ void func_80C02A14(EnBomjimb* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_5) && Message_ShouldAdvance(play)) { Message_CloseTextbox(play); - if ((this->unk_2CA == 8) && (gSaveContext.save.bombersCaughtNum >= 5)) { + if ((this->unk_2CA == 8) && (gSaveContext.save.saveInfo.bombersCaughtNum >= 5)) { func_80C02CA4(this, play); } else { if (this->unk_2CA == 8) { diff --git a/src/overlays/actors/ovl_En_Dg/z_en_dg.c b/src/overlays/actors/ovl_En_Dg/z_en_dg.c index a173834c7..360cf2c49 100644 --- a/src/overlays/actors/ovl_En_Dg/z_en_dg.c +++ b/src/overlays/actors/ovl_En_Dg/z_en_dg.c @@ -426,10 +426,10 @@ void EnDg_UpdateTextId(EnDg* this) { // the range of 0x3538 to 0x3545. if (this->index % 2) { sRacetrackDogInfo[this->index].textId = - 0x3538 + ((gSaveContext.save.weekEventReg[42 + (this->index / 2)] & 0xF0) >> 4); + 0x3538 + ((gSaveContext.save.saveInfo.weekEventReg[42 + (this->index / 2)] & 0xF0) >> 4); } else { sRacetrackDogInfo[this->index].textId = - 0x3538 + (gSaveContext.save.weekEventReg[42 + (this->index / 2)] & 0x0F); + 0x3538 + (gSaveContext.save.saveInfo.weekEventReg[42 + (this->index / 2)] & 0x0F); } } else { Actor_Kill(&this->actor); diff --git a/src/overlays/actors/ovl_En_Door/z_en_door.c b/src/overlays/actors/ovl_En_Door/z_en_door.c index 478f071b3..aa9d9c89a 100644 --- a/src/overlays/actors/ovl_En_Door/z_en_door.c +++ b/src/overlays/actors/ovl_En_Door/z_en_door.c @@ -476,7 +476,7 @@ void func_80866B20(EnDoor* this, PlayState* play) { Animation_PlayOnceSetSpeed(&this->skelAnime, sAnimations[this->animIndex], (player->stateFlags1 & PLAYER_STATE1_8000000) ? 0.75f : 1.5f); if (this->unk_1A6 != 0) { - gSaveContext.save.inventory.dungeonKeys[gSaveContext.mapIndex]--; + gSaveContext.save.saveInfo.inventory.dungeonKeys[gSaveContext.mapIndex]--; Flags_SetSwitch(play, this->switchFlag); Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_CHAIN_KEY_UNLOCK); } @@ -499,7 +499,7 @@ void func_80866B20(EnDoor* this, PlayState* play) { player->doorDirection = playerPosRelToDoor.z >= 0.0f ? 1.0f : -1.0f; player->doorActor = &this->dyna.actor; if (this->unk_1A6 != 0) { - if (gSaveContext.save.inventory.dungeonKeys[((void)0, gSaveContext.mapIndex)] <= 0) { + if (gSaveContext.save.saveInfo.inventory.dungeonKeys[((void)0, gSaveContext.mapIndex)] <= 0) { player->doorType = PLAYER_DOORTYPE_TALKING; this->dyna.actor.textId = 0x1802; } else { diff --git a/src/overlays/actors/ovl_En_Elf/z_en_elf.c b/src/overlays/actors/ovl_En_Elf/z_en_elf.c index fd800c27f..751c24aab 100644 --- a/src/overlays/actors/ovl_En_Elf/z_en_elf.c +++ b/src/overlays/actors/ovl_En_Elf/z_en_elf.c @@ -355,8 +355,9 @@ void EnElf_Init(Actor* thisx, PlayState* play2) { this->elfMsg = NULL; this->unk_234 = NULL; this->unk_269 = 20; - if ((gSaveContext.save.playerData.tatlTimer >= 25800) || (gSaveContext.save.playerData.tatlTimer < 3000)) { - gSaveContext.save.playerData.tatlTimer = 0; + if ((gSaveContext.save.saveInfo.playerData.tatlTimer >= 25800) || + (gSaveContext.save.saveInfo.playerData.tatlTimer < 3000)) { + gSaveContext.save.saveInfo.playerData.tatlTimer = 0; } this->unk_266 = QuestHint_GetTatlTextId(play); break; @@ -1455,11 +1456,12 @@ void func_8089010C(Actor* thisx, PlayState* play) { if (temp_v0 != this->unk_266) { this->unk_266 = temp_v0; - gSaveContext.save.playerData.tatlTimer = 0; + gSaveContext.save.saveInfo.playerData.tatlTimer = 0; } if ((player->tatlTextId == 0) && (player->targetedActor == NULL)) { - if ((gSaveContext.save.playerData.tatlTimer >= 600) && (gSaveContext.save.playerData.tatlTimer <= 3000)) { + if ((gSaveContext.save.saveInfo.playerData.tatlTimer >= 600) && + (gSaveContext.save.saveInfo.playerData.tatlTimer <= 3000)) { player->tatlTextId = QuestHint_GetTatlTextId(play); } } @@ -1474,7 +1476,7 @@ void func_8089010C(Actor* thisx, PlayState* play) { if (thisx->textId == QuestHint_GetTatlTextId(play)) { this->fairyFlags |= 0x80; - gSaveContext.save.playerData.tatlTimer = 3001; + gSaveContext.save.saveInfo.playerData.tatlTimer = 3001; } this->fairyFlags |= 0x10; @@ -1505,10 +1507,10 @@ void func_8089010C(Actor* thisx, PlayState* play) { this->actionFunc(this, play); if (!Play_InCsMode(play)) { - if (gSaveContext.save.playerData.tatlTimer < 25800) { - gSaveContext.save.playerData.tatlTimer++; + if (gSaveContext.save.saveInfo.playerData.tatlTimer < 25800) { + gSaveContext.save.saveInfo.playerData.tatlTimer++; } else if (!(this->fairyFlags & 0x80)) { - gSaveContext.save.playerData.tatlTimer = 0; + gSaveContext.save.saveInfo.playerData.tatlTimer = 0; } } } diff --git a/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c b/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c index 2189bba99..7f6067d9c 100644 --- a/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c +++ b/src/overlays/actors/ovl_En_Elfgrp/z_en_elfgrp.c @@ -101,13 +101,13 @@ void EnElfgrp_Init(Actor* thisx, PlayState* play) { break; case ENELFGRP_2: - if (gSaveContext.save.playerData.isDoubleMagicAcquired == true) { + if (gSaveContext.save.saveInfo.playerData.isDoubleMagicAcquired == true) { func_80A396B0(this, 1); } break; case ENELFGRP_3: - if (gSaveContext.save.playerData.doubleDefense) { + if (gSaveContext.save.saveInfo.playerData.doubleDefense) { func_80A396B0(this, 1); } break; @@ -125,7 +125,7 @@ void EnElfgrp_Init(Actor* thisx, PlayState* play) { this->actor.textId = (this->unk_147 * 3) + 0x581; } else { this->actionFunc = func_80A3A8F8; - if ((gSaveContext.save.weekEventReg[9] & this->unk_146)) { + if ((gSaveContext.save.saveInfo.weekEventReg[9] & this->unk_146)) { this->actor.textId = (this->unk_147 * 3) + 0x580; } else { this->actor.textId = (this->unk_147 * 3) + 0x57F; @@ -158,13 +158,13 @@ void EnElfgrp_Init(Actor* thisx, PlayState* play) { func_80A396B0(this, 3); this->unk_14A |= 2; } - } else if (gSaveContext.save.playerData.isMagicAcquired == true) { + } else if (gSaveContext.save.saveInfo.playerData.isMagicAcquired == true) { func_80A396B0(this, 1); } } else { func_80A39DC8(this, play, 24, 0); this->actionFunc = func_80A3A8F8; - if ((gSaveContext.save.weekEventReg[9] & this->unk_146)) { + if ((gSaveContext.save.saveInfo.weekEventReg[9] & this->unk_146)) { this->actor.textId = 0x580; } else { this->actor.textId = 0x578; @@ -183,7 +183,7 @@ s32 func_80A39BD0(PlayState* play, s32 arg2) { return 0; } - return (((void)0, gSaveContext.save.inventory.strayFairies[arg2 - 1]) - func_80A39C1C(play, arg2)) + 10; + return (((void)0, gSaveContext.save.saveInfo.inventory.strayFairies[arg2 - 1]) - func_80A39C1C(play, arg2)) + 10; } s32 func_80A39C1C(PlayState* play, s32 arg1) { @@ -207,13 +207,13 @@ s32 func_80A39C1C(PlayState* play, s32 arg1) { } if (arg1 == 0) { - if (gSaveContext.save.permanentSceneFlags[play->sceneId].unk_14 & 1) { + if (gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 & 1) { return 25; } return 24; } - temp_v1 = (gSaveContext.save.permanentSceneFlags[play->sceneId].unk_14 >> (((arg1 - 1) * 5) + 1)) & 0x1F; + temp_v1 = (gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 >> (((arg1 - 1) * 5) + 1)) & 0x1F; if (temp_v1 < 10) { temp_v1 = 10; } else if (temp_v1 > 25) { @@ -229,13 +229,13 @@ void func_80A39CD4(PlayState* play, s32 arg1, s32 arg2) { if (arg1 == 0) { if (arg2 == 25) { - gSaveContext.save.permanentSceneFlags[play->sceneId].unk_14 |= 1; + gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 |= 1; } else { - gSaveContext.save.permanentSceneFlags[play->sceneId].unk_14 &= ~1; + gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 &= ~1; } } else { - gSaveContext.save.permanentSceneFlags[play->sceneId].unk_14 &= ~(0x1F << ((arg1 * 5) - 4)); - gSaveContext.save.permanentSceneFlags[play->sceneId].unk_14 |= arg2 << ((arg1 * 5) - 4); + gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 &= ~(0x1F << ((arg1 * 5) - 4)); + gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 |= arg2 << ((arg1 * 5) - 4); } } @@ -524,7 +524,7 @@ void func_80A3A7FC(EnElfgrp* this, PlayState* play) { s32 temp_s0; if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - gSaveContext.save.weekEventReg[9] |= this->unk_146; + gSaveContext.save.saveInfo.weekEventReg[9] |= this->unk_146; this->actionFunc = func_80A3A6F4; temp_s0 = func_80A39BD0(play, this->unk_147); func_80A39DC8(this, play, temp_s0, 1); @@ -544,7 +544,7 @@ void func_80A3A8F8(EnElfgrp* this, PlayState* play) { Player* player = GET_PLAYER(play); if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - gSaveContext.save.weekEventReg[9] |= this->unk_146; + gSaveContext.save.saveInfo.weekEventReg[9] |= this->unk_146; this->actionFunc = func_80A3A6F4; return; } @@ -563,7 +563,7 @@ void func_80A3A8F8(EnElfgrp* this, PlayState* play) { player->stateFlags1 |= PLAYER_STATE1_20000000; Message_StartTextbox(play, this->actor.textId, &this->actor); this->actionFunc = func_80A3A77C; - gSaveContext.save.weekEventReg[9] |= this->unk_146; + gSaveContext.save.saveInfo.weekEventReg[9] |= this->unk_146; } else { this->actor.flags |= ACTOR_FLAG_10000; func_800B8614(&this->actor, play, 100.0f); diff --git a/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c b/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c index 28b086fbb..542d739e6 100644 --- a/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c +++ b/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c @@ -490,10 +490,10 @@ void EnElforg_FreeFloating(EnElforg* this, PlayState* play) { } if (Map_IsInDungeonOrBossArea(play)) { - gSaveContext.save.inventory.strayFairies[gSaveContext.dungeonIndex]++; + gSaveContext.save.saveInfo.inventory.strayFairies[gSaveContext.dungeonIndex]++; // You found a Stray Fairy! Message_StartTextbox(play, 0x11, NULL); - if (gSaveContext.save.inventory.strayFairies[(void)0, gSaveContext.dungeonIndex] >= 15) { + if (gSaveContext.save.saveInfo.inventory.strayFairies[(void)0, gSaveContext.dungeonIndex] >= 15) { Audio_PlayFanfare(NA_BGM_GET_ITEM | 0x900); } } diff --git a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c index e91632700..4bbd4b5cc 100644 --- a/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c +++ b/src/overlays/actors/ovl_En_Fishing/z_en_fishing.c @@ -835,7 +835,7 @@ void EnFishing_Init(Actor* thisx, PlayState* play2) { if (sLinkAge != 1) { // HIGH_SCORE(HS_FISHING) from OoT - if (gSaveContext.save.unk_EE4 & 0x1000) { + if (gSaveContext.save.saveInfo.unk_EC0 & 0x1000) { D_8090CD08 = 0; } else { D_8090CD08 = 1; @@ -853,18 +853,18 @@ void EnFishing_Init(Actor* thisx, PlayState* play2) { SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 1); if (sLinkAge == 1) { - if (gSaveContext.save.unk_EE4 & 0x7F) { - D_809171CC = gSaveContext.save.unk_EE4 & 0x7F; + if (gSaveContext.save.saveInfo.unk_EC0 & 0x7F) { + D_809171CC = gSaveContext.save.saveInfo.unk_EC0 & 0x7F; } else { D_809171CC = 40.0f; } - } else if (gSaveContext.save.unk_EE4 & 0x7F000000) { - D_809171CC = (gSaveContext.save.unk_EE4 & 0x7F000000) >> 0x18; + } else if (gSaveContext.save.saveInfo.unk_EC0 & 0x7F000000) { + D_809171CC = (gSaveContext.save.saveInfo.unk_EC0 & 0x7F000000) >> 0x18; } else { D_809171CC = 45.0f; } - D_809171D1 = (gSaveContext.save.unk_EE4 & 0xFF0000) >> 0x10; + D_809171D1 = (gSaveContext.save.saveInfo.unk_EC0 & 0xFF0000) >> 0x10; if ((D_809171D1 & 7) == 7) { play->roomCtx.unk7A[0] = 90; D_809171CA = 1; @@ -2795,8 +2795,8 @@ void func_80903C60(EnFishing* this, u8 arg1) { void EnFishing_HandleAquariumDialog(EnFishing* this, PlayState* play) { if (sLinkAge == 1) { - if (gSaveContext.save.unk_EE4 & 0x7F) { - if (gSaveContext.save.unk_EE4 & 0x80) { + if (gSaveContext.save.saveInfo.unk_EC0 & 0x7F) { + if (gSaveContext.save.saveInfo.unk_EC0 & 0x80) { this->actor.textId = 0x40B1; } else { this->actor.textId = 0x4089; @@ -2804,8 +2804,8 @@ void EnFishing_HandleAquariumDialog(EnFishing* this, PlayState* play) { } else { this->actor.textId = 0x40AE; } - } else if (gSaveContext.save.unk_EE4 & 0x7F000000) { - if (gSaveContext.save.unk_EE4 & 0x80000000) { + } else if (gSaveContext.save.saveInfo.unk_EC0 & 0x7F000000) { + if (gSaveContext.save.saveInfo.unk_EC0 & 0x80000000) { this->actor.textId = 0x40B1; } else { this->actor.textId = 0x4089; @@ -3745,8 +3745,8 @@ void EnFishing_UpdateFish(Actor* thisx, PlayState* play2) { if ((D_80917272 == 0) && (D_80917274 == 0)) { // Assignment of OoT's D_80B7E086 here removed in MM - if (((sLinkAge == 1) && (gSaveContext.save.unk_EE4 & 0x400)) || - ((sLinkAge != 1) && (gSaveContext.save.unk_EE4 & 0x800))) { + if (((sLinkAge == 1) && (gSaveContext.save.saveInfo.unk_EC0 & 0x400)) || + ((sLinkAge != 1) && (gSaveContext.save.saveInfo.unk_EC0 & 0x800))) { // Assignment of OoT's D_80B7A67C here removed in MM, this is now an empty branch } } else { @@ -4685,7 +4685,7 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, PlayState* play) { case 0: if (D_809171FC == 0) { if (sLinkAge != 1) { - if ((gSaveContext.save.unk_EE4 & 0x100) && !(gSaveContext.save.unk_EE4 & 0x200)) { + if ((gSaveContext.save.saveInfo.unk_EC0 & 0x100) && !(gSaveContext.save.saveInfo.unk_EC0 & 0x200)) { this->actor.textId = 0x4093; } else { this->actor.textId = 0x407B; @@ -4703,9 +4703,9 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, PlayState* play) { if (D_809171FC == 0) { this->unk_154 = 1; if (sLinkAge != 1) { - gSaveContext.save.unk_EE4 |= 0x200; + gSaveContext.save.saveInfo.unk_EC0 |= 0x200; } else { - gSaveContext.save.unk_EE4 |= 0x100; + gSaveContext.save.saveInfo.unk_EC0 |= 0x100; } } else { this->unk_154 = 10; @@ -4721,7 +4721,7 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, PlayState* play) { switch (play->msgCtx.choiceIndex) { case 0: - if (gSaveContext.save.playerData.rupees >= 20) { + if (gSaveContext.save.saveInfo.playerData.rupees >= 20) { Rupees_ChangeBy(-20); if (!Rumble_ControllerOneHasRumblePak()) { this->actor.textId = 0x407C; @@ -4788,8 +4788,8 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, PlayState* play) { D_8090CD04 = 20; this->unk_154 = 0; - if ((gSaveContext.save.unk_EE4 & 0xFF0000) < 0xFF0000) { - gSaveContext.save.unk_EE4 += 0x10000; + if ((gSaveContext.save.saveInfo.unk_EC0 & 0xFF0000) < 0xFF0000) { + gSaveContext.save.saveInfo.unk_EC0 += 0x10000; } } break; @@ -4898,29 +4898,29 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, PlayState* play) { if (sLinkAge == 1) { f32 temp; - gSaveContext.save.unk_EE4 &= 0xFFFFFF00; - gSaveContext.save.unk_EE4 |= ((s16)D_809171CC & 0x7F); - temp = (gSaveContext.save.unk_EE4 & 0x7F000000) >> 0x18; + gSaveContext.save.saveInfo.unk_EC0 &= 0xFFFFFF00; + gSaveContext.save.saveInfo.unk_EC0 |= ((s16)D_809171CC & 0x7F); + temp = (gSaveContext.save.saveInfo.unk_EC0 & 0x7F000000) >> 0x18; if (temp < D_809171CC) { - gSaveContext.save.unk_EE4 &= 0xFFFFFF; - gSaveContext.save.unk_EE4 |= ((s16)D_809171CC & 0x7F) << 0x18; + gSaveContext.save.saveInfo.unk_EC0 &= 0xFFFFFF; + gSaveContext.save.saveInfo.unk_EC0 |= ((s16)D_809171CC & 0x7F) << 0x18; if (D_809171D2 == 2) { - gSaveContext.save.unk_EE4 |= 0x80000000; + gSaveContext.save.saveInfo.unk_EC0 |= 0x80000000; } } if (D_809171D2 == 2) { - gSaveContext.save.unk_EE4 |= 0x80; + gSaveContext.save.saveInfo.unk_EC0 |= 0x80; this->unk_154 = 0; break; } } else { - gSaveContext.save.unk_EE4 &= 0xFFFFFF; - gSaveContext.save.unk_EE4 |= ((s16)D_809171CC & 0x7F) << 0x18; + gSaveContext.save.saveInfo.unk_EC0 &= 0xFFFFFF; + gSaveContext.save.saveInfo.unk_EC0 |= ((s16)D_809171CC & 0x7F) << 0x18; if (D_809171D2 == 2) { - gSaveContext.save.unk_EE4 |= 0x80000000; + gSaveContext.save.saveInfo.unk_EC0 |= 0x80000000; this->unk_154 = 0; break; } @@ -4937,14 +4937,14 @@ void EnFishing_HandleOwnerDialog(EnFishing* this, PlayState* play) { } if (sLinkAge == 1) { - if ((D_809171CC >= 50.0f) && !(gSaveContext.save.unk_EE4 & 0x400)) { - gSaveContext.save.unk_EE4 |= 0x400; + if ((D_809171CC >= 50.0f) && !(gSaveContext.save.saveInfo.unk_EC0 & 0x400)) { + gSaveContext.save.saveInfo.unk_EC0 |= 0x400; getItemId = GI_HEART_PIECE; sSinkingLureLocation = Rand_ZeroFloat(3.999f) + 1.0f; } } else { - if ((D_809171CC >= 60.0f) && !(gSaveContext.save.unk_EE4 & 0x800)) { - gSaveContext.save.unk_EE4 |= 0x800; + if ((D_809171CC >= 60.0f) && !(gSaveContext.save.saveInfo.unk_EC0 & 0x800)) { + gSaveContext.save.saveInfo.unk_EC0 |= 0x800; getItemId = GI_SKULL_TOKEN; sSinkingLureLocation = Rand_ZeroFloat(3.999f) + 1.0f; } @@ -5107,9 +5107,9 @@ void EnFishing_UpdateOwner(Actor* thisx, PlayState* play2) { } if (D_8090CD08 == 0) { - gSaveContext.save.unk_EE4 |= 0x1000; + gSaveContext.save.saveInfo.unk_EC0 |= 0x1000; } else if (D_8090CD08 == 1) { - gSaveContext.save.unk_EE4 &= ~0x1000; + gSaveContext.save.saveInfo.unk_EC0 &= ~0x1000; } if (D_8090CCFC != 0) { diff --git a/src/overlays/actors/ovl_En_Fu/z_en_fu.c b/src/overlays/actors/ovl_En_Fu/z_en_fu.c index 6febd3dca..2626d1cbd 100644 --- a/src/overlays/actors/ovl_En_Fu/z_en_fu.c +++ b/src/overlays/actors/ovl_En_Fu/z_en_fu.c @@ -429,7 +429,7 @@ void func_80962588(EnFu* this, PlayState* play) { if (Message_ShouldAdvance(play) && (this->unk_552 == 0x2871)) { if (1) {} if (play->msgCtx.choiceIndex == 0) { - if (gSaveContext.save.playerData.rupees >= 10) { + if (gSaveContext.save.saveInfo.playerData.rupees >= 10) { func_8019F208(); Rupees_ChangeBy(-10); func_80963DE4(this, play); @@ -652,7 +652,7 @@ void func_80962A10(EnFu* this, PlayState* play) { this->unk_546 = 1; } - if ((gSaveContext.save.playerForm == PLAYER_FORM_DEKU) && gSaveContext.save.playerData.isMagicAcquired) { + if ((gSaveContext.save.playerForm == PLAYER_FORM_DEKU) && gSaveContext.save.saveInfo.playerData.isMagicAcquired) { Magic_Add(play, MAGIC_FILL_TO_CAPACITY); } @@ -1139,7 +1139,7 @@ void func_80963DE4(EnFu* this, PlayState* play) { } void func_80963EAC(EnFu* this, PlayState* play) { - if (gSaveContext.save.playerData.isMagicAcquired) { + if (gSaveContext.save.saveInfo.playerData.isMagicAcquired) { if (this->unk_540 == 1) { Message_StartTextbox(play, 0x2847, &this->actor); this->unk_552 = 0x2847; diff --git a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c index 3d75c729c..0575494c8 100644 --- a/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c +++ b/src/overlays/actors/ovl_En_Gb2/z_en_gb2.c @@ -163,7 +163,7 @@ u16 func_80B0F7FC(EnGb2* this) { return 0x14E4; } - if (gSaveContext.save.playerData.health > 48) { + if (gSaveContext.save.saveInfo.playerData.health > 48) { return 0x14D2; } @@ -171,7 +171,7 @@ u16 func_80B0F7FC(EnGb2* this) { return 0x14D3; case 0x14E4: - if (gSaveContext.save.playerData.health > 48) { + if (gSaveContext.save.saveInfo.playerData.health > 48) { return 0x14D2; } @@ -407,7 +407,7 @@ void func_80B0FFA8(EnGb2* this, PlayState* play) { if (this->unk_26E == 0x14D5) { switch (play->msgCtx.choiceIndex) { case 0: - if (gSaveContext.save.playerData.rupees < this->unk_288) { + if (gSaveContext.save.saveInfo.playerData.rupees < this->unk_288) { play_sound(NA_SE_SY_ERROR); this->unk_26E = 0x14D7; this->unk_26C |= 2; @@ -505,7 +505,7 @@ void func_80B10344(EnGb2* this, PlayState* play) { } } - if (gSaveContext.save.playerData.health < 49) { + if (gSaveContext.save.saveInfo.playerData.health < 49) { gSaveContext.timerStates[TIMER_ID_MINIGAME_1] = TIMER_STATE_STOP; SET_EVENTINF(EVENTINF_46); SET_EVENTINF(EVENTINF_45); @@ -575,7 +575,7 @@ void func_80B10634(EnGb2* this, PlayState* play) { } else if ((talkState == TEXT_STATE_CHOICE) && Message_ShouldAdvance(play)) { switch (play->msgCtx.choiceIndex) { case 0: - if (gSaveContext.save.playerData.rupees < this->unk_288) { + if (gSaveContext.save.saveInfo.playerData.rupees < this->unk_288) { play_sound(NA_SE_SY_ERROR); this->unk_26E = 0x14D7; this->unk_26C |= 2; diff --git a/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.c b/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.c index 350ce734c..fba0c1118 100644 --- a/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.c +++ b/src/overlays/actors/ovl_En_Ginko_Man/z_en_ginko_man.c @@ -89,7 +89,7 @@ void EnGinkoMan_Idle(EnGinkoMan* this, PlayState* play) { EnGinkoMan_SwitchAnimation(this, play); if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { - if ((gSaveContext.save.bankRupees & 0xFFFF) == 0) { + if ((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) == 0) { Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_LEGSMACKING); Message_StartTextbox(play, 0x44C, &this->actor); this->curTextId = 0x44C; // would you like to make an account @@ -153,7 +153,7 @@ void EnGinkoMan_DepositDialogue(EnGinkoMan* this, PlayState* play) { Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_LEGSMACKING); } - play->msgCtx.bankRupees = gSaveContext.save.bankRupees & 0xFFFF; + play->msgCtx.bankRupees = gSaveContext.save.saveInfo.bankRupees & 0xFFFF; Message_StartTextbox(play, 0x45A, &this->actor); this->curTextId = 0x45A; // "All right, little guy, now I've got a total of [rupees] from you!" } @@ -164,22 +164,22 @@ void EnGinkoMan_DepositDialogue(EnGinkoMan* this, PlayState* play) { this->curTextId = 0x44E; //" ...So, what'll it be? Deposit Rupees Don't deposit Rupees" break; case 0x45A: // "All right, little guy, now I've got a total of [rupees] from you!" - if (((gSaveContext.save.bankRupees & 0xFFFF) >= 200) && (this->previousBankValue < 200) && + if (((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) >= 200) && (this->previousBankValue < 200) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_59_40)) { SET_WEEKEVENTREG(WEEKEVENTREG_59_40); Message_StartTextbox(play, 0x45B, &this->actor); this->curTextId = 0x45B; // "What's this? You've already saved up 200 Rupees!?! - } else if (((gSaveContext.save.bankRupees & 0xFFFF) >= 1000) && ((this->previousBankValue) < 1000) && - !CHECK_WEEKEVENTREG(WEEKEVENTREG_59_80)) { + } else if (((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) >= 1000) && + ((this->previousBankValue) < 1000) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_59_80)) { SET_WEEKEVENTREG(WEEKEVENTREG_59_80); Message_StartTextbox(play, 0x45C, &this->actor); this->curTextId = 0x45C; // "What's this? You've already saved up 1000 Rupees!?! - } else if ((gSaveContext.save.bankRupees & 0xFFFF) >= 5000) { + } else if ((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) >= 5000) { if ((this->previousBankValue < 5000) && !CHECK_WEEKEVENTREG(WEEKEVENTREG_60_01)) { SET_WEEKEVENTREG(WEEKEVENTREG_60_01); Message_StartTextbox(play, 0x45D, &this->actor); this->curTextId = 0x45D; // "What's this? You've already saved up 5000 Rupees?! - } else if (this->previousBankValue < (s16)(gSaveContext.save.bankRupees & 0xFFFF)) { + } else if (this->previousBankValue < (s16)(gSaveContext.save.saveInfo.bankRupees & 0xFFFF)) { Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_SITTING); Message_StartTextbox(play, 0x45E, &this->actor); this->curTextId = @@ -221,7 +221,7 @@ void EnGinkoMan_DepositDialogue(EnGinkoMan* this, PlayState* play) { break; case 0x465: // "There! Now I'll know you when I see you!" Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_LEGSMACKING); - play->msgCtx.bankRupees = gSaveContext.save.bankRupees & 0xFFFF; + play->msgCtx.bankRupees = gSaveContext.save.saveInfo.bankRupees & 0xFFFF; Message_StartTextbox(play, 0x45A, &this->actor); this->curTextId = 0x45A; // "All right, little guy, now I've got a total of [rupees] from you!" break; @@ -237,10 +237,10 @@ void EnGinkoMan_DepositDialogue(EnGinkoMan* this, PlayState* play) { case 0x46C: // "Ah, yes...[Link], right? If I remember, you're the little guy who deposited [rupees]." case 0x47E: // "Your deposits total [rupees]." if (this->choiceDepositWithdrawl == GINKOMAN_CHOICE_DEPOSIT) { - if ((u32)(gSaveContext.save.bankRupees & 0xFFFF) >= 5000) { + if ((u32)(gSaveContext.save.saveInfo.bankRupees & 0xFFFF) >= 5000) { Message_StartTextbox(play, 0x45F, &this->actor); this->curTextId = 0x45F; // "Excuuuse me! But I can't take anymore deposits! - } else if (gSaveContext.save.playerData.rupees == 0) { + } else if (gSaveContext.save.saveInfo.playerData.rupees == 0) { Message_StartTextbox(play, 0x458, &this->actor); this->curTextId = 0x458; // "Hmm...You play mean jokes, little guy! You haven't even got a single Rupee! @@ -288,12 +288,12 @@ void EnGinkoMan_DepositDialogue(EnGinkoMan* this, PlayState* play) { case 0x473: // Use it wisely... case 0x474: // "Aw, you're taking out all that? If you spend it like that, it'll all be gone before you know // it!" - if ((gSaveContext.save.bankRupees & 0xFFFF) == 0) { + if ((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) == 0) { Message_StartTextbox(play, 0x478, &this->actor); // "Look, little guy, all the Rupees you deposited are gone, so you can't use that stamp anymore." this->curTextId = 0x478; } else { - play->msgCtx.bankRupees = gSaveContext.save.bankRupees & 0xFFFF; + play->msgCtx.bankRupees = gSaveContext.save.saveInfo.bankRupees & 0xFFFF; Message_StartTextbox(play, 0x45A, &this->actor); this->curTextId = 0x45A; // "All right, little guy, now I've got a total of [rupees] from you!" } @@ -319,12 +319,12 @@ void EnGinkoMan_WaitForDialogueInput(EnGinkoMan* this, PlayState* play) { switch (this->curTextId) { case 0x44E: // "...So, what'll it be? if (play->msgCtx.choiceIndex == GINKOMAN_CHOICE_YES) { - if ((gSaveContext.save.bankRupees & 0xFFFF) >= 5000) { + if ((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) >= 5000) { play_sound(NA_SE_SY_ERROR); Message_StartTextbox(play, 0x45F, &this->actor); this->curTextId = 0x45F; // bank full, cannot accept more } else { - if (gSaveContext.save.playerData.rupees > 0) { + if (gSaveContext.save.saveInfo.playerData.rupees > 0) { func_8019F208(); Message_StartTextbox(play, 0x44F, &this->actor); this->curTextId = 0x44F; // "All right! so..." @@ -342,7 +342,7 @@ void EnGinkoMan_WaitForDialogueInput(EnGinkoMan* this, PlayState* play) { break; case 0x452: // Really? are you really depositing rupees? if (play->msgCtx.choiceIndex == GINKOMAN_CHOICE_YES) { - if (gSaveContext.save.playerData.rupees < play->msgCtx.bankRupeesSelected) { + if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.bankRupeesSelected) { play_sound(NA_SE_SY_ERROR); Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_SITTING); Message_StartTextbox(play, 0x459, &this->actor); @@ -361,20 +361,20 @@ void EnGinkoMan_WaitForDialogueInput(EnGinkoMan* this, PlayState* play) { this->curTextId = 0x453; // That's it? That aint nothing at all } - if ((gSaveContext.save.bankRupees & 0xFFFF) == 0) { + if ((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) == 0) { this->isNewAccount = true; } Rupees_ChangeBy(-play->msgCtx.bankRupeesSelected); - this->previousBankValue = gSaveContext.save.bankRupees & 0xFFFF; - gSaveContext.save.bankRupees = - ((gSaveContext.save.bankRupees & 0xFFFF) + play->msgCtx.bankRupeesSelected) | - (gSaveContext.save.bankRupees & 0xFFFF0000); + this->previousBankValue = gSaveContext.save.saveInfo.bankRupees & 0xFFFF; + gSaveContext.save.saveInfo.bankRupees = + ((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) + play->msgCtx.bankRupeesSelected) | + (gSaveContext.save.saveInfo.bankRupees & 0xFFFF0000); } } else { // GINKOMAN_CHOICE_NO func_8019F230(); Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_SITTING); - if ((gSaveContext.save.bankRupees & 0xFFFF) == 0) { + if ((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) == 0) { Message_StartTextbox(play, 0x456, &this->actor); this->curTextId = 0x456; // Is that so? think about it } else { @@ -403,14 +403,14 @@ void EnGinkoMan_WaitForDialogueInput(EnGinkoMan* this, PlayState* play) { break; case 0x471: // Are you really withdrawling [selected rupees]? if (play->msgCtx.choiceIndex == GINKOMAN_CHOICE_YES) { - if ((s32)((gSaveContext.save.bankRupees & 0xFFFF)) < + if ((s32)((gSaveContext.save.saveInfo.bankRupees & 0xFFFF)) < ((s32)(play->msgCtx.bankRupeesSelected + this->serviceFee))) { play_sound(NA_SE_SY_ERROR); Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_LEGSMACKING); Message_StartTextbox(play, 0x476, &this->actor); this->curTextId = 0x476; // you dont have enough deposited to withdrawl } else if (CUR_CAPACITY(UPG_WALLET) < - (play->msgCtx.bankRupeesSelected + gSaveContext.save.playerData.rupees)) { + (play->msgCtx.bankRupeesSelected + gSaveContext.save.saveInfo.playerData.rupees)) { // check if wallet is big enough play_sound(NA_SE_SY_ERROR); Message_StartTextbox(play, 0x475, &this->actor); @@ -428,11 +428,11 @@ void EnGinkoMan_WaitForDialogueInput(EnGinkoMan* this, PlayState* play) { this->curTextId = 0x472; // It's a waste to take out such a tiny bit } - this->previousBankValue = (s16)(gSaveContext.save.bankRupees & 0xFFFF); - gSaveContext.save.bankRupees = - (((gSaveContext.save.bankRupees & 0xFFFF) - play->msgCtx.bankRupeesSelected) - + this->previousBankValue = (s16)(gSaveContext.save.saveInfo.bankRupees & 0xFFFF); + gSaveContext.save.saveInfo.bankRupees = + (((gSaveContext.save.saveInfo.bankRupees & 0xFFFF) - play->msgCtx.bankRupeesSelected) - this->serviceFee) | - (gSaveContext.save.bankRupees & 0xFFFF0000); + (gSaveContext.save.saveInfo.bankRupees & 0xFFFF0000); Rupees_ChangeBy(play->msgCtx.bankRupeesSelected); } } else { @@ -591,7 +591,7 @@ void EnGinkoMan_Stamp(EnGinkoMan* this, PlayState* play) { break; case 0x469: // "Excuse me, but let me take a look at you..." Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, GINKO_ANIM_SITTING); - play->msgCtx.bankRupees = (gSaveContext.save.bankRupees & 0xFFFF); + play->msgCtx.bankRupees = (gSaveContext.save.saveInfo.bankRupees & 0xFFFF); if ((CURRENT_DAY == 3) && (gSaveContext.save.isNight == true)) { Message_StartTextbox(play, 0x46C, &this->actor); this->curTextId = 0x46C; // "Ah, yes...[Link], right? diff --git a/src/overlays/actors/ovl_En_GirlA/z_en_girla.c b/src/overlays/actors/ovl_En_GirlA/z_en_girla.c index 28267a485..90e449be3 100644 --- a/src/overlays/actors/ovl_En_GirlA/z_en_girla.c +++ b/src/overlays/actors/ovl_En_GirlA/z_en_girla.c @@ -188,7 +188,7 @@ s32 EnGirlA_CanBuyPotionRed(PlayState* play, EnGirlA* this) { if (!Inventory_HasEmptyBottle()) { return CANBUY_RESULT_NEED_EMPTY_BOTTLE; } - if (gSaveContext.save.playerData.rupees < play->msgCtx.unk1206C) { + if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) { return CANBUY_RESULT_NEED_RUPEES; } return CANBUY_RESULT_SUCCESS_2; @@ -198,7 +198,7 @@ s32 EnGirlA_CanBuyPotionGreen(PlayState* play, EnGirlA* this) { if (!Inventory_HasEmptyBottle()) { return CANBUY_RESULT_NEED_EMPTY_BOTTLE; } - if (gSaveContext.save.playerData.rupees < play->msgCtx.unk1206C) { + if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) { return CANBUY_RESULT_NEED_RUPEES; } return CANBUY_RESULT_SUCCESS_2; @@ -214,7 +214,7 @@ s32 EnGirlA_CanBuyPotionBlue(PlayState* play, EnGirlA* this) { if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_53_10)) { return CANBUY_RESULT_SUCCESS_2; } - if (gSaveContext.save.playerData.rupees < play->msgCtx.unk1206C) { + if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) { return CANBUY_RESULT_NEED_RUPEES; } return CANBUY_RESULT_SUCCESS_2; @@ -227,7 +227,7 @@ s32 EnGirlA_CanBuyArrows(PlayState* play, EnGirlA* this) { if (AMMO(ITEM_BOW) >= CUR_CAPACITY(UPG_QUIVER)) { return CANBUY_RESULT_NO_ROOM_2; } - if (gSaveContext.save.playerData.rupees < play->msgCtx.unk1206C) { + if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) { return CANBUY_RESULT_NEED_RUPEES; } return CANBUY_RESULT_SUCCESS_2; @@ -237,7 +237,7 @@ s32 EnGirlA_CanBuyNuts(PlayState* play, EnGirlA* this) { if (CUR_CAPACITY(UPG_NUTS) != 0 && CUR_CAPACITY(UPG_NUTS) <= AMMO(ITEM_NUT)) { return CANBUY_RESULT_NO_ROOM; } - if (gSaveContext.save.playerData.rupees < play->msgCtx.unk1206C) { + if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) { return CANBUY_RESULT_NEED_RUPEES; } if (Item_CheckObtainability(ITEM_NUT) == ITEM_NONE) { @@ -250,7 +250,7 @@ s32 EnGirlA_CanBuyShieldHero(PlayState* play, EnGirlA* this) { if (GET_CUR_EQUIP_VALUE(EQUIP_TYPE_SHIELD) != EQUIP_VALUE_SHIELD_NONE) { return CANBUY_RESULT_NO_ROOM; } - if (gSaveContext.save.playerData.rupees < play->msgCtx.unk1206C) { + if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) { return CANBUY_RESULT_NEED_RUPEES; } return CANBUY_RESULT_SUCCESS_1; @@ -260,7 +260,7 @@ s32 EnGirlA_CanBuyStick(PlayState* play, EnGirlA* this) { if (CUR_CAPACITY(UPG_STICKS) != 0 && AMMO(ITEM_STICK) >= CUR_CAPACITY(UPG_STICKS)) { return CANBUY_RESULT_NO_ROOM; } - if (gSaveContext.save.playerData.rupees < play->msgCtx.unk1206C) { + if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) { return CANBUY_RESULT_NEED_RUPEES; } if (Item_CheckObtainability(ITEM_STICK) == ITEM_NONE) { @@ -270,7 +270,7 @@ s32 EnGirlA_CanBuyStick(PlayState* play, EnGirlA* this) { } s32 EnGirlA_CanBuyMaskAllNight(PlayState* play, EnGirlA* this) { - if (gSaveContext.save.playerData.rupees < play->msgCtx.unk1206C) { + if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) { return CANBUY_RESULT_NEED_RUPEES; } return CANBUY_RESULT_SUCCESS_2; @@ -280,7 +280,7 @@ s32 EnGirlA_CanBuyBombBagCuriosityShop(PlayState* play, EnGirlA* this) { if (GET_CUR_UPG_VALUE(UPG_BOMB_BAG) >= 2) { return CANBUY_RESULT_CANNOT_GET_NOW; } - if (gSaveContext.save.playerData.rupees < play->msgCtx.unk1206C) { + if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) { return CANBUY_RESULT_NEED_RUPEES; } return CANBUY_RESULT_SUCCESS_2; @@ -293,7 +293,7 @@ s32 EnGirlA_CanBuyBombBag20BombShop(PlayState* play, EnGirlA* this) { if (GET_CUR_UPG_VALUE(UPG_BOMB_BAG) >= 2) { return CANBUY_RESULT_HAVE_BETTER; } - if (gSaveContext.save.playerData.rupees < play->msgCtx.unk1206C) { + if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) { return CANBUY_RESULT_NEED_RUPEES; } return CANBUY_RESULT_SUCCESS_1; @@ -306,7 +306,7 @@ s32 EnGirlA_CanBuyBombBag30BombShop(PlayState* play, EnGirlA* this) { if (GET_CUR_UPG_VALUE(UPG_BOMB_BAG) == 3) { return CANBUY_RESULT_HAVE_BETTER; } - if (gSaveContext.save.playerData.rupees < play->msgCtx.unk1206C) { + if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) { return CANBUY_RESULT_NEED_RUPEES; } return CANBUY_RESULT_SUCCESS_1; @@ -319,7 +319,7 @@ s32 EnGirlA_CanBuyBombchus(PlayState* play, EnGirlA* this) { if (AMMO(ITEM_BOMBCHU) >= CUR_CAPACITY(UPG_BOMB_BAG)) { return CANBUY_RESULT_NO_ROOM; } - if (gSaveContext.save.playerData.rupees < play->msgCtx.unk1206C) { + if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) { return CANBUY_RESULT_NEED_RUPEES; } if (Item_CheckObtainability(ITEM_BOMBCHU) == ITEM_NONE) { @@ -335,21 +335,21 @@ s32 EnGirlA_CanBuyBombs(PlayState* play, EnGirlA* this) { if (AMMO(ITEM_BOMB) >= CUR_CAPACITY(UPG_BOMB_BAG)) { return CANBUY_RESULT_NO_ROOM; } - if (gSaveContext.save.playerData.rupees < play->msgCtx.unk1206C) { + if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) { return CANBUY_RESULT_NEED_RUPEES; } return CANBUY_RESULT_SUCCESS_2; } s32 EnGirlA_CanBuyBottleStolen(PlayState* play, EnGirlA* this) { - if (gSaveContext.save.playerData.rupees < play->msgCtx.unk1206C) { + if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) { return CANBUY_RESULT_NEED_RUPEES; } return CANBUY_RESULT_SUCCESS_1; } s32 EnGirlA_CanBuySword(PlayState* play, EnGirlA* this) { - if (gSaveContext.save.playerData.rupees < play->msgCtx.unk1206C) { + if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) { return CANBUY_RESULT_NEED_RUPEES; } return CANBUY_RESULT_SUCCESS_1; @@ -359,7 +359,7 @@ s32 EnGirlA_CanBuyShieldMirror(PlayState* play, EnGirlA* this) { if (GET_CUR_EQUIP_VALUE(EQUIP_TYPE_SHIELD) != EQUIP_VALUE_SHIELD_NONE) { return CANBUY_RESULT_NO_ROOM; } - if (gSaveContext.save.playerData.rupees < play->msgCtx.unk1206C) { + if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) { return CANBUY_RESULT_NEED_RUPEES; } return CANBUY_RESULT_SUCCESS_1; @@ -369,7 +369,7 @@ s32 EnGirlA_CanBuyFairy(PlayState* play, EnGirlA* this) { if (!Inventory_HasEmptyBottle()) { return CANBUY_RESULT_NEED_EMPTY_BOTTLE; } - if (gSaveContext.save.playerData.rupees < play->msgCtx.unk1206C) { + if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) { return CANBUY_RESULT_NEED_RUPEES; } return CANBUY_RESULT_SUCCESS_2; diff --git a/src/overlays/actors/ovl_En_Gs/z_en_gs.c b/src/overlays/actors/ovl_En_Gs/z_en_gs.c index b01427406..003ac43e0 100644 --- a/src/overlays/actors/ovl_En_Gs/z_en_gs.c +++ b/src/overlays/actors/ovl_En_Gs/z_en_gs.c @@ -112,7 +112,7 @@ s8 func_80997A90(s16 arg0, s16 arg1) { if ((arg0 == 0) || ((arg0 != 1) && (arg0 != 2) && (arg0 == 3))) { phi_v1 = 0; } else { - phi_v1 = (gSaveContext.save.unk_EC4 >> (arg1 * 3)) & 7; + phi_v1 = (gSaveContext.save.saveInfo.unk_EA0 >> (arg1 * 3)) & 7; } return phi_v1; } @@ -388,8 +388,8 @@ void func_809985B8(EnGs* this, PlayState* play) { Math_Vec3f_Sum(&player->actor.world.pos, &sp38, &player->actor.world.pos); Math_Vec3f_Copy(&player->actor.prevPos, &player->actor.world.pos); this->unk_200 = 0.0f; - gSaveContext.save.unk_EC4 = ((u32)gSaveContext.save.unk_EC4 & ~(7 << (this->unk_198 * 3))) | - ((this->unk_194 & 7) << (this->unk_198 * 3)); + gSaveContext.save.saveInfo.unk_EA0 = ((u32)gSaveContext.save.saveInfo.unk_EA0 & ~(7 << (this->unk_198 * 3))) | + ((this->unk_194 & 7) << (this->unk_198 * 3)); gossipStone = NULL; do { @@ -450,7 +450,7 @@ void func_8099874C(EnGs* this, PlayState* play) { phi_v0 = 1; for (i = 0; i < 4; i++) { - if (((gSaveContext.save.unk_EC4 >> (i * 3)) & 7) != (u32)this->unk_194) { + if (((gSaveContext.save.saveInfo.unk_EA0 >> (i * 3)) & 7) != (u32)this->unk_194) { phi_v0 = 0; } } diff --git a/src/overlays/actors/ovl_En_In/z_en_in.c b/src/overlays/actors/ovl_En_In/z_en_in.c index 27c8de507..8bedd48cf 100644 --- a/src/overlays/actors/ovl_En_In/z_en_in.c +++ b/src/overlays/actors/ovl_En_In/z_en_in.c @@ -576,7 +576,7 @@ s32 func_808F4150(PlayState* play, EnIn* this, s32 arg2, MessageContext* msgCtx) if (msgCtx->choiceIndex == 0) { func_8019F208(); - if (gSaveContext.save.playerData.rupees >= play->msgCtx.unk1206C) { + if (gSaveContext.save.saveInfo.playerData.rupees >= play->msgCtx.unk1206C) { Rupees_ChangeBy(-play->msgCtx.unk1206C); if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_57_01)) { func_808F4108(this, play, 0x3474); @@ -602,7 +602,7 @@ s32 func_808F4270(PlayState* play, EnIn* this, s32 arg2, MessageContext* msgCtx, if (msgCtx->choiceIndex == 0) { func_8019F208(); - if (gSaveContext.save.playerData.rupees >= fee) { + if (gSaveContext.save.saveInfo.playerData.rupees >= fee) { Rupees_ChangeBy(-fee); if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_57_01)) { if (arg4 != 0) { @@ -747,7 +747,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { case 0x3466: if (msgCtx->choiceIndex == 0) { func_8019F208(); - if (gSaveContext.save.playerData.rupees >= play->msgCtx.unk1206C) { + if (gSaveContext.save.saveInfo.playerData.rupees >= play->msgCtx.unk1206C) { if (Inventory_HasEmptyBottle()) { this->actionFunc = func_808F3C40; Actor_OfferGetItem(&this->actor, play, GI_MILK, 500.0f, 100.0f); @@ -999,7 +999,7 @@ s32 func_808F4414(PlayState* play, EnIn* this, s32 arg2) { case 0x3490: if (msgCtx->choiceIndex == 0) { func_8019F208(); - if (gSaveContext.save.playerData.rupees >= play->msgCtx.unk1206C) { + if (gSaveContext.save.saveInfo.playerData.rupees >= play->msgCtx.unk1206C) { if (Inventory_HasEmptyBottle()) { this->actionFunc = func_808F3C40; Actor_OfferGetItem(&this->actor, play, GI_MILK, 500.0f, 100.0f); diff --git a/src/overlays/actors/ovl_En_Jgame_Tsn/z_en_jgame_tsn.c b/src/overlays/actors/ovl_En_Jgame_Tsn/z_en_jgame_tsn.c index 8b3ec5956..263b4fab4 100644 --- a/src/overlays/actors/ovl_En_Jgame_Tsn/z_en_jgame_tsn.c +++ b/src/overlays/actors/ovl_En_Jgame_Tsn/z_en_jgame_tsn.c @@ -409,7 +409,7 @@ void func_80C14610(EnJgameTsn* this, PlayState* play) { void func_80C14684(EnJgameTsn* this, PlayState* play) { if (Message_ShouldAdvance(play)) { if (play->msgCtx.choiceIndex == 0) { - if (gSaveContext.save.playerData.rupees >= 20) { + if (gSaveContext.save.saveInfo.playerData.rupees >= 20) { Message_StartTextbox(play, 0x109E, &this->actor); this->unk_300 = 0x109E; Rupees_ChangeBy(-20); diff --git a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c index 0cfe7ae75..e4e01467f 100644 --- a/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c +++ b/src/overlays/actors/ovl_En_Kaizoku/z_en_kaizoku.c @@ -1764,14 +1764,14 @@ void func_80B89A08(EnKaizoku* this, PlayState* play) { Vec3f sp58; s32 i; - if (gSaveContext.save.playerData.health <= 0x10) { + if (gSaveContext.save.saveInfo.playerData.health <= 0x10) { this->swordCollider.info.toucher.damage = 0; } else { this->swordCollider.info.toucher.damage = 4; } if (!(this->swordCollider.base.atFlags & AT_BOUNCED) && (this->swordCollider.base.atFlags & AT_HIT)) { - if ((gSaveContext.save.playerData.health <= 0x10) && (this->action != KAIZOKU_ACTION_16)) { + if ((gSaveContext.save.saveInfo.playerData.health <= 0x10) && (this->action != KAIZOKU_ACTION_16)) { this->unk_2D0 = 2; this->subCamId = 0; this->picto.actor.flags |= ACTOR_FLAG_100000; @@ -1788,7 +1788,7 @@ void func_80B89A08(EnKaizoku* this, PlayState* play) { } else if ((this->action == KAIZOKU_ACTION_11) && (this->swordCollider.base.at == &GET_PLAYER(play)->actor)) { func_800B8D98(play, &this->picto.actor, 3.0f, this->picto.actor.yawTowardsPlayer, 1.0f); Health_ChangeBy(play, -0xC); - if ((gSaveContext.save.playerData.health <= 0x10) && (this->action != KAIZOKU_ACTION_16)) { + if ((gSaveContext.save.saveInfo.playerData.health <= 0x10) && (this->action != KAIZOKU_ACTION_16)) { Health_ChangeBy(play, 0x10); this->unk_2D0 = 2; this->subCamId = 0; diff --git a/src/overlays/actors/ovl_En_Kbt/z_en_kbt.c b/src/overlays/actors/ovl_En_Kbt/z_en_kbt.c index d2847a39d..b3b8ca295 100644 --- a/src/overlays/actors/ovl_En_Kbt/z_en_kbt.c +++ b/src/overlays/actors/ovl_En_Kbt/z_en_kbt.c @@ -71,12 +71,12 @@ void EnKbt_Destroy(Actor* thisx, PlayState* play) { } s32 func_80B33E64(PlayState* play) { - return gSaveContext.save.permanentSceneFlags[play->sceneId].unk_14 & 1; + return gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 & 1; } s32 func_80B33E8C(PlayState* play) { if ((CURRENT_DAY == 3) || - ((CURRENT_DAY == 2) && (gSaveContext.save.permanentSceneFlags[play->sceneId].unk_14 & 2))) { + ((CURRENT_DAY == 2) && (gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 & 2))) { return true; } return false; diff --git a/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.c b/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.c index ee7e0fe84..813852b44 100644 --- a/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.c +++ b/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.c @@ -224,7 +224,7 @@ void func_80B26758(EnKendoJs* this, PlayState* play) { Message_StartTextbox(play, 0x272C, &this->actor); this->unk_288 = 0x272C; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2); - } else if (gSaveContext.save.playerData.rupees < play->msgCtx.unk1206C) { + } else if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) { play_sound(NA_SE_SY_ERROR); Message_StartTextbox(play, 0x2718, &this->actor); this->unk_288 = 0x2718; @@ -242,7 +242,7 @@ void func_80B26758(EnKendoJs* this, PlayState* play) { Message_StartTextbox(play, 0x272C, &this->actor); this->unk_288 = 0x272C; Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2); - } else if (gSaveContext.save.playerData.rupees < play->msgCtx.unk12070) { + } else if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk12070) { play_sound(NA_SE_SY_ERROR); Message_StartTextbox(play, 0x2718, &this->actor); this->unk_288 = 0x2718; diff --git a/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c b/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c index 356af73f7..56fb61bed 100644 --- a/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c +++ b/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c @@ -151,33 +151,33 @@ ObjIcePoly* EnKgy_FindIceBlock(PlayState* play) { } void func_80B40C74(PlayState* play) { - gSaveContext.save.permanentSceneFlags[play->sceneId].unk_14 |= 1; + gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 |= 1; if (CURRENT_DAY == 1) { - gSaveContext.save.permanentSceneFlags[play->sceneId].unk_14 |= 2; + gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 |= 2; } else { - gSaveContext.save.permanentSceneFlags[play->sceneId].unk_14 &= ~2; + gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 &= ~2; } } void func_80B40D00(PlayState* play) { - gSaveContext.save.permanentSceneFlags[play->sceneId].unk_14 |= 4; + gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 |= 4; } void func_80B40D30(PlayState* play) { - gSaveContext.save.permanentSceneFlags[play->sceneId].unk_14 &= ~7; + gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 &= ~7; } s32 func_80B40D64(PlayState* play) { - return gSaveContext.save.permanentSceneFlags[play->sceneId].unk_14 & 1; + return gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 & 1; } s32 func_80B40D8C(PlayState* play) { - return gSaveContext.save.permanentSceneFlags[play->sceneId].unk_14 & 4; + return gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 & 4; } s32 func_80B40DB4(PlayState* play) { if ((CURRENT_DAY == 3) || - ((CURRENT_DAY == 2) && (gSaveContext.save.permanentSceneFlags[play->sceneId].unk_14 & 2))) { + ((CURRENT_DAY == 2) && (gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 & 2))) { return true; } return false; @@ -621,7 +621,7 @@ void func_80B41E18(EnKgy* this, PlayState* play) { case 0xC3B: switch (play->msgCtx.choiceIndex) { case 0: - if (gSaveContext.save.playerData.rupees < play->msgCtx.unk1206C) { + if (gSaveContext.save.saveInfo.playerData.rupees < play->msgCtx.unk1206C) { play_sound(NA_SE_SY_ERROR); func_80B40E74(this, play, 0xC3F); } else { diff --git a/src/overlays/actors/ovl_En_Kujiya/z_en_kujiya.c b/src/overlays/actors/ovl_En_Kujiya/z_en_kujiya.c index 1de7fc728..3e54fd0f9 100644 --- a/src/overlays/actors/ovl_En_Kujiya/z_en_kujiya.c +++ b/src/overlays/actors/ovl_En_Kujiya/z_en_kujiya.c @@ -46,13 +46,13 @@ ActorInit En_Kujiya_InitVars = { (ActorFunc)EnKujiya_Draw, }; -#define CHECK_LOTTERY_NUMBERS \ - (((u32)((void)0, gSaveContext.save.lotteryCodes[CURRENT_DAY - 1][0]) == \ - ((((void)0, gSaveContext.save.lotteryCodeGuess & 0xFFFF) & 0xF00) >> 8)) && \ - ((u32)((void)0, gSaveContext.save.lotteryCodes[CURRENT_DAY - 1][1]) == \ - ((((void)0, gSaveContext.save.lotteryCodeGuess & 0xFFFF) & 0xF0) >> 4)) && \ - ((u32)((void)0, gSaveContext.save.lotteryCodes[CURRENT_DAY - 1][2]) == \ - (((void)0, gSaveContext.save.lotteryCodeGuess & 0xFFFF) & 0xF))) +#define CHECK_LOTTERY_NUMBERS \ + (((u32)((void)0, gSaveContext.save.saveInfo.lotteryCodes[CURRENT_DAY - 1][0]) == \ + ((((void)0, gSaveContext.save.saveInfo.lotteryCodeGuess & 0xFFFF) & 0xF00) >> 8)) && \ + ((u32)((void)0, gSaveContext.save.saveInfo.lotteryCodes[CURRENT_DAY - 1][1]) == \ + ((((void)0, gSaveContext.save.saveInfo.lotteryCodeGuess & 0xFFFF) & 0xF0) >> 4)) && \ + ((u32)((void)0, gSaveContext.save.saveInfo.lotteryCodes[CURRENT_DAY - 1][2]) == \ + (((void)0, gSaveContext.save.saveInfo.lotteryCodeGuess & 0xFFFF) & 0xF))) void EnKujiya_Init(Actor* thisx, PlayState* play) { EnKujiya* this = THIS; @@ -111,7 +111,7 @@ void EnKujiya_Wait(EnKujiya* this, PlayState* play) { void EnKujiya_HandlePlayerChoice(EnKujiya* this, PlayState* play) { if (Message_ShouldAdvance(play)) { if (play->msgCtx.choiceIndex == 0) { // Buy - if (gSaveContext.save.playerData.rupees < 10) { + if (gSaveContext.save.saveInfo.playerData.rupees < 10) { play_sound(NA_SE_SY_ERROR); Message_StartTextbox(play, 0x2B62, &this->actor); this->textId = 0x2B62; // Not enough Rupees diff --git a/src/overlays/actors/ovl_En_Lift_Nuts/z_en_lift_nuts.c b/src/overlays/actors/ovl_En_Lift_Nuts/z_en_lift_nuts.c index 5b2028486..0bd619a9c 100644 --- a/src/overlays/actors/ovl_En_Lift_Nuts/z_en_lift_nuts.c +++ b/src/overlays/actors/ovl_En_Lift_Nuts/z_en_lift_nuts.c @@ -393,7 +393,7 @@ void func_80AEA1A0(EnLiftNuts* this, PlayState* play) { } } else { if (((void)0, gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2]) >= - gSaveContext.save.dekuPlaygroundHighScores[CURRENT_DAY - 1]) { + gSaveContext.save.saveInfo.dekuPlaygroundHighScores[CURRENT_DAY - 1]) { if (gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2] < 0x2EE0) { Message_StartTextbox(play, 0x27F9, &this->actor); this->textId = 0x27F9; @@ -452,7 +452,7 @@ void func_80AEA7A4(EnLiftNuts* this, PlayState* play) { switch (this->textId) { case 0x27E2: if (play->msgCtx.choiceIndex == 0) { // Yes - if (gSaveContext.save.playerData.rupees >= 10) { + if (gSaveContext.save.saveInfo.playerData.rupees >= 10) { func_8019F208(); Message_StartTextbox(play, 0x27E5, &this->actor); this->textId = 0x27E5; @@ -784,7 +784,7 @@ void func_80AEB294(EnLiftNuts* this, PlayState* play) { player->stateFlags1 |= PLAYER_STATE1_20; if (((void)0, gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2]) < - gSaveContext.save.dekuPlaygroundHighScores[CURRENT_DAY - 1]) { + gSaveContext.save.saveInfo.dekuPlaygroundHighScores[CURRENT_DAY - 1]) { Flags_SetSwitch(play, 0x40); } Flags_SetSwitch(play, 0x41); @@ -804,7 +804,7 @@ void func_80AEB428(EnLiftNuts* this, PlayState* play) { if (this->unk_354 == 10) { if (((void)0, gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2]) > - gSaveContext.save.dekuPlaygroundHighScores[CURRENT_DAY - 1]) { + gSaveContext.save.saveInfo.dekuPlaygroundHighScores[CURRENT_DAY - 1]) { Message_StartTextbox(play, 0x27EA, &this->actor); this->textId = 0x27EA; } else if (*this->ptr_1EC == 300) { diff --git a/src/overlays/actors/ovl_En_M_Thunder/z_en_m_thunder.c b/src/overlays/actors/ovl_En_M_Thunder/z_en_m_thunder.c index 3d97839a0..0586b2111 100644 --- a/src/overlays/actors/ovl_En_M_Thunder/z_en_m_thunder.c +++ b/src/overlays/actors/ovl_En_M_Thunder/z_en_m_thunder.c @@ -129,7 +129,7 @@ void EnMThunder_Init(Actor* thisx, PlayState* play) { this->isCharging = false; if (player->stateFlags2 & PLAYER_STATE2_20000) { - if (!gSaveContext.save.playerData.isMagicAcquired || (gSaveContext.magicState != MAGIC_STATE_IDLE) || + if (!gSaveContext.save.saveInfo.playerData.isMagicAcquired || (gSaveContext.magicState != MAGIC_STATE_IDLE) || ((ENMTHUNDER_GET_MAGIC_COST(&this->actor) != 0) && !Magic_Consume(play, ENMTHUNDER_GET_MAGIC_COST(&this->actor), MAGIC_CONSUME_NOW))) { AudioSfx_PlaySfx(NA_SE_IT_ROLLING_CUT, &player->actor.projectedPos, 4, &gSfxDefaultFreqAndVolScale, diff --git a/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c b/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c index 0a1ec063a..0bbbce26a 100644 --- a/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c +++ b/src/overlays/actors/ovl_En_Ma4/z_en_ma4.c @@ -907,9 +907,9 @@ void EnMa4_StartDialogue(EnMa4* this, PlayState* play) { this->textId = 0x336D; } else { time = gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2]; - if ((s32)time < (s32)gSaveContext.save.horseBackBalloonHighScore) { + if ((s32)time < (s32)gSaveContext.save.saveInfo.horseBackBalloonHighScore) { // [Score] New record! - gSaveContext.save.horseBackBalloonHighScore = time; + gSaveContext.save.saveInfo.horseBackBalloonHighScore = time; EnMa4_SetFaceExpression(this, 0, 3); Message_StartTextbox(play, 0x3350, &this->actor); this->textId = 0x3350; @@ -951,8 +951,8 @@ void EnMa4_StartDialogue(EnMa4* this, PlayState* play) { this->textId = 0x3356; } else { time = gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2]; - if ((s32)time < (s32)gSaveContext.save.horseBackBalloonHighScore) { - gSaveContext.save.horseBackBalloonHighScore = time; + if ((s32)time < (s32)gSaveContext.save.saveInfo.horseBackBalloonHighScore) { + gSaveContext.save.saveInfo.horseBackBalloonHighScore = time; EnMa4_SetFaceExpression(this, 0, 3); Message_StartTextbox(play, 0x3350, &this->actor); this->textId = 0x3350; @@ -978,9 +978,9 @@ void EnMa4_StartDialogue(EnMa4* this, PlayState* play) { this->textId = 0x3356; } else { time = gSaveContext.timerCurTimes[TIMER_ID_MINIGAME_2]; - if ((s32)time < (s32)gSaveContext.save.horseBackBalloonHighScore) { + if ((s32)time < (s32)gSaveContext.save.saveInfo.horseBackBalloonHighScore) { // New record - gSaveContext.save.horseBackBalloonHighScore = time; + gSaveContext.save.saveInfo.horseBackBalloonHighScore = time; Message_StartTextbox(play, 0x335D, &this->actor); this->textId = 0x335D; } else { diff --git a/src/overlays/actors/ovl_En_Mk/z_en_mk.c b/src/overlays/actors/ovl_En_Mk/z_en_mk.c index 054f39c81..930fb13d5 100644 --- a/src/overlays/actors/ovl_En_Mk/z_en_mk.c +++ b/src/overlays/actors/ovl_En_Mk/z_en_mk.c @@ -120,7 +120,7 @@ void EnMk_Destroy(Actor* thisx, PlayState* play) { } s32 func_80959524(PlayState* play) { - return gSaveContext.save.permanentSceneFlags[play->sceneId].unk_14 & 7; + return gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 & 7; } void func_8095954C(EnMk* this, PlayState* play) { diff --git a/src/overlays/actors/ovl_En_Mm3/z_en_mm3.c b/src/overlays/actors/ovl_En_Mm3/z_en_mm3.c index 291fa83ce..366bddef3 100644 --- a/src/overlays/actors/ovl_En_Mm3/z_en_mm3.c +++ b/src/overlays/actors/ovl_En_Mm3/z_en_mm3.c @@ -148,7 +148,7 @@ void func_80A6F3B4(EnMm3* this, PlayState* play) { case 0x278E: if (play->msgCtx.choiceIndex == 0) { if (this->unk_2B2 & 0x20) { - if (gSaveContext.save.playerData.rupees >= play->msgCtx.unk1206C) { + if (gSaveContext.save.saveInfo.playerData.rupees >= play->msgCtx.unk1206C) { func_8019F208(); Message_StartTextbox(play, 0x2790, &this->actor); this->unk_2B4 = 0x2790; @@ -174,7 +174,7 @@ void func_80A6F3B4(EnMm3* this, PlayState* play) { case 0x279A: if (play->msgCtx.choiceIndex == 0) { - if (gSaveContext.save.playerData.rupees >= play->msgCtx.unk1206C) { + if (gSaveContext.save.saveInfo.playerData.rupees >= play->msgCtx.unk1206C) { func_8019F208(); Message_StartTextbox(play, 0x2790, &this->actor); this->unk_2B4 = 0x2790; diff --git a/src/overlays/actors/ovl_En_Ms/z_en_ms.c b/src/overlays/actors/ovl_En_Ms/z_en_ms.c index d7a4fff3d..3cbf7e2ad 100644 --- a/src/overlays/actors/ovl_En_Ms/z_en_ms.c +++ b/src/overlays/actors/ovl_En_Ms/z_en_ms.c @@ -83,7 +83,7 @@ void EnMs_Destroy(Actor* thisx, PlayState* play) { void EnMs_Wait(EnMs* this, PlayState* play) { s16 yawDiff = this->actor.yawTowardsPlayer - this->actor.shape.rot.y; - if (gSaveContext.save.inventory.items[SLOT_MAGIC_BEANS] == ITEM_NONE) { + if (gSaveContext.save.saveInfo.inventory.items[SLOT_MAGIC_BEANS] == ITEM_NONE) { this->actor.textId = 0x92E; // "[...] You're the first customer [...]" } else { this->actor.textId = 0x932; // "[...] So you liked my Magic Beans [...]" @@ -118,7 +118,7 @@ void EnMs_Talk(EnMs* this, PlayState* play) { switch (play->msgCtx.choiceIndex) { case 0: // yes Message_CloseTextbox(play); - if (gSaveContext.save.playerData.rupees < 10) { + if (gSaveContext.save.saveInfo.playerData.rupees < 10) { play_sound(NA_SE_SY_ERROR); Message_ContinueTextbox(play, 0x935); // "[...] You don't have enough Rupees." } else if (AMMO(ITEM_MAGIC_BEANS) >= 20) { diff --git a/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.c b/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.c index c53a29232..01cbb5dda 100644 --- a/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.c +++ b/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.c @@ -81,7 +81,7 @@ void func_8093E518(EnOkarinaTag* this, PlayState* play) { var_v1 = this->unk14A; if (var_v1 == 6) { var_v1 = 0xA; - if (gSaveContext.save.unk_F65 == 0) { + if (gSaveContext.save.saveInfo.unk_F41 == 0) { return; } } diff --git a/src/overlays/actors/ovl_En_Osn/z_en_osn.c b/src/overlays/actors/ovl_En_Osn/z_en_osn.c index e9e12e311..e5540a292 100644 --- a/src/overlays/actors/ovl_En_Osn/z_en_osn.c +++ b/src/overlays/actors/ovl_En_Osn/z_en_osn.c @@ -443,10 +443,11 @@ s32 EnOsn_GetInitialMaskText(EnOsn* this, PlayState* play) { s32 EnOsn_GetInitialText(EnOsn* this, PlayState* play) { Player* player = GET_PLAYER(play); - if ((gSaveContext.save.inventory.items[SLOT_OCARINA] != ITEM_NONE) && CHECK_QUEST_ITEM(QUEST_SONG_HEALING)) { + if ((gSaveContext.save.saveInfo.inventory.items[SLOT_OCARINA] != ITEM_NONE) && + CHECK_QUEST_ITEM(QUEST_SONG_HEALING)) { if (this->stateFlags & OSN_STATE_SPECIAL_CONVERSTATION) { this->stateFlags |= OSN_STATE_END_CONVERSATION; - if ((gSaveContext.save.inventory.items[SLOT_OCARINA] != ITEM_NONE) && + if ((gSaveContext.save.saveInfo.inventory.items[SLOT_OCARINA] != ITEM_NONE) && (INV_CONTENT(ITEM_MASK_DEKU) == ITEM_MASK_DEKU)) { if ((gSaveContext.save.day == 3) && (gSaveContext.save.time >= CLOCK_TIME(5, 0)) && (gSaveContext.save.time < CLOCK_TIME(6, 0))) { @@ -692,11 +693,11 @@ void EnOsn_HandleConversation(EnOsn* this, PlayState* play) { void EnOsn_InitCutscene(EnOsn* this) { this->cutscene = this->actor.cutscene; - if ((gSaveContext.save.inventory.items[SLOT_OCARINA] == ITEM_NONE) || + if ((gSaveContext.save.saveInfo.inventory.items[SLOT_OCARINA] == ITEM_NONE) || (INV_CONTENT(ITEM_MASK_DEKU) == ITEM_MASK_DEKU)) { this->cutscene = ActorCutscene_GetAdditionalCutscene(this->cutscene); - if ((gSaveContext.save.inventory.items[SLOT_OCARINA] != ITEM_NONE) || + if ((gSaveContext.save.saveInfo.inventory.items[SLOT_OCARINA] != ITEM_NONE) || (INV_CONTENT(ITEM_MASK_DEKU) == ITEM_MASK_DEKU)) { this->cutscene = ActorCutscene_GetAdditionalCutscene(this->cutscene); } @@ -719,7 +720,8 @@ void EnOsn_ChooseAction(EnOsn* this, PlayState* play) { void EnOsn_Idle(EnOsn* this, PlayState* play) { s16 yaw = this->actor.yawTowardsPlayer - this->actor.shape.rot.y; - if ((gSaveContext.save.inventory.items[SLOT_OCARINA] != ITEM_NONE) && !CHECK_QUEST_ITEM(QUEST_SONG_HEALING)) { + if ((gSaveContext.save.saveInfo.inventory.items[SLOT_OCARINA] != ITEM_NONE) && + !CHECK_QUEST_ITEM(QUEST_SONG_HEALING)) { if (Actor_ProcessTalkRequest(&this->actor, &play->state)) { this->actionFunc = EnOsn_StartCutscene; } else if (((this->actor.xzDistToPlayer < 100.0f) || this->actor.isTargeted) && (yaw < 0x4000) && diff --git a/src/overlays/actors/ovl_En_Owl/z_en_owl.c b/src/overlays/actors/ovl_En_Owl/z_en_owl.c index fb4c54c3d..a5bb03a72 100644 --- a/src/overlays/actors/ovl_En_Owl/z_en_owl.c +++ b/src/overlays/actors/ovl_En_Owl/z_en_owl.c @@ -157,7 +157,7 @@ void EnOwl_Init(Actor* thisx, PlayState* play) { break; case ENOWL_GET_TYPE_2: - if (gSaveContext.save.inventory.items[ITEM_LENS] == ITEM_LENS) { + if (gSaveContext.save.saveInfo.inventory.items[ITEM_LENS] == ITEM_LENS) { Actor_Kill(&this->actor); return; } diff --git a/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c b/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c index c97a0362a..3ffde38cd 100644 --- a/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c +++ b/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c @@ -443,9 +443,10 @@ void EnRacedog_UpdateTextId(EnRacedog* this) { // range of 0x3539 to 0x3546. if (this->index % 2) { sDogInfo[this->index].textId = - (((gSaveContext.save.weekEventReg[42 + (this->index / 2)]) & 0xF0) >> 4) + 0x3539; + (((gSaveContext.save.saveInfo.weekEventReg[42 + (this->index / 2)]) & 0xF0) >> 4) + 0x3539; } else { - sDogInfo[this->index].textId = ((gSaveContext.save.weekEventReg[42 + (this->index / 2)]) & 0x0F) + 0x3539; + sDogInfo[this->index].textId = + ((gSaveContext.save.saveInfo.weekEventReg[42 + (this->index / 2)]) & 0x0F) + 0x3539; } // As a sanity check, this makes sure the text ID is something in the expected range of 0x3539 to 0x3546. diff --git a/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c b/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c index debcc77b9..14904e5b7 100644 --- a/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c +++ b/src/overlays/actors/ovl_En_S_Goro/z_en_s_goro.c @@ -701,7 +701,7 @@ u16 EnSGoro_BombshopGoron_NextTextId(EnSGoro* this, PlayState* play) { return 0x673; } this->powderKegPrice = play->msgCtx.unk1206C; - if (gSaveContext.save.playerData.rupees < this->powderKegPrice) { + if (gSaveContext.save.saveInfo.playerData.rupees < this->powderKegPrice) { this->actionFlags |= EN_S_GORO_ACTIONFLAG_LASTMESSAGE; this->actionFlags |= EN_S_GORO_ACTIONFLAG_TIRED; play_sound(NA_SE_SY_ERROR); diff --git a/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c b/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c index c7ccaec9a..1c82887b4 100644 --- a/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c +++ b/src/overlays/actors/ovl_En_Scopenuts/z_en_scopenuts.c @@ -334,7 +334,7 @@ void func_80BCB6D0(EnScopenuts* this, PlayState* play) { if (Message_ShouldAdvance(play)) { switch (play->msgCtx.choiceIndex) { case 0: - if (gSaveContext.save.playerData.rupees < this->unk_358) { + if (gSaveContext.save.saveInfo.playerData.rupees < this->unk_358) { play_sound(NA_SE_SY_ERROR); this->unk_33C = 0x1636; this->unk_328 |= 1; @@ -684,7 +684,8 @@ void EnScopenuts_Init(Actor* thisx, PlayState* play) { s32 pad; EnScopenuts* this = THIS; - if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_74_40) && (gSaveContext.save.inventory.items[ITEM_OCARINA] == ITEM_NONE)) { + if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_74_40) && + (gSaveContext.save.saveInfo.inventory.items[ITEM_OCARINA] == ITEM_NONE)) { Actor_Kill(&this->actor); return; } diff --git a/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.c b/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.c index ff12d798f..538f7d304 100644 --- a/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.c +++ b/src/overlays/actors/ovl_En_Sekihi/z_en_sekihi.c @@ -59,7 +59,8 @@ void EnSekihi_Init(Actor* thisx, PlayState* play) { return; } - if ((params == SEKIHI_TYPE_4) && (((gSaveContext.save.skullTokenCount & 0xFFFF)) >= SPIDER_HOUSE_TOKENS_REQUIRED)) { + if ((params == SEKIHI_TYPE_4) && + ((gSaveContext.save.saveInfo.skullTokenCount & 0xFFFF) >= SPIDER_HOUSE_TOKENS_REQUIRED)) { // For some reason the mikau grave sets the flag instead of something in the spider house on exit. SET_WEEKEVENTREG(WEEKEVENTREG_OCEANSIDE_SPIDER_HOUSE_BUYER_MOVED_IN); } diff --git a/src/overlays/actors/ovl_En_Sth/z_en_sth.c b/src/overlays/actors/ovl_En_Sth/z_en_sth.c index 3ff396920..f10d387d1 100644 --- a/src/overlays/actors/ovl_En_Sth/z_en_sth.c +++ b/src/overlays/actors/ovl_En_Sth/z_en_sth.c @@ -154,7 +154,7 @@ void EnSth_Init(Actor* thisx, PlayState* play) { break; case STH_TYPE_MOON_LOOKING: // South Clock Town - if ((gSaveContext.save.skullTokenCount & 0xFFFF) >= SPIDER_HOUSE_TOKENS_REQUIRED) { + if ((gSaveContext.save.saveInfo.skullTokenCount & 0xFFFF) >= SPIDER_HOUSE_TOKENS_REQUIRED) { Actor_Kill(&this->actor); return; } diff --git a/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.c b/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.c index b0c052b5c..01c8e96a5 100644 --- a/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.c +++ b/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.c @@ -327,7 +327,7 @@ void EnSyatekiMan_Swamp_HandleChoice(EnSyatekiMan* this, PlayState* play) { // You don't have a bow! Message_StartTextbox(play, 0xA30, &this->actor); this->prevTextId = 0xA30; - } else if (gSaveContext.save.playerData.rupees < 20) { + } else if (gSaveContext.save.saveInfo.playerData.rupees < 20) { play_sound(NA_SE_SY_ERROR); // You don't have enough rupees! @@ -627,7 +627,7 @@ void EnSyatekiMan_Town_HandleChoice(EnSyatekiMan* this, PlayState* play) { Message_StartTextbox(play, 0x3FA, &this->actor); this->prevTextId = 0x3FA; } - } else if (gSaveContext.save.playerData.rupees < 20) { + } else if (gSaveContext.save.saveInfo.playerData.rupees < 20) { play_sound(NA_SE_SY_ERROR); if (CURRENT_DAY != 3) { // You don't have a enough rupees! diff --git a/src/overlays/actors/ovl_En_Test4/z_en_test4.c b/src/overlays/actors/ovl_En_Test4/z_en_test4.c index 180bc59d4..59af8f7e8 100644 --- a/src/overlays/actors/ovl_En_Test4/z_en_test4.c +++ b/src/overlays/actors/ovl_En_Test4/z_en_test4.c @@ -436,7 +436,7 @@ void func_80A42AB8(EnTest4* this, PlayState* play) { if (CURRENT_DAY == 3) { if ((this->nextBellTime == CLOCK_TIME(0, 0)) && - ((gSaveContext.save.inventory.items[SLOT_OCARINA] == ITEM_NONE) || + ((gSaveContext.save.saveInfo.inventory.items[SLOT_OCARINA] == ITEM_NONE) || (play->sceneId == SCENE_CLOCKTOWER))) { s32 playerParams; u32 entrance = gSaveContext.save.entrance; diff --git a/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c b/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c index 491d94227..d472077ec 100644 --- a/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c +++ b/src/overlays/actors/ovl_En_Thiefbird/z_en_thiefbird.c @@ -223,10 +223,10 @@ s32 func_80C10B0C(EnThiefbird* this, PlayState* play) { s16 itemId2 = 0; for (; slotId < 24; slotId++) { - if ((gSaveContext.save.inventory.items[slotId] >= ITEM_BOTTLE) && - (gSaveContext.save.inventory.items[slotId] <= ITEM_POTION_BLUE)) { + if ((gSaveContext.save.saveInfo.inventory.items[slotId] >= ITEM_BOTTLE) && + (gSaveContext.save.saveInfo.inventory.items[slotId] <= ITEM_POTION_BLUE)) { isItemFound = true; - itemId2 = gSaveContext.save.inventory.items[slotId]; + itemId2 = gSaveContext.save.saveInfo.inventory.items[slotId]; break; } } @@ -343,7 +343,7 @@ s32 func_80C10E98(PlayState* play) { spAC = 0; } - sp98 = (gSaveContext.save.playerData.rupees / 4) * 3; + sp98 = (gSaveContext.save.saveInfo.playerData.rupees / 4) * 3; phi_s0_2 = sp98 / 50; sp5C = (-spB0 - spAC); sp5C += 8; diff --git a/src/overlays/actors/ovl_En_Tru_Mt/z_en_tru_mt.c b/src/overlays/actors/ovl_En_Tru_Mt/z_en_tru_mt.c index 9928146b1..09ec80172 100644 --- a/src/overlays/actors/ovl_En_Tru_Mt/z_en_tru_mt.c +++ b/src/overlays/actors/ovl_En_Tru_Mt/z_en_tru_mt.c @@ -352,9 +352,9 @@ void func_80B76980(EnTruMt* this, PlayState* play) { } else if (CHECK_EVENTINF(EVENTINF_40)) { u32 score = gSaveContext.minigameScore; - if (((gSaveContext.save.unk_EE8 & 0xFFFF0000) >> 0x10) < score) { - gSaveContext.save.unk_EE8 = - ((gSaveContext.minigameScore & 0xFFFF) << 0x10) | (gSaveContext.save.unk_EE8 & 0xFFFF); + if (((gSaveContext.save.saveInfo.unk_EC4 & 0xFFFF0000) >> 0x10) < score) { + gSaveContext.save.saveInfo.unk_EC4 = + ((gSaveContext.minigameScore & 0xFFFF) << 0x10) | (gSaveContext.save.saveInfo.unk_EC4 & 0xFFFF); SET_EVENTINF(EVENTINF_37); } } diff --git a/src/overlays/actors/ovl_En_Zod/z_en_zod.c b/src/overlays/actors/ovl_En_Zod/z_en_zod.c index 1ef62420b..7808e8089 100644 --- a/src/overlays/actors/ovl_En_Zod/z_en_zod.c +++ b/src/overlays/actors/ovl_En_Zod/z_en_zod.c @@ -115,7 +115,7 @@ void EnZod_Init(Actor* thisx, PlayState* play) { switch (ENZOD_GET_TYPE(thisx)) { case ENZOD_TYPE_1: - if (gSaveContext.save.weekEventReg[78] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_78_01)) { this->actionFunc = func_80BAFDB4; EnZod_ChangeAnim(this, ENZOD_ANIM_PLAYING_VIVACE, ANIMMODE_ONCE); this->actor.flags |= ACTOR_FLAG_10; @@ -124,7 +124,7 @@ void EnZod_Init(Actor* thisx, PlayState* play) { } this->actionFunc = func_80BAFB84; - if (!(gSaveContext.save.weekEventReg[55] & 0x80)) { + if (!(CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80))) { Actor_Kill(&this->actor); break; } @@ -137,7 +137,7 @@ void EnZod_Init(Actor* thisx, PlayState* play) { break; default: - if (gSaveContext.save.weekEventReg[55] & 0x80) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_55_80)) { Actor_Kill(&this->actor); } this->actor.flags |= ACTOR_FLAG_10; @@ -156,19 +156,19 @@ void EnZod_HandleRoomConversation(EnZod* this, PlayState* play) { if (gSaveContext.save.playerForm != PLAYER_FORM_ZORA) { textId = 0x1227; - if (gSaveContext.save.weekEventReg[32] & 8) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_32_08)) { textId = 0x1229; } else { - gSaveContext.save.weekEventReg[32] |= 8; + SET_WEEKEVENTREG(WEEKEVENTREG_32_08); } } else if (this->stateFlags & TIJO_STATE_1) { textId = 0x1225; } else { textId = 0x1219; - if (gSaveContext.save.weekEventReg[32] & 0x10) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_32_10)) { textId = 0x1226; } else { - gSaveContext.save.weekEventReg[32] |= 0x10; + SET_WEEKEVENTREG(WEEKEVENTREG_32_10); } this->stateFlags |= TIJO_STATE_1; } @@ -394,14 +394,14 @@ void func_80BAFA44(EnZod* this, PlayState* play) { u16 textId; if (gSaveContext.save.playerForm == PLAYER_FORM_ZORA) { - if (gSaveContext.save.weekEventReg[79] & 1) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_79_01)) { textId = 0x1253; } else { textId = 0x1251; - if (gSaveContext.save.weekEventReg[78] & 0x20) { + if (CHECK_WEEKEVENTREG(WEEKEVENTREG_78_20)) { textId = 0x1252; } else { - gSaveContext.save.weekEventReg[78] |= 0x20; + SET_WEEKEVENTREG(WEEKEVENTREG_78_20); } } } else { @@ -453,7 +453,7 @@ void EnZod_Rehearse(EnZod* this, PlayState* play) { play->nextEntrance = play->setupExitList[ENZOD_GET_ENTRANCE_INDEX(&this->actor)]; play->transitionType = TRANS_TYPE_FADE_WHITE_FAST; play->transitionTrigger = TRANS_TRIGGER_START; - gSaveContext.save.weekEventReg[78] &= (u8)~1; + CLEAR_WEEKEVENTREG(WEEKEVENTREG_78_01); } else { ActorCutscene_SetIntentToPlay(this->actor.cutscene); } @@ -471,7 +471,7 @@ void EnZod_SetupRehearse(EnZod* this, PlayState* play) { ActorCutscene_Stop(this->actor.cutscene); this->actor.cutscene = ActorCutscene_GetAdditionalCutscene(this->actor.cutscene); ActorCutscene_SetIntentToPlay(this->actor.cutscene); - gSaveContext.save.weekEventReg[79] |= 1; + SET_WEEKEVENTREG(WEEKEVENTREG_79_01); SEQCMD_PLAY_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0, NA_BGM_INDIGO_GO_SESSION | SEQ_FLAG_ASYNC); } } diff --git a/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.c b/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.c index 44a705539..17abb250d 100644 --- a/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.c +++ b/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.c @@ -206,13 +206,13 @@ void EnZoraegg_Destroy(Actor* thisx, PlayState* play) { } s32 func_80B319A8(PlayState* play) { - return gSaveContext.save.permanentSceneFlags[play->sceneId].unk_14 & 7; + return gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 & 7; } void func_80B319D0(PlayState* play, s32 arg1) { if ((arg1 < 8) && (arg1 >= 0)) { - gSaveContext.save.permanentSceneFlags[play->sceneId].unk_14 &= ~7; - gSaveContext.save.permanentSceneFlags[play->sceneId].unk_14 |= arg1; + gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 &= ~7; + gSaveContext.save.saveInfo.permanentSceneFlags[play->sceneId].unk_14 |= arg1; } } diff --git a/src/overlays/actors/ovl_En_Zot/z_en_zot.c b/src/overlays/actors/ovl_En_Zot/z_en_zot.c index 1eb6b020b..a24791080 100644 --- a/src/overlays/actors/ovl_En_Zot/z_en_zot.c +++ b/src/overlays/actors/ovl_En_Zot/z_en_zot.c @@ -467,7 +467,7 @@ void func_80B973BC(EnZot* this, PlayState* play) { break; case 0x1275: - if (gSaveContext.save.playerData.rupees < 10) { + if (gSaveContext.save.saveInfo.playerData.rupees < 10) { Message_ContinueTextbox(play, 0x1277); } else { Message_ContinueTextbox(play, 0x1278); diff --git a/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c b/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c index 94e9c85c1..00dd90b94 100644 --- a/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c +++ b/src/overlays/actors/ovl_Obj_Tokeidai/z_obj_tokeidai.c @@ -620,7 +620,7 @@ void ObjTokeidai_StaircaseToRooftop_Idle(ObjTokeidai* this, PlayState* play) { } s32 ObjTokeidai_IsPostFirstCycleFinalHours(ObjTokeidai* this, PlayState* play) { - if (gSaveContext.save.inventory.items[SLOT_OCARINA] == ITEM_NONE) { + if (gSaveContext.save.saveInfo.inventory.items[SLOT_OCARINA] == ITEM_NONE) { return false; } if (CURRENT_DAY == 3 && gSaveContext.save.time < CLOCK_TIME(6, 0)) { diff --git a/src/overlays/actors/ovl_Obj_Usiyane/z_obj_usiyane.c b/src/overlays/actors/ovl_Obj_Usiyane/z_obj_usiyane.c index d527e4937..81efe0fc5 100644 --- a/src/overlays/actors/ovl_Obj_Usiyane/z_obj_usiyane.c +++ b/src/overlays/actors/ovl_Obj_Usiyane/z_obj_usiyane.c @@ -45,9 +45,9 @@ s32 func_80C07C80(s32 arg0) { s32 var_v1; if (!(arg0 & 1)) { - var_v1 = gSaveContext.save.unk_E88[arg0 >> 1] & 0xFFFF; + var_v1 = gSaveContext.save.saveInfo.unk_E64[arg0 >> 1] & 0xFFFF; } else { - var_v1 = (gSaveContext.save.unk_E88[arg0 >> 1] & 0xFFFF0000) >> 0x10; + var_v1 = (gSaveContext.save.saveInfo.unk_E64[arg0 >> 1] & 0xFFFF0000) >> 0x10; } return var_v1 + CLOCK_TIME(2, 30); } diff --git a/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.h b/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.h index a2db609d6..241eb825d 100644 --- a/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.h +++ b/src/overlays/actors/ovl_Obj_Warpstone/z_obj_warpstone.h @@ -27,6 +27,6 @@ typedef struct ObjWarpstone { } ObjWarpstone; // size = 0x1B0 #define OBJ_WARPSTONE_GET_ID(thisx) ((u16)((thisx)->params & 0xF)) -#define OBJ_WARPSTONE_IS_ACTIVATED(owlId) (((void)0, gSaveContext.save.playerData.owlActivationFlags) & (u16)gBitFlags[(owlId)]) +#define OBJ_WARPSTONE_IS_ACTIVATED(owlId) (((void)0, gSaveContext.save.saveInfo.playerData.owlActivationFlags) & (u16)gBitFlags[(owlId)]) #endif // Z_OBJ_WARPSTONE_H diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_debug.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_debug.c index b8858b7ca..3d7e08221 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_debug.c +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_debug.c @@ -370,14 +370,14 @@ void KaleidoScope_DrawInventoryEditor(PlayState* play) { gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0); // Current Health Quarter (X / 4) - KaleidoScope_DrawDigit(play, (((void)0, gSaveContext.save.playerData.health) % 0x10) / 4, 217, 15); + KaleidoScope_DrawDigit(play, (((void)0, gSaveContext.save.saveInfo.playerData.health) % 0x10) / 4, 217, 15); gDPPipeSync(POLY_OPA_DISP++); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255); // Rupees counterDigits[0] = counterDigits[1] = counterDigits[2] = 0; - counterDigits[3] = gSaveContext.save.playerData.rupees; + counterDigits[3] = gSaveContext.save.saveInfo.playerData.rupees; while (counterDigits[3] >= 1000) { counterDigits[0]++; counterDigits[3] -= 1000; @@ -400,7 +400,7 @@ void KaleidoScope_DrawInventoryEditor(PlayState* play) { // Health capacity counterDigits[2] = 0; - counterDigits[3] = gSaveContext.save.playerData.healthCapacity / 0x10; + counterDigits[3] = gSaveContext.save.saveInfo.playerData.healthCapacity / 0x10; while (counterDigits[3] >= 10) { counterDigits[2]++; counterDigits[3] -= 10; @@ -411,7 +411,7 @@ void KaleidoScope_DrawInventoryEditor(PlayState* play) { // Health counterDigits[2] = 0; - counterDigits[3] = gSaveContext.save.playerData.health / 0x10; + counterDigits[3] = gSaveContext.save.saveInfo.playerData.health / 0x10; while (counterDigits[3] >= 10) { counterDigits[2]++; counterDigits[3] -= 10; @@ -431,10 +431,10 @@ void KaleidoScope_DrawInventoryEditor(PlayState* play) { (slot == SLOT_MAGIC_BEANS)) { counterDigits[3] = AMMO(gAmmoItems[slot]); } else if ((slot == SLOT_TRADE_DEED) || (slot == SLOT_TRADE_KEY_MAMA) || (slot == SLOT_TRADE_COUPLE)) { - counterDigits[3] = gSaveContext.save.inventory.items[slot]; + counterDigits[3] = gSaveContext.save.saveInfo.inventory.items[slot]; } else if (slot >= SLOT_BOTTLE_1) { - counterDigits[3] = gSaveContext.save.inventory.items[slot]; - } else if (gSaveContext.save.inventory.items[slot] != ITEM_NONE) { + counterDigits[3] = gSaveContext.save.saveInfo.inventory.items[slot]; + } else if (gSaveContext.save.saveInfo.inventory.items[slot] != ITEM_NONE) { counterDigits[3] = 1; } @@ -461,7 +461,7 @@ void KaleidoScope_DrawInventoryEditor(PlayState* play) { for (j = 0, rectLeft = 204; j < 6; j++, slot++, rectLeft += 14) { counterDigits[2] = 0; - if (gSaveContext.save.inventory.items[SLOT_MASK_POSTMAN + slot] != ITEM_NONE) { + if (gSaveContext.save.saveInfo.inventory.items[SLOT_MASK_POSTMAN + slot] != ITEM_NONE) { counterDigits[2] = 1; } KaleidoScope_DrawDigit(play, counterDigits[2], rectLeft, rectTop); @@ -583,7 +583,7 @@ void KaleidoScope_DrawInventoryEditor(PlayState* play) { // Dungeon Items // Loop over columns (i), (counterDigits[1] stores rectLeft) for (counterDigits[1] = 129, i = 0; i < 4; i++) { - counterDigits[2] = gSaveContext.save.inventory.dungeonItems[i] & gEquipMasks[0]; + counterDigits[2] = gSaveContext.save.saveInfo.inventory.dungeonItems[i] & gEquipMasks[0]; KaleidoScope_DrawDigit(play, counterDigits[2], counterDigits[1], 168); counterDigits[1] += 12; } @@ -591,7 +591,7 @@ void KaleidoScope_DrawInventoryEditor(PlayState* play) { // Stray Fairies // Loop over columns (i), (counterDigits[1] stores rectLeft) for (counterDigits[1] = 202, i = 0; i < 4; i++) { - counterDigits[3] = gSaveContext.save.inventory.strayFairies[i]; + counterDigits[3] = gSaveContext.save.saveInfo.inventory.strayFairies[i]; counterDigits[2] = counterDigits[3] / 10; counterDigits[3] -= counterDigits[2] * 10; if (counterDigits[2] != 0) { @@ -602,22 +602,22 @@ void KaleidoScope_DrawInventoryEditor(PlayState* play) { } // Double Defence - KaleidoScope_DrawDigit(play, gSaveContext.save.playerData.doubleDefense, 44, 202); + KaleidoScope_DrawDigit(play, gSaveContext.save.saveInfo.playerData.doubleDefense, 44, 202); // Magic - //! @bug should be gSaveContext.save.playerData.doubleMagic - KaleidoScope_DrawDigit(play, gSaveContext.save.playerData.doubleDefense, 75, 202); + //! @bug should be gSaveContext.save.saveInfo.playerData.doubleMagic + KaleidoScope_DrawDigit(play, gSaveContext.save.saveInfo.playerData.doubleDefense, 75, 202); // Lottery // Loop over columns (i), (counterDigits[1] stores rectLeft) for (counterDigits[1] = 139, i = 0; i < 3; i++) { - counterDigits[2] = gSaveContext.save.lotteryCodes[0][i]; + counterDigits[2] = gSaveContext.save.saveInfo.lotteryCodes[0][i]; KaleidoScope_DrawDigit(play, counterDigits[2], counterDigits[1], 184); - counterDigits[2] = gSaveContext.save.lotteryCodes[1][i]; + counterDigits[2] = gSaveContext.save.saveInfo.lotteryCodes[1][i]; KaleidoScope_DrawDigit(play, counterDigits[2], counterDigits[1], 198); - counterDigits[2] = gSaveContext.save.lotteryCodes[2][i]; + counterDigits[2] = gSaveContext.save.saveInfo.lotteryCodes[2][i]; KaleidoScope_DrawDigit(play, counterDigits[2], counterDigits[1], 212); counterDigits[1] += 12; @@ -626,7 +626,7 @@ void KaleidoScope_DrawInventoryEditor(PlayState* play) { // Oceanside Spider House Mask Order // Loop over columns (i), (counterDigits[1] stores rectLeft) for (counterDigits[1] = 217, i = 0; i < 6; i++) { - counterDigits[2] = gSaveContext.save.spiderHouseMaskOrder[i]; + counterDigits[2] = gSaveContext.save.saveInfo.spiderHouseMaskOrder[i]; KaleidoScope_DrawDigit(play, counterDigits[2], counterDigits[1], 186); counterDigits[1] += 12; @@ -635,7 +635,7 @@ void KaleidoScope_DrawInventoryEditor(PlayState* play) { // Bombers code // Loop over columns (i), (counterDigits[1] stores rectLeft) for (counterDigits[1] = 220, i = 0; i < 5; i++) { - counterDigits[2] = gSaveContext.save.bomberCode[i]; + counterDigits[2] = gSaveContext.save.saveInfo.bomberCode[i]; KaleidoScope_DrawDigit(play, counterDigits[2], counterDigits[1], 210); counterDigits[1] += 12; @@ -709,24 +709,24 @@ void KaleidoScope_UpdateInventoryEditor(PlayState* play) { case INV_EDITOR_SECTION_RUPEE: // Rupees if (CHECK_BTN_ALL(input->press.button, BTN_CUP)) { - gSaveContext.save.playerData.rupees -= 100; - if (gSaveContext.save.playerData.rupees < 0) { - gSaveContext.save.playerData.rupees = 0; + gSaveContext.save.saveInfo.playerData.rupees -= 100; + if (gSaveContext.save.saveInfo.playerData.rupees < 0) { + gSaveContext.save.saveInfo.playerData.rupees = 0; } } else if (CHECK_BTN_ALL(input->press.button, BTN_CDOWN)) { - gSaveContext.save.playerData.rupees += 100; - if (gSaveContext.save.playerData.rupees >= 9999) { - gSaveContext.save.playerData.rupees = 9999; + gSaveContext.save.saveInfo.playerData.rupees += 100; + if (gSaveContext.save.saveInfo.playerData.rupees >= 9999) { + gSaveContext.save.saveInfo.playerData.rupees = 9999; } } else if (CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) { - gSaveContext.save.playerData.rupees--; - if (gSaveContext.save.playerData.rupees < 0) { - gSaveContext.save.playerData.rupees = 0; + gSaveContext.save.saveInfo.playerData.rupees--; + if (gSaveContext.save.saveInfo.playerData.rupees < 0) { + gSaveContext.save.saveInfo.playerData.rupees = 0; } } else if (CHECK_BTN_ALL(input->press.button, BTN_CRIGHT)) { - gSaveContext.save.playerData.rupees++; - if (gSaveContext.save.playerData.rupees >= 9999) { - gSaveContext.save.playerData.rupees = 9999; + gSaveContext.save.saveInfo.playerData.rupees++; + if (gSaveContext.save.saveInfo.playerData.rupees >= 9999) { + gSaveContext.save.saveInfo.playerData.rupees = 9999; } } break; @@ -734,15 +734,15 @@ void KaleidoScope_UpdateInventoryEditor(PlayState* play) { case INV_EDITOR_SECTION_HEALTH_CAPACITY: // Health Capacity if (CHECK_BTN_ALL(input->press.button, BTN_CUP) || CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) { - gSaveContext.save.playerData.healthCapacity -= 0x10; - if (gSaveContext.save.playerData.healthCapacity < 0x30) { - gSaveContext.save.playerData.healthCapacity = 0x30; + gSaveContext.save.saveInfo.playerData.healthCapacity -= 0x10; + if (gSaveContext.save.saveInfo.playerData.healthCapacity < 0x30) { + gSaveContext.save.saveInfo.playerData.healthCapacity = 0x30; } } else if (CHECK_BTN_ALL(input->press.button, BTN_CDOWN) || CHECK_BTN_ALL(input->press.button, BTN_CRIGHT)) { - gSaveContext.save.playerData.healthCapacity += 0x10; - if (gSaveContext.save.playerData.healthCapacity >= 0x140) { - gSaveContext.save.playerData.healthCapacity = 0x140; + gSaveContext.save.saveInfo.playerData.healthCapacity += 0x10; + if (gSaveContext.save.saveInfo.playerData.healthCapacity >= 0x140) { + gSaveContext.save.saveInfo.playerData.healthCapacity = 0x140; } } break; @@ -806,48 +806,48 @@ void KaleidoScope_UpdateInventoryEditor(PlayState* play) { } else if (slot == SLOT_TRADE_DEED) { if (CHECK_BTN_ALL(input->press.button, BTN_CRIGHT)) { if (INV_CONTENT(ITEM_MOON_TEAR) == ITEM_NONE) { - gSaveContext.save.inventory.items[slot] = ITEM_MOON_TEAR; + gSaveContext.save.saveInfo.inventory.items[slot] = ITEM_MOON_TEAR; } else if ((INV_CONTENT(ITEM_MOON_TEAR) >= ITEM_MOON_TEAR) && (INV_CONTENT(ITEM_MOON_TEAR) <= ITEM_DEED_MOUNTAIN)) { - gSaveContext.save.inventory.items[slot] = INV_CONTENT(ITEM_MOON_TEAR) + 1; + gSaveContext.save.saveInfo.inventory.items[slot] = INV_CONTENT(ITEM_MOON_TEAR) + 1; } } else if (CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) { if (INV_CONTENT(ITEM_MOON_TEAR) == ITEM_NONE) { - gSaveContext.save.inventory.items[slot] = ITEM_DEED_OCEAN; + gSaveContext.save.saveInfo.inventory.items[slot] = ITEM_DEED_OCEAN; } else if ((INV_CONTENT(ITEM_MOON_TEAR) >= ITEM_DEED_LAND) && (INV_CONTENT(ITEM_MOON_TEAR) <= ITEM_DEED_OCEAN)) { - gSaveContext.save.inventory.items[slot] = INV_CONTENT(ITEM_MOON_TEAR) - 1; + gSaveContext.save.saveInfo.inventory.items[slot] = INV_CONTENT(ITEM_MOON_TEAR) - 1; } } } else if (slot == SLOT_TRADE_KEY_MAMA) { if (CHECK_BTN_ALL(input->press.button, BTN_CRIGHT)) { if (INV_CONTENT(ITEM_ROOM_KEY) == ITEM_NONE) { - gSaveContext.save.inventory.items[slot] = ITEM_ROOM_KEY; + gSaveContext.save.saveInfo.inventory.items[slot] = ITEM_ROOM_KEY; } else if ((INV_CONTENT(ITEM_ROOM_KEY) >= ITEM_ROOM_KEY) && (INV_CONTENT(ITEM_ROOM_KEY) <= ITEM_ROOM_KEY)) { - gSaveContext.save.inventory.items[slot] = INV_CONTENT(ITEM_ROOM_KEY) + 1; + gSaveContext.save.saveInfo.inventory.items[slot] = INV_CONTENT(ITEM_ROOM_KEY) + 1; } } else if (CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) { if (INV_CONTENT(ITEM_ROOM_KEY) == ITEM_NONE) { - gSaveContext.save.inventory.items[slot] = ITEM_LETTER_MAMA; + gSaveContext.save.saveInfo.inventory.items[slot] = ITEM_LETTER_MAMA; } else if ((INV_CONTENT(ITEM_ROOM_KEY) >= ITEM_LETTER_MAMA) && (INV_CONTENT(ITEM_ROOM_KEY) <= ITEM_LETTER_MAMA)) { - gSaveContext.save.inventory.items[slot] = INV_CONTENT(ITEM_ROOM_KEY) - 1; + gSaveContext.save.saveInfo.inventory.items[slot] = INV_CONTENT(ITEM_ROOM_KEY) - 1; } } } else if (CHECK_BTN_ALL(input->press.button, BTN_CRIGHT)) { if (INV_CONTENT(ITEM_LETTER_TO_KAFEI) == ITEM_NONE) { - gSaveContext.save.inventory.items[slot] = ITEM_LETTER_TO_KAFEI; + gSaveContext.save.saveInfo.inventory.items[slot] = ITEM_LETTER_TO_KAFEI; } else if ((INV_CONTENT(ITEM_LETTER_TO_KAFEI) >= ITEM_LETTER_TO_KAFEI) && (INV_CONTENT(ITEM_LETTER_TO_KAFEI) <= ITEM_LETTER_TO_KAFEI)) { - gSaveContext.save.inventory.items[slot] = INV_CONTENT(ITEM_LETTER_TO_KAFEI) + 1; + gSaveContext.save.saveInfo.inventory.items[slot] = INV_CONTENT(ITEM_LETTER_TO_KAFEI) + 1; } } else if (CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) { if (INV_CONTENT(ITEM_LETTER_TO_KAFEI) == ITEM_NONE) { - gSaveContext.save.inventory.items[slot] = ITEM_PENDANT_OF_MEMORIES; + gSaveContext.save.saveInfo.inventory.items[slot] = ITEM_PENDANT_OF_MEMORIES; } else if ((INV_CONTENT(ITEM_LETTER_TO_KAFEI) >= ITEM_PENDANT_OF_MEMORIES) && (INV_CONTENT(ITEM_LETTER_TO_KAFEI) <= ITEM_PENDANT_OF_MEMORIES)) { - gSaveContext.save.inventory.items[slot] = INV_CONTENT(ITEM_LETTER_TO_KAFEI) - 1; + gSaveContext.save.saveInfo.inventory.items[slot] = INV_CONTENT(ITEM_LETTER_TO_KAFEI) - 1; } } } else if ((slot >= SLOT_BOTTLE_1) && (slot <= SLOT_BOTTLE_6)) { @@ -855,18 +855,20 @@ void KaleidoScope_UpdateInventoryEditor(PlayState* play) { value = ITEM_BOTTLE + slot - SLOT_BOTTLE_1; Inventory_DeleteItem(value, SLOT(ITEM_BOTTLE) + slot - SLOT_BOTTLE_1); } else if (CHECK_BTN_ALL(input->press.button, BTN_CRIGHT)) { - if (gSaveContext.save.inventory.items[slot] == ITEM_NONE) { - gSaveContext.save.inventory.items[slot] = ITEM_BOTTLE; - } else if ((gSaveContext.save.inventory.items[slot] >= ITEM_BOTTLE) && - (gSaveContext.save.inventory.items[slot] <= ITEM_HYLIAN_LOACH)) { - gSaveContext.save.inventory.items[slot] = gSaveContext.save.inventory.items[slot] + 1; + if (gSaveContext.save.saveInfo.inventory.items[slot] == ITEM_NONE) { + gSaveContext.save.saveInfo.inventory.items[slot] = ITEM_BOTTLE; + } else if ((gSaveContext.save.saveInfo.inventory.items[slot] >= ITEM_BOTTLE) && + (gSaveContext.save.saveInfo.inventory.items[slot] <= ITEM_HYLIAN_LOACH)) { + gSaveContext.save.saveInfo.inventory.items[slot] = + gSaveContext.save.saveInfo.inventory.items[slot] + 1; } } else if (CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) { - if (gSaveContext.save.inventory.items[slot] == ITEM_NONE) { - gSaveContext.save.inventory.items[slot] = ITEM_OBABA_DRINK; - } else if ((gSaveContext.save.inventory.items[slot] >= ITEM_POTION_RED) && - (gSaveContext.save.inventory.items[slot] <= ITEM_OBABA_DRINK)) { - gSaveContext.save.inventory.items[slot] = gSaveContext.save.inventory.items[slot] - 1; + if (gSaveContext.save.saveInfo.inventory.items[slot] == ITEM_NONE) { + gSaveContext.save.saveInfo.inventory.items[slot] = ITEM_OBABA_DRINK; + } else if ((gSaveContext.save.saveInfo.inventory.items[slot] >= ITEM_POTION_RED) && + (gSaveContext.save.saveInfo.inventory.items[slot] <= ITEM_OBABA_DRINK)) { + gSaveContext.save.saveInfo.inventory.items[slot] = + gSaveContext.save.saveInfo.inventory.items[slot] - 1; } } } else { @@ -874,7 +876,7 @@ void KaleidoScope_UpdateInventoryEditor(PlayState* play) { CHECK_BTN_ALL(input->press.button, BTN_CDOWN) || CHECK_BTN_ALL(input->press.button, BTN_CRIGHT)) { value = sSlotItems[slot]; - if (gSaveContext.save.inventory.items[slot] == ITEM_NONE) { + if (gSaveContext.save.saveInfo.inventory.items[slot] == ITEM_NONE) { INV_CONTENT(value) = value; } else { Inventory_DeleteItem(value, slot); @@ -895,7 +897,7 @@ void KaleidoScope_UpdateInventoryEditor(PlayState* play) { if (value != 0) { CUR_FORM_EQUIP(EQUIP_SLOT_B) = value + (ITEM_SWORD_KOKIRI - 1); - gSaveContext.save.playerData.swordHealth = 100; + gSaveContext.save.saveInfo.playerData.swordHealth = 100; } else { CUR_FORM_EQUIP(EQUIP_SLOT_B) = ITEM_NONE; } @@ -910,7 +912,7 @@ void KaleidoScope_UpdateInventoryEditor(PlayState* play) { SET_EQUIP_VALUE(EQUIP_TYPE_SWORD, value); CUR_FORM_EQUIP(EQUIP_SLOT_B) = value + (ITEM_SWORD_KOKIRI - 1); - gSaveContext.save.playerData.swordHealth = 100; + gSaveContext.save.saveInfo.playerData.swordHealth = 100; } Interface_LoadItemIconImpl(play, EQUIP_SLOT_B); @@ -974,41 +976,43 @@ void KaleidoScope_UpdateInventoryEditor(PlayState* play) { } else if (sCurSection == INV_EDITOR_SECTION_SWAMP_GOLD_SKULLS) { // Gold Skulls (Swamp Spider House) if (CHECK_BTN_ALL(input->press.button, BTN_CUP) || CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) { - if (((gSaveContext.save.skullTokenCount & 0xFFFF0000) >> 0x10) != 0) { - gSaveContext.save.skullTokenCount = - ((u16)(((gSaveContext.save.skullTokenCount & 0xFFFF0000) >> 0x10) - 1) << 0x10) | - (gSaveContext.save.skullTokenCount & 0xFFFF); + if (((gSaveContext.save.saveInfo.skullTokenCount & 0xFFFF0000) >> 0x10) != 0) { + gSaveContext.save.saveInfo.skullTokenCount = + ((u16)(((gSaveContext.save.saveInfo.skullTokenCount & 0xFFFF0000) >> 0x10) - 1) << 0x10) | + (gSaveContext.save.saveInfo.skullTokenCount & 0xFFFF); } } else if (CHECK_BTN_ALL(input->press.button, BTN_CDOWN) || CHECK_BTN_ALL(input->press.button, BTN_CRIGHT)) { - gSaveContext.save.skullTokenCount = - ((u16)(((gSaveContext.save.skullTokenCount & 0xFFFF0000) >> 0x10) + 1) << 0x10) | - (gSaveContext.save.skullTokenCount & 0xFFFF); + gSaveContext.save.saveInfo.skullTokenCount = + ((u16)(((gSaveContext.save.saveInfo.skullTokenCount & 0xFFFF0000) >> 0x10) + 1) << 0x10) | + (gSaveContext.save.saveInfo.skullTokenCount & 0xFFFF); } } else if (sCurSection == INV_EDITOR_SECTION_OCEAN_GOLD_SKULLS) { // Gold Skulls (Oceans Spider House) if (CHECK_BTN_ALL(input->press.button, BTN_CUP) || CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) { - if (((u16)gSaveContext.save.skullTokenCount) != 0) { - gSaveContext.save.skullTokenCount = (((u16)gSaveContext.save.skullTokenCount - 1) & 0xFFFF) | - (gSaveContext.save.skullTokenCount & 0xFFFF0000); + if (((u16)gSaveContext.save.saveInfo.skullTokenCount) != 0) { + gSaveContext.save.saveInfo.skullTokenCount = + (((u16)gSaveContext.save.saveInfo.skullTokenCount - 1) & 0xFFFF) | + (gSaveContext.save.saveInfo.skullTokenCount & 0xFFFF0000); } } else if (CHECK_BTN_ALL(input->press.button, BTN_CDOWN) || CHECK_BTN_ALL(input->press.button, BTN_CRIGHT)) { - gSaveContext.save.skullTokenCount = (((u16)gSaveContext.save.skullTokenCount + 1) & 0xFFFF) | - (gSaveContext.save.skullTokenCount & 0xFFFF0000); + gSaveContext.save.saveInfo.skullTokenCount = + (((u16)gSaveContext.save.saveInfo.skullTokenCount + 1) & 0xFFFF) | + (gSaveContext.save.saveInfo.skullTokenCount & 0xFFFF0000); } } else if (sCurSection == INV_EDITOR_SECTION_NOTEBOOK) { // Bombers Notebook if (CHECK_BTN_ALL(input->press.button, BTN_CUP) || CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) { - gSaveContext.save.inventory.questItems ^= gBitFlags[QUEST_BOMBERS_NOTEBOOK]; + gSaveContext.save.saveInfo.inventory.questItems ^= gBitFlags[QUEST_BOMBERS_NOTEBOOK]; } } else if (sCurSection == INV_EDITOR_SECTION_LULLABY_INTRO) { // Goron Lullaby Intro if (CHECK_BTN_ALL(input->press.button, BTN_CUP) || CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) { - gSaveContext.save.inventory.questItems ^= gBitFlags[QUEST_SONG_LULLABY_INTRO]; + gSaveContext.save.saveInfo.inventory.questItems ^= gBitFlags[QUEST_SONG_LULLABY_INTRO]; } } else if (sCurSection < INV_EDITOR_SECTION_LULLABY_INTRO) { @@ -1017,7 +1021,7 @@ void KaleidoScope_UpdateInventoryEditor(PlayState* play) { //! have also been taken slot = sCurSection - INV_EDITOR_SECTION_BOSS; if (CHECK_BTN_ALL(input->press.button, BTN_CUP) || CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) { - gSaveContext.save.inventory.questItems ^= gBitFlags[slot]; + gSaveContext.save.saveInfo.inventory.questItems ^= gBitFlags[slot]; } } else if (sCurSection < INV_EDITOR_SECTION_DUNGEON_ITEMS) { @@ -1045,30 +1049,30 @@ void KaleidoScope_UpdateInventoryEditor(PlayState* play) { slot = sCurSection - INV_EDITOR_SECTION_DUNGEON_ITEMS; if (CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) { // Map - gSaveContext.save.inventory.dungeonItems[slot] ^= 4; + gSaveContext.save.saveInfo.inventory.dungeonItems[slot] ^= 4; } if (CHECK_BTN_ALL(input->press.button, BTN_CDOWN)) { // Compass - gSaveContext.save.inventory.dungeonItems[slot] ^= 2; + gSaveContext.save.saveInfo.inventory.dungeonItems[slot] ^= 2; } if (CHECK_BTN_ALL(input->press.button, BTN_CRIGHT)) { // Boss Key - gSaveContext.save.inventory.dungeonItems[slot] ^= 1; + gSaveContext.save.saveInfo.inventory.dungeonItems[slot] ^= 1; } } else if (sCurSection < INV_EDITOR_SECTION_DOUBLE_DEFENSE) { // Stray Fairies slot = sCurSection - INV_EDITOR_SECTION_STRAY_FAIRIES; if (CHECK_BTN_ALL(input->press.button, BTN_CUP) || CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) { - gSaveContext.save.inventory.strayFairies[slot]--; - if (gSaveContext.save.inventory.strayFairies[slot] < 0) { - gSaveContext.save.inventory.strayFairies[slot] = 0; + gSaveContext.save.saveInfo.inventory.strayFairies[slot]--; + if (gSaveContext.save.saveInfo.inventory.strayFairies[slot] < 0) { + gSaveContext.save.saveInfo.inventory.strayFairies[slot] = 0; } } else if (CHECK_BTN_ALL(input->press.button, BTN_CDOWN) || CHECK_BTN_ALL(input->press.button, BTN_CRIGHT)) { - gSaveContext.save.inventory.strayFairies[slot]++; - if (gSaveContext.save.inventory.strayFairies[slot] >= 99) { - gSaveContext.save.inventory.strayFairies[slot] = 99; + gSaveContext.save.saveInfo.inventory.strayFairies[slot]++; + if (gSaveContext.save.saveInfo.inventory.strayFairies[slot] >= 99) { + gSaveContext.save.saveInfo.inventory.strayFairies[slot] = 99; } } @@ -1076,11 +1080,11 @@ void KaleidoScope_UpdateInventoryEditor(PlayState* play) { // Double Defence if (CHECK_BTN_ALL(input->press.button, BTN_CUP) || CHECK_BTN_ALL(input->press.button, BTN_CLEFT) || CHECK_BTN_ALL(input->press.button, BTN_CDOWN) || CHECK_BTN_ALL(input->press.button, BTN_CRIGHT)) { - gSaveContext.save.playerData.doubleDefense ^= 1; - if (!gSaveContext.save.playerData.doubleDefense) { - gSaveContext.save.inventory.defenseHearts = 0; + gSaveContext.save.saveInfo.playerData.doubleDefense ^= 1; + if (!gSaveContext.save.saveInfo.playerData.doubleDefense) { + gSaveContext.save.saveInfo.inventory.defenseHearts = 0; } else { - gSaveContext.save.inventory.defenseHearts = 20; + gSaveContext.save.saveInfo.inventory.defenseHearts = 20; } } } diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_item.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_item.c index 474180826..149b72444 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_item.c +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_item.c @@ -275,7 +275,7 @@ void KaleidoScope_DrawItemSelect(PlayState* play) { for (j = 0, i = 0; i < NUM_ITEM_SLOTS; i++, j += 4) { gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); - if (((void)0, gSaveContext.save.inventory.items[i]) != ITEM_NONE) { + if (((void)0, gSaveContext.save.saveInfo.inventory.items[i]) != ITEM_NONE) { if ((pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE) && (pauseCtx->pageIndex == PAUSE_ITEM) && (pauseCtx->cursorSpecialPos == 0) && gPlayerFormSlotRestrictions[(void)0, gSaveContext.save.playerForm][i]) { @@ -309,8 +309,8 @@ void KaleidoScope_DrawItemSelect(PlayState* play) { } gSPVertex(POLY_OPA_DISP++, &pauseCtx->itemVtx[j + 0], 4, 0); - KaleidoScope_DrawTexQuadRGBA32(play->state.gfxCtx, - gItemIcons[((void)0, gSaveContext.save.inventory.items[i])], 32, 32, 0); + KaleidoScope_DrawTexQuadRGBA32( + play->state.gfxCtx, gItemIcons[((void)0, gSaveContext.save.saveInfo.inventory.items[i])], 32, 32, 0); } } @@ -325,9 +325,9 @@ void KaleidoScope_DrawItemSelect(PlayState* play) { // Loop over slots (i) and ammoIndex (j) for (j = 0, i = 0; i < NUM_ITEM_SLOTS; i++) { if (gAmmoItems[i] != ITEM_NONE) { - if (((void)0, gSaveContext.save.inventory.items[i]) != ITEM_NONE) { + if (((void)0, gSaveContext.save.saveInfo.inventory.items[i]) != ITEM_NONE) { KaleidoScope_DrawAmmoCount(pauseCtx, play->state.gfxCtx, - ((void)0, gSaveContext.save.inventory.items[i]), j); + ((void)0, gSaveContext.save.saveInfo.inventory.items[i]), j); } j++; } @@ -446,7 +446,7 @@ void KaleidoScope_UpdateItemCursor(PlayState* play) { } if (moveCursorResult == PAUSE_CURSOR_RESULT_SLOT) { - cursorItem = gSaveContext.save.inventory.items[pauseCtx->cursorPoint[PAUSE_ITEM]]; + cursorItem = gSaveContext.save.saveInfo.inventory.items[pauseCtx->cursorPoint[PAUSE_ITEM]]; } } } else if (pauseCtx->cursorSpecialPos == PAUSE_CURSOR_PAGE_LEFT) { @@ -459,7 +459,7 @@ void KaleidoScope_UpdateItemCursor(PlayState* play) { // Search for slot to move to while (true) { // Check if current cursor has an item in its slot - if (gSaveContext.save.inventory.items[cursorPoint] != ITEM_NONE) { + if (gSaveContext.save.saveInfo.inventory.items[cursorPoint] != ITEM_NONE) { pauseCtx->cursorPoint[PAUSE_ITEM] = cursorPoint; pauseCtx->cursorXIndex[PAUSE_ITEM] = cursorXIndex; pauseCtx->cursorYIndex[PAUSE_ITEM] = cursorYIndex; @@ -497,7 +497,7 @@ void KaleidoScope_UpdateItemCursor(PlayState* play) { // Search for slot to move to while (true) { // Check if current cursor has an item in its slot - if (gSaveContext.save.inventory.items[cursorPoint] != ITEM_NONE) { + if (gSaveContext.save.saveInfo.inventory.items[cursorPoint] != ITEM_NONE) { pauseCtx->cursorPoint[PAUSE_ITEM] = cursorPoint; pauseCtx->cursorXIndex[PAUSE_ITEM] = cursorXIndex; pauseCtx->cursorYIndex[PAUSE_ITEM] = cursorYIndex; @@ -568,9 +568,9 @@ void KaleidoScope_UpdateItemCursor(PlayState* play) { pauseCtx->cursorColorSet = PAUSE_CURSOR_COLOR_SET_YELLOW; if (moveCursorResult == PAUSE_CURSOR_RESULT_SLOT) { - cursorItem = gSaveContext.save.inventory.items[pauseCtx->cursorPoint[PAUSE_ITEM]]; + cursorItem = gSaveContext.save.saveInfo.inventory.items[pauseCtx->cursorPoint[PAUSE_ITEM]]; } else if (moveCursorResult != PAUSE_CURSOR_RESULT_SPECIAL_POS) { - cursorItem = gSaveContext.save.inventory.items[pauseCtx->cursorPoint[PAUSE_ITEM]]; + cursorItem = gSaveContext.save.saveInfo.inventory.items[pauseCtx->cursorPoint[PAUSE_ITEM]]; } if (cursorItem == ITEM_NONE) { diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_map.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_map.c index 87acfaa6c..ab598723f 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_map.c +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_map.c @@ -59,7 +59,7 @@ void KaleidoScope_DrawDungeonStrayFairyCount(PlayState* play) { 1 << 10); // Get digits for current number of stray fairies collected - counterDigits[1] = gSaveContext.save.inventory.strayFairies[(void)0, gSaveContext.dungeonIndex]; + counterDigits[1] = gSaveContext.save.saveInfo.inventory.strayFairies[(void)0, gSaveContext.dungeonIndex]; counterDigits[0] = counterDigits[1] / 10; counterDigits[1] -= (s16)(counterDigits[0] * 10); @@ -379,7 +379,7 @@ void KaleidoScope_UpdateDungeonCursor(PlayState* play) { } else if ((pauseCtx->cursorSpecialPos == 0) && (pauseCtx->stickAdjY > 30)) { if (pauseCtx->cursorPoint[PAUSE_MAP] >= DUNGEON_FLOOR_INDEX_4) { for (i = pauseCtx->cursorPoint[PAUSE_MAP] - (DUNGEON_FLOOR_INDEX_4 + 1); i >= 0; i--) { - if ((gSaveContext.save.permanentSceneFlags[(void)0, gSaveContext.dungeonIndex].unk_14 & + if ((gSaveContext.save.saveInfo.permanentSceneFlags[(void)0, gSaveContext.dungeonIndex].unk_14 & gBitFlags[i]) || func_801090B0(FLOOR_INDEX_MAX - i)) { pauseCtx->cursorPoint[PAUSE_MAP] = i + DUNGEON_FLOOR_INDEX_4; @@ -400,7 +400,7 @@ void KaleidoScope_UpdateDungeonCursor(PlayState* play) { (pauseCtx->cursorPoint[PAUSE_MAP] <= DUNGEON_FLOOR_INDEX_1)) { for (i = pauseCtx->cursorPoint[PAUSE_MAP] - (DUNGEON_FLOOR_INDEX_4 - 1); i <= DUNGEON_FLOOR_INDEX_0; i++) { - if ((gSaveContext.save.permanentSceneFlags[(void)0, gSaveContext.dungeonIndex].unk_14 & + if ((gSaveContext.save.saveInfo.permanentSceneFlags[(void)0, gSaveContext.dungeonIndex].unk_14 & gBitFlags[i]) || func_801090B0(FLOOR_INDEX_MAX - i)) { pauseCtx->cursorPoint[PAUSE_MAP] = i + DUNGEON_FLOOR_INDEX_4; @@ -642,7 +642,7 @@ void KaleidoScope_DrawWorldMap(PlayState* play) { // Draw clouds over the world map // Iterate over cloud bits (n) for (n = 0; n < 15; n++) { - if (!(((void)0, gSaveContext.save.worldMapCloudVisibility) & gBitFlags[n])) { + if (!(((void)0, gSaveContext.save.saveInfo.worldMapCloudVisibility) & gBitFlags[n])) { gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[60 + n * 4], 4, 0); @@ -674,7 +674,7 @@ void KaleidoScope_DrawWorldMap(PlayState* play) { sWorldMapDotEnvColors[0][2], 0); if (R_PAUSE_DBG_MAP_CLOUD_ON) { - gSaveContext.save.worldMapCloudVisibility |= (u16)~0x8000; + gSaveContext.save.saveInfo.worldMapCloudVisibility |= (u16)~0x8000; pauseCtx->mapPageVtx[120].v.ob[0] = pauseCtx->mapPageVtx[122].v.ob[0] = R_PAUSE_DBG_MAP_CLOUD_X; @@ -706,7 +706,7 @@ void KaleidoScope_DrawWorldMap(PlayState* play) { gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); if (R_PAUSE_DBG_MAP_CLOUD_ON) { - gSaveContext.save.worldMapCloudVisibility |= (u16)~0x8000; + gSaveContext.save.saveInfo.worldMapCloudVisibility |= (u16)~0x8000; pauseCtx->mapPageVtx[164].v.ob[0] = pauseCtx->mapPageVtx[166].v.ob[0] = R_PAUSE_DBG_MAP_CLOUD_X; diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_mask.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_mask.c index 219ecd7a9..61157ffce 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_mask.c +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_mask.c @@ -221,7 +221,7 @@ void KaleidoScope_DrawMaskSelect(PlayState* play) { for (j = 0, i = 0; i < NUM_MASK_SLOTS; i++, j += 4) { gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); - if (((void)0, gSaveContext.save.inventory.items[i + NUM_ITEM_SLOTS]) != ITEM_NONE) { + if (((void)0, gSaveContext.save.saveInfo.inventory.items[i + NUM_ITEM_SLOTS]) != ITEM_NONE) { if (!CHECK_GIVEN_MASK_ON_MOON(i)) { if ((pauseCtx->mainState == PAUSE_MAIN_STATE_IDLE) && (pauseCtx->pageIndex == PAUSE_MASK) && (pauseCtx->cursorSpecialPos == 0) && @@ -258,8 +258,8 @@ void KaleidoScope_DrawMaskSelect(PlayState* play) { gSPVertex(POLY_OPA_DISP++, &pauseCtx->maskVtx[j + 0], 4, 0); KaleidoScope_DrawTexQuadRGBA32( - play->state.gfxCtx, gItemIcons[((void)0, gSaveContext.save.inventory.items[i + NUM_ITEM_SLOTS])], - 32, 32, 0); + play->state.gfxCtx, + gItemIcons[((void)0, gSaveContext.save.saveInfo.inventory.items[i + NUM_ITEM_SLOTS])], 32, 32, 0); } } } @@ -371,7 +371,8 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) { } if (moveCursorResult == PAUSE_CURSOR_RESULT_SLOT) { - cursorItem = gSaveContext.save.inventory.items[pauseCtx->cursorPoint[PAUSE_MASK] + NUM_ITEM_SLOTS]; + cursorItem = + gSaveContext.save.saveInfo.inventory.items[pauseCtx->cursorPoint[PAUSE_MASK] + NUM_ITEM_SLOTS]; if (CHECK_GIVEN_MASK_ON_MOON(pauseCtx->cursorPoint[PAUSE_MASK])) { cursorItem = ITEM_NONE; } @@ -387,7 +388,7 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) { // Search for slot to move to while (true) { // Check if current cursor has an item in its slot - if ((gSaveContext.save.inventory.items[cursorPoint + NUM_ITEM_SLOTS] != ITEM_NONE) && + if ((gSaveContext.save.saveInfo.inventory.items[cursorPoint + NUM_ITEM_SLOTS] != ITEM_NONE) && !CHECK_GIVEN_MASK_ON_MOON(cursorPoint)) { pauseCtx->cursorPoint[PAUSE_MASK] = cursorPoint; pauseCtx->cursorXIndex[PAUSE_MASK] = cursorXIndex; @@ -428,7 +429,7 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) { // Search for slot to move to while (true) { // Check if current cursor has an item in its slot - if ((gSaveContext.save.inventory.items[cursorPoint + NUM_ITEM_SLOTS] != ITEM_NONE) && + if ((gSaveContext.save.saveInfo.inventory.items[cursorPoint + NUM_ITEM_SLOTS] != ITEM_NONE) && !CHECK_GIVEN_MASK_ON_MOON(cursorPoint)) { pauseCtx->cursorPoint[PAUSE_MASK] = cursorPoint; pauseCtx->cursorXIndex[PAUSE_MASK] = cursorXIndex; @@ -500,12 +501,14 @@ void KaleidoScope_UpdateMaskCursor(PlayState* play) { pauseCtx->cursorColorSet = PAUSE_CURSOR_COLOR_SET_YELLOW; if (moveCursorResult == PAUSE_CURSOR_RESULT_SLOT) { - cursorItem = gSaveContext.save.inventory.items[pauseCtx->cursorPoint[PAUSE_MASK] + NUM_ITEM_SLOTS]; + cursorItem = + gSaveContext.save.saveInfo.inventory.items[pauseCtx->cursorPoint[PAUSE_MASK] + NUM_ITEM_SLOTS]; if (CHECK_GIVEN_MASK_ON_MOON(pauseCtx->cursorPoint[PAUSE_MASK])) { cursorItem = ITEM_NONE; } } else if (moveCursorResult != PAUSE_CURSOR_RESULT_SPECIAL_POS) { - cursorItem = gSaveContext.save.inventory.items[pauseCtx->cursorPoint[PAUSE_MASK] + NUM_ITEM_SLOTS]; + cursorItem = + gSaveContext.save.saveInfo.inventory.items[pauseCtx->cursorPoint[PAUSE_MASK] + NUM_ITEM_SLOTS]; if (CHECK_GIVEN_MASK_ON_MOON(pauseCtx->cursorPoint[PAUSE_MASK])) { cursorItem = ITEM_NONE; } diff --git a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c index 721ca7a18..1377f287f 100644 --- a/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c +++ b/src/overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope_NES.c @@ -811,7 +811,7 @@ void KaleidoScope_Update(PlayState* play) { } else { play_sound(NA_SE_SY_PIECE_OF_HEART); Play_SaveCycleSceneFlags(&play->state); - gSaveContext.save.playerData.savedSceneId = play->sceneId; + gSaveContext.save.saveInfo.playerData.savedSceneId = play->sceneId; func_8014546C(sramCtx); if (gSaveContext.unk_3F3F == 0) { pauseCtx->savePromptState = PAUSE_SAVEPROMPT_STATE_5; @@ -1072,8 +1072,8 @@ void KaleidoScope_Update(PlayState* play) { play_sound(NA_SE_SY_PIECE_OF_HEART); pauseCtx->promptChoice = PAUSE_PROMPT_YES; Play_SaveCycleSceneFlags(&play->state); - gSaveContext.save.playerData.savedSceneId = play->sceneId; - gSaveContext.save.playerData.health = 0x30; + gSaveContext.save.saveInfo.playerData.savedSceneId = play->sceneId; + gSaveContext.save.saveInfo.playerData.health = 0x30; func_8014546C(sramCtx); if (gSaveContext.unk_3F3F == 0) { pauseCtx->state = PAUSE_STATE_GAMEOVER_8; @@ -1145,15 +1145,15 @@ void KaleidoScope_Update(PlayState* play) { func_80169FDC(&play->state); gSaveContext.respawnFlag = -2; gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK; - gSaveContext.save.playerData.health = 0x30; + gSaveContext.save.saveInfo.playerData.health = 0x30; Audio_SetSpec(0xA); gSaveContext.healthAccumulator = 0; gSaveContext.magicState = MAGIC_STATE_IDLE; gSaveContext.magicFlag = 0; gSaveContext.magicCapacity = 0; - gSaveContext.magicFillTarget = gSaveContext.save.playerData.magic; - gSaveContext.save.playerData.magicLevel = 0; - gSaveContext.save.playerData.magic = 0; + gSaveContext.magicFillTarget = gSaveContext.save.saveInfo.playerData.magic; + gSaveContext.save.saveInfo.playerData.magicLevel = 0; + gSaveContext.save.saveInfo.playerData.magic = 0; } else { // PAUSE_PROMPT_NO STOP_GAMESTATE(&play->state); SET_NEXT_GAMESTATE(&play->state, TitleSetup_Init, sizeof(TitleSetupState)); diff --git a/tools/namefixer.py b/tools/namefixer.py index 7a88f79d9..ad78411f8 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -761,41 +761,41 @@ wordReplace = { "gSaveContext.unk_3F22": "gSaveContext.hudVisibility", "gSaveContext.unk_3F24": "gSaveContext.hudVisibilityTimer", "gSaveContext.unk_3F26": "gSaveContext.prevHudVisibility", - "gSaveContext.weekEventReg": "gSaveContext.save.weekEventReg", + "gSaveContext.weekEventReg": "gSaveContext.save.saveInfo.weekEventReg", "gSaveContext.playerForm": "gSaveContext.save.playerForm", "gSaveContext.day": "gSaveContext.save.day", "gSaveContext.isNight": "gSaveContext.save.isNight", "gSaveContext.environmentTime": "gSaveContext.skyboxTime", - "gSaveContext.naviTimer": "gSaveContext.save.playerData.tatlTimer", - "gSaveContext.tatlTimer": "gSaveContext.save.playerData.tatlTimer", - "gSaveContext.rupees": "gSaveContext.save.playerData.rupees", - "gSaveContext.magicAcquired": "gSaveContext.save.playerData.isMagicAcquired", - "gSaveContext.doubleMagic": "gSaveContext.save.playerData.isDoubleMagicAcquired", - "gSaveContext.doubleDefense": "gSaveContext.save.playerData.doubleDefense", - "gSaveContext.playerName": "gSaveContext.save.playerData.playerName", - "gSaveContext.inventory": "gSaveContext.save.inventory", + "gSaveContext.naviTimer": "gSaveContext.save.saveInfo.playerData.tatlTimer", + "gSaveContext.tatlTimer": "gSaveContext.save.saveInfo.playerData.tatlTimer", + "gSaveContext.rupees": "gSaveContext.save.saveInfo.playerData.rupees", + "gSaveContext.magicAcquired": "gSaveContext.save.saveInfo.playerData.isMagicAcquired", + "gSaveContext.doubleMagic": "gSaveContext.save.saveInfo.playerData.isDoubleMagicAcquired", + "gSaveContext.doubleDefense": "gSaveContext.save.saveInfo.playerData.doubleDefense", + "gSaveContext.playerName": "gSaveContext.save.saveInfo.playerData.playerName", + "gSaveContext.inventory": "gSaveContext.save.saveInfo.inventory", "gSaveContext.equippedMask": "gSaveContext.save.equippedMask", "gSaveContext.entranceIndex": "gSaveContext.save.entrance", "gSaveContext.time": "gSaveContext.save.time", "gSaveContext.save.daySpeed": "gSaveContext.save.timeSpeedOffset", "gSaveContext.unk_14": "gSaveContext.save.timeSpeedOffset", - "gSaveContext.unk_FE6": "gSaveContext.save.bombersCaughtNum", - "gSaveContext.unk_FE7": "gSaveContext.save.bombersCaughtOrder", + "gSaveContext.unk_FE6": "gSaveContext.save.saveInfo.bombersCaughtNum", + "gSaveContext.unk_FE7": "gSaveContext.save.saveInfo.bombersCaughtOrder", "gSaveContext.linkAge": "gSaveContext.save.linkAge", - "gSaveContext.dekuPlaygroundHighScores": "gSaveContext.save.dekuPlaygroundHighScores", - "gSaveContext.lotteryCodeGuess": "gSaveContext.save.lotteryCodeGuess", - "gSaveContext.permanentSceneFlags": "gSaveContext.save.permanentSceneFlags", - "gSaveContext.bomberCode": "gSaveContext.save.bomberCode", - "gSaveContext.skullTokenCount": "gSaveContext.save.skullTokenCount", + "gSaveContext.dekuPlaygroundHighScores": "gSaveContext.save.saveInfo.dekuPlaygroundHighScores", + "gSaveContext.lotteryCodeGuess": "gSaveContext.save.saveInfo.lotteryCodeGuess", + "gSaveContext.permanentSceneFlags": "gSaveContext.save.saveInfo.permanentSceneFlags", + "gSaveContext.bomberCode": "gSaveContext.save.saveInfo.bomberCode", + "gSaveContext.skullTokenCount": "gSaveContext.save.saveInfo.skullTokenCount", "gSaveContext.cutscene": "gSaveContext.save.cutscene", - "gSaveContext.health": "gSaveContext.save.playerData.health", - "gSaveContext.equips": "gSaveContext.save.equips", + "gSaveContext.health": "gSaveContext.save.saveInfo.playerData.health", + "gSaveContext.equips": "gSaveContext.save.saveInfo.equips", "gSaveContext.unk_1016": "gSaveContext.jinxTimer", "gSaveContext.unk_3F58": "gSaveContext.sunsSongState", "gSaveContext.equips.buttonItems": "gSaveContext.save.equips.buttonItems", "gSaveContext.unk_48C8": "gSaveContext.dungeonIndex", - "gSaveContext.save.playerData.magicAcquired": "gSaveContext.save.playerData.isMagicAcquired", - "gSaveContext.save.playerDatadoubleMagic": "gSaveContext.save.playerData.isDoubleMagicAcquired", + "gSaveContext.save.saveInfo.playerData.magicAcquired": "gSaveContext.save.saveInfo.playerData.isMagicAcquired", + "gSaveContext.save.playerDatadoubleMagic": "gSaveContext.save.saveInfo.playerData.isDoubleMagicAcquired", "gSaveContext.unk_3F28": "gSaveContext.magicState", "gSaveContext.unk_3F30": "gSaveContext.magicFillTarget", "gSaveContext.unk_3F2C": "gSaveContext.magicFlag", @@ -805,6 +805,44 @@ wordReplace = { "gSaveContext.nightSeqIndex": "gSaveContext.ambienceId", "gSaveContext.minigameState": "gSaveContext.minigameStatus", "gSaveContext.unk_3F3C": "gSaveContext.minigameHiddenScore", + "gSaveContext.save.playerData": "gSaveContext.save.saveInfo.playerData", + "gSaveContext.save.equips": "gSaveContext.save.saveInfo.equips", + "gSaveContext.save.inventory": "gSaveContext.save.saveInfo.inventory", + "gSaveContext.save.permanentSceneFlags": "gSaveContext.save.saveInfo.permanentSceneFlags", + + "gSaveContext.save.unk_E18": "gSaveContext.save.saveInfo.unk_E5C", + "gSaveContext.save.dekuPlaygroundHighScores": "gSaveContext.save.saveInfo.dekuPlaygroundHighScores", + "gSaveContext.save.pictoFlags0": "gSaveContext.save.saveInfo.pictoFlags0", + "gSaveContext.save.pictoFlags1": "gSaveContext.save.saveInfo.pictoFlags1", + "gSaveContext.save.unk_E84": "gSaveContext.save.saveInfo.unk_E60", + "gSaveContext.save.unk_E88": "gSaveContext.save.saveInfo.unk_E64", + "gSaveContext.save.scenesVisible": "gSaveContext.save.saveInfo.scenesVisible", + "gSaveContext.save.skullTokenCount": "gSaveContext.save.saveInfo.skullTokenCount", + "gSaveContext.save.unk_EC4": "gSaveContext.save.saveInfo.unk_EA0", + "gSaveContext.save.unk_EC8": "gSaveContext.save.saveInfo.unk_EA4", + "gSaveContext.save.unk_ECC": "gSaveContext.save.saveInfo.unk_EA8", + "gSaveContext.save.stolenItems": "gSaveContext.save.saveInfo.stolenItems", + "gSaveContext.save.unk_DD8": "gSaveContext.save.saveInfo.unk_EB4", + "gSaveContext.save.bankRupees": "gSaveContext.save.saveInfo.bankRupees", + "gSaveContext.save.unk_EE0": "gSaveContext.save.saveInfo.unk_EBC", + "gSaveContext.save.unk_EE4": "gSaveContext.save.saveInfo.unk_EC0", + "gSaveContext.save.unk_EE8": "gSaveContext.save.saveInfo.unk_EC4", + "gSaveContext.save.horseBackBalloonHighScore": "gSaveContext.save.saveInfo.horseBackBalloonHighScore", + "gSaveContext.save.lotteryCodeGuess": "gSaveContext.save.saveInfo.lotteryCodeGuess", + "gSaveContext.save.shootingGalleryHighScores": "gSaveContext.save.saveInfo.shootingGalleryHighScores", + "gSaveContext.save.weekEventReg": "gSaveContext.save.saveInfo.weekEventReg", + "gSaveContext.save.regionsVisited": "gSaveContext.save.saveInfo.regionsVisited", + "gSaveContext.save.worldMapCloudVisibility": "gSaveContext.save.saveInfo.worldMapCloudVisibility", + "gSaveContext.save.unk_F64": "gSaveContext.save.saveInfo.unk_F40", + "gSaveContext.save.unk_F65": "gSaveContext.save.saveInfo.unk_F41", + "gSaveContext.save.scarecrowSpawnSong": "gSaveContext.save.saveInfo.scarecrowSpawnSong", + "gSaveContext.save.bombersCaughtNum": "gSaveContext.save.saveInfo.bombersCaughtNum", + "gSaveContext.save.bombersCaughtOrder": "gSaveContext.save.saveInfo.bombersCaughtOrder", + "gSaveContext.save.lotteryCodes": "gSaveContext.save.saveInfo.lotteryCodes", + "gSaveContext.save.spiderHouseMaskOrder": "gSaveContext.save.saveInfo.spiderHouseMaskOrder", + "gSaveContext.save.bomberCode": "gSaveContext.save.saveInfo.bomberCode", + "gSaveContext.save.horseData": "gSaveContext.save.saveInfo.horseData", + "gSaveContext.save.checksum": "gSaveContext.save.saveInfo.checksum", "player->unk_A87": "player->exchangeItemId", "player->leftHandActor": "player->heldActor", diff --git a/tools/weekeventregconvert.py b/tools/weekeventregconvert.py index 02a3e4a42..071907058 100755 --- a/tools/weekeventregconvert.py +++ b/tools/weekeventregconvert.py @@ -843,20 +843,20 @@ def applyChange(fileContents: str, compiledRegex: re.Pattern, callback) -> str: def updateCheck(fileContents: str) -> str: - # gSaveContext.save.weekEventReg[86] & 2 - checkRegex = re.compile(rf"gSaveContext.save.weekEventReg\[(?P{NUMBER_PATTERN})\]\s*\&\s*(?P{NUMBER_PATTERN})") + # gSaveContext.save.saveInfo.weekEventReg[86] & 2 + checkRegex = re.compile(rf"gSaveContext.save.saveInfo.weekEventReg\[(?P{NUMBER_PATTERN})\]\s*\&\s*(?P{NUMBER_PATTERN})") return applyChange(fileContents, checkRegex, getCheckMacro) def updateSet(fileContents: str) -> str: - # gSaveContext.save.weekEventReg[51] |= 0x10 - setRegex = re.compile(rf"gSaveContext.save.weekEventReg\[(?P{NUMBER_PATTERN})\]\s*\|=\s*(?P{NUMBER_PATTERN})") + # gSaveContext.save.saveInfo.weekEventReg[51] |= 0x10 + setRegex = re.compile(rf"gSaveContext.save.saveInfo.weekEventReg\[(?P{NUMBER_PATTERN})\]\s*\|=\s*(?P{NUMBER_PATTERN})") return applyChange(fileContents, setRegex, getSetMacro) def updateClear(fileContents: str) -> str: - # gSaveContext.save.weekEventReg[85] &= (u8)~0x80 - clearRegex = re.compile(rf"gSaveContext.save.weekEventReg\[(?P{NUMBER_PATTERN})\]\s*\&=\s*(\(u8\))?~(?P{NUMBER_PATTERN})") + # gSaveContext.save.saveInfo.weekEventReg[85] &= (u8)~0x80 + clearRegex = re.compile(rf"gSaveContext.save.saveInfo.weekEventReg\[(?P{NUMBER_PATTERN})\]\s*\&=\s*(\(u8\))?~(?P{NUMBER_PATTERN})") return applyChange(fileContents, clearRegex, getClearMacro) From f9c638117c0b5f9559ee8952fe459cac178bc73c Mon Sep 17 00:00:00 2001 From: Anghelo Carvajal Date: Tue, 18 Apr 2023 22:38:22 -0400 Subject: [PATCH 11/12] Rename `LinkAnimation` to `DmaAnimation` and other `skelanime` misc cleanups (#1147) * Rename LinkAnimation to PlayerAnimation * remove the remaining link stuff * Move functions out of functions.h * cleanup returns * more cleanups * format * format again * format again again * Remove internal functions from header * legacy * bss * linkAnimSegment * Update src/overlays/actors/ovl_En_Yb/z_en_yb.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * bss * `DmaAnimation` rename * more DMA i missed * Revert "more DMA i missed" This reverts commit 6c0ca44f450c92d8c12374fa243c8b17d46527d3. * Revert "`DmaAnimation` rename" This reverts commit 1d2626514c94158001566fa664222b0dcf34a4f7. * Add LinkAnimationHeader rename to namefixer.py --------- Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --- include/functions.h | 91 +------- include/z64.h | 3 +- include/z64animation.h | 113 +++++++--- include/z64animation_legacy.h | 36 ++++ include/z64player.h | 18 +- src/code/z_skelanime.c | 199 ++++++++++-------- src/overlays/actors/ovl_En_Rz/z_en_rz.c | 16 +- src/overlays/actors/ovl_En_Test3/z_en_test3.c | 2 +- src/overlays/actors/ovl_En_Yb/z_en_yb.c | 21 +- tools/disasm/functions.txt | 48 ++--- tools/namefixer.py | 66 ++---- tools/sizes/code_functions.csv | 44 ++-- 12 files changed, 323 insertions(+), 334 deletions(-) create mode 100644 include/z64animation_legacy.h diff --git a/include/functions.h b/include/functions.h index 3850ab42e..c45f57928 100644 --- a/include/functions.h +++ b/include/functions.h @@ -1828,96 +1828,9 @@ s32 Entrance_GetSceneId(u16 entrance); s32 Entrance_GetSceneIdAbsolute(u16 entrance); s32 Entrance_GetSpawnNum(u16 entrance); s32 Entrance_GetTransitionFlags(u16 entrance); + s32 Schedule_RunScript(PlayState* play, u8* script, ScheduleOutput* output); -void SkelAnime_DrawLimbLod(PlayState* play, s32 limbIndex, void** skeleton, Vec3s* jointTable, OverrideLimbDrawOpa overrideLimbDraw, PostLimbDrawOpa postLimbDraw, Actor* actor, s32 lod); -void SkelAnime_DrawLod(PlayState* play, void** skeleton, Vec3s* jointTable, OverrideLimbDrawOpa overrideLimbDraw, PostLimbDrawOpa postLimbDraw, Actor* actor, s32 lod); -void SkelAnime_DrawFlexLimbLod(PlayState* play, s32 limbIndex, void** skeleton, Vec3s* jointTable, OverrideLimbDrawFlex overrideLimbDraw, PostLimbDrawFlex postLimbDraw, Actor* actor, s32 lod, Mtx** mtx); -void SkelAnime_DrawFlexLod(PlayState* play, void** skeleton, Vec3s* jointTable, s32 dListCount, OverrideLimbDrawFlex overrideLimbDraw, PostLimbDrawFlex postLimbDraw, Actor* actor, s32 lod); -void SkelAnime_DrawLimbOpa(PlayState* play, s32 limbIndex, void** skeleton, Vec3s* jointTable, OverrideLimbDrawOpa overrideLimbDraw, PostLimbDrawOpa postLimbDraw, Actor* actor); -void SkelAnime_DrawOpa(PlayState* play, void** skeleton, Vec3s* jointTable, OverrideLimbDrawOpa overrideLimbDraw, PostLimbDrawOpa postLimbDraw, Actor* actor); -void SkelAnime_DrawFlexLimbOpa(PlayState* play, s32 limbIndex, void** skeleton, Vec3s* jointTable, OverrideLimbDrawOpa overrideLimbDraw, PostLimbDrawOpa postLimbDraw, Actor* actor, Mtx** limbMatricies); -void SkelAnime_DrawFlexOpa(PlayState* play, void** skeleton, Vec3s* jointTable, s32 dListCount, OverrideLimbDrawOpa overrideLimbDraw, PostLimbDrawOpa postLimbDraw, Actor* actor); -void SkelAnime_DrawTransformFlexLimbOpa(PlayState* play, s32 limbIndex, void** skeleton, Vec3s* jointTable, OverrideLimbDrawOpa overrideLimbDraw, PostLimbDrawOpa postLimbDraw, TransformLimbDrawOpa transformLimbDraw, Actor* actor, Mtx** mtx); -void SkelAnime_DrawTransformFlexOpa(PlayState* play, void** skeleton, Vec3s* jointTable, s32 dListCount, OverrideLimbDrawOpa overrideLimbDraw, PostLimbDrawOpa postLimbDraw, TransformLimbDrawOpa transformLimbDraw, Actor* actor); -void SkelAnime_GetFrameData(AnimationHeader* animation, s32 frame, s32 limbCount, Vec3s* frameTable); -s16 Animation_GetLength(void* animation); -s16 Animation_GetLastFrame(void* animation); -Gfx* SkelAnime_DrawLimb(PlayState* play, s32 limbIndex, void** skeleton, Vec3s* jointTable, OverrideLimbDraw overrideLimbDraw, PostLimbDraw postLimbDraw, Actor* actor, Gfx* gfx); -Gfx* SkelAnime_Draw(PlayState* play, void** skeleton, Vec3s* jointTable, OverrideLimbDraw overrideLimbDraw, PostLimbDraw postLimbDraw, Actor* actor, Gfx* gfx); -Gfx* SkelAnime_DrawFlexLimb(PlayState* play, s32 limbIndex, void** skeleton, Vec3s* jointTable, OverrideLimbDraw overrideLimbDraw, PostLimbDraw postLimbDraw, Actor* actor, Mtx** mtx, Gfx* gfx); -Gfx* SkelAnime_DrawFlex(PlayState* play, void** skeleton, Vec3s* jointTable, s32 dListCount, OverrideLimbDraw overrideLimbDraw, PostLimbDraw postLimbDraw, Actor* actor, Gfx* gfx); -s16 SkelAnime_GetFrameDataLegacy(LegacyAnimationHeader* animation, s32 frame, Vec3s* frameTable); -s16 Animation_GetLimbCount2(LegacyAnimationHeader* animation); -s16 Animation_GetLength2(LegacyAnimationHeader* animation); -s16 Animation_GetLastFrame2(LegacyAnimationHeader* animation); -void SkelAnime_InterpFrameTable(s32 limbCount, Vec3s* dst, Vec3s* start, Vec3s* target, f32 weight); -void AnimationContext_Reset(AnimationContext* animationCtx); -void AnimationContext_SetNextQueue(PlayState* play); -void AnimationContext_DisableQueue(PlayState* play); -AnimationEntry* AnimationContext_AddEntry(AnimationContext* animationCtx, AnimationType type); -void AnimationContext_SetLoadFrame(PlayState* play, LinkAnimationHeader* animation, s32 frame, s32 limbCount, Vec3s* frameTable); -void AnimationContext_SetCopyAll(PlayState* play, s32 vecCount, Vec3s* dst, Vec3s* src); -void AnimationContext_SetInterp(PlayState* play, s32 vecCount, Vec3s* base, Vec3s* mod, f32 weight); -void AnimationContext_SetCopyTrue(PlayState* play, s32 vecCount, Vec3s* dst, Vec3s* src, u8* copyFlag); -void AnimationContext_SetCopyFalse(PlayState* play, s32 vecCount, Vec3s* dst, Vec3s* src, u8* copyFlag); -void AnimationContext_SetMoveActor(PlayState* play, Actor* actor, SkelAnime* skelAnime, f32 arg3); -void AnimationContext_LoadFrame(PlayState* play, AnimationEntryData* data); -void AnimationContext_CopyAll(PlayState* play, AnimationEntryData* data); -void AnimationContext_Interp(PlayState* play, AnimationEntryData* data); -void AnimationContext_CopyTrue(PlayState* play, AnimationEntryData* data); -void AnimationContext_CopyFalse(PlayState* play, AnimationEntryData* data); -void AnimationContext_MoveActor(PlayState* play, AnimationEntryData* data); -void AnimationContext_Update(PlayState* play, AnimationContext* animationCtx); -void SkelAnime_InitLink(PlayState* play, SkelAnime* skelAnime, FlexSkeletonHeader* skeletonHeaderSeg, LinkAnimationHeader* animation, s32 flags, void* jointTableBuffer, void* morphTableBuffer, s32 limbBufCount); -void LinkAnimation_SetUpdateFunction(SkelAnime* skelAnime); -s32 LinkAnimation_Update(PlayState* play, SkelAnime* skelAnime); -s32 LinkAnimation_Morph(PlayState* play, SkelAnime* skelAnime); -void LinkAnimation_AnimateFrame(PlayState* play, SkelAnime* skelAnime); -s32 LinkAnimation_Loop(PlayState* play, SkelAnime* skelAnime); -s32 LinkAnimation_Once(PlayState* play, SkelAnime* skelAnime); -void Animation_SetMorph(PlayState* play, SkelAnime* skelAnime, f32 morphFrames); -void LinkAnimation_Change(PlayState* play, SkelAnime* skelAnime, LinkAnimationHeader* animation, f32 playSpeed, f32 startFrame, f32 endFrame, u8 mode, f32 morphFrames); -void LinkAnimation_PlayOnce(PlayState* play, SkelAnime* skelAnime, LinkAnimationHeader* animation); -void LinkAnimation_PlayOnceSetSpeed(PlayState* play, SkelAnime* skelAnime, LinkAnimationHeader* animation, f32 playSpeed); -void LinkAnimation_PlayLoop(PlayState* play, SkelAnime* skelAnime, LinkAnimationHeader* animation); -void LinkAnimation_PlayLoopSetSpeed(PlayState* play, SkelAnime* skelAnime, LinkAnimationHeader* animation, f32 playSpeed); -void LinkAnimation_CopyJointToMorph(PlayState* play, SkelAnime* skelAnime); -void LinkAnimation_CopyMorphToJoint(PlayState* play, SkelAnime* skelAnime); -void LinkAnimation_LoadToMorph(PlayState* play, SkelAnime* skelAnime, LinkAnimationHeader* animation, f32 frame); -void LinkAnimation_LoadToJoint(PlayState* play, SkelAnime* skelAnime, LinkAnimationHeader* animation, f32 frame); -void LinkAnimation_InterpJointMorph(PlayState* play, SkelAnime* skelAnime, f32 weight); -void LinkAnimation_BlendToJoint(PlayState* play, SkelAnime* skelAnime, LinkAnimationHeader* animation1, f32 frame1, LinkAnimationHeader* animation2, f32 frame2, f32 blendWeight, void* blendTableBuffer); -void LinkAnimation_BlendToMorph(PlayState* play, SkelAnime* skelAnime, LinkAnimationHeader* animation1, f32 frame1, LinkAnimationHeader* animation2, f32 frame2, f32 blendWeight, void* blendTableBuffer); -void LinkAnimation_EndLoop(SkelAnime* skelAnime); -s32 Animation_OnFrameImpl(SkelAnime* skelAnime, f32 frame, f32 updateRate); -s32 LinkAnimation_OnFrame(SkelAnime* skelAnime, f32 frame); -void SkelAnime_Init(PlayState* play, SkelAnime* skelAnime, SkeletonHeader* skeletonHeaderSeg, AnimationHeader* animation, Vec3s* jointTable, Vec3s* morphTable, s32 limbCount); -void SkelAnime_InitFlex(PlayState* play, SkelAnime* skelAnime, FlexSkeletonHeader* skeletonHeaderSeg, AnimationHeader* animation, Vec3s* jointTable, Vec3s* morphTable, s32 limbCount); -void SkelAnime_InitSkin(GameState* gameState, SkelAnime* skelAnime, SkeletonHeader* skeletonHeaderSeg, AnimationHeader* animation); -void SkelAnime_SetUpdate(SkelAnime* skelAnime); -s32 SkelAnime_Update(SkelAnime* skelAnime); -s32 SkelAnime_Morph(SkelAnime* skelAnime); -s32 SkelAnime_MorphTaper(SkelAnime* skelAnime); -void SkelAnime_AnimateFrame(SkelAnime* skelAnime); -s32 SkelAnime_LoopFull(SkelAnime* skelAnime); -s32 SkelAnime_LoopPartial(SkelAnime* skelAnime); -s32 SkelAnime_Once(SkelAnime* skelAnime); -void Animation_ChangeImpl(SkelAnime* skelAnime, AnimationHeader* animation, f32 playSpeed, f32 startFrame, f32 endFrame, u8 mode, f32 morphFrames, s8 taper); -void Animation_Change(SkelAnime* skelAnime, AnimationHeader* animation, f32 playSpeed, f32 startFrame, f32 endFrame, u8 mode, f32 morphFrames); -void Animation_PlayOnce(SkelAnime* skelAnime, AnimationHeader* animation); -void Animation_MorphToPlayOnce(SkelAnime* skelAnime, AnimationHeader* animation, f32 morphFrames); -void Animation_PlayOnceSetSpeed(SkelAnime* skelAnime, AnimationHeader* animation, f32 playSpeed); -void Animation_PlayLoop(SkelAnime* skelAnime, AnimationHeader* animation); -void Animation_MorphToLoop(SkelAnime* skelAnime, AnimationHeader* animation, f32 morphFrames); -void Animation_PlayLoopSetSpeed(SkelAnime* skelAnime, AnimationHeader* animation, f32 playSpeed); -void Animation_EndLoop(SkelAnime* skelAnime); -void Animation_Reverse(SkelAnime* skelAnime); -void SkelAnime_CopyFrameTableTrue(SkelAnime* skelAnime, Vec3s* dst, Vec3s* src, u8* copyFlag); -void SkelAnime_CopyFrameTableFalse(SkelAnime* skelAnime, Vec3s* dst, Vec3s* src, u8* copyFlag); -void SkelAnime_UpdateTranslation(SkelAnime* skelAnime, Vec3f* diff, s16 angle); -s32 Animation_OnFrame(SkelAnime* skelAnime, f32 frame); -void SkelAnime_Free(SkelAnime* skelAnime, PlayState* play); -void SkelAnime_CopyFrameTable(SkelAnime* skelAnime, Vec3s* dst, Vec3s* src); + void SkinMatrix_Vec3fMtxFMultXYZW(MtxF* mf, Vec3f* src, Vec3f* xyzDest, f32* wDest); void SkinMatrix_Vec3fMtxFMultXYZ(MtxF* mf, Vec3f* src, Vec3f* dest); void SkinMatrix_MtxFMtxFMult(MtxF* mfB, MtxF* mfA, MtxF* dest); diff --git a/include/z64.h b/include/z64.h index f7c4ad29b..959f195ba 100644 --- a/include/z64.h +++ b/include/z64.h @@ -30,6 +30,7 @@ #include "thga.h" #include "z64actor.h" #include "z64animation.h" +#include "z64animation_legacy.h" #include "z64audio.h" #include "z64bgcheck.h" #include "z64camera.h" @@ -645,7 +646,7 @@ typedef struct PlayState { /* 0x1878C */ void (*unk_1878C)(struct PlayState* play); /* 0x18790 */ void (*unk_18790)(struct PlayState* play, s16 arg1); /* 0x18794 */ PlayerItemAction (*unk_18794)(struct PlayState* play, Player* player, ItemId itemId); - /* 0x18798 */ s32 (*setPlayerTalkAnim)(struct PlayState* play, LinkAnimationHeader* talkAnim, s32 animMode); + /* 0x18798 */ s32 (*setPlayerTalkAnim)(struct PlayState* play, PlayerAnimationHeader* talkAnim, s32 animMode); /* 0x1879C */ s16 playerActorCsIds[10]; /* 0x187B0 */ MtxF viewProjectionMtxF; /* 0x187F0 */ Vec3f projectionMtxFDiagonal; diff --git a/include/z64animation.h b/include/z64animation.h index 0e8eb9fcb..4dd808af8 100644 --- a/include/z64animation.h +++ b/include/z64animation.h @@ -11,10 +11,7 @@ struct Actor; struct SkelAnime; struct PlayerAnimationFrame; -#define LINK_ANIMETION_OFFSET(addr, offset) \ - (SEGMENT_ROM_START(link_animetion) + ((uintptr_t)addr & 0xFFFFFF) + ((u32)offset)) #define LIMB_DONE 0xFF -#define ANIMATION_ENTRY_MAX 50 #define ANIM_FLAG_1 (1 << 0) #define ANIM_FLAG_UPDATEY (1 << 1) @@ -82,35 +79,19 @@ typedef struct { /* 0xC */ u16 staticIndexMax; } AnimationHeader; // size = 0x10 -typedef struct { - /* 0x00 */ s16 xMax; - /* 0x02 */ s16 x; - /* 0x04 */ s16 yMax; - /* 0x06 */ s16 y; - /* 0x08 */ s16 zMax; - /* 0x10 */ s16 z; -} JointKey; // size = 0x12 - -typedef struct { - /* 0x0 */ s16 frameCount; - /* 0x2 */ s16 limbCount; - /* 0x4 */ s16* frameData; - /* 0x8 */ JointKey* jointKey; -} LegacyAnimationHeader; // size = 0xC - typedef enum { - ANIMATION_LINKANIMETION, - ANIMENTRY_COPYALL, - ANIMENTRY_INTERP, - ANIMENTRY_COPYTRUE, - ANIMENTRY_COPYFALSE, - ANIMENTRY_MOVEACTOR + /* 0 */ ANIMATION_LINKANIMETION, + /* 1 */ ANIMENTRY_COPYALL, + /* 2 */ ANIMENTRY_INTERP, + /* 3 */ ANIMENTRY_COPYTRUE, + /* 4 */ ANIMENTRY_COPYFALSE, + /* 5 */ ANIMENTRY_MOVEACTOR } AnimationType; typedef struct { /* 0x00 */ DmaRequest req; /* 0x20 */ OSMesgQueue msgQueue; - /* 0x38 */ OSMesg msg; + /* 0x38 */ OSMesg msg[1]; } AnimEntryLoadFrame; // size = 0x3C typedef struct { @@ -166,16 +147,16 @@ typedef struct { typedef struct AnimationContext { /* 0x000 */ s16 animationCount; - /* 0x004 */ AnimationEntry entries[ANIMATION_ENTRY_MAX]; + /* 0x004 */ AnimationEntry entries[50]; } AnimationContext; // size = 0xC84 typedef struct { /* 0x0 */ AnimationHeaderCommon common; /* 0x4 */ union { void* segmentVoid; - struct PlayerAnimationFrame* segment; + struct PlayerAnimationFrame* linkAnimSegment; }; -} LinkAnimationHeader; // size = 0x8 +} PlayerAnimationHeader; // size = 0x8 typedef struct SkelAnime { /* 0x00 */ u8 limbCount; // Number of limbs in the skeleton @@ -183,7 +164,7 @@ typedef struct SkelAnime { /* 0x02 */ u8 dListCount; // Number of display lists in a flexible skeleton /* 0x03 */ s8 taper; // Tapering to use when morphing between animations. Only used by Door_Warp1. /* 0x04 */ void** skeleton; // An array of pointers to limbs. Can be StandardLimb, LodLimb, or SkinLimb. - /* 0x08 */ void* animation; // Can be an AnimationHeader or LinkAnimationHeader. + /* 0x08 */ void* animation; // Can be an AnimationHeader or PlayerAnimationHeader. /* 0x0C */ f32 startFrame; // In mode 4, start of partial loop. /* 0x10 */ f32 endFrame; // In mode 2, Update returns true when curFrame is equal to this. In mode 4, end of partial loop. /* 0x14 */ f32 animLength; // Total number of frames in the current animation's file. @@ -195,10 +176,10 @@ typedef struct SkelAnime { /* 0x2C */ f32 morphRate; // Reciprocal of the number of frames in the morph /* 0x30 */ union { s32 (*normal)(struct SkelAnime*);// Can be Loop, Partial loop, Play once, Morph, or Tapered morph - s32 (*link)(struct PlayState*, struct SkelAnime*); // Loop, Play once, and Morph + s32 (*player)(struct PlayState*, struct SkelAnime*); // Loop, Play once, and Morph } update; - /* 0x34 */ s8 initFlags; // Flags used when initializing Link's skeleton - /* 0x35 */ u8 moveFlags; // Flags used for animations that move the actor in worldspace. + /* 0x34 */ s8 initFlags; // Flags used when initializing Player's skeleton + /* 0x35 */ u8 moveFlags; // Flags used for animations that move the actor in worldspace. /* 0x36 */ s16 prevRot; // Previous rotation in worldspace. /* 0x38 */ Vec3s prevTransl; // Previous modelspace translation. /* 0x3E */ Vec3s baseTransl; // Base modelspace translation. @@ -228,8 +209,6 @@ typedef void (*TransformLimbDraw)(struct PlayState* play, s32 limbIndex, struct typedef void (*AnimationEntryCallback)(struct PlayState*, AnimationEntryData*); -extern u32 link_animetion_segment; - typedef struct { /* 0x00 */ AnimationHeader* animation; /* 0x04 */ f32 playSpeed; @@ -324,4 +303,68 @@ typedef s32 (*OverrideKeyframeDrawScaled)(struct PlayState* play, SkeletonInfo* typedef void (*PostKeyframeDrawScaled)(struct PlayState* play, SkeletonInfo* skeleton, s32 limbIndex, Gfx** dList, u8* flags, struct Actor* actor, Vec3f* scale, Vec3s* rot, Vec3f* pos); +void SkelAnime_DrawLod(struct PlayState* play, void** skeleton, Vec3s* jointTable, OverrideLimbDrawOpa overrideLimbDraw, PostLimbDrawOpa postLimbDraw, struct Actor* actor, s32 lod); +void SkelAnime_DrawFlexLod(struct PlayState* play, void** skeleton, Vec3s* jointTable, s32 dListCount, OverrideLimbDrawFlex overrideLimbDraw, PostLimbDrawFlex postLimbDraw, struct Actor* actor, s32 lod); +void SkelAnime_DrawOpa(struct PlayState* play, void** skeleton, Vec3s* jointTable, OverrideLimbDrawOpa overrideLimbDraw, PostLimbDrawOpa postLimbDraw, struct Actor* actor); +void SkelAnime_DrawFlexOpa(struct PlayState* play, void** skeleton, Vec3s* jointTable, s32 dListCount, OverrideLimbDrawOpa overrideLimbDraw, PostLimbDrawOpa postLimbDraw, struct Actor* actor); +void SkelAnime_DrawTransformFlexOpa(struct PlayState* play, void** skeleton, Vec3s* jointTable, s32 dListCount, OverrideLimbDrawOpa overrideLimbDraw, PostLimbDrawOpa postLimbDraw, TransformLimbDrawOpa transformLimbDraw, struct Actor* actor); +s16 Animation_GetLastFrame(void* animation); +Gfx* SkelAnime_Draw(struct PlayState* play, void** skeleton, Vec3s* jointTable, OverrideLimbDraw overrideLimbDraw, PostLimbDraw postLimbDraw, struct Actor* actor, Gfx* gfx); +Gfx* SkelAnime_DrawFlex(struct PlayState* play, void** skeleton, Vec3s* jointTable, s32 dListCount, OverrideLimbDraw overrideLimbDraw, PostLimbDraw postLimbDraw, struct Actor* actor, Gfx* gfx); + +void AnimationContext_Reset(AnimationContext* animationCtx); +void AnimationContext_SetNextQueue(struct PlayState* play); +void AnimationContext_DisableQueue(struct PlayState* play); +void AnimationContext_SetLoadFrame(struct PlayState* play, PlayerAnimationHeader* animation, s32 frame, s32 limbCount, Vec3s* frameTable); +void AnimationContext_SetCopyAll(struct PlayState* play, s32 vecCount, Vec3s* dst, Vec3s* src); +void AnimationContext_SetInterp(struct PlayState* play, s32 vecCount, Vec3s* base, Vec3s* mod, f32 weight); +void AnimationContext_SetCopyTrue(struct PlayState* play, s32 vecCount, Vec3s* dst, Vec3s* src, u8* copyFlag); +void AnimationContext_SetCopyFalse(struct PlayState* play, s32 vecCount, Vec3s* dst, Vec3s* src, u8* copyFlag); +void AnimationContext_SetMoveActor(struct PlayState* play, struct Actor* actor, SkelAnime* skelAnime, f32 arg3); + +void AnimationContext_Update(struct PlayState* play, AnimationContext* animationCtx); +void SkelAnime_InitPlayer(struct PlayState* play, SkelAnime* skelAnime, FlexSkeletonHeader* skeletonHeaderSeg, PlayerAnimationHeader* animation, s32 flags, void* jointTableBuffer, void* morphTableBuffer, s32 limbBufCount); +void PlayerAnimation_SetUpdateFunction(SkelAnime* skelAnime); +s32 PlayerAnimation_Update(struct PlayState* play, SkelAnime* skelAnime); +void Animation_SetMorph(struct PlayState* play, SkelAnime* skelAnime, f32 morphFrames); +void PlayerAnimation_Change(struct PlayState* play, SkelAnime* skelAnime, PlayerAnimationHeader* animation, f32 playSpeed, f32 startFrame, f32 endFrame, u8 mode, f32 morphFrames); +void PlayerAnimation_PlayOnce(struct PlayState* play, SkelAnime* skelAnime, PlayerAnimationHeader* animation); +void PlayerAnimation_PlayOnceSetSpeed(struct PlayState* play, SkelAnime* skelAnime, PlayerAnimationHeader* animation, f32 playSpeed); +void PlayerAnimation_PlayLoop(struct PlayState* play, SkelAnime* skelAnime, PlayerAnimationHeader* animation); +void PlayerAnimation_PlayLoopSetSpeed(struct PlayState* play, SkelAnime* skelAnime, PlayerAnimationHeader* animation, f32 playSpeed); +void PlayerAnimation_CopyJointToMorph(struct PlayState* play, SkelAnime* skelAnime); +void PlayerAnimation_CopyMorphToJoint(struct PlayState* play, SkelAnime* skelAnime); +void PlayerAnimation_LoadToMorph(struct PlayState* play, SkelAnime* skelAnime, PlayerAnimationHeader* animation, f32 frame); +void PlayerAnimation_LoadToJoint(struct PlayState* play, SkelAnime* skelAnime, PlayerAnimationHeader* animation, f32 frame); +void PlayerAnimation_InterpJointMorph(struct PlayState* play, SkelAnime* skelAnime, f32 weight); +void PlayerAnimation_BlendToJoint(struct PlayState* play, SkelAnime* skelAnime, PlayerAnimationHeader* animation1, f32 frame1, PlayerAnimationHeader* animation2, f32 frame2, f32 blendWeight, void* blendTableBuffer); +void PlayerAnimation_BlendToMorph(struct PlayState* play, SkelAnime* skelAnime, PlayerAnimationHeader* animation1, f32 frame1, PlayerAnimationHeader* animation2, f32 frame2, f32 blendWeight, void* blendTableBuffer); +void PlayerAnimation_EndLoop(SkelAnime* skelAnime); +s32 PlayerAnimation_OnFrame(SkelAnime* skelAnime, f32 frame); + +void SkelAnime_Init(struct PlayState* play, SkelAnime* skelAnime, SkeletonHeader* skeletonHeaderSeg, AnimationHeader* animation, Vec3s* jointTable, Vec3s* morphTable, s32 limbCount); +void SkelAnime_InitFlex(struct PlayState* play, SkelAnime* skelAnime, FlexSkeletonHeader* skeletonHeaderSeg, AnimationHeader* animation, Vec3s* jointTable, Vec3s* morphTable, s32 limbCount); +void SkelAnime_InitSkin(struct GameState* gameState, SkelAnime* skelAnime, SkeletonHeader* skeletonHeaderSeg, AnimationHeader* animation); + +s32 SkelAnime_Update(SkelAnime* skelAnime); +void Animation_ChangeImpl(SkelAnime* skelAnime, AnimationHeader* animation, f32 playSpeed, f32 startFrame, f32 endFrame, u8 mode, f32 morphFrames, s8 taper); +void Animation_Change(SkelAnime* skelAnime, AnimationHeader* animation, f32 playSpeed, f32 startFrame, f32 endFrame, u8 mode, f32 morphFrames); +void Animation_PlayOnce(SkelAnime* skelAnime, AnimationHeader* animation); +void Animation_MorphToPlayOnce(SkelAnime* skelAnime, AnimationHeader* animation, f32 morphFrames); +void Animation_PlayOnceSetSpeed(SkelAnime* skelAnime, AnimationHeader* animation, f32 playSpeed); +void Animation_PlayLoop(SkelAnime* skelAnime, AnimationHeader* animation); +void Animation_MorphToLoop(SkelAnime* skelAnime, AnimationHeader* animation, f32 morphFrames); +void Animation_PlayLoopSetSpeed(SkelAnime* skelAnime, AnimationHeader* animation, f32 playSpeed); +void Animation_EndLoop(SkelAnime* skelAnime); +void Animation_Reverse(SkelAnime* skelAnime); +void SkelAnime_CopyFrameTableTrue(SkelAnime* skelAnime, Vec3s* dst, Vec3s* src, u8* copyFlag); +void SkelAnime_CopyFrameTableFalse(SkelAnime* skelAnime, Vec3s* dst, Vec3s* src, u8* copyFlag); +void SkelAnime_UpdateTranslation(SkelAnime* skelAnime, Vec3f* diff, s16 angle); +s32 Animation_OnFrame(SkelAnime* skelAnime, f32 frame); +void SkelAnime_Free(SkelAnime* skelAnime, struct PlayState* play); + +// ZAPD compatibility typedefs +// TODO: Remove when ZAPD adds support for them +typedef PlayerAnimationHeader LinkAnimationHeader; + #endif diff --git a/include/z64animation_legacy.h b/include/z64animation_legacy.h new file mode 100644 index 000000000..238939f74 --- /dev/null +++ b/include/z64animation_legacy.h @@ -0,0 +1,36 @@ +#ifndef Z64_ANIMATION_LEGACY_H +#define Z64_ANIMATION_LEGACY_H + +#include "ultra64.h" +#include "z64math.h" + +typedef struct LegacyLimb { + /* 0x00 */ Gfx* dList; + /* 0x04 */ Vec3f trans; + /* 0x10 */ Vec3s rot; + /* 0x18 */ struct LegacyLimb* sibling; + /* 0x1C */ struct LegacyLimb* child; +} LegacyLimb; // size = 0x20 + +typedef struct { + /* 0x00 */ s16 xMax; + /* 0x02 */ s16 x; + /* 0x04 */ s16 yMax; + /* 0x06 */ s16 y; + /* 0x08 */ s16 zMax; + /* 0x10 */ s16 z; +} LegacyJointKey; // size = 0x12 + +typedef struct { + /* 0x0 */ s16 frameCount; + /* 0x2 */ s16 limbCount; + /* 0x4 */ s16* frameData; + /* 0x8 */ LegacyJointKey* jointKey; +} LegacyAnimationHeader; // size = 0xC + +s16 SkelAnime_GetFrameDataLegacy(LegacyAnimationHeader* animation, s32 frame, Vec3s* frameTable); +s16 Animation_GetLimbCountLegacy(LegacyAnimationHeader* animation); +s16 Animation_GetLengthLegacy(LegacyAnimationHeader* animation); +s16 Animation_GetLastFrameLegacy(LegacyAnimationHeader* animation); + +#endif diff --git a/include/z64player.h b/include/z64player.h index 456eba3eb..f1d1f75e4 100644 --- a/include/z64player.h +++ b/include/z64player.h @@ -399,15 +399,15 @@ typedef struct PlayerAgeProperties { /* 0x94 */ u16 surfaceSfxIdOffset; /* 0x98 */ f32 unk_98; /* 0x9C */ f32 unk_9C; - /* 0xA0 */ LinkAnimationHeader* unk_A0; - /* 0xA4 */ LinkAnimationHeader* unk_A4; - /* 0xA8 */ LinkAnimationHeader* unk_A8; - /* 0xAC */ LinkAnimationHeader* unk_AC; - /* 0xB0 */ LinkAnimationHeader* unk_B0; - /* 0xB4 */ LinkAnimationHeader* unk_B4[4]; - /* 0xC4 */ LinkAnimationHeader* unk_C4[2]; - /* 0xCC */ LinkAnimationHeader* unk_CC[2]; - /* 0xD4 */ LinkAnimationHeader* unk_D4[2]; + /* 0xA0 */ PlayerAnimationHeader* unk_A0; + /* 0xA4 */ PlayerAnimationHeader* unk_A4; + /* 0xA8 */ PlayerAnimationHeader* unk_A8; + /* 0xAC */ PlayerAnimationHeader* unk_AC; + /* 0xB0 */ PlayerAnimationHeader* unk_B0; + /* 0xB4 */ PlayerAnimationHeader* unk_B4[4]; + /* 0xC4 */ PlayerAnimationHeader* unk_C4[2]; + /* 0xCC */ PlayerAnimationHeader* unk_CC[2]; + /* 0xD4 */ PlayerAnimationHeader* unk_D4[2]; } PlayerAgeProperties; // size = 0xDC typedef struct { diff --git a/src/code/z_skelanime.c b/src/code/z_skelanime.c index 9890f4741..cf7f95078 100644 --- a/src/code/z_skelanime.c +++ b/src/code/z_skelanime.c @@ -3,17 +3,24 @@ #define ANIM_INTERP 1 -s32 LinkAnimation_Loop(PlayState* play, SkelAnime* skelAnime); -s32 LinkAnimation_Once(PlayState* play, SkelAnime* skelAnime); +s32 PlayerAnimation_Loop(PlayState* play, SkelAnime* skelAnime); +s32 PlayerAnimation_Once(PlayState* play, SkelAnime* skelAnime); s32 SkelAnime_LoopFull(SkelAnime* skelAnime); s32 SkelAnime_LoopPartial(SkelAnime* skelAnime); s32 SkelAnime_Once(SkelAnime* skelAnime); void Animation_PlayLoop(SkelAnime* skelAnime, AnimationHeader* animation); void SkelAnime_UpdateTranslation(SkelAnime* skelAnime, Vec3f* diff, s16 angle); -void LinkAnimation_Change(PlayState* play, SkelAnime* skelAnime, LinkAnimationHeader* animation, f32 playSpeed, - f32 startFrame, f32 endFrame, u8 mode, f32 morphFrames); +void PlayerAnimation_Change(PlayState* play, SkelAnime* skelAnime, PlayerAnimationHeader* animation, f32 playSpeed, + f32 startFrame, f32 endFrame, u8 mode, f32 morphFrames); void SkelAnime_CopyFrameTable(SkelAnime* skelAnime, Vec3s* dst, Vec3s* src); +void AnimationContext_LoadFrame(struct PlayState* play, AnimationEntryData* data); +void AnimationContext_CopyAll(struct PlayState* play, AnimationEntryData* data); +void AnimationContext_Interp(struct PlayState* play, AnimationEntryData* data); +void AnimationContext_CopyTrue(struct PlayState* play, AnimationEntryData* data); +void AnimationContext_CopyFalse(struct PlayState* play, AnimationEntryData* data); +void AnimationContext_MoveActor(struct PlayState* play, AnimationEntryData* data); + static AnimationEntryCallback sAnimationLoadDone[] = { AnimationContext_LoadFrame, AnimationContext_CopyAll, AnimationContext_Interp, AnimationContext_CopyTrue, AnimationContext_CopyFalse, AnimationContext_MoveActor, @@ -44,7 +51,7 @@ void SkelAnime_DrawLimbLod(PlayState* play, s32 limbIndex, void** skeleton, Vec3 pos.z = limb->jointPos.z; dList = limb->dLists[lod]; - if ((overrideLimbDraw == NULL) || (overrideLimbDraw(play, limbIndex, &dList, &pos, &rot, actor) == 0)) { + if ((overrideLimbDraw == NULL) || !overrideLimbDraw(play, limbIndex, &dList, &pos, &rot, actor)) { Matrix_TranslateRotateZYX(&pos, &rot); if (dList != NULL) { Gfx* polyTemp = POLY_OPA_DISP; @@ -876,7 +883,7 @@ Gfx* SkelAnime_DrawFlex(PlayState* play, void** skeleton, Vec3s* jointTable, s32 s16 SkelAnime_GetFrameDataLegacy(LegacyAnimationHeader* animation, s32 frame, Vec3s* frameTable) { LegacyAnimationHeader* animHeader = Lib_SegmentedToVirtual(animation); s16 limbCount = animHeader->limbCount; - JointKey* key = Lib_SegmentedToVirtual(animHeader->jointKey); + LegacyJointKey* key = Lib_SegmentedToVirtual(animHeader->jointKey); s16* frameData = Lib_SegmentedToVirtual(animHeader->frameData); s16* staticData = &frameData[0]; s16* dynamicData = &frameData[frame]; @@ -901,7 +908,7 @@ s16 SkelAnime_GetFrameDataLegacy(LegacyAnimationHeader* animation, s32 frame, Ve /** * Used by legacy animation format */ -s16 Animation_GetLimbCount2(LegacyAnimationHeader* animation) { +s16 Animation_GetLimbCountLegacy(LegacyAnimationHeader* animation) { LegacyAnimationHeader* animHeader = Lib_SegmentedToVirtual(animation); return animHeader->limbCount; @@ -910,7 +917,7 @@ s16 Animation_GetLimbCount2(LegacyAnimationHeader* animation) { /** * Used by legacy animation format */ -s16 Animation_GetLength2(LegacyAnimationHeader* animation) { +s16 Animation_GetLengthLegacy(LegacyAnimationHeader* animation) { LegacyAnimationHeader* animHeader = Lib_SegmentedToVirtual(animation); return animHeader->frameCount; @@ -919,7 +926,7 @@ s16 Animation_GetLength2(LegacyAnimationHeader* animation) { /** * Used by legacy animation format */ -s16 Animation_GetLastFrame2(LegacyAnimationHeader* animation) { +s16 Animation_GetLastFrameLegacy(LegacyAnimationHeader* animation) { AnimationHeaderCommon* animHeader = Lib_SegmentedToVirtual(animation); return animHeader->frameCount - 1; @@ -979,7 +986,7 @@ AnimationEntry* AnimationContext_AddEntry(AnimationContext* animationCtx, Animat AnimationEntry* entry; s16 index = animationCtx->animationCount; - if (index >= ANIMATION_ENTRY_MAX) { + if (index >= ARRAY_COUNT(animationCtx->entries)) { return NULL; } @@ -989,21 +996,25 @@ AnimationEntry* AnimationContext_AddEntry(AnimationContext* animationCtx, Animat return entry; } +#define LINK_ANIMETION_OFFSET(addr, offset) \ + (SEGMENT_ROM_START(link_animetion) + ((uintptr_t)addr & 0xFFFFFF) + ((u32)offset)) + /** - * Requests loading frame data from the Link animation into frameTable + * Requests loading frame data from the Player animation into frameTable */ -void AnimationContext_SetLoadFrame(PlayState* play, LinkAnimationHeader* animation, s32 frame, s32 limbCount, +void AnimationContext_SetLoadFrame(PlayState* play, PlayerAnimationHeader* animation, s32 frame, s32 limbCount, Vec3s* frameTable) { AnimationEntry* entry = AnimationContext_AddEntry(&play->animationCtx, ANIMATION_LINKANIMETION); if (entry != NULL) { - LinkAnimationHeader* linkAnimHeader = Lib_SegmentedToVirtual(animation); - uintptr_t ram = frameTable; + PlayerAnimationHeader* playerAnimHeader = Lib_SegmentedToVirtual(animation); + void* ram = (void*)frameTable; - osCreateMesgQueue(&entry->data.load.msgQueue, &entry->data.load.msg, 1); - DmaMgr_SendRequestImpl(&entry->data.load.req, ram, - LINK_ANIMETION_OFFSET(linkAnimHeader->segment, (sizeof(Vec3s) * limbCount + 2) * frame), - sizeof(Vec3s) * limbCount + 2, 0, &entry->data.load.msgQueue, NULL); + osCreateMesgQueue(&entry->data.load.msgQueue, entry->data.load.msg, ARRAY_COUNT(entry->data.load.msg)); + DmaMgr_SendRequestImpl( + &entry->data.load.req, ram, + LINK_ANIMETION_OFFSET(playerAnimHeader->linkAnimSegment, (sizeof(Vec3s) * limbCount + sizeof(s16)) * frame), + sizeof(Vec3s) * limbCount + sizeof(s16), 0, &entry->data.load.msgQueue, NULL); } } @@ -1080,7 +1091,7 @@ void AnimationContext_SetMoveActor(PlayState* play, Actor* actor, SkelAnime* ske } /** - * Receives the request for Link's animation frame data + * Receives the request for Player's animation frame data */ void AnimationContext_LoadFrame(PlayState* play, AnimationEntryData* data) { AnimEntryLoadFrame* entry = &data->load; @@ -1185,12 +1196,12 @@ void AnimationContext_Update(PlayState* play, AnimationContext* animationCtx) { } /** - * Initializes a skeleton to be used with Link animations to a looping animation, dynamically allocating the frame + * Initializes a skeleton to be used with Player animations to a looping animation, dynamically allocating the frame * tables if not given. */ -void SkelAnime_InitLink(PlayState* play, SkelAnime* skelAnime, FlexSkeletonHeader* skeletonHeaderSeg, - LinkAnimationHeader* animation, s32 flags, void* jointTableBuffer, void* morphTableBuffer, - s32 limbBufCount) { +void SkelAnime_InitPlayer(PlayState* play, SkelAnime* skelAnime, FlexSkeletonHeader* skeletonHeaderSeg, + PlayerAnimationHeader* animation, s32 flags, void* jointTableBuffer, void* morphTableBuffer, + s32 limbBufCount) { FlexSkeletonHeader* skeletonHeader; s32 headerJointCount; s32 limbCount; @@ -1226,52 +1237,52 @@ void SkelAnime_InitLink(PlayState* play, SkelAnime* skelAnime, FlexSkeletonHeade skelAnime->morphTable = (void*)ALIGN16((uintptr_t)morphTableBuffer); } - LinkAnimation_Change(play, skelAnime, animation, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f); + PlayerAnimation_Change(play, skelAnime, animation, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f); } /** - * Sets the update function of a SkelAnime that uses Link animations based on its mode + * Sets the update function of a SkelAnime that uses Player animations based on its mode */ -void LinkAnimation_SetUpdateFunction(SkelAnime* skelAnime) { +void PlayerAnimation_SetUpdateFunction(SkelAnime* skelAnime) { if (skelAnime->mode <= ANIMMODE_LOOP_INTERP) { - skelAnime->update.link = LinkAnimation_Loop; + skelAnime->update.player = PlayerAnimation_Loop; } else { - skelAnime->update.link = LinkAnimation_Once; + skelAnime->update.player = PlayerAnimation_Once; } skelAnime->morphWeight = 0.0f; } /** - * Advances the current Link animation and updates all frame tables. If the animation plays once, returns true when it + * Advances the current Player animation and updates all frame tables. If the animation plays once, returns true when it * finishes. */ -s32 LinkAnimation_Update(PlayState* play, SkelAnime* skelAnime) { - return skelAnime->update.link(play, skelAnime); +s32 PlayerAnimation_Update(PlayState* play, SkelAnime* skelAnime) { + return skelAnime->update.player(play, skelAnime); } /** * Requests an interpolation between the pose in jointTable to the one in morphTable, advancing the morph but not the * animation frame */ -s32 LinkAnimation_Morph(PlayState* play, SkelAnime* skelAnime) { +s32 PlayerAnimation_Morph(PlayState* play, SkelAnime* skelAnime) { f32 prevMorphWeight = skelAnime->morphWeight; f32 updateRate = (s32)play->state.framerateDivisor * 0.5f; skelAnime->morphWeight -= skelAnime->morphRate * updateRate; if (skelAnime->morphWeight <= 0.0f) { - LinkAnimation_SetUpdateFunction(skelAnime); + PlayerAnimation_SetUpdateFunction(skelAnime); } AnimationContext_SetInterp(play, skelAnime->limbCount, skelAnime->jointTable, skelAnime->morphTable, 1.0f - (skelAnime->morphWeight / prevMorphWeight)); - return 0; + return false; } /** - * Requests a load of the next frame of a Link animation, advances the morph, and requests an interpolation between + * Requests a load of the next frame of a Player animation, advances the morph, and requests an interpolation between * jointTable and morphTable */ -void LinkAnimation_AnimateFrame(PlayState* play, SkelAnime* skelAnime) { +void PlayerAnimation_AnimateFrame(PlayState* play, SkelAnime* skelAnime) { AnimationContext_SetLoadFrame(play, skelAnime->animation, skelAnime->curFrame, skelAnime->limbCount, skelAnime->jointTable); if (skelAnime->morphWeight != 0) { @@ -1287,9 +1298,9 @@ void LinkAnimation_AnimateFrame(PlayState* play, SkelAnime* skelAnime) { } /** - * Advances a Link animation that loops over its full length + * Advances a Player animation that loops over its full length */ -s32 LinkAnimation_Loop(PlayState* play, SkelAnime* skelAnime) { +s32 PlayerAnimation_Loop(PlayState* play, SkelAnime* skelAnime) { f32 updateRate = (s32)play->state.framerateDivisor * 0.5f; skelAnime->curFrame += skelAnime->playSpeed * updateRate; @@ -1298,19 +1309,19 @@ s32 LinkAnimation_Loop(PlayState* play, SkelAnime* skelAnime) { } else if (skelAnime->animLength <= skelAnime->curFrame) { skelAnime->curFrame -= skelAnime->animLength; } - LinkAnimation_AnimateFrame(play, skelAnime); - return 0; + PlayerAnimation_AnimateFrame(play, skelAnime); + return false; } /** - * Advances a Link animation that stops at endFrame and returns true when it is reached. + * Advances a Player animation that stops at endFrame and returns true when it is reached. */ -s32 LinkAnimation_Once(PlayState* play, SkelAnime* skelAnime) { +s32 PlayerAnimation_Once(PlayState* play, SkelAnime* skelAnime) { f32 updateRate = (s32)play->state.framerateDivisor * 0.5f; if (skelAnime->curFrame == skelAnime->endFrame) { - LinkAnimation_AnimateFrame(play, skelAnime); - return 1; + PlayerAnimation_AnimateFrame(play, skelAnime); + return true; } skelAnime->curFrame += skelAnime->playSpeed * updateRate; @@ -1324,8 +1335,8 @@ s32 LinkAnimation_Once(PlayState* play, SkelAnime* skelAnime) { skelAnime->curFrame -= skelAnime->animLength; } } - LinkAnimation_AnimateFrame(play, skelAnime); - return 0; + PlayerAnimation_AnimateFrame(play, skelAnime); + return false; } /** @@ -1337,28 +1348,28 @@ void Animation_SetMorph(PlayState* play, SkelAnime* skelAnime, f32 morphFrames) } /** - * General way to set a new Link animation, allowing choice of playback speed, start frame, end frame, play mode, and + * General way to set a new Player animation, allowing choice of playback speed, start frame, end frame, play mode, and * number of transition frames. Positive morph frames morph from the current pose to the start pose of the new * animation, then start the new animation. Negative morph frames start the new animation immediately, modified by the * pose immediately before the animation change. */ -void LinkAnimation_Change(PlayState* play, SkelAnime* skelAnime, LinkAnimationHeader* animation, f32 playSpeed, - f32 startFrame, f32 endFrame, u8 mode, f32 morphFrames) { +void PlayerAnimation_Change(PlayState* play, SkelAnime* skelAnime, PlayerAnimationHeader* animation, f32 playSpeed, + f32 startFrame, f32 endFrame, u8 mode, f32 morphFrames) { skelAnime->mode = mode; if ((morphFrames != 0.0f) && ((animation != skelAnime->animation) || (startFrame != skelAnime->curFrame))) { if (morphFrames < 0) { - LinkAnimation_SetUpdateFunction(skelAnime); + PlayerAnimation_SetUpdateFunction(skelAnime); SkelAnime_CopyFrameTable(skelAnime, skelAnime->morphTable, skelAnime->jointTable); morphFrames = -morphFrames; } else { - skelAnime->update.link = LinkAnimation_Morph; + skelAnime->update.player = PlayerAnimation_Morph; AnimationContext_SetLoadFrame(play, animation, (s32)startFrame, skelAnime->limbCount, skelAnime->morphTable); } skelAnime->morphWeight = 1.0f; skelAnime->morphRate = 1.0f / morphFrames; } else { - LinkAnimation_SetUpdateFunction(skelAnime); + PlayerAnimation_SetUpdateFunction(skelAnime); AnimationContext_SetLoadFrame(play, animation, (s32)startFrame, skelAnime->limbCount, skelAnime->jointTable); skelAnime->morphWeight = 0.0f; } @@ -1373,79 +1384,80 @@ void LinkAnimation_Change(PlayState* play, SkelAnime* skelAnime, LinkAnimationHe } /** - * Immediately changes to a Link animation that plays once at the default speed. + * Immediately changes to a Player animation that plays once at the default speed. */ -void LinkAnimation_PlayOnce(PlayState* play, SkelAnime* skelAnime, LinkAnimationHeader* animation) { - LinkAnimation_Change(play, skelAnime, animation, 1.0f, 0.0f, Animation_GetLastFrame(&animation->common), - ANIMMODE_ONCE, 0.0f); +void PlayerAnimation_PlayOnce(PlayState* play, SkelAnime* skelAnime, PlayerAnimationHeader* animation) { + PlayerAnimation_Change(play, skelAnime, animation, 1.0f, 0.0f, Animation_GetLastFrame(&animation->common), + ANIMMODE_ONCE, 0.0f); } /** - * Immediately changes to a Link animation that plays once at the specified speed. + * Immediately changes to a Player animation that plays once at the specified speed. */ -void LinkAnimation_PlayOnceSetSpeed(PlayState* play, SkelAnime* skelAnime, LinkAnimationHeader* animation, - f32 playSpeed) { - LinkAnimation_Change(play, skelAnime, animation, playSpeed, 0.0f, Animation_GetLastFrame(&animation->common), - ANIMMODE_ONCE, 0.0f); +void PlayerAnimation_PlayOnceSetSpeed(PlayState* play, SkelAnime* skelAnime, PlayerAnimationHeader* animation, + f32 playSpeed) { + PlayerAnimation_Change(play, skelAnime, animation, playSpeed, 0.0f, Animation_GetLastFrame(&animation->common), + ANIMMODE_ONCE, 0.0f); } /** - * Immediately changes to a Link animation that loops at the default speed. + * Immediately changes to a Player animation that loops at the default speed. */ -void LinkAnimation_PlayLoop(PlayState* play, SkelAnime* skelAnime, LinkAnimationHeader* animation) { - LinkAnimation_Change(play, skelAnime, animation, 1.0f, 0.0f, Animation_GetLastFrame(&animation->common), - ANIMMODE_LOOP, 0.0f); +void PlayerAnimation_PlayLoop(PlayState* play, SkelAnime* skelAnime, PlayerAnimationHeader* animation) { + PlayerAnimation_Change(play, skelAnime, animation, 1.0f, 0.0f, Animation_GetLastFrame(&animation->common), + ANIMMODE_LOOP, 0.0f); } /** - * Immediately changes to a Link animation that loops at the specified speed. + * Immediately changes to a Player animation that loops at the specified speed. */ -void LinkAnimation_PlayLoopSetSpeed(PlayState* play, SkelAnime* skelAnime, LinkAnimationHeader* animation, - f32 playSpeed) { - LinkAnimation_Change(play, skelAnime, animation, playSpeed, 0.0f, Animation_GetLastFrame(&animation->common), - ANIMMODE_LOOP, 0.0f); +void PlayerAnimation_PlayLoopSetSpeed(PlayState* play, SkelAnime* skelAnime, PlayerAnimationHeader* animation, + f32 playSpeed) { + PlayerAnimation_Change(play, skelAnime, animation, playSpeed, 0.0f, Animation_GetLastFrame(&animation->common), + ANIMMODE_LOOP, 0.0f); } /** * Requests copying jointTable to morphTable */ -void LinkAnimation_CopyJointToMorph(PlayState* play, SkelAnime* skelAnime) { +void PlayerAnimation_CopyJointToMorph(PlayState* play, SkelAnime* skelAnime) { AnimationContext_SetCopyAll(play, skelAnime->limbCount, skelAnime->morphTable, skelAnime->jointTable); } /** * Requests copying morphTable to jointTable */ -void LinkAnimation_CopyMorphToJoint(PlayState* play, SkelAnime* skelAnime) { +void PlayerAnimation_CopyMorphToJoint(PlayState* play, SkelAnime* skelAnime) { AnimationContext_SetCopyAll(play, skelAnime->limbCount, skelAnime->jointTable, skelAnime->morphTable); } /** - * Requests loading frame data from the Link animation into morphTable + * Requests loading frame data from the Player animation into morphTable */ -void LinkAnimation_LoadToMorph(PlayState* play, SkelAnime* skelAnime, LinkAnimationHeader* animation, f32 frame) { +void PlayerAnimation_LoadToMorph(PlayState* play, SkelAnime* skelAnime, PlayerAnimationHeader* animation, f32 frame) { AnimationContext_SetLoadFrame(play, animation, (s32)frame, skelAnime->limbCount, skelAnime->morphTable); } /** - * Requests loading frame data from the Link animation into jointTable + * Requests loading frame data from the Player animation into jointTable */ -void LinkAnimation_LoadToJoint(PlayState* play, SkelAnime* skelAnime, LinkAnimationHeader* animation, f32 frame) { +void PlayerAnimation_LoadToJoint(PlayState* play, SkelAnime* skelAnime, PlayerAnimationHeader* animation, f32 frame) { AnimationContext_SetLoadFrame(play, animation, (s32)frame, skelAnime->limbCount, skelAnime->jointTable); } /** * Requests interpolating between jointTable and morphTable, placing the result in jointTable */ -void LinkAnimation_InterpJointMorph(PlayState* play, SkelAnime* skelAnime, f32 weight) { +void PlayerAnimation_InterpJointMorph(PlayState* play, SkelAnime* skelAnime, f32 weight) { AnimationContext_SetInterp(play, skelAnime->limbCount, skelAnime->jointTable, skelAnime->morphTable, weight); } /** - * Requests loading frame data from the Link animations and blending them, placing the result in jointTable + * Requests loading frame data from the Player animations and blending them, placing the result in jointTable */ -void LinkAnimation_BlendToJoint(PlayState* play, SkelAnime* skelAnime, LinkAnimationHeader* animation1, f32 frame1, - LinkAnimationHeader* animation2, f32 frame2, f32 blendWeight, void* blendTableBuffer) { +void PlayerAnimation_BlendToJoint(PlayState* play, SkelAnime* skelAnime, PlayerAnimationHeader* animation1, f32 frame1, + PlayerAnimationHeader* animation2, f32 frame2, f32 blendWeight, + void* blendTableBuffer) { void* alignedBlendTable; AnimationContext_SetLoadFrame(play, animation1, (s32)frame1, skelAnime->limbCount, skelAnime->jointTable); @@ -1457,10 +1469,11 @@ void LinkAnimation_BlendToJoint(PlayState* play, SkelAnime* skelAnime, LinkAnima } /** - * Requests loading frame data from the Link animations and blending them, placing the result in morphTable + * Requests loading frame data from the Player animations and blending them, placing the result in morphTable */ -void LinkAnimation_BlendToMorph(PlayState* play, SkelAnime* skelAnime, LinkAnimationHeader* animation1, f32 frame1, - LinkAnimationHeader* animation2, f32 frame2, f32 blendWeight, void* blendTableBuffer) { +void PlayerAnimation_BlendToMorph(PlayState* play, SkelAnime* skelAnime, PlayerAnimationHeader* animation1, f32 frame1, + PlayerAnimationHeader* animation2, f32 frame2, f32 blendWeight, + void* blendTableBuffer) { void* alignedBlendTable; AnimationContext_SetLoadFrame(play, animation1, (s32)frame1, skelAnime->limbCount, skelAnime->morphTable); @@ -1474,9 +1487,9 @@ void LinkAnimation_BlendToMorph(PlayState* play, SkelAnime* skelAnime, LinkAnima /** * Changes a looping animation to one that stops at the end. */ -void LinkAnimation_EndLoop(SkelAnime* skelAnime) { +void PlayerAnimation_EndLoop(SkelAnime* skelAnime) { skelAnime->mode = ANIMMODE_ONCE; - LinkAnimation_SetUpdateFunction(skelAnime); + PlayerAnimation_SetUpdateFunction(skelAnime); } /** @@ -1507,9 +1520,9 @@ s32 Animation_OnFrameImpl(SkelAnime* skelAnime, f32 frame, f32 updateRate) { } /** - * Checks if the current Link animation has reached the specified frame + * Checks if the current Player animation has reached the specified frame */ -s32 LinkAnimation_OnFrame(SkelAnime* skelAnime, f32 frame) { +s32 PlayerAnimation_OnFrame(SkelAnime* skelAnime, f32 frame) { f32 updateRate = gFramerateDivisorHalf; return Animation_OnFrameImpl(skelAnime, frame, updateRate); @@ -1620,7 +1633,7 @@ s32 SkelAnime_Morph(SkelAnime* skelAnime) { } SkelAnime_InterpFrameTable(skelAnime->limbCount, skelAnime->jointTable, skelAnime->jointTable, skelAnime->morphTable, 1.0f - (skelAnime->morphWeight / prevMorphWeight)); - return 0; + return false; } /** @@ -1654,7 +1667,7 @@ s32 SkelAnime_MorphTaper(SkelAnime* skelAnime) { } SkelAnime_InterpFrameTable(skelAnime->limbCount, skelAnime->jointTable, skelAnime->jointTable, skelAnime->morphTable, 1.0f - curWeight); - return 0; + return false; } /** @@ -1701,7 +1714,7 @@ s32 SkelAnime_LoopFull(SkelAnime* skelAnime) { } SkelAnime_AnimateFrame(skelAnime); - return 0; + return false; } /** @@ -1718,7 +1731,7 @@ s32 SkelAnime_LoopPartial(SkelAnime* skelAnime) { } SkelAnime_AnimateFrame(skelAnime); - return 0; + return false; } /** @@ -1730,7 +1743,7 @@ s32 SkelAnime_Once(SkelAnime* skelAnime) { if (skelAnime->curFrame == skelAnime->endFrame) { SkelAnime_GetFrameData(skelAnime->animation, skelAnime->curFrame, skelAnime->limbCount, skelAnime->jointTable); SkelAnime_AnimateFrame(skelAnime); - return 1; + return true; } skelAnime->curFrame += skelAnime->playSpeed * updateRate; @@ -1746,7 +1759,7 @@ s32 SkelAnime_Once(SkelAnime* skelAnime) { } } SkelAnime_AnimateFrame(skelAnime); - return 0; + return false; } /** diff --git a/src/overlays/actors/ovl_En_Rz/z_en_rz.c b/src/overlays/actors/ovl_En_Rz/z_en_rz.c index fe5562f14..42e2dd013 100644 --- a/src/overlays/actors/ovl_En_Rz/z_en_rz.c +++ b/src/overlays/actors/ovl_En_Rz/z_en_rz.c @@ -203,7 +203,7 @@ void EnRz_ChangeAnim(PlayState* play, EnRz* this, s16 animIndex, u8 animMode, f3 &gRosaSistersStandingAnim, &gRosaSistersStandingAnim, &gRosaSistersWalkingAnim, &gRosaSistersSittingAnim, &gRosaSistersApplaudingAnim, &gRosaSistersOnKneesAnim, &gRosaSistersDancingAnim, }; - static LinkAnimationHeader* sLinkAnimations[] = { + static PlayerAnimationHeader* sPlayerAnimations[] = { &gPlayerAnim_link_normal_wait_free, &gPlayerAnim_alink_dance_loop, }; @@ -219,13 +219,15 @@ void EnRz_ChangeAnim(PlayState* play, EnRz* this, s16 animIndex, u8 animMode, f3 if ((animIndex >= EN_RZ_ANIM_THINKING) && (animIndex < EN_RZ_ANIM_MAX) && ((animIndex != this->animIndex) || (animMode != ANIMMODE_LOOP))) { if (animIndex >= ARRAY_COUNT(sJudoAnimations)) { - endFrame = Animation_GetLastFrame(sLinkAnimations[animIndex - ARRAY_COUNT(sJudoAnimations)]); + endFrame = Animation_GetLastFrame(sPlayerAnimations[animIndex - ARRAY_COUNT(sJudoAnimations)]); if (animMode == ANIMMODE_LOOP) { - LinkAnimation_Change(play, &this->skelAnime, sLinkAnimations[animIndex - ARRAY_COUNT(sJudoAnimations)], - 2.0f / 3.0f, 0.0f, endFrame, ANIMMODE_LOOP, morphFrames); + PlayerAnimation_Change(play, &this->skelAnime, + sPlayerAnimations[animIndex - ARRAY_COUNT(sJudoAnimations)], 2.0f / 3.0f, 0.0f, + endFrame, ANIMMODE_LOOP, morphFrames); } else { - LinkAnimation_Change(play, &this->skelAnime, sLinkAnimations[animIndex - ARRAY_COUNT(sJudoAnimations)], - 2.0f / 3.0f, 0.0f, endFrame, ANIMMODE_LOOP, morphFrames); + PlayerAnimation_Change(play, &this->skelAnime, + sPlayerAnimations[animIndex - ARRAY_COUNT(sJudoAnimations)], 2.0f / 3.0f, 0.0f, + endFrame, ANIMMODE_LOOP, morphFrames); } } else { Animation_Change(&this->skelAnime, animationPtr[animIndex], 1.0f, 0.0f, @@ -325,7 +327,7 @@ s32 EnRz_UpdateSkelAnime(EnRz* this, PlayState* play) { if (this->animIndex < EN_RZ_ANIM_LINK_NORMAL_WAIT_FREE) { return SkelAnime_Update(&this->skelAnime); } else { - return LinkAnimation_Update(play, &this->skelAnime); + return PlayerAnimation_Update(play, &this->skelAnime); } } diff --git a/src/overlays/actors/ovl_En_Test3/z_en_test3.c b/src/overlays/actors/ovl_En_Test3/z_en_test3.c index cca0c9dfa..38ee9b710 100644 --- a/src/overlays/actors/ovl_En_Test3/z_en_test3.c +++ b/src/overlays/actors/ovl_En_Test3/z_en_test3.c @@ -320,7 +320,7 @@ s32 func_80A3E898(EnTest3* this, PlayState* play) { Message_ContinueTextbox(play, textId); } if (textId == 0x296B) { - LinkAnimation_PlayOnceSetSpeed(play, &this->player.skelAnime, &gPlayerAnim_al_yareyare, 2.0f / 3.0f); + PlayerAnimation_PlayOnceSetSpeed(play, &this->player.skelAnime, &gPlayerAnim_al_yareyare, 2.0f / 3.0f); } return false; } diff --git a/src/overlays/actors/ovl_En_Yb/z_en_yb.c b/src/overlays/actors/ovl_En_Yb/z_en_yb.c index b6c05815e..35bd7113e 100644 --- a/src/overlays/actors/ovl_En_Yb/z_en_yb.c +++ b/src/overlays/actors/ovl_En_Yb/z_en_yb.c @@ -68,7 +68,10 @@ static ColliderCylinderInit sCylinderInit = { // assumption: draw uses two different skeleton functions, might be incompatible static AnimationHeader* gYbUnusedAnimations[] = { &object_yb_Anim_000200 }; -static LinkAnimationHeader* gLinkAnimations[] = { &gPlayerAnim_link_normal_wait_free, &gPlayerAnim_alink_dance_loop }; +static PlayerAnimationHeader* gPlayerAnimations[] = { + &gPlayerAnim_link_normal_wait_free, + &gPlayerAnim_alink_dance_loop, +}; static Vec3f D_80BFB2E8 = { 0.0f, 0.5f, 0.0f }; @@ -168,17 +171,17 @@ void EnYb_ActorShadowFunc(Actor* thisx, Lights* mapper, PlayState* play) { void EnYb_ChangeAnim(PlayState* play, EnYb* this, s16 animIndex, u8 animMode, f32 morphFrames) { if (animIndex >= 0 && animIndex < 3) { - if (animIndex != this->animIndex || animMode != ANIMMODE_LOOP) { + if ((animIndex != this->animIndex) || (animMode != ANIMMODE_LOOP)) { if (animIndex > 0) { if (animMode == ANIMMODE_LOOP) { - LinkAnimation_Change(play, &this->skelAnime, gLinkAnimations[animIndex - 1], 1.0f, 0.0f, - Animation_GetLastFrame(gLinkAnimations[animIndex - 1]), ANIMMODE_LOOP, - morphFrames); + PlayerAnimation_Change(play, &this->skelAnime, gPlayerAnimations[animIndex - 1], 1.0f, 0.0f, + Animation_GetLastFrame(gPlayerAnimations[animIndex - 1]), ANIMMODE_LOOP, + morphFrames); } else { // unused case, (only called once with animMode = ANIMMODE_LOOP) - LinkAnimation_Change(play, &this->skelAnime, gLinkAnimations[animIndex - 1], 1.0f, 0.0f, - Animation_GetLastFrame(gLinkAnimations[animIndex - 1]), ANIMMODE_LOOP, - morphFrames); + PlayerAnimation_Change(play, &this->skelAnime, gPlayerAnimations[animIndex - 1], 1.0f, 0.0f, + Animation_GetLastFrame(gPlayerAnimations[animIndex - 1]), ANIMMODE_LOOP, + morphFrames); } } else { // unused case, (only called once with animIndex = 2) @@ -207,7 +210,7 @@ void EnYb_UpdateAnimation(EnYb* this, PlayState* play) { if (this->animIndex <= 0) { SkelAnime_Update(&this->skelAnime); } else { - LinkAnimation_Update(play, &this->skelAnime); + PlayerAnimation_Update(play, &this->skelAnime); } } diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 7464ad05e..d4d6565e9 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -2537,9 +2537,9 @@ 0x80134B54:("SkelAnime_DrawFlexLimb",), 0x80134DBC:("SkelAnime_DrawFlex",), 0x80134FFC:("SkelAnime_GetFrameDataLegacy",), - 0x801353D4:("Animation_GetLimbCount2",), - 0x801353F8:("Animation_GetLength2",), - 0x8013541C:("Animation_GetLastFrame2",), + 0x801353D4:("Animation_GetLimbCountLegacy",), + 0x801353F8:("Animation_GetLengthLegacy",), + 0x8013541C:("Animation_GetLastFrameLegacy",), 0x80135448:("SkelAnime_InterpFrameTable",), 0x801358C8:("AnimationContext_Reset",), 0x801358D4:("AnimationContext_SetNextQueue",), @@ -2558,29 +2558,29 @@ 0x80135DB8:("AnimationContext_CopyFalse",), 0x80135E3C:("AnimationContext_MoveActor",), 0x80135EE8:("AnimationContext_Update",), - 0x80135F88:("SkelAnime_InitLink",), - 0x801360A8:("LinkAnimation_SetUpdateFunction",), - 0x801360E0:("LinkAnimation_Update",), - 0x80136104:("LinkAnimation_Morph",), - 0x801361BC:("LinkAnimation_AnimateFrame",), - 0x80136288:("LinkAnimation_Loop",), - 0x8013631C:("LinkAnimation_Once",), + 0x80135F88:("SkelAnime_InitPlayer",), + 0x801360A8:("PlayerAnimation_SetUpdateFunction",), + 0x801360E0:("PlayerAnimation_Update",), + 0x80136104:("PlayerAnimation_Morph",), + 0x801361BC:("PlayerAnimation_AnimateFrame",), + 0x80136288:("PlayerAnimation_Loop",), + 0x8013631C:("PlayerAnimation_Once",), 0x801363F0:("Animation_SetMorph",), - 0x80136414:("LinkAnimation_Change",), - 0x8013658C:("LinkAnimation_PlayOnce",), - 0x801365EC:("LinkAnimation_PlayOnceSetSpeed",), - 0x80136650:("LinkAnimation_PlayLoop",), - 0x801366AC:("LinkAnimation_PlayLoopSetSpeed",), - 0x8013670C:("LinkAnimation_CopyJointToMorph",), - 0x8013673C:("LinkAnimation_CopyMorphToJoint",), - 0x8013676C:("LinkAnimation_LoadToMorph",), - 0x801367B0:("LinkAnimation_LoadToJoint",), - 0x801367F4:("LinkAnimation_InterpJointMorph",), - 0x8013682C:("LinkAnimation_BlendToJoint",), - 0x801368CC:("LinkAnimation_BlendToMorph",), - 0x8013696C:("LinkAnimation_EndLoop",), + 0x80136414:("PlayerAnimation_Change",), + 0x8013658C:("PlayerAnimation_PlayOnce",), + 0x801365EC:("PlayerAnimation_PlayOnceSetSpeed",), + 0x80136650:("PlayerAnimation_PlayLoop",), + 0x801366AC:("PlayerAnimation_PlayLoopSetSpeed",), + 0x8013670C:("PlayerAnimation_CopyJointToMorph",), + 0x8013673C:("PlayerAnimation_CopyMorphToJoint",), + 0x8013676C:("PlayerAnimation_LoadToMorph",), + 0x801367B0:("PlayerAnimation_LoadToJoint",), + 0x801367F4:("PlayerAnimation_InterpJointMorph",), + 0x8013682C:("PlayerAnimation_BlendToJoint",), + 0x801368CC:("PlayerAnimation_BlendToMorph",), + 0x8013696C:("PlayerAnimation_EndLoop",), 0x80136990:("Animation_OnFrameImpl",), - 0x80136A48:("LinkAnimation_OnFrame",), + 0x80136A48:("PlayerAnimation_OnFrame",), 0x80136A7C:("SkelAnime_Init",), 0x80136B30:("SkelAnime_InitFlex",), 0x80136BEC:("SkelAnime_InitSkin",), diff --git a/tools/namefixer.py b/tools/namefixer.py index ad78411f8..d5cc4e29a 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -195,72 +195,50 @@ wordReplace = { "func_801A4A28": "Audio_PlayAmbience", "func_801A7328": "AudioSfx_StopByPosAndId", "func_801A75E8": "AudioSfx_StopById", - "SkelAnime_LodDrawLimb": "SkelAnime_DrawLimbLod", "SkelAnime_LodDraw": "SkelAnime_DrawLod", - "SkelAnime_LodDrawLimbSV": "SkelAnime_DrawFlexLimbLod", "SkelAnime_LodDrawSV": "SkelAnime_DrawFlexLod", - # "SkelAnime_DrawLimb": "SkelAnime_DrawLimbOpa", # A different function is called this now # "SkelAnime_Draw": "SkelAnime_DrawOpa", # A different function is called this now "SkelAnime_DrawLimbSV": "SkelAnime_DrawFlexLimbOpa", "SkelAnime_DrawSV": "SkelAnime_DrawFlexOpa", # "SkelAnime_AnimateFrame": "SkelAnime_GetFrameData", # A different function is called this now - "SkelAnime_GetTotalFrames": "Animation_GetLength", "SkelAnime_GetFrameCount": "Animation_GetLastFrame", - "SkelAnime_Draw2Limb": "SkelAnime_DrawLimb", "SkelAnime_Draw2": "SkelAnime_Draw", - "SkelAnime_DrawLimbSV2": "SkelAnime_DrawFlexLimb", "SkelAnime_DrawSV2": "SkelAnime_DrawFlex", - "func_80134FFC": "SkelAnime_GetFrameData2", - "func_801353D4": "Animation_GetLimbCount2", - "SkelAnime_GetTotalFrames2": "Animation_GetLength2", - "SkelAnime_GetFrameCount2": "Animation_GetLastFrame2", - "SkelAnime_InterpolateVec3s": "SkelAnime_InterpFrameTable", "SkelAnime_AnimationCtxReset": "AnimationContext_Reset", "func_801358D4": "AnimationContext_SetNextQueue", "func_801358F4": "AnimationContext_DisableQueue", - "SkelAnime_NextEntry": "AnimationContext_AddEntry", "SkelAnime_LoadLinkAnimetion": "AnimationContext_SetLoadFrame", - "SkelAnime_LoadAnimationType1": "AnimationContext_SetCopyAll", - "SkelAnime_LoadAnimationType2": "AnimationContext_SetInterp", - "SkelAnime_LoadAnimationType3": "AnimationContext_SetCopyTrue", - "SkelAnime_LoadAnimationType4": "AnimationContext_SetCopyFalse", - "SkelAnime_LoadAnimationType5": "AnimationContext_SetMoveActor", - "SkelAnime_LinkAnimetionLoaded": "AnimationContext_LoadFrame", + "SkelAnime_AnimationType1Loaded": "AnimationContext_CopyAll", "SkelAnime_AnimationType2Loaded": "AnimationContext_CopyInterp", "SkelAnime_AnimationType3Loaded": "AnimationContext_CopyTrue", "SkelAnime_AnimationType4Loaded": "AnimationContext_CopyFalse", "SkelAnime_AnimationType5Loaded": "AnimationContext_MoveActor", "func_80135EE8": "AnimationContext_Update", - "SkelAnime_InitLinkAnimetion": "SkelAnime_InitLink", - "func_801360A8": "LinkAnimation_SetUpdateFunction", - "func_801360E0": "LinkAnimation_Update", - "func_80136104": "LinkAnimation_Morph", - "func_801361BC": "LinkAnimation_AnimateFrame", - "func_80136288": "LinkAnimation_Loop", - "func_8013631C": "LinkAnimation_Once", + "SkelAnime_InitLink": "SkelAnime_InitPlayer", + "LinkAnimation_SetUpdateFunction": "PlayerAnimation_SetUpdateFunction", + "LinkAnimation_Update": "PlayerAnimation_Update", "SkelAnime_SetTransition": "Animation_SetMorph", - "SkelAnime_ChangeLinkAnim": "LinkAnimation_Change", - "SkelAnime_ChangeLinkAnimDefaultStop": "LinkAnimation_PlayOnce", - "SkelAnime_ChangeLinkAnimPlaybackStop": "LinkAnimation_PlayOnceSetSpeed", - "SkelAnime_ChangeLinkAnimDefaultRepeat": "LinkAnimation_PlayLoop", - "SkelAnime_ChangeLinkAnimPlaybackRepeat": "LinkAnimation_PlayLoopSetSpeed", - "func_8013670C": "LinkAnimation_CopyJointToMorph", - "func_8013673C": "LinkAnimation_CopyMorphToJoint", - "func_8013676C": "LinkAnimation_LoadToMorph", - "func_801367B0": "LinkAnimation_LoadToJoint", - "func_801367F4": "LinkAnimation_InterpJointMorph", - "func_8013682C": "LinkAnimation_BlendToJoint", - "func_801368CC": "LinkAnimation_BlendToMorph", - "SkelAnime_SetModeStop": "LinkAnimation_EndLoop", - "func_80136990": "Animation_OnFrameImpl", - "func_80136A48": "LinkAnimation_OnFrame", + "LinkAnimation_Change": "PlayerAnimation_Change", + "LinkAnimation_PlayOnce": "PlayerAnimation_PlayOnce", + "LinkAnimation_PlayOnceSetSpeed": "PlayerAnimation_PlayOnceSetSpeed", + "LinkAnimation_PlayLoop": "PlayerAnimation_PlayLoop", + "LinkAnimation_PlayLoopSetSpeed": "PlayerAnimation_PlayLoopSetSpeed", + "LinkAnimation_CopyJointToMorph": "PlayerAnimation_CopyJointToMorph", + "LinkAnimation_CopyMorphToJoint": "PlayerAnimation_CopyMorphToJoint", + "LinkAnimation_LoadToMorph": "PlayerAnimation_LoadToMorph", + "LinkAnimation_LoadToJoint": "PlayerAnimation_LoadToJoint", + "LinkAnimation_InterpJointMorph": "PlayerAnimation_InterpJointMorph", + "LinkAnimation_BlendToJoint": "PlayerAnimation_BlendToJoint", + "LinkAnimation_BlendToMorph": "PlayerAnimation_BlendToMorph", + "LinkAnimation_EndLoop": "PlayerAnimation_EndLoop", + "LinkAnimation_OnFrame": "PlayerAnimation_OnFrame", + "SkelAnime_InitSV": "SkelAnime_InitFlex", - "func_80136C84": "SkelAnime_SetUpdate", "SkelAnime_FrameUpdateMatrix": "SkelAnime_Update", "func_80136CF4": "SkelAnime_Morph", "func_80136D98": "SkelAnime_MorphTaper", - "func_80136F04": "SkelAnime_AnimateFrame", + "func_8013702C": "SkelAnime_LoopFull", "func_801370B0": "SkelAnime_LoopPartial", "func_8013713C": "SkelAnime_Once", @@ -278,7 +256,7 @@ wordReplace = { "func_801376DC": "SkelAnime_CopyFrameTableFalse", "func_80137748": "SkelAnime_UpdateTranslation", "func_801378B8": "Animation_OnFrame", - "SkelAnime_CopyVec3s": "SkelAnime_CopyFrameTable", + "Actor_SetObjectSegment": "Actor_SetObjectDependency", "func_800B3FC0": "ActorShadow_DrawCircle", "func_800B4024": "ActorShadow_DrawSquare", @@ -625,7 +603,6 @@ wordReplace = { "func_800EE2F4": "Cutscene_IsPlaying", "Cutscene_GetSceneSetupIndex": "Cutscene_GetSceneLayer", "func_801343C0": "SkelAnime_DrawTransformFlexOpa", - "func_80134148": "SkelAnime_DrawTransformFlexLimbOpa", "func_80114E90": "Inventory_HasEmptyBottle", "func_80114F2C": "Inventory_HasItemInBottle", "func_80123C90": "Player_SetEquipmentData", @@ -731,6 +708,7 @@ wordReplace = { "globalCtx": "play", "globalCtx2": "play2", "ScheduleResult": "ScheduleOutput", + "LinkAnimationHeader": "PlayerAnimationHeader", # Struct members "skelAnime.unk03": "skelAnime.taper", diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index 8bfb180ff..d70411560 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -2051,7 +2051,7 @@ asm/non_matchings/code/z_skelanime/SkelAnime_Draw.s,SkelAnime_Draw,0x80134990,0x asm/non_matchings/code/z_skelanime/SkelAnime_DrawLimbSV2.s,SkelAnime_DrawLimbSV2,0x80134B54,0x9A asm/non_matchings/code/z_skelanime/SkelAnime_DrawFlex.s,SkelAnime_DrawFlex,0x80134DBC,0x90 asm/non_matchings/code/z_skelanime/SkelAnime_GetFrameData2.s,SkelAnime_GetFrameData2,0x80134FFC,0xF6 -asm/non_matchings/code/z_skelanime/Animation_GetLimbCount2.s,Animation_GetLimbCount2,0x801353D4,0x9 +asm/non_matchings/code/z_skelanime/Animation_GetLimbCountLegacy.s,Animation_GetLimbCountLegacy,0x801353D4,0x9 asm/non_matchings/code/z_skelanime/SkelAnime_GetTotalFrames2.s,SkelAnime_GetTotalFrames2,0x801353F8,0x9 asm/non_matchings/code/z_skelanime/SkelAnime_GetFrameCount2.s,SkelAnime_GetFrameCount2,0x8013541C,0xB asm/non_matchings/code/z_skelanime/SkelAnime_InterpFrameTable.s,SkelAnime_InterpFrameTable,0x80135448,0x120 @@ -2072,29 +2072,29 @@ asm/non_matchings/code/z_skelanime/AnimationContext_CopyTrue.s,AnimationContext_ asm/non_matchings/code/z_skelanime/AnimationContext_CopyFalse.s,AnimationContext_CopyFalse,0x80135DB8,0x21 asm/non_matchings/code/z_skelanime/AnimationContext_MoveActor.s,AnimationContext_MoveActor,0x80135E3C,0x2B asm/non_matchings/code/z_skelanime/AnimationContext_Update.s,AnimationContext_Update,0x80135EE8,0x28 -asm/non_matchings/code/z_skelanime/SkelAnime_InitLinkAnimetion.s,SkelAnime_InitLinkAnimetion,0x80135F88,0x48 -asm/non_matchings/code/z_skelanime/LinkAnimation_SetUpdateFunction.s,LinkAnimation_SetUpdateFunction,0x801360A8,0xE -asm/non_matchings/code/z_skelanime/LinkAnimation_Update.s,LinkAnimation_Update,0x801360E0,0x9 -asm/non_matchings/code/z_skelanime/LinkAnimation_Morph.s,LinkAnimation_Morph,0x80136104,0x2E -asm/non_matchings/code/z_skelanime/LinkAnimation_AnimateFrame.s,LinkAnimation_AnimateFrame,0x801361BC,0x33 -asm/non_matchings/code/z_skelanime/LinkAnimation_Loop.s,LinkAnimation_Loop,0x80136288,0x25 -asm/non_matchings/code/z_skelanime/LinkAnimation_Once.s,LinkAnimation_Once,0x8013631C,0x35 +asm/non_matchings/code/z_skelanime/SkelAnime_InitPlayerAnimetion.s,SkelAnime_InitPlayerAnimetion,0x80135F88,0x48 +asm/non_matchings/code/z_skelanime/PlayerAnimation_SetUpdateFunction.s,PlayerAnimation_SetUpdateFunction,0x801360A8,0xE +asm/non_matchings/code/z_skelanime/PlayerAnimation_Update.s,PlayerAnimation_Update,0x801360E0,0x9 +asm/non_matchings/code/z_skelanime/PlayerAnimation_Morph.s,PlayerAnimation_Morph,0x80136104,0x2E +asm/non_matchings/code/z_skelanime/PlayerAnimation_AnimateFrame.s,PlayerAnimation_AnimateFrame,0x801361BC,0x33 +asm/non_matchings/code/z_skelanime/PlayerAnimation_Loop.s,PlayerAnimation_Loop,0x80136288,0x25 +asm/non_matchings/code/z_skelanime/PlayerAnimation_Once.s,PlayerAnimation_Once,0x8013631C,0x35 asm/non_matchings/code/z_skelanime/Animation_SetMorph.s,Animation_SetMorph,0x801363F0,0x9 -asm/non_matchings/code/z_skelanime/LinkAnimation_Change.s,LinkAnimation_Change,0x80136414,0x5E -asm/non_matchings/code/z_skelanime/LinkAnimation_ChangeDefaultStop.s,LinkAnimation_ChangeDefaultStop,0x8013658C,0x18 -asm/non_matchings/code/z_skelanime/LinkAnimation_ChangePlaybackStop.s,LinkAnimation_ChangePlaybackStop,0x801365EC,0x19 -asm/non_matchings/code/z_skelanime/LinkAnimation_ChangeDefaultRepeat.s,LinkAnimation_ChangeDefaultRepeat,0x80136650,0x17 -asm/non_matchings/code/z_skelanime/LinkAnimation_ChangePlaybackRepeat.s,LinkAnimation_ChangePlaybackRepeat,0x801366AC,0x18 -asm/non_matchings/code/z_skelanime/LinkAnimation_CopyJointToMorph.s,LinkAnimation_CopyJointToMorph,0x8013670C,0xC -asm/non_matchings/code/z_skelanime/LinkAnimation_CopyMorphToJoint.s,LinkAnimation_CopyMorphToJoint,0x8013673C,0xC -asm/non_matchings/code/z_skelanime/LinkAnimation_LoadToMorph.s,LinkAnimation_LoadToMorph,0x8013676C,0x11 -asm/non_matchings/code/z_skelanime/LinkAnimation_LoadToJoint.s,LinkAnimation_LoadToJoint,0x801367B0,0x11 -asm/non_matchings/code/z_skelanime/LinkAnimation_InterpJointMorph.s,LinkAnimation_InterpJointMorph,0x801367F4,0xE -asm/non_matchings/code/z_skelanime/LinkAnimation_BlendToJoint.s,LinkAnimation_BlendToJoint,0x8013682C,0x28 -asm/non_matchings/code/z_skelanime/LinkAnimation_BlendToMorph.s,LinkAnimation_BlendToMorph,0x801368CC,0x28 -asm/non_matchings/code/z_skelanime/LinkAnimation_EndLoop.s,LinkAnimation_EndLoop,0x8013696C,0x9 +asm/non_matchings/code/z_skelanime/PlayerAnimation_Change.s,PlayerAnimation_Change,0x80136414,0x5E +asm/non_matchings/code/z_skelanime/PlayerAnimation_ChangeDefaultStop.s,PlayerAnimation_ChangeDefaultStop,0x8013658C,0x18 +asm/non_matchings/code/z_skelanime/PlayerAnimation_ChangePlaybackStop.s,PlayerAnimation_ChangePlaybackStop,0x801365EC,0x19 +asm/non_matchings/code/z_skelanime/PlayerAnimation_ChangeDefaultRepeat.s,PlayerAnimation_ChangeDefaultRepeat,0x80136650,0x17 +asm/non_matchings/code/z_skelanime/PlayerAnimation_ChangePlaybackRepeat.s,PlayerAnimation_ChangePlaybackRepeat,0x801366AC,0x18 +asm/non_matchings/code/z_skelanime/PlayerAnimation_CopyJointToMorph.s,PlayerAnimation_CopyJointToMorph,0x8013670C,0xC +asm/non_matchings/code/z_skelanime/PlayerAnimation_CopyMorphToJoint.s,PlayerAnimation_CopyMorphToJoint,0x8013673C,0xC +asm/non_matchings/code/z_skelanime/PlayerAnimation_LoadToMorph.s,PlayerAnimation_LoadToMorph,0x8013676C,0x11 +asm/non_matchings/code/z_skelanime/PlayerAnimation_LoadToJoint.s,PlayerAnimation_LoadToJoint,0x801367B0,0x11 +asm/non_matchings/code/z_skelanime/PlayerAnimation_InterpJointMorph.s,PlayerAnimation_InterpJointMorph,0x801367F4,0xE +asm/non_matchings/code/z_skelanime/PlayerAnimation_BlendToJoint.s,PlayerAnimation_BlendToJoint,0x8013682C,0x28 +asm/non_matchings/code/z_skelanime/PlayerAnimation_BlendToMorph.s,PlayerAnimation_BlendToMorph,0x801368CC,0x28 +asm/non_matchings/code/z_skelanime/PlayerAnimation_EndLoop.s,PlayerAnimation_EndLoop,0x8013696C,0x9 asm/non_matchings/code/z_skelanime/Animation_OnFrameImpl.s,Animation_OnFrameImpl,0x80136990,0x2E -asm/non_matchings/code/z_skelanime/LinkAnimation_OnFrame.s,LinkAnimation_OnFrame,0x80136A48,0xD +asm/non_matchings/code/z_skelanime/PlayerAnimation_OnFrame.s,PlayerAnimation_OnFrame,0x80136A48,0xD asm/non_matchings/code/z_skelanime/SkelAnime_Init.s,SkelAnime_Init,0x80136A7C,0x2D asm/non_matchings/code/z_skelanime/SkelAnime_InitFlex.s,SkelAnime_InitFlex,0x80136B30,0x2F asm/non_matchings/code/z_skelanime/SkelAnime_InitSkin.s,SkelAnime_InitSkin,0x80136BEC,0x26 From 543c38ae06d68ce2aa603144dbbe76262d00ddb6 Mon Sep 17 00:00:00 2001 From: Anghelo Carvajal Date: Tue, 18 Apr 2023 23:01:05 -0400 Subject: [PATCH 12/12] `z_player_lib`: Dawn of the final PR (#1142) * Player_GetMask and Player_RemoveMask * some comments * Player_ActionToBottle and Player_GetBottleHeld * Player_DrawGetItemImpl and Player_DrawGetItem * func_80123420 OK * Decompile a few more functions * Decompile a few more functions * func_80122760 * func_80122868, func_801229A0 and func_801229EC * func_80122F28 * func_8012301C * func_801242B4 * func_801242DC * func_80124420 nonmatching * func_80126440 * func_801240C8 and func_801240DC * func_8012405C and func_80124088 * func_80124020 * Player_IsBurningStickInRange * func_8012754C * func_80125318 and func_80125CE0 * func_801229FC * func_80127B64 * func_80127488 * func_80122D44 * func_80122BA4 * func_80122C20 attempt * func_80122EEC * func_80122F9C * func_80122FCC and func_8012300C * func_80123448 * func_801234D4 * func_801235DC * func_80123960 * func_80123BD4 * func_80123AA4 * func_801239AC * func_801241B4 * func_80123C58 and func_80123C90 * func_80123D50 and func_80123DA4 * func_80123DC0, func_80123E90 and func_80123F14 * func_80124110 and func_80124148 * func_80124168 and func_80124190 * func_80124278 * func_80124F18 non_equivalent * func_80125340 and func_8012536C * func_801263FC * func_801265C8 * func_8012669C * func_80128B74 * func_80123140 * func_801246F4 * func_801253A4 NON_MATCHING * func_801262C8 * func_80126AB4 * func_80126B8C * func_80127438 * func_801278F8 NON_MATCHING * Fix data split * cleanup externs * func_80128BD0 compiles... * Rename Player_SetEquipmentData * fix merge issues * Fix types * Improvement? Worse? I don't know at this point * func_80128640 attempt * func_80127BE8 * func_80127A60 * func_80127594 attempt * func_801271B0 * func_8012364C NON_MATCHING * func_80124618 * func_80124CC4 non matching * func_801251C4 * func_80125580 non equivalent * func_80128388 * cleanup * remove some hardcoded pointers * object symbol cleanup * func_80124870 NON_EQUIVALENT * name overridlimbdraw arguments * func_80125D4C NON_EQUIVALENT * func_80126BD0 NON_MATCHING * Match func_80126BD0 thanks to anon58 * func_80127DA4 NON_EQUIVALENT * fix merge issues * some stealing from OoT * small rename pass and cleanup * Improve some * CLAMP and fix warnings * func_80125580 matched by mzx * cleanup func_80128BD0 a bit * import data * func_80124CC4 * Rename objectFileTable to gObjectTable * Improve func_80124FF0 thanks to maide * fix renames * Match func_80124FF0 thanks to Maide * cleanup * More cleaning up * import bss * Add PLAYER_STATE macros * a bit more of cleanup * run formatter * func_80128BD0 a bit more deecent * Add player limb enum * Use limb enum * cleanup and format * Use symbols for player dlists groups * A bunch more of pointers * more object pointers * Change the remaining object pointers * Add a few missing dlist in link_child * Small rename * whoops * Work on NON_MATCHINGs * Cleanup * Steal OoT renames from "sword" to "meleeWeapon" * Fix some symbols * Match func_80127594 and format * Match func_80127DA4 * Matched func_801284A0 * Annotate D_801F59AC * Matched func_80128640 * Some cleanup * format * stuffs * some cleanups * import stuff from pr * swords and shields * fixes * bss * cleanup Player_OverrideLimbDrawGameplayCommon * progress on func_80125D4C * PlayerMeleeWeapon enum * Player_BButtonSwordFromAP * GET_B_SWORD_FROM_AP * GET_MELEE_WEAPON_FROM_AP * PlayerBottle * PlayerExplosive and PlayerSword * misc fixes * Various changes fromplayer_actor * z64player.h stuff from player_actor * Fixes * skelanime stuff * placeholders on z64item.h, save macros and ther cleanups * <= PLAYER_AP_MINUS1 * Player_UpdateBunnyEarsKinematics Co-authored-by: EllipticEllipsis * cleanup * bodyPartsPos * comment * sizeof(u16) * typo * merge fixes * fix * fixes * format * fix merge * fix merge * func_80125D4C Co-authored-by: engineer124 * func_80128BD0 improvement * minor renames * format * whoops * small cleanup * Update src/code/z_player_lib.c Co-authored-by: EllipticEllipsis * review Co-authored-by: EllipticEllipsis * format * _B_ * review Co-authored-by: EllipticEllipsis * review Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * format * remove gap * whoops * clanups * remove stuff from permuter_settings * steal some OoT docs * some other docs vscode didn't add to the last commit * format * data as infunction-static data * OoT docs stealing * Improvements on Player_PostLimbDrawGameplay * More improvement * Match Player_PostLimbDrawGameplay Co-authored-by: engineer124 * cleanups * Convert unk_AF0 into an union and some other cleanups * bss * headLimbRot and upperLimbRot * fix naming * cleanups * bss * bss * Update src/code/z_player_lib.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * pr review Co-authored-by: engineer124 * bss * gesture * namefixer * gestureInfo * IA_MIN and BOTTLE_EMPTY * review Co-authored-by: engineer124 * review * D_801F59B0_LEN * Remove LevelOfDetail enum * bss * review * review * gLinkDekuClosedFlowerDL gLinkDekuOpenFlowerDL * _B_ * Player_DrawStrayFairyParticles * fix build --------- Co-authored-by: kyleburnette Co-authored-by: Kelebek1 Co-authored-by: Derek Hensley Co-authored-by: EllipticEllipsis Co-authored-by: engineer124 Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --- assets/xml/objects/gameplay_keep.xml | 12 +- assets/xml/objects/object_link_child.xml | 18 +- assets/xml/objects/object_link_goron.xml | 2 +- assets/xml/objects/object_link_nuts.xml | 4 +- include/functions.h | 32 +- include/ultra64/message.h | 4 +- include/z64.h | 4 +- include/z64animation.h | 4 +- include/z64player.h | 171 +- src/code/code_8012EC80.c | 2 +- src/code/z_actor.c | 2 +- src/code/z_eff_tire_mark.c | 2 +- src/code/z_play.c | 2 +- src/code/z_player_lib.c | 2043 ++++++++++++++--- src/code/z_skelanime.c | 2 +- src/overlays/actors/ovl_Boss_03/z_boss_03.c | 2 + src/overlays/actors/ovl_En_Fsn/z_en_fsn.c | 2 +- .../actors/ovl_En_Kendo_Js/z_en_kendo_js.c | 2 +- src/overlays/actors/ovl_En_Kgy/z_en_kgy.c | 2 +- .../actors/ovl_En_Minifrog/z_en_minifrog.c | 6 +- .../ovl_En_Stone_heishi/z_en_stone_heishi.c | 2 +- src/overlays/actors/ovl_En_Tab/z_en_tab.c | 4 +- .../ovl_En_Talk_Gibud/z_en_talk_gibud.c | 2 +- src/overlays/actors/ovl_En_Test3/z_en_test3.c | 22 +- src/overlays/actors/ovl_En_Trt/z_en_trt.c | 4 +- src/overlays/actors/ovl_En_Tru/z_en_tru.c | 2 +- src/overlays/actors/ovl_Obj_Um/z_obj_um.c | 12 +- tools/disasm/functions.txt | 34 +- tools/disasm/variables.txt | 49 +- tools/namefixer.py | 13 +- tools/sizes/code_functions.csv | 34 +- 31 files changed, 2048 insertions(+), 448 deletions(-) diff --git a/assets/xml/objects/gameplay_keep.xml b/assets/xml/objects/gameplay_keep.xml index 16cbf0b85..8a78a1709 100644 --- a/assets/xml/objects/gameplay_keep.xml +++ b/assets/xml/objects/gameplay_keep.xml @@ -787,7 +787,7 @@ - + @@ -1145,8 +1145,8 @@ - - + + @@ -1223,7 +1223,9 @@ + + @@ -1477,7 +1479,7 @@ - + @@ -1487,7 +1489,7 @@ - + diff --git a/assets/xml/objects/object_link_child.xml b/assets/xml/objects/object_link_child.xml index 23d3cf09c..dd045c1d8 100644 --- a/assets/xml/objects/object_link_child.xml +++ b/assets/xml/objects/object_link_child.xml @@ -101,7 +101,7 @@ - + @@ -110,17 +110,17 @@ - - + + - + - - + + @@ -143,12 +143,12 @@ - - + + - + diff --git a/assets/xml/objects/object_link_goron.xml b/assets/xml/objects/object_link_goron.xml index 48eef4dd9..76017884e 100644 --- a/assets/xml/objects/object_link_goron.xml +++ b/assets/xml/objects/object_link_goron.xml @@ -90,7 +90,7 @@ - + diff --git a/assets/xml/objects/object_link_nuts.xml b/assets/xml/objects/object_link_nuts.xml index a00c44db4..9247d3db4 100644 --- a/assets/xml/objects/object_link_nuts.xml +++ b/assets/xml/objects/object_link_nuts.xml @@ -40,10 +40,10 @@ - + - + diff --git a/include/functions.h b/include/functions.h index c45f57928..91fa5d29d 100644 --- a/include/functions.h +++ b/include/functions.h @@ -1616,34 +1616,34 @@ s32 Player_HasMirrorShieldEquipped(PlayState* play); s32 Player_IsHoldingMirrorShield(PlayState* play); s32 Player_IsHoldingHookshot(Player* player); s32 func_801240DC(Player* player); -s32 func_80124110(Player* player, PlayerItemAction itemAction); -s32 func_80124148(Player* player); -s32 Player_ActionToMeleeWeapon(PlayerItemAction itemAction); -s32 Player_GetMeleeWeaponHeld(Player* player); +PlayerBButtonSword Player_BButtonSwordFromIA(Player* player, PlayerItemAction itemAction); +PlayerBButtonSword Player_GetHeldBButtonSword(Player* player); +PlayerMeleeWeapon Player_MeleeWeaponFromIA(PlayerItemAction itemAction); +PlayerMeleeWeapon Player_GetMeleeWeaponHeld(Player* player); s32 Player_IsHoldingTwoHandedWeapon(Player* player); -s32 Player_ActionToBottle(Player* player, PlayerItemAction itemAction); -s32 Player_GetBottleHeld(Player* Player); -s32 Player_ActionToExplosive(Player* player, PlayerItemAction itemAction); -s32 Player_GetExplosiveHeld(Player* player); -s32 Player_ActionToSword(Actor* actor, PlayerItemAction itemAction); +PlayerBottle Player_BottleFromIA(Player* player, PlayerItemAction itemAction); +PlayerBottle Player_GetBottleHeld(Player* Player); +PlayerExplosive Player_ExplosiveFromIA(Player* player, PlayerItemAction itemAction); +PlayerExplosive Player_GetExplosiveHeld(Player* player); +PlayerSword Player_SwordFromIA(Player* player, PlayerItemAction itemAction); s32 func_801242B4(Player* player); s32 Player_GetEnvironmentalHazard(PlayState* play); -void func_80124420(Player* player); +void Player_UpdateBunnyEars(Player* player); void func_80124618(struct_80124618 arg0[], f32 curFrame, Vec3f* arg2); void Player_DrawImpl(PlayState* play, void** skeleton, Vec3s* jointTable, s32 dListCount, s32 lod, PlayerTransformation playerForm, s32 boots, s32 face, OverrideLimbDrawFlex overrideLimbDraw, PostLimbDrawFlex postLimbDraw, Actor* actor); void func_80125318(Vec3f* arg0, Vec3s* arg1); void Player_DrawZoraShield(PlayState* play, Player* player); void func_80125500(PlayState* play, Player* player, s32 limbIndex, Vec3f* pos, Vec3s* rot); -s32 func_80125D4C(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* actor); -s32 func_801262C8(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* actor); -s32 func_801263FC(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx); -s32 func_80126440(PlayState* play, ColliderQuad* collider, WeaponInfo* weaponInfo, Vec3f* arg3, Vec3f* arg4); +s32 Player_OverrideLimbDrawGameplayDefault(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* actor); +s32 Player_OverrideLimbDrawGameplayFirstPerson(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* actor); +s32 Player_OverrideLimbDrawGameplayCrawling(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx); +s32 func_80126440(PlayState* play, ColliderQuad* collider, WeaponInfo* weaponInfo, Vec3f* newTip, Vec3f* newBase); void Player_DrawGetItem(PlayState* play, Player* player); void func_80126B8C(PlayState* play, Player* player); s32 func_80127438(PlayState* play, Player* player, s32 currentMask); s32 func_80128640(PlayState* play, Player* player, Gfx* dlist); -void func_80128B74(PlayState* play, Player* player, s32 limbIndex); -void func_80128BD0(PlayState* play, s32 limbIndex, Gfx** dList1, Gfx** dList2, Vec3s* rot, Actor* actor); +void Player_SetFeetPos(PlayState* play, Player* player, s32 limbIndex); +void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList1, Gfx** dList2, Vec3s* rot, Actor* actor); Gfx* Gfx_SetFog(Gfx* gfx, s32 r, s32 g, s32 b, s32 a, s32 n, s32 f); Gfx* Gfx_SetFogWithSync(Gfx* gfx, s32 r, s32 g, s32 b, s32 a, s32 n, s32 f); diff --git a/include/ultra64/message.h b/include/ultra64/message.h index a049ae363..de0c39b83 100644 --- a/include/ultra64/message.h +++ b/include/ultra64/message.h @@ -1,5 +1,5 @@ -#ifndef _ULTRA64_MESSAGE_H_ -#define _ULTRA64_MESSAGE_H_ +#ifndef ULTRA64_MESSAGE_H +#define ULTRA64_MESSAGE_H #include "ultra64/thread.h" diff --git a/include/z64.h b/include/z64.h index 959f195ba..f496f02f1 100644 --- a/include/z64.h +++ b/include/z64.h @@ -646,14 +646,14 @@ typedef struct PlayState { /* 0x1878C */ void (*unk_1878C)(struct PlayState* play); /* 0x18790 */ void (*unk_18790)(struct PlayState* play, s16 arg1); /* 0x18794 */ PlayerItemAction (*unk_18794)(struct PlayState* play, Player* player, ItemId itemId); - /* 0x18798 */ s32 (*setPlayerTalkAnim)(struct PlayState* play, PlayerAnimationHeader* talkAnim, s32 animMode); + /* 0x18798 */ s32 (*setPlayerTalkAnim)(struct PlayState* play, PlayerAnimationHeader* talkAnim, AnimationMode animMode); /* 0x1879C */ s16 playerActorCsIds[10]; /* 0x187B0 */ MtxF viewProjectionMtxF; /* 0x187F0 */ Vec3f projectionMtxFDiagonal; /* 0x187FC */ MtxF billboardMtxF; /* 0x1883C */ Mtx* billboardMtx; /* 0x18840 */ u32 gameplayFrames; - /* 0x18844 */ u8 unk_18844; + /* 0x18844 */ u8 unk_18844; // bool /* 0x18845 */ u8 haltAllActors; /* 0x18846 */ s16 numSetupActors; /* 0x18848 */ u8 numRooms; diff --git a/include/z64animation.h b/include/z64animation.h index 4dd808af8..44c35312d 100644 --- a/include/z64animation.h +++ b/include/z64animation.h @@ -27,9 +27,9 @@ typedef enum AnimationMode { /* 5 */ ANIMMODE_LOOP_PARTIAL_INTERP } AnimationMode; -typedef enum { +typedef enum { /* -1 */ ANIMTAPER_DECEL = -1, - /* 0 */ ANIMTAPER_NONE, + /* 0 */ ANIMTAPER_NONE, /* 1 */ ANIMTAPER_ACCEL } AnimationTapers; diff --git a/include/z64player.h b/include/z64player.h index f1d1f75e4..27a586555 100644 --- a/include/z64player.h +++ b/include/z64player.h @@ -22,7 +22,8 @@ typedef enum PlayerBoots { /* 4 */ PLAYER_BOOTS_ZORA_LAND, /* 5 */ PLAYER_BOOTS_ZORA_UNDERWATER, /* 6 */ PLAYER_BOOTS_GORON, - /* 7 */ PLAYER_BOOTS_MAX + /* 7 */ PLAYER_BOOTS_7, + /* 8 */ PLAYER_BOOTS_MAX } PlayerBoots; typedef enum PlayerStrength { @@ -84,7 +85,8 @@ typedef enum PlayerItemAction { /* 0x00 */ PLAYER_IA_NONE, /* 0x01 */ PLAYER_IA_LAST_USED, /* 0x02 */ PLAYER_IA_FISHING_ROD, - /* 0x03 */ PLAYER_IA_SWORD_KOKIRI, + /* 0x03 */ PLAYER_IA_SWORD_MIN, + /* 0x03 */ PLAYER_IA_SWORD_KOKIRI = PLAYER_IA_SWORD_MIN, /* 0x04 */ PLAYER_IA_SWORD_RAZOR, /* 0x05 */ PLAYER_IA_SWORD_GILDED, /* 0x06 */ PLAYER_IA_SWORD_GREAT_FAIRY, @@ -95,14 +97,16 @@ typedef enum PlayerItemAction { /* 0x0B */ PLAYER_IA_BOW_ICE, /* 0x0C */ PLAYER_IA_BOW_LIGHT, /* 0x0D */ PLAYER_IA_HOOKSHOT, - /* 0x0E */ PLAYER_IA_BOMB, + /* 0x0E */ PLAYER_IA_EXPLOSIVE_MIN, + /* 0x0E */ PLAYER_IA_BOMB = PLAYER_IA_EXPLOSIVE_MIN, /* 0x0F */ PLAYER_IA_POWDER_KEG, /* 0x10 */ PLAYER_IA_BOMBCHU, /* 0x11 */ PLAYER_IA_11, /* 0x12 */ PLAYER_IA_NUT, /* 0x13 */ PLAYER_IA_PICTO_BOX, /* 0x14 */ PLAYER_IA_OCARINA, - /* 0x15 */ PLAYER_IA_BOTTLE, + /* 0x15 */ PLAYER_IA_BOTTLE_MIN, + /* 0x15 */ PLAYER_IA_BOTTLE_EMPTY = PLAYER_IA_BOTTLE_MIN, /* 0x16 */ PLAYER_IA_BOTTLE_FISH, /* 0x17 */ PLAYER_IA_BOTTLE_SPRING_WATER, /* 0x18 */ PLAYER_IA_BOTTLE_HOT_SPRING_WATER, @@ -167,6 +171,83 @@ typedef enum PlayerItemAction { /* 0x53 */ PLAYER_IA_MAX } PlayerItemAction; +// Relies on B swords related item actions to be contiguous +#define GET_B_SWORD_FROM_IA(itemAction) ((itemAction) - PLAYER_IA_SWORD_MIN + 1) + +typedef enum PlayerBButtonSword { + /* 0 */ PLAYER_B_SWORD_NONE, + /* 1 */ PLAYER_B_SWORD_KOKIRI = GET_B_SWORD_FROM_IA(PLAYER_IA_SWORD_KOKIRI), + /* 2 */ PLAYER_B_SWORD_RAZOR = GET_B_SWORD_FROM_IA(PLAYER_IA_SWORD_RAZOR), + /* 3 */ PLAYER_B_SWORD_GILDED = GET_B_SWORD_FROM_IA(PLAYER_IA_SWORD_GILDED), + /* 4 */ PLAYER_B_SWORD_MAX +} PlayerBButtonSword; + +// Relies on melee weapon related item actions to be contiguous +#define GET_MELEE_WEAPON_FROM_IA(itemAction) ((itemAction) - PLAYER_IA_SWORD_MIN + 1) + +typedef enum PlayerMeleeWeapon { + /* 0 */ PLAYER_MELEEWEAPON_NONE, + /* 1 */ PLAYER_MELEEWEAPON_SWORD_KOKIRI = GET_MELEE_WEAPON_FROM_IA(PLAYER_IA_SWORD_KOKIRI), + /* 2 */ PLAYER_MELEEWEAPON_SWORD_RAZOR = GET_MELEE_WEAPON_FROM_IA(PLAYER_IA_SWORD_RAZOR), + /* 3 */ PLAYER_MELEEWEAPON_SWORD_GILDED = GET_MELEE_WEAPON_FROM_IA(PLAYER_IA_SWORD_GILDED), + /* 4 */ PLAYER_MELEEWEAPON_SWORD_GREAT_FAIRY = GET_MELEE_WEAPON_FROM_IA(PLAYER_IA_SWORD_GREAT_FAIRY), + /* 5 */ PLAYER_MELEEWEAPON_STICK = GET_MELEE_WEAPON_FROM_IA(PLAYER_IA_STICK), + /* 6 */ PLAYER_MELEEWEAPON_ZORA_FINS = GET_MELEE_WEAPON_FROM_IA(PLAYER_IA_ZORA_FINS), + /* 7 */ PLAYER_MELEEWEAPON_MAX +} PlayerMeleeWeapon; + +// Relies on bottle-related item actions to be contiguous +#define GET_BOTTLE_FROM_IA(itemAction) ((itemAction) - PLAYER_IA_BOTTLE_MIN) + +typedef enum PlayerBottle { + /* -1 */ PLAYER_BOTTLE_NONE = -1, + /* 0 */ PLAYER_BOTTLE_EMPTY = GET_BOTTLE_FROM_IA(PLAYER_IA_BOTTLE_EMPTY), + /* 1 */ PLAYER_BOTTLE_FISH = GET_BOTTLE_FROM_IA(PLAYER_IA_BOTTLE_FISH), + /* 2 */ PLAYER_BOTTLE_SPRING_WATER = GET_BOTTLE_FROM_IA(PLAYER_IA_BOTTLE_SPRING_WATER), + /* 3 */ PLAYER_BOTTLE_HOT_SPRING_WATER = GET_BOTTLE_FROM_IA(PLAYER_IA_BOTTLE_HOT_SPRING_WATER), + /* 4 */ PLAYER_BOTTLE_ZORA_EGG = GET_BOTTLE_FROM_IA(PLAYER_IA_BOTTLE_ZORA_EGG), + /* 5 */ PLAYER_BOTTLE_DEKU_PRINCESS = GET_BOTTLE_FROM_IA(PLAYER_IA_BOTTLE_DEKU_PRINCESS), + /* 6 */ PLAYER_BOTTLE_GOLD_DUST = GET_BOTTLE_FROM_IA(PLAYER_IA_BOTTLE_GOLD_DUST), + /* 7 */ PLAYER_BOTTLE_1C = GET_BOTTLE_FROM_IA(PLAYER_IA_BOTTLE_1C), + /* 8 */ PLAYER_BOTTLE_SEAHORSE = GET_BOTTLE_FROM_IA(PLAYER_IA_BOTTLE_SEAHORSE), + /* 9 */ PLAYER_BOTTLE_MUSHROOM = GET_BOTTLE_FROM_IA(PLAYER_IA_BOTTLE_MUSHROOM), + /* 10 */ PLAYER_BOTTLE_HYLIAN_LOACH = GET_BOTTLE_FROM_IA(PLAYER_IA_BOTTLE_HYLIAN_LOACH), + /* 11 */ PLAYER_BOTTLE_BUG = GET_BOTTLE_FROM_IA(PLAYER_IA_BOTTLE_BUG), + /* 12 */ PLAYER_BOTTLE_POE = GET_BOTTLE_FROM_IA(PLAYER_IA_BOTTLE_POE), + /* 13 */ PLAYER_BOTTLE_BIG_POE = GET_BOTTLE_FROM_IA(PLAYER_IA_BOTTLE_BIG_POE), + /* 14 */ PLAYER_BOTTLE_POTION_RED = GET_BOTTLE_FROM_IA(PLAYER_IA_BOTTLE_POTION_RED), + /* 15 */ PLAYER_BOTTLE_POTION_BLUE = GET_BOTTLE_FROM_IA(PLAYER_IA_BOTTLE_POTION_BLUE), + /* 16 */ PLAYER_BOTTLE_POTION_GREEN = GET_BOTTLE_FROM_IA(PLAYER_IA_BOTTLE_POTION_GREEN), + /* 17 */ PLAYER_BOTTLE_MILK = GET_BOTTLE_FROM_IA(PLAYER_IA_BOTTLE_MILK), + /* 18 */ PLAYER_BOTTLE_MILK_HALF = GET_BOTTLE_FROM_IA(PLAYER_IA_BOTTLE_MILK_HALF), + /* 19 */ PLAYER_BOTTLE_CHATEAU = GET_BOTTLE_FROM_IA(PLAYER_IA_BOTTLE_CHATEAU), + /* 20 */ PLAYER_BOTTLE_FAIRY = GET_BOTTLE_FROM_IA(PLAYER_IA_BOTTLE_FAIRY), + /* 21 */ PLAYER_BOTTLE_MAX +} PlayerBottle; + +// Relies on explosive-related item actions to be contiguous +#define GET_EXPLOSIVE_FROM_IA(itemAction) ((itemAction) - PLAYER_IA_EXPLOSIVE_MIN) + +typedef enum PlayerExplosive { + /* -1 */ PLAYER_EXPLOSIVE_NONE = -1, + /* 0 */ PLAYER_EXPLOSIVE_BOMB = GET_EXPLOSIVE_FROM_IA(PLAYER_IA_BOMB), + /* 1 */ PLAYER_EXPLOSIVE_POWDER_KEG = GET_EXPLOSIVE_FROM_IA(PLAYER_IA_POWDER_KEG), + /* 2 */ PLAYER_EXPLOSIVE_BOMBCHU = GET_EXPLOSIVE_FROM_IA(PLAYER_IA_BOMBCHU), + /* 3 */ PLAYER_EXPLOSIVE_MAX +} PlayerExplosive; + +// Relies on sword item actions to be contiguous +#define GET_SWORD_FROM_IA(itemAction) ((itemAction) - PLAYER_IA_SWORD_MIN) + +typedef enum PlayerSword { + /* -1 */ PLAYER_SWORD_NONE = -1, + /* 0 */ PLAYER_SWORD_KOKIRI = GET_SWORD_FROM_IA(PLAYER_IA_SWORD_KOKIRI), + /* 1 */ PLAYER_SWORD_RAZOR = GET_SWORD_FROM_IA(PLAYER_IA_SWORD_RAZOR), + /* 2 */ PLAYER_SWORD_GILDED = GET_SWORD_FROM_IA(PLAYER_IA_SWORD_GILDED), + /* 3 */ PLAYER_SWORD_GREAT_FAIRY = GET_SWORD_FROM_IA(PLAYER_IA_SWORD_GREAT_FAIRY), + /* 4 */ PLAYER_SWORD_MAX +} PlayerSword; + typedef enum PlayerMeleeWeaponAnimation { /* 0 */ PLAYER_MWA_FORWARD_SLASH_1H, // Vertical one-handed slash /* 1 */ PLAYER_MWA_FORWARD_SLASH_2H, // Vertical two-handed slash @@ -217,10 +298,10 @@ typedef enum PlayerDoorType { } PlayerDoorType; typedef enum PlayerAnimType { - /* 0 */ PLAYER_ANIMTYPE_0, + /* 0 */ PLAYER_ANIMTYPE_DEFAULT, // DEFAULT /* 1 */ PLAYER_ANIMTYPE_1, /* 2 */ PLAYER_ANIMTYPE_2, - /* 3 */ PLAYER_ANIMTYPE_3, + /* 3 */ PLAYER_ANIMTYPE_3, // Two hand weapon /* 4 */ PLAYER_ANIMTYPE_4, /* 5 */ PLAYER_ANIMTYPE_5, /* 6 */ PLAYER_ANIMTYPE_MAX @@ -228,28 +309,29 @@ typedef enum PlayerAnimType { typedef enum PlayerModelType { // left hand - /* 0 */ PLAYER_MODELTYPE_LH_OPEN, - /* 1 */ PLAYER_MODELTYPE_LH_CLOSED, - /* 2 */ PLAYER_MODELTYPE_LH_ONE_HAND_SWORD, - /* 3 */ PLAYER_MODELTYPE_LH_TWO_HAND_SWORD, - /* 4 */ PLAYER_MODELTYPE_LH_4, - /* 5 */ PLAYER_MODELTYPE_LH_BOTTLE, + /* 0 */ PLAYER_MODELTYPE_LH_OPEN, + /* 1 */ PLAYER_MODELTYPE_LH_CLOSED, + /* 2 */ PLAYER_MODELTYPE_LH_ONE_HAND_SWORD, + /* 3 */ PLAYER_MODELTYPE_LH_TWO_HAND_SWORD, + /* 4 */ PLAYER_MODELTYPE_LH_4, + /* 5 */ PLAYER_MODELTYPE_LH_BOTTLE, // right hand - /* 6 */ PLAYER_MODELTYPE_RH_OPEN, - /* 7 */ PLAYER_MODELTYPE_RH_CLOSED, - /* 8 */ PLAYER_MODELTYPE_RH_SHIELD, - /* 9 */ PLAYER_MODELTYPE_RH_BOW, - /* 10 */ PLAYER_MODELTYPE_RH_INSTRUMENT, - /* 11 */ PLAYER_MODELTYPE_RH_HOOKSHOT, + /* 6 */ PLAYER_MODELTYPE_RH_OPEN, + /* 7 */ PLAYER_MODELTYPE_RH_CLOSED, + /* 8 */ PLAYER_MODELTYPE_RH_SHIELD, + /* 9 */ PLAYER_MODELTYPE_RH_BOW, + /* 10 */ PLAYER_MODELTYPE_RH_INSTRUMENT, + /* 11 */ PLAYER_MODELTYPE_RH_HOOKSHOT, // sheath - /* 12 */ PLAYER_MODELTYPE_SHEATH_12, - /* 13 */ PLAYER_MODELTYPE_SHEATH_13, - /* 14 */ PLAYER_MODELTYPE_SHEATH_14, - /* 15 */ PLAYER_MODELTYPE_SHEATH_15, + /* 12 */ PLAYER_MODELTYPE_SHEATH_12, + /* 13 */ PLAYER_MODELTYPE_SHEATH_13, + /* 14 */ PLAYER_MODELTYPE_SHEATH_14, + /* 15 */ PLAYER_MODELTYPE_SHEATH_15, // waist - /* 16 */ PLAYER_MODELTYPE_WAIST, - /* 17 */ PLAYER_MODELTYPE_17, // NULL? - /* 18 */ PLAYER_MODELTYPE_MAX + /* 16 */ PLAYER_MODELTYPE_WAIST, + /* 17 */ PLAYER_MODELTYPE_17, // NULL? + /* 18 */ PLAYER_MODELTYPE_MAX, + /* 255 */ PLAYER_MODELTYPE_RH_FF = 0xFF // disable shield collider, cutscene-specific } PlayerModelType; typedef struct PlayerModelIndices { @@ -368,25 +450,33 @@ typedef enum PlayerBodyPart { typedef struct PlayerAnimationFrame { /* 0x000 */ Vec3s frameTable[PLAYER_LIMB_MAX]; - /* 0x108 */ s16 faceInfo; + /* 0x108 */ s16 appearanceInfo; // bitpack containing the face and hands info } PlayerAnimationFrame; // size = 0x10A #define PLAYER_LIMB_BUF_SIZE (ALIGN16(sizeof(PlayerAnimationFrame)) + 0xF) +#define GET_APPEARANCE_FROM_JOINT_TABLE(jointTable) (((PlayerAnimationFrame *)(jointTable))->appearanceInfo) +#define GET_EYE_INDEX_FROM_JOINT_TABLE(jointTable) ((GET_APPEARANCE_FROM_JOINT_TABLE(jointTable) & 0xF) - 1) +#define GET_MOUTH_INDEX_FROM_JOINT_TABLE(jointTable) (((GET_APPEARANCE_FROM_JOINT_TABLE(jointTable) >> 4) & 0xF) - 1) + +// Note the returned value from this macro needs to be shifted +#define GET_LEFT_HAND_INDEX_FROM_JOINT_TABLE(jointTable) (GET_APPEARANCE_FROM_JOINT_TABLE(jointTable) & 0xF000) +#define GET_RIGHT_HAND_INDEX_FROM_JOINT_TABLE(jointTable) (GET_APPEARANCE_FROM_JOINT_TABLE(jointTable) & 0x0F00) + typedef struct PlayerAgeProperties { /* 0x00 */ f32 unk_00; // ceilingCheckHeight? /* 0x04 */ f32 shadowScale; /* 0x08 */ f32 unk_08; /* 0x0C */ f32 unk_0C; /* 0x10 */ f32 unk_10; - /* 0x14 */ f32 unk_14; - /* 0x18 */ f32 unk_18; - /* 0x1C */ f32 unk_1C; - /* 0x20 */ f32 unk_20; - /* 0x24 */ f32 unk_24; - /* 0x28 */ f32 unk_28; - /* 0x2C */ f32 unk_2C; - /* 0x30 */ f32 unk_30; + /* 0x14 */ f32 unk_14; // compared to wallHeight + /* 0x18 */ f32 unk_18; // compared to wallHeight + /* 0x1C */ f32 unk_1C; // compared to wallHeight + /* 0x20 */ f32 unk_20; // unused? + /* 0x24 */ f32 unk_24; // water stuff // depthInWater + /* 0x28 */ f32 unk_28; // water stuff // depthInWater + /* 0x2C */ f32 unk_2C; // water stuff // depthInWater + /* 0x30 */ f32 unk_30; // water stuff // depthInWater /* 0x34 */ f32 unk_34; /* 0x38 */ f32 unk_38; // wallCheckHeight? /* 0x3C */ f32 unk_3C; @@ -942,8 +1032,8 @@ typedef struct Player { /* 0xAA6 */ u16 unk_AA6; // flags of some kind /* 0xAA8 */ s16 unk_AA8; /* 0xAAA */ s16 unk_AAA; - /* 0xAAC */ Vec3s unk_AAC; - /* 0xAB2 */ Vec3s unk_AB2; + /* 0xAAC */ Vec3s headLimbRot; + /* 0xAB2 */ Vec3s upperLimbRot; /* 0xAB8 */ f32 unk_AB8; /* 0xABC */ f32 unk_ABC; /* 0xAC0 */ f32 unk_AC0; @@ -966,11 +1056,14 @@ typedef struct Player { /* 0xAE7 */ s8 unk_AE7; // a timer /* 0xAE8 */ s16 unk_AE8; // multipurpose timer /* 0xAEC */ f32 unk_AEC; - /* 0xAF0 */ Vec3f unk_AF0[2]; + /* 0xAF0 */ union { // TODO: this may be an union of two structs + Vec3f unk_AF0[2]; + f32 arr_AF0[6]; + }; /* 0xB08 */ f32 unk_B08[2]; // TODO: Investigate if this member actually is an array /* 0xB10 */ f32 unk_B10[6]; /* 0xB28 */ s16 unk_B28; //Burning stick timer? - /* 0xB2A */ s8 getItemDrawId; + /* 0xB2A */ s8 getItemDrawIdPlusOne; /* 0xB2B */ s8 unk_B2B; /* 0xB2C */ f32 windSpeed; /* 0xB30 */ s16 windAngleX; @@ -1022,7 +1115,7 @@ typedef struct Player { /* 0xCC4 */ MtxF mf_CC4; /* 0xD04 */ MtxF shieldMf; /* 0xD44 */ u8 isBurning; - /* 0xD45 */ u8 flameTimers[PLAYER_BODYPART_MAX]; + /* 0xD45 */ u8 flameTimers[PLAYER_BODYPART_MAX]; // one flame per body part /* 0xD57 */ u8 unk_D57; /* 0xD58 */ PlayerFuncD58 unk_D58; /* 0xD5C */ s8 invincibilityTimer; // prevents damage when nonzero (positive = visible, counts towards zero each frame) diff --git a/src/code/code_8012EC80.c b/src/code/code_8012EC80.c index ca8a3eb1a..e10290356 100644 --- a/src/code/code_8012EC80.c +++ b/src/code/code_8012EC80.c @@ -472,7 +472,7 @@ u16 gSceneIdsPerRegion[REGION_MAX][27] = { }; s32 Inventory_GetBtnBItem(PlayState* play) { - if (gSaveContext.buttonStatus[0] == BTN_DISABLED) { + if (gSaveContext.buttonStatus[EQUIP_SLOT_B] == BTN_DISABLED) { return ITEM_NONE; } else if (gSaveContext.bButtonStatus == BTN_DISABLED) { return ITEM_NONE; diff --git a/src/code/z_actor.c b/src/code/z_actor.c index 44d9053ec..8e2f65965 100644 --- a/src/code/z_actor.c +++ b/src/code/z_actor.c @@ -2032,7 +2032,7 @@ s32 Actor_OfferGetItem(Actor* actor, PlayState* play, GetItemId getItemId, f32 x if (!(player->stateFlags1 & (PLAYER_STATE1_80 | PLAYER_STATE1_1000 | PLAYER_STATE1_2000 | PLAYER_STATE1_4000 | PLAYER_STATE1_40000 | PLAYER_STATE1_80000 | PLAYER_STATE1_100000 | PLAYER_STATE1_200000)) && - Player_GetExplosiveHeld(player) < 0) { + (Player_GetExplosiveHeld(player) <= PLAYER_EXPLOSIVE_NONE)) { if ((actor->xzDistToPlayer <= xzRange) && (fabsf(actor->playerHeightRel) <= fabsf(yRange))) { if ((getItemId == GI_MASK_CIRCUS_LEADER || getItemId == GI_PENDANT_OF_MEMORIES || getItemId == GI_DEED_LAND || diff --git a/src/code/z_eff_tire_mark.c b/src/code/z_eff_tire_mark.c index f19eb1289..d7754c5a7 100644 --- a/src/code/z_eff_tire_mark.c +++ b/src/code/z_eff_tire_mark.c @@ -11,7 +11,7 @@ void func_800AE930(CollisionContext* colCtx, EffectTireMark* this, Vec3f* pos, f u32 spA0; Vec3s* vtxList = colCtx->colHeader->vtxList; - if ((bgId != 50) || (this->numElements >= (ARRAY_COUNT(this->elements) - 1)) || (colPoly == NULL)) { + if ((bgId != BGCHECK_SCENE) || (this->numElements >= (ARRAY_COUNT(this->elements) - 1)) || (colPoly == NULL)) { func_800AEF44(this); return; } diff --git a/src/code/z_play.c b/src/code/z_play.c index 178802486..99073fb5c 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -1266,7 +1266,7 @@ void Play_DrawMain(PlayState* this) { goto PostWorldDraw; } - if (this->unk_18844 == 0) { + if (!this->unk_18844) { if (1) { if ((this->skyboxId != SKYBOX_NONE) && !this->envCtx.skyboxDisabled) { if ((this->skyboxId == SKYBOX_NORMAL_SKY) || (this->skyboxId == SKYBOX_3)) { diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c index a7004ad3c..4c72496d0 100644 --- a/src/code/z_player_lib.c +++ b/src/code/z_player_lib.c @@ -1,15 +1,21 @@ -#include "prevent_bss_reordering.h" +/** + * File: z_player_lib.c + * Description: Set of library functions to interact with the Player system + */ +#include "prevent_bss_reordering.h" #include "global.h" #include "objects/gameplay_keep/gameplay_keep.h" +// Assets for each player form #include "objects/object_link_boy/object_link_boy.h" #include "objects/object_link_goron/object_link_goron.h" #include "objects/object_link_zora/object_link_zora.h" #include "objects/object_link_nuts/object_link_nuts.h" #include "objects/object_link_child/object_link_child.h" +// Assets for each mask #include "objects/object_mask_truth/object_mask_truth.h" #include "objects/object_mask_kerfay/object_mask_kerfay.h" #include "objects/object_mask_yofukasi/object_mask_yofukasi.h" @@ -35,6 +41,9 @@ #include "objects/object_mask_zora/object_mask_zora.h" #include "objects/object_mask_nuts/object_mask_nuts.h" +// Assets for other actors +#include "overlays/actors/ovl_En_Arrow/z_en_arrow.h" + void PlayerCall_Init(Actor* thisx, PlayState* play); void PlayerCall_Destroy(Actor* thisx, PlayState* play); void PlayerCall_Update(Actor* thisx, PlayState* play); @@ -49,30 +58,29 @@ typedef struct { struct_801F58B0 D_801F58B0[3][3]; -Vec3f D_801F59B0[2]; +#define D_801F59B0_LEN 2 -s32 D_801F59C8[2]; +Vec3f D_801F59B0[D_801F59B0_LEN]; -typedef struct { - /* 0x0 */ s16 unk_0; - /* 0x2 */ s16 unk_2; - /* 0x4 */ s16 unk_4; - /* 0x6 */ s16 unk_6; - /* 0x8 */ s16 unk_8; -} struct_801F59D0; // size = 0xA +s32 D_801F59C8[D_801F59B0_LEN]; -struct_801F59D0 D_801F59D0; +typedef struct BunnyEarKinematics { + /* 0x0 */ Vec3s rot; + /* 0x6 */ Vec3s angVel; +} BunnyEarKinematics; // size = 0xC -Vec3f* D_801F59DC; +BunnyEarKinematics sBunnyEarKinematics; + +Vec3f* sPlayerCurBodyPartPos; s32 D_801F59E0; -s32 D_801F59E4; +s32 sPlayerLod; -Vec3f D_801F59E8; +Vec3f sPlayerGetItemRefPos; -s32 D_801F59F4; -s32 D_801F59F8; +PlayerModelType sPlayerLeftHandType; +PlayerModelType sPlayerRightHandType; void func_80127B64(struct_801F58B0 arg0[], s32 count, Vec3f* arg2); @@ -149,15 +157,35 @@ void func_801229A0(PlayState* play, Player* player) { CLOSE_DISPS(play->state.gfxCtx); } +// Update function void func_801229EC(Actor* thisx, PlayState* play) { } s16 sMaskObjectIds[PLAYER_MASK_MAX - 1] = { - OBJECT_MASK_TRUTH, OBJECT_MASK_KERFAY, OBJECT_MASK_YOFUKASI, OBJECT_MASK_RABIT, OBJECT_MASK_KI_TAN, - OBJECT_MASK_JSON, OBJECT_MASK_ROMERNY, OBJECT_MASK_ZACHO, OBJECT_MASK_POSTHAT, OBJECT_MASK_MEOTO, - OBJECT_MASK_BIGELF, OBJECT_MASK_GIBUDO, OBJECT_MASK_GERO, OBJECT_MASK_DANCER, OBJECT_MASK_SKJ, - OBJECT_MASK_STONE, OBJECT_MASK_BREE, OBJECT_MASK_BAKURETU, OBJECT_MASK_BU_SAN, OBJECT_MASK_KYOJIN, - OBJECT_MASK_BOY, OBJECT_MASK_GORON, OBJECT_MASK_ZORA, OBJECT_MASK_NUTS, + OBJECT_MASK_TRUTH, // PLAYER_MASK_TRUTH + OBJECT_MASK_KERFAY, // PLAYER_MASK_KAFEIS_MASK + OBJECT_MASK_YOFUKASI, // PLAYER_MASK_ALL_NIGHT + OBJECT_MASK_RABIT, // PLAYER_MASK_BUNNY + OBJECT_MASK_KI_TAN, // PLAYER_MASK_KEATON + OBJECT_MASK_JSON, // PLAYER_MASK_GARO + OBJECT_MASK_ROMERNY, // PLAYER_MASK_ROMANI + OBJECT_MASK_ZACHO, // PLAYER_MASK_CIRCUS_LEADER + OBJECT_MASK_POSTHAT, // PLAYER_MASK_POSTMAN + OBJECT_MASK_MEOTO, // PLAYER_MASK_COUPLE + OBJECT_MASK_BIGELF, // PLAYER_MASK_GREAT_FAIRY + OBJECT_MASK_GIBUDO, // PLAYER_MASK_GIBDO + OBJECT_MASK_GERO, // PLAYER_MASK_DON_GERO + OBJECT_MASK_DANCER, // PLAYER_MASK_KAMARO + OBJECT_MASK_SKJ, // PLAYER_MASK_CAPTAIN + OBJECT_MASK_STONE, // PLAYER_MASK_STONE + OBJECT_MASK_BREE, // PLAYER_MASK_BREMEN + OBJECT_MASK_BAKURETU, // PLAYER_MASK_BLAST + OBJECT_MASK_BU_SAN, // PLAYER_MASK_SCENTS + OBJECT_MASK_KYOJIN, // PLAYER_MASK_GIANT + OBJECT_MASK_BOY, // PLAYER_MASK_FIERCE_DEITY + OBJECT_MASK_GORON, // PLAYER_MASK_GORON + OBJECT_MASK_ZORA, // PLAYER_MASK_ZORA + OBJECT_MASK_NUTS, // PLAYER_MASK_DEKU }; // Load mask object? @@ -197,7 +225,7 @@ void func_801229FC(Player* player) { } else if (player->currentMask == PLAYER_MASK_CIRCUS_LEADER) { s32 i; - for (i = 0; i < ARRAY_COUNT(D_801F59C8); i++) { + for (i = 0; i < D_801F59B0_LEN; i++) { D_801F59C8[i] += Rand_S16Offset(4, 23) + (s32)(fabsf(player->linearVelocity) * 50.0f); } } @@ -356,6 +384,7 @@ void func_8012300C(PlayState* play, s32 arg1) { player->unk_B2B = arg1; } +// Update function void func_8012301C(Actor* thisx, PlayState* play2) { PlayState* play = play2; Player* this = (Player*)thisx; @@ -386,21 +415,29 @@ FlexSkeletonHeader* gPlayerSkeletons[PLAYER_FORM_MAX] = { &gLinkFierceDeitySkel, &gLinkGoronSkel, &gLinkZoraSkel, &gLinkDekuSkel, &gLinkHumanSkel, }; -s16 D_801BFE14[][18] = { +s16 D_801BFE14[PLAYER_BOOTS_MAX][18] = { + // PLAYER_BOOTS_FIERCE_DEITY { 200, 666, 200, 700, 366, 200, 600, 175, 60, 800, 1000, -100, 600, 590, 800, 125, 300, 65 }, + // PLAYER_BOOTS_HYLIAN { 200, 1000, 300, 800, 500, 400, 800, 400, 120, 800, 550, -100, 600, 540, 750, 125, 400, 200 }, + // PLAYER_BOOTS_GIANT { 100, 1000, 300, 800, 250, 200, 800, 200, 90, 800, 350, -80, 600, 540, 750, 60, 200, 200 }, + // PLAYER_BOOTS_DEKU { 200, 1000, 300, 700, 550, 270, 600, 1000, 120, 800, 600, -100, 600, 590, 750, 125, 200, 130 }, + // PLAYER_BOOTS_ZORA_LAND { 200, 1000, 300, 700, 550, 270, 700, 300, 120, 800, 600, -100, 600, 590, 750, 125, 200, 130 }, + // PLAYER_BOOTS_ZORA_UNDERWATER { 200, 1000, 300, 700, 550, 270, 700, 300, 120, 800, 600, -100, 600, 590, 750, 125, 200, 130 }, + // PLAYER_BOOTS_GORON { 200, 1000, 300, 700, 550, 270, 700, 200, 120, 800, 600, -140, 600, 590, 750, 125, 200, 130 }, + // PLAYER_BOOTS_7 { 80, 800, 150, 700, 480, 270, 600, 50, 120, 800, 300, -40, 400, 540, 270, 25, 0, 80 }, }; // OoT's Player_SetBootData void func_80123140(PlayState* play, Player* player) { s16* bootRegs; - s32 currentBoots; + PlayerBoots currentBoots; f32 scale; if ((player->actor.id == ACTOR_PLAYER) && (player->transformation == PLAYER_FORM_FIERCE_DEITY)) { @@ -637,7 +674,7 @@ u8 sActionModelGroups[PLAYER_IA_MAX] = { PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_NUT PLAYER_MODELGROUP_DEFAULT, // PLAYER_IA_PICTO_BOX PLAYER_MODELGROUP_INSTRUMENT, // PLAYER_IA_OCARINA - PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE + PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_EMPTY PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_FISH PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_SPRING_WATER PLAYER_MODELGROUP_BOTTLE, // PLAYER_IA_BOTTLE_HOT_SPRING_WATER @@ -751,10 +788,10 @@ PlayerModelIndices gPlayerModelTypes[PLAYER_MODELGROUP_MAX] = { { PLAYER_ANIMTYPE_1, PLAYER_MODELTYPE_LH_ONE_HAND_SWORD, PLAYER_MODELTYPE_RH_SHIELD, PLAYER_MODELTYPE_SHEATH_13, PLAYER_MODELTYPE_WAIST }, /* PLAYER_MODELGROUP_DEFAULT */ - { PLAYER_ANIMTYPE_0, PLAYER_MODELTYPE_LH_OPEN, PLAYER_MODELTYPE_RH_OPEN, PLAYER_MODELTYPE_SHEATH_14, + { PLAYER_ANIMTYPE_DEFAULT, PLAYER_MODELTYPE_LH_OPEN, PLAYER_MODELTYPE_RH_OPEN, PLAYER_MODELTYPE_SHEATH_14, PLAYER_MODELTYPE_WAIST }, /* PLAYER_MODELGROUP_4 */ - { PLAYER_ANIMTYPE_0, PLAYER_MODELTYPE_LH_OPEN, PLAYER_MODELTYPE_RH_OPEN, PLAYER_MODELTYPE_SHEATH_14, + { PLAYER_ANIMTYPE_DEFAULT, PLAYER_MODELTYPE_LH_OPEN, PLAYER_MODELTYPE_RH_OPEN, PLAYER_MODELTYPE_SHEATH_14, PLAYER_MODELTYPE_WAIST }, /* PLAYER_MODELGROUP_TWO_HAND_SWORD */ { PLAYER_ANIMTYPE_3, PLAYER_MODELTYPE_LH_TWO_HAND_SWORD, PLAYER_MODELTYPE_RH_CLOSED, PLAYER_MODELTYPE_SHEATH_14, @@ -766,7 +803,7 @@ PlayerModelIndices gPlayerModelTypes[PLAYER_MODELGROUP_MAX] = { { PLAYER_ANIMTYPE_5, PLAYER_MODELTYPE_LH_OPEN, PLAYER_MODELTYPE_RH_OPEN, PLAYER_MODELTYPE_SHEATH_14, PLAYER_MODELTYPE_WAIST }, /* PLAYER_MODELGROUP_8 */ - { PLAYER_ANIMTYPE_0, PLAYER_MODELTYPE_LH_4, PLAYER_MODELTYPE_RH_OPEN, PLAYER_MODELTYPE_SHEATH_14, + { PLAYER_ANIMTYPE_DEFAULT, PLAYER_MODELTYPE_LH_4, PLAYER_MODELTYPE_RH_OPEN, PLAYER_MODELTYPE_SHEATH_14, PLAYER_MODELTYPE_WAIST }, /* PLAYER_MODELGROUP_HOOKSHOT */ { PLAYER_ANIMTYPE_4, PLAYER_MODELTYPE_LH_OPEN, PLAYER_MODELTYPE_RH_HOOKSHOT, PLAYER_MODELTYPE_SHEATH_14, @@ -775,16 +812,16 @@ PlayerModelIndices gPlayerModelTypes[PLAYER_MODELGROUP_MAX] = { { PLAYER_ANIMTYPE_3, PLAYER_MODELTYPE_LH_CLOSED, PLAYER_MODELTYPE_RH_CLOSED, PLAYER_MODELTYPE_SHEATH_14, PLAYER_MODELTYPE_WAIST }, /* PLAYER_MODELGROUP_INSTRUMENT */ - { PLAYER_ANIMTYPE_0, PLAYER_MODELTYPE_LH_OPEN, PLAYER_MODELTYPE_RH_INSTRUMENT, PLAYER_MODELTYPE_SHEATH_14, + { PLAYER_ANIMTYPE_DEFAULT, PLAYER_MODELTYPE_LH_OPEN, PLAYER_MODELTYPE_RH_INSTRUMENT, PLAYER_MODELTYPE_SHEATH_14, PLAYER_MODELTYPE_WAIST }, /* PLAYER_MODELGROUP_BOTTLE */ - { PLAYER_ANIMTYPE_0, PLAYER_MODELTYPE_LH_BOTTLE, PLAYER_MODELTYPE_RH_OPEN, PLAYER_MODELTYPE_SHEATH_14, + { PLAYER_ANIMTYPE_DEFAULT, PLAYER_MODELTYPE_LH_BOTTLE, PLAYER_MODELTYPE_RH_OPEN, PLAYER_MODELTYPE_SHEATH_14, PLAYER_MODELTYPE_WAIST }, /* PLAYER_MODELGROUP_13 */ - { PLAYER_ANIMTYPE_0, PLAYER_MODELTYPE_LH_ONE_HAND_SWORD, PLAYER_MODELTYPE_RH_OPEN, PLAYER_MODELTYPE_SHEATH_15, + { PLAYER_ANIMTYPE_DEFAULT, PLAYER_MODELTYPE_LH_ONE_HAND_SWORD, PLAYER_MODELTYPE_RH_OPEN, PLAYER_MODELTYPE_SHEATH_15, PLAYER_MODELTYPE_WAIST }, /* PLAYER_MODELGROUP_ZORA_FINS */ - { PLAYER_ANIMTYPE_0, PLAYER_MODELTYPE_LH_CLOSED, PLAYER_MODELTYPE_RH_CLOSED, PLAYER_MODELTYPE_SHEATH_14, + { PLAYER_ANIMTYPE_DEFAULT, PLAYER_MODELTYPE_LH_CLOSED, PLAYER_MODELTYPE_RH_CLOSED, PLAYER_MODELTYPE_SHEATH_14, PLAYER_MODELTYPE_WAIST }, }; @@ -796,9 +833,11 @@ Gfx* gPlayerWaistDLs[2 * PLAYER_FORM_MAX] = { gLinkZoraWaistDL, gLinkDekuWaistDL, gLinkDekuWaistDL, gLinkHumanWaistDL, gLinkHumanWaistDL, }; -Gfx* gPlayerHandHoldingShields[PLAYER_SHIELD_MAX - 1][2] = { - { gLinkHumanRightHandHoldingHylianShieldDL, gLinkHumanRightHandHoldingHylianShieldDL }, - { gLinkHumanRightHandHoldingMirrorShieldDL, gLinkHumanRightHandHoldingMirrorShieldDL }, +Gfx* gPlayerHandHoldingShields[2 * (PLAYER_SHIELD_MAX - 1)] = { + gLinkHumanRightHandHoldingHerosShieldDL, + gLinkHumanRightHandHoldingHerosShieldDL, + gLinkHumanRightHandHoldingMirrorShieldDL, + gLinkHumanRightHandHoldingMirrorShieldDL, }; Gfx* gPlayerSheath12DLs[2 * PLAYER_FORM_MAX] = { @@ -840,21 +879,21 @@ Gfx* gPlayerSheath14DLs[2 * PLAYER_FORM_MAX] = { gLinkHumanSheathEmptyDL, }; -Gfx* gPlayerShields[][2] = { - { gLinkHumanHylianShieldWithMtxDL, gLinkHumanHylianShieldWithMtxDL }, - { gLinkHumanMirrorShieldWithMtxDL, gLinkHumanMirrorShieldWithMtxDL }, +Gfx* gPlayerShields[] = { + gLinkHumanHerosShieldWithMtxDL, + gLinkHumanHerosShieldWithMtxDL, + gLinkHumanMirrorShieldWithMtxDL, + gLinkHumanMirrorShieldWithMtxDL, }; -Gfx* gPlayerSheathedSwords[][2] = { - { gLinkHumanSheathedKokiriSwordDL, gLinkHumanSheathedKokiriSwordDL }, - { gLinkHumanSheathedRazorSwordDL, gLinkHumanSheathedRazorSwordDL }, - { gLinkHumanSheathedGildedSwordDL, gLinkHumanSheathedGildedSwordDL }, +Gfx* gPlayerSheathedSwords[] = { + gLinkHumanSheathedKokiriSwordDL, gLinkHumanSheathedKokiriSwordDL, gLinkHumanSheathedRazorSwordDL, + gLinkHumanSheathedRazorSwordDL, gLinkHumanSheathedGildedSwordDL, gLinkHumanSheathedGildedSwordDL, }; -Gfx* gPlayerSwordSheaths[][2] = { - { gLinkHumanKokiriSwordSheathDL, gLinkHumanKokiriSwordSheathDL }, - { gLinkHumanRazorSwordSheathDL, gLinkHumanRazorSwordSheathDL }, - { gLinkHumanGildedSwordSheathDL, gLinkHumanGildedSwordSheathDL }, +Gfx* gPlayerSwordSheaths[] = { + gLinkHumanKokiriSwordSheathDL, gLinkHumanKokiriSwordSheathDL, gLinkHumanRazorSwordSheathDL, + gLinkHumanRazorSwordSheathDL, gLinkHumanGildedSwordSheathDL, gLinkHumanGildedSwordSheathDL, }; Gfx* gPlayerLeftHandTwoHandSwordDLs[2 * PLAYER_FORM_MAX] = { @@ -895,10 +934,16 @@ Gfx* gPlayerLeftHandOneHandSwordDLs[2 * PLAYER_FORM_MAX] = { gLinkHumanLeftHandHoldingKokiriSwordDL, }; -Gfx* D_801C018C[][2] = { - { gLinkHumanLeftHandHoldingKokiriSwordDL, gLinkHumanLeftHandHoldingKokiriSwordDL }, - { gLinkHumanLeftHandHoldingRazorSwordDL, gLinkHumanLeftHandHoldingRazorSwordDL }, - { gLinkHumanLeftHandHoldingGildedSwordDL, gLinkHumanLeftHandHoldingGildedSwordDL }, +Gfx* D_801C018C[] = { + // EQUIP_VALUE_SWORD_KOKIRI + gLinkHumanLeftHandHoldingKokiriSwordDL, + gLinkHumanLeftHandHoldingKokiriSwordDL, + // EQUIP_VALUE_SWORD_RAZOR + gLinkHumanLeftHandHoldingRazorSwordDL, + gLinkHumanLeftHandHoldingRazorSwordDL, + // EQUIP_VALUE_SWORD_GILDED + gLinkHumanLeftHandHoldingGildedSwordDL, + gLinkHumanLeftHandHoldingGildedSwordDL, }; Gfx* gPlayerRightHandOpenDLs[2 * PLAYER_FORM_MAX] = { @@ -967,22 +1012,22 @@ Gfx* gPlayerLeftHandBottleDLs[2 * PLAYER_FORM_MAX] = { /* DLists groups end */ -Gfx* D_801C0294[PLAYER_FORM_MAX] = { +Gfx* sPlayerFirstPersonLeftForearmDLs[PLAYER_FORM_MAX] = { gLinkFierceDeityLeftForearmDL, gLinkGoronLeftForearmDL, gLinkZoraLeftForearmDL, gLinkDekuLeftForearmDL, gLinkHumanLeftForearmDL, }; -Gfx* D_801C02A8[PLAYER_FORM_MAX] = { +Gfx* sPlayerFirstPersonLeftHandDLs[PLAYER_FORM_MAX] = { gLinkFierceDeityLeftHandDL, gLinkGoronLeftHandOpenDL, gLinkZoraLeftHandClosedDL, gLinkDekuLeftHandDL, gLinkHumanLeftHandClosedDL, }; -Gfx* D_801C02BC[PLAYER_FORM_MAX] = { +Gfx* sPlayerFirstPersonRightShoulderDLs[PLAYER_FORM_MAX] = { gLinkFierceDeityRightShoulderDL, gLinkGoronRightShoulderDL, gLinkZoraRightShoulderDL, gLinkDekuRightShoulderDL, gLinkHumanRightShoulderDL, }; -Gfx* D_801C02D0[PLAYER_FORM_MAX] = { +Gfx* sPlayerFirstPersonRightHandDLs[PLAYER_FORM_MAX] = { gLinkFierceDeityRightHandDL, //! @bug This is in the middle of a texture in the link_goron object. It has the same offset as a link_nuts dlist 0x060038C0, @@ -991,7 +1036,7 @@ Gfx* D_801C02D0[PLAYER_FORM_MAX] = { object_link_child_DL_018490, }; -Gfx* D_801C02E4[PLAYER_FORM_MAX] = { +Gfx* sPlayerFirstPersonRightHandHookshotDLs[PLAYER_FORM_MAX] = { gLinkFierceDeityRightHandDL, //! @bug This is in the middle of a texture in the link_goron object. It has the same offset as a link_nuts dlist 0x060038C0, @@ -1224,7 +1269,7 @@ void Player_SetModelGroup(Player* player, PlayerModelGroup modelGroup) { player->modelGroup = modelGroup; if (modelGroup == PLAYER_MODELGROUP_1) { - player->modelAnimType = PLAYER_ANIMTYPE_0; + player->modelAnimType = PLAYER_ANIMTYPE_DEFAULT; } else { player->modelAnimType = gPlayerModelTypes[modelGroup].modelAnimType; } @@ -1232,7 +1277,7 @@ void Player_SetModelGroup(Player* player, PlayerModelGroup modelGroup) { if (player->modelAnimType < PLAYER_ANIMTYPE_3) { if (((player->transformation != PLAYER_FORM_FIERCE_DEITY) && (player->transformation != PLAYER_FORM_HUMAN)) || (player->currentShield == PLAYER_SHIELD_NONE)) { - player->modelAnimType = PLAYER_ANIMTYPE_0; + player->modelAnimType = PLAYER_ANIMTYPE_DEFAULT; } } @@ -1367,34 +1412,35 @@ s32 func_801240DC(Player* player) { return Player_IsHoldingHookshot(player) && (player->heldActor == NULL); } -s32 func_80124110(Player* player, PlayerItemAction itemAction) { - s32 temp_v0 = itemAction - PLAYER_IA_FISHING_ROD; +PlayerBButtonSword Player_BButtonSwordFromIA(Player* player, PlayerItemAction itemAction) { + PlayerBButtonSword bButtonSword = GET_B_SWORD_FROM_IA(itemAction); if (player->transformation != PLAYER_FORM_GORON) { - if (((itemAction - PLAYER_IA_FISHING_ROD) > (PLAYER_IA_FISHING_ROD - PLAYER_IA_FISHING_ROD)) && - ((itemAction - PLAYER_IA_FISHING_ROD) < (PLAYER_IA_SWORD_GREAT_FAIRY - PLAYER_IA_FISHING_ROD))) { - return temp_v0; + if ((GET_B_SWORD_FROM_IA(itemAction) > PLAYER_B_SWORD_NONE) && + (GET_B_SWORD_FROM_IA(itemAction) < PLAYER_B_SWORD_MAX)) { + return bButtonSword; } } - return 0; + return PLAYER_B_SWORD_NONE; } -s32 func_80124148(Player* player) { - return func_80124110(player, player->heldItemAction); +PlayerBButtonSword Player_GetHeldBButtonSword(Player* player) { + return Player_BButtonSwordFromIA(player, player->heldItemAction); } -s32 Player_ActionToMeleeWeapon(PlayerItemAction itemAction) { - s32 weapon = itemAction - (PLAYER_IA_SWORD_KOKIRI - 1); +PlayerMeleeWeapon Player_MeleeWeaponFromIA(PlayerItemAction itemAction) { + PlayerMeleeWeapon weapon = GET_MELEE_WEAPON_FROM_IA(itemAction); - if ((weapon > 0) && (weapon <= (PLAYER_IA_ZORA_FINS - (PLAYER_IA_SWORD_KOKIRI - 1)))) { + if ((weapon > PLAYER_MELEEWEAPON_NONE) && (weapon < PLAYER_MELEEWEAPON_MAX)) { return weapon; } - return 0; + + return PLAYER_MELEEWEAPON_NONE; } -s32 Player_GetMeleeWeaponHeld(Player* player) { - return Player_ActionToMeleeWeapon(player->heldItemAction); +PlayerMeleeWeapon Player_GetMeleeWeaponHeld(Player* player) { + return Player_MeleeWeaponFromIA(player->heldItemAction); } s32 Player_IsHoldingTwoHandedWeapon(Player* player) { @@ -1406,47 +1452,45 @@ s32 Player_IsHoldingTwoHandedWeapon(Player* player) { return false; } -s32 Player_ActionToBottle(Player* player, PlayerItemAction itemAction) { - s32 bottle = itemAction - PLAYER_IA_BOTTLE; +PlayerBottle Player_BottleFromIA(Player* player, PlayerItemAction itemAction) { + PlayerBottle bottle = GET_BOTTLE_FROM_IA(itemAction); - // Relies on bottle-related item actions to be contiguous - if ((bottle >= (PLAYER_IA_BOTTLE - PLAYER_IA_BOTTLE)) && (bottle <= (PLAYER_IA_BOTTLE_FAIRY - PLAYER_IA_BOTTLE))) { + if ((bottle > PLAYER_BOTTLE_NONE) && (bottle < PLAYER_BOTTLE_MAX)) { return bottle; } - return -1; + return PLAYER_BOTTLE_NONE; } -s32 Player_GetBottleHeld(Player* Player) { - return Player_ActionToBottle(Player, Player->heldItemAction); +PlayerBottle Player_GetBottleHeld(Player* Player) { + return Player_BottleFromIA(Player, Player->heldItemAction); } -s32 Player_ActionToExplosive(Player* player, PlayerItemAction itemAction) { - s32 explosive = itemAction - PLAYER_IA_BOMB; +PlayerExplosive Player_ExplosiveFromIA(Player* player, PlayerItemAction itemAction) { + PlayerExplosive explosive = GET_EXPLOSIVE_FROM_IA(itemAction); - // Relies on explosive-related item actions to be contiguous - if ((explosive >= (PLAYER_IA_BOMB - PLAYER_IA_BOMB)) && (explosive <= (PLAYER_IA_BOMBCHU - PLAYER_IA_BOMB))) { + if ((explosive > PLAYER_EXPLOSIVE_NONE) && (explosive < PLAYER_EXPLOSIVE_MAX)) { return explosive; } - return -1; + return PLAYER_EXPLOSIVE_NONE; } -s32 Player_GetExplosiveHeld(Player* player) { - return Player_ActionToExplosive(player, player->heldItemAction); +PlayerExplosive Player_GetExplosiveHeld(Player* player) { + return Player_ExplosiveFromIA(player, player->heldItemAction); } -s32 Player_ActionToSword(Actor* actor, PlayerItemAction itemAction) { - s32 sword = 0; +// Note this function maps PLAYER_IA_LAST_USED to PLAYER_SWORD_KOKIRI +PlayerSword Player_SwordFromIA(Player* player, PlayerItemAction itemAction) { + PlayerSword sword = PLAYER_SWORD_KOKIRI; //! FAKE: if ((itemAction == PLAYER_IA_LAST_USED) || - ((sword = itemAction - PLAYER_IA_SWORD_KOKIRI, (sword >= PLAYER_IA_SWORD_KOKIRI - PLAYER_IA_SWORD_KOKIRI)) && - (sword <= PLAYER_IA_SWORD_GREAT_FAIRY - PLAYER_IA_SWORD_KOKIRI))) { + ((sword = GET_SWORD_FROM_IA(itemAction), (sword > PLAYER_SWORD_NONE)) && (sword < PLAYER_SWORD_MAX))) { return sword; } - return -1; + return PLAYER_SWORD_NONE; } s32 func_801242B4(Player* player) { @@ -1485,8 +1529,45 @@ s32 Player_GetEnvironmentalHazard(PlayState* play) { return envHazard + 1; } -void func_80124420(Player* player); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80124420.s") +void Player_UpdateBunnyEars(Player* player) { + Vec3s force; + s16 angle; + + sBunnyEarKinematics.angVel.x -= sBunnyEarKinematics.angVel.x >> 3; + sBunnyEarKinematics.angVel.y -= sBunnyEarKinematics.angVel.y >> 3; + sBunnyEarKinematics.angVel.x += -sBunnyEarKinematics.rot.x >> 2; + sBunnyEarKinematics.angVel.y += -sBunnyEarKinematics.rot.y >> 2; + + angle = player->actor.world.rot.y - player->actor.shape.rot.y; + force.x = + (s32)(player->actor.speed * -200.0f * Math_CosS(angle) * (randPlusMinusPoint5Scaled(2.0f) + 10.0f)) & 0xFFFF; + force.y = + (s32)(player->actor.speed * 100.0f * Math_SinS(angle) * (randPlusMinusPoint5Scaled(2.0f) + 10.0f)) & 0xFFFF; + + sBunnyEarKinematics.angVel.x += force.x >> 2; + sBunnyEarKinematics.angVel.y += force.y >> 2; + + if (sBunnyEarKinematics.angVel.x > 0x1770) { + sBunnyEarKinematics.angVel.x = 0x1770; + } else if (sBunnyEarKinematics.angVel.x < -0x1770) { + sBunnyEarKinematics.angVel.x = -0x1770; + } + + if (sBunnyEarKinematics.angVel.y > 0x1770) { + sBunnyEarKinematics.angVel.y = 0x1770; + } else if (sBunnyEarKinematics.angVel.y < -0x1770) { + sBunnyEarKinematics.angVel.y = -0x1770; + } + + sBunnyEarKinematics.rot.x += sBunnyEarKinematics.angVel.x; + sBunnyEarKinematics.rot.y += sBunnyEarKinematics.angVel.y; + + if (sBunnyEarKinematics.rot.x < 0) { + sBunnyEarKinematics.rot.z = sBunnyEarKinematics.rot.x >> 1; + } else { + sBunnyEarKinematics.rot.z = 0; + } +} void func_80124618(struct_80124618 arg0[], f32 curFrame, Vec3f* arg2) { s32 currentFrame = curFrame; @@ -1542,16 +1623,22 @@ Gfx gCullFrontDList[] = { gsSPEndDisplayList(), }; -TexturePtr sPlayerEyesTextures[] = { - gLinkHumanEyesOpenTex, gLinkHumanEyesHalfTex, gLinkHumanEyesClosedTex, gLinkHumanEyesRollRightTex, - gLinkHumanEyesRollLeftTex, gLinkHumanEyesRollUpTex, gLinkHumanEyesRollDownTex, object_link_child_Tex_003800, +TexturePtr sPlayerEyesTextures[PLAYER_EYES_MAX] = { + gLinkHumanEyesOpenTex, // PLAYER_EYES_OPEN + gLinkHumanEyesHalfTex, // PLAYER_EYES_HALF + gLinkHumanEyesClosedTex, // PLAYER_EYES_CLOSED + gLinkHumanEyesRollRightTex, // PLAYER_EYES_ROLL_RIGHT + gLinkHumanEyesRollLeftTex, // PLAYER_EYES_ROLL_LEFT + gLinkHumanEyesRollUpTex, // PLAYER_EYES_ROLL_UP + gLinkHumanEyesRollDownTex, // PLAYER_EYES_ROLL_DOWN + object_link_child_Tex_003800, // PLAYER_EYES_7 }; -TexturePtr sPlayerMouthTextures[] = { - gLinkHumanMouthClosedTex, - gLinkHumanMouthTeethTex, - gLinkHumanMouthAngryTex, - gLinkHumanMouthHappyTex, +TexturePtr sPlayerMouthTextures[PLAYER_MOUTH_MAX] = { + gLinkHumanMouthClosedTex, // PLAYER_MOUTH_CLOSED + gLinkHumanMouthTeethTex, // PLAYER_MOUTH_TEETH + gLinkHumanMouthAngryTex, // PLAYER_MOUTH_ANGRY + gLinkHumanMouthHappyTex, // PLAYER_MOUTH_HAPPY }; typedef struct PlayerFaceIndices { @@ -1583,8 +1670,8 @@ PlayerFaceIndices sPlayerFaces[] = { void Player_DrawImpl(PlayState* play, void** skeleton, Vec3s* jointTable, s32 dListCount, s32 lod, PlayerTransformation playerForm, s32 boots, s32 face, OverrideLimbDrawFlex overrideLimbDraw, PostLimbDrawFlex postLimbDraw, Actor* actor) { - s32 eyeIndex = (jointTable[22].x & 0xF) - 1; - s32 mouthIndex = ((jointTable[22].x >> 4) & 0xF) - 1; + s32 eyeIndex = GET_EYE_INDEX_FROM_JOINT_TABLE(jointTable); + s32 mouthIndex = GET_MOUTH_INDEX_FROM_JOINT_TABLE(jointTable); Gfx* gfx; OPEN_DISPS(play->state.gfxCtx); @@ -1614,68 +1701,172 @@ void Player_DrawImpl(PlayState* play, void** skeleton, Vec3s* jointTable, s32 dL POLY_OPA_DISP = &gfx[2]; D_801F59E0 = playerForm * 2; - D_801F59E4 = lod; + sPlayerLod = lod; SkelAnime_DrawFlexLod(play, skeleton, jointTable, dListCount, overrideLimbDraw, postLimbDraw, actor, lod); CLOSE_DISPS(play->state.gfxCtx); } Vec3f D_801C08C0[PLAYER_FORM_MAX] = { - { 1304.0f, 0.0f, 0.0f }, { 1156.0f, 0.0f, 0.0f }, { 1406.0f, 0.0f, 0.0f }, - { 408.0f, 0.0f, 0.0f }, { 695.0f, 0.0f, 0.0f }, + { 1304.0f, 0.0f, 0.0f }, // PLAYER_FORM_FIERCE_DEITY + { 1156.0f, 0.0f, 0.0f }, // PLAYER_FORM_GORON + { 1406.0f, 0.0f, 0.0f }, // PLAYER_FORM_ZORA + { 408.0f, 0.0f, 0.0f }, // PLAYER_FORM_DEKU + { 695.0f, 0.0f, 0.0f }, // PLAYER_FORM_HUMAN }; f32 D_801C08FC[PLAYER_FORM_MAX] = { - 1265.0f, 1056.0f, 1506.0f, 359.0f, 826.0f, + 1265.0f, // PLAYER_FORM_FIERCE_DEITY + 1056.0f, // PLAYER_FORM_GORON + 1506.0f, // PLAYER_FORM_ZORA + 359.0f, // PLAYER_FORM_DEKU + 826.0f, // PLAYER_FORM_HUMAN }; f32 D_801C0910[PLAYER_FORM_MAX] = { - 170.0416f, 133.63359f, 197.68358f, 16.646399f, 48.302498f, + 170.0416f, // PLAYER_FORM_FIERCE_DEITY + 133.63359f, // PLAYER_FORM_GORON + 197.68358f, // PLAYER_FORM_ZORA + 16.646399f, // PLAYER_FORM_DEKU + 48.302498f, // PLAYER_FORM_HUMAN }; f32 D_801C0924[PLAYER_FORM_MAX] = { - 10.019104f, 22.120003f, -29.12001f, 3.7582989f, -19.925102f, + 10.019104f, // PLAYER_FORM_FIERCE_DEITY + 22.120003f, // PLAYER_FORM_GORON + -29.12001f, // PLAYER_FORM_ZORA + 3.7582989f, // PLAYER_FORM_DEKU + -19.925102f, // PLAYER_FORM_HUMAN }; f32 D_801C0938[PLAYER_FORM_MAX] = { - 5.0f, 4.0f, 1.0f, 1.0f, 3.0f, + 5.0f, // PLAYER_FORM_FIERCE_DEITY + 4.0f, // PLAYER_FORM_GORON + 1.0f, // PLAYER_FORM_ZORA + 1.0f, // PLAYER_FORM_DEKU + 3.0f, // PLAYER_FORM_HUMAN }; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80124870.s") +/** + * Adjusts player's legs to slopes and spawns flames when running on lava + */ +void Player_AdjustSingleLeg(PlayState* play, Player* player, SkelAnime* skelAnime, Vec3f* pos, Vec3s* rot, + s32 thighLimbIndex, s32 shinLimbIndex, s32 footLimbIndex) { + CollisionPoly* poly; + s32 bgId; + f32 yIntersect; + Vec3f sp90; + Vec3f sp84; + Vec3f footprintPos; + f32 sp74; + f32 sp70; + f32 sp7C; -void func_80124CC4(PlayState* play, Player* player, f32 arg2) { + if ((player->stateFlags3 & PLAYER_STATE3_1) || !(player->actor.scale.y >= 0.0f) || + (player->stateFlags1 & PLAYER_STATE1_80) || play->unk_18844) { + return; + } + + sp74 = D_801C0910[player->transformation]; + sp70 = D_801C0924[player->transformation]; + sp7C = D_801C0938[player->transformation] - player->unk_AB8; + Matrix_Push(); + Matrix_TranslateRotateZYX(pos, rot); + Matrix_MultZero(&sp90); + Matrix_TranslateRotateZYX(&D_801C08C0[player->transformation], &skelAnime->jointTable[shinLimbIndex]); + Matrix_Translate(D_801C08FC[player->transformation], 0.0f, 0.0f, MTXMODE_APPLY); + Matrix_MultZero(&sp84); + Matrix_MultVecY(-300.0f, &footprintPos); + Matrix_Pop(); + + footprintPos.y += 15.0f; + yIntersect = BgCheck_EntityRaycastFloor3(&play->colCtx, &poly, &bgId, &footprintPos) + sp7C + + (player->unk_ABC * player->actor.scale.y); + if (sp84.y < yIntersect) { + f32 diffX = sp84.x - sp90.x; + f32 diffY = sp84.y - sp90.y; + f32 diffZ = sp84.z - sp90.z; + f32 distance; + f32 sp58; + f32 sp54; + f32 temp_f20; + f32 sp4C; + f32 sp48; + s16 temp_f8; + s32 temp_v0_4; + s16 phi_t1; + + distance = sqrtf(SQ(diffX) + SQ(diffY) + SQ(diffZ)); + + sp58 = (SQ(distance) + sp70) / (2.0f * distance); + + temp_f20 = sp74 - SQ(sp58); + temp_f20 = (temp_f20 < 0.0f) ? 0.0f : sqrtf(temp_f20); + + sp4C = func_80086B30(temp_f20, sp58); + distance = sqrtf(SQ(diffX) + SQ(yIntersect - sp90.y) + SQ(diffZ)); + sp58 = (SQ(distance) + sp70) / (2.0f * distance); + sp54 = distance - sp58; + + temp_f20 = sp74 - SQ(sp58); + temp_f20 = (temp_f20 < 0.0f) ? 0.0f : sqrtf(temp_f20); + + sp48 = func_80086B30(temp_f20, sp58); + phi_t1 = (M_PI - (func_80086B30(sp54, temp_f20) + ((M_PI / 2.0f) - sp48))) * (0x8000 / M_PI); + phi_t1 = -skelAnime->jointTable[shinLimbIndex].z + phi_t1; + temp_f8 = (sp48 - sp4C) * (0x8000 / M_PI); + + if ((s16)(ABS_ALT(skelAnime->jointTable[shinLimbIndex].x) + ABS_ALT(skelAnime->jointTable[shinLimbIndex].y)) < + 0) { + phi_t1 = BINANG_ROT180(phi_t1); + } + + rot->z -= temp_f8; + + skelAnime->jointTable[thighLimbIndex].z -= temp_f8; + skelAnime->jointTable[shinLimbIndex].z += phi_t1; + skelAnime->jointTable[footLimbIndex].z = (skelAnime->jointTable[footLimbIndex].z + temp_f8) - phi_t1; + + temp_v0_4 = SurfaceType_GetFloorType(&play->colCtx, poly, bgId); + if ((temp_v0_4 >= 2) && (temp_v0_4 < 4) && !SurfaceType_IsWallDamage(&play->colCtx, poly, bgId)) { + footprintPos.y = yIntersect; + EffectSsGFire_Spawn(play, &footprintPos); + } + } +} + +void Player_DrawHookshotReticle(PlayState* play, Player* player, f32 hookshotDistance) { static Vec3f D_801C094C = { -500.0f, -100.0f, 0.0f }; CollisionPoly* poly; s32 bgId; Vec3f sp7C; Vec3f sp70; Vec3f pos; - Vec3f sp58; - f32 sp54; - f32 scale; D_801C094C.z = 0.0f; Matrix_MultVec3f(&D_801C094C, &sp7C); - D_801C094C.z = arg2; + D_801C094C.z = hookshotDistance; Matrix_MultVec3f(&D_801C094C, &sp70); if (BgCheck_AnyLineTest3(&play->colCtx, &sp7C, &sp70, &pos, &poly, true, true, true, true, &bgId)) { if (!func_800B90AC(play, &player->actor, poly, bgId, &pos) || BgCheck_ProjectileLineTest(&play->colCtx, &sp7C, &sp70, &pos, &poly, true, true, true, true, &bgId)) { + Vec3f sp58; + f32 sp54; + f32 scale; + OPEN_DISPS(play->state.gfxCtx); OVERLAY_DISP = Gfx_CallSetupDL(OVERLAY_DISP, 7); SkinMatrix_Vec3fMtxFMultXYZW(&play->viewProjectionMtxF, &pos, &sp58, &sp54); - if (sp54 < 200.0f) { - scale = 0.08f; - } else { - scale = (sp54 / 200.0f) * 0.08f; - } + + scale = (sp54 < 200.0f) ? 0.08f : (sp54 / 200.0f) * 0.08f; + Matrix_Translate(pos.x, pos.y, pos.z, MTXMODE_NEW); Matrix_Scale(scale, scale, scale, MTXMODE_APPLY); gSPMatrix(OVERLAY_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPSegment(OVERLAY_DISP++, 0x06, play->objectCtx.status[player->actor.objBankIndex].segment); - gSPDisplayList(OVERLAY_DISP++, gameplay_keep_DL_04F250); + gSPDisplayList(OVERLAY_DISP++, gHookshotReticleDL); CLOSE_DISPS(play->state.gfxCtx); } @@ -1694,8 +1885,6 @@ Gfx** D_801C0964[] = { }; void func_80124F18(s16* arg0, f32* arg1, s16 arg2, f32 arg3, f32 arg4) { - f32 phi_f12; - if (*arg0 < arg2) { *arg1 += arg3; } else { @@ -1742,7 +1931,26 @@ void func_80124FF0(f32 arg0, s16 arg1, Vec3f* arg2, s16 arg3, Vec3f* arg4, Vec3f func_80124F18(arg6, arg7, temp_v0, 20.0f, 2000.0f); } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_801251C4.s") +void func_801251C4(Player* player, Vec3f* arg1) { + Vec3f sp4C; + Vec3f sp40; + + sp4C.x = player->actor.world.pos.x; + sp4C.y = player->actor.world.pos.y + 60.0f; + sp4C.z = player->actor.world.pos.z; + func_80124FF0(-20.0f, player->unk_B8C, &sp4C, player->actor.shape.rot.y, + &player->bodyPartsPos[PLAYER_BODYPART_WAIST], arg1, &player->unk_B90, &player->unk_B10[0], 0.0f, + 0x1F40, &player->unk_B92, &player->unk_B10[1], 0); + + sp40.x = + (player->bodyPartsPos[PLAYER_BODYPART_LEFT_FOOT].x + player->bodyPartsPos[PLAYER_BODYPART_RIGHT_FOOT].x) / 2.0f; + sp40.y = + (player->bodyPartsPos[PLAYER_BODYPART_LEFT_FOOT].y + player->bodyPartsPos[PLAYER_BODYPART_RIGHT_FOOT].y) / 2.0f; + sp40.z = + (player->bodyPartsPos[PLAYER_BODYPART_LEFT_FOOT].z + player->bodyPartsPos[PLAYER_BODYPART_RIGHT_FOOT].z) / 2.0f; + func_80124FF0(-20.0f, player->unk_B90, arg1, (player->actor.shape.rot.y + player->unk_B92), &sp40, arg1, + &player->unk_B94, &player->unk_B10[2], -1.9f, 0x1F40, &player->unk_B96, &player->unk_B10[3], 0); +} void func_80125318(Vec3f* arg0, Vec3s* arg1) { arg0->x = 0.0f; @@ -1769,11 +1977,9 @@ void Player_DrawZoraShield(PlayState* play, Player* player) { u8* phi_a0; Vtx* vtx; Gfx* dList; - f32 scale; + f32 scale = player->unk_B62 * (10.0f / 51.0f); s32 i; - scale = player->unk_B62 * (10.0f / 51.0f); - OPEN_DISPS(play->state.gfxCtx); AnimatedMat_DrawXlu(play, Lib_SegmentedToVirtual(&object_link_zora_Matanimheader_012A80)); @@ -1801,49 +2007,399 @@ void Player_DrawZoraShield(PlayState* play, Player* player) { CLOSE_DISPS(play->state.gfxCtx); } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80125500.s") +void func_80125500(PlayState* play, Player* player, s32 limbIndex, Vec3f* pos, Vec3s* rot) { + if (limbIndex == PLAYER_LIMB_LEFT_THIGH) { + Player_AdjustSingleLeg(play, player, &player->skelAnime, pos, rot, PLAYER_LIMB_LEFT_THIGH, + PLAYER_LIMB_LEFT_SHIN, PLAYER_LIMB_LEFT_FOOT); + } else if (limbIndex == PLAYER_LIMB_RIGHT_THIGH) { + Player_AdjustSingleLeg(play, player, &player->skelAnime, pos, rot, PLAYER_LIMB_RIGHT_THIGH, + PLAYER_LIMB_RIGHT_SHIN, PLAYER_LIMB_RIGHT_FOOT); + } +} -s32 func_80125580(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80125580.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80125CE0.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80125D4C.s") - -#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_801262C8.s") - -// unused -s32 func_801263FC(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { +s32 Player_OverrideLimbDrawGameplayCommon(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, + Actor* thisx) { + s32 pad; Player* player = (Player*)thisx; - if (!func_80125580(play, limbIndex, dList, pos, rot, thisx)) { + if (limbIndex == PLAYER_LIMB_ROOT) { + sPlayerLeftHandType = player->leftHandType; + sPlayerRightHandType = player->rightHandType; + + // `sPlayerCurBodyPartPos` is incremented before each usage, so it starts at index -1. + // What determines if a limb corresponds to a body part is whether or not it has a non-NULL `dList`. + // Note: The increment would not be done for the root limb, even if it had a non-NULL `dList`. + // So if the root limb had a non-NULL `dList` (which is not the case in vanilla), + // an out-of-bounds write to `bodyPartsPos` would occur. + sPlayerCurBodyPartPos = &player->bodyPartsPos[-1]; + + if (player->transformation != PLAYER_FORM_FIERCE_DEITY) { + if (!(player->skelAnime.moveFlags & ANIM_FLAG_4) || (player->skelAnime.moveFlags & ANIM_FLAG_1)) { + pos->x *= player->ageProperties->unk_08; + pos->z *= player->ageProperties->unk_08; + } + if (!(player->skelAnime.moveFlags & ANIM_FLAG_4) || (player->skelAnime.moveFlags & ANIM_FLAG_UPDATEY)) { + pos->y *= player->ageProperties->unk_08; + } + } + + pos->y -= player->unk_AB8; + if ((player->transformation == PLAYER_FORM_ZORA) && (player->stateFlags3 & PLAYER_STATE3_8000)) { + Matrix_Translate(pos->x, ((Math_CosS(player->unk_AAA) - 1.0f) * 200.0f) + pos->y, pos->z, MTXMODE_APPLY); + Matrix_RotateXS(player->unk_AAA, MTXMODE_APPLY); + + if (player->unk_B62 != 0) { + Matrix_Push(); + Matrix_RotateZS(player->unk_B8E, MTXMODE_APPLY); + Matrix_RotateZYX(rot->x, rot->y, rot->z, MTXMODE_APPLY); + Matrix_RotateXS(-0x8000, MTXMODE_APPLY); + Matrix_Translate(0.0f, 0.0f, -4000.0f, MTXMODE_APPLY); + Player_DrawZoraShield(play, player); + Matrix_Pop(); + } + + Matrix_RotateZS(player->unk_B86[1], MTXMODE_APPLY); + Matrix_RotateZYX(rot->x, rot->y, rot->z, MTXMODE_APPLY); + func_80125318(pos, rot); + } else if (player->stateFlags3 & PLAYER_STATE3_2000) { + Vec3f sp54; + + func_801251C4(player, &sp54); + sp54.x -= player->actor.world.pos.x; + sp54.y -= player->actor.world.pos.y; + sp54.z -= player->actor.world.pos.z; + Matrix_Translate(pos->x + sp54.x, pos->y + sp54.y, pos->z + sp54.z, MTXMODE_APPLY); + Matrix_RotateXS(player->unk_B94, MTXMODE_APPLY); + Matrix_RotateZS(player->unk_B8E, MTXMODE_APPLY); + player->upperLimbRot.x = player->unk_B90 - player->unk_B94; + Matrix_RotateZYX(rot->x, rot->y, rot->z, MTXMODE_APPLY); + func_80125318(pos, rot); + } else if (player->unk_AAA != 0) { + Matrix_Translate(pos->x, ((Math_CosS(player->unk_AAA) - 1.0f) * 200.0f) + pos->y, pos->z, MTXMODE_APPLY); + Matrix_RotateXS(player->unk_AAA, MTXMODE_APPLY); + Matrix_RotateZYX(rot->x, rot->y, rot->z, MTXMODE_APPLY); + func_80125318(pos, rot); + } + } else { + if (*dList != NULL) { + sPlayerCurBodyPartPos++; + } + + if (limbIndex == PLAYER_LIMB_HEAD) { + rot->x += player->headLimbRot.z; + rot->y -= player->headLimbRot.y; + rot->z += player->headLimbRot.x; + + if (player->transformation == PLAYER_FORM_DEKU) { + EnArrow* bubble = NULL; + + if (((player->skelAnime.animation == &gPlayerAnim_pn_drinkend)) || + (player->unk_284.animation == &gPlayerAnim_pn_tamahaki) || + ((player->stateFlags3 & PLAYER_STATE3_40) && ((bubble = (EnArrow*)player->heldActor) != NULL))) { + Matrix_TranslateRotateZYX(pos, rot); + func_80125340(); + func_80125318(pos, rot); + + if (bubble != NULL) { + s32 requiredScopeTemp[2]; + + player->unk_AF0[0].x = 1.0f - (bubble->bubble.unk_144 * 0.03f); + player->unk_AF0[0].y = 1.0f - (bubble->bubble.unk_144 * 0.01f); + player->unk_AF0[0].z = 1.0f - (bubble->bubble.unk_144 * 0.04f); + rot->z = bubble->bubble.unk_144 * 320.0f; + } else if (player->skelAnime.animation == &gPlayerAnim_pn_drinkend) { + func_80124618(D_801C03E0, player->skelAnime.curFrame, player->unk_AF0); + } else { + func_80124618(D_801C03C0, player->unk_284.curFrame, player->unk_AF0); + } + + Matrix_Scale(player->unk_AF0[0].x, player->unk_AF0[0].y, player->unk_AF0[0].z, MTXMODE_APPLY); + } + } + } else if (limbIndex == PLAYER_LIMB_TORSO) { + if ((player->skelAnime.animation == &gPlayerAnim_pg_gakkistart) || + (player->skelAnime.animation == &gPlayerAnim_pg_wait) || + (player->skelAnime.animation == &gPlayerAnim_pg_punchC) || + (player->transformation == PLAYER_FORM_ZORA)) { + Matrix_TranslateRotateZYX(pos, rot); + if (player->transformation == PLAYER_FORM_GORON) { + func_80125340(); + } + + func_80125318(pos, rot); + if ((player->transformation != PLAYER_FORM_ZORA) || + (player->skelAnime.animation == &gPlayerAnim_pz_wait)) { + struct_80124618* phi_a0 = + (player->skelAnime.animation == &gPlayerAnim_pz_wait) + ? D_801C0608 + : ((player->skelAnime.animation == &gPlayerAnim_pg_wait) + ? D_801C0628 + : ((player->skelAnime.animation == &gPlayerAnim_pg_punchC) ? D_801C07C0 + : D_801C0460)); + + func_80124618(phi_a0, player->skelAnime.curFrame, player->unk_AF0); + } else { + player->unk_AF0[0].y = 1.0f; + } + + if (player->transformation == PLAYER_FORM_ZORA) { + player->unk_AF0[0].y *= 1.0f + (0.29999995f * player->unk_B10[0]); + player->unk_AF0[0].x = 1.0f; + player->unk_AF0[0].z = 1.0f; + } + Matrix_Scale(player->unk_AF0[0].x, player->unk_AF0[0].y, player->unk_AF0[0].z, MTXMODE_APPLY); + } + } else if (limbIndex == PLAYER_LIMB_UPPER_ROOT) { + s16 rotX; + s16 rotZ = 0x44C; + + if (player->unk_AA8 != 0) { + Matrix_RotateZS(rotZ, MTXMODE_APPLY); + Matrix_RotateYS(player->unk_AA8, MTXMODE_APPLY); + } + + if (player->upperLimbRot.y != 0) { + Matrix_RotateYS(player->upperLimbRot.y, MTXMODE_APPLY); + } + + rotX = player->upperLimbRot.x; + if ((player->transformation == PLAYER_FORM_DEKU) && (player->stateFlags3 & PLAYER_STATE3_40)) { + if (player->heldActor != NULL) { + rotX += (s16)(((EnArrow*)(player->heldActor))->bubble.unk_144 * -470.0f); + } + } + + Matrix_RotateXS(rotX, MTXMODE_APPLY); + if (player->upperLimbRot.z != 0) { + Matrix_RotateZS(player->upperLimbRot.z, MTXMODE_APPLY); + } + } else { + func_80125500(play, player, limbIndex, pos, rot); + } + } + + return false; +} + +void func_80125CE0(Player* player, struct_80124618* arg1, Vec3f* pos, Vec3s* rot) { + Matrix_TranslateRotateZYX(pos, rot); + func_80125318(pos, rot); + func_80124618(arg1, player->skelAnime.curFrame, player->unk_AF0); + Matrix_Scale(player->unk_AF0[0].x, player->unk_AF0[0].y, player->unk_AF0[0].z, MTXMODE_APPLY); +} + +s32 Player_OverrideLimbDrawGameplayDefault(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, + Actor* actor) { + Player* player = (Player*)actor; + + if (!Player_OverrideLimbDrawGameplayCommon(play, limbIndex, dList, pos, rot, &player->actor)) { + if (limbIndex == PLAYER_LIMB_LEFT_HAND) { + Gfx** leftHandDLists = player->leftHandDLists; + EquipValueSword swordEquipValue; + + if (player->stateFlags3 & PLAYER_STATE3_2000) { + rot->z -= player->unk_B8C; + } else if ((sPlayerLeftHandType == PLAYER_MODELTYPE_LH_4) && + (player->stateFlags1 & PLAYER_STATE1_2000000)) { + leftHandDLists = &gPlayerLeftHandOpenDLs[D_801F59E0]; + sPlayerLeftHandType = PLAYER_MODELTYPE_LH_OPEN; + } else if ((player->leftHandType == PLAYER_MODELTYPE_LH_OPEN) && (player->actor.speed > 2.0f) && + !(player->stateFlags1 & PLAYER_STATE1_8000000)) { + leftHandDLists = &gPlayerLeftHandClosedDLs[D_801F59E0]; + sPlayerLeftHandType = PLAYER_MODELTYPE_LH_CLOSED; + } else if ((player->leftHandType == PLAYER_MODELTYPE_LH_ONE_HAND_SWORD) && + (player->transformation == PLAYER_FORM_HUMAN) && + ((swordEquipValue = GET_CUR_EQUIP_VALUE(EQUIP_TYPE_SWORD), + swordEquipValue != EQUIP_VALUE_SWORD_NONE))) { + leftHandDLists = &D_801C018C[2 * ((swordEquipValue - 1) ^ 0)]; + } else { + s32 handIndex = GET_LEFT_HAND_INDEX_FROM_JOINT_TABLE(player->skelAnime.jointTable); + + if (handIndex != 0) { + handIndex = (handIndex >> 12) - 1; + if (handIndex >= 2) { + handIndex = 0; + } + leftHandDLists = &D_801C095C[handIndex][D_801F59E0]; + } + } + + *dList = leftHandDLists[sPlayerLod]; + + if (player->transformation == PLAYER_FORM_GORON) { + if (player->skelAnime.animation == &gPlayerAnim_pg_punchA) { + func_80125CE0(player, D_801C0750, pos, rot); + } + } else if (player->transformation == PLAYER_FORM_ZORA) { + if ((player->stateFlags1 & PLAYER_STATE1_2) || (player->stateFlags1 & PLAYER_STATE1_400) || + func_801242B4(player)) { + *dList = gLinkZoraLeftHandOpenDL; + } else { + s32 phi_a1 = (player->skelAnime.animation == &gPlayerAnim_pz_gakkistart) && + (player->skelAnime.curFrame >= 6.0f); + + if (phi_a1 || (player->skelAnime.animation == &gPlayerAnim_pz_gakkiplay)) { + *dList = object_link_zora_DL_00E2A0; + func_80125CE0(player, phi_a1 ? D_801C0538 : D_801C0560, pos, rot); + } + } + } + } else if (limbIndex == PLAYER_LIMB_RIGHT_HAND) { + if ((player->transformation == PLAYER_FORM_ZORA) && + (((player->stateFlags1 & PLAYER_STATE1_2)) || (player->stateFlags1 & PLAYER_STATE1_400) || + func_801242B4(player))) { + *dList = gLinkZoraRightHandOpenDL; + } else { + Gfx** rightHandDLists = player->rightHandDLists; + + if (player->stateFlags3 & PLAYER_STATE3_2000) { + rot->z -= player->unk_B8C; + } + + if (sPlayerRightHandType == PLAYER_MODELTYPE_RH_SHIELD) { + if (player->transformation == PLAYER_FORM_HUMAN) { + if (player->currentShield != PLAYER_SHIELD_NONE) { + //! FAKE + rightHandDLists = &gPlayerHandHoldingShields[2 * ((player->currentShield - 1) ^ 0)]; + } + } + } else if ((player->rightHandType == PLAYER_MODELTYPE_RH_OPEN) && (player->actor.speed > 2.0f) && + (!(player->stateFlags1 & PLAYER_STATE1_8000000))) { + rightHandDLists = &gPlayerRightHandClosedDLs[D_801F59E0]; + sPlayerRightHandType = PLAYER_MODELTYPE_RH_CLOSED; + } else { + s32 handIndex = GET_RIGHT_HAND_INDEX_FROM_JOINT_TABLE(player->skelAnime.jointTable); + + if (handIndex != 0) { + handIndex = (handIndex >> 8) - 1; + rightHandDLists = &D_801C0964[handIndex][D_801F59E0]; + } + } + + *dList = rightHandDLists[sPlayerLod]; + if (player->skelAnime.animation == &gPlayerAnim_pg_punchB) { + func_80125CE0(player, D_801C0784, pos, rot); + } + } + } else if (limbIndex == PLAYER_LIMB_SHEATH) { + Gfx** sheathDLists = player->sheathDLists; + + if (player->transformation == PLAYER_FORM_HUMAN) { + EquipValueSword swordEquipValue = GET_CUR_EQUIP_VALUE(EQUIP_TYPE_SWORD); + + if (swordEquipValue != EQUIP_VALUE_SWORD_NONE) { + if ((player->sheathType == PLAYER_MODELTYPE_SHEATH_14) || + (player->sheathType == PLAYER_MODELTYPE_SHEATH_12)) { + sheathDLists = &gPlayerSheathedSwords[2 * ((swordEquipValue - 1) ^ 0)]; + } else { + sheathDLists = &gPlayerSwordSheaths[2 * ((swordEquipValue - 1) ^ 0)]; + } + } + } + + *dList = sheathDLists[sPlayerLod]; + } else if (limbIndex == PLAYER_LIMB_WAIST) { + *dList = player->waistDLists[sPlayerLod]; + } else if (limbIndex == PLAYER_LIMB_HAT) { + if (player->transformation == PLAYER_FORM_ZORA) { + Matrix_Scale((player->unk_B10[0] * 1) + 1.0f, 1.0f, 1.0f, MTXMODE_APPLY); + } + } + } + + return false; +} + +s32 Player_OverrideLimbDrawGameplayFirstPerson(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, + Actor* actor) { + Player* player = (Player*)actor; + + if (!Player_OverrideLimbDrawGameplayCommon(play, limbIndex, dList, pos, rot, actor)) { + if (player->unk_AA5 != 3) { + *dList = NULL; + } else if (limbIndex == PLAYER_LIMB_LEFT_FOREARM) { + *dList = sPlayerFirstPersonLeftForearmDLs[player->transformation]; + } else if (limbIndex == PLAYER_LIMB_LEFT_HAND) { + *dList = sPlayerFirstPersonLeftHandDLs[player->transformation]; + } else if (limbIndex == PLAYER_LIMB_RIGHT_SHOULDER) { + *dList = sPlayerFirstPersonRightShoulderDLs[player->transformation]; + } else if (limbIndex == PLAYER_LIMB_RIGHT_HAND) { + if (Player_IsHoldingHookshot(player)) { + *dList = sPlayerFirstPersonRightHandHookshotDLs[player->transformation]; + } else { + *dList = sPlayerFirstPersonRightHandDLs[player->transformation]; + } + } else { + *dList = NULL; + } + } + + return false; +} + +// Unused remnant of OoT +s32 Player_OverrideLimbDrawGameplayCrawling(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, + Actor* thisx) { + Player* player = (Player*)thisx; + + if (!Player_OverrideLimbDrawGameplayCommon(play, limbIndex, dList, pos, rot, thisx)) { *dList = NULL; } return false; } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80126440.s") +s32 func_80126440(PlayState* play, ColliderQuad* collider, WeaponInfo* weaponInfo, Vec3f* newTip, Vec3f* newBase) { + if (!weaponInfo->active) { + if (collider != NULL) { + Collider_ResetQuadAT(play, &collider->base); + } + Math_Vec3f_Copy(&weaponInfo->tip, newTip); + Math_Vec3f_Copy(&weaponInfo->base, newBase); + weaponInfo->active = true; -u8 D_801C096C[PLAYER_SHIELD_MAX] = { - COLTYPE_METAL, - COLTYPE_METAL, - COLTYPE_METAL, + return true; + } + + if ((weaponInfo->tip.x == newTip->x) && (weaponInfo->tip.y == newTip->y) && (weaponInfo->tip.z == newTip->z)) { + if ((weaponInfo->base.x == newBase->x) && (weaponInfo->base.y == newBase->y) && + (weaponInfo->base.z == newBase->z)) { + if (collider != NULL) { + Collider_ResetQuadAT(play, &collider->base); + } + + return false; + } + } + + if (collider != NULL) { + Collider_SetQuadVertices(collider, newBase, newTip, &weaponInfo->base, &weaponInfo->tip); + CollisionCheck_SetAT(play, &play->colChkCtx, &collider->base); + } + + Math_Vec3f_Copy(&weaponInfo->base, newBase); + Math_Vec3f_Copy(&weaponInfo->tip, newTip); + weaponInfo->active = true; + + return true; +} + +u8 sPlayerShieldCollisionTypes[PLAYER_SHIELD_MAX] = { + COLTYPE_METAL, // PLAYER_SHIELD_NONE + COLTYPE_METAL, // PLAYER_SHIELD_HEROS_SHIELD + COLTYPE_METAL, // PLAYER_SHIELD_MIRROR_SHIELD }; -void func_801265C8(PlayState* play, Player* player, ColliderQuad* collider, Vec3f arg3[4]) { +void Player_UpdateShieldCollider(PlayState* play, Player* player, ColliderQuad* collider, Vec3f quadSrc[4]) { if (player->stateFlags1 & PLAYER_STATE1_400000) { - Vec3f sp4C; - Vec3f sp40; - Vec3f sp34; - Vec3f sp28; + Vec3f quadDest[4]; - player->shieldQuad.base.colType = D_801C096C[player->currentShield]; - Matrix_MultVec3f(&arg3[0], &sp28); - Matrix_MultVec3f(&arg3[1], &sp34); - Matrix_MultVec3f(&arg3[2], &sp40); - Matrix_MultVec3f(&arg3[3], &sp4C); - Collider_SetQuadVertices(collider, &sp28, &sp34, &sp40, &sp4C); + player->shieldQuad.base.colType = sPlayerShieldCollisionTypes[player->currentShield]; + Matrix_MultVec3f(&quadSrc[0], &quadDest[0]); + Matrix_MultVec3f(&quadSrc[1], &quadDest[1]); + Matrix_MultVec3f(&quadSrc[2], &quadDest[2]); + Matrix_MultVec3f(&quadSrc[3], &quadDest[3]); + Collider_SetQuadVertices(collider, &quadDest[0], &quadDest[1], &quadDest[2], &quadDest[3]); CollisionCheck_SetAC(play, &play->colChkCtx, &collider->base); CollisionCheck_SetAT(play, &play->colChkCtx, &collider->base); } @@ -1949,47 +2505,73 @@ Gfx* D_801C0B14[] = { }; u8 D_801C0B1C[] = { - 0x0C, - 0x0F, + PLAYER_BODYPART_LEFT_HAND, + PLAYER_BODYPART_RIGHT_HAND, }; Gfx* D_801C0B20[] = { - object_mask_truth_DL_0001A0, - object_mask_kerfay_DL_000D40, - object_mask_yofukasi_DL_000490, - object_mask_rabit_DL_000610, - object_mask_ki_tan_DL_0004A0, - object_mask_json_DL_0004C0, - object_mask_romerny_DL_0007A0, - object_mask_zacho_DL_000700, - object_mask_posthat_DL_000290, - object_mask_meoto_DL_0005A0, - object_mask_bigelf_DL_0016F0, - object_mask_gibudo_DL_000250, - gDonGeroMaskDL, - object_mask_dancer_DL_000EF0, - object_mask_skj_DL_0009F0, - object_mask_stone_DL_000820, - object_mask_bree_DL_0003C0, - object_mask_bakuretu_DL_0005C0, - object_mask_bu_san_DL_000710, - object_mask_kyojin_DL_000380, - gameplay_keep_DL_00B260, - gameplay_keep_DL_005A10, - gameplay_keep_DL_005360, - gDekuMaskDL, + object_mask_truth_DL_0001A0, // PLAYER_MASK_TRUTH + object_mask_kerfay_DL_000D40, // PLAYER_MASK_KAFEIS_MASK + object_mask_yofukasi_DL_000490, // PLAYER_MASK_ALL_NIGHT + object_mask_rabit_DL_000610, // PLAYER_MASK_BUNNY + object_mask_ki_tan_DL_0004A0, // PLAYER_MASK_KEATON + object_mask_json_DL_0004C0, // PLAYER_MASK_GARO + object_mask_romerny_DL_0007A0, // PLAYER_MASK_ROMANI + object_mask_zacho_DL_000700, // PLAYER_MASK_CIRCUS_LEADER + object_mask_posthat_DL_000290, // PLAYER_MASK_POSTMAN + object_mask_meoto_DL_0005A0, // PLAYER_MASK_COUPLE + object_mask_bigelf_DL_0016F0, // PLAYER_MASK_GREAT_FAIRY + object_mask_gibudo_DL_000250, // PLAYER_MASK_GIBDO + gDonGeroMaskDL, // PLAYER_MASK_DON_GERO + object_mask_dancer_DL_000EF0, // PLAYER_MASK_KAMARO + object_mask_skj_DL_0009F0, // PLAYER_MASK_CAPTAIN + object_mask_stone_DL_000820, // PLAYER_MASK_STONE + object_mask_bree_DL_0003C0, // PLAYER_MASK_BREMEN + object_mask_bakuretu_DL_0005C0, // PLAYER_MASK_BLAST + object_mask_bu_san_DL_000710, // PLAYER_MASK_SCENTS + object_mask_kyojin_DL_000380, // PLAYER_MASK_GIANT + gameplay_keep_DL_00B260, // PLAYER_MASK_FIERCE_DEITY + gameplay_keep_DL_005A10, // PLAYER_MASK_GORON + gameplay_keep_DL_005360, // PLAYER_MASK_ZORA + gDekuMaskDL, // PLAYER_MASK_DEKU object_mask_boy_DL_000900, object_mask_goron_DL_0014A0, object_mask_zora_DL_000DB0, object_mask_nuts_DL_001D90, }; -Vec3f D_801C0B90[] = { +Vec3f D_801C0B90[D_801F59B0_LEN] = { { 950.0f, -800.0f, 300.0f }, { 950.0f, -800.0f, -300.0f }, }; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_8012669C.s") +void func_8012669C(PlayState* play, Player* player, Vec3f* arg2, Vec3f* arg3) { + Vec3f sp3C; + Vec3f sp30; + + Matrix_MultVec3f(arg2, &sp3C); + Matrix_MultVec3f(arg3, &sp30); + + if (player->meleeWeaponState != 0) { + if (func_80126440(play, NULL, &player->meleeWeaponInfo[0], &sp3C, &sp30) && + (player->transformation != PLAYER_FORM_GORON) && (!(player->stateFlags1 & PLAYER_STATE1_400000))) { + EffectBlure_AddVertex(Effect_GetByIndex(player->meleeWeaponEffectIndex[0]), &player->meleeWeaponInfo[0].tip, + &player->meleeWeaponInfo[0].base); + } + if ((player->meleeWeaponState > 0) && ((player->meleeWeaponAnimation < PLAYER_MWA_SPIN_ATTACK_1H) || + (player->stateFlags2 & PLAYER_STATE2_20000))) { + Matrix_MultVec3f(&arg2[1], &sp3C); + Matrix_MultVec3f(&arg3[1], &sp30); + func_80126440(play, &player->meleeWeaponQuads[0], &player->meleeWeaponInfo[1], &sp3C, &sp30); + Matrix_MultVec3f(&arg2[2], &sp3C); + Matrix_MultVec3f(&arg3[2], &sp30); + func_80126440(play, &player->meleeWeaponQuads[1], &player->meleeWeaponInfo[2], &sp3C, &sp30); + } + } else { + Math_Vec3f_Copy(&player->meleeWeaponInfo[0].tip, &sp3C); + Math_Vec3f_Copy(&player->meleeWeaponInfo[0].base, &sp30); + } +} void Player_DrawGetItemImpl(PlayState* play, Player* player, Vec3f* refPos, s32 drawIdPlusOne) { f32 sp34; @@ -2038,21 +2620,203 @@ void Player_DrawGetItem(PlayState* play, Player* player) { refPos.y = player->actor.world.pos.y + 28.0f; } } else { - Math_Vec3f_Copy(&refPos, &D_801F59E8); + Math_Vec3f_Copy(&refPos, &sPlayerGetItemRefPos); } - drawIdPlusOne = ABS_ALT(player->getItemDrawId); + drawIdPlusOne = ABS_ALT(player->getItemDrawIdPlusOne); Player_DrawGetItemImpl(play, player, &refPos, drawIdPlusOne); } } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80126AB4.s") +void func_80126AB4(Player* player, Vec3f** arg1) { + if ((player->transformation == PLAYER_FORM_GORON) || (player->actor.id == ACTOR_EN_TEST3)) { + Math_Vec3f_Copy(&player->unk_AF0[1], &player->meleeWeaponInfo[0].base); + *arg1 = D_801C09B8; + return; + } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80126B8C.s") + D_801C0994[1].x = D_801C0994[0].x; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80126BD0.s") + if (player->unk_ADD >= 3) { + player->unk_ADD++; + D_801C0994[1].x *= 1.0f + ((9 - player->unk_ADD) * 0.1f); + } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_801271B0.s") + D_801C0994[1].x += 1200.0f; + D_801C0994[2].x = D_801C0994[1].x; + *arg1 = D_801C0994; +} + +void func_80126B8C(PlayState* play, Player* player) { + Vec3f* sp1C; + + func_80126AB4(player, &sp1C); + func_8012669C(play, player, sp1C, D_801C0970); +} + +// Zora boomerangs (?) +void func_80126BD0(PlayState* play, Player* player, s32 arg2) { + if ((player->transformation != PLAYER_FORM_ZORA) || (player->rightHandType == PLAYER_MODELTYPE_RH_HOOKSHOT)) { + return; + } + + if ((arg2 != 0) && (player->stateFlags1 & PLAYER_STATE1_400000)) { + OPEN_DISPS(play->state.gfxCtx); + + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_OPA_DISP++, object_link_zora_DL_0110A8); + + CLOSE_DISPS(play->state.gfxCtx); + } else { + Actor* boomerangActor = player->boomerangActor; + Vec3f sp58; + Vec3f sp4C; + + if (player->stateFlags1 & PLAYER_STATE1_2000000) { + if (player->boomerangActor == NULL) { + return; + } + if ((player->boomerangActor->params == arg2) || + (((boomerangActor->child != NULL)) && (boomerangActor->child->params == arg2))) { + return; + } + } + + OPEN_DISPS(play->state.gfxCtx); + + if ((player->skelAnime.animation != &gPlayerAnim_pz_gakkiplay) && + (player->skelAnime.animation != &gPlayerAnim_pz_fishswim)) { + if (player->skelAnime.animation == &gPlayerAnim_pz_gakkistart) { + func_80124618(D_801C0580, player->skelAnime.curFrame, player->unk_AF0); + } else if (player->skelAnime.animation == &gPlayerAnim_pz_waterroll) { + func_80124618(D_801C05A8, player->skelAnime.curFrame, player->unk_AF0); + } else if (player->skelAnime.animation == &gPlayerAnim_pz_swimtowait) { + func_80124618(D_801C05D8, player->skelAnime.curFrame, player->unk_AF0); + } else if (player->skelAnime.animation == &gPlayerAnim_pz_bladeon) { + func_80124618(D_801C07F0, player->skelAnime.curFrame, player->unk_AF0); + } else if (player->skelAnime.animation == &gPlayerAnim_pz_jumpAT) { + func_80124618(D_801C0820, player->skelAnime.curFrame, player->unk_AF0); + } else if (player->skelAnime.animation == &gPlayerAnim_pz_jumpATend) { + func_80124618(D_801C0838, player->skelAnime.curFrame, player->unk_AF0); + } else if (player->heldItemAction == PLAYER_IA_ZORA_FINS) { + player->unk_AF0[0].x = 1.0f; + player->unk_AF0[0].y = 1.0f; + player->unk_AF0[0].z = 1.0f; + } else { + player->unk_AF0[0].x = 0.4f; + player->unk_AF0[0].y = 0.6f; + player->unk_AF0[0].z = 0.7f; + } + Matrix_Push(); + + Matrix_Scale(player->unk_AF0[0].x, player->unk_AF0[0].y, player->unk_AF0[0].z, MTXMODE_APPLY); + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + gSPDisplayList(POLY_OPA_DISP++, D_801C0AB4[arg2]); + + if (player->meleeWeaponState != 0) { + if ((((player->meleeWeaponAnimation == PLAYER_MWA_ZORA_PUNCH_LEFT)) && (arg2 == 0)) || + ((player->meleeWeaponAnimation == PLAYER_MWA_ZORA_PUNCH_COMBO) && (arg2 != 0))) { + func_8012669C(play, player, D_801C0A00, D_801C09DC); + } + } + + Matrix_Pop(); + } + + if (player->skelAnime.animation == &gPlayerAnim_pz_waterroll) { + func_80124618(D_801C05C8, player->skelAnime.curFrame, player->unk_AF0); + D_801C05F0[0].unk_2.x = 50; + D_801C05F0[0].unk_2.y = 50; + D_801C05F0[0].unk_2.z = 50; + D_801C05F0[1].unk_2 = D_801C05F0[0].unk_2; + } else if (player->skelAnime.animation == &gPlayerAnim_pz_swimtowait) { + func_80124618(D_801C05F0, player->skelAnime.curFrame, player->unk_AF0); + } else if (player->skelAnime.animation == &gPlayerAnim_pz_fishswim) { + player->unk_AF0[0].x = (ABS_ALT(player->unk_B8A) * 0.00003f) + 0.5f; + player->unk_AF0[0].y = player->unk_AF0[0].x; + player->unk_AF0[0].z = player->unk_AF0[0].x; + + D_801C05F0[0].unk_2.x = (player->unk_AF0[0].x * 100.0f); + + D_801C05F0[0].unk_2.y = D_801C05F0[0].unk_2.x; + D_801C05F0[0].unk_2.z = D_801C05F0[0].unk_2.x; + + D_801C05F0[1].unk_2 = D_801C05F0[0].unk_2; + } else { + //! @bug Skips CLOSE_DISPS + return; + } + + Matrix_Push(); + Matrix_Scale(player->unk_AF0[0].x, player->unk_AF0[0].y, player->unk_AF0[0].z, MTXMODE_APPLY); + + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_OPA_DISP++, D_801C0ABC[arg2]); + + Matrix_MultVec3f(&D_801C0AC4[arg2], &sp58); + Matrix_MultVec3f(&D_801C0ADC[arg2], &sp4C); + + if (func_80126440(play, NULL, &player->meleeWeaponInfo[arg2], &sp58, &sp4C) && + (player->stateFlags1 & PLAYER_STATE1_8000000)) { + EffectBlure_AddVertex(Effect_GetByIndex(player->meleeWeaponEffectIndex[arg2]), + &player->meleeWeaponInfo[arg2].tip, &player->meleeWeaponInfo[arg2].base); + } + Matrix_Pop(); + + CLOSE_DISPS(play->state.gfxCtx); + } +} + +s32 func_801271B0(PlayState* play, Player* player, s32 arg2) { + if (player->transformation == PLAYER_FORM_DEKU) { + if (((player->skelAnime.animation == &gPlayerAnim_pn_kakku)) || + (player->skelAnime.animation == &gPlayerAnim_pn_kakkufinish) || + (player->skelAnime.animation == &gPlayerAnim_pn_rakkafinish) || + (player->skelAnime.animation == &gPlayerAnim_pn_batabata)) { + struct_80124618** sp3C = D_801C0AF4; + + OPEN_DISPS(play->state.gfxCtx); + + if (player->skelAnime.animation == &gPlayerAnim_pn_kakkufinish) { + sp3C = D_801C0AFC; + } else if (player->skelAnime.animation == &gPlayerAnim_pn_batabata) { + sp3C = D_801C0B0C; + } else if (player->skelAnime.animation == &gPlayerAnim_pn_rakkafinish) { + sp3C = D_801C0B04; + } + + Matrix_Push(); + Matrix_Translate(0.0f, 150.0f, 0.0f, MTXMODE_APPLY); + func_80124618(sp3C[0], player->skelAnime.curFrame, &player->unk_AF0[1]); + Matrix_Scale(player->unk_AF0[1].x, player->unk_AF0[1].y, player->unk_AF0[1].z, MTXMODE_APPLY); + + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + gSPDisplayList(POLY_OPA_DISP++, D_801C0B14[arg2]); + + Matrix_Translate(2150.0f, 0.0f, 0.0f, MTXMODE_APPLY); + Matrix_RotateXS(player->unk_B8A, MTXMODE_APPLY); + func_80124618(sp3C[1], player->skelAnime.curFrame, &player->unk_AF0[1]); + Matrix_Scale(player->unk_AF0[1].x, player->unk_AF0[1].y, player->unk_AF0[1].z, MTXMODE_APPLY); + + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + // Close flower / Open flower + gSPDisplayList(POLY_OPA_DISP++, + player->actor.velocity.y < -6.0f ? gLinkDekuClosedFlowerDL : gLinkDekuOpenFlowerDL); + + Matrix_MultZero(&player->bodyPartsPos[D_801C0B1C[arg2]]); + Matrix_Pop(); + + CLOSE_DISPS(play->state.gfxCtx); + + return true; + } + } + + return false; +} // Player_SetMaskSegment? s32 func_80127438(PlayState* play, Player* player, s32 currentMask) { @@ -2086,7 +2850,7 @@ void Player_DrawCouplesMask(PlayState* play, Player* player) { AnimatedMat_DrawOpa(play, Lib_SegmentedToVirtual(&object_mask_meoto_Matanimheader_001CD8)); } -void Player_DrawCircusLeadersMask(PlayState* play, Actor* actor) { +void Player_DrawCircusLeadersMask(PlayState* play, Player* player) { static Vec3f bubbleVelocity = { 0.0f, 0.0f, 0.0f }; static Vec3f bubbleAccel = { 0.0f, 0.0f, 0.0f }; Gfx* gfx; @@ -2096,7 +2860,7 @@ void Player_DrawCircusLeadersMask(PlayState* play, Actor* actor) { gfx = POLY_XLU_DISP; - for (i = 0; i < ARRAY_COUNT(D_801C0B90); i++) { + for (i = 0; i < D_801F59B0_LEN; i++) { f32 scaleY = (D_801F59C8[i] / 400.0f) * 0.1f; Matrix_MultVec3f(&D_801C0B90[i], &D_801F59B0[i]); @@ -2106,7 +2870,7 @@ void Player_DrawCircusLeadersMask(PlayState* play, Actor* actor) { D_801F59B0[i].y += -10.0f * scaleY; - if (D_801F59C8[i] < 0x190) { + if (D_801F59C8[i] < 400) { f32 scaleXZ = CLAMP_MAX(scaleY, 0.05f); Matrix_Push(); @@ -2124,12 +2888,11 @@ void Player_DrawCircusLeadersMask(PlayState* play, Actor* actor) { gfx = &gfx[6]; } else { - Player* player = (Player*)actor; - f32 temp_f0 = sqrtf(SQ(player->actor.velocity.x) + SQ(player->actor.velocity.z)); - s16 phi_s0 = temp_f0 * 2000.0f; + f32 speedXZ = sqrtf(SQ(player->actor.velocity.x) + SQ(player->actor.velocity.z)); + s16 phi_s0 = speedXZ * 2000.0f; f32 temp_f20; - bubbleVelocity.y = temp_f0 * 0.4f; + bubbleVelocity.y = speedXZ * 0.4f; bubbleAccel.y = -0.3f; if (phi_s0 > 0x3E80) { @@ -2137,17 +2900,14 @@ void Player_DrawCircusLeadersMask(PlayState* play, Actor* actor) { } phi_s0 = player->actor.focus.rot.y + ((i != 0) ? phi_s0 : -phi_s0); - temp_f20 = temp_f0 * 0.2f; - - if (temp_f20 > 4.0f) { - temp_f20 = 4.0f; - } + temp_f20 = speedXZ * 0.2f; + temp_f20 = CLAMP_MAX(temp_f20, 4.0f); bubbleVelocity.x = -Math_SinS(phi_s0) * temp_f20; bubbleVelocity.z = -Math_CosS(phi_s0) * temp_f20; EffectSsDtBubble_SpawnColorProfile(play, &D_801F59B0[i], &bubbleVelocity, &bubbleAccel, 20, 20, 3, 0); - D_801F59C8[i] -= 0x190; + D_801F59C8[i] -= 400; } } @@ -2214,7 +2974,7 @@ Vec3f D_801C0C30[] = { { 301.0f, -729.0f, 699.0f }, }; -typedef struct { +typedef struct struct_80128388_arg1 { /* 0x00 */ f32 unk_00; /* 0x04 */ s16 unk_04; /* 0x06 */ s16 unk_06; @@ -2230,91 +2990,237 @@ struct_80128388_arg1 D_801C0C54[] = { { 30.0f, 0x0000, 0x0000, { 0.0f, 0.0f, 0.0f }, 20.0f, 0x1F40, 0x2EE0 }, }; -Color_RGB8 D_801C0CA8[] = { - { 255, 255, 255 }, { 80, 80, 255 }, { 136, 192, 255 }, { 136, 192, 255 }, { 184, 232, 232 }, { 248, 200, 0 }, - { 255, 180, 0 }, { 0, 128, 0 }, { 252, 238, 0 }, { 131, 0, 174 }, { 64, 64, 32 }, { 0, 0, 255 }, - { 255, 0, 255 }, { 255, 0, 255 }, { 255, 0, 0 }, { 0, 0, 255 }, { 0, 200, 0 }, { 255, 255, 255 }, - { 255, 255, 255 }, { 255, 255, 255 }, { 80, 80, 255 }, +Color_RGB8 sPlayerBottleColors[PLAYER_BOTTLE_MAX] = { + { 255, 255, 255 }, // PLAYER_BOTTLE_EMPTY + { 80, 80, 255 }, // PLAYER_BOTTLE_FISH + { 136, 192, 255 }, // PLAYER_BOTTLE_SPRING_WATER + { 136, 192, 255 }, // PLAYER_BOTTLE_HOT_SPRING_WATER + { 184, 232, 232 }, // PLAYER_BOTTLE_ZORA_EGG + { 248, 200, 0 }, // PLAYER_BOTTLE_DEKU_PRINCESS + { 255, 180, 0 }, // PLAYER_BOTTLE_GOLD_DUST + { 0, 128, 0 }, // PLAYER_BOTTLE_1C + { 252, 238, 0 }, // PLAYER_BOTTLE_SEAHORSE + { 131, 0, 174 }, // PLAYER_BOTTLE_MUSHROOM + { 64, 64, 32 }, // PLAYER_BOTTLE_HYLIAN_LOACH + { 0, 0, 255 }, // PLAYER_BOTTLE_BUG + { 255, 0, 255 }, // PLAYER_BOTTLE_POE + { 255, 0, 255 }, // PLAYER_BOTTLE_BIG_POE + { 255, 0, 0 }, // PLAYER_BOTTLE_POTION_RED + { 0, 0, 255 }, // PLAYER_BOTTLE_POTION_BLUE + { 0, 200, 0 }, // PLAYER_BOTTLE_POTION_GREEN + { 255, 255, 255 }, // PLAYER_BOTTLE_MILK + { 255, 255, 255 }, // PLAYER_BOTTLE_MILK_HALF + { 255, 255, 255 }, // PLAYER_BOTTLE_CHATEAU + { 80, 80, 255 }, // PLAYER_BOTTLE_FAIRY }; Vec3f D_801C0CE8[PLAYER_FORM_MAX] = { - { 0.0f, 0.0f, 0.0f }, { 300.0f, 300.0f, -230.0f }, { 0.0f, 90.0f, -50.0f }, - { 0.0f, 20.0f, -60.0f }, { 0.0f, 0.0f, 0.0f }, -}; -Vec3f D_801C0D24[PLAYER_FORM_MAX] = { - { 200.0f, 300.0f, 0.0f }, { 200.0f, 200.0f, 0.0f }, { 200.0f, 300.0f, 0.0f }, - { 200.0f, 150.0f, 0.0f }, { 200.0f, 200.0f, 0.0f }, -}; -Vec3f D_801C0D60 = { 398.0f, 1419.0f, 244.0f }; -Vec3f D_801C0D6C = { 420.0f, 1210.0f, 380.0f }; - -f32 D_801C0D78[] = { - 0.0f, // Player is not holding a melee weapon - 3000.0f, // PLAYER_IA_SWORD_KOKIRI - 3000.0f, // PLAYER_IA_SWORD_RAZOR - 4000.0f, // PLAYER_IA_SWORD_GILDED - 5500.0f, // PLAYER_IA_SWORD_GREAT_FAIRY - -1.0f, // PLAYER_IA_STICK - 2500.0f, // PLAYER_IA_ZORA_FINS + { 0.0f, 0.0f, 0.0f }, // PLAYER_FORM_FIERCE_DEITY + { 300.0f, 300.0f, -230.0f }, // PLAYER_FORM_GORON + { 0.0f, 90.0f, -50.0f }, // PLAYER_FORM_ZORA + { 0.0f, 20.0f, -60.0f }, // PLAYER_FORM_DEKU + { 0.0f, 0.0f, 0.0f }, // PLAYER_FORM_HUMAN }; -Gfx* D_801C0D94 = object_link_child_DL_017818; +void Player_DrawBunnyHood(PlayState* play) { + Mtx* mtx = GRAPH_ALLOC(play->state.gfxCtx, 2 * sizeof(Mtx)); + Vec3s earRot; -f32 D_801C0D98 = -35.0f; + OPEN_DISPS(play->state.gfxCtx); -f32 D_801C0D9C = -395.0f; -f32 D_801C0DA0 = 0.0f; + gSPSegment(POLY_OPA_DISP++, 0x0B, mtx); -f32 D_801C0DA4 = 0.0f; + Matrix_Push(); -Vec3f D_801C0DA8[4] = { - { -4500.0f, -3000.0f, -600.0f }, - { 1500.0f, -3000.0f, -600.0f }, - { -4500.0f, 3000.0f, -600.0f }, - { 1500.0f, 3000.0f, -600.0f }, -}; + earRot.x = sBunnyEarKinematics.rot.y + 0x3E2; + earRot.y = sBunnyEarKinematics.rot.z + 0xDBE; + earRot.z = sBunnyEarKinematics.rot.x - 0x348A; + Matrix_SetTranslateRotateYXZ(97.0f, -1203.0f, -240.0f, &earRot); -Vec3f D_801C0DD8 = { 50.0f, 800.0f, 0.0f }; -Vec3f D_801C0DE4 = { 50.0f, 850.0f, 0.0f }; -Gfx* D_801C0DF0[] = { - object_link_goron_DL_010590, object_link_goron_DL_010368, object_link_goron_DL_010140, - object_link_goron_DL_00FF18, object_link_goron_DL_00FCF0, -}; + Matrix_ToMtx(mtx++); -Vec2f D_801C0E04[PLAYER_FORM_MAX] = { - { 140.0f, -130.0f }, { 0.0f, -200.0f }, { -160.0f, 0.0f }, { 220.0f, -200.0f }, { 0.0f, 0.0f }, -}; + earRot.x = sBunnyEarKinematics.rot.y - 0x3E2; + earRot.y = -sBunnyEarKinematics.rot.z - 0xDBE; + earRot.z = sBunnyEarKinematics.rot.x - 0x348A; + Matrix_SetTranslateRotateYXZ(97.0f, -1203.0f, 240.0f, &earRot); -Gfx* D_801C0E2C[] = { - object_link_nuts_DL_007A28, object_link_nuts_DL_0077D0, object_link_nuts_DL_007548, - object_link_nuts_DL_007900, object_link_nuts_DL_0076A0, -}; -Vec3f D_801C0E40[PLAYER_FORM_MAX] = { - { 0.0f, 0.0f, 0.0f }, { -578.3f, -1100.9f, 0.0f }, { -189.5f, -594.87f, 0.0f }, - { -570.0f, -812.0f, 0.0f }, { -230.0f, -520.0f, 0.0f }, -}; -Vec3f D_801C0E7C = { 1100.0f, -700.0f, 0.0f }; + Matrix_ToMtx(mtx); -// unused -Vec3f D_801C0E88 = { 1600.0f, -1700.0f, -70.0f }; + Matrix_Pop(); -Vec3f D_801C0E94 = { 1800.0f, -300.0f, 0.0f }; -Vec3f D_801C0EA0 = { 1300.0f, -400.0f, 0.0f }; -Vec3f D_801C0EAC = { 630.0f, 100.0f, -30.0f }; -Vec3s D_801C0EB8 = { 0, 0, 0x7FFF }; + CLOSE_DISPS(play->state.gfxCtx); +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/Player_DrawBunnyHood.s") +void func_80127B64(struct_801F58B0 arg0[], s32 count, Vec3f* arg2) { + s32 i; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80127B64.s") + for (i = 0; i < count; i++, arg0++) { + Math_Vec3f_Copy(&arg0->unk_00, arg2); + Math_Vec3f_Copy(&arg0->unk_0C, &gZeroVec3f); + arg0->unk_18 = 0; + arg0->unk_1A = 0; + } +} -#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80127BE8.s") +// Draws the Great Fairy's Mask particles when a stray fairy is in the room +void Player_DrawStrayFairyParticles(PlayState* play, Vec3f* arg1) { + Vec3f sp2C; + f32 sp28; + + D_801C0BE0.y = Rand_ZeroFloat(0.07f) + -0.1f; + D_801C0BEC.y = Rand_ZeroFloat(0.1f) + 0.04f; + if (Rand_ZeroOne() < 0.5f) { + sp28 = -1.0f; + } else { + sp28 = 1.0f; + } + + D_801C0BE0.x = (Rand_ZeroFloat(0.2f) + 0.1f) * sp28; + D_801C0BEC.x = 0.1f * sp28; + if (Rand_ZeroOne() < 0.5f) { + sp28 = -1.0f; + } else { + sp28 = 1.0f; + } + + D_801C0BE0.z = (Rand_ZeroFloat(0.2f) + 0.1f) * sp28; + D_801C0BEC.z = 0.1f * sp28; + sp2C.x = arg1->x; + sp2C.y = Rand_ZeroFloat(15.0f) + arg1->y; + sp2C.z = arg1->z; + EffectSsKirakira_SpawnDispersed(play, &sp2C, &D_801C0BE0, &D_801C0BEC, &D_801C0BF8, &D_801C0BFC, -50, 11); +} void func_80127DA4(PlayState* play, struct_801F58B0 arg1[], struct_80128388_arg1 arg2[], s32 arg3, Vec3f* arg4, - Vec3f* arg5, u32* arg6); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80127DA4.s") + Vec3f* arg5, u32* arg6) { + struct_801F58B0* phi_s1 = &arg1[1]; + Vec3f spB0; + Vec3f spA4; + f32 f22; + f32 f28; + f32 f24; + f32 f20; + f32 f0; + f32 sp8C = -1.0f; + s32 i; + s16 s0; + s16 s2; -void func_80128388(struct_801F58B0 arg0[], struct_80128388_arg1 arg1[], s32 arg2, Mtx** arg3); -#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80128388.s") + Math_Vec3f_Copy(&arg1->unk_00, arg4); + Math_Vec3f_Diff(arg5, arg4, &spB0); + arg1->unk_18 = Math_Atan2S_XY(spB0.z, spB0.x); + arg1->unk_1A = Math_Atan2S_XY(sqrtf(SQXZ(spB0)), spB0.y); + i = 1; + arg2++; + + while (i < arg3) { + if (play->actorCtx.flags & ACTORCTX_FLAG_3) { + if (*arg6 & 0x20) { + sp8C = -0.2f; + } else { + sp8C = 0.2f; + } + + *arg6 += 0x16; + if (!(*arg6 & 1)) { + Player_DrawStrayFairyParticles(play, &phi_s1->unk_00); + } + } + Math_Vec3f_Sum(&phi_s1->unk_00, &phi_s1->unk_0C, &phi_s1->unk_00); + + f0 = Math_Vec3f_DistXYZAndStoreDiff(&arg1->unk_00, &phi_s1->unk_00, &spB0); + f28 = f0 - arg2->unk_00; + if (f0 == 0.0f) { + spB0.x = 0.0f; + spB0.y = arg2->unk_00; + spB0.z = 0.0f; + } + f20 = sqrtf(SQXZ(spB0)); + + if (f20 > 4.0f) { + phi_s1->unk_18 = Math_Atan2S_XY(spB0.z, spB0.x); + s2 = phi_s1->unk_18 - arg1->unk_18; + + if (ABS_ALT(s2) > 0x4000) { + phi_s1->unk_18 = (s16)(phi_s1->unk_18 + 0x8000); + f20 = -f20; + } + } + + phi_s1->unk_1A = Math_Atan2S_XY(f20, spB0.y); + + s2 = phi_s1->unk_18 - arg1->unk_18; + s2 = CLAMP(s2, -arg2->unk_18, arg2->unk_18); + phi_s1->unk_18 = arg1->unk_18 + s2; + + s0 = phi_s1->unk_1A - arg1->unk_1A; + s0 = CLAMP(s0, -arg2->unk_1A, arg2->unk_1A); + phi_s1->unk_1A = arg1->unk_1A + s0; + + f20 = Math_CosS(phi_s1->unk_1A) * arg2->unk_00; + spA4.x = Math_SinS(phi_s1->unk_18) * f20; + spA4.z = Math_CosS(phi_s1->unk_18) * f20; + spA4.y = Math_SinS(phi_s1->unk_1A) * arg2->unk_00; + Math_Vec3f_Sum(&arg1->unk_00, &spA4, &phi_s1->unk_00); + phi_s1->unk_0C.x *= 0.9f; + phi_s1->unk_0C.z *= 0.9f; + + f22 = Math_CosS(s0) * f28; + f24 = Math_SinS(s0) * f28; + phi_s1->unk_0C.y += sp8C; + + if (play->actorCtx.flags & ACTORCTX_FLAG_3) { + phi_s1->unk_0C.y = CLAMP(phi_s1->unk_0C.y, -0.8f, 0.8f); + } else { + phi_s1->unk_0C.y = phi_s1->unk_0C.y; + f20 = Math_SinS(arg1->unk_1A); + phi_s1->unk_0C.y += (((f22 * Math_CosS(arg1->unk_1A)) + (f24 * f20)) * 0.2f); + phi_s1->unk_0C.y = CLAMP(phi_s1->unk_0C.y, -2.0f, 4.0f); + } + + f20 = (f24 * Math_CosS(arg1->unk_1A)) - (Math_SinS(arg1->unk_1A) * f22); + f22 = Math_CosS(s2) * f20; + f24 = Math_SinS(s2) * f20; + + f20 = Math_SinS(arg1->unk_18); + + phi_s1->unk_0C.x += (((f24 * Math_CosS(arg1->unk_18)) - (f22 * f20)) * 0.1f); + phi_s1->unk_0C.x = CLAMP(phi_s1->unk_0C.x, -4.0f, 4.0f); + + f20 = Math_SinS(arg1->unk_18); + + phi_s1->unk_0C.z += (((f22 * Math_CosS(arg1->unk_18)) + (f24 * f20)) * -0.1f); + phi_s1->unk_0C.z = CLAMP(phi_s1->unk_0C.z, -4.0f, 4.0f); + + arg1++; + phi_s1++; + i++; + arg2++; + } +} + +void func_80128388(struct_801F58B0 arg0[], struct_80128388_arg1 arg1[], s32 arg2, Mtx** arg3) { + struct_801F58B0* phi_s1 = &arg0[1]; + Vec3f sp58; + Vec3s sp50; + s32 i; + + sp58.y = 0.0f; + sp58.z = 0.0f; + sp50.x = 0; + + for (i = 1; i < arg2; i++) { + sp58.x = arg1->unk_00 * 100.0f; + sp50.z = arg1->unk_06 + (s16)(phi_s1->unk_1A - arg0->unk_1A); + sp50.y = arg1->unk_04 + (s16)(phi_s1->unk_18 - arg0->unk_18); + Matrix_TranslateRotateZYX(&sp58, &sp50); + Matrix_ToMtx(*arg3); + (*arg3)++; + arg0++; + phi_s1++; + arg1++; + } +} void Player_DrawGreatFairysMask(PlayState* play, Player* player) { s32 pad; @@ -2331,7 +3237,8 @@ void Player_DrawGreatFairysMask(PlayState* play, Player* player) { gSPSegment(POLY_OPA_DISP++, 0x0B, mtx); Matrix_MultVec3f(&D_801C0C00, &D_801C0C54[1].unk_08); - Math_Vec3f_Lerp(&player->bodyPartsPos[7], &player->bodyPartsPos[0], 0.2f, &D_801C0C54[2].unk_08); + Math_Vec3f_Lerp(&player->bodyPartsPos[PLAYER_BODYPART_HEAD], &player->bodyPartsPos[PLAYER_BODYPART_WAIST], 0.2f, + &D_801C0C54[2].unk_08); for (i = 0; i < ARRAY_COUNT(D_801C0C0C); i++) { Matrix_MultVec3f(iter, &sp84); @@ -2351,8 +3258,598 @@ void Player_DrawGreatFairysMask(PlayState* play, Player* player) { CLOSE_DISPS(play->state.gfxCtx); } -#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80128640.s") +s32 func_80128640(PlayState* play, Player* player, Gfx* dlist) { + s32 temp_v1 = player->skelAnime.animation == &gPlayerAnim_cl_maskoff; + f32 temp_f0; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80128B74.s") + if (temp_v1 || + ((player->currentMask != PLAYER_MASK_NONE) && (player->skelAnime.animation == &gPlayerAnim_cl_setmask) && + (temp_f0 = player->skelAnime.curFrame - 8.0f, (temp_f0 >= 0.0f)) && (temp_f0 < 4.0f)) || + (player->stateFlags2 & PLAYER_STATE2_1000000)) { + s32 mask; -#pragma GLOBAL_ASM("asm/non_matchings/code/z_player_lib/func_80128BD0.s") + if (temp_v1) { + mask = player->prevMask; + } else { + mask = player->currentMask; + } + + if (func_80127438(play, player, mask)) { + OPEN_DISPS(play->state.gfxCtx); + + Matrix_Push(); + Matrix_Translate(-323.67f, 412.15f, -969.96f, MTXMODE_APPLY); + Matrix_RotateZYX(-0x32BE, -0x50DE, -0x7717, MTXMODE_APPLY); + + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + gSPDisplayList(POLY_OPA_DISP++, D_801C0B20[mask - 1]); + + Matrix_Pop(); + + CLOSE_DISPS(play->state.gfxCtx); + } + + } else if (player->itemAction == PLAYER_IA_STICK) { + OPEN_DISPS(play->state.gfxCtx); + + Matrix_Push(); + Matrix_Translate(-428.26f, 267.2f, -33.82f, MTXMODE_APPLY); + Matrix_RotateZYX(-0x8000, 0, 0x4000, MTXMODE_APPLY); + Matrix_Scale(1.0f, player->unk_B08[1], 1.0f, MTXMODE_APPLY); + + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_OPA_DISP++, gDekuStickDL); + + Matrix_Pop(); + + CLOSE_DISPS(play->state.gfxCtx); + } else if (player->leftHandType == PLAYER_MODELTYPE_LH_BOTTLE) { + PlayerBottle bottle = Player_BottleFromIA(player, player->itemAction); + Vec3f* temp_v1_2 = &D_801C0CE8[player->transformation]; + + OPEN_DISPS(play->state.gfxCtx); + + Matrix_Push(); + Matrix_Translate(temp_v1_2->x, temp_v1_2->y, temp_v1_2->z, MTXMODE_APPLY); + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + // Note this does not check for PLAYER_BOTTLE_NONE, which would produce an OoB access on sPlayerBottleColors. + // Under normal circunstances it should not be a problem because of the previous + // `player->leftHandType == PLAYER_MODELTYPE_LH_BOTTLE` check + if (bottle != PLAYER_BOTTLE_EMPTY) { + Color_RGB8* bottleColor = &sPlayerBottleColors[bottle]; + + gDPSetEnvColor(POLY_XLU_DISP++, bottleColor->r, bottleColor->g, bottleColor->b, 0); + gSPDisplayList(POLY_XLU_DISP++, gameplay_keep_DL_000320); + } + + gSPDisplayList(POLY_XLU_DISP++, gameplay_keep_DL_0003E0); + + Matrix_Pop(); + + CLOSE_DISPS(play->state.gfxCtx); + } else if (dlist == object_link_zora_DL_00E2A0) { // zora guitar + s16 sp26 = Math_SinS(player->unk_B86[0]) * (ABS_ALT(player->upperLimbRot.x) * ((f32)(IREG(52) + 20)) / 100.0f); + s16 sp24 = Math_SinS(player->unk_B86[1]) * (ABS_ALT(player->upperLimbRot.y) * ((f32)(IREG(53) + 15)) / 100.0f); + + OPEN_DISPS(play->state.gfxCtx); + + Matrix_Push(); + Matrix_RotateXS(sp26, MTXMODE_APPLY); + Matrix_RotateYS(sp24, MTXMODE_APPLY); + + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_OPA_DISP++, object_link_zora_DL_00E088); // hand + + Matrix_Pop(); + + CLOSE_DISPS(play->state.gfxCtx); + } else { + return false; + } + + return true; +} + +Vec3f sPlayerFootPos[PLAYER_FORM_MAX] = { + { 200.0f, 300.0f, 0.0f }, // PLAYER_FORM_FIERCE_DEITY + { 200.0f, 200.0f, 0.0f }, // PLAYER_FORM_GORON + { 200.0f, 300.0f, 0.0f }, // PLAYER_FORM_ZORA + { 200.0f, 150.0f, 0.0f }, // PLAYER_FORM_DEKU + { 200.0f, 200.0f, 0.0f }, // PLAYER_FORM_HUMAN +}; + +void Player_SetFeetPos(PlayState* play, Player* player, s32 limbIndex) { + Vec3f* footPos = &sPlayerFootPos[player->transformation]; + + Actor_SetFeetPos(&player->actor, limbIndex, PLAYER_LIMB_LEFT_FOOT, footPos, PLAYER_LIMB_RIGHT_FOOT, footPos); +} + +void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList1, Gfx** dList2, Vec3s* rot, Actor* actor) { + Player* player = (Player*)actor; + + if (*dList2 != NULL) { + Matrix_MultZero(sPlayerCurBodyPartPos); + } + + if (limbIndex == PLAYER_LIMB_LEFT_HAND) { + Math_Vec3f_Copy(&player->leftHandWorld.pos, sPlayerCurBodyPartPos); + + if ((*dList1 != NULL) && !func_801271B0(play, player, 0) && !func_80128640(play, player, *dList1) && + (player->skelAnime.animation == &gPlayerAnim_pg_punchA)) { + func_80127488(play, player, D_801C0778[(s32)player->skelAnime.curFrame]); + } + + if (player->actor.scale.y >= 0.0f) { + Actor* heldActor; + MtxF sp230; + + if (!Player_IsHoldingHookshot(player) && ((heldActor = player->heldActor) != NULL)) { + if ((player->stateFlags3 & PLAYER_STATE3_40) && (player->transformation != PLAYER_FORM_DEKU)) { + static Vec3f D_801C0D60 = { 398.0f, 1419.0f, 244.0f }; + static Vec3f D_801C0D6C = { 420.0f, 1210.0f, 380.0f }; + Vec3s* temp_s1; + Vec3f* var_a0 = &D_801C0D60; + + if (player->transformation == PLAYER_FORM_HUMAN) { + var_a0 = &D_801C0D6C; + } + + Matrix_MultVec3f(var_a0, &heldActor->world.pos); + Matrix_RotateZYX(0x69E8, -0x5708, 0x458E, MTXMODE_APPLY); + + Matrix_Get(&sp230); + temp_s1 = &heldActor->world.rot; + Matrix_MtxFToYXZRot(&sp230, temp_s1, false); + heldActor->shape.rot = *temp_s1; + } else if (player->stateFlags1 & PLAYER_STATE1_800) { + heldActor->world.rot.y = heldActor->shape.rot.y = + player->actor.shape.rot.y + player->leftHandWorld.rot.y; + } + } else { + static f32 sMeleeWeaponLengths[PLAYER_MELEEWEAPON_MAX] = { + 0.0f, // PLAYER_MELEEWEAPON_NONE + 3000.0f, // PLAYER_MELEEWEAPON_SWORD_KOKIRI + 3000.0f, // PLAYER_MELEEWEAPON_SWORD_RAZOR + 4000.0f, // PLAYER_MELEEWEAPON_SWORD_GILDED + 5500.0f, // PLAYER_MELEEWEAPON_SWORD_GREAT_FAIRY + -1.0f, // PLAYER_MELEEWEAPON_STICK + 2500.0f, // PLAYER_MELEEWEAPON_ZORA_FINS + }; + + if ((player->transformation == PLAYER_FORM_FIERCE_DEITY) || + ((player->transformation != PLAYER_FORM_ZORA) && + ((player->itemAction == PLAYER_IA_STICK) || + ((player->meleeWeaponState != 0) && + (player->meleeWeaponAnimation != PLAYER_MWA_GORON_PUNCH_RIGHT) && + (player->meleeWeaponAnimation != PLAYER_MWA_GORON_PUNCH_BUTT))))) { + if (player->itemAction == PLAYER_IA_STICK) { + D_801C0994->x = player->unk_B08[1] * 5000.0f; + } else { + D_801C0994->x = sMeleeWeaponLengths[Player_GetMeleeWeaponHeld(player)]; + } + func_80126B8C(play, player); + } + + Matrix_Get(&player->mf_CC4); + Matrix_MtxFToYXZRot(&player->mf_CC4, &player->leftHandWorld.rot, false); + } + } + } else if (limbIndex == PLAYER_LIMB_RIGHT_HAND) { + Actor* heldActor = player->heldActor; + s32 pad; + + if (*dList1 != NULL) { + if (player->rightHandType == PLAYER_MODELTYPE_RH_BOW) { + static Gfx* D_801C0D94 = object_link_child_DL_017818; + static Vec3f D_801C0D98 = { -35.0f, -395.0f, 0.0f }; + // Unused + static s32 D_801C0DA4 = 0; + + OPEN_DISPS(play->state.gfxCtx); + + Matrix_Push(); + Matrix_Translate(D_801C0D98.x, D_801C0D98.y, D_801C0D98.z, MTXMODE_APPLY); + if ((player->stateFlags3 & PLAYER_STATE3_40) && (player->unk_B28 >= 0) && (player->unk_ACC < 0xB)) { + Vec3f sp20C; + f32 temp_fv0; + s32 pad2; + + Matrix_MultZero(&sp20C); + temp_fv0 = Math_Vec3f_DistXYZ(sPlayerCurBodyPartPos, &sp20C); + player->unk_B08[0] = temp_fv0 - 3.0f; + if (temp_fv0 < 3.0f) { + player->unk_B08[0] = 0.0f; + } else { + player->unk_B08[0] *= 1.6f; + if (player->unk_B08[0] > 1.0f) { + player->unk_B08[0] = 1.0f; + } + } + player->unk_B08[1] = -0.5f; + } + Matrix_Scale(1.0f, player->unk_B08[0], 1.0f, MTXMODE_APPLY); + + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), + G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_XLU_DISP++, D_801C0D94); + + Matrix_Pop(); + + CLOSE_DISPS(play->state.gfxCtx); + } else if (player->skelAnime.animation == &gPlayerAnim_pg_punchB) { + func_80127488(play, player, D_801C07AC[(s32)player->skelAnime.curFrame]); + } else { + func_801271B0(play, player, 1); + } + } + + if (player->actor.scale.y >= 0.0f) { + if (player->rightHandType == PLAYER_MODELTYPE_RH_FF) { + Matrix_Get(&player->shieldMf); + } else if (player->rightHandType == PLAYER_MODELTYPE_RH_SHIELD) { + // Coordinates of the shield quad collider vertices, in the right hand limb's own model space. + static Vec3f sRightHandLimbModelShieldQuadVertices[4] = { + { -4500.0f, -3000.0f, -600.0f }, + { 1500.0f, -3000.0f, -600.0f }, + { -4500.0f, 3000.0f, -600.0f }, + { 1500.0f, 3000.0f, -600.0f }, + }; + + Matrix_Get(&player->shieldMf); + Player_UpdateShieldCollider(play, player, &player->shieldQuad, sRightHandLimbModelShieldQuadVertices); + } else if (player->rightHandType == PLAYER_MODELTYPE_RH_HOOKSHOT) { + static Vec3f D_801C0DD8 = { 50.0f, 800.0f, 0.0f }; + + Matrix_MultVec3f(&D_801C0DD8, &player->rightHandWorld.pos); + + if (heldActor != NULL) { + static Vec3f D_801C0DE4 = { 50.0f, 850.0f, 0.0f }; + MtxF sp1BC; + + Matrix_MultVec3f(&D_801C0DE4, &heldActor->world.pos); + Matrix_RotateZYX(0, -0x4000, -0x4000, MTXMODE_APPLY); + Matrix_Get(&sp1BC); + Matrix_MtxFToYXZRot(&sp1BC, &heldActor->world.rot, false); + heldActor->shape.rot = heldActor->world.rot; + if (func_800B7128(player)) { + Matrix_Translate(500.0f, 300.0f, 0.0f, MTXMODE_APPLY); + Player_DrawHookshotReticle(play, player, 77600.0f); + } + } + } else if (player->meleeWeaponState != 0) { + if (player->meleeWeaponAnimation == PLAYER_MWA_GORON_PUNCH_RIGHT) { + func_80126B8C(play, player); + } + } + if ((player->getItemDrawIdPlusOne != (GID_NONE + 1)) || + ((func_800B7118(player) == 0) && (heldActor != NULL))) { + if (!(player->stateFlags1 & PLAYER_STATE1_400) && (player->getItemDrawIdPlusOne != (GID_NONE + 1)) && + (player->exchangeItemId != PLAYER_IA_NONE)) { + Math_Vec3f_Copy(&sPlayerGetItemRefPos, &player->leftHandWorld.pos); + } else { + sPlayerGetItemRefPos.x = + (player->bodyPartsPos[PLAYER_BODYPART_RIGHT_HAND].x + player->leftHandWorld.pos.x) * 0.5f; + sPlayerGetItemRefPos.y = + (player->bodyPartsPos[PLAYER_BODYPART_RIGHT_HAND].y + player->leftHandWorld.pos.y) * 0.5f; + sPlayerGetItemRefPos.z = + (player->bodyPartsPos[PLAYER_BODYPART_RIGHT_HAND].z + player->leftHandWorld.pos.z) * 0.5f; + } + + if (player->getItemDrawIdPlusOne == (GID_NONE + 1)) { + Math_Vec3f_Copy(&heldActor->world.pos, &sPlayerGetItemRefPos); + } + } + } + } else if (limbIndex == PLAYER_LIMB_LEFT_FOREARM) { + func_80126BD0(play, player, 0); + } else if (limbIndex == PLAYER_LIMB_RIGHT_FOREARM) { + func_80126BD0(play, player, 1); + } else if (limbIndex == PLAYER_LIMB_TORSO) { + if (player->transformation == PLAYER_FORM_GORON) { + s32 temp_a0 = player->skelAnime.animation == &gPlayerAnim_pg_gakkistart; + s32 temp_v1_3 = player->skelAnime.animation == &gPlayerAnim_pg_gakkiwait; + + if ((temp_a0 || temp_v1_3 || (player->skelAnime.animation == &gPlayerAnim_pg_gakkiplay))) { + static Gfx* D_801C0DF0[] = { + object_link_goron_DL_010590, object_link_goron_DL_010368, object_link_goron_DL_010140, + object_link_goron_DL_00FF18, object_link_goron_DL_00FCF0, + }; + Vec3f sp178[ARRAY_COUNT(D_801C0DF0)]; + s32 i; + + OPEN_DISPS(play->state.gfxCtx); + + if (temp_v1_3) { + f32* var_v0 = player->unk_B10; + + for (i = 0; i < ARRAY_COUNT(sp178); i++, var_v0++) { + func_80124618(D_801C0510, *var_v0, &sp178[i]); + } + } else { + if (temp_a0 != 0) { + func_8012536C(); + func_80124618(D_801C0428, player->skelAnime.curFrame, &player->unk_AF0[1]); + } + + for (i = 0; i < ARRAY_COUNT(sp178); i++) { + Math_Vec3f_Copy(&sp178[i], &player->unk_AF0[1]); + } + } + Matrix_Push(); + Matrix_Scale(player->unk_AF0[1].x, player->unk_AF0[1].y, player->unk_AF0[1].z, MTXMODE_APPLY); + + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), + G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + gSPDisplayList(POLY_OPA_DISP++, object_link_goron_DL_00FC18); + + Matrix_Pop(); + + for (i = 0; i < ARRAY_COUNT(sp178); i++) { + Matrix_Push(); + Matrix_Scale(sp178[i].x, sp178[i].y, sp178[i].z, MTXMODE_APPLY); + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), + G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + gSPDisplayList(POLY_OPA_DISP++, D_801C0DF0[i]); + Matrix_Pop(); + } + + CLOSE_DISPS(play->state.gfxCtx); + } + } + } else if (limbIndex == PLAYER_LIMB_HEAD) { + //! FAKE + if (((*dList1 != NULL) && ((((void)0, player->currentMask)) != (((void)0, PLAYER_MASK_NONE)))) && + (((player->transformation == PLAYER_FORM_HUMAN) && + ((player->skelAnime.animation != &gPlayerAnim_cl_setmask) || (player->skelAnime.curFrame >= 12.0f))) || + ((((player->transformation != PLAYER_FORM_HUMAN) && (player->currentMask >= PLAYER_MASK_FIERCE_DEITY)) && + ((player->transformation + PLAYER_MASK_FIERCE_DEITY) != player->currentMask)) && + (player->skelAnime.curFrame >= 10.0f)))) { + if (func_80127438(play, player, player->currentMask)) { + s32 maskMinusOne = ((void)0, player->currentMask) - 1; + + OPEN_DISPS(play->state.gfxCtx); + + if (((void)0, player->currentMask) == PLAYER_MASK_COUPLE) { + Player_DrawCouplesMask(play, player); + } else if (((void)0, player->currentMask) == PLAYER_MASK_CIRCUS_LEADER) { + Player_DrawCircusLeadersMask(play, player); + } else if (((void)0, player->currentMask) == PLAYER_MASK_BLAST) { + Player_DrawBlastMask(play, player); + } else if (((void)0, player->currentMask) == PLAYER_MASK_BUNNY) { + Player_DrawBunnyHood(play); + } else if (((void)0, player->currentMask) == PLAYER_MASK_GREAT_FAIRY) { + Player_DrawGreatFairysMask(play, player); + } else if (((void)0, player->currentMask) >= PLAYER_MASK_FIERCE_DEITY) { + static Vec2f D_801C0E04[PLAYER_FORM_MAX] = { + { 140.0f, -130.0f }, // PLAYER_FORM_FIERCE_DEITY + { 0.0f, -200.0f }, // PLAYER_FORM_GORON + { -160.0f, 0.0f }, // PLAYER_FORM_ZORA + { 220.0f, -200.0f }, // PLAYER_FORM_DEKU + { 0.0f, 0.0f }, // PLAYER_FORM_HUMAN + }; + Vec2f* temp_s0_4 = &D_801C0E04[player->transformation]; + + Matrix_Push(); + Matrix_Translate(temp_s0_4->x, temp_s0_4->z, 0.0f, MTXMODE_APPLY); + Matrix_Scale(1.0f, 1.0f - player->unk_B10[3], 1.0f - player->unk_B10[2], MTXMODE_APPLY); + + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), + G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + Matrix_Pop(); + + if (((player->skelAnime.animation == &gPlayerAnim_cl_setmask) && + (player->skelAnime.curFrame >= 51.0f)) || + (player->skelAnime.animation == &gPlayerAnim_cl_setmaskend)) { + maskMinusOne += 4; + } + } + + gSPDisplayList(POLY_OPA_DISP++, D_801C0B20[maskMinusOne]); + + CLOSE_DISPS(play->state.gfxCtx); + } + } else if (player->transformation == PLAYER_FORM_DEKU) { + if (player->skelAnime.animation == &gPlayerAnim_pn_gurd) { + OPEN_DISPS(play->state.gfxCtx); + + func_80124618(D_801C0410, player->skelAnime.curFrame, player->unk_AF0); + Matrix_Push(); + + Matrix_Scale(player->unk_AF0[0].x, player->unk_AF0[0].y, player->unk_AF0[0].z, MTXMODE_APPLY); + + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), + G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_OPA_DISP++, object_link_nuts_DL_00A348); + + Matrix_Pop(); + + CLOSE_DISPS(play->state.gfxCtx); + } else { + s32 temp_v1_5 = player->skelAnime.animation == &gPlayerAnim_pn_gakkistart; + + if (temp_v1_5 || (player->skelAnime.animation == &gPlayerAnim_pn_gakkiplay) || + (player->skelAnime.animation == &gPlayerAnim_dl_kokeru)) { + static Gfx* D_801C0E2C[] = { + object_link_nuts_DL_007A28, object_link_nuts_DL_0077D0, object_link_nuts_DL_007548, + object_link_nuts_DL_007900, object_link_nuts_DL_0076A0, + }; + Vec3f spF0[ARRAY_COUNT(D_801C0E2C)]; + s32 i; + f32* temp; + + OPEN_DISPS(play->state.gfxCtx); + + if (temp_v1_5) { + Vec3f spD4; + + func_80124618(D_801C0340, player->skelAnime.curFrame, &spD4); + player->arr_AF0[0] = spD4.x; + func_80124618(D_801C0368, player->skelAnime.curFrame, spF0); + + for (i = 0; i < ARRAY_COUNT(spF0) - 1; i++) { + Math_Vec3f_Copy(&spF0[i + 1], spF0); + } + + temp = &player->arr_AF0[1]; + for (i = 0; i < ARRAY_COUNT(spF0); i++) { + *temp = spF0[0].x; + temp++; + } + } else { + temp = &player->arr_AF0[1]; + for (i = 0; i < ARRAY_COUNT(spF0); i++) { + spF0[i].x = *temp; + spF0[i].y = *temp; + spF0[i].z = *temp; + temp++; + } + } + + Matrix_Push(); + Matrix_Scale(player->arr_AF0[0], player->arr_AF0[0], player->arr_AF0[0], MTXMODE_APPLY); + + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), + G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_OPA_DISP++, object_link_nuts_DL_007390); + + Matrix_Pop(); + + for (i = 0; i < ARRAY_COUNT(spF0); i++) { + Matrix_Push(); + + Matrix_Scale(spF0[i].x, spF0[i].y, spF0[i].z, MTXMODE_APPLY); + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), + G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + //! FAKE (yes, all of them are required) + // https://decomp.me/scratch/AdU3G + if (1) {} + if (1) {} + if (1) {} + if (1) {} + if (1) {} + if (1) {} + gSPDisplayList(POLY_OPA_DISP++, D_801C0E2C[i]); + + Matrix_Pop(); + } + + CLOSE_DISPS(play->state.gfxCtx); + } + } + } + + if ((player->stateFlags1 & (PLAYER_STATE1_2 | PLAYER_STATE1_100)) && (player->unk_AE8 != 0)) { + static Vec3f D_801C0E40[PLAYER_FORM_MAX] = { + { 0.0f, 0.0f, 0.0f }, // PLAYER_FORM_FIERCE_DEITY + { -578.3f, -1100.9f, 0.0f }, // PLAYER_FORM_GORON + { -189.5f, -594.87f, 0.0f }, // PLAYER_FORM_ZORA + { -570.0f, -812.0f, 0.0f }, // PLAYER_FORM_DEKU + { -230.0f, -520.0f, 0.0f }, // PLAYER_FORM_HUMAN + }; + Vec3f* temp_s0_7 = &D_801C0E40[player->transformation]; + + OPEN_DISPS(play->state.gfxCtx); + + Matrix_Push(); + AnimatedMat_DrawXlu(play, Lib_SegmentedToVirtual(gameplay_keep_Matanimheader_054F18)); + Matrix_Translate(temp_s0_7->x, temp_s0_7->y, 0.0f, MTXMODE_APPLY); + if (player->transformation == PLAYER_FORM_ZORA) { + Matrix_Scale(0.7f, 0.7f, 0.7f, MTXMODE_APPLY); + } + + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 255, (u8)player->unk_AE8); + gSPDisplayList(POLY_XLU_DISP++, gameplay_keep_DL_054C90); + + Matrix_Pop(); + + CLOSE_DISPS(play->state.gfxCtx); + } + if (player->actor.scale.y >= 0.0f) { + static Vec3f sPlayerFocusHeadLimbModelPos = { 1100.0f, -700.0f, 0.0f }; + static Vec3f D_801C0E88 = { 1600.0f, -1700.0f, -70.0f }; // unused + Actor* spA8 = NULL; + + if (player->transformation != PLAYER_FORM_DEKU) { + Matrix_MultVec3f(&sPlayerFocusHeadLimbModelPos, &player->actor.focus.pos); + } else { + static Vec3f D_801C0E94 = { 1800.0f, -300.0f, 0.0f }; + + Matrix_MultVec3f(&sPlayerFocusHeadLimbModelPos, &player->actor.focus.pos); + Matrix_MultVec3f(&D_801C0E94, sPlayerCurBodyPartPos); + if ((player->skelAnime.animation == &gPlayerAnim_pn_drinkend) || + (player->unk_284.animation == &gPlayerAnim_pn_tamahaki) || + ((player->stateFlags3 & PLAYER_STATE3_40) && ((spA8 = player->heldActor) != NULL))) { + if (spA8 != NULL) { + static Vec3f D_801C0EA0 = { 1300.0f, -400.0f, 0.0f }; + MtxF sp68; + + Matrix_Push(); + Matrix_MultVec3f(&D_801C0EA0, &spA8->world.pos); + Matrix_RotateZYX(0, 0x4000, 0, MTXMODE_APPLY); + Matrix_Get(&sp68); + Matrix_MtxFToYXZRot(&sp68, &spA8->world.rot, false); + spA8->shape.rot = spA8->world.rot; + Matrix_Pop(); + } + } + } + } + } else if ((limbIndex == PLAYER_LIMB_HAT) && (player->stateFlags3 & PLAYER_STATE3_100000)) { + Vec3f sp5C; + Vec3f sp50; + + Matrix_MultVecX(3000.0f, &sp5C); + Matrix_MultVecX(2300.0f, &sp50); + if (func_80126440(play, NULL, player->meleeWeaponInfo, &sp5C, &sp50)) { + EffectBlure_AddVertex(Effect_GetByIndex(player->meleeWeaponEffectIndex[0]), &player->meleeWeaponInfo[0].tip, + &player->meleeWeaponInfo[0].base); + } + } else if (limbIndex == PLAYER_LIMB_RIGHT_SHIN) { + if (player->meleeWeaponState != 0) { + if ((player->meleeWeaponAnimation == PLAYER_MWA_ZORA_PUNCH_KICK) || + (player->meleeWeaponAnimation == PLAYER_MWA_ZORA_JUMPKICK_START) || + (player->meleeWeaponAnimation == PLAYER_MWA_ZORA_JUMPKICK_FINISH)) { + func_8012669C(play, player, D_801C0A48, D_801C0A24); + } + } + } else if (limbIndex == PLAYER_LIMB_WAIST) { + if (player->meleeWeaponState != 0) { + if (player->meleeWeaponAnimation == PLAYER_MWA_GORON_PUNCH_BUTT) { + Math_Vec3f_Copy(&player->unk_AF0[1], &player->meleeWeaponInfo[0].base); + func_8012669C(play, player, D_801C0A90, D_801C0A6C); + } + } + } else if (limbIndex == PLAYER_LIMB_SHEATH) { + if ((*dList1 != NULL) && (player->transformation == PLAYER_FORM_HUMAN) && + (player->currentShield != PLAYER_SHIELD_NONE) && + ((player->sheathType == PLAYER_MODELTYPE_SHEATH_14) || + (player->sheathType == PLAYER_MODELTYPE_SHEATH_15))) { + OPEN_DISPS(play->state.gfxCtx); + + gSPDisplayList(POLY_OPA_DISP++, gPlayerShields[2 * ((player->currentShield - 1) ^ 0)]); + + CLOSE_DISPS(play->state.gfxCtx); + } + + if (player->actor.scale.y >= 0.0f) { + if ((player->rightHandType != PLAYER_MODELTYPE_RH_SHIELD) && + (player->rightHandType != PLAYER_MODELTYPE_RH_FF)) { + static Vec3f sSheathLimbModelShieldOnBackPos = { 630.0f, 100.0f, -30.0f }; + static Vec3s sSheathLimbModelShieldOnBackZyxRot = { 0, 0, 0x7FFF }; + + Matrix_TranslateRotateZYX(&sSheathLimbModelShieldOnBackPos, &sSheathLimbModelShieldOnBackZyxRot); + Matrix_Get(&player->shieldMf); + } + } + } else if (player->actor.scale.y >= 0.0f) { + Player_SetFeetPos(play, player, limbIndex); + } + + func_8012536C(); +} diff --git a/src/code/z_skelanime.c b/src/code/z_skelanime.c index cf7f95078..085cb4de2 100644 --- a/src/code/z_skelanime.c +++ b/src/code/z_skelanime.c @@ -1226,7 +1226,7 @@ void SkelAnime_InitPlayer(PlayState* play, SkelAnime* skelAnime, FlexSkeletonHea allocSize = sizeof(Vec3s) * limbCount; if (flags & 8) { - allocSize += 2; + allocSize += sizeof(u16); } if (jointTableBuffer == NULL) { diff --git a/src/overlays/actors/ovl_Boss_03/z_boss_03.c b/src/overlays/actors/ovl_Boss_03/z_boss_03.c index be76f63b2..506f8a1fa 100644 --- a/src/overlays/actors/ovl_Boss_03/z_boss_03.c +++ b/src/overlays/actors/ovl_Boss_03/z_boss_03.c @@ -48,6 +48,8 @@ * - Effect Update/Draw * - Seaweed */ + +#include "prevent_bss_reordering.h" #include "z_boss_03.h" #include "overlays/actors/ovl_Door_Warp1/z_door_warp1.h" #include "overlays/actors/ovl_En_Water_Effect/z_en_water_effect.h" diff --git a/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c b/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c index c9844abb6..81e261a00 100644 --- a/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c +++ b/src/overlays/actors/ovl_En_Fsn/z_en_fsn.c @@ -997,7 +997,7 @@ void EnFsn_GiveItem(EnFsn* this, PlayState* play) { } this->actor.parent = NULL; if (ENFSN_IS_SHOP(&this->actor) && !this->isSelling) { - Player_UpdateBottleHeld(play, GET_PLAYER(play), ITEM_BOTTLE, PLAYER_IA_BOTTLE); + Player_UpdateBottleHeld(play, GET_PLAYER(play), ITEM_BOTTLE, PLAYER_IA_BOTTLE_EMPTY); } this->actionFunc = EnFsn_SetupResumeInteraction; } else if (this->isSelling == true) { diff --git a/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.c b/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.c index 813852b44..eceaac242 100644 --- a/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.c +++ b/src/overlays/actors/ovl_En_Kendo_Js/z_en_kendo_js.c @@ -461,7 +461,7 @@ s32 func_80B26F6C(EnKendoJs* this, PlayState* play) { switch (this->unk_288) { case 0x271D: - if (Player_GetMeleeWeaponHeld(player) != 0) { + if (Player_GetMeleeWeaponHeld(player) != PLAYER_MELEEWEAPON_NONE) { Message_StartTextbox(play, 0x272A, &this->actor); this->unk_288 = 0x272A; return true; diff --git a/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c b/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c index 56fb61bed..d85924b14 100644 --- a/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c +++ b/src/overlays/actors/ovl_En_Kgy/z_en_kgy.c @@ -743,7 +743,7 @@ void func_80B41E18(EnKgy* this, PlayState* play) { case 0xC46: case 0xC55: - Player_UpdateBottleHeld(play, GET_PLAYER(play), ITEM_BOTTLE, PLAYER_IA_BOTTLE); + Player_UpdateBottleHeld(play, GET_PLAYER(play), ITEM_BOTTLE, PLAYER_IA_BOTTLE_EMPTY); player->exchangeItemId = PLAYER_IA_NONE; this->unk_29C &= ~0x8; play->msgCtx.msgLength = 0; diff --git a/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c b/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c index 3808c9cfc..2a81da583 100644 --- a/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c +++ b/src/overlays/actors/ovl_En_Minifrog/z_en_minifrog.c @@ -400,7 +400,7 @@ void EnMinifrog_NextFrogReturned(EnMinifrog* this, PlayState* play) { this->actionFunc = EnMinifrog_ContinueChoirCutscene; this->flags &= ~(0x2 << MINIFROG_YELLOW | 0x2 << MINIFROG_CYAN | 0x2 << MINIFROG_PINK | 0x2 << MINIFROG_BLUE | 0x2 << MINIFROG_WHITE); - play->setPlayerTalkAnim(play, &gPlayerAnim_link_normal_talk_free_wait, 0); + play->setPlayerTalkAnim(play, &gPlayerAnim_link_normal_talk_free_wait, ANIMMODE_LOOP); } } @@ -431,7 +431,7 @@ void EnMinifrog_SetupNextFrogChoir(EnMinifrog* this, PlayState* play) { this->flags &= ~0x100; this->flags &= ~(0x2 << MINIFROG_YELLOW | 0x2 << MINIFROG_CYAN | 0x2 << MINIFROG_PINK | 0x2 << MINIFROG_BLUE | 0x2 << MINIFROG_WHITE); - play->setPlayerTalkAnim(play, &gPlayerAnim_link_normal_talk_free_wait, 0); + play->setPlayerTalkAnim(play, &gPlayerAnim_link_normal_talk_free_wait, ANIMMODE_LOOP); } else if (this->timer <= 0) { this->actionFunc = EnMinifrog_NextFrogReturned; this->timer = 30; @@ -451,7 +451,7 @@ void EnMinifrog_BeginChoirCutscene(EnMinifrog* this, PlayState* play) { this->timer = 5; func_801A1F00(3, NA_BGM_FROG_SONG); this->flags |= 0x100; - play->setPlayerTalkAnim(play, &gPlayerAnim_pn_gakkiplay, 0); + play->setPlayerTalkAnim(play, &gPlayerAnim_pn_gakkiplay, ANIMMODE_LOOP); } else { ActorCutscene_SetIntentToPlay(this->actor.cutscene); } diff --git a/src/overlays/actors/ovl_En_Stone_heishi/z_en_stone_heishi.c b/src/overlays/actors/ovl_En_Stone_heishi/z_en_stone_heishi.c index f75c54d37..1692e1461 100644 --- a/src/overlays/actors/ovl_En_Stone_heishi/z_en_stone_heishi.c +++ b/src/overlays/actors/ovl_En_Stone_heishi/z_en_stone_heishi.c @@ -347,7 +347,7 @@ void EnStoneheishi_DrinkBottleProcess(EnStoneheishi* this, PlayState* play) { if ((this->timer < 10) && (this->bottleDisplay != EN_STONE_BOTTLE_EMPTY)) { this->bottleDisplay = EN_STONE_BOTTLE_EMPTY; Actor_PlaySfx(&this->actor, NA_SE_VO_NP_DRINK); - Player_UpdateBottleHeld(play, GET_PLAYER(play), ITEM_BOTTLE, PLAYER_IA_BOTTLE); + Player_UpdateBottleHeld(play, GET_PLAYER(play), ITEM_BOTTLE, PLAYER_IA_BOTTLE_EMPTY); } } else { this->drinkBottleState++; diff --git a/src/overlays/actors/ovl_En_Tab/z_en_tab.c b/src/overlays/actors/ovl_En_Tab/z_en_tab.c index 6c020e7e6..dfa1e0bb7 100644 --- a/src/overlays/actors/ovl_En_Tab/z_en_tab.c +++ b/src/overlays/actors/ovl_En_Tab/z_en_tab.c @@ -323,9 +323,9 @@ s32 func_80BE0D60(EnTab* this, PlayState* play) { this->unk_320++; if (this->unk_320 == 1) { - play->setPlayerTalkAnim(play, &gPlayerAnim_link_demo_bikkuri, 2); + play->setPlayerTalkAnim(play, &gPlayerAnim_link_demo_bikkuri, ANIMMODE_ONCE); } else if (this->unk_320 > 20) { - play->setPlayerTalkAnim(play, NULL, 0); + play->setPlayerTalkAnim(play, NULL, ANIMMODE_LOOP); this->unk_320 = 0; ret = true; } diff --git a/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c b/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c index 035b04983..11d984fe7 100644 --- a/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c +++ b/src/overlays/actors/ovl_En_Talk_Gibud/z_en_talk_gibud.c @@ -824,7 +824,7 @@ void EnTalkGibud_Talk(EnTalkGibud* this, PlayState* play) { if (!requestedItem->isBottledItem) { Inventory_ChangeAmmo(requestedItem->item, -requestedItem->amount); } else { - Player_UpdateBottleHeld(play, player, ITEM_BOTTLE, PLAYER_IA_BOTTLE); + Player_UpdateBottleHeld(play, player, ITEM_BOTTLE, PLAYER_IA_BOTTLE_EMPTY); } player->stateFlags1 |= PLAYER_STATE1_20; player->stateFlags1 |= PLAYER_STATE1_20000000; diff --git a/src/overlays/actors/ovl_En_Test3/z_en_test3.c b/src/overlays/actors/ovl_En_Test3/z_en_test3.c index 38ee9b710..7941ea758 100644 --- a/src/overlays/actors/ovl_En_Test3/z_en_test3.c +++ b/src/overlays/actors/ovl_En_Test3/z_en_test3.c @@ -1123,9 +1123,9 @@ s32 EnTest3_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* *dList = NULL; } if (limbIndex == OBJECT_TEST3_LIMB_0B) { - rot->x += this->player.unk_AAC.z; - rot->y -= this->player.unk_AAC.y; - rot->z += this->player.unk_AAC.x; + rot->x += this->player.headLimbRot.z; + rot->y -= this->player.headLimbRot.y; + rot->z += this->player.headLimbRot.x; } else if (limbIndex == OBJECT_TEST3_LIMB_0A) { s32 requiredScopeTemp; @@ -1133,12 +1133,12 @@ s32 EnTest3_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* Matrix_RotateZS(0x44C, MTXMODE_APPLY); Matrix_RotateYS(this->player.unk_AA8, MTXMODE_APPLY); } - if (this->player.unk_AB2.y != 0) { - Matrix_RotateYS(this->player.unk_AB2.y, MTXMODE_APPLY); + if (this->player.upperLimbRot.y != 0) { + Matrix_RotateYS(this->player.upperLimbRot.y, MTXMODE_APPLY); } - Matrix_RotateXS(this->player.unk_AB2.x, MTXMODE_APPLY); - if (this->player.unk_AB2.z != 0) { - Matrix_RotateZS(this->player.unk_AB2.z, MTXMODE_APPLY); + Matrix_RotateXS(this->player.upperLimbRot.x, MTXMODE_APPLY); + if (this->player.upperLimbRot.z != 0) { + Matrix_RotateZS(this->player.upperLimbRot.z, MTXMODE_APPLY); } } else { func_80125500(play, &this->player, limbIndex, pos, rot); @@ -1214,7 +1214,7 @@ void EnTest3_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList1, Gfx** dL } else if (limbIndex == OBJECT_TEST3_LIMB_15) { if (D_80A41D60 || CHECK_WEEKEVENTREG(WEEKEVENTREG_50_80) || (INV_CONTENT(ITEM_PENDANT_OF_MEMORIES) == ITEM_PENDANT_OF_MEMORIES) || - (this->player.getItemDrawId - 1 == GID_PENDANT_OF_MEMORIES)) { + (this->player.getItemDrawIdPlusOne - 1 == GID_PENDANT_OF_MEMORIES)) { D_80A41D60 = true; } else { OPEN_DISPS(play->state.gfxCtx); @@ -1222,7 +1222,7 @@ void EnTest3_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList1, Gfx** dL CLOSE_DISPS(play->state.gfxCtx); } } else { - func_80128B74(play, &this->player, limbIndex); + Player_SetFeetPos(play, &this->player, limbIndex); } } @@ -1295,7 +1295,7 @@ void EnTest3_Draw(Actor* thisx, PlayState* play2) { if (this->player.invincibilityTimer > 0) { POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP); } - if ((this->player.getItemDrawId - 1) != GID_NONE) { + if ((this->player.getItemDrawIdPlusOne - 1) != GID_NONE) { Player_DrawGetItem(play, &this->player); } CLOSE_DISPS(play->state.gfxCtx); diff --git a/src/overlays/actors/ovl_En_Trt/z_en_trt.c b/src/overlays/actors/ovl_En_Trt/z_en_trt.c index ed0e61937..6decc1150 100644 --- a/src/overlays/actors/ovl_En_Trt/z_en_trt.c +++ b/src/overlays/actors/ovl_En_Trt/z_en_trt.c @@ -349,7 +349,7 @@ void EnTrt_GetMushroom(EnTrt* this, PlayState* play) { this->textId = 0x884; Message_StartTextbox(play, this->textId, &this->actor); SET_WEEKEVENTREG(WEEKEVENTREG_53_08); - Player_UpdateBottleHeld(play, GET_PLAYER(play), ITEM_BOTTLE, PLAYER_IA_BOTTLE); + Player_UpdateBottleHeld(play, GET_PLAYER(play), ITEM_BOTTLE, PLAYER_IA_BOTTLE_EMPTY); break; case 0x888: this->textId = 0x889; @@ -375,7 +375,7 @@ void EnTrt_GetMushroom(EnTrt* this, PlayState* play) { void EnTrt_PayForMushroom(EnTrt* this, PlayState* play) { if (Actor_HasParent(&this->actor, play)) { this->actor.parent = NULL; - Player_UpdateBottleHeld(play, GET_PLAYER(play), ITEM_BOTTLE, PLAYER_IA_BOTTLE); + Player_UpdateBottleHeld(play, GET_PLAYER(play), ITEM_BOTTLE, PLAYER_IA_BOTTLE_EMPTY); this->actionFunc = EnTrt_SetupItemGiven; } else { Actor_OfferGetItem(&this->actor, play, GI_RUPEE_RED, 300.0f, 300.0f); diff --git a/src/overlays/actors/ovl_En_Tru/z_en_tru.c b/src/overlays/actors/ovl_En_Tru/z_en_tru.c index 7ab20a77c..a9335f850 100644 --- a/src/overlays/actors/ovl_En_Tru/z_en_tru.c +++ b/src/overlays/actors/ovl_En_Tru/z_en_tru.c @@ -913,7 +913,7 @@ s32 func_80A87880(Actor* thisx, PlayState* play) { Animation_OnFrame(&this->skelAnime, 52.0f)) { if (Animation_OnFrame(&this->skelAnime, 52.0f)) { this->unk_34E &= ~0x400; - Player_UpdateBottleHeld(play, player, ITEM_BOTTLE, PLAYER_IA_BOTTLE); + Player_UpdateBottleHeld(play, player, ITEM_BOTTLE, PLAYER_IA_BOTTLE_EMPTY); } Actor_PlaySfx(&this->actor, NA_SE_EN_KOUME_DRINK); } else if (Animation_OnFrame(&this->skelAnime, 90.0f)) { diff --git a/src/overlays/actors/ovl_Obj_Um/z_obj_um.c b/src/overlays/actors/ovl_Obj_Um/z_obj_um.c index 677cbfe2a..46fbe067c 100644 --- a/src/overlays/actors/ovl_Obj_Um/z_obj_um.c +++ b/src/overlays/actors/ovl_Obj_Um/z_obj_um.c @@ -620,13 +620,13 @@ void func_80B78EBC(ObjUm* this, PlayState* play) { player->actor.focus.rot.z = 0; player->actor.focus.rot.y = player->actor.shape.rot.y; - player->unk_AAC.x = 0; - player->unk_AAC.y = 0; - player->unk_AAC.z = 0; + player->headLimbRot.x = 0; + player->headLimbRot.y = 0; + player->headLimbRot.z = 0; - player->unk_AB2.x = 0; - player->unk_AB2.y = 0; - player->unk_AB2.z = 0; + player->upperLimbRot.x = 0; + player->upperLimbRot.y = 0; + player->upperLimbRot.z = 0; player->currentYaw = player->actor.focus.rot.y; } diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index d4d6565e9..126407393 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -2221,23 +2221,23 @@ 0x80124088:("Player_IsHoldingMirrorShield",), 0x801240C8:("Player_IsHoldingHookshot",), 0x801240DC:("func_801240DC",), - 0x80124110:("func_80124110",), - 0x80124148:("func_80124148",), - 0x80124168:("Player_ActionToMeleeWeapon",), + 0x80124110:("Player_BButtonSwordFromIA",), + 0x80124148:("Player_GetHeldBButtonSword",), + 0x80124168:("Player_MeleeWeaponFromIA",), 0x80124190:("Player_GetMeleeWeaponHeld",), 0x801241B4:("Player_IsHoldingTwoHandedWeapon",), - 0x801241E0:("Player_ActionToBottle",), + 0x801241E0:("Player_BottleFromIA",), 0x8012420C:("Player_GetBottleHeld",), - 0x8012422C:("Player_ActionToExplosive",), + 0x8012422C:("Player_ExplosiveFromIA",), 0x80124258:("Player_GetExplosiveHeld",), - 0x80124278:("Player_ActionToSword",), + 0x80124278:("Player_SwordFromIA",), 0x801242B4:("func_801242B4",), 0x801242DC:("Player_GetEnvironmentalHazard",), - 0x80124420:("func_80124420",), + 0x80124420:("Player_UpdateBunnyEars",), 0x80124618:("func_80124618",), 0x801246F4:("Player_DrawImpl",), - 0x80124870:("func_80124870",), - 0x80124CC4:("func_80124CC4",), + 0x80124870:("Player_AdjustSingleLeg",), + 0x80124CC4:("Player_DrawHookshotReticle",), 0x80124F18:("func_80124F18",), 0x80124FF0:("func_80124FF0",), 0x801251C4:("func_801251C4",), @@ -2246,13 +2246,13 @@ 0x8012536C:("func_8012536C",), 0x801253A4:("Player_DrawZoraShield",), 0x80125500:("func_80125500",), - 0x80125580:("func_80125580",), + 0x80125580:("Player_OverrideLimbDrawGameplayCommon",), 0x80125CE0:("func_80125CE0",), - 0x80125D4C:("func_80125D4C",), - 0x801262C8:("func_801262C8",), - 0x801263FC:("func_801263FC",), + 0x80125D4C:("Player_OverrideLimbDrawGameplayDefault",), + 0x801262C8:("Player_OverrideLimbDrawGameplayFirstPerson",), + 0x801263FC:("Player_OverrideLimbDrawGameplayCrawling",), 0x80126440:("func_80126440",), - 0x801265C8:("func_801265C8",), + 0x801265C8:("Player_UpdateShieldCollider",), 0x8012669C:("func_8012669C",), 0x80126808:("Player_DrawGetItemImpl",), 0x8012697C:("Player_DrawGetItem",), @@ -2267,13 +2267,13 @@ 0x801278F8:("Player_DrawBlastMask",), 0x80127A60:("Player_DrawBunnyHood",), 0x80127B64:("func_80127B64",), - 0x80127BE8:("func_80127BE8",), + 0x80127BE8:("Player_DrawStrayFairyParticles",), 0x80127DA4:("func_80127DA4",), 0x80128388:("func_80128388",), 0x801284A0:("Player_DrawGreatFairysMask",), 0x80128640:("func_80128640",), - 0x80128B74:("func_80128B74",), - 0x80128BD0:("func_80128BD0",), + 0x80128B74:("Player_SetFeetPos",), + 0x80128BD0:("Player_PostLimbDrawGameplay",), 0x80129EF0:("PreNMI_Stop",), 0x80129F04:("PreNMI_Update",), 0x80129F4C:("PreNMI_Draw",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 6e83a53e8..6ed78a348 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -1210,9 +1210,9 @@ 0x801C0034:("gPlayerSheath12DLs","UNK_TYPE1","",0x1), 0x801C005C:("gPlayerSheath13DLs","UNK_TYPE1","",0x1), 0x801C0084:("gPlayerSheath14DLs","UNK_TYPE1","",0x1), - 0x801C00AC:("gPlayerShields","UNK_TYPE1","",0x1), - 0x801C00BC:("gPlayerSheathedSwords","UNK_TYPE1","",0x1), - 0x801C00D4:("gPlayerSwordSheaths","UNK_TYPE1","",0x1), + 0x801C00AC:("gPlayerShields","Gfx*","",0x10), + 0x801C00BC:("gPlayerSheathedSwords","Gfx*","",0x18), + 0x801C00D4:("gPlayerSwordSheaths","Gfx*","",0x18), 0x801C00EC:("gPlayerLeftHandTwoHandSwordDLs","UNK_TYPE1","",0x1), 0x801C0114:("gPlayerLeftHandOpenDLs","UNK_TYPE1","",0x1), 0x801C013C:("gPlayerLeftHandClosedDLs","UNK_TYPE1","",0x1), @@ -1224,11 +1224,11 @@ 0x801C021C:("gPlayerRightHandInstrumentDLs","UNK_TYPE1","",0x1), 0x801C0244:("gPlayerRightHandHookshotDLs","UNK_TYPE1","",0x1), 0x801C026C:("gPlayerLeftHandBottleDLs","UNK_TYPE1","",0x1), - 0x801C0294:("D_801C0294","UNK_TYPE1","",0x1), - 0x801C02A8:("D_801C02A8","UNK_TYPE1","",0x1), - 0x801C02BC:("D_801C02BC","UNK_TYPE1","",0x1), - 0x801C02D0:("D_801C02D0","UNK_TYPE1","",0x1), - 0x801C02E4:("D_801C02E4","UNK_TYPE1","",0x1), + 0x801C0294:("sPlayerFirstPersonLeftForearmDLs","UNK_TYPE1","",0x1), + 0x801C02A8:("sPlayerFirstPersonLeftHandDLs","UNK_TYPE1","",0x1), + 0x801C02BC:("sPlayerFirstPersonRightShoulderDLs","UNK_TYPE1","",0x1), + 0x801C02D0:("sPlayerFirstPersonRightHandDLs","UNK_TYPE1","",0x1), + 0x801C02E4:("sPlayerFirstPersonRightHandHookshotDLs","UNK_TYPE1","",0x1), 0x801C02F8:("sPlayerDListGroups","UNK_PTR","",0x4), 0x801C0340:("D_801C0340","UNK_TYPE1","",0x1), 0x801C0368:("D_801C0368","UNK_TYPE1","",0x1), @@ -1279,7 +1279,7 @@ 0x801C0958:("D_801C0958","UNK_TYPE4","",0x4), 0x801C095C:("D_801C095C","UNK_PTR","",0x4), 0x801C0964:("D_801C0964","UNK_TYPE1","",0x1), - 0x801C096C:("D_801C096C","UNK_TYPE1","",0x1), + 0x801C096C:("sPlayerShieldCollisionTypes","UNK_TYPE1","",0x1), 0x801C0970:("D_801C0970","UNK_TYPE1","",0x1), 0x801C0994:("D_801C0994","UNK_TYPE4","",0x4), 0x801C09B8:("D_801C09B8","UNK_TYPE1","",0x1), @@ -1313,28 +1313,27 @@ 0x801C0C0C:("D_801C0C0C","UNK_TYPE4","",0x4), 0x801C0C30:("D_801C0C30","UNK_TYPE1","",0x1), 0x801C0C54:("D_801C0C54","struct_80128388_arg1","",0x54), - 0x801C0CA8:("D_801C0CA8","UNK_TYPE1","",0x1), + 0x801C0CA8:("sPlayerBottleColors","UNK_TYPE1","",0x1), 0x801C0CE8:("D_801C0CE8","UNK_TYPE4","",0x4), - 0x801C0D24:("D_801C0D24","UNK_TYPE1","",0x1), + 0x801C0D24:("sPlayerFootPos","UNK_TYPE1","",0x1), 0x801C0D60:("D_801C0D60","UNK_TYPE1","",0x1), 0x801C0D6C:("D_801C0D6C","UNK_TYPE1","",0x1), - 0x801C0D78:("D_801C0D78","UNK_TYPE1","",0x1), + 0x801C0D78:("sMeleeWeaponLengths","f32","[7]",0x1C), 0x801C0D94:("D_801C0D94","UNK_TYPE4","",0x4), - 0x801C0D98:("D_801C0D98","UNK_TYPE4","",0x4), - 0x801C0D9C:("D_801C0D9C","UNK_TYPE4","",0x4), - 0x801C0DA0:("D_801C0DA0","UNK_TYPE4","",0x4), - 0x801C0DA8:("D_801C0DA8","UNK_TYPE1","",0x1), + 0x801C0D98:("D_801C0D98","Vec3f","",0xC), + 0x801C0DA4:("D_801C0DA4","UNK_TYPE4","",0x4), + 0x801C0DA8:("sRightHandLimbModelShieldQuadVertices","Vec3f","[4]",0x30), 0x801C0DD8:("D_801C0DD8","UNK_TYPE1","",0x1), 0x801C0DE4:("D_801C0DE4","UNK_TYPE1","",0x1), 0x801C0DF0:("D_801C0DF0","UNK_TYPE4","",0x4), 0x801C0E04:("D_801C0E04","UNK_TYPE1","",0x1), 0x801C0E2C:("D_801C0E2C","UNK_TYPE4","",0x4), 0x801C0E40:("D_801C0E40","UNK_TYPE4","",0x4), - 0x801C0E7C:("D_801C0E7C","UNK_TYPE1","",0x1), + 0x801C0E7C:("sPlayerFocusHeadLimbModelPos","Vec3f","",0xC), 0x801C0E94:("D_801C0E94","UNK_TYPE1","",0x1), 0x801C0EA0:("D_801C0EA0","UNK_TYPE1","",0x1), - 0x801C0EAC:("D_801C0EAC","UNK_TYPE1","",0x1), - 0x801C0EB8:("D_801C0EB8","UNK_TYPE1","",0x1), + 0x801C0EAC:("sSheathLimbModelShieldOnBackPos","Vec3f","",0xC), + 0x801C0EB8:("sSheathLimbModelShieldOnBackZyxRot","Vec3s","",0x6), 0x801C0EC0:("sIsQuakeInitialized","UNK_TYPE2","",0x2), 0x801C0EC4:("sQuakeRequestCount","s16","",0x2), 0x801C0EC8:("sQuakeCallbacks","quake_callback_func","[7]",0x1c), @@ -4009,13 +4008,13 @@ 0x801F59AC:("D_801F59AC","UNK_TYPE1","",0x1), 0x801F59B0:("D_801F59B0","Vec3f","[2]",0x18), 0x801F59C8:("D_801F59C8","s32","[2]",0x8), - 0x801F59D0:("D_801F59D0","struct_801F59D0","",0x0A), - 0x801F59DC:("D_801F59DC","Vec3f*","",0x4), + 0x801F59D0:("sBunnyEarKinematics","struct_801F59D0","",0x0A), + 0x801F59DC:("sPlayerCurBodyPartPos","Vec3f*","",0x4), 0x801F59E0:("D_801F59E0","s32","",0x4), - 0x801F59E4:("D_801F59E4","s32","",0x4), - 0x801F59E8:("D_801F59E8","Vec3f","",0xC), - 0x801F59F4:("D_801F59F4","s32","",0x4), - 0x801F59F8:("D_801F59F8","s32","",0x4), + 0x801F59E4:("sPlayerLod","s32","",0x4), + 0x801F59E8:("sPlayerGetItemRefPos","Vec3f","",0xC), + 0x801F59F4:("sPlayerLeftHandType","s32","",0x4), + 0x801F59F8:("sPlayerRightHandType","s32","",0x4), 0x801F5A00:("sQuakeRequest","QuakeRequest","[4]",0x90), 0x801F5A90:("sDistortionRequest","DistortionRequest","",0xc), 0x801F5AA0:("sMatAnimStep","s32","",0x4), diff --git a/tools/namefixer.py b/tools/namefixer.py index d5cc4e29a..b037f9415 100755 --- a/tools/namefixer.py +++ b/tools/namefixer.py @@ -18,7 +18,7 @@ simpleReplace = { wordReplace = { # Functions "Actor_GetSwitchFlag": "Flags_GetSwitch", - "Math_FAtan2F(": "Math_Atan2S_XY(", + "Math_FAtan2F": "Math_Atan2S_XY", "Math_Acot2F": "Math_Atan2F_XY", "atan_flip": "Math_Atan2F_XY", "atans": "Math_Atan2S", @@ -839,13 +839,19 @@ wordReplace = { "player->heldItemActionParam": "player->itemAction", "player->unk_A9C": "player->secretRumbleCharge", "player->unk_AA0": "player->closestSecretDistSq", + "player->unk_AAC": "player->headLimbRot", + "player->unk_AB2": "player->upperLimbRot", + "player->unk_B2A": "player->getItemDrawIdPlusOne", + "player->getItemDrawId": "player->getItemDrawIdPlusOne", "player->unk_B68": "player->fallStartHeight", "player->unk_B6A": "player->fallDistance", "player->targetActor": "player->talkActor", "player->targetActorDistance": "player->talkActorDistance", "player->unk_730": "player->targetedActor", - "player->ageProperties->unk_92": "player->ageProperties->voiceSfxIdOffset", - "player->ageProperties->unk_94": "player->ageProperties->surfaceSfxIdOffset", + + "ageProperties->unk_04": "ageProperties->shadowScale", + "ageProperties->unk_92": "ageProperties->voiceSfxOffset", + "ageProperties->unk_94": "ageProperties->surfaceSfxOffset", "csCtx.npcActions": "csCtx.actorActions", "csCtx->npcActions": "csCtx->actorActions", @@ -943,6 +949,7 @@ wordReplace = { "EXCH_ITEM_LETTER_MAMA": "PLAYER_IA_LETTER_MAMA", "ITEM_FISHING_POLE": "ITEM_FISHING_ROD", "PLAYER_AP_FISHING_POLE": "PLAYER_IA_FISHING_ROD", + "PLAYER_IA_BOTTLE": "PLAYER_IA_BOTTLE_EMPTY", # Enums "TRANS_TYPE_00": "TRANS_TYPE_WIPE", diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index d70411560..92cd63a29 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -1735,23 +1735,23 @@ asm/non_matchings/code/z_player_lib/Player_HasMirrorShieldEquipped.s,Player_HasM asm/non_matchings/code/z_player_lib/Player_IsHoldingMirrorShield.s,Player_IsHoldingMirrorShield,0x80124088,0x10 asm/non_matchings/code/z_player_lib/Player_IsHoldingHookshot.s,Player_IsHoldingHookshot,0x801240C8,0x5 asm/non_matchings/code/z_player_lib/func_801240DC.s,func_801240DC,0x801240DC,0xD -asm/non_matchings/code/z_player_lib/func_80124110.s,func_80124110,0x80124110,0xE -asm/non_matchings/code/z_player_lib/func_80124148.s,func_80124148,0x80124148,0x8 -asm/non_matchings/code/z_player_lib/Player_ActionToMeleeWeapon.s,Player_ActionToMeleeWeapon,0x80124168,0xA +asm/non_matchings/code/z_player_lib/Player_BButtonSwordFromIA.s,Player_BButtonSwordFromIA,0x80124110,0xE +asm/non_matchings/code/z_player_lib/Player_GetHeldBButtonSword.s,Player_GetHeldBButtonSword,0x80124148,0x8 +asm/non_matchings/code/z_player_lib/Player_MeleeWeaponFromIA.s,Player_MeleeWeaponFromIA,0x80124168,0xA asm/non_matchings/code/z_player_lib/Player_GetMeleeWeaponHeld.s,Player_GetMeleeWeaponHeld,0x80124190,0x9 asm/non_matchings/code/z_player_lib/Player_IsHoldingTwoHandedWeapon.s,Player_IsHoldingTwoHandedWeapon,0x801241B4,0xB -asm/non_matchings/code/z_player_lib/Player_ActionToBottle.s,Player_ActionToBottle,0x801241E0,0xB +asm/non_matchings/code/z_player_lib/Player_BottleFromIA.s,Player_BottleFromIA,0x801241E0,0xB asm/non_matchings/code/z_player_lib/Player_GetBottleHeld.s,Player_GetBottleHeld,0x8012420C,0x8 -asm/non_matchings/code/z_player_lib/Player_ActionToExplosive.s,Player_ActionToExplosive,0x8012422C,0xB +asm/non_matchings/code/z_player_lib/Player_ExplosiveFromIA.s,Player_ExplosiveFromIA,0x8012422C,0xB asm/non_matchings/code/z_player_lib/Player_GetExplosiveHeld.s,Player_GetExplosiveHeld,0x80124258,0x8 -asm/non_matchings/code/z_player_lib/Player_ActionToSword.s,Player_ActionToSword,0x80124278,0xF +asm/non_matchings/code/z_player_lib/Player_SwordFromIA.s,Player_SwordFromIA,0x80124278,0xF asm/non_matchings/code/z_player_lib/func_801242B4.s,func_801242B4,0x801242B4,0xA asm/non_matchings/code/z_player_lib/Player_GetEnvironmentalHazard.s,Player_GetEnvironmentalHazard,0x801242DC,0x51 -asm/non_matchings/code/z_player_lib/func_80124420.s,func_80124420,0x80124420,0x7E +asm/non_matchings/code/z_player_lib/Player_UpdateBunnyEars.s,Player_UpdateBunnyEars,0x80124420,0x7E asm/non_matchings/code/z_player_lib/func_80124618.s,func_80124618,0x80124618,0x37 asm/non_matchings/code/z_player_lib/Player_DrawImpl.s,Player_DrawImpl,0x801246F4,0x5F -asm/non_matchings/code/z_player_lib/func_80124870.s,func_80124870,0x80124870,0x115 -asm/non_matchings/code/z_player_lib/func_80124CC4.s,func_80124CC4,0x80124CC4,0x95 +asm/non_matchings/code/z_player_lib/Player_AdjustSingleLeg.s,Player_AdjustSingleLeg,0x80124870,0x115 +asm/non_matchings/code/z_player_lib/Player_DrawHookshotReticle.s,Player_DrawHookshotReticle,0x80124CC4,0x95 asm/non_matchings/code/z_player_lib/func_80124F18.s,func_80124F18,0x80124F18,0x36 asm/non_matchings/code/z_player_lib/func_80124FF0.s,func_80124FF0,0x80124FF0,0x75 asm/non_matchings/code/z_player_lib/func_801251C4.s,func_801251C4,0x801251C4,0x55 @@ -1760,13 +1760,13 @@ asm/non_matchings/code/z_player_lib/func_80125340.s,func_80125340,0x80125340,0xB asm/non_matchings/code/z_player_lib/func_8012536C.s,func_8012536C,0x8012536C,0xE asm/non_matchings/code/z_player_lib/Player_DrawZoraShield.s,Player_DrawZoraShield,0x801253A4,0x57 asm/non_matchings/code/z_player_lib/func_80125500.s,func_80125500,0x80125500,0x20 -asm/non_matchings/code/z_player_lib/func_80125580.s,func_80125580,0x80125580,0x1D8 +asm/non_matchings/code/z_player_lib/Player_OverrideLimbDrawGameplayCommon.s,Player_OverrideLimbDrawGameplayCommon,0x80125580,0x1D8 asm/non_matchings/code/z_player_lib/func_80125CE0.s,func_80125CE0,0x80125CE0,0x1B -asm/non_matchings/code/z_player_lib/func_80125D4C.s,func_80125D4C,0x80125D4C,0x15F -asm/non_matchings/code/z_player_lib/func_801262C8.s,func_801262C8,0x801262C8,0x4D -asm/non_matchings/code/z_player_lib/func_801263FC.s,func_801263FC,0x801263FC,0x11 +asm/non_matchings/code/z_player_lib/Player_OverrideLimbDrawGameplayDefault.s,Player_OverrideLimbDrawGameplayDefault,0x80125D4C,0x15F +asm/non_matchings/code/z_player_lib/Player_OverrideLimbDrawGameplayFirstPerson.s,Player_OverrideLimbDrawGameplayFirstPerson,0x801262C8,0x4D +asm/non_matchings/code/z_player_lib/Player_OverrideLimbDrawGameplayCrawling.s,Player_OverrideLimbDrawGameplayCrawling,0x801263FC,0x11 asm/non_matchings/code/z_player_lib/func_80126440.s,func_80126440,0x80126440,0x62 -asm/non_matchings/code/z_player_lib/func_801265C8.s,func_801265C8,0x801265C8,0x35 +asm/non_matchings/code/z_player_lib/Player_UpdateShieldCollider.s,Player_UpdateShieldCollider,0x801265C8,0x35 asm/non_matchings/code/z_player_lib/func_8012669C.s,func_8012669C,0x8012669C,0x5B asm/non_matchings/code/z_player_lib/Player_DrawGetItemImpl.s,Player_DrawGetItemImpl,0x80126808,0x5D asm/non_matchings/code/z_player_lib/Player_DrawGetItem.s,Player_DrawGetItem,0x8012697C,0x4E @@ -1781,13 +1781,13 @@ asm/non_matchings/code/z_player_lib/Player_DrawCircusLeadersMask.s,Player_DrawCi asm/non_matchings/code/z_player_lib/Player_DrawBlastMask.s,Player_DrawBlastMask,0x801278F8,0x5A asm/non_matchings/code/z_player_lib/Player_DrawBunnyHood.s,Player_DrawBunnyHood,0x80127A60,0x41 asm/non_matchings/code/z_player_lib/func_80127B64.s,func_80127B64,0x80127B64,0x21 -asm/non_matchings/code/z_player_lib/func_80127BE8.s,func_80127BE8,0x80127BE8,0x6F +asm/non_matchings/code/z_player_lib/Player_DrawStrayFairyParticles.s,Player_DrawStrayFairyParticles,0x80127BE8,0x6F asm/non_matchings/code/z_player_lib/func_80127DA4.s,func_80127DA4,0x80127DA4,0x179 asm/non_matchings/code/z_player_lib/func_80128388.s,func_80128388,0x80128388,0x46 asm/non_matchings/code/z_player_lib/Player_DrawGreatFairysMask.s,Player_DrawGreatFairysMask,0x801284A0,0x68 asm/non_matchings/code/z_player_lib/func_80128640.s,func_80128640,0x80128640,0x14D -asm/non_matchings/code/z_player_lib/func_80128B74.s,func_80128B74,0x80128B74,0x17 -asm/non_matchings/code/z_player_lib/func_80128BD0.s,func_80128BD0,0x80128BD0,0x4C8 +asm/non_matchings/code/z_player_lib/Player_SetFeetPos.s,Player_SetFeetPos,0x80128B74,0x17 +asm/non_matchings/code/z_player_lib/Player_PostLimbDrawGameplay.s,Player_PostLimbDrawGameplay,0x80128BD0,0x4C8 asm/non_matchings/code/z_prenmi/PreNMI_Stop.s,PreNMI_Stop,0x80129EF0,0x5 asm/non_matchings/code/z_prenmi/PreNMI_Update.s,PreNMI_Update,0x80129F04,0x12 asm/non_matchings/code/z_prenmi/PreNMI_Draw.s,PreNMI_Draw,0x80129F4C,0x2B